kitamomonga-mechanize 0.9.3.20090724215219

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 (177) hide show
  1. data/CHANGELOG.rdoc +504 -0
  2. data/EXAMPLES.rdoc +171 -0
  3. data/FAQ.rdoc +11 -0
  4. data/GUIDE.rdoc +122 -0
  5. data/LICENSE.rdoc +340 -0
  6. data/Manifest.txt +176 -0
  7. data/README.rdoc +60 -0
  8. data/Rakefile +33 -0
  9. data/examples/flickr_upload.rb +23 -0
  10. data/examples/mech-dump.rb +7 -0
  11. data/examples/proxy_req.rb +9 -0
  12. data/examples/rubyforge.rb +21 -0
  13. data/examples/spider.rb +11 -0
  14. data/lib/mechanize.rb +666 -0
  15. data/lib/mechanize/chain.rb +34 -0
  16. data/lib/mechanize/chain/auth_headers.rb +78 -0
  17. data/lib/mechanize/chain/body_decoding_handler.rb +46 -0
  18. data/lib/mechanize/chain/connection_resolver.rb +76 -0
  19. data/lib/mechanize/chain/custom_headers.rb +21 -0
  20. data/lib/mechanize/chain/handler.rb +9 -0
  21. data/lib/mechanize/chain/header_resolver.rb +51 -0
  22. data/lib/mechanize/chain/parameter_resolver.rb +22 -0
  23. data/lib/mechanize/chain/post_connect_hook.rb +0 -0
  24. data/lib/mechanize/chain/post_page_hook.rb +18 -0
  25. data/lib/mechanize/chain/pre_connect_hook.rb +20 -0
  26. data/lib/mechanize/chain/request_resolver.rb +30 -0
  27. data/lib/mechanize/chain/response_body_parser.rb +38 -0
  28. data/lib/mechanize/chain/response_header_handler.rb +48 -0
  29. data/lib/mechanize/chain/response_reader.rb +39 -0
  30. data/lib/mechanize/chain/ssl_resolver.rb +40 -0
  31. data/lib/mechanize/chain/uri_resolver.rb +75 -0
  32. data/lib/mechanize/content_type_error.rb +14 -0
  33. data/lib/mechanize/cookie.rb +70 -0
  34. data/lib/mechanize/cookie_jar.rb +188 -0
  35. data/lib/mechanize/file.rb +71 -0
  36. data/lib/mechanize/file_response.rb +60 -0
  37. data/lib/mechanize/file_saver.rb +37 -0
  38. data/lib/mechanize/form.rb +364 -0
  39. data/lib/mechanize/form/button.rb +7 -0
  40. data/lib/mechanize/form/check_box.rb +11 -0
  41. data/lib/mechanize/form/field.rb +26 -0
  42. data/lib/mechanize/form/file_upload.rb +22 -0
  43. data/lib/mechanize/form/image_button.rb +21 -0
  44. data/lib/mechanize/form/multi_select_list.rb +67 -0
  45. data/lib/mechanize/form/option.rb +49 -0
  46. data/lib/mechanize/form/radio_button.rb +36 -0
  47. data/lib/mechanize/form/select_list.rb +43 -0
  48. data/lib/mechanize/headers.rb +11 -0
  49. data/lib/mechanize/history.rb +65 -0
  50. data/lib/mechanize/inspect.rb +88 -0
  51. data/lib/mechanize/monkey_patch.rb +35 -0
  52. data/lib/mechanize/page.rb +279 -0
  53. data/lib/mechanize/page/base.rb +8 -0
  54. data/lib/mechanize/page/encoding.rb +61 -0
  55. data/lib/mechanize/page/frame.rb +20 -0
  56. data/lib/mechanize/page/link.rb +53 -0
  57. data/lib/mechanize/page/meta.rb +50 -0
  58. data/lib/mechanize/pluggable_parsers.rb +101 -0
  59. data/lib/mechanize/redirect_limit_reached_error.rb +16 -0
  60. data/lib/mechanize/redirect_not_get_or_head_error.rb +18 -0
  61. data/lib/mechanize/response_code_error.rb +22 -0
  62. data/lib/mechanize/unsupported_scheme_error.rb +8 -0
  63. data/lib/mechanize/util.rb +73 -0
  64. data/test/chain/test_argument_validator.rb +14 -0
  65. data/test/chain/test_auth_headers.rb +25 -0
  66. data/test/chain/test_custom_headers.rb +18 -0
  67. data/test/chain/test_header_resolver.rb +28 -0
  68. data/test/chain/test_parameter_resolver.rb +35 -0
  69. data/test/chain/test_request_resolver.rb +29 -0
  70. data/test/chain/test_response_reader.rb +24 -0
  71. data/test/data/htpasswd +1 -0
  72. data/test/data/server.crt +16 -0
  73. data/test/data/server.csr +12 -0
  74. data/test/data/server.key +15 -0
  75. data/test/data/server.pem +15 -0
  76. data/test/helper.rb +129 -0
  77. data/test/htdocs/alt_text.html +10 -0
  78. data/test/htdocs/bad_form_test.html +9 -0
  79. data/test/htdocs/button.jpg +0 -0
  80. data/test/htdocs/empty_form.html +6 -0
  81. data/test/htdocs/file_upload.html +26 -0
  82. data/test/htdocs/find_link.html +41 -0
  83. data/test/htdocs/form_multi_select.html +16 -0
  84. data/test/htdocs/form_multival.html +37 -0
  85. data/test/htdocs/form_no_action.html +18 -0
  86. data/test/htdocs/form_no_input_name.html +16 -0
  87. data/test/htdocs/form_select.html +16 -0
  88. data/test/htdocs/form_select_all.html +16 -0
  89. data/test/htdocs/form_select_none.html +17 -0
  90. data/test/htdocs/form_select_noopts.html +10 -0
  91. data/test/htdocs/form_set_fields.html +14 -0
  92. data/test/htdocs/form_test.html +188 -0
  93. data/test/htdocs/frame_test.html +30 -0
  94. data/test/htdocs/google.html +13 -0
  95. data/test/htdocs/iframe_test.html +16 -0
  96. data/test/htdocs/index.html +6 -0
  97. data/test/htdocs/link with space.html +5 -0
  98. data/test/htdocs/meta_cookie.html +11 -0
  99. data/test/htdocs/no_title_test.html +6 -0
  100. data/test/htdocs/relative/tc_relative_links.html +21 -0
  101. data/test/htdocs/tc_bad_charset.html +9 -0
  102. data/test/htdocs/tc_bad_links.html +5 -0
  103. data/test/htdocs/tc_base_link.html +8 -0
  104. data/test/htdocs/tc_blank_form.html +11 -0
  105. data/test/htdocs/tc_charset.html +6 -0
  106. data/test/htdocs/tc_checkboxes.html +19 -0
  107. data/test/htdocs/tc_encoded_links.html +5 -0
  108. data/test/htdocs/tc_follow_meta.html +8 -0
  109. data/test/htdocs/tc_form_action.html +48 -0
  110. data/test/htdocs/tc_links.html +19 -0
  111. data/test/htdocs/tc_no_attributes.html +16 -0
  112. data/test/htdocs/tc_pretty_print.html +17 -0
  113. data/test/htdocs/tc_radiobuttons.html +17 -0
  114. data/test/htdocs/tc_referer.html +10 -0
  115. data/test/htdocs/tc_relative_links.html +19 -0
  116. data/test/htdocs/tc_textarea.html +23 -0
  117. data/test/htdocs/test_bad_encoding.html +52 -0
  118. data/test/htdocs/unusual______.html +5 -0
  119. data/test/servlets.rb +365 -0
  120. data/test/ssl_server.rb +48 -0
  121. data/test/test_authenticate.rb +71 -0
  122. data/test/test_bad_links.rb +25 -0
  123. data/test/test_blank_form.rb +16 -0
  124. data/test/test_checkboxes.rb +61 -0
  125. data/test/test_content_type.rb +13 -0
  126. data/test/test_cookie_class.rb +338 -0
  127. data/test/test_cookie_jar.rb +362 -0
  128. data/test/test_cookies.rb +123 -0
  129. data/test/test_encoded_links.rb +20 -0
  130. data/test/test_errors.rb +49 -0
  131. data/test/test_follow_meta.rb +108 -0
  132. data/test/test_form_action.rb +52 -0
  133. data/test/test_form_as_hash.rb +61 -0
  134. data/test/test_form_button.rb +38 -0
  135. data/test/test_form_no_inputname.rb +15 -0
  136. data/test/test_forms.rb +577 -0
  137. data/test/test_frames.rb +25 -0
  138. data/test/test_get_headers.rb +73 -0
  139. data/test/test_gzipping.rb +22 -0
  140. data/test/test_hash_api.rb +45 -0
  141. data/test/test_history.rb +142 -0
  142. data/test/test_history_added.rb +16 -0
  143. data/test/test_html_unscape_forms.rb +39 -0
  144. data/test/test_if_modified_since.rb +20 -0
  145. data/test/test_keep_alive.rb +31 -0
  146. data/test/test_links.rb +127 -0
  147. data/test/test_mech.rb +289 -0
  148. data/test/test_mechanize_file.rb +72 -0
  149. data/test/test_meta.rb +65 -0
  150. data/test/test_multi_select.rb +106 -0
  151. data/test/test_no_attributes.rb +13 -0
  152. data/test/test_option.rb +18 -0
  153. data/test/test_page.rb +127 -0
  154. data/test/test_page_encoding.rb +298 -0
  155. data/test/test_pluggable_parser.rb +145 -0
  156. data/test/test_post_form.rb +34 -0
  157. data/test/test_pretty_print.rb +22 -0
  158. data/test/test_radiobutton.rb +75 -0
  159. data/test/test_redirect_limit_reached.rb +39 -0
  160. data/test/test_redirect_verb_handling.rb +43 -0
  161. data/test/test_referer.rb +39 -0
  162. data/test/test_relative_links.rb +40 -0
  163. data/test/test_request.rb +13 -0
  164. data/test/test_response_code.rb +52 -0
  165. data/test/test_save_file.rb +103 -0
  166. data/test/test_scheme.rb +63 -0
  167. data/test/test_select.rb +106 -0
  168. data/test/test_select_all.rb +15 -0
  169. data/test/test_select_none.rb +15 -0
  170. data/test/test_select_noopts.rb +16 -0
  171. data/test/test_set_fields.rb +44 -0
  172. data/test/test_ssl_server.rb +20 -0
  173. data/test/test_subclass.rb +14 -0
  174. data/test/test_textarea.rb +45 -0
  175. data/test/test_upload.rb +109 -0
  176. data/test/test_verbs.rb +25 -0
  177. metadata +320 -0
@@ -0,0 +1,13 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+
3
+ class RequestTest < Test::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ end
7
+
8
+ def test_uri_is_not_polluted
9
+ uri = URI.parse('http://localhost/')
10
+ @agent.get(uri, {'q' => 'Ruby'})
11
+ assert_equal 'http://localhost/', uri.to_s
12
+ end
13
+ end
@@ -0,0 +1,52 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+
3
+ class ResponseCodeMechTest < Test::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ end
7
+
8
+ def test_eof_error_loop
9
+ assert_raises(EOFError) {
10
+ @agent.get("http://localhost/http_headers?Content-Length=300")
11
+ }
12
+ end
13
+
14
+ def test_redirect
15
+ @agent.get("http://localhost/response_code?code=300")
16
+ assert_equal("http://localhost/index.html",
17
+ @agent.current_page.uri.to_s)
18
+
19
+ @agent.get("http://localhost/response_code?code=301")
20
+ assert_equal("http://localhost/index.html",
21
+ @agent.current_page.uri.to_s)
22
+
23
+ @agent.get("http://localhost/response_code?code=302")
24
+ assert_equal("http://localhost/index.html",
25
+ @agent.current_page.uri.to_s)
26
+
27
+ @agent.get("http://localhost/response_code?code=303")
28
+ assert_equal("http://localhost/index.html",
29
+ @agent.current_page.uri.to_s)
30
+
31
+ @agent.get("http://localhost/response_code?code=307")
32
+ assert_equal("http://localhost/index.html",
33
+ @agent.current_page.uri.to_s)
34
+ end
35
+
36
+ def test_do_not_follow_redirect
37
+ @agent.redirect_ok = false
38
+
39
+ @agent.get("http://localhost/response_code?code=302")
40
+ assert_equal("http://localhost/response_code?code=302",
41
+ @agent.current_page.uri.to_s)
42
+ end
43
+
44
+ def test_error
45
+ @agent = Mechanize.new
46
+ begin
47
+ @agent.get("http://localhost/response_code?code=500")
48
+ rescue Mechanize::ResponseCodeError => err
49
+ assert_equal("500", err.response_code)
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,103 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+
3
+ class TestSaveFile < Test::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ end
7
+
8
+ def test_save_file
9
+ page = @agent.get('http://localhost:2000/form_no_action.html')
10
+ length = page.response['Content-Length']
11
+ page.save_as("test.html")
12
+ file_length = nil
13
+ File.open("test.html", "r") { |f| file_length = f.read.length }
14
+ FileUtils.rm("test.html")
15
+ assert_equal(length.to_i, file_length)
16
+ end
17
+
18
+ def test_save_file_default
19
+ page = Mechanize::File.new(
20
+ URI.parse('http://localhost/test.html'),
21
+ {},
22
+ "hello"
23
+ )
24
+ page.save
25
+ assert(File.exists?('test.html'))
26
+ page.save
27
+ assert(File.exists?('test.html.1'))
28
+ page.save
29
+ assert(File.exists?('test.html.2'))
30
+ FileUtils.rm("test.html")
31
+ FileUtils.rm("test.html.1")
32
+ FileUtils.rm("test.html.2")
33
+ end
34
+
35
+ def test_save_file_default_with_dots
36
+ page = Mechanize::File.new(
37
+ URI.parse('http://localhost/../test.html'),
38
+ {},
39
+ "hello"
40
+ )
41
+ page.save
42
+ assert(File.exists?('test.html'))
43
+ page.save
44
+ assert(File.exists?('test.html.1'))
45
+ FileUtils.rm("test.html")
46
+ FileUtils.rm("test.html.1")
47
+ end
48
+
49
+ def test_save_file_with_content_disposition
50
+ @agent.use_content_disposition = true
51
+ page = WWW::Mechanize::File.new(
52
+ URI.parse('http://localhost:2000/form_no_action.html'),
53
+ {'content-disposition' => 'attachment; filename=test.html'},
54
+ "hello",
55
+ '200',
56
+ @agent
57
+ )
58
+ page.save
59
+ assert(File.exists?('test.html'))
60
+ FileUtils.rm("test.html")
61
+ end
62
+
63
+ def test_content_disposition_disable
64
+ @agent.use_content_disposition = false
65
+ page = WWW::Mechanize::File.new(
66
+ URI.parse('http://localhost:2000/form_no_action.html'),
67
+ {'content-disposition' => 'attachment; filename=test.html'},
68
+ "hello",
69
+ '200',
70
+ @agent
71
+ )
72
+
73
+ assert_equal(page.filename, 'form_no_action.html')
74
+ end
75
+
76
+ def test_save_file_with_quoted_content_disposition
77
+ @agent.use_content_disposition = true
78
+ page = WWW::Mechanize::File.new(
79
+ URI.parse('http://localhost:2000/form_no_action.html'),
80
+ {'content-disposition' => 'attachment; filename="test.html"'},
81
+ "hello",
82
+ '200',
83
+ @agent
84
+ )
85
+ page.save
86
+ assert(File.exists?('test.html'))
87
+ FileUtils.rm("test.html")
88
+ end
89
+
90
+ def test_save_file_with_bad_semicolon_content_disposition
91
+ @agent.use_content_disposition = true
92
+ page = WWW::Mechanize::File.new(
93
+ URI.parse('http://localhost:2000/form_no_action.html'),
94
+ {'content-disposition' => ';; filename=test.html'},
95
+ "hello",
96
+ '200',
97
+ @agent
98
+ )
99
+ page.save
100
+ assert(File.exists?('test.html'))
101
+ FileUtils.rm("test.html")
102
+ end
103
+ end
@@ -0,0 +1,63 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+
3
+ class SchemeTest < Test::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ @agent.log = Class.new(Object) do
7
+ def method_missing(*args)
8
+ end
9
+ end.new
10
+ end
11
+
12
+ def test_file_scheme
13
+ f = File.expand_path(__FILE__)
14
+ page = @agent.get("file://#{f}")
15
+ assert_equal(File.read(f), page.body)
16
+ end
17
+
18
+ def test_file_scheme_parses_html
19
+ f = File.expand_path(
20
+ File.join(File.dirname(__FILE__), "htdocs", 'google.html'))
21
+ page = @agent.get("file://#{f}")
22
+ assert_equal(File.read(f), page.body)
23
+ assert_kind_of(Mechanize::Page, page)
24
+ end
25
+
26
+ def test_file_scheme_supports_directories
27
+ f = File.expand_path(File.join(File.dirname(__FILE__), "htdocs"))
28
+ page = @agent.get("file://#{f}")
29
+ assert_equal(Dir[File.join(f, '*')].length, page.links.length)
30
+ assert_kind_of(Mechanize::Page, page)
31
+ end
32
+
33
+ def test_click_file_link
34
+ f = File.expand_path(File.join(File.dirname(__FILE__), "htdocs"))
35
+ page = @agent.get("file://#{f}")
36
+ link = page.links.find { |l| l.text =~ /tc_follow_meta/ }
37
+ assert_not_nil(link)
38
+ path = URI.parse(link.href).path
39
+
40
+ page = link.click
41
+ assert_equal(File.read(path), page.body)
42
+
43
+ link = page.meta.first
44
+ assert_not_nil(link)
45
+ page = @agent.click(link)
46
+ assert_equal("http://localhost/index.html", @agent.history.last.uri.to_s)
47
+ end
48
+
49
+ def test_file_code_returns_str_200_when_exists
50
+ f = File.expand_path(__FILE__)
51
+ page = @agent.get("file://#{f}")
52
+ assert_not_equal(200, page.code)
53
+ assert_equal('200', page.code)
54
+ end
55
+
56
+ def test_file_raises_error_when_file_doesnt_exist
57
+ f = File.expand_path('_no_ex1stance.html')
58
+ assert_raise(Mechanize::ResponseCodeError, '400 => Net::HTTPBadRequest'){
59
+ @agent.get("file://#{f}")
60
+ }
61
+ end
62
+
63
+ end
@@ -0,0 +1,106 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+
3
+ class SelectTest < Test::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ @page = @agent.get("http://localhost/form_select.html")
7
+ @form = @page.forms.first
8
+ end
9
+
10
+ def test_select_none
11
+ @form.fields_with(:name => 'list').first.select_none
12
+ assert_equal('1', @form.list)
13
+ end
14
+
15
+ def test_select_all
16
+ @form.fields_with(:name => 'list').first.select_all
17
+ assert_equal('6', @form.list)
18
+ end
19
+
20
+ def test_correct_class
21
+ assert_instance_of(Mechanize::Form::SelectList,
22
+ @form.field_with(:name => 'list'))
23
+ end
24
+
25
+ def test_click_all
26
+ @form.field_with(:name => 'list').options.each { |o| o.click }
27
+ option_list = @form.field_with(:name => 'list').options
28
+ assert_not_nil(option_list)
29
+ assert_equal(6, option_list.length)
30
+ assert_equal(option_list.last.value, @form.list)
31
+ page = @agent.submit(@form)
32
+ assert_equal(1, page.links.length)
33
+ assert_equal(1, page.links_with(:text => "list:#{option_list.last}").length)
34
+ end
35
+
36
+ def test_select_default
37
+ assert_equal("2", @form.list)
38
+ page = @agent.submit(@form)
39
+ assert_equal(1, page.links.length)
40
+ assert_equal(1, page.links_with(:text => 'list:2').length)
41
+ end
42
+
43
+ def test_select_one
44
+ @form.list = 'Aaron'
45
+ assert_equal('Aaron', @form.list)
46
+ page = @agent.submit(@form)
47
+ assert_equal(1, page.links.length)
48
+ assert_equal('list:Aaron', page.links.first.text)
49
+ end
50
+
51
+ def test_select_two
52
+ @form.list = ['1', 'Aaron']
53
+ assert_equal('1', @form.list)
54
+ page = @agent.submit(@form)
55
+ assert_equal(1, page.links.length)
56
+ assert_equal(1, page.links_with(:text => 'list:1').length)
57
+ end
58
+
59
+ def test_select_three
60
+ @form.list = ['1', '2', '3']
61
+ assert_equal('1', @form.list)
62
+ page = @agent.submit(@form)
63
+ assert_equal(1, page.links.length)
64
+ assert_equal(1, page.links_with(:text => 'list:1').length)
65
+ end
66
+
67
+ def test_select_three_twice
68
+ @form.list = ['1', '2', '3']
69
+ @form.list = ['1', '2', '3']
70
+ assert_equal('1', @form.list)
71
+ page = @agent.submit(@form)
72
+ assert_equal(1, page.links.length)
73
+ assert_equal(1, page.links_with(:text => 'list:1').length)
74
+ end
75
+
76
+ def test_select_with_empty_value
77
+ list = @form.field_with(:name => 'list')
78
+ list.options.last.instance_variable_set(:@value, '')
79
+ list.options.last.tick
80
+ page = @agent.submit(@form)
81
+ assert_equal(1, page.links.length)
82
+ assert_equal(1, page.links_with(:text => 'list:').length)
83
+ end
84
+
85
+ def test_select_with_click
86
+ @form.list = ['1', 'Aaron']
87
+ @form.field_with(:name => 'list').options[3].tick
88
+ assert_equal('4', @form.list)
89
+ page = @agent.submit(@form)
90
+ assert_equal(1, page.links.length)
91
+ assert_equal(1, page.links_with(:text => 'list:4').length)
92
+ end
93
+
94
+ def test_click_twice
95
+ list = @form.field_with(:name => 'list')
96
+ list.options[0].click
97
+ assert_equal('1', @form.list)
98
+ list.options[1].click
99
+ assert_equal('2', @form.list)
100
+ list.options.last.click
101
+ assert_equal('6', @form.list)
102
+ assert_equal(1, list.selected_options.length)
103
+ list.select_all
104
+ assert_equal(1, list.selected_options.length)
105
+ end
106
+ end
@@ -0,0 +1,15 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+ class SelectAllTest < Test::Unit::TestCase
3
+ def setup
4
+ @agent = Mechanize.new
5
+ @page = @agent.get("http://localhost/form_select_all.html")
6
+ @form = @page.forms.first
7
+ end
8
+
9
+ def test_select_default
10
+ assert_equal("6", @form.list)
11
+ page = @agent.submit(@form)
12
+ assert_equal(1, page.links.length)
13
+ assert_equal(1, page.links_with(:text => 'list:6').length)
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+ class SelectNoneTest < Test::Unit::TestCase
3
+ def setup
4
+ @agent = Mechanize.new
5
+ @page = @agent.get("http://localhost/form_select_none.html")
6
+ @form = @page.forms.first
7
+ end
8
+
9
+ def test_select_default
10
+ assert_equal("1", @form.list)
11
+ page = @agent.submit(@form)
12
+ assert_equal(1, page.links.length)
13
+ assert_equal(1, page.links_with(:text => 'list:1').length)
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+
3
+ class SelectNoOptionsTest < Test::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ @page = @agent.get("http://localhost/form_select_noopts.html")
7
+ @form = @page.forms.first
8
+ end
9
+
10
+ def test_select_default
11
+ assert_not_nil(@form.field('list'))
12
+ assert_nil(@form.list)
13
+ page = @agent.submit(@form)
14
+ assert_equal(0, page.links.length)
15
+ end
16
+ end
@@ -0,0 +1,44 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+
3
+ class TestSetFields < Test::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ @page = @agent.get("http://localhost/form_set_fields.html")
7
+ @form = @page.forms.first
8
+ end
9
+
10
+ def test_set_no_fields
11
+ before = {}
12
+ @form.fields.each { |f| before[f.name] = f.value }
13
+ @form.set_fields
14
+ before.each { |k,v| assert_equal(v, @form.send(k)) }
15
+ end
16
+
17
+ def test_set_one_field
18
+ @form.set_fields( :gender => 'male' )
19
+ assert_equal('male', @form.gender)
20
+ end
21
+
22
+ def test_set_many_fields
23
+ @form.set_fields( :gender => 'male',
24
+ :first_name => 'Aaron',
25
+ 'green[eggs]' => 'Ham'
26
+ )
27
+ assert_equal('male', @form.gender)
28
+ assert_equal('Aaron', @form.first_name)
29
+ assert_equal('Ham', @form.fields_with(:name => 'green[eggs]').first.value)
30
+ end
31
+
32
+ def test_set_multiple_duplicate_fields
33
+ page = @agent.get("http://localhost/form_multival.html")
34
+ form = page.form('post_form')
35
+ form.set_fields( :first => { 0 => 'a', 1 => 'b' } )
36
+ assert_equal('a', form.fields_with(:name => 'first')[0].value)
37
+ assert_equal('b', form.fields_with(:name => 'first')[1].value)
38
+ end
39
+
40
+ def test_set_second_field
41
+ @form.set_fields( :first_name => ['Aaron', 1] )
42
+ assert_equal('Aaron', @form.fields_with(:name => 'first_name')[1].value)
43
+ end
44
+ end
@@ -0,0 +1,20 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+
3
+ class SSLServerTest < Test::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ end
7
+
8
+ def test_ssl_request
9
+ non_ssl_page = @agent.get("http://localhost/form_test.html")
10
+ ssl_page = @agent.get("https://localhost/form_test.html")
11
+ assert_equal(non_ssl_page.body.length, ssl_page.body.length)
12
+ end
13
+
14
+ def test_ssl_request_verify
15
+ non_ssl_page = @agent.get("http://localhost/form_test.html")
16
+ @agent.ca_file = 'data/server.crt'
17
+ ssl_page = @agent.get("https://localhost/form_test.html")
18
+ assert_equal(non_ssl_page.body.length, ssl_page.body.length)
19
+ end
20
+ end