waterpig 0.0.2 → 0.0.3

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: 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