diamond-mechanize 2.1 → 2.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 (147) hide show
  1. metadata +222 -167
  2. data/Rakefile +0 -49
  3. data/lib/mechanize/content_type_error.rb +0 -13
  4. data/lib/mechanize/cookie.rb +0 -232
  5. data/lib/mechanize/cookie_jar.rb +0 -194
  6. data/lib/mechanize/download.rb +0 -59
  7. data/lib/mechanize/element_matcher.rb +0 -36
  8. data/lib/mechanize/file.rb +0 -65
  9. data/lib/mechanize/file_connection.rb +0 -17
  10. data/lib/mechanize/file_request.rb +0 -26
  11. data/lib/mechanize/file_response.rb +0 -74
  12. data/lib/mechanize/file_saver.rb +0 -39
  13. data/lib/mechanize/form/button.rb +0 -6
  14. data/lib/mechanize/form/check_box.rb +0 -12
  15. data/lib/mechanize/form/field.rb +0 -54
  16. data/lib/mechanize/form/file_upload.rb +0 -21
  17. data/lib/mechanize/form/hidden.rb +0 -3
  18. data/lib/mechanize/form/image_button.rb +0 -19
  19. data/lib/mechanize/form/keygen.rb +0 -34
  20. data/lib/mechanize/form/multi_select_list.rb +0 -94
  21. data/lib/mechanize/form/option.rb +0 -50
  22. data/lib/mechanize/form/radio_button.rb +0 -55
  23. data/lib/mechanize/form/reset.rb +0 -3
  24. data/lib/mechanize/form/select_list.rb +0 -44
  25. data/lib/mechanize/form/submit.rb +0 -3
  26. data/lib/mechanize/form/text.rb +0 -3
  27. data/lib/mechanize/form/textarea.rb +0 -3
  28. data/lib/mechanize/form.rb +0 -543
  29. data/lib/mechanize/headers.rb +0 -23
  30. data/lib/mechanize/history.rb +0 -82
  31. data/lib/mechanize/http/agent.rb +0 -1004
  32. data/lib/mechanize/http/auth_challenge.rb +0 -59
  33. data/lib/mechanize/http/auth_realm.rb +0 -31
  34. data/lib/mechanize/http/content_disposition_parser.rb +0 -188
  35. data/lib/mechanize/http/www_authenticate_parser.rb +0 -155
  36. data/lib/mechanize/http.rb +0 -8
  37. data/lib/mechanize/monkey_patch.rb +0 -16
  38. data/lib/mechanize/page/base.rb +0 -7
  39. data/lib/mechanize/page/frame.rb +0 -27
  40. data/lib/mechanize/page/image.rb +0 -30
  41. data/lib/mechanize/page/label.rb +0 -20
  42. data/lib/mechanize/page/link.rb +0 -98
  43. data/lib/mechanize/page/meta_refresh.rb +0 -68
  44. data/lib/mechanize/page.rb +0 -440
  45. data/lib/mechanize/parser.rb +0 -173
  46. data/lib/mechanize/pluggable_parsers.rb +0 -144
  47. data/lib/mechanize/redirect_limit_reached_error.rb +0 -19
  48. data/lib/mechanize/redirect_not_get_or_head_error.rb +0 -21
  49. data/lib/mechanize/response_code_error.rb +0 -21
  50. data/lib/mechanize/response_read_error.rb +0 -27
  51. data/lib/mechanize/robots_disallowed_error.rb +0 -28
  52. data/lib/mechanize/test_case.rb +0 -663
  53. data/lib/mechanize/unauthorized_error.rb +0 -3
  54. data/lib/mechanize/unsupported_scheme_error.rb +0 -6
  55. data/lib/mechanize/util.rb +0 -101
  56. data/lib/mechanize.rb +0 -1079
  57. data/test/data/htpasswd +0 -1
  58. data/test/data/server.crt +0 -16
  59. data/test/data/server.csr +0 -12
  60. data/test/data/server.key +0 -15
  61. data/test/data/server.pem +0 -15
  62. data/test/htdocs/alt_text.html +0 -10
  63. data/test/htdocs/bad_form_test.html +0 -9
  64. data/test/htdocs/button.jpg +0 -0
  65. data/test/htdocs/canonical_uri.html +0 -9
  66. data/test/htdocs/dir with spaces/foo.html +0 -1
  67. data/test/htdocs/empty_form.html +0 -6
  68. data/test/htdocs/file_upload.html +0 -26
  69. data/test/htdocs/find_link.html +0 -41
  70. data/test/htdocs/form_multi_select.html +0 -16
  71. data/test/htdocs/form_multival.html +0 -37
  72. data/test/htdocs/form_no_action.html +0 -18
  73. data/test/htdocs/form_no_input_name.html +0 -16
  74. data/test/htdocs/form_order_test.html +0 -11
  75. data/test/htdocs/form_select.html +0 -16
  76. data/test/htdocs/form_set_fields.html +0 -14
  77. data/test/htdocs/form_test.html +0 -188
  78. data/test/htdocs/frame_referer_test.html +0 -10
  79. data/test/htdocs/frame_test.html +0 -30
  80. data/test/htdocs/google.html +0 -13
  81. data/test/htdocs/index.html +0 -6
  82. data/test/htdocs/link with space.html +0 -5
  83. data/test/htdocs/meta_cookie.html +0 -11
  84. data/test/htdocs/no_title_test.html +0 -6
  85. data/test/htdocs/noindex.html +0 -9
  86. data/test/htdocs/rails_3_encoding_hack_form_test.html +0 -27
  87. data/test/htdocs/relative/tc_relative_links.html +0 -21
  88. data/test/htdocs/robots.html +0 -8
  89. data/test/htdocs/robots.txt +0 -2
  90. data/test/htdocs/tc_bad_charset.html +0 -9
  91. data/test/htdocs/tc_bad_links.html +0 -5
  92. data/test/htdocs/tc_base_link.html +0 -8
  93. data/test/htdocs/tc_blank_form.html +0 -11
  94. data/test/htdocs/tc_charset.html +0 -6
  95. data/test/htdocs/tc_checkboxes.html +0 -19
  96. data/test/htdocs/tc_encoded_links.html +0 -5
  97. data/test/htdocs/tc_field_precedence.html +0 -11
  98. data/test/htdocs/tc_follow_meta.html +0 -8
  99. data/test/htdocs/tc_form_action.html +0 -48
  100. data/test/htdocs/tc_links.html +0 -19
  101. data/test/htdocs/tc_meta_in_body.html +0 -9
  102. data/test/htdocs/tc_pretty_print.html +0 -17
  103. data/test/htdocs/tc_referer.html +0 -16
  104. data/test/htdocs/tc_relative_links.html +0 -19
  105. data/test/htdocs/tc_textarea.html +0 -23
  106. data/test/htdocs/test_click.html +0 -11
  107. data/test/htdocs/unusual______.html +0 -5
  108. data/test/test_mechanize.rb +0 -1164
  109. data/test/test_mechanize_cookie.rb +0 -451
  110. data/test/test_mechanize_cookie_jar.rb +0 -483
  111. data/test/test_mechanize_download.rb +0 -43
  112. data/test/test_mechanize_file.rb +0 -61
  113. data/test/test_mechanize_file_connection.rb +0 -21
  114. data/test/test_mechanize_file_request.rb +0 -19
  115. data/test/test_mechanize_file_saver.rb +0 -21
  116. data/test/test_mechanize_form.rb +0 -875
  117. data/test/test_mechanize_form_check_box.rb +0 -38
  118. data/test/test_mechanize_form_encoding.rb +0 -114
  119. data/test/test_mechanize_form_field.rb +0 -63
  120. data/test/test_mechanize_form_file_upload.rb +0 -20
  121. data/test/test_mechanize_form_image_button.rb +0 -12
  122. data/test/test_mechanize_form_keygen.rb +0 -32
  123. data/test/test_mechanize_form_multi_select_list.rb +0 -84
  124. data/test/test_mechanize_form_option.rb +0 -55
  125. data/test/test_mechanize_form_radio_button.rb +0 -78
  126. data/test/test_mechanize_form_select_list.rb +0 -76
  127. data/test/test_mechanize_form_textarea.rb +0 -52
  128. data/test/test_mechanize_headers.rb +0 -35
  129. data/test/test_mechanize_history.rb +0 -103
  130. data/test/test_mechanize_http_agent.rb +0 -1225
  131. data/test/test_mechanize_http_auth_challenge.rb +0 -39
  132. data/test/test_mechanize_http_auth_realm.rb +0 -49
  133. data/test/test_mechanize_http_content_disposition_parser.rb +0 -118
  134. data/test/test_mechanize_http_www_authenticate_parser.rb +0 -146
  135. data/test/test_mechanize_link.rb +0 -80
  136. data/test/test_mechanize_page.rb +0 -118
  137. data/test/test_mechanize_page_encoding.rb +0 -182
  138. data/test/test_mechanize_page_frame.rb +0 -16
  139. data/test/test_mechanize_page_link.rb +0 -390
  140. data/test/test_mechanize_page_meta_refresh.rb +0 -127
  141. data/test/test_mechanize_parser.rb +0 -289
  142. data/test/test_mechanize_pluggable_parser.rb +0 -52
  143. data/test/test_mechanize_redirect_limit_reached_error.rb +0 -24
  144. data/test/test_mechanize_redirect_not_get_or_head_error.rb +0 -14
  145. data/test/test_mechanize_subclass.rb +0 -22
  146. data/test/test_mechanize_util.rb +0 -103
  147. data/test/test_multi_select.rb +0 -119
@@ -1,43 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeDownload < Mechanize::TestCase
4
-
5
- def setup
6
- super
7
-
8
- @parser = Mechanize::Download
9
- end
10
-
11
- def test_save_string_io
12
- uri = URI.parse 'http://example/foo.html'
13
- body_io = StringIO.new '0123456789'
14
-
15
- download = @parser.new uri, nil, body_io
16
-
17
- in_tmpdir do
18
- download.save
19
-
20
- assert File.exist? 'foo.html'
21
- end
22
- end
23
-
24
- def test_save_tempfile
25
- uri = URI.parse 'http://example/foo.html'
26
- Tempfile.new __name__ do |body_io|
27
- body_io.write '0123456789'
28
-
29
- body_io.flush
30
- body_io.rewind
31
-
32
- download = @parser.new uri, nil, body_io
33
-
34
- in_tmpdir do
35
- download.save
36
-
37
- assert File.exist? 'foo.html'
38
- end
39
- end
40
- end
41
-
42
- end
43
-
@@ -1,61 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeFile < Mechanize::TestCase
4
-
5
- def setup
6
- super
7
-
8
- @parser = Mechanize::File
9
- end
10
-
11
- def test_save
12
- uri = URI 'http://example/name.html'
13
- page = Mechanize::File.new uri, nil, '0123456789'
14
-
15
- Dir.mktmpdir do |dir|
16
- Dir.chdir dir do
17
- page.save 'test.html'
18
-
19
- assert_equal '0123456789', File.read('test.html')
20
- end
21
- end
22
- end
23
-
24
- def test_save_default
25
- uri = URI 'http://example/test.html'
26
- page = Mechanize::File.new uri, nil, ''
27
-
28
- Dir.mktmpdir do |dir|
29
- Dir.chdir dir do
30
- page.save
31
-
32
- assert File.exist? 'test.html'
33
-
34
- page.save
35
-
36
- assert File.exist? 'test.html.1'
37
-
38
- page.save
39
-
40
- assert File.exist? 'test.html.2'
41
- end
42
- end
43
- end
44
-
45
- def test_save_default_dots
46
- uri = URI 'http://localhost/../test.html'
47
- page = Mechanize::File.new uri, nil, ''
48
-
49
- Dir.mktmpdir do |dir|
50
- Dir.chdir dir do
51
- page.save
52
- assert File.exist? 'test.html'
53
-
54
- page.save
55
- assert File.exist? 'test.html.1'
56
- end
57
- end
58
- end
59
-
60
- end
61
-
@@ -1,21 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeFileConnection < Mechanize::TestCase
4
-
5
- def test_request
6
- uri = URI.parse "file://#{File.expand_path __FILE__}"
7
- conn = Mechanize::FileConnection.new
8
-
9
- body = ''
10
-
11
- conn.request uri, nil do |response|
12
- response.read_body do |part|
13
- body << part
14
- end
15
- end
16
-
17
- assert_equal File.read(__FILE__), body
18
- end
19
-
20
- end
21
-
@@ -1,19 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeFileRequest < Mechanize::TestCase
4
-
5
- def test_initialize
6
- uri = URI.parse 'http://example/'
7
-
8
- r = Mechanize::FileRequest.new uri
9
-
10
- assert_equal uri, r.uri
11
- assert_equal '/', r.path
12
-
13
- assert_respond_to r, :[]=
14
- assert_respond_to r, :add_field
15
- assert_respond_to r, :each_header
16
- end
17
-
18
- end
19
-
@@ -1,21 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeFileSaver < Mechanize::TestCase
4
-
5
- def setup
6
- super
7
-
8
- @uri = URI 'http://example'
9
- @io = StringIO.new 'hello world'
10
- end
11
-
12
- def test_initialize
13
- in_tmpdir do
14
- Mechanize::FileSaver.new @uri, nil, @io, 200
15
-
16
- assert File.exist? 'example/index.html'
17
- end
18
- end
19
-
20
- end
21
-
@@ -1,875 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeForm < Mechanize::TestCase
4
-
5
- def setup
6
- super
7
-
8
- @form = Mechanize::Form.new node 'form'
9
- end
10
-
11
- def test_action
12
- form = Mechanize::Form.new node('form', 'action' => '?a=b&amp;b=c')
13
-
14
- assert_equal '?a=b&b=c', form.action
15
- end
16
-
17
- def test_aset
18
- assert_empty @form.keys
19
-
20
- @form['intarweb'] = 'Aaron'
21
-
22
- assert_equal 'Aaron', @form['intarweb']
23
- end
24
-
25
- def test_aset_exists
26
- page = html_page <<-BODY
27
- <title>Page Title</title>
28
- <form name="post_form">
29
- <input name="first" type="text" id="name_first">
30
- <input name="first" type="text">
31
- <input type="submit" value="Submit">
32
- </form>
33
- BODY
34
-
35
- form = page.form_with(:name => 'post_form')
36
-
37
- assert_equal %w[first first], form.keys
38
-
39
- form['first'] = 'Aaron'
40
-
41
- assert_equal 'Aaron', form['first']
42
- assert_equal ['Aaron', ''], form.values
43
- end
44
-
45
- def test_build_query_blank_form
46
- page = @mech.get('http://localhost/tc_blank_form.html')
47
- form = page.forms.first
48
- query = form.build_query
49
- assert(query.length > 0)
50
- assert query.all? { |x| x[1] == '' }
51
- end
52
-
53
- def test_method_missing_get
54
- page = html_page <<-BODY
55
- <form>
56
- <input name="not_a_method" value="some value">
57
- </form>
58
- BODY
59
-
60
- form = page.forms.first
61
-
62
- assert_equal 'some value', form.not_a_method
63
- end
64
-
65
- def test_method_missing_set
66
- page = html_page <<-BODY
67
- <form>
68
- <input name="not_a_method">
69
- </form>
70
- BODY
71
-
72
- form = page.forms.first
73
-
74
- form.not_a_method = 'some value'
75
-
76
- assert_equal [%w[not_a_method some\ value]], form.build_query
77
- end
78
-
79
- def test_parse_buttons
80
- page = html_page <<-BODY
81
- <form>
82
- <input type="submit" value="submit">
83
- <input type="button" value="submit">
84
- <button type="submit" value="submit">
85
- <button type="button" value="submit">
86
- <input type="image" name="submit" src="/button.jpeg">
87
- <input type="image" src="/button.jpeg">
88
- </form>
89
- BODY
90
-
91
- form = page.forms.first
92
- buttons = form.buttons.sort
93
-
94
- assert buttons.all? { |b| Mechanize::Form::Button === b }
95
-
96
- assert_equal 'submit', buttons.shift.type
97
- assert_equal 'button', buttons.shift.type
98
- assert_equal 'submit', buttons.shift.type
99
- assert_equal 'button', buttons.shift.type
100
- assert_equal 'image', buttons.shift.type
101
- assert_equal 'image', buttons.shift.type
102
-
103
- assert_empty buttons
104
- end
105
-
106
- def test_parse_select
107
- page = html_page <<-BODY
108
- <form>
109
- <select name="multi" multiple></select>
110
- <select name="single"></select>
111
- </form>
112
- BODY
113
-
114
- form = page.forms.first
115
- selects = form.fields.sort
116
-
117
- multi = selects.shift
118
- assert_kind_of Mechanize::Form::MultiSelectList, multi
119
-
120
- single = selects.shift
121
- assert_kind_of Mechanize::Form::SelectList, single
122
-
123
- assert_empty selects
124
- end
125
-
126
- def test_checkboxes_no_input_name
127
- page = @mech.get('http://localhost/form_no_input_name.html')
128
- form = page.forms.first
129
-
130
- assert_equal(0, form.checkboxes.length)
131
- end
132
-
133
- def test_field_with
134
- page = @mech.get("http://localhost/google.html")
135
- search = page.forms.find { |f| f.name == "f" }
136
-
137
- assert(search.field_with(:name => 'q'))
138
- assert(search.field_with(:name => 'hl'))
139
- assert(search.fields.find { |f| f.name == 'ie' })
140
- end
141
-
142
- def test_fields_no_input_name
143
- page = @mech.get('http://localhost/form_no_input_name.html')
144
- form = page.forms.first
145
-
146
- assert_equal(0, form.fields.length)
147
- end
148
-
149
- def test_file_uploads_no_value
150
- page = @mech.get("http://localhost/file_upload.html")
151
- form = page.form('value_test')
152
- assert_nil(form.file_uploads.first.value)
153
- assert_nil(form.file_uploads.first.file_name)
154
- end
155
-
156
- def test_forms_no_input_name
157
- page = @mech.get('http://localhost/form_no_input_name.html')
158
- form = page.forms.first
159
-
160
- assert_equal(0, form.radiobuttons.length)
161
- end
162
-
163
- def test_has_field_eh
164
- refute @form.has_field? 'name'
165
-
166
- @form['name'] = 'Aaron'
167
-
168
- assert @form.has_field?('name')
169
- end
170
-
171
- def test_has_value_eh
172
- refute @form.has_value? 'Aaron'
173
-
174
- @form['name'] = 'Aaron'
175
-
176
- assert @form.has_value?('Aaron')
177
- end
178
-
179
- def test_keys
180
- assert_empty @form.keys
181
-
182
- @form['name'] = 'Aaron'
183
-
184
- assert_equal %w[name], @form.keys
185
- end
186
-
187
- def test_parse_textarea
188
- form = Nokogiri::HTML <<-FORM
189
- <form>
190
- <textarea name="t">hi</textarea>
191
- </form>
192
- FORM
193
-
194
- form = Mechanize::Form.new form, @mech
195
- textarea = form.fields.first
196
-
197
- assert_kind_of Mechanize::Form::Textarea, textarea
198
- assert_equal 'hi', textarea.value
199
- end
200
-
201
- def test_post_with_rails_3_encoding_hack
202
- page = @mech.get("http://localhost/rails_3_encoding_hack_form_test.html")
203
- form = page.forms.first
204
- form.submit
205
- end
206
-
207
- def test_post_with_blank_encoding
208
- page = @mech.get("http://localhost/form_test.html")
209
- form = page.form('post_form1')
210
- form.page.encoding = nil
211
- form.submit
212
- end
213
-
214
- def test_set_fields_duplicate
215
- page = html_page '<form><input name="a" value="b"><input name="a"></form>'
216
- form = page.forms.first
217
-
218
- form.set_fields :a => 'c'
219
-
220
- assert_equal 'c', form.fields.first.value
221
- assert_equal '', form.fields.last.value
222
- end
223
-
224
- def test_set_fields_none
225
- page = html_page '<form><input name="a" value="b"></form>'
226
- form = page.forms.first
227
-
228
- form.set_fields
229
-
230
- assert_equal 'b', form.fields.first.value
231
- end
232
-
233
- def test_set_fields_many
234
- page = html_page '<form><input name="a" value="b"><input name="b"></form>'
235
- form = page.forms.first
236
-
237
- form.set_fields :a => 'c', :b => 'd'
238
-
239
- assert_equal 'c', form.fields.first.value
240
- assert_equal 'd', form.fields.last.value
241
- end
242
-
243
- def test_set_fields_one
244
- page = html_page '<form><input name="a" value="b"></form>'
245
- form = page.forms.first
246
-
247
- form.set_fields :a => 'c'
248
-
249
- assert_equal 'c', form.fields.first.value
250
- end
251
-
252
- def test_set_fields_position
253
- page = html_page '<form><input name="a" value="b"><input name="a"></form>'
254
- form = page.forms.first
255
-
256
- form.set_fields :a => { 0 => 'c', 1 => 'd' }
257
-
258
- assert_equal 'c', form.fields.first.value
259
- assert_equal 'd', form.fields.last.value
260
- end
261
-
262
- def test_set_fields_position_crappily
263
- page = html_page '<form><input name="a" value="b"><input name="a"></form>'
264
- form = page.forms.first
265
-
266
- form.set_fields :a => ['c', 1]
267
-
268
- assert_equal 'b', form.fields.first.value
269
- assert_equal 'c', form.fields.last.value
270
- end
271
-
272
- def test_values
273
- assert_empty @form.values
274
-
275
- @form['name'] = 'Aaron'
276
-
277
- assert_equal %w[Aaron], @form.values
278
- end
279
-
280
- def test_no_form_action
281
- page = @mech.get('http://localhost:2000/form_no_action.html')
282
- page.forms.first.fields.first.value = 'Aaron'
283
- page = @mech.submit(page.forms.first)
284
- assert_match('/form_no_action.html?first=Aaron', page.uri.to_s)
285
- end
286
-
287
- def test_submit_first_field_wins
288
- page = @mech.get('http://localhost/tc_field_precedence.html')
289
- form = page.forms.first
290
-
291
- assert !form.checkboxes.empty?
292
- assert_equal "1", form.checkboxes.first.value
293
-
294
- submitted = form.submit
295
-
296
- assert_equal 'ticky=1&ticky=0', submitted.parser.at('#query').text
297
- end
298
-
299
- def test_submit_takes_arbirary_headers
300
- page = @mech.get('http://localhost:2000/form_no_action.html')
301
- assert form = page.forms.first
302
- form.action = '/http_headers'
303
- page = @mech.submit(form, nil, { 'foo' => 'bar' })
304
-
305
- headers = page.body.split("\n").map { |x| x.split('|', 2) }.flatten
306
- headers = Hash[*headers]
307
-
308
- assert_equal 'bar', headers['foo']
309
- end
310
-
311
- def test_submit_select_default_all
312
- page = html_page <<-BODY
313
- <form name="form1" method="post" action="/form_post">
314
- <select name="list">
315
- <option value="1" selected>Option 1</option>
316
- <option value="2" selected>Option 2</option>
317
- <option value="3" selected>Option 3</option>
318
- <option value="4" selected>Option 4</option>
319
- <option value="5" selected>Option 5</option>
320
- <option value="6" selected>Option 6</option>
321
- </select>
322
- <br />
323
- <input type="submit" value="Submit" />
324
- </form>
325
- BODY
326
-
327
- form = page.forms.first
328
- assert_equal "6", form.list
329
-
330
- page = @mech.submit form
331
- assert_equal 1, page.links.length
332
- assert_equal 1, page.links_with(:text => 'list:6').length
333
- end
334
-
335
- def test_submit_select_default_none
336
- page = html_page <<-BODY
337
- <form name="form1" method="post" action="/form_post">
338
- <select name="list">
339
- <option value="1">Option 1</option>
340
- <option value="2">Option 2</option>
341
- <option>Option No Value</option>
342
- <option value="3">Option 3</option>
343
- <option value="4">Option 4</option>
344
- <option value="5">Option 5</option>
345
- <option value="6">Option 6</option>
346
- </select>
347
- <br />
348
- <input type="submit" value="Submit" />
349
- </form>
350
- BODY
351
-
352
- form = page.forms.first
353
-
354
- assert_equal "1", form.list
355
- page = @mech.submit form
356
-
357
- assert_equal 1, page.links.length
358
- assert_equal 1, page.links_with(:text => 'list:1').length
359
- end
360
-
361
- def test_form_select_default_noopts
362
- page = html_page <<-BODY
363
- <form name="form1" method="post" action="/form_post">
364
- <select name="list">
365
- </select>
366
- <br />
367
- <input type="submit" value="Submit" />
368
- </form>
369
- BODY
370
- form = page.forms.first
371
-
372
- assert form.field 'list'
373
- assert_nil form.list
374
-
375
- page = @mech.submit form
376
-
377
- assert_empty page.links
378
- end
379
-
380
- # Test submitting form with two fields of the same name
381
- def test_post_multival
382
- page = @mech.get("http://localhost/form_multival.html")
383
- form = page.form_with(:name => 'post_form')
384
-
385
- assert_equal(2, form.fields_with(:name => 'first').length)
386
-
387
- form.fields_with(:name => 'first')[0].value = 'Aaron'
388
- form.fields_with(:name => 'first')[1].value = 'Patterson'
389
-
390
- page = @mech.submit(form)
391
-
392
- assert_equal(2, page.links.length)
393
- assert(page.link_with(:text => 'first:Aaron'))
394
- assert(page.link_with(:text => 'first:Patterson'))
395
- end
396
-
397
- # Test calling submit on the form object
398
- def test_submit_on_form
399
- page = @mech.get("http://localhost/form_multival.html")
400
- form = page.form_with(:name => 'post_form')
401
-
402
- assert_equal(2, form.fields_with(:name => 'first').length)
403
-
404
- form.fields_with(:name => 'first')[0].value = 'Aaron'
405
- form.fields_with(:name => 'first')[1].value = 'Patterson'
406
-
407
- page = form.submit
408
-
409
- assert_equal(2, page.links.length)
410
- assert(page.link_with(:text => 'first:Aaron'))
411
- assert(page.link_with(:text => 'first:Patterson'))
412
- end
413
-
414
- # Test submitting form with two fields of the same name
415
- def test_get_multival
416
- page = @mech.get("http://localhost/form_multival.html")
417
- form = page.form_with(:name => 'get_form')
418
-
419
- assert_equal(2, form.fields_with(:name => 'first').length)
420
-
421
- form.fields_with(:name => 'first')[0].value = 'Aaron'
422
- form.fields_with(:name => 'first')[1].value = 'Patterson'
423
-
424
- page = @mech.submit(form)
425
-
426
- assert_equal(2, page.links.length)
427
- assert(page.link_with(:text => 'first:Aaron'))
428
- assert(page.link_with(:text => 'first:Patterson'))
429
- end
430
-
431
- def test_post_with_non_strings
432
- page = @mech.get("http://localhost/form_test.html")
433
- page.form('post_form1') do |form|
434
- form.first_name = 10
435
- end.submit
436
- end
437
-
438
- def test_post
439
- page = @mech.get("http://localhost/form_test.html")
440
- post_form = page.forms.find { |f| f.name == "post_form1" }
441
-
442
- assert_equal("post", post_form.method.downcase)
443
- assert_equal("/form_post", post_form.action)
444
-
445
- assert_equal(3, post_form.fields.size)
446
-
447
- assert_equal(1, post_form.buttons.size)
448
- assert_equal(2, post_form.radiobuttons.size)
449
- assert_equal(3, post_form.checkboxes.size)
450
- assert(post_form.fields.find { |f| f.name == "first_name" },
451
- "First name field was nil")
452
- assert(post_form.fields.find { |f| f.name == "country" },
453
- "Country field was nil")
454
- assert(post_form.radiobuttons.find { |f| f.name == "gender" && f.value == "male"},
455
- "Gender male button was nil")
456
-
457
- assert(post_form.radiobuttons.find {|f| f.name == "gender" && f.value == "female"},
458
- "Gender female button was nil")
459
-
460
- assert(post_form.checkboxes.find { |f| f.name == "cool person" },
461
- "couldn't find cool person checkbox")
462
- assert(post_form.checkboxes.find { |f| f.name == "likes ham" },
463
- "couldn't find likes ham checkbox")
464
- assert(post_form.checkboxes.find { |f| f.name == "green[eggs]" },
465
- "couldn't find green[eggs] checkbox")
466
-
467
- # Find the select list
468
- s = post_form.fields.find { |f| f.name == "country" }
469
- assert_equal(2, s.options.length)
470
- assert_equal("USA", s.value)
471
- assert_equal("USA", s.options.first.value)
472
- assert_equal("USA", s.options.first.text)
473
- assert_equal("CANADA", s.options[1].value)
474
- assert_equal("CANADA", s.options[1].text)
475
-
476
- # Now set all the fields
477
- post_form.fields.find { |f| f.name == "first_name" }.value = "Aaron"
478
- post_form.radiobuttons.find { |f|
479
- f.name == "gender" && f.value == "male"
480
- }.checked = true
481
- post_form.checkboxes.find { |f| f.name == "likes ham" }.checked = true
482
- post_form.checkboxes.find { |f| f.name == "green[eggs]" }.checked = true
483
- page = @mech.submit(post_form, post_form.buttons.first)
484
-
485
- # Check that the submitted fields exist
486
- assert_equal(5, page.links.size, "Not enough links")
487
- assert(page.links.find { |l| l.text == "likes ham:on" },
488
- "likes ham check box missing")
489
- assert(page.links.find { |l| l.text == "green[eggs]:on" },
490
- "green[eggs] check box missing")
491
- assert(page.links.find { |l| l.text == "first_name:Aaron" },
492
- "first_name field missing")
493
- assert(page.links.find { |l| l.text == "gender:male" },
494
- "gender field missing")
495
- assert(page.links.find { |l| l.text == "country:USA" },
496
- "select box not submitted")
497
- end
498
-
499
- def test_post_multipart
500
- page = @mech.get("http://localhost/form_test.html")
501
- post_form = page.forms.find { |f| f.name == "post_form4_multipart" }
502
- assert(post_form, "Post form is null")
503
- assert_equal("post", post_form.method.downcase)
504
- assert_equal("/form_post", post_form.action)
505
-
506
- assert_equal(1, post_form.fields.size)
507
- assert_equal(1, post_form.buttons.size)
508
-
509
- page = @mech.submit(post_form, post_form.buttons.first)
510
-
511
- assert page
512
- end
513
-
514
- def test_select_box
515
- page = @mech.get("http://localhost/form_test.html")
516
- post_form = page.forms.find { |f| f.name == "post_form1" }
517
-
518
- assert(page.header)
519
- assert(page.root)
520
- assert_equal(0, page.iframes.length)
521
- assert_equal("post", post_form.method.downcase)
522
- assert_equal("/form_post", post_form.action)
523
-
524
- # Find the select list
525
- s = post_form.field_with(:name => /country/)
526
-
527
- assert_equal(2, s.options.length)
528
- assert_equal("USA", s.value)
529
- assert_equal("USA", s.options.first.value)
530
- assert_equal("USA", s.options.first.text)
531
- assert_equal("CANADA", s.options[1].value)
532
- assert_equal("CANADA", s.options[1].text)
533
-
534
- # Now set all the fields
535
- post_form.field_with(:name => /country/).value = s.options[1]
536
- assert_equal('CANADA', post_form.country)
537
- page = @mech.submit(post_form, post_form.buttons.first)
538
-
539
- # Check that the submitted fields exist
540
- assert(page.links.find { |l| l.text == "country:CANADA" },
541
- "select box not submitted")
542
- end
543
-
544
- def test_get
545
- page = @mech.get("http://localhost/form_test.html")
546
- get_form = page.forms.find { |f| f.name == "get_form1" }
547
-
548
- assert_equal("get", get_form.method.downcase)
549
- assert_equal("/form_post", get_form.action)
550
- assert_equal(1, get_form.fields.size)
551
- assert_equal(2, get_form.buttons.size)
552
- assert_equal(2, get_form.radiobuttons.size)
553
- assert_equal(3, get_form.checkboxes.size)
554
- assert(get_form.fields.find { |f| f.name == "first_name" },
555
- "First name field was nil")
556
- assert(get_form.radiobuttons.find { |f| f.name == "gender" && f.value == "male"},
557
- "Gender male button was nil")
558
-
559
- assert(get_form.radiobuttons.find {|f| f.name == "gender" && f.value == "female"},
560
- "Gender female button was nil")
561
-
562
- assert(get_form.checkboxes.find { |f| f.name == "cool person" },
563
- "couldn't find cool person checkbox")
564
- assert(get_form.checkboxes.find { |f| f.name == "likes ham" },
565
- "couldn't find likes ham checkbox")
566
- assert(get_form.checkboxes.find { |f| f.name == "green[eggs]" },
567
- "couldn't find green[eggs] checkbox")
568
-
569
- # Set up the image button
570
- img = get_form.buttons.find { |f| f.name == "button" }
571
- img.x = "9"
572
- img.y = "10"
573
- # Now set all the fields
574
- get_form.fields.find { |f| f.name == "first_name" }.value = "Aaron"
575
- get_form.radiobuttons.find { |f|
576
- f.name == "gender" && f.value == "male"
577
- }.checked = true
578
- get_form.checkboxes.find { |f| f.name == "likes ham" }.checked = true
579
- get_form.checkboxes.find { |f| f.name == "green[eggs]" }.checked = true
580
- page = @mech.submit(get_form, get_form.buttons.first)
581
-
582
- # Check that the submitted fields exist
583
- assert_equal(6, page.links.size, "Not enough links")
584
- assert(page.links.find { |l| l.text == "likes ham:on" },
585
- "likes ham check box missing")
586
- assert(page.links.find { |l| l.text == "green[eggs]:on" },
587
- "green[eggs] check box missing")
588
- assert(page.links.find { |l| l.text == "first_name:Aaron" },
589
- "first_name field missing")
590
- assert(page.links.find { |l| l.text == "gender:male" },
591
- "gender field missing")
592
- assert(page.links.find { |l| l.text == "button.y:10" },
593
- "Image button missing")
594
- assert(page.links.find { |l| l.text == "button.x:9" },
595
- "Image button missing")
596
- end
597
-
598
- def test_post_with_space_in_action
599
- page = @mech.get("http://localhost/form_test.html")
600
- post_form = page.forms.find { |f| f.name == "post_form2" }
601
-
602
- assert_equal("post", post_form.method.downcase)
603
- assert_equal("/form post", post_form.action)
604
- assert_equal(1, post_form.fields.size)
605
- assert_equal(1, post_form.buttons.size)
606
- assert_equal(2, post_form.radiobuttons.size)
607
- assert_equal(2, post_form.checkboxes.size)
608
- assert(post_form.fields.find { |f| f.name == "first_name" },
609
- "First name field was nil")
610
- assert(post_form.radiobuttons.find { |f| f.name == "gender" && f.value == "male"},
611
- "Gender male button was nil")
612
-
613
- assert(post_form.radiobuttons.find {|f| f.name == "gender" && f.value == "female"},
614
- "Gender female button was nil")
615
-
616
- assert(post_form.checkboxes.find { |f| f.name == "cool person" },
617
- "couldn't find cool person checkbox")
618
- assert(post_form.checkboxes.find { |f| f.name == "likes ham" },
619
- "couldn't find likes ham checkbox")
620
-
621
- # Now set all the fields
622
- post_form.fields.find { |f| f.name == "first_name" }.value = "Aaron"
623
- post_form.radiobuttons.find { |f|
624
- f.name == "gender" && f.value == "male"
625
- }.checked = true
626
- post_form.checkboxes.find { |f| f.name == "likes ham" }.checked = true
627
- page = @mech.submit(post_form, post_form.buttons.first)
628
-
629
- # Check that the submitted fields exist
630
- assert_equal(3, page.links.size, "Not enough links")
631
- assert(page.links.find { |l| l.text == "likes ham:on" },
632
- "likes ham check box missing")
633
- assert(page.links.find { |l| l.text == "first_name:Aaron" },
634
- "first_name field missing")
635
- assert(page.links.find { |l| l.text == "gender:male" },
636
- "gender field missing")
637
- end
638
-
639
- def test_get_with_space_in_action
640
- page = @mech.get("http://localhost/form_test.html")
641
- get_form = page.forms.find { |f| f.name == "get_form2" }
642
-
643
- assert_equal("get", get_form.method.downcase)
644
- assert_equal("/form post", get_form.action)
645
- assert_equal(1, get_form.fields.size)
646
- assert_equal(1, get_form.buttons.size)
647
- assert_equal(2, get_form.radiobuttons.size)
648
- assert_equal(2, get_form.checkboxes.size)
649
- assert(get_form.fields.find { |f| f.name == "first_name" },
650
- "First name field was nil")
651
- assert(get_form.radiobuttons.find { |f| f.name == "gender" && f.value == "male"},
652
- "Gender male button was nil")
653
-
654
- assert(get_form.radiobuttons.find {|f| f.name == "gender" && f.value == "female"},
655
- "Gender female button was nil")
656
-
657
- assert(get_form.checkboxes.find { |f| f.name == "cool person" },
658
- "couldn't find cool person checkbox")
659
- assert(get_form.checkboxes.find { |f| f.name == "likes ham" },
660
- "couldn't find likes ham checkbox")
661
-
662
- # Now set all the fields
663
- get_form.fields.find { |f| f.name == "first_name" }.value = "Aaron"
664
- get_form.radiobuttons.find { |f|
665
- f.name == "gender" && f.value == "male"
666
- }.checked = true
667
- get_form.checkboxes.find { |f| f.name == "likes ham" }.checked = true
668
- page = @mech.submit(get_form, get_form.buttons.first)
669
-
670
- # Check that the submitted fields exist
671
- assert_equal(3, page.links.size, "Not enough links")
672
- assert(page.links.find { |l| l.text == "likes ham:on" },
673
- "likes ham check box missing")
674
- assert(page.links.find { |l| l.text == "first_name:Aaron" },
675
- "first_name field missing")
676
- assert(page.links.find { |l| l.text == "gender:male" },
677
- "gender field missing")
678
- end
679
-
680
- def test_post_with_param_in_action
681
- page = @mech.get("http://localhost/form_test.html")
682
- post_form = page.forms.find { |f| f.name == "post_form3" }
683
-
684
- assert_equal("post", post_form.method.downcase)
685
- assert_equal("/form_post?great day=yes&one=two", post_form.action)
686
- assert_equal(1, post_form.fields.size)
687
- assert_equal(1, post_form.buttons.size)
688
- assert_equal(2, post_form.radiobuttons.size)
689
- assert_equal(2, post_form.checkboxes.size)
690
-
691
- assert(post_form.fields.find { |f| f.name == "first_name" },
692
- "First name field was nil")
693
-
694
- male_button = post_form.radiobuttons.find { |f|
695
- f.name == "gender" && f.value == "male"
696
- }
697
- assert(male_button, "Gender male button was nil")
698
-
699
- female_button = post_form.radiobuttons.find { |f|
700
- f.name == "gender" && f.value == "female"
701
- }
702
-
703
- assert(female_button, "Gender female button was nil")
704
-
705
- assert(post_form.checkbox_with(:name => "cool person"),
706
- "couldn't find cool person checkbox")
707
-
708
- assert(post_form.checkboxes.find { |f| f.name == "likes ham" },
709
- "couldn't find likes ham checkbox")
710
-
711
- # Now set all the fields
712
- post_form.field_with(:name => 'first_name').value = "Aaron"
713
- post_form.radiobuttons.find { |f|
714
- f.name == "gender" && f.value == "male"
715
- }.checked = true
716
- post_form.checkboxes.find { |f| f.name == "likes ham" }.checked = true
717
-
718
- page = @mech.submit(post_form, post_form.buttons.first)
719
-
720
- # Check that the submitted fields exist
721
- assert_equal(3, page.links.size, "Not enough links")
722
-
723
- assert(page.links.find { |l| l.text == "likes ham:on" },
724
- "likes ham check box missing")
725
- assert(page.links.find { |l| l.text == "first_name:Aaron" },
726
- "first_name field missing")
727
- assert(page.links.find { |l| l.text == "gender:male" },
728
- "gender field missing")
729
- end
730
-
731
- def test_get_with_param_in_action
732
- page = @mech.get("http://localhost/form_test.html")
733
- get_form = page.forms.find { |f| f.name == "get_form3" }
734
-
735
- assert_equal("get", get_form.method.downcase)
736
- assert_equal("/form_post?great day=yes&one=two", get_form.action)
737
- assert_equal(1, get_form.fields.size)
738
- assert_equal(1, get_form.buttons.size)
739
- assert_equal(2, get_form.radiobuttons.size)
740
- assert_equal(2, get_form.checkboxes.size)
741
- assert(get_form.fields.find { |f| f.name == "first_name" },
742
- "First name field was nil")
743
- assert(get_form.radiobuttons.find { |f| f.name == "gender" && f.value == "male"},
744
- "Gender male button was nil")
745
-
746
- assert(get_form.radiobuttons.find {|f| f.name == "gender" && f.value == "female"},
747
- "Gender female button was nil")
748
-
749
- assert(get_form.checkboxes.find { |f| f.name == "cool person" },
750
- "couldn't find cool person checkbox")
751
- assert(get_form.checkboxes.find { |f| f.name == "likes ham" },
752
- "couldn't find likes ham checkbox")
753
-
754
- # Now set all the fields
755
- get_form.fields.find { |f| f.name == "first_name" }.value = "Aaron"
756
- get_form.radiobuttons.find { |f|
757
- f.name == "gender" && f.value == "male"
758
- }.checked = true
759
- get_form.checkboxes.find { |f| f.name == "likes ham" }.checked = true
760
- page = @mech.submit(get_form, get_form.buttons.first)
761
- # Check that the submitted fields exist
762
- assert_equal(3, page.links.size, "Not enough links")
763
- assert(page.links.find { |l| l.text == "likes ham:on" },
764
- "likes ham check box missing")
765
- assert(page.links.find { |l| l.text == "first_name:Aaron" },
766
- "first_name field missing")
767
- assert(page.links.find { |l| l.text == "gender:male" },
768
- "gender field missing")
769
- end
770
-
771
- def test_field_addition
772
- page = @mech.get("http://localhost/form_test.html")
773
- get_form = page.forms.find { |f| f.name == "get_form1" }
774
- get_form.field("first_name").value = "Gregory"
775
- assert_equal( "Gregory", get_form.field("first_name").value )
776
- end
777
-
778
- def test_fields_as_accessors
779
- page = @mech.get("http://localhost/form_multival.html")
780
- form = page.form_with(:name => 'post_form')
781
-
782
- assert_equal(2, form.fields_with(:name => 'first').length)
783
-
784
- form.first = 'Aaron'
785
- assert_equal('Aaron', form.first)
786
- end
787
-
788
- def test_form_and_fields_dom_id
789
- # blatant copypasta of test above
790
- page = @mech.get("http://localhost/form_test.html")
791
- form = page.form_with(:dom_id => 'generic_form')
792
- form_by_id = page.form_with(:id => 'generic_form')
793
-
794
- assert_equal(1, form.fields_with(:dom_id => 'name_first').length)
795
- assert_equal('first_name', form.field_with(:dom_id => 'name_first').name)
796
-
797
- # *_with(:id => blah) should work exactly like (:dom_id => blah)
798
- assert_equal(form, form_by_id)
799
- assert_equal(form.fields_with(:dom_id => 'name_first'), form.fields_with(:id => 'name_first'))
800
- end
801
-
802
- def test_form_and_fields_dom_class
803
- # blatant copypasta of test above
804
- page = @mech.get("http://localhost/form_test.html")
805
- form = page.form_with(:dom_class => 'really_generic_form')
806
- form_by_class = page.form_with(:class => 'really_generic_form')
807
-
808
- assert_equal(1, form.fields_with(:dom_class => 'text_input').length)
809
- assert_equal('first_name', form.field_with(:dom_class => 'text_input').name)
810
-
811
- # *_with(:class => blah) should work exactly like (:dom_class => blah)
812
- assert_equal(form, form_by_class)
813
- assert_equal(form.fields_with(:dom_class => 'text_input'), form.fields_with(:class => 'text_input'))
814
- end
815
-
816
- def test_add_field
817
- page = @mech.get("http://localhost/form_multival.html")
818
- form = page.form_with(:name => 'post_form')
819
-
820
- number_of_fields = form.fields.length
821
-
822
- assert form.add_field!('intarweb')
823
- assert_equal(number_of_fields + 1, form.fields.length)
824
- end
825
-
826
- def test_delete_field
827
- page = @mech.get("http://localhost/form_multival.html")
828
- form = page.form_with(:name => 'post_form')
829
-
830
- number_of_fields = form.fields.length
831
- assert_equal 2, number_of_fields
832
-
833
- form.delete_field!('first')
834
- assert_nil(form['first'])
835
- assert_equal(number_of_fields - 2, form.fields.length)
836
- end
837
-
838
- def test_has_field
839
- page = @mech.get("http://localhost/form_multival.html")
840
- form = page.form_with(:name => 'post_form')
841
-
842
- assert(!form.has_field?('intarweb'))
843
- assert form.add_field!('intarweb')
844
- assert(form.has_field?('intarweb'))
845
- end
846
-
847
- def test_field_error
848
- @page = @mech.get('http://localhost/empty_form.html')
849
- form = @page.forms.first
850
- assert_raises(NoMethodError) {
851
- form.foo = 'asdfasdf'
852
- }
853
-
854
- assert_raises(NoMethodError) {
855
- form.foo
856
- }
857
- end
858
-
859
- def test_form_build_query
860
- page = @mech.get("http://localhost/form_order_test.html")
861
- get_form = page.forms.first
862
-
863
- query = get_form.build_query
864
-
865
- expected = [
866
- %w[1 RADIO],
867
- %w[3 nobody@example],
868
- %w[2 TEXT],
869
- %w[3 2011-10],
870
- ]
871
-
872
- assert_equal expected, query
873
- end
874
-
875
- end