webrat 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. data/History.txt +76 -14
  2. data/README.txt +40 -36
  3. data/Rakefile +80 -18
  4. data/TODO.txt +9 -3
  5. data/init.rb +1 -1
  6. data/lib/webrat.rb +30 -5
  7. data/lib/webrat/core.rb +12 -0
  8. data/lib/webrat/core/area.rb +44 -0
  9. data/lib/webrat/core/field.rb +332 -0
  10. data/lib/webrat/core/flunk.rb +7 -0
  11. data/lib/webrat/core/form.rb +130 -0
  12. data/lib/webrat/core/label.rb +18 -0
  13. data/lib/webrat/core/link.rb +101 -0
  14. data/lib/webrat/core/locators.rb +92 -0
  15. data/lib/webrat/core/logging.rb +25 -0
  16. data/lib/webrat/core/matchers.rb +4 -0
  17. data/lib/webrat/core/matchers/have_content.rb +94 -0
  18. data/lib/webrat/core/matchers/have_selector.rb +39 -0
  19. data/lib/webrat/core/matchers/have_tag.rb +58 -0
  20. data/lib/webrat/core/matchers/have_xpath.rb +85 -0
  21. data/lib/webrat/core/methods.rb +44 -0
  22. data/lib/webrat/core/mime.rb +29 -0
  23. data/lib/webrat/core/nokogiri.rb +42 -0
  24. data/lib/webrat/core/scope.rb +208 -0
  25. data/lib/webrat/core/select_option.rb +29 -0
  26. data/lib/webrat/core/session.rb +188 -0
  27. data/lib/webrat/core_extensions/blank.rb +58 -0
  28. data/lib/webrat/core_extensions/deprecate.rb +8 -0
  29. data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  30. data/lib/webrat/core_extensions/hash_with_indifferent_access.rb +131 -0
  31. data/lib/webrat/core_extensions/meta_class.rb +6 -0
  32. data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
  33. data/lib/webrat/mechanize.rb +28 -0
  34. data/lib/webrat/merb.rb +75 -0
  35. data/lib/webrat/rack.rb +24 -0
  36. data/lib/webrat/rails.rb +102 -0
  37. data/lib/webrat/rails/redirect_actions.rb +18 -0
  38. data/lib/webrat/selenium.rb +3 -0
  39. data/lib/webrat/selenium/location_strategy_javascript/button.js +12 -0
  40. data/lib/webrat/selenium/location_strategy_javascript/label.js +16 -0
  41. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
  42. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +9 -0
  43. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  44. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  45. data/lib/webrat/selenium/selenium_extensions.js +6 -0
  46. data/lib/webrat/selenium/selenium_session.rb +137 -0
  47. data/lib/webrat/sinatra.rb +19 -0
  48. metadata +66 -52
  49. data/Manifest.txt +0 -20
  50. data/lib/webrat/rails_extensions.rb +0 -27
  51. data/lib/webrat/session.rb +0 -523
  52. data/test/checks_test.rb +0 -121
  53. data/test/chooses_test.rb +0 -74
  54. data/test/clicks_button_test.rb +0 -308
  55. data/test/clicks_link_test.rb +0 -193
  56. data/test/fills_in_test.rb +0 -139
  57. data/test/helper.rb +0 -21
  58. data/test/reloads_test.rb +0 -26
  59. data/test/selects_test.rb +0 -93
  60. data/test/visits_test.rb +0 -31
data/test/checks_test.rb DELETED
@@ -1,121 +0,0 @@
1
- require File.dirname(__FILE__) + "/helper"
2
-
3
- class ChecksTest < Test::Unit::TestCase
4
- def setup
5
- @session = ActionController::Integration::Session.new
6
- @session.stubs(:assert_response)
7
- @session.stubs(:get_via_redirect)
8
- @session.stubs(:response).returns(@response=mock)
9
- end
10
-
11
- def test_should_fail_if_no_checkbox_found
12
- @response.stubs(:body).returns(<<-EOS)
13
- <form method="post" action="/login">
14
- </form>
15
- EOS
16
- @session.expects(:flunk)
17
- @session.checks "remember_me"
18
- end
19
-
20
- def test_should_fail_if_input_is_not_a_checkbox
21
- @response.stubs(:body).returns(<<-EOS)
22
- <form method="post" action="/login">
23
- <input type="text" name="remember_me" />
24
- </form>
25
- EOS
26
- @session.expects(:flunk)
27
- @session.checks "remember_me"
28
- end
29
-
30
- def test_should_check_rails_style_checkboxes
31
- @response.stubs(:body).returns(<<-EOS)
32
- <form method="get" action="/login">
33
- <input id="user_tos" name="user[tos]" type="checkbox" value="1" />
34
- <input name="user[tos]" type="hidden" value="0" />
35
- <label for="user_tos">TOS</label>
36
- <input type="submit" />
37
- </form>
38
- EOS
39
- @session.expects(:get_via_redirect).with("/login", "user" => {"tos" => "1"})
40
- @session.checks "TOS"
41
- @session.clicks_button
42
- end
43
-
44
- def test_should_result_in_the_value_on_being_posted_if_not_specified
45
- @response.stubs(:body).returns(<<-EOS)
46
- <form method="post" action="/login">
47
- <input type="checkbox" name="remember_me" />
48
- <input type="submit" />
49
- </form>
50
- EOS
51
- @session.expects(:post_via_redirect).with("/login", "remember_me" => "on")
52
- @session.checks "remember_me"
53
- @session.clicks_button
54
- end
55
-
56
- def test_should_result_in_a_custom_value_being_posted
57
- @response.stubs(:body).returns(<<-EOS)
58
- <form method="post" action="/login">
59
- <input type="checkbox" name="remember_me" value="yes" />
60
- <input type="submit" />
61
- </form>
62
- EOS
63
- @session.expects(:post_via_redirect).with("/login", "remember_me" => "yes")
64
- @session.checks "remember_me"
65
- @session.clicks_button
66
- end
67
- end
68
-
69
- class UnchecksTest < Test::Unit::TestCase
70
- def setup
71
- @session = ActionController::Integration::Session.new
72
- @session.stubs(:assert_response)
73
- @session.stubs(:get_via_redirect)
74
- @session.stubs(:response).returns(@response=mock)
75
- end
76
-
77
- def test_should_fail_if_no_checkbox_found
78
- @response.stubs(:body).returns(<<-EOS)
79
- <form method="post" action="/login">
80
- </form>
81
- EOS
82
- @session.expects(:flunk)
83
- @session.unchecks "remember_me"
84
- end
85
-
86
- def test_should_fail_if_input_is_not_a_checkbox
87
- @response.stubs(:body).returns(<<-EOS)
88
- <form method="post" action="/login">
89
- <input type="text" name="remember_me" />
90
- </form>
91
- EOS
92
- @session.expects(:flunk)
93
- @session.unchecks "remember_me"
94
- end
95
-
96
- def test_should_uncheck_rails_style_checkboxes
97
- @response.stubs(:body).returns(<<-EOS)
98
- <form method="get" action="/login">
99
- <input id="user_tos" name="user[tos]" type="checkbox" value="1" checked="checked" />
100
- <input name="user[tos]" type="hidden" value="0" />
101
- <label for="user_tos">TOS</label>
102
- <input type="submit" />
103
- </form>
104
- EOS
105
- @session.expects(:get_via_redirect).with("/login", "user" => {"tos" => "0"})
106
- @session.unchecks "TOS"
107
- @session.clicks_button
108
- end
109
-
110
- def test_should_result_in_value_not_being_posted
111
- @response.stubs(:body).returns(<<-EOS)
112
- <form method="post" action="/login">
113
- <input type="checkbox" name="remember_me" value="yes" checked="checked" />
114
- <input type="submit" />
115
- </form>
116
- EOS
117
- @session.expects(:post_via_redirect).with("/login", {})
118
- @session.unchecks "remember_me"
119
- @session.clicks_button
120
- end
121
- end
data/test/chooses_test.rb DELETED
@@ -1,74 +0,0 @@
1
- require File.dirname(__FILE__) + "/helper"
2
-
3
- class ChoosesTest < Test::Unit::TestCase
4
-
5
- def setup
6
- @session = ActionController::Integration::Session.new
7
- @session.stubs(:assert_response)
8
- @session.stubs(:get_via_redirect)
9
- @session.stubs(:response).returns(@response=mock)
10
- end
11
-
12
- def test_should_fail_if_no_radio_buttons_found
13
- @response.stubs(:body).returns(<<-EOS)
14
- <form method="post" action="/login">
15
- </form>
16
- EOS
17
- @session.expects(:flunk)
18
- @session.chooses "first option"
19
- end
20
-
21
- def test_should_fail_if_input_is_not_a_radio_button
22
- @response.stubs(:body).returns(<<-EOS)
23
- <form method="post" action="/login">
24
- <input type="text" name="first_option" />
25
- </form>
26
- EOS
27
- @session.expects(:flunk)
28
- @session.chooses "first_option"
29
- end
30
-
31
- def test_should_check_rails_style_radio_buttons
32
- @response.stubs(:body).returns(<<-EOS)
33
- <form method="get" action="/login">
34
- <input id="user_gender_male" name="user[gender]" type="radio" value="M" />
35
- <label for="user_gender_male">Male</label>
36
- <input id="user_gender_female" name="user[gender]" type="radio" value="F" />
37
- <label for="user_gender_female">Female</label>
38
- <input type="submit" />
39
- </form>
40
- EOS
41
- @session.expects(:get_via_redirect).with("/login", "user" => {"gender" => "M"})
42
- @session.chooses "Male"
43
- @session.clicks_button
44
- end
45
-
46
- def test_should_only_submit_last_chosen_value
47
- @response.stubs(:body).returns(<<-EOS)
48
- <form method="get" action="/login">
49
- <input id="user_gender_male" name="user[gender]" type="radio" value="M" />
50
- <label for="user_gender_male">Male</label>
51
- <input id="user_gender_female" name="user[gender]" type="radio" value="F" />
52
- <label for="user_gender_female">Female</label>
53
- <input type="submit" />
54
- </form>
55
- EOS
56
- @session.expects(:get_via_redirect).with("/login", "user" => {"gender" => "M"})
57
- @session.chooses "Female"
58
- @session.chooses "Male"
59
- @session.clicks_button
60
- end
61
-
62
- def test_should_result_in_the_value_on_being_posted_if_not_specified
63
- @response.stubs(:body).returns(<<-EOS)
64
- <form method="post" action="/login">
65
- <input type="radio" name="first_option" />
66
- <input type="submit" />
67
- </form>
68
- EOS
69
- @session.expects(:post_via_redirect).with("/login", "first_option" => "on")
70
- @session.chooses "first_option"
71
- @session.clicks_button
72
- end
73
-
74
- end
@@ -1,308 +0,0 @@
1
- require File.dirname(__FILE__) + "/helper"
2
-
3
- class ClicksButtonTest < Test::Unit::TestCase
4
- def setup
5
- @session = ActionController::Integration::Session.new
6
- @session.stubs(:assert_response)
7
- @session.stubs(:get_via_redirect)
8
- @response = mock
9
- @session.stubs(:response).returns(@response)
10
- end
11
-
12
- def test_should_fail_if_no_buttons
13
- @response.stubs(:body).returns(<<-EOS)
14
- <form method="get" action="/login"></form>
15
- EOS
16
- @session.expects(:flunk)
17
- @session.clicks_button
18
- end
19
-
20
- def test_should_fail_if_input_is_not_a_submit_button
21
- @response.stubs(:body).returns(<<-EOS)
22
- <form method="get" action="/login">
23
- <input type="reset" />
24
- </form>
25
- EOS
26
- @session.expects(:flunk)
27
- @session.clicks_button
28
- end
29
-
30
- def test_should_default_to_get_method
31
- @response.stubs(:body).returns(<<-EOS)
32
- <form action="/login">
33
- <input type="submit" />
34
- </form>
35
- EOS
36
- @session.expects(:get_via_redirect)
37
- @session.clicks_button
38
- end
39
-
40
- def test_should_assert_valid_response
41
- @response.stubs(:body).returns(<<-EOS)
42
- <form action="/login">
43
- <input type="submit" />
44
- </form>
45
- EOS
46
- @session.expects(:assert_response).with(:success)
47
- @session.clicks_button
48
- end
49
-
50
- def test_should_default_to_current_url
51
- @response.stubs(:body).returns(<<-EOS)
52
- <form method="get">
53
- <input type="submit" />
54
- </form>
55
- EOS
56
- @session.expects(:current_url).returns("/current")
57
- @session.expects(:get_via_redirect).with("/current", {})
58
- @session.clicks_button
59
- end
60
-
61
- def test_should_submit_the_first_form_by_default
62
- @response.stubs(:body).returns(<<-EOS)
63
- <form method="get" action="/form1">
64
- <input type="submit" />
65
- </form>
66
- <form method="get" action="/form2">
67
- <input type="submit" />
68
- </form>
69
- EOS
70
- @session.expects(:get_via_redirect).with("/form1", {})
71
- @session.clicks_button
72
- end
73
-
74
- def test_should_submit_the_form_with_the_specified_button
75
- @response.stubs(:body).returns(<<-EOS)
76
- <form method="get" action="/form1">
77
- <input type="submit" />
78
- </form>
79
- <form method="get" action="/form2">
80
- <input type="submit" value="Form2" />
81
- </form>
82
- EOS
83
- @session.expects(:get_via_redirect).with("/form2", {})
84
- @session.clicks_button "Form2"
85
- end
86
-
87
- def test_should_use_action_from_form
88
- @response.stubs(:body).returns(<<-EOS)
89
- <form method="get" action="/login">
90
- <input type="submit" />
91
- </form>
92
- EOS
93
- @session.expects(:get_via_redirect).with("/login", {})
94
- @session.clicks_button
95
- end
96
-
97
- def test_should_use_method_from_form
98
- @response.stubs(:body).returns(<<-EOS)
99
- <form method="post" action="/login">
100
- <input type="submit" />
101
- </form>
102
- EOS
103
- @session.expects(:post_via_redirect)
104
- @session.clicks_button
105
- end
106
-
107
- def test_should_send_button_as_param_if_it_has_a_name
108
- @response.stubs(:body).returns(<<-EOS)
109
- <form method="post" action="/login">
110
- <input type="submit" name="cancel" value="Cancel" />
111
- <input type="submit" name="login" value="Login" />
112
- </form>
113
- EOS
114
- @session.expects(:post_via_redirect).with("/login", "login" => "Login")
115
- @session.clicks_button("Login")
116
- end
117
-
118
- def test_should_not_send_button_as_param_if_it_has_no_name
119
- @response.stubs(:body).returns(<<-EOS)
120
- <form method="post" action="/login">
121
- <input type="submit" name="cancel" value="Cancel" />
122
- <input type="submit" value="Login" />
123
- </form>
124
- EOS
125
- @session.expects(:post_via_redirect).with("/login", {})
126
- @session.clicks_button("Login")
127
- end
128
-
129
- def test_should_send_default_hidden_field_values
130
- @response.stubs(:body).returns(<<-EOS)
131
- <form method="get" action="/login">
132
- <input id="user_email" name="user[email]" value="test@example.com" type="hidden" />
133
- <input type="submit" />
134
- </form>
135
- EOS
136
- @session.expects(:get_via_redirect).with("/login", "user" => {"email" => "test@example.com"})
137
- @session.clicks_button
138
- end
139
-
140
- def test_should_send_default_text_field_values
141
- @response.stubs(:body).returns(<<-EOS)
142
- <form method="get" action="/login">
143
- <input id="user_email" name="user[email]" value="test@example.com" type="text" />
144
- <input type="submit" />
145
- </form>
146
- EOS
147
- @session.expects(:get_via_redirect).with("/login", "user" => {"email" => "test@example.com"})
148
- @session.clicks_button
149
- end
150
-
151
- def test_should_send_default_checked_fields
152
- @response.stubs(:body).returns(<<-EOS)
153
- <form method="get" action="/login">
154
- <input id="user_tos" name="user[tos]" value="1" type="checkbox" checked="checked" />
155
- <input type="submit" />
156
- </form>
157
- EOS
158
- @session.expects(:get_via_redirect).with("/login", "user" => {"tos" => "1"})
159
- @session.clicks_button
160
- end
161
-
162
- def test_should_send_default_radio_options
163
- @response.stubs(:body).returns(<<-EOS)
164
- <form method="get" action="/login">
165
- <input id="user_gender_male" name="user[gender]" type="radio" value="M" />
166
- <label for="user_gender_male">Male</label>
167
- <input id="user_gender_female" name="user[gender]" type="radio" value="F" checked="checked" />
168
- <label for="user_gender_female">Female</label>
169
- <input type="submit" />
170
- </form>
171
- EOS
172
- @session.expects(:get_via_redirect).with("/login", "user" => {"gender" => "F"})
173
- @session.clicks_button
174
- end
175
-
176
- def test_should_send_correct_data_for_rails_style_unchecked_fields
177
- @response.stubs(:body).returns(<<-EOS)
178
- <form method="get" action="/login">
179
- <input id="user_tos" name="user[tos]" type="checkbox" value="1" />
180
- <input name="user[tos]" type="hidden" value="0" /> TOS
181
- <input type="submit" />
182
- </form>
183
- EOS
184
- @session.expects(:get_via_redirect).with("/login", "user" => {"tos" => "0"})
185
- @session.clicks_button
186
- end
187
-
188
- def test_should_send_correct_data_for_rails_style_checked_fields
189
- @response.stubs(:body).returns(<<-EOS)
190
- <form method="get" action="/login">
191
- <input id="user_tos" name="user[tos]" type="checkbox" value="1" checked="checked" />
192
- <input name="user[tos]" type="hidden" value="0" /> TOS
193
- <input type="submit" />
194
- </form>
195
- EOS
196
- @session.expects(:get_via_redirect).with("/login", "user" => {"tos" => "1"})
197
- @session.clicks_button
198
- end
199
-
200
- def test_should_send_default_collection_fields
201
- @response.stubs(:body).returns(<<-EOS)
202
- <form method="post" action="/login">
203
- <input type="checkbox" name="options[]" value="burger" checked="checked" />
204
- <input type="radio" name="options[]" value="fries" checked="checked" />
205
- <input type="text" name="options[]" value="soda" />
206
- <!-- Same value appearing twice -->
207
- <input type="text" name="options[]" value="soda" />
208
- <input type="hidden" name="options[]" value="dessert" />
209
- <input type="hidden" name="response[choices][][selected]" value="one" />
210
- <input type="hidden" name="response[choices][][selected]" value="two" />
211
- <!-- Same value appearing twice -->
212
- <input type="hidden" name="response[choices][][selected]" value="two" />
213
- <input type="submit" />
214
- </form>
215
- EOS
216
- @session.expects(:post_via_redirect).with("/login",
217
- "options" => ["soda", "soda", "dessert", "burger", "fries"],
218
- "response" => { "choices" => [{"selected" => "one"}, {"selected" => "two"}, {"selected" => "two"}]})
219
- @session.clicks_button
220
- end
221
-
222
- def test_should_not_send_default_unchecked_fields
223
- @response.stubs(:body).returns(<<-EOS)
224
- <form method="get" action="/login">
225
- <input id="user_tos" name="user[tos]" value="1" type="checkbox" />
226
- <input type="submit" />
227
- </form>
228
- EOS
229
- @session.expects(:get_via_redirect).with("/login", {})
230
- @session.clicks_button
231
- end
232
-
233
- def test_should_send_default_textarea_values
234
- @response.stubs(:body).returns(<<-EOS)
235
- <form method="post" action="/posts">
236
- <textarea name="post[body]">Post body here!</textarea>
237
- <input type="submit" />
238
- </form>
239
- EOS
240
- @session.expects(:post_via_redirect).with("/posts", "post" => {"body" => "Post body here!"})
241
- @session.clicks_button
242
- end
243
-
244
- def test_should_send_default_selected_option_value_from_select
245
- @response.stubs(:body).returns(<<-EOS)
246
- <form method="get" action="/login">
247
- <select name="month">
248
- <option value="1">January</option>
249
- <option value="2" selected="selected">February</option>
250
- </select>
251
- <input type="submit" />
252
- </form>
253
- EOS
254
- @session.expects(:get_via_redirect).with("/login", "month" => "2")
255
- @session.clicks_button
256
- end
257
-
258
- def test_should_send_default_selected_option_inner_html_from_select_when_no_value_attribute
259
- @response.stubs(:body).returns(<<-EOS)
260
- <form method="get" action="/login">
261
- <select name="month">
262
- <option>January</option>
263
- <option selected="selected">February</option>
264
- </select>
265
- <input type="submit" />
266
- </form>
267
- EOS
268
- @session.expects(:get_via_redirect).with("/login", "month" => "February")
269
- @session.clicks_button
270
- end
271
-
272
- def test_should_send_first_select_option_value_when_no_option_selected
273
- @response.stubs(:body).returns(<<-EOS)
274
- <form method="get" action="/login">
275
- <select name="month">
276
- <option value="1">January</option>
277
- <option value="2">February</option>
278
- </select>
279
- <input type="submit" />
280
- </form>
281
- EOS
282
- @session.expects(:get_via_redirect).with("/login", "month" => "1")
283
- @session.clicks_button
284
- end
285
-
286
- def test_should_handle_nested_properties
287
- @response.stubs(:body).returns(<<-EOS)
288
- <form method="post" action="/login">
289
- <input type="text" id="contestant_scores_12" name="contestant[scores][1]" value="2"/>
290
- <input type="text" id="contestant_scores_13" name="contestant[scores][3]" value="4"/>
291
- <input type="submit" />
292
- </form>
293
- EOS
294
- @session.expects(:post_via_redirect).with("/login", "contestant" => {"scores" => {'1' => '2', '3' => '4'}})
295
- @session.clicks_button
296
- end
297
-
298
- def test_should_send_default_empty_text_field_values
299
- @response.stubs(:body).returns(<<-EOS)
300
- <form method="get" action="/login">
301
- <input id="user_email" name="user[email]" value="" type="text" />
302
- <input type="submit" />
303
- </form>
304
- EOS
305
- @session.expects(:get_via_redirect).with("/login", "user" => {"email" => ""})
306
- @session.clicks_button
307
- end
308
- end