diabolo-webrat 0.4.3 → 0.4.4

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 (81) hide show
  1. data/History.txt +8 -0
  2. data/Rakefile +5 -1
  3. data/lib/webrat/core/locators/field_labeled_locator.rb +1 -1
  4. data/lib/webrat/core/locators/label_locator.rb +1 -1
  5. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  6. data/lib/webrat/selenium/application_server.rb +71 -0
  7. data/lib/webrat/selenium/merb_application_server.rb +48 -0
  8. data/lib/webrat/selenium/rails_application_server.rb +42 -0
  9. data/lib/webrat/selenium/selenium_rc_server.rb +80 -0
  10. data/lib/webrat/selenium/sinatra_application_server.rb +35 -0
  11. data/spec/fakes/test_session.rb +34 -0
  12. data/spec/integration/merb/app/controllers/application.rb +2 -0
  13. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  14. data/spec/integration/merb/app/controllers/testing.rb +18 -0
  15. data/spec/integration/merb/config/environments/development.rb +15 -0
  16. data/spec/integration/merb/config/environments/rake.rb +11 -0
  17. data/spec/integration/merb/config/environments/test.rb +14 -0
  18. data/spec/integration/merb/config/init.rb +25 -0
  19. data/spec/integration/merb/config/rack.rb +11 -0
  20. data/spec/integration/merb/config/router.rb +33 -0
  21. data/spec/integration/merb/spec/spec_helper.rb +24 -0
  22. data/spec/integration/merb/spec/webrat_spec.rb +32 -0
  23. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  24. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  25. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  26. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  27. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  28. data/spec/integration/rails/app/controllers/application.rb +15 -0
  29. data/spec/integration/rails/app/controllers/webrat_controller.rb +39 -0
  30. data/spec/integration/rails/config/boot.rb +109 -0
  31. data/spec/integration/rails/config/environment.rb +12 -0
  32. data/spec/integration/rails/config/environments/development.rb +17 -0
  33. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  34. data/spec/integration/rails/config/environments/test.rb +22 -0
  35. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  36. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  37. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  38. data/spec/integration/rails/config/routes.rb +14 -0
  39. data/spec/integration/rails/test/integration/webrat_test.rb +80 -0
  40. data/spec/integration/rails/test/test_helper.rb +25 -0
  41. data/spec/integration/sinatra/classic_app.rb +64 -0
  42. data/spec/integration/sinatra/modular_app.rb +16 -0
  43. data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  44. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  45. data/spec/integration/sinatra/test/test_helper.rb +16 -0
  46. data/spec/private/core/configuration_spec.rb +104 -0
  47. data/spec/private/core/field_spec.rb +67 -0
  48. data/spec/private/core/link_spec.rb +24 -0
  49. data/spec/private/core/logging_spec.rb +10 -0
  50. data/spec/private/core/session_spec.rb +198 -0
  51. data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
  52. data/spec/private/merb/merb_session_spec.rb +42 -0
  53. data/spec/private/nokogiri_spec.rb +77 -0
  54. data/spec/private/rails/attaches_file_spec.rb +81 -0
  55. data/spec/private/rails/rails_session_spec.rb +110 -0
  56. data/spec/public/basic_auth_spec.rb +24 -0
  57. data/spec/public/check_spec.rb +191 -0
  58. data/spec/public/choose_spec.rb +118 -0
  59. data/spec/public/click_area_spec.rb +106 -0
  60. data/spec/public/click_button_spec.rb +502 -0
  61. data/spec/public/click_link_spec.rb +541 -0
  62. data/spec/public/fill_in_spec.rb +209 -0
  63. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  64. data/spec/public/locators/field_labeled_spec.rb +172 -0
  65. data/spec/public/locators/field_with_id_spec.rb +16 -0
  66. data/spec/public/matchers/contain_spec.rb +114 -0
  67. data/spec/public/matchers/have_selector_spec.rb +135 -0
  68. data/spec/public/matchers/have_tag_spec.rb +39 -0
  69. data/spec/public/matchers/have_xpath_spec.rb +123 -0
  70. data/spec/public/reload_spec.rb +10 -0
  71. data/spec/public/save_and_open_spec.rb +51 -0
  72. data/spec/public/select_date_spec.rb +112 -0
  73. data/spec/public/select_datetime_spec.rb +137 -0
  74. data/spec/public/select_spec.rb +261 -0
  75. data/spec/public/select_time_spec.rb +100 -0
  76. data/spec/public/set_hidden_field_spec.rb +5 -0
  77. data/spec/public/submit_form_spec.rb +5 -0
  78. data/spec/public/visit_spec.rb +58 -0
  79. data/spec/public/within_spec.rb +177 -0
  80. data/spec/spec_helper.rb +50 -0
  81. metadata +90 -25
@@ -0,0 +1,502 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe "click_button" do
4
+ it "should fail if no buttons" do
5
+ with_html <<-HTML
6
+ <html>
7
+ <form method="get" action="/login"></form>
8
+ </html>
9
+ HTML
10
+
11
+ lambda { click_button }.should raise_error(Webrat::NotFoundError)
12
+ end
13
+
14
+ it "should fail if input is not a submit button" do
15
+ with_html <<-HTML
16
+ <html>
17
+ <form method="get" action="/login">
18
+ <input type="reset" />
19
+ </form>
20
+ </html>
21
+ HTML
22
+
23
+ lambda { click_button }.should raise_error(Webrat::NotFoundError)
24
+ end
25
+
26
+
27
+ it "should fail if button is disabled" do
28
+ with_html <<-HTML
29
+ <html>
30
+ <form method="get" action="/login">
31
+ <input type="submit" disabled="disabled" />
32
+ </form>
33
+ </html>
34
+ HTML
35
+
36
+ lambda { click_button }.should raise_error(Webrat::DisabledFieldError)
37
+ end
38
+
39
+ it "should default to get method" do
40
+ with_html <<-HTML
41
+ <html>
42
+ <form action="/login">
43
+ <input type="submit" />
44
+ </form>
45
+ </html>
46
+ HTML
47
+ webrat_session.should_receive(:get)
48
+ click_button
49
+ end
50
+
51
+ it "should assert valid response" do
52
+ with_html <<-HTML
53
+ <html>
54
+ <form action="/login">
55
+ <input type="submit" />
56
+ </form>
57
+ </html>
58
+ HTML
59
+ webrat_session.response_code = 501
60
+ lambda { click_button }.should raise_error(Webrat::PageLoadError)
61
+ end
62
+
63
+ [200, 300, 400, 499].each do |status|
64
+ it "should consider the #{status} status code as success" do
65
+ with_html <<-HTML
66
+ <html>
67
+ <form action="/login">
68
+ <input type="submit" />
69
+ </form>
70
+ </html>
71
+ HTML
72
+ webrat_session.stub!(:redirect? => false)
73
+ webrat_session.response_code = status
74
+ lambda { click_button }.should_not raise_error
75
+ end
76
+ end
77
+
78
+ it "should submit the first form by default" do
79
+ with_html <<-HTML
80
+ <html>
81
+ <form method="get" action="/form1">
82
+ <input type="submit" />
83
+ </form>
84
+ <form method="get" action="/form2">
85
+ <input type="submit" />
86
+ </form>
87
+ </html>
88
+ HTML
89
+ webrat_session.should_receive(:get).with("/form1", {})
90
+ click_button
91
+ end
92
+
93
+ it "should not explode on file fields" do
94
+ with_html <<-HTML
95
+ <html>
96
+ <form method="get" action="/form1">
97
+ <input type="file" />
98
+ <input type="submit" />
99
+ </form>
100
+ </html>
101
+ HTML
102
+ click_button
103
+ end
104
+
105
+ it "should submit the form with the specified button" do
106
+ with_html <<-HTML
107
+ <html>
108
+ <form method="get" action="/form1">
109
+ <input type="submit" />
110
+ </form>
111
+ <form method="get" action="/form2">
112
+ <input type="submit" value="Form2" />
113
+ </form>
114
+ </html>
115
+ HTML
116
+ webrat_session.should_receive(:get).with("/form2", {})
117
+ click_button "Form2"
118
+ end
119
+
120
+ it "should use action from form" do
121
+ with_html <<-HTML
122
+ <html>
123
+ <form method="get" action="/login">
124
+ <input type="submit" />
125
+ </form>
126
+ </html>
127
+ HTML
128
+ webrat_session.should_receive(:get).with("/login", {})
129
+ click_button
130
+ end
131
+
132
+ it "should use method from form" do
133
+ with_html <<-HTML
134
+ <html>
135
+ <form method="post" action="/login">
136
+ <input type="submit" />
137
+ </form>
138
+ </html>
139
+ HTML
140
+ webrat_session.should_receive(:post)
141
+ click_button
142
+ end
143
+
144
+ it "should send button as param if it has a name" do
145
+ with_html <<-HTML
146
+ <html>
147
+ <form method="post" action="/login">
148
+ <input type="submit" name="cancel" value="Cancel" />
149
+ <input type="submit" name="login" value="Login" />
150
+ </form>
151
+ </html>
152
+ HTML
153
+ webrat_session.should_receive(:post).with("/login", "login" => "Login")
154
+ click_button("Login")
155
+ end
156
+
157
+ it "should not send button as param if it has no name" do
158
+ with_html <<-HTML
159
+ <html>
160
+ <form method="post" action="/login">
161
+ <input type="submit" name="cancel" value="Cancel" />
162
+ <input type="submit" value="Login" />
163
+ </form>
164
+ </html>
165
+ HTML
166
+ webrat_session.should_receive(:post).with("/login", {})
167
+ click_button("Login")
168
+ end
169
+
170
+ it "should send default password field values" do
171
+ with_html <<-HTML
172
+ <html>
173
+ <form method="get" action="/login">
174
+ <input id="user_password" name="user[password]" value="mypass" type="password" />
175
+ <input type="submit" />
176
+ </form>
177
+ </html>
178
+ HTML
179
+ webrat_session.should_receive(:get).with("/login", "user" => {"password" => "mypass"})
180
+ click_button
181
+ end
182
+
183
+ it "should send default hidden field values" do
184
+ with_html <<-HTML
185
+ <html>
186
+ <form method="get" action="/login">
187
+ <input id="user_email" name="user[email]" value="test@example.com" type="hidden" />
188
+ <input type="submit" />
189
+ </form>
190
+ </html>
191
+ HTML
192
+ webrat_session.should_receive(:get).with("/login", "user" => {"email" => "test@example.com"})
193
+ click_button
194
+ end
195
+
196
+ it "should send default text field values" do
197
+ with_html <<-HTML
198
+ <html>
199
+ <form method="get" action="/login">
200
+ <input id="user_email" name="user[email]" value="test@example.com" type="text" />
201
+ <input type="submit" />
202
+ </form>
203
+ </html>
204
+ HTML
205
+ webrat_session.should_receive(:get).with("/login", "user" => {"email" => "test@example.com"})
206
+ click_button
207
+ end
208
+
209
+ it "should not send disabled field values" do
210
+ with_html <<-HTML
211
+ <html>
212
+ <form method="get" action="/login">
213
+ <input disabled="disabled" id="user_email" name="user[email]" value="test@example.com" type="text" />
214
+ <input disabled="disabled" id="user_gender_male" name="user[gender]" type="radio" value="M" />
215
+ <label for="user_gender_male">Male</label>
216
+ <input disabled="disabled" id="user_gender_female" name="user[gender]" type="radio" value="F" checked="checked" />
217
+ <label for="user_gender_female">Female</label>
218
+ <input type="submit" />
219
+ </form>
220
+ </html>
221
+ HTML
222
+ webrat_session.should_receive(:get).with("/login", {})
223
+ click_button
224
+ end
225
+
226
+ it "should send default checked fields" do
227
+ with_html <<-HTML
228
+ <html>
229
+ <form method="get" action="/login">
230
+ <input id="user_tos" name="user[tos]" value="1" type="checkbox" checked="checked" />
231
+ <input type="submit" />
232
+ </form>
233
+ </html>
234
+ HTML
235
+ webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "1"})
236
+ click_button
237
+ end
238
+
239
+ it "should send default radio options" do
240
+ with_html <<-HTML
241
+ <html>
242
+ <form method="get" action="/login">
243
+ <input id="user_gender_male" name="user[gender]" type="radio" value="M" />
244
+ <label for="user_gender_male">Male</label>
245
+ <input id="user_gender_female" name="user[gender]" type="radio" value="F" checked="checked" />
246
+ <label for="user_gender_female">Female</label>
247
+ <input type="submit" />
248
+ </form>
249
+ </html>
250
+ HTML
251
+ webrat_session.should_receive(:get).with("/login", "user" => {"gender" => "F"})
252
+ click_button
253
+ end
254
+
255
+ it "should send correct data for rails style unchecked fields" do
256
+ with_html <<-HTML
257
+ <html>
258
+ <form method="get" action="/login">
259
+ <input id="user_tos" name="user[tos]" type="checkbox" value="1" />
260
+ <input name="user[tos]" type="hidden" value="0" /> TOS
261
+ <input type="submit" />
262
+ </form>
263
+ </html>
264
+ HTML
265
+ webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "0"})
266
+ click_button
267
+ end
268
+
269
+ it "should send correct data for rails style checked fields" do
270
+ with_html <<-HTML
271
+ <html>
272
+ <form method="get" action="/login">
273
+ <input id="user_tos" name="user[tos]" type="checkbox" value="1" checked="checked" />
274
+ <input name="user[tos]" type="hidden" value="0" /> TOS
275
+ <input type="submit" />
276
+ </form>
277
+ </html>
278
+ HTML
279
+ webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "1"})
280
+ click_button
281
+ end
282
+
283
+ it "should send default collection fields" do
284
+ with_html <<-HTML
285
+ <html>
286
+ <form method="post" action="/login">
287
+ <input type="checkbox" name="options[]" value="burger" checked="checked" />
288
+ <input type="radio" name="options[]" value="fries" checked="checked" />
289
+ <input type="text" name="options[]" value="soda" />
290
+ <!-- Same value appearing twice -->
291
+ <input type="text" name="options[]" value="soda" />
292
+ <input type="hidden" name="options[]" value="dessert" />
293
+ <input type="hidden" name="response[choices][][selected]" value="one" />
294
+ <input type="hidden" name="response[choices][][selected]" value="two" />
295
+ <!-- Same value appearing twice -->
296
+ <input type="hidden" name="response[choices][][selected]" value="two" />
297
+ <input type="submit" />
298
+ </form>
299
+ </html>
300
+ HTML
301
+ webrat_session.should_receive(:post).with("/login",
302
+ "options" => ["burger", "fries", "soda", "soda", "dessert"],
303
+ "response" => { "choices" => [{"selected" => "one"}, {"selected" => "two"}, {"selected" => "two"}]})
304
+ click_button
305
+ end
306
+
307
+ it "should not send default unchecked fields" do
308
+ with_html <<-HTML
309
+ <html>
310
+ <form method="get" action="/login">
311
+ <input id="user_tos" name="user[tos]" value="1" type="checkbox" />
312
+ <input type="submit" />
313
+ </form>
314
+ </html>
315
+ HTML
316
+ webrat_session.should_receive(:get).with("/login", {})
317
+ click_button
318
+ end
319
+
320
+ it "should send default textarea values" do
321
+ with_html <<-HTML
322
+ <html>
323
+ <form method="post" action="/posts">
324
+ <textarea name="post[body]">Post body here!</textarea>
325
+ <input type="submit" />
326
+ </form>
327
+ </html>
328
+ HTML
329
+ webrat_session.should_receive(:post).with("/posts", "post" => {"body" => "Post body here!"})
330
+ click_button
331
+ end
332
+
333
+ it "should properly handle HTML entities in textarea default values" do
334
+ spec = lambda do
335
+ with_html <<-HTML
336
+ <html>
337
+ <form method="post" action="/posts">
338
+ <textarea name="post[body]">Peanut butter &amp; jelly</textarea>
339
+ <input type="submit" />
340
+ </form>
341
+ </html>
342
+ HTML
343
+ webrat_session.should_receive(:post).with("/posts", "post" => {"body" => "Peanut butter & jelly"})
344
+ click_button
345
+ end
346
+
347
+ if Webrat.on_java?
348
+ spec.call
349
+ else
350
+ pending("needs bug fix", &spec)
351
+ end
352
+ end
353
+
354
+ it "should send default selected option value from select" do
355
+ with_html <<-HTML
356
+ <html>
357
+ <form method="get" action="/login">
358
+ <select name="month">
359
+ <option value="1">January</option>
360
+ <option value="2" selected="selected">February</option>
361
+ </select>
362
+ <input type="submit" />
363
+ </form>
364
+ </html>
365
+ HTML
366
+ webrat_session.should_receive(:get).with("/login", "month" => "2")
367
+ click_button
368
+ end
369
+
370
+ it "should send default selected option inner html from select when no value attribute" do
371
+ with_html <<-HTML
372
+ <html>
373
+ <form method="get" action="/login">
374
+ <select name="month">
375
+ <option>January</option>
376
+ <option selected="selected">February</option>
377
+ </select>
378
+ <input type="submit" />
379
+ </form>
380
+ </html>
381
+ HTML
382
+ webrat_session.should_receive(:get).with("/login", "month" => "February")
383
+ click_button
384
+ end
385
+
386
+ it "should send first select option value when no option selected" do
387
+ with_html <<-HTML
388
+ <html>
389
+ <form method="get" action="/login">
390
+ <select name="month">
391
+ <option value="1">January</option>
392
+ <option value="2">February</option>
393
+ </select>
394
+ <input type="submit" />
395
+ </form>
396
+ </html>
397
+ HTML
398
+ webrat_session.should_receive(:get).with("/login", "month" => "1")
399
+ click_button
400
+ end
401
+
402
+ it "should handle nested properties" do
403
+ with_html <<-HTML
404
+ <html>
405
+ <form method="post" action="/login">
406
+ <input type="text" id="contestant_scores_12" name="contestant[scores][1]" value="2"/>
407
+ <input type="text" id="contestant_scores_13" name="contestant[scores][3]" value="4"/>
408
+ <input type="submit" />
409
+ </form>
410
+ </html>
411
+ HTML
412
+ webrat_session.should_receive(:post).with("/login", "contestant" => {"scores" => {'1' => '2', '3' => '4'}})
413
+ click_button
414
+ end
415
+
416
+ it "should send default empty text field values" do
417
+ with_html <<-HTML
418
+ <html>
419
+ <form method="get" action="/login">
420
+ <input id="user_email" name="user[email]" value="" type="text" />
421
+ <input type="submit" />
422
+ </form>
423
+ </html>
424
+ HTML
425
+ webrat_session.should_receive(:get).with("/login", "user" => {"email" => ""})
426
+ click_button
427
+ end
428
+
429
+ it "should recognize button tags" do
430
+ with_html <<-HTML
431
+ <html>
432
+ <form method="get" action="/login">
433
+ <input id="user_email" name="user[email]" value="" type="text" />
434
+ <button type="submit" />
435
+ </form>
436
+ </html>
437
+ HTML
438
+ webrat_session.should_receive(:get).with("/login", "user" => {"email" => ""})
439
+ click_button
440
+ end
441
+
442
+ it "should recognize input tags with the type button" do
443
+ with_html <<-HTML
444
+ <html>
445
+ <form action="/">
446
+ <input type="button" />
447
+ </form>
448
+ </html>
449
+ HTML
450
+ webrat_session.should_receive(:get)
451
+ click_button
452
+ end
453
+
454
+ it "should recognize image button tags" do
455
+ with_html <<-HTML
456
+ <html>
457
+ <form action="/">
458
+ <input type="image" />
459
+ </form>
460
+ </html>
461
+ HTML
462
+ webrat_session.should_receive(:get)
463
+ click_button
464
+ end
465
+
466
+ it "should find buttons by their IDs" do
467
+ with_html <<-HTML
468
+ <html>
469
+ <form action="/">
470
+ <input type="submit" id="my_button" />
471
+ </form>
472
+ </html>
473
+ HTML
474
+ webrat_session.should_receive(:get)
475
+ click_button "my_button"
476
+ end
477
+
478
+ it "should find image buttons by their alt text" do
479
+ with_html <<-HTML
480
+ <html>
481
+ <form action="/">
482
+ <input type="image" alt="Go" />
483
+ </form>
484
+ </html>
485
+ HTML
486
+ webrat_session.should_receive(:get)
487
+ click_button "Go"
488
+ end
489
+
490
+ it "should recognize button tags by content" do
491
+ with_html <<-HTML
492
+ <html>
493
+ <form method="get" action="/login">
494
+ <input id="user_email" name="user[email]" value="" type="text" />
495
+ <button type="submit">Login</button>
496
+ </form>
497
+ </html>
498
+ HTML
499
+ webrat_session.should_receive(:get).with("/login", "user" => {"email" => ""})
500
+ click_button "Login"
501
+ end
502
+ end