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 +7 -0
- data/lib/waterpig/browser-integration.rb +198 -0
- data/lib/waterpig.rb +0 -0
- data/spec/embarrassing.rb +8 -0
- data/spec_help/gem_test_suite.rb +17 -0
- data/spec_help/spec_helper.rb +9 -0
- metadata +56 -0
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,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
|