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,145 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+
3
+ class PluggableParserTest < Test::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ end
7
+
8
+ def test_content_type_error
9
+ page = @agent.get("http://localhost/bad_content_type")
10
+ assert_raise(Mechanize::ContentTypeError) {
11
+ page = Mechanize::Page.new(
12
+ page.uri,
13
+ page.response,
14
+ page.body,
15
+ page.code
16
+ )
17
+ }
18
+ begin
19
+ page = Mechanize::Page.new(
20
+ page.uri,
21
+ page.response,
22
+ page.body,
23
+ page.code
24
+ )
25
+ rescue Mechanize::ContentTypeError => ex
26
+ assert_equal('text/xml', ex.content_type)
27
+ end
28
+ end
29
+
30
+ def test_content_type
31
+ page = @agent.get("http://localhost/content_type_test")
32
+ assert_kind_of(Mechanize::Page, page)
33
+ end
34
+
35
+ class Filter < Mechanize::Page
36
+ def initialize(uri=nil, response=nil, body=nil, code=nil)
37
+ super( uri,
38
+ response,
39
+ body.gsub(/<body>/, '<body><a href="http://daapclient.rubyforge.org">Net::DAAP::Client</a>'),
40
+ code
41
+ )
42
+ end
43
+ end
44
+
45
+ class FileFilter < Mechanize::File
46
+ def initialize(uri=nil, response=nil, body=nil, code=nil)
47
+ super( uri,
48
+ response,
49
+ body.gsub(/<body>/, '<body><a href="http://daapclient.rubyforge.org">Net::DAAP::Client</a>'),
50
+ code
51
+ )
52
+ end
53
+ end
54
+
55
+ def test_filter
56
+ @agent.pluggable_parser.html = Filter
57
+ page = @agent.get("http://localhost/find_link.html")
58
+ assert_kind_of(Filter, page)
59
+ assert_equal(19, page.links.length)
60
+ assert_not_nil(page.link_with(:text => 'Net::DAAP::Client'))
61
+ assert_equal(1, page.links_with(:text => 'Net::DAAP::Client').length)
62
+ end
63
+
64
+ def test_filter_hash
65
+ @agent.pluggable_parser['text/html'] = Filter
66
+ page = @agent.get("http://localhost/find_link.html")
67
+ assert_kind_of(Class, @agent.pluggable_parser['text/html'])
68
+ assert_equal(Filter, @agent.pluggable_parser['text/html'])
69
+ assert_kind_of(Filter, page)
70
+ assert_equal(19, page.links.length)
71
+ assert_not_nil(page.link_with(:text => 'Net::DAAP::Client'))
72
+ assert_equal(1, page.links_with(:text => 'Net::DAAP::Client').length)
73
+ end
74
+
75
+ def test_file_saver
76
+ @agent.pluggable_parser.html = Mechanize::FileSaver
77
+ page = @agent.get('http://localhost:2000/form_no_action.html')
78
+ length = page.response['Content-Length']
79
+ file_length = nil
80
+ File.open("localhost/form_no_action.html", "r") { |f|
81
+ file_length = f.read.length
82
+ }
83
+ FileUtils.rm_rf("localhost")
84
+ assert_equal(length.to_i, file_length)
85
+ end
86
+
87
+ def test_content_type_pdf
88
+ @agent.pluggable_parser.pdf = FileFilter
89
+ page = @agent.get("http://localhost/content_type_test?ct=application/pdf")
90
+ assert_kind_of(Class, @agent.pluggable_parser['application/pdf'])
91
+ assert_equal(FileFilter, @agent.pluggable_parser['application/pdf'])
92
+ assert_kind_of(FileFilter, page)
93
+ end
94
+
95
+ def test_content_type_csv
96
+ @agent.pluggable_parser.csv = FileFilter
97
+ page = @agent.get("http://localhost/content_type_test?ct=text/csv")
98
+ assert_kind_of(Class, @agent.pluggable_parser['text/csv'])
99
+ assert_equal(FileFilter, @agent.pluggable_parser['text/csv'])
100
+ assert_kind_of(FileFilter, page)
101
+ end
102
+
103
+ def test_content_type_xml
104
+ @agent.pluggable_parser.xml = FileFilter
105
+ page = @agent.get("http://localhost/content_type_test?ct=text/xml")
106
+ assert_kind_of(Class, @agent.pluggable_parser['text/xml'])
107
+ assert_equal(FileFilter, @agent.pluggable_parser['text/xml'])
108
+ assert_kind_of(FileFilter, page)
109
+ end
110
+
111
+ def test_file_saver_no_path
112
+ url = URI::HTTP.new('http', nil, 'example.com', nil, nil, '', nil, nil, nil)
113
+ fs = Mechanize::FileSaver.new(url, nil, 'hello world', 200)
114
+ assert_equal('example.com/index.html', fs.filename)
115
+ FileUtils.rm_rf('example.com')
116
+ end
117
+
118
+ def test_file_saver_slash
119
+ url = URI::HTTP.new('http', nil, 'example.com', nil, nil, '/', nil, nil, nil)
120
+ fs = Mechanize::FileSaver.new(url, nil, 'hello world', 200)
121
+ assert_equal('example.com/index.html', fs.filename)
122
+ FileUtils.rm_rf('example.com')
123
+ end
124
+
125
+ def test_file_saver_slash_file
126
+ url = URI::HTTP.new('http', nil, 'example.com', nil, nil, '/foo.html', nil, nil, nil)
127
+ fs = Mechanize::FileSaver.new(url, nil, 'hello world', 200)
128
+ assert_equal('example.com/foo.html', fs.filename)
129
+ FileUtils.rm_rf('example.com')
130
+ end
131
+
132
+ def test_file_saver_long_path_no_file
133
+ url = URI::HTTP.new('http', nil, 'example.com', nil, nil, '/one/two/', nil, nil, nil)
134
+ fs = Mechanize::FileSaver.new(url, nil, 'hello world', 200)
135
+ assert_equal('example.com/one/two/index.html', fs.filename)
136
+ FileUtils.rm_rf('example.com')
137
+ end
138
+
139
+ def test_file_saver_long_path
140
+ url = URI::HTTP.new('http', nil, 'example.com', nil, nil, '/one/two/foo.html', nil, nil, nil)
141
+ fs = Mechanize::FileSaver.new(url, nil, 'hello world', 200)
142
+ assert_equal('example.com/one/two/foo.html', fs.filename)
143
+ FileUtils.rm_rf('example.com')
144
+ end
145
+ end
@@ -0,0 +1,34 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+
3
+ class PostForm < Test::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ end
7
+
8
+ def test_post_form
9
+ page = @agent.post("http://localhost/form_post",
10
+ 'gender' => 'female'
11
+ )
12
+ assert_not_nil(
13
+ page.links.find { |l| l.text == "gender:female" },
14
+ "gender field missing"
15
+ )
16
+ end
17
+
18
+ def test_post_form_multival
19
+ page = @agent.post("http://localhost/form_post",
20
+ [ ['gender', 'female'],
21
+ ['gender', 'male']
22
+ ]
23
+ )
24
+ assert_not_nil(
25
+ page.links.find { |l| l.text == "gender:female" },
26
+ "gender field missing"
27
+ )
28
+ assert_not_nil(
29
+ page.links.find { |l| l.text == "gender:male" },
30
+ "gender field missing"
31
+ )
32
+ assert_equal(2, page.links.length)
33
+ end
34
+ end
@@ -0,0 +1,22 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+
3
+ class TestPrettyPrint < Test::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ end
7
+
8
+ def test_pretty_print
9
+ @agent.get("http://localhost/tc_pretty_print.html")
10
+ pretty_string = @agent.pretty_print_inspect
11
+ assert_match("{title \"tc_pretty_print.html\"}", pretty_string)
12
+ assert_match(/\{frames[^"]*"http:\/\/meme/, pretty_string)
13
+ assert_match(/\{iframes[^"]*"http:\/\/meme/, pretty_string)
14
+ assert_match(
15
+ "{links #<Mechanize::Page::Link \"Google\" \"http://google.com/\">}",
16
+ pretty_string
17
+ )
18
+ assert_match("form1", pretty_string)
19
+ assert_match("POST", pretty_string)
20
+ assert_match("{file_uploads}", pretty_string)
21
+ end
22
+ end
@@ -0,0 +1,75 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+
3
+ class TestRadioButtons < Test::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ @page = @agent.get("http://localhost/tc_radiobuttons.html")
7
+ end
8
+
9
+ def test_select_all
10
+ form = @page.forms.first
11
+ form.radiobuttons_with(:name => 'color').each do |b|
12
+ b.check
13
+ end
14
+ form.radiobutton_with(:name => 'color', :value => 'green').check
15
+
16
+ assert_equal(true, form.radiobutton_with( :name => 'color',
17
+ :value => 'green').checked)
18
+
19
+ %w{ red blue yellow brown }.each do |button_value|
20
+ assert_equal(false, form.radiobutton_with( :name => 'color',
21
+ :value => button_value
22
+ ).checked)
23
+ end
24
+ end
25
+
26
+ def test_unselect_all
27
+ form = @page.forms.first
28
+ form.radiobuttons_with(:name => 'color').each do |b|
29
+ b.uncheck
30
+ end
31
+ %w{ green red blue yellow brown }.each do |button_value|
32
+ assert_equal(false, form.radiobutton_with( :name => 'color',
33
+ :value => button_value
34
+ ).checked)
35
+ end
36
+ end
37
+
38
+ def test_click_one
39
+ form = @page.forms.first
40
+ form.radiobutton_with(:name => 'color', :value => 'green').click
41
+
42
+ assert form.radiobutton_with(:name => 'color', :value => 'green').checked
43
+
44
+ %w{ red blue yellow brown }.each do |button_value|
45
+ assert_equal(false, form.radiobutton_with( :name => 'color',
46
+ :value => button_value
47
+ ).checked)
48
+ end
49
+ end
50
+
51
+ def test_click_twice
52
+ form = @page.forms.first
53
+ form.radiobutton_with(:name => 'color', :value => 'green').click
54
+ assert form.radiobutton_with(:name => 'color', :value => 'green').checked
55
+
56
+ form.radiobutton_with(:name => 'color', :value => 'green').click
57
+ %w{ green red blue yellow brown }.each do |button_value|
58
+ assert_equal(false, form.radiobutton_with( :name => 'color',
59
+ :value => button_value
60
+ ).checked)
61
+ end
62
+ end
63
+
64
+ def test_click_all
65
+ form = @page.forms.first
66
+ form.radiobuttons_with(:name => 'color').each do |button|
67
+ button.click
68
+ end
69
+ c = form.radiobuttons_with(:name => 'color').inject(0) do |m,button|
70
+ m += 1 if button.checked
71
+ m
72
+ end
73
+ assert_equal 1, c, 'Only one radio button should be checked'
74
+ end
75
+ end
@@ -0,0 +1,39 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+
3
+ class TestRedirectLimitReached < Test::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ end
7
+
8
+ def test_to_s
9
+ page = MechTestHelper.fake_page(@agent)
10
+ error = Mechanize::RedirectLimitReachedError.new(page, 10)
11
+ assert_match(/10/, error.to_s)
12
+ end
13
+
14
+ def test_get_default_redirects
15
+ assert_raises(Mechanize::RedirectLimitReachedError) {
16
+ begin
17
+ @agent.get('http://localhost/infinite_redirect')
18
+ rescue Mechanize::RedirectLimitReachedError => ex
19
+ assert_equal(@agent.redirection_limit, ex.redirects)
20
+ assert_equal("q=#{@agent.redirection_limit}", ex.page.uri.query)
21
+ raise ex
22
+ end
23
+ }
24
+ end
25
+
26
+ def test_get_2_redirects
27
+ @agent.redirection_limit = 2
28
+ assert_raises(Mechanize::RedirectLimitReachedError) {
29
+ begin
30
+ @agent.get('http://localhost/infinite_redirect')
31
+ rescue Mechanize::RedirectLimitReachedError => ex
32
+ assert_equal(2, ex.redirects)
33
+ assert_equal(@agent.redirection_limit, ex.redirects)
34
+ assert_equal("q=#{@agent.redirection_limit}", ex.page.uri.query)
35
+ raise ex
36
+ end
37
+ }
38
+ end
39
+ end
@@ -0,0 +1,43 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+
3
+ class TestRedirectNotGetOrHead < Test::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ end
7
+
8
+ def test_to_s
9
+ page = MechTestHelper.fake_page(@agent)
10
+ error = Mechanize::RedirectNotGetOrHeadError.new(page, :put)
11
+ assert_match(/put/, error.to_s)
12
+ end
13
+
14
+ def test_head_redirect_results_in_head_request
15
+ page = @agent.head('http://localhost/redirect')
16
+ assert_equal(page.uri.to_s, 'http://localhost/verb')
17
+ assert_equal(page.body, "method: HEAD")
18
+ end
19
+
20
+ def test_get_redirect_results_in_get_request
21
+ page = @agent.get('http://localhost/redirect')
22
+ assert_equal(page.uri.to_s, 'http://localhost/verb')
23
+ assert_equal(page.body, "method: GET")
24
+ end
25
+
26
+ def test_post_redirect_results_in_get_request
27
+ page = @agent.post('http://localhost/redirect')
28
+ assert_equal(page.uri.to_s, 'http://localhost/verb')
29
+ assert_equal(page.body, "method: GET")
30
+ end
31
+
32
+ def test_put_redirect_results_in_get_request
33
+ page = @agent.put('http://localhost/redirect', 'foo')
34
+ assert_equal(page.uri.to_s, 'http://localhost/verb')
35
+ assert_equal(page.body, "method: GET")
36
+ end
37
+
38
+ def test_delete_redirect_results_in_get_request
39
+ page = @agent.delete('http://localhost/redirect')
40
+ assert_equal(page.uri.to_s, 'http://localhost/verb')
41
+ assert_equal(page.body, "method: GET")
42
+ end
43
+ end
@@ -0,0 +1,39 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+
3
+ class RefererTest < Test::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ end
7
+
8
+ def test_no_referer
9
+ page = @agent.get("http://localhost/referer")
10
+ assert_equal('', page.body)
11
+ end
12
+
13
+ def test_send_referer
14
+ page = @agent.get("http://localhost/tc_referer.html")
15
+ page = @agent.click page.links.first
16
+ assert_equal("http://localhost/tc_referer.html", page.body)
17
+ end
18
+
19
+ def test_fetch_two
20
+ page1 = @agent.get("http://localhost/tc_referer.html")
21
+ page2 = @agent.get("http://localhost/tc_pretty_print.html")
22
+ page = @agent.click page1.links.first
23
+ assert_equal("http://localhost/tc_referer.html", page.body)
24
+ end
25
+
26
+ def test_fetch_two_first
27
+ page1 = @agent.get("http://localhost/tc_referer.html")
28
+ page2 = @agent.get("http://localhost/tc_pretty_print.html")
29
+ page = @agent.click page1.links.first
30
+ assert_equal("http://localhost/tc_referer.html", page.body)
31
+ end
32
+
33
+ def test_post_form
34
+ page1 = @agent.get("http://localhost/tc_referer.html")
35
+ page2 = @agent.get("http://localhost/tc_pretty_print.html")
36
+ page = @agent.submit page1.forms.first
37
+ assert_equal("http://localhost/tc_referer.html", page.body)
38
+ end
39
+ end
@@ -0,0 +1,40 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
2
+
3
+ class TestRelativeLinks < Test::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ end
7
+
8
+ def test_dot_dot_slash
9
+ @page = @agent.get("http://localhost/relative/tc_relative_links.html")
10
+ page = @page.links.first.click
11
+ assert_equal('http://localhost/tc_relative_links.html', @agent.current_page.uri.to_s)
12
+ end
13
+
14
+ def test_too_many_dots
15
+ @page = @agent.get("http://localhost/relative/tc_relative_links.html")
16
+ page = @page.link_with(:text => 'too many dots').click
17
+ assert_not_nil(page)
18
+ assert_equal('http://localhost/tc_relative_links.html', page.uri.to_s)
19
+ end
20
+
21
+ def test_go_forward
22
+ @page = @agent.get("http://localhost/tc_relative_links.html")
23
+ @page = @page.links.first.click
24
+ assert_equal('http://localhost/relative/tc_relative_links.html', @agent.current_page.uri.to_s)
25
+ end
26
+
27
+ def test_frame_dot_dot_slash
28
+ @page = @agent.get("http://localhost/relative/tc_relative_links.html")
29
+ page = @agent.click(@page.frame_with(:text => 'frame1'))
30
+ assert_equal('http://localhost/tc_relative_links.html', @agent.current_page.uri.to_s)
31
+ end
32
+
33
+ def test_frame_forward_back_forward
34
+ @page = @agent.get("http://localhost/tc_relative_links.html")
35
+ page1 = @agent.click @page.frame_with(:name => 'frame1')
36
+ assert_equal('http://localhost/relative/tc_relative_links.html', @agent.current_page.uri.to_s)
37
+ page2 = @agent.click @page.frame_with(:name => 'frame2')
38
+ assert_equal('http://localhost/relative/tc_relative_links.html', @agent.current_page.uri.to_s)
39
+ end
40
+ end