waterpig 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c53da399375f22199a82447c9528040ee4dbd9e9
4
+ data.tar.gz: 6d96a21a95ffce3af87cb1a0ec3b214d566cba15
5
+ SHA512:
6
+ metadata.gz: 226d1b5d0e1f18f443416428576669191949675c711ea1fba65659f53bf8dd3a90172511d85551018aa8caa20b3e433485dea71b03d34f26e53de801de3c5e27
7
+ data.tar.gz: 74ed73570a9e0c1713ffd76ca08b1ad5a20234e4d510f3191feab8c30cd1692e0c64a0bfcdc99aa4c9ae6a13077037057efec3c3ec46cdb13fbf6950ac25568b
@@ -0,0 +1,198 @@
1
+ require 'capybara/rspec'
2
+ require 'stringio'
3
+ #require 'capybara/email/rspec'
4
+ #require 'rspec-steps'
5
+
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
54
+
55
+ Capybara.default_driver = (ENV['CAPYBARA_DRIVER'] || :poltergeist_debug).to_sym
56
+
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+/, "-"))
189
+ end
190
+ end
191
+ end
192
+
193
+ RSpec.configure do |config|
194
+ config.include BrowserTools, :type => :feature
195
+ config.include TinyMCETools, :type => :feature
196
+
197
+ config.include SnapStep, :snapshots_into => proc{|v| v.is_a? String}
198
+ end
data/lib/waterpig.rb ADDED
File without changes
@@ -0,0 +1,8 @@
1
+ require 'waterpig'
2
+ require 'waterpig/browser-integration'
3
+
4
+ describe "Nothing" do
5
+ it "should do more" do
6
+ puts "These tests really have to test the code"
7
+ end
8
+ end
@@ -0,0 +1,17 @@
1
+ puts Dir::pwd
2
+ require 'test/unit'
3
+ begin
4
+ require 'spec'
5
+ rescue LoadError
6
+ false
7
+ end
8
+
9
+ class RSpecTest < Test::Unit::TestCase
10
+ def test_that_rspec_is_available
11
+ assert_nothing_raised("\n\n * RSpec isn't available - please run: gem install rspec *\n\n"){ ::Spec }
12
+ end
13
+
14
+ def test_that_specs_pass
15
+ assert(system(*%w{spec -f e -p **/*.rb spec}),"\n\n * Specs failed *\n\n")
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ require 'rspec'
2
+ require 'rspec/core/formatters/base_formatter'
3
+ require 'cadre/rspec'
4
+
5
+ RSpec.configure do |config|
6
+ config.run_all_when_everything_filtered = true
7
+ config.add_formatter(Cadre::RSpec::NotifyOnCompleteFormatter)
8
+ config.add_formatter(Cadre::RSpec::QuickfixFormatter)
9
+ end
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: waterpig
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Judson Lester
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-06-06 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |2
14
+ Because waterpig is what the scientific name for a capybara translates to, that's why.
15
+ email:
16
+ - nyarly@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/waterpig.rb
22
+ - lib/waterpig/browser-integration.rb
23
+ - spec/embarrassing.rb
24
+ - spec_help/spec_helper.rb
25
+ - spec_help/gem_test_suite.rb
26
+ homepage: http://nyarly.github.com/waterpig
27
+ licenses:
28
+ - MIT
29
+ metadata: {}
30
+ post_install_message:
31
+ rdoc_options:
32
+ - --inline-source
33
+ - --main
34
+ - doc/README
35
+ - --title
36
+ - waterpig-0.0.1 Documentation
37
+ require_paths:
38
+ - lib/
39
+ required_ruby_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ required_rubygems_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ requirements: []
50
+ rubyforge_project: waterpig
51
+ rubygems_version: 2.0.14
52
+ signing_key:
53
+ specification_version: 4
54
+ summary: Capybara helper stuff
55
+ test_files:
56
+ - spec_help/gem_test_suite.rb