baraviz 0.6.pre → 0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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