nimboids-capybara 1.1.2

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.
Files changed (105) hide show
  1. data/History.txt +289 -0
  2. data/README.rdoc +722 -0
  3. data/lib/capybara.rb +252 -0
  4. data/lib/capybara/cucumber.rb +28 -0
  5. data/lib/capybara/driver/base.rb +64 -0
  6. data/lib/capybara/driver/node.rb +74 -0
  7. data/lib/capybara/dsl.rb +168 -0
  8. data/lib/capybara/node/actions.rb +162 -0
  9. data/lib/capybara/node/base.rb +63 -0
  10. data/lib/capybara/node/document.rb +25 -0
  11. data/lib/capybara/node/element.rb +201 -0
  12. data/lib/capybara/node/finders.rb +197 -0
  13. data/lib/capybara/node/matchers.rb +417 -0
  14. data/lib/capybara/node/simple.rb +132 -0
  15. data/lib/capybara/rack_test/browser.rb +121 -0
  16. data/lib/capybara/rack_test/driver.rb +80 -0
  17. data/lib/capybara/rack_test/form.rb +80 -0
  18. data/lib/capybara/rack_test/node.rb +105 -0
  19. data/lib/capybara/rails.rb +17 -0
  20. data/lib/capybara/rspec.rb +26 -0
  21. data/lib/capybara/rspec/features.rb +22 -0
  22. data/lib/capybara/rspec/matchers.rb +154 -0
  23. data/lib/capybara/selector.rb +89 -0
  24. data/lib/capybara/selenium/driver.rb +163 -0
  25. data/lib/capybara/selenium/node.rb +91 -0
  26. data/lib/capybara/server.rb +90 -0
  27. data/lib/capybara/session.rb +321 -0
  28. data/lib/capybara/spec/driver.rb +301 -0
  29. data/lib/capybara/spec/fixtures/capybara.jpg +3 -0
  30. data/lib/capybara/spec/fixtures/test_file.txt +1 -0
  31. data/lib/capybara/spec/public/test.js +43 -0
  32. data/lib/capybara/spec/session.rb +154 -0
  33. data/lib/capybara/spec/session/all_spec.rb +78 -0
  34. data/lib/capybara/spec/session/attach_file_spec.rb +73 -0
  35. data/lib/capybara/spec/session/check_spec.rb +65 -0
  36. data/lib/capybara/spec/session/choose_spec.rb +26 -0
  37. data/lib/capybara/spec/session/click_button_spec.rb +304 -0
  38. data/lib/capybara/spec/session/click_link_or_button_spec.rb +36 -0
  39. data/lib/capybara/spec/session/click_link_spec.rb +119 -0
  40. data/lib/capybara/spec/session/current_host_spec.rb +68 -0
  41. data/lib/capybara/spec/session/current_url_spec.rb +15 -0
  42. data/lib/capybara/spec/session/fill_in_spec.rb +125 -0
  43. data/lib/capybara/spec/session/find_button_spec.rb +18 -0
  44. data/lib/capybara/spec/session/find_by_id_spec.rb +18 -0
  45. data/lib/capybara/spec/session/find_field_spec.rb +26 -0
  46. data/lib/capybara/spec/session/find_link_spec.rb +19 -0
  47. data/lib/capybara/spec/session/find_spec.rb +149 -0
  48. data/lib/capybara/spec/session/first_spec.rb +105 -0
  49. data/lib/capybara/spec/session/has_button_spec.rb +32 -0
  50. data/lib/capybara/spec/session/has_content_spec.rb +106 -0
  51. data/lib/capybara/spec/session/has_css_spec.rb +243 -0
  52. data/lib/capybara/spec/session/has_field_spec.rb +192 -0
  53. data/lib/capybara/spec/session/has_link_spec.rb +37 -0
  54. data/lib/capybara/spec/session/has_select_spec.rb +129 -0
  55. data/lib/capybara/spec/session/has_selector_spec.rb +129 -0
  56. data/lib/capybara/spec/session/has_table_spec.rb +96 -0
  57. data/lib/capybara/spec/session/has_xpath_spec.rb +123 -0
  58. data/lib/capybara/spec/session/headers.rb +19 -0
  59. data/lib/capybara/spec/session/javascript.rb +289 -0
  60. data/lib/capybara/spec/session/response_code.rb +19 -0
  61. data/lib/capybara/spec/session/select_spec.rb +113 -0
  62. data/lib/capybara/spec/session/text_spec.rb +19 -0
  63. data/lib/capybara/spec/session/uncheck_spec.rb +21 -0
  64. data/lib/capybara/spec/session/unselect_spec.rb +61 -0
  65. data/lib/capybara/spec/session/within_spec.rb +178 -0
  66. data/lib/capybara/spec/test_app.rb +142 -0
  67. data/lib/capybara/spec/views/buttons.erb +4 -0
  68. data/lib/capybara/spec/views/fieldsets.erb +29 -0
  69. data/lib/capybara/spec/views/form.erb +365 -0
  70. data/lib/capybara/spec/views/frame_one.erb +8 -0
  71. data/lib/capybara/spec/views/frame_two.erb +8 -0
  72. data/lib/capybara/spec/views/header_links.erb +7 -0
  73. data/lib/capybara/spec/views/host_links.erb +12 -0
  74. data/lib/capybara/spec/views/popup_one.erb +8 -0
  75. data/lib/capybara/spec/views/popup_two.erb +8 -0
  76. data/lib/capybara/spec/views/postback.erb +13 -0
  77. data/lib/capybara/spec/views/tables.erb +122 -0
  78. data/lib/capybara/spec/views/with_html.erb +78 -0
  79. data/lib/capybara/spec/views/with_html_entities.erb +1 -0
  80. data/lib/capybara/spec/views/with_js.erb +48 -0
  81. data/lib/capybara/spec/views/with_scope.erb +36 -0
  82. data/lib/capybara/spec/views/with_simple_html.erb +1 -0
  83. data/lib/capybara/spec/views/within_frames.erb +10 -0
  84. data/lib/capybara/spec/views/within_popups.erb +25 -0
  85. data/lib/capybara/util/save_and_open_page.rb +44 -0
  86. data/lib/capybara/util/timeout.rb +27 -0
  87. data/lib/capybara/version.rb +3 -0
  88. data/spec/basic_node_spec.rb +77 -0
  89. data/spec/capybara_spec.rb +46 -0
  90. data/spec/driver/rack_test_driver_spec.rb +89 -0
  91. data/spec/driver/selenium_driver_spec.rb +50 -0
  92. data/spec/dsl_spec.rb +253 -0
  93. data/spec/fixtures/selenium_driver_rspec_failure.rb +8 -0
  94. data/spec/fixtures/selenium_driver_rspec_success.rb +8 -0
  95. data/spec/rspec/features_spec.rb +45 -0
  96. data/spec/rspec/matchers_spec.rb +495 -0
  97. data/spec/rspec_spec.rb +53 -0
  98. data/spec/save_and_open_page_spec.rb +155 -0
  99. data/spec/server_spec.rb +89 -0
  100. data/spec/session/rack_test_session_spec.rb +55 -0
  101. data/spec/session/selenium_session_spec.rb +26 -0
  102. data/spec/spec_helper.rb +30 -0
  103. data/spec/string_spec.rb +77 -0
  104. data/spec/timeout_spec.rb +28 -0
  105. metadata +346 -0
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ describe Capybara do
4
+
5
+ describe 'default_wait_time' do
6
+ after do
7
+ Capybara.default_wait_time = @previous_default_time
8
+ end
9
+
10
+ it "should be changeable" do
11
+ @previous_default_time = Capybara.default_wait_time
12
+ Capybara.default_wait_time = 5
13
+ Capybara.default_wait_time.should == 5
14
+ end
15
+ end
16
+
17
+ describe '.register_driver' do
18
+ it "should add a new driver" do
19
+ Capybara.register_driver :schmoo do |app|
20
+ Capybara::RackTest::Driver.new(app)
21
+ end
22
+ session = Capybara::Session.new(:schmoo, TestApp)
23
+ session.visit('/')
24
+ session.body.should include("Hello world!")
25
+ end
26
+ end
27
+
28
+ describe ".server" do
29
+ after do
30
+ Capybara.server {|app, port| Capybara.run_default_server(app, port)}
31
+ end
32
+
33
+ it "should default to a proc that calls run_default_server" do
34
+ mock_app = mock('app')
35
+ Capybara.should_receive(:run_default_server).with(mock_app, 8000)
36
+ Capybara.server.call(mock_app, 8000)
37
+ end
38
+
39
+ it "should return a custom server proc" do
40
+ server = lambda {|app, port|}
41
+ Capybara.server(&server)
42
+ Capybara.server.should == server
43
+ end
44
+ end
45
+
46
+ end
@@ -0,0 +1,89 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'stringio'
4
+
5
+ def capture(*streams)
6
+ streams.map! { |stream| stream.to_s }
7
+ begin
8
+ result = StringIO.new
9
+ streams.each { |stream| eval "$#{stream} = result" }
10
+ yield
11
+ ensure
12
+ streams.each { |stream| eval("$#{stream} = #{stream.upcase}") }
13
+ end
14
+ result.string
15
+ end
16
+
17
+ describe Capybara::RackTest::Driver do
18
+ before do
19
+ @driver = TestSessions::RackTest.driver
20
+ end
21
+
22
+ it "should throw an error when no rack app is given" do
23
+ running do
24
+ Capybara::RackTest::Driver.new(nil)
25
+ end.should raise_error(ArgumentError)
26
+ end
27
+
28
+ it_should_behave_like "driver"
29
+ it_should_behave_like "driver with header support"
30
+ it_should_behave_like "driver with status code support"
31
+ it_should_behave_like "driver with cookies support"
32
+ it_should_behave_like "driver with infinite redirect detection"
33
+
34
+ describe '#reset!' do
35
+ it { @driver.visit('/foo'); lambda { @driver.reset! }.should change(@driver, :current_url).to('') }
36
+
37
+ it 'should reset headers' do
38
+ @driver.header('FOO', 'BAR')
39
+ @driver.visit('/get_header')
40
+ @driver.body.should include('BAR')
41
+
42
+ @driver.reset!
43
+ @driver.visit('/get_header')
44
+ @driver.body.should_not include('BAR')
45
+ end
46
+
47
+ it 'should reset response' do
48
+ @driver.visit('/foo')
49
+ lambda { @driver.response }.should_not raise_error
50
+ @driver.reset!
51
+ lambda { @driver.response }.should raise_error
52
+ end
53
+
54
+ it 'should request response' do
55
+ @driver.visit('/foo')
56
+ lambda { @driver.request }.should_not raise_error
57
+ @driver.reset!
58
+ lambda { @driver.request }.should raise_error
59
+ end
60
+ end
61
+
62
+ describe ':headers option' do
63
+ it 'should always set headers' do
64
+ @driver = Capybara::RackTest::Driver.new(TestApp, :headers => {'HTTP_FOO' => 'foobar'})
65
+ @driver.visit('/get_header')
66
+ @driver.body.should include('foobar')
67
+ end
68
+
69
+ it 'should keep headers on link clicks' do
70
+ @driver = Capybara::RackTest::Driver.new(TestApp, :headers => {'HTTP_FOO' => 'foobar'})
71
+ @driver.visit('/header_links')
72
+ @driver.find('.//a').first.click
73
+ @driver.body.should include('foobar')
74
+ end
75
+
76
+ it 'should keep headers on form submit' do
77
+ @driver = Capybara::RackTest::Driver.new(TestApp, :headers => {'HTTP_FOO' => 'foobar'})
78
+ @driver.visit('/header_links')
79
+ @driver.find('.//input').first.click
80
+ @driver.body.should include('foobar')
81
+ end
82
+
83
+ it 'should keep headers on redirects' do
84
+ @driver = Capybara::RackTest::Driver.new(TestApp, :headers => {'HTTP_FOO' => 'foobar'})
85
+ @driver.visit('/get_header_via_redirect')
86
+ @driver.body.should include('foobar')
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+ require 'rbconfig'
3
+
4
+ describe Capybara::Selenium::Driver do
5
+ before do
6
+ @driver = TestSessions::Selenium.driver
7
+ end
8
+
9
+ it_should_behave_like "driver"
10
+ it_should_behave_like "driver with javascript support"
11
+ it_should_behave_like "driver with resynchronization support"
12
+ it_should_behave_like "driver with frame support"
13
+ it_should_behave_like "driver with support for window switching"
14
+ it_should_behave_like "driver without status code support"
15
+ it_should_behave_like "driver with cookies support"
16
+
17
+ unless Config::CONFIG['host_os'] =~ /mswin|mingw/
18
+ it "should not interfere with forking child processes" do
19
+ # Launch a browser, which registers the at_exit hook
20
+ browser = Capybara::Selenium::Driver.new(TestApp).browser
21
+
22
+ # Fork an unrelated child process. This should not run the code in the at_exit hook.
23
+ pid = fork { "child" }
24
+ Process.wait2(pid)[1].exitstatus.should == 0
25
+
26
+ browser.quit
27
+ end
28
+ end
29
+
30
+ describe "exit codes" do
31
+ before do
32
+ @current_dir = Dir.getwd
33
+ Dir.chdir(File.join(File.dirname(__FILE__), '..', '..'))
34
+ end
35
+
36
+ after do
37
+ Dir.chdir(@current_dir)
38
+ end
39
+
40
+ it "should have return code 1 when running selenium_driver_rspec_failure.rb" do
41
+ `rspec spec/fixtures/selenium_driver_rspec_failure.rb`
42
+ $?.exitstatus.should be 1
43
+ end
44
+
45
+ it "should have return code 0 when running selenium_driver_rspec_success.rb" do
46
+ `rspec spec/fixtures/selenium_driver_rspec_success.rb`
47
+ $?.exitstatus.should be 0
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,253 @@
1
+ require 'spec_helper'
2
+
3
+ require 'capybara/dsl'
4
+
5
+ describe Capybara::DSL do
6
+
7
+ before do
8
+ Capybara.app = TestApp
9
+ end
10
+
11
+ after do
12
+ Capybara.session_name = nil
13
+ Capybara.default_driver = nil
14
+ Capybara.use_default_driver
15
+ end
16
+
17
+ describe '#default_driver' do
18
+ it "should default to rack_test" do
19
+ Capybara.default_driver.should == :rack_test
20
+ end
21
+
22
+ it "should be changeable" do
23
+ Capybara.default_driver = :culerity
24
+ Capybara.default_driver.should == :culerity
25
+ end
26
+ end
27
+
28
+ describe '#current_driver' do
29
+ it "should default to the default driver" do
30
+ Capybara.current_driver.should == :rack_test
31
+ Capybara.default_driver = :culerity
32
+ Capybara.current_driver.should == :culerity
33
+ end
34
+
35
+ it "should be changeable" do
36
+ Capybara.current_driver = :culerity
37
+ Capybara.current_driver.should == :culerity
38
+ end
39
+ end
40
+
41
+ describe '#javascript_driver' do
42
+ it "should default to selenium" do
43
+ Capybara.javascript_driver.should == :selenium
44
+ end
45
+
46
+ it "should be changeable" do
47
+ Capybara.javascript_driver = :culerity
48
+ Capybara.javascript_driver.should == :culerity
49
+ end
50
+ end
51
+
52
+ describe '#use_default_driver' do
53
+ it "should restore the default driver" do
54
+ Capybara.current_driver = :culerity
55
+ Capybara.use_default_driver
56
+ Capybara.current_driver.should == :rack_test
57
+ end
58
+ end
59
+
60
+ describe '#using_driver' do
61
+ before do
62
+ Capybara.current_driver.should_not == :selenium
63
+ end
64
+
65
+ it 'should set the driver using Capybara.current_driver=' do
66
+ driver = nil
67
+ Capybara.using_driver(:selenium) { driver = Capybara.current_driver }
68
+ driver.should == :selenium
69
+ end
70
+
71
+ it 'should reset the driver using Capybara.use_default_driver, even if an exception occurs' do
72
+ begin
73
+ Capybara.using_driver(:selenium) { raise "ohnoes!" }
74
+ rescue Exception
75
+ end
76
+ Capybara.current_driver.should == Capybara.default_driver
77
+ end
78
+
79
+ it 'should return the driver to what it was previously' do
80
+ Capybara.current_driver = :selenium
81
+ Capybara.using_driver(:culerity) do
82
+ Capybara.using_driver(:rack_test) do
83
+ Capybara.current_driver.should == :rack_test
84
+ end
85
+ Capybara.current_driver.should == :culerity
86
+ end
87
+ Capybara.current_driver.should == :selenium
88
+ end
89
+
90
+ it 'should yield the passed block' do
91
+ called = false
92
+ Capybara.using_driver(:selenium) { called = true }
93
+ called.should == true
94
+ end
95
+ end
96
+
97
+ describe '#using_wait_time' do
98
+ it "should switch the wait time and switch it back" do
99
+ in_block = nil
100
+ Capybara.using_wait_time 6 do
101
+ in_block = Capybara.default_wait_time
102
+ end
103
+ in_block.should == 6
104
+ Capybara.default_wait_time.should == 0
105
+ end
106
+
107
+ it "should ensure wait time is reset" do
108
+ expect do
109
+ Capybara.using_wait_time 6 do
110
+ raise "hell"
111
+ end
112
+ end.to raise_error
113
+ Capybara.default_wait_time.should == 0
114
+ end
115
+
116
+ after do
117
+ Capybara.default_wait_time = 0
118
+ end
119
+ end
120
+
121
+ describe '#app' do
122
+ it "should be changeable" do
123
+ Capybara.app = "foobar"
124
+ Capybara.app.should == 'foobar'
125
+ end
126
+ end
127
+
128
+ describe '#current_session' do
129
+ it "should choose a session object of the current driver type" do
130
+ Capybara.current_session.should be_a(Capybara::Session)
131
+ end
132
+
133
+ it "should use #app as the application" do
134
+ Capybara.app = proc {}
135
+ Capybara.current_session.app.should == Capybara.app
136
+ end
137
+
138
+ it "should change with the current driver" do
139
+ Capybara.current_session.mode.should == :rack_test
140
+ Capybara.current_driver = :selenium
141
+ Capybara.current_session.mode.should == :selenium
142
+ end
143
+
144
+ it "should be persistent even across driver changes" do
145
+ object_id = Capybara.current_session.object_id
146
+ Capybara.current_session.object_id.should == object_id
147
+ Capybara.current_driver = :selenium
148
+ Capybara.current_session.mode.should == :selenium
149
+ Capybara.current_session.object_id.should_not == object_id
150
+
151
+ Capybara.current_driver = :rack_test
152
+ Capybara.current_session.object_id.should == object_id
153
+ end
154
+
155
+ it "should change when changing application" do
156
+ object_id = Capybara.current_session.object_id
157
+ Capybara.current_session.object_id.should == object_id
158
+ Capybara.app = proc {}
159
+ Capybara.current_session.object_id.should_not == object_id
160
+ Capybara.current_session.app.should == Capybara.app
161
+ end
162
+
163
+ it "should change when the session name changes" do
164
+ object_id = Capybara.current_session.object_id
165
+ Capybara.session_name = :administrator
166
+ Capybara.session_name.should == :administrator
167
+ Capybara.current_session.object_id.should_not == object_id
168
+ Capybara.session_name = :default
169
+ Capybara.session_name.should == :default
170
+ Capybara.current_session.object_id.should == object_id
171
+ end
172
+ end
173
+
174
+ describe "#using_session" do
175
+ it "should change the session name for the duration of the block" do
176
+ Capybara.session_name.should == :default
177
+ Capybara.using_session(:administrator) do
178
+ Capybara.session_name.should == :administrator
179
+ end
180
+ Capybara.session_name.should == :default
181
+ end
182
+
183
+ it "should reset the session to the default, even if an exception occurs" do
184
+ begin
185
+ Capybara.using_session(:raise) do
186
+ raise
187
+ end
188
+ rescue Exception
189
+ end
190
+ Capybara.session_name.should == :default
191
+ end
192
+
193
+ it "should yield the passed block" do
194
+ called = false
195
+ Capybara.using_session(:administrator) { called = true }
196
+ called.should == true
197
+ end
198
+ end
199
+
200
+ describe "#session_name" do
201
+ it "should default to :default" do
202
+ Capybara.session_name.should == :default
203
+ end
204
+ end
205
+
206
+ describe 'the DSL' do
207
+ before do
208
+ @session = Class.new { include Capybara::DSL }.new
209
+ end
210
+
211
+ it_should_behave_like "session"
212
+ it_should_behave_like "session without javascript support"
213
+
214
+ it "should be possible to include it in another class" do
215
+ klass = Class.new do
216
+ include Capybara::DSL
217
+ end
218
+ foo = klass.new
219
+ foo.visit('/with_html')
220
+ foo.click_link('ullamco')
221
+ foo.body.should include('Another World')
222
+ end
223
+
224
+ it "should provide a 'page' shortcut for more expressive tests" do
225
+ klass = Class.new do
226
+ include Capybara::DSL
227
+ end
228
+ foo = klass.new
229
+ foo.page.visit('/with_html')
230
+ foo.page.click_link('ullamco')
231
+ foo.page.body.should include('Another World')
232
+ end
233
+
234
+ it "should provide an 'using_session' shortcut" do
235
+ klass = Class.new do
236
+ include Capybara::DSL
237
+ end
238
+ Capybara.should_receive(:using_session).with(:name)
239
+ foo = klass.new
240
+ foo.using_session(:name)
241
+ end
242
+
243
+ it "should provide a 'using_wait_time' shortcut" do
244
+ klass = Class.new do
245
+ include Capybara::DSL
246
+ end
247
+ Capybara.should_receive(:using_wait_time).with(6)
248
+ foo = klass.new
249
+ foo.using_wait_time(6)
250
+ end
251
+ end
252
+
253
+ end
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ describe Capybara::Selenium::Driver do
4
+ it "should exit with a non-zero exit status" do
5
+ browser = Capybara::Selenium::Driver.new(TestApp).browser
6
+ true.should == false
7
+ end
8
+ end