baraviz 0.6.pre → 0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 900176eb3b4b0996216de4f6a5d73252add19d39
4
- data.tar.gz: 39e7d85f1b8d8f76ad2665f737722ccc65b22bb5
3
+ metadata.gz: 1ca77798ad727c9d667210f2a80c436f33dfc3a0
4
+ data.tar.gz: f9bd0856938c22c7a48a2d0523099977c8601cbe
5
5
  SHA512:
6
- metadata.gz: 95f50decc62c0ffa825b0177c9a538e9a15fa29fc1bd1e5e325c0ce7870284e9d4a41882d094cfb956c11d383d406b6304aa9b2c06261cac2b0a996c7ef0759f
7
- data.tar.gz: 787bbdb31a9c3b411caec54fb9bf1fe1864565636e44e6efa550125ebc1f8931046e2a588350c9b3321e50e2343c32073c97fc94ea7b9acb85a593158fbce075
6
+ metadata.gz: 752736d2a33dc3d7270a3e89f9f980437ded814f2f4ba4573e640eea2ea0936988faf6eef279ed63bb01c620e8136a48107c891b566d827129b1dcae59d362d3
7
+ data.tar.gz: ce02663831dd584bf59bb81665c86f7195fa59c83c99777c62744f4049f4c2fc6029d5a46032df624810ba1bb4e4e224c8ab3b7fa9803aeb5fd214a5e550e8f0
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_dependency 'capybara', '>= 0.3.5'
23
23
  spec.add_dependency 'rgl', '>= 0.4'
24
+ spec.add_dependency 'capybara-screenshot', '>= 1.0'
24
25
  spec.add_development_dependency 'bundler', '~> 1.16'
25
26
  spec.add_development_dependency 'rake', '~> 10.0'
26
27
  end
@@ -1,24 +1,30 @@
1
1
  require 'cucumber/formatter/io'
2
2
  require 'rgl/dot'
3
- require_relative 'observer'
3
+ require_relative 'screenshot_observer'
4
4
 
5
5
  module Baraviz
6
6
  class CucumberFormatter
7
7
  include Cucumber::Formatter::Io
8
8
 
9
9
  def initialize config
10
- @io = ensure_io config.out_stream
10
+ @io = ensure_file config.out_stream, Baraviz.name
11
11
  config.on_event :test_run_started, &method(:on_test_run_started)
12
12
  config.on_event :test_run_finished, &method(:on_test_run_finished)
13
+ config.on_event :test_case_finished, &method(:on_test_case_finished)
13
14
  end
14
15
 
15
16
  def on_test_run_started event
16
- @observer = Baraviz::Observer.new Capybara.current_session
17
+ screenshot_dir = File.dirname @io.path
18
+ @observer = Baraviz::ScreenshotObserver.new Capybara.current_session, screenshot_dir
17
19
  end
18
20
 
19
21
  def on_test_run_finished event
20
- @io.write @observer.clustered_graph.to_s
22
+ @io.write @observer.graph.to_s
21
23
  @io.close
22
24
  end
25
+
26
+ def on_test_case_finished event
27
+ @observer.forget_next!
28
+ end
23
29
  end
24
30
  end
@@ -4,10 +4,12 @@ require 'capybara'
4
4
 
5
5
  module Baraviz
6
6
  class Observer
7
- attr_reader :graph
7
+ attr_accessor :external_call
8
8
 
9
9
  def initialize session
10
10
  @graph = RGL::DirectedAdjacencyGraph.new
11
+ @forget_next = false
12
+ @external_call = true
11
13
  install_capybara_hooks! session
12
14
  end
13
15
 
@@ -16,21 +18,62 @@ module Baraviz
16
18
  Capybara::Session::DSL_METHODS.each do |method|
17
19
  session.define_singleton_method :"_#{method}_old", &session.method(method)
18
20
  session.define_singleton_method method do |*args, &block|
19
- old_page = session.method(:"_current_url_old").call
20
- result = session.method(:"_#{method}_old").call(*args, &block)
21
- new_page = session.method(:"_current_url_old").call
21
+ external_call = this.external_call
22
+ this.external_call = false
22
23
 
23
- if old_page != new_page
24
- this.observe_page_change old_page, new_page
25
- end
24
+ begin
25
+ old_page = session.method(:"_current_url_old").call
26
+ this.observe_page old_page if external_call
27
+
28
+ result = session.method(:"_#{method}_old").call(*args, &block)
29
+ new_page = session.method(:"_current_url_old").call
30
+ this.observe_page new_page if external_call
31
+
32
+ if external_call && old_page != new_page
33
+ this.observe_page_change old_page, new_page
34
+ end
26
35
 
27
- result
36
+ result
37
+ ensure
38
+ this.external_call = true if external_call
39
+ end
28
40
  end
29
41
  end
30
42
  end
31
43
 
44
+ def forget_next!
45
+ @forget_next = true
46
+ end
47
+
48
+ def observe_page page
49
+ # Called for subclasses
50
+ end
51
+
32
52
  def observe_page_change old_page, new_page
33
- @graph.add_edge old_page, new_page
53
+ @graph.add_edge old_page, new_page unless @forget_next
54
+ @forget_next = false
55
+ end
56
+
57
+ def make_node v
58
+ uri = URI.parse v.to_s
59
+ RGL::DOT::Node.new({'name' => v, 'label' => uri.path})
60
+ end
61
+
62
+ def make_edge u, v
63
+ RGL::DOT::DirectedEdge.new('from' => u, 'to' => v)
64
+ end
65
+
66
+ def graph
67
+ graph = RGL::DOT::Digraph.new
68
+ @graph.each_vertex do |v|
69
+ graph << make_node(v)
70
+ end
71
+
72
+ @graph.each_edge do |u, v|
73
+ graph << make_edge(u, v)
74
+ end
75
+
76
+ graph
34
77
  end
35
78
 
36
79
  def clustered_graph
@@ -41,13 +84,13 @@ module Baraviz
41
84
  @graph.each_vertex do |v|
42
85
  uri = URI.parse v.to_s
43
86
  subgraph = subgraphs[[uri.host, uri.port]]
44
- subgraph << RGL::DOT::Node.new('name' => v, 'label' => v.to_s)
87
+ subgraph << make_node(v)
45
88
  end
46
89
 
47
90
  graph = RGL::DOT::Digraph.new
48
91
  subgraphs.values.each &graph.method(:<<)
49
92
  @graph.each_edge do |u, v|
50
- graph << RGL::DOT::DirectedEdge.new('from' => u, 'to' => v)
93
+ graph << make_edge(u, v)
51
94
  end
52
95
 
53
96
  graph
@@ -0,0 +1,31 @@
1
+ require 'capybara-screenshot'
2
+ require_relative 'observer'
3
+
4
+ module Baraviz
5
+ class ScreenshotObserver < Observer
6
+ def initialize session, screenshot_dir
7
+ @screenshots = {}
8
+ @dir = screenshot_dir
9
+ super session
10
+ end
11
+
12
+ def observe_page page
13
+ @screenshots[page] ||= take_screenshot
14
+ super
15
+ end
16
+
17
+ def take_screenshot
18
+ path = File.join @dir, "#{Capybara.current_url.gsub(/[^A-Za-z0-9_\-]/, '-')}.png"
19
+ result = Capybara::Screenshot.registered_drivers.fetch(Capybara.current_driver) do |driver_name|
20
+ warn "capybara-screenshot could not detect a screenshot driver for '#{Capybara.current_driver}'. Saving with default with unknown results."
21
+ Capybara::Screenshot.registered_drivers[:default]
22
+ end.call(Capybara.page.driver, path)
23
+ if (result == :not_supported) then nil else File.basename(path) end
24
+ end
25
+
26
+ def make_node v
27
+ uri = URI.parse v.to_s
28
+ RGL::DOT::Node.new({'name' => v, 'label' => uri.path, 'image' => @screenshots[v], 'URL' => @screenshots[v]}, RGL::DOT::NODE_OPTS + ['image'])
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,3 @@
1
1
  module Baraviz
2
- VERSION = "0.6.pre"
2
+ VERSION = "0.7"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: baraviz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.pre
4
+ version: '0.7'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Worthington
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-06 00:00:00.000000000 Z
11
+ date: 2018-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capybara
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: capybara-screenshot
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +94,7 @@ files:
80
94
  - lib/baraviz.rb
81
95
  - lib/baraviz/cucumber_formatter.rb
82
96
  - lib/baraviz/observer.rb
97
+ - lib/baraviz/screenshot_observer.rb
83
98
  - lib/baraviz/version.rb
84
99
  homepage: https://github.com/simonwo/baraviz
85
100
  licenses:
@@ -96,9 +111,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
96
111
  version: '0'
97
112
  required_rubygems_version: !ruby/object:Gem::Requirement
98
113
  requirements:
99
- - - ">"
114
+ - - ">="
100
115
  - !ruby/object:Gem::Version
101
- version: 1.3.1
116
+ version: '0'
102
117
  requirements: []
103
118
  rubyforge_project:
104
119
  rubygems_version: 2.6.13