waterpig 0.0.2 → 0.0.3

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: db7a5007559be201cc913b01edee19c68afb0d61
4
- data.tar.gz: 72b859955eee10491ae5d32e99e06980e68f2f97
3
+ metadata.gz: 8ed5b323d7bcf0a64a7293ea82e645b58326fd60
4
+ data.tar.gz: 3f0398db3f97c31de26a59f023ab2b712fc1c417
5
5
  SHA512:
6
- metadata.gz: 5f646dbdf3f5a1a6465f621cc792765f6c2e0d179a54d1a8ed1045b0d7f4ce4c10e8b0d56bba6ce7fc97e6f3904aae5f37aeff47abcfc4089e27eee401e5d373
7
- data.tar.gz: 22a721da50b21f1c74469706cfb2ee42e69074e9eaf6dcdab7b1eabe9fb88fda41bdbcc96b9a779728d2bb1dbee212697bc3665ffa62ddc59f45dc47ee0e016b
6
+ metadata.gz: 342026e48effcac08a611e6267bbc2e1e4ae5bdcf30a8938403b66dd16a78125c639325c6b0583c047edecbe15bcbe0233b09ea1e38377050ed23a6952b5b683
7
+ data.tar.gz: f01dc7cf6658df744b052b2061bea7d67f39a39cab7a4c8fdc55cd783dcca8c612557a1da20c227d4ed51eb9e13625d6c9651fc2feed4c408b2b71440cac2911
data/lib/waterpig.rb CHANGED
@@ -0,0 +1,6 @@
1
+ module Waterpig
2
+ end
3
+
4
+ puts "\n#{__FILE__}:#{__LINE__} => #{:here.inspect}"
5
+ require 'waterpig/browser-integration'
6
+ require 'waterpig/database-cleaner'
@@ -1,198 +1,32 @@
1
1
  require 'capybara/rspec'
2
2
  require 'stringio'
3
- #require 'capybara/email/rspec'
4
- #require 'rspec-steps'
3
+ require 'rspec-steps'
5
4
 
6
-
7
- begin
8
- require 'capybara/poltergeist'
9
- module Capybara::Poltergeist
10
- class Client
11
- private
12
- def redirect_stdout
13
- prev = STDOUT.dup
14
- prev.autoclose = false
15
- $stdout = @write_io
16
- STDOUT.reopen(@write_io)
17
-
18
- prev = STDERR.dup
19
- prev.autoclose = false
20
- $stderr = @write_io
21
- STDERR.reopen(@write_io)
22
- yield
23
- ensure
24
- STDOUT.reopen(prev)
25
- $stdout = STDOUT
26
- STDERR.reopen(prev)
27
- $stderr = STDERR
28
- end
29
- end
30
- end
31
-
32
- Capybara.register_driver :poltergeist_debug do |app|
33
- Capybara::Poltergeist::Driver.new(app, :inspector => true, phantomjs_logger: WarningSuppressor)
34
- end
35
- rescue LoadError
36
- end
37
-
38
- begin
39
- require 'selenium-webdriver'
40
- Capybara.register_driver(:selenium_chrome) do |app|
41
- Capybara::Selenium::Driver.new(app, :browser => :chrome)
42
- end
43
-
44
- rescue LoadError
45
- end
46
-
47
- class WarningSuppressor
48
- class << self
49
- def write(message)
50
- if message =~ /QFont::setPixelSize: Pixel size <= 0/ || message =~/CoreText performance note:/ then 0 else puts(message);1;end
51
- end
52
- end
53
- end
5
+ require 'waterpig/poltergeist'
6
+ require 'waterpig/selenium_chrome'
7
+ require 'waterpig/warning-suppressor'
8
+ require 'waterpig/save-and-open-on-fail'
9
+ require 'waterpig/ckeditor-tools'
10
+ require 'waterpig/tinymce-tools'
11
+ require 'waterpig/browser-tools'
12
+ require 'waterpig/snap-step'
54
13
 
55
14
  Capybara.default_driver = (ENV['CAPYBARA_DRIVER'] || :poltergeist_debug).to_sym
15
+ RSpec.configure do |config|
16
+ config.add_setting :waterpig_browser_types, :default => [:feature]
17
+ config.add_setting :waterpig_autosnap, :default => true
56
18
 
57
- module SaveAndOpenOnFail
58
- def instance_eval(&block)
59
- super(&block)
60
- rescue RSpec::Core::Pending::PendingDeclaredInExample
61
- raise
62
- rescue Object => ex
63
- begin
64
- wrapper = ex.exception("#{ex.message}\nLast view at: file://#{save_page}")
65
- wrapper.set_backtrace(ex.backtrace)
66
- raise wrapper
67
- rescue
68
- raise ex
69
- end
70
- end
71
- end
72
-
73
- module CKEditorTools
74
- def fill_in_ckeditor(id, options = {})
75
- raise "Must pass a hash containing 'with'" if not options.is_a?(Hash) or not options.has_key?(:with)
76
- raise "CKEeditor fill-in only works with Selenium driver" unless page.driver.class == Capybara::Selenium::Driver
77
- browser = page.driver.browser
78
- browser.execute_script("CKEDITOR.instances['#{id}'].setData('#{options[:with]}');")
79
- end
80
- end
81
-
82
- module TinyMCETools
83
- def fill_in_tinymce(id, options = {})
84
- content =
85
- case options
86
- when Hash
87
- content = options.fetch(:with)
88
- when String
89
- options
90
- else
91
- raise "Must pass a string or a hash containing 'with'"
92
- end
93
-
94
- case page.driver
95
- when Capybara::Selenium::Driver
96
- page.execute_script("$('##{id}').tinymce().setContent('#{content}')")
97
- when Capybara::Poltergeist::Driver
98
- within_frame("#{id}_ifr") do
99
- element = find("body")
100
- element.native.send_keys(content)
101
- end
102
- else
103
- raise "fill_in_tinymce called with unrecognized page.driver: #{page.driver.class.name}"
104
- end
105
- end
106
- end
107
-
108
-
109
- module BrowserTools
110
- def accept_alert
111
- if poltergeist?
112
- # do nothing ... really?
113
- # https://github.com/jonleighton/poltergeist/issues/50
114
- # Poltergeist's behavior is to return true to window.alert
115
- # Does mean it's a challenge to test cancelling e.g. deletes, or
116
- # confirming that an alert happens even
117
- else
118
- alert = page.driver.browser.switch_to.alert
119
- alert.accept
120
- end
121
- end
122
-
123
- def wait_for_animation
124
- sleep(1) if poltergeist?
125
- end
126
-
127
- def poltergeist?
128
- Capybara.javascript_driver.to_s =~ /poltergeist/
129
- end
130
-
131
- def self.warnings
132
- @warnings ||= {}
133
- end
134
-
135
- def self.warn(general, specific=nil)
136
- warnings.fetch(general) do
137
- warnings[general] = true
138
- puts "Warning: #{general}#{specific ? ": #{specific}" : ""}"
139
- end
140
- end
141
-
142
- #renders the xpath to properly match a css class (or other space separated
143
- #attribute)
144
- #Use like: div[#{attr_includes("class", "findme")}]
145
- #
146
- def attr_includes(attr, value)
147
- "contains(concat(' ', normalize-space(@#{attr}), ' '), ' #{value} ')"
148
- end
149
-
150
- def class_includes(value)
151
- attr_includes("class", value)
152
- end
153
-
154
- def frame_index(dir)
155
- @frame_dirs ||= Hash.new do |h,k|
156
- FileUtils.rm_rf(k)
157
- FileUtils.mkdir_p(k)
158
- h[k] = 0
159
- end
160
- @frame_dirs[dir] += 1
161
- end
162
-
163
- def save_snapshot(dir, name)
164
- require 'fileutils'
165
-
166
- dir = "tmp/#{dir}"
167
-
168
- path = "#{dir}/#{"%03i" % frame_index(dir)}-#{name}.png"
169
- page.driver.save_screenshot(path, :full => true)
170
-
171
- yield path if block_given?
172
- rescue Capybara::NotSupportedByDriverError => nsbde
173
- BrowserTools.warn("Can't use snapshot", nsbde.inspect)
174
- end
175
-
176
- def snapshot(dir)
177
- save_snapshot(dir, "debug") do |path|
178
- msg = "Saved screenshot: #{path} (from: #{caller[0].sub(/^#{Dir.pwd}/,'')})"
179
- puts msg
180
- Rails.logger.info(msg)
181
- end
182
- end
183
- end
184
-
185
- module SnapStep
186
- def self.included(steps)
187
- steps.after(:step) do
188
- save_snapshot(example.metadata[:snapshots_into], example.description.downcase.gsub(/\s+/, "-"))
19
+ if defined?(Timecop)
20
+ config.after :all, :type => proc{|value| config.waterpig_browser_types.include?(value)} do
21
+ Timecop.return
189
22
  end
190
23
  end
191
- end
192
24
 
193
- RSpec.configure do |config|
194
- config.include BrowserTools, :type => :feature
195
- config.include TinyMCETools, :type => :feature
25
+ config.include Waterpig::BrowserTools, :type => proc{|value| config.waterpig_browser_types.include?(value) }
26
+ config.include Waterpig::TinyMCETools, :type => proc{|value| config.waterpig_browser_types.include?(value) }
196
27
 
197
- config.include SnapStep, :snapshots_into => proc{|v| v.is_a? String}
28
+ config.include Waterpig::AutoSnap, :type => proc{|value|
29
+ config.waterpig_autosnap? && config.waterpig_browser_types.include?(value)
30
+ }
31
+ config.include Waterpig::SnapStep, :snapshots_into => proc{|v| v.is_a? String}
198
32
  end
@@ -0,0 +1,77 @@
1
+ module Waterpig
2
+ module BrowserTools
3
+ def accept_alert
4
+ if poltergeist?
5
+ # do nothing ... really?
6
+ # https://github.com/jonleighton/poltergeist/issues/50
7
+ # Poltergeist's behavior is to return true to window.alert
8
+ # Does mean it's a challenge to test cancelling e.g. deletes, or
9
+ # confirming that an alert happens even
10
+ else
11
+ alert = page.driver.browser.switch_to.alert
12
+ alert.accept
13
+ end
14
+ end
15
+
16
+ def wait_for_animation
17
+ sleep(1) if poltergeist?
18
+ end
19
+
20
+ def poltergeist?
21
+ Capybara.javascript_driver.to_s =~ /poltergeist/
22
+ end
23
+
24
+ def self.warnings
25
+ @warnings ||= {}
26
+ end
27
+
28
+ def self.warn(general, specific=nil)
29
+ warnings.fetch(general) do
30
+ warnings[general] = true
31
+ puts "Warning: #{general}#{specific ? ": #{specific}" : ""}"
32
+ end
33
+ end
34
+
35
+ #renders the xpath to properly match a css class (or other space separated
36
+ #attribute)
37
+ #Use like: div[#{attr_includes("class", "findme")}]
38
+ #
39
+ def attr_includes(attr, value)
40
+ "contains(concat(' ', normalize-space(@#{attr}), ' '), ' #{value} ')"
41
+ end
42
+
43
+ def class_includes(value)
44
+ attr_includes("class", value)
45
+ end
46
+
47
+ def frame_index(dir)
48
+ @frame_dirs ||= Hash.new do |h,k|
49
+ FileUtils.rm_rf(k)
50
+ FileUtils.mkdir_p(k)
51
+ h[k] = 0
52
+ end
53
+ @frame_dirs[dir] += 1
54
+ end
55
+
56
+ def save_snapshot(dir, name)
57
+ require 'fileutils'
58
+
59
+ dir = "tmp/#{dir}"
60
+
61
+ path = "#{dir}/#{"%03i" % frame_index(dir)}-#{name}.png"
62
+ page.driver.save_screenshot(path, :full => true)
63
+
64
+ yield path if block_given?
65
+ rescue Capybara::NotSupportedByDriverError => nsbde
66
+ BrowserTools.warn("Can't use snapshot", nsbde.inspect)
67
+ end
68
+
69
+ def snapshot(dir)
70
+ save_snapshot(dir, "debug") do |path|
71
+ msg = "Saved screenshot: #{path} (from: #{caller[0].sub(/^#{Dir.pwd}/,'')})"
72
+ puts msg
73
+ Rails.logger.info(msg)
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,10 @@
1
+ module Waterpig
2
+ module CKEditorTools
3
+ def fill_in_ckeditor(id, options = {})
4
+ raise "Must pass a hash containing 'with'" if not options.is_a?(Hash) or not options.has_key?(:with)
5
+ raise "CKEeditor fill-in only works with Selenium driver" unless page.driver.class == Capybara::Selenium::Driver
6
+ browser = page.driver.browser
7
+ browser.execute_script("CKEDITOR.instances['#{id}'].setData('#{options[:with]}');")
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,43 @@
1
+ require 'database_cleaner'
2
+
3
+ RSpec.configure do |config|
4
+ #config.use_transactional_fixtures = false
5
+ DatabaseCleaner.strategy = :transaction
6
+
7
+ config.add_setting :waterpig_truncation_types, :default => [:feature]
8
+ config.add_setting :waterpig_exclude_seeds_types, :default => []
9
+ config.add_setting :waterpig_database_truncation_config, :default => {:except => %w[spatial_ref_sys]}
10
+ config.add_setting :waterpig_db_seeds, :default => 'db/seeds.rb'
11
+
12
+ config.before :all, :type => proc{ |value| config.waterpig_truncation_types.include?(value)} do
13
+ Rails.application.config.action_dispatch.show_exceptions = true
14
+ DatabaseCleaner.clean_with :truncation, config.waterpig_database_truncation_config
15
+ unless config.waterpig_exclude_seeds_types.include?(self.class.metadata[:type])
16
+ if config.waterpig_db_seeds?
17
+ load config.waterpig_db_seeds
18
+ end
19
+ end
20
+ end
21
+
22
+ config.after :all, :type => proc{ |value| config.waterpig_truncation_types.include?(value)} do
23
+ DatabaseCleaner.clean_with :truncation, config.waterpig_database_truncation_config
24
+ if config.waterpig_db_seeds?
25
+ load config.waterpig_db_seeds
26
+ end
27
+ end
28
+
29
+ config.before :each, :type => proc{ |value| !config.waterpig_truncation_types.include?(value) } do
30
+ DatabaseCleaner.start
31
+ end
32
+
33
+ config.after :each, :type => proc{ |value| !config.waterpig_truncation_types.include?(value) } do
34
+ DatabaseCleaner.clean
35
+ end
36
+
37
+ config.before :suite do
38
+ DatabaseCleaner.clean_with :truncation, config.waterpig_database_truncation_config
39
+ if config.waterpig_db_seeds?
40
+ load config.waterpig_db_seeds
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,31 @@
1
+
2
+ begin
3
+ require 'capybara/poltergeist'
4
+ module Capybara::Poltergeist
5
+ class Client
6
+ private
7
+ def redirect_stdout
8
+ prev = STDOUT.dup
9
+ prev.autoclose = false
10
+ $stdout = @write_io
11
+ STDOUT.reopen(@write_io)
12
+
13
+ prev = STDERR.dup
14
+ prev.autoclose = false
15
+ $stderr = @write_io
16
+ STDERR.reopen(@write_io)
17
+ yield
18
+ ensure
19
+ STDOUT.reopen(prev)
20
+ $stdout = STDOUT
21
+ STDERR.reopen(prev)
22
+ $stderr = STDERR
23
+ end
24
+ end
25
+ end
26
+
27
+ Capybara.register_driver :poltergeist_debug do |app|
28
+ Capybara::Poltergeist::Driver.new(app, :inspector => true, phantomjs_logger: Waterpig::WarningSuppressor)
29
+ end
30
+ rescue LoadError
31
+ end
@@ -0,0 +1,17 @@
1
+ module Waterpig
2
+ module SaveAndOpenOnFail
3
+ def instance_eval(&block)
4
+ super(&block)
5
+ rescue RSpec::Core::Pending::PendingDeclaredInExample
6
+ raise
7
+ rescue Object => ex
8
+ begin
9
+ wrapper = ex.exception("#{ex.message}\nLast view at: file://#{save_page}")
10
+ wrapper.set_backtrace(ex.backtrace)
11
+ raise wrapper
12
+ rescue
13
+ raise ex
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,8 @@
1
+ begin
2
+ require 'selenium-webdriver'
3
+ Capybara.register_driver(:selenium_chrome) do |app|
4
+ Capybara::Selenium::Driver.new(app, :browser => :chrome)
5
+ end
6
+
7
+ rescue LoadError
8
+ end
@@ -0,0 +1,15 @@
1
+ module Waterpig
2
+ module SnapStep
3
+ def self.included(steps)
4
+ steps.after(:step) do
5
+ save_snapshot(example.metadata[:snapshots_into], example.description.downcase.gsub(/\s+/, "-"))
6
+ end
7
+ end
8
+ end
9
+
10
+ module AutoSnap
11
+ def self.included(group)
12
+ group.metadata[:snapshots_into] = group.metadata[:example_group][:description_args].first.downcase.gsub(/\W+/, "_").sub(/^_*/,'').sub(/_*$/,'')
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,27 @@
1
+ module Waterpig
2
+ module TinyMCETools
3
+ def fill_in_tinymce(id, options = {})
4
+ content =
5
+ case options
6
+ when Hash
7
+ content = options.fetch(:with)
8
+ when String
9
+ options
10
+ else
11
+ raise "Must pass a string or a hash containing 'with'"
12
+ end
13
+
14
+ case page.driver
15
+ when Capybara::Selenium::Driver
16
+ page.execute_script("$('##{id}').tinymce().setContent('#{content}')")
17
+ when Capybara::Poltergeist::Driver
18
+ within_frame("#{id}_ifr") do
19
+ element = find("body")
20
+ element.native.send_keys(content)
21
+ end
22
+ else
23
+ raise "fill_in_tinymce called with unrecognized page.driver: #{page.driver.class.name}"
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,9 @@
1
+ module Waterpig
2
+ class WarningSuppressor
3
+ class << self
4
+ def write(message)
5
+ if message =~ /QFont::setPixelSize: Pixel size <= 0/ || message =~/CoreText performance note:/ then 0 else puts(message);1;end
6
+ end
7
+ end
8
+ end
9
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: waterpig
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Judson Lester
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-07 00:00:00.000000000 Z
11
+ date: 2014-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capybara
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: 2.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: database_cleaner
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.3.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 1.3.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec-steps
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 0.4.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.4.1
27
55
  description: |2
28
56
  Because waterpig is what the scientific name for a capybara translates to, that's why.
29
57
  email:
@@ -33,7 +61,16 @@ extensions: []
33
61
  extra_rdoc_files: []
34
62
  files:
35
63
  - lib/waterpig.rb
64
+ - lib/waterpig/save-and-open-on-fail.rb
65
+ - lib/waterpig/ckeditor-tools.rb
66
+ - lib/waterpig/selenium_chrome.rb
67
+ - lib/waterpig/database-cleaner.rb
68
+ - lib/waterpig/tinymce-tools.rb
36
69
  - lib/waterpig/browser-integration.rb
70
+ - lib/waterpig/poltergeist.rb
71
+ - lib/waterpig/warning-suppressor.rb
72
+ - lib/waterpig/snap-step.rb
73
+ - lib/waterpig/browser-tools.rb
37
74
  - spec/embarrassing.rb
38
75
  - spec_help/spec_helper.rb
39
76
  - spec_help/gem_test_suite.rb
@@ -47,7 +84,7 @@ rdoc_options:
47
84
  - --main
48
85
  - doc/README
49
86
  - --title
50
- - waterpig-0.0.2 Documentation
87
+ - waterpig-0.0.3 Documentation
51
88
  require_paths:
52
89
  - lib/
53
90
  required_ruby_version: !ruby/object:Gem::Requirement