aai10-mechanize 2.0.1.0

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 (176) hide show
  1. data/.autotest +6 -0
  2. data/.gitignore +9 -0
  3. data/CHANGELOG.rdoc +652 -0
  4. data/EXAMPLES.rdoc +187 -0
  5. data/FAQ.rdoc +11 -0
  6. data/GUIDE.rdoc +163 -0
  7. data/LICENSE.rdoc +20 -0
  8. data/Manifest.txt +172 -0
  9. data/README.rdoc +63 -0
  10. data/Rakefile +36 -0
  11. data/aai10-mechanize.gemspec +20 -0
  12. data/examples/flickr_upload.rb +22 -0
  13. data/examples/mech-dump.rb +5 -0
  14. data/examples/proxy_req.rb +7 -0
  15. data/examples/rubyforge.rb +20 -0
  16. data/examples/spider.rb +21 -0
  17. data/lib/mechanize.rb +664 -0
  18. data/lib/mechanize/content_type_error.rb +14 -0
  19. data/lib/mechanize/cookie.rb +116 -0
  20. data/lib/mechanize/cookie_jar.rb +202 -0
  21. data/lib/mechanize/element_matcher.rb +35 -0
  22. data/lib/mechanize/file.rb +80 -0
  23. data/lib/mechanize/file_connection.rb +17 -0
  24. data/lib/mechanize/file_request.rb +26 -0
  25. data/lib/mechanize/file_response.rb +74 -0
  26. data/lib/mechanize/file_saver.rb +37 -0
  27. data/lib/mechanize/form.rb +478 -0
  28. data/lib/mechanize/form/button.rb +9 -0
  29. data/lib/mechanize/form/check_box.rb +11 -0
  30. data/lib/mechanize/form/field.rb +44 -0
  31. data/lib/mechanize/form/file_upload.rb +23 -0
  32. data/lib/mechanize/form/image_button.rb +20 -0
  33. data/lib/mechanize/form/multi_select_list.rb +83 -0
  34. data/lib/mechanize/form/option.rb +49 -0
  35. data/lib/mechanize/form/radio_button.rb +48 -0
  36. data/lib/mechanize/form/select_list.rb +40 -0
  37. data/lib/mechanize/headers.rb +25 -0
  38. data/lib/mechanize/history.rb +83 -0
  39. data/lib/mechanize/http.rb +3 -0
  40. data/lib/mechanize/http/agent.rb +738 -0
  41. data/lib/mechanize/inspect.rb +88 -0
  42. data/lib/mechanize/monkey_patch.rb +37 -0
  43. data/lib/mechanize/page.rb +408 -0
  44. data/lib/mechanize/page/base.rb +8 -0
  45. data/lib/mechanize/page/frame.rb +27 -0
  46. data/lib/mechanize/page/image.rb +30 -0
  47. data/lib/mechanize/page/label.rb +20 -0
  48. data/lib/mechanize/page/link.rb +82 -0
  49. data/lib/mechanize/page/meta_refresh.rb +56 -0
  50. data/lib/mechanize/pluggable_parsers.rb +101 -0
  51. data/lib/mechanize/redirect_limit_reached_error.rb +16 -0
  52. data/lib/mechanize/redirect_not_get_or_head_error.rb +19 -0
  53. data/lib/mechanize/response_code_error.rb +22 -0
  54. data/lib/mechanize/response_read_error.rb +27 -0
  55. data/lib/mechanize/robots_disallowed_error.rb +29 -0
  56. data/lib/mechanize/unsupported_scheme_error.rb +8 -0
  57. data/lib/mechanize/util.rb +113 -0
  58. data/test/data/htpasswd +1 -0
  59. data/test/data/server.crt +16 -0
  60. data/test/data/server.csr +12 -0
  61. data/test/data/server.key +15 -0
  62. data/test/data/server.pem +15 -0
  63. data/test/helper.rb +175 -0
  64. data/test/htdocs/alt_text.html +10 -0
  65. data/test/htdocs/bad_form_test.html +9 -0
  66. data/test/htdocs/button.jpg +0 -0
  67. data/test/htdocs/canonical_uri.html +9 -0
  68. data/test/htdocs/dir with spaces/foo.html +1 -0
  69. data/test/htdocs/empty_form.html +6 -0
  70. data/test/htdocs/file_upload.html +26 -0
  71. data/test/htdocs/find_link.html +41 -0
  72. data/test/htdocs/form_multi_select.html +16 -0
  73. data/test/htdocs/form_multival.html +37 -0
  74. data/test/htdocs/form_no_action.html +18 -0
  75. data/test/htdocs/form_no_input_name.html +16 -0
  76. data/test/htdocs/form_select.html +16 -0
  77. data/test/htdocs/form_select_all.html +16 -0
  78. data/test/htdocs/form_select_none.html +17 -0
  79. data/test/htdocs/form_select_noopts.html +10 -0
  80. data/test/htdocs/form_set_fields.html +14 -0
  81. data/test/htdocs/form_test.html +188 -0
  82. data/test/htdocs/frame_referer_test.html +10 -0
  83. data/test/htdocs/frame_test.html +30 -0
  84. data/test/htdocs/google.html +13 -0
  85. data/test/htdocs/iframe_test.html +16 -0
  86. data/test/htdocs/index.html +6 -0
  87. data/test/htdocs/link with space.html +5 -0
  88. data/test/htdocs/meta_cookie.html +11 -0
  89. data/test/htdocs/no_title_test.html +6 -0
  90. data/test/htdocs/nofollow.html +9 -0
  91. data/test/htdocs/noindex.html +9 -0
  92. data/test/htdocs/norobots.html +8 -0
  93. data/test/htdocs/rails_3_encoding_hack_form_test.html +27 -0
  94. data/test/htdocs/rel_nofollow.html +8 -0
  95. data/test/htdocs/relative/tc_relative_links.html +21 -0
  96. data/test/htdocs/robots.html +8 -0
  97. data/test/htdocs/robots.txt +2 -0
  98. data/test/htdocs/tc_bad_charset.html +9 -0
  99. data/test/htdocs/tc_bad_links.html +5 -0
  100. data/test/htdocs/tc_base_images.html +10 -0
  101. data/test/htdocs/tc_base_link.html +8 -0
  102. data/test/htdocs/tc_blank_form.html +11 -0
  103. data/test/htdocs/tc_charset.html +6 -0
  104. data/test/htdocs/tc_checkboxes.html +19 -0
  105. data/test/htdocs/tc_encoded_links.html +5 -0
  106. data/test/htdocs/tc_field_precedence.html +11 -0
  107. data/test/htdocs/tc_follow_meta.html +8 -0
  108. data/test/htdocs/tc_form_action.html +48 -0
  109. data/test/htdocs/tc_images.html +8 -0
  110. data/test/htdocs/tc_links.html +18 -0
  111. data/test/htdocs/tc_meta_in_body.html +9 -0
  112. data/test/htdocs/tc_no_attributes.html +16 -0
  113. data/test/htdocs/tc_pretty_print.html +17 -0
  114. data/test/htdocs/tc_radiobuttons.html +17 -0
  115. data/test/htdocs/tc_referer.html +16 -0
  116. data/test/htdocs/tc_relative_links.html +19 -0
  117. data/test/htdocs/tc_textarea.html +23 -0
  118. data/test/htdocs/test_bad_encoding.html +52 -0
  119. data/test/htdocs/test_click.html +11 -0
  120. data/test/htdocs/unusual______.html +5 -0
  121. data/test/servlets.rb +402 -0
  122. data/test/ssl_server.rb +48 -0
  123. data/test/test_cookies.rb +129 -0
  124. data/test/test_form_action.rb +52 -0
  125. data/test/test_form_as_hash.rb +59 -0
  126. data/test/test_form_button.rb +46 -0
  127. data/test/test_frames.rb +34 -0
  128. data/test/test_headers.rb +33 -0
  129. data/test/test_history.rb +118 -0
  130. data/test/test_history_added.rb +16 -0
  131. data/test/test_html_unscape_forms.rb +46 -0
  132. data/test/test_if_modified_since.rb +20 -0
  133. data/test/test_images.rb +19 -0
  134. data/test/test_mechanize.rb +852 -0
  135. data/test/test_mechanize_cookie.rb +345 -0
  136. data/test/test_mechanize_cookie_jar.rb +433 -0
  137. data/test/test_mechanize_file.rb +53 -0
  138. data/test/test_mechanize_file_request.rb +19 -0
  139. data/test/test_mechanize_file_response.rb +21 -0
  140. data/test/test_mechanize_form.rb +576 -0
  141. data/test/test_mechanize_form_check_box.rb +37 -0
  142. data/test/test_mechanize_form_encoding.rb +120 -0
  143. data/test/test_mechanize_form_field.rb +21 -0
  144. data/test/test_mechanize_form_image_button.rb +12 -0
  145. data/test/test_mechanize_form_textarea.rb +51 -0
  146. data/test/test_mechanize_http_agent.rb +697 -0
  147. data/test/test_mechanize_link.rb +84 -0
  148. data/test/test_mechanize_page_encoding.rb +147 -0
  149. data/test/test_mechanize_page_link.rb +382 -0
  150. data/test/test_mechanize_page_meta_refresh.rb +115 -0
  151. data/test/test_mechanize_redirect_not_get_or_head_error.rb +18 -0
  152. data/test/test_mechanize_subclass.rb +22 -0
  153. data/test/test_mechanize_util.rb +92 -0
  154. data/test/test_multi_select.rb +118 -0
  155. data/test/test_no_attributes.rb +13 -0
  156. data/test/test_option.rb +18 -0
  157. data/test/test_pluggable_parser.rb +136 -0
  158. data/test/test_post_form.rb +37 -0
  159. data/test/test_pretty_print.rb +22 -0
  160. data/test/test_radiobutton.rb +75 -0
  161. data/test/test_redirect_limit_reached.rb +39 -0
  162. data/test/test_redirect_ok.rb +25 -0
  163. data/test/test_referer.rb +81 -0
  164. data/test/test_relative_links.rb +40 -0
  165. data/test/test_request.rb +13 -0
  166. data/test/test_response_code.rb +53 -0
  167. data/test/test_robots.rb +72 -0
  168. data/test/test_save_file.rb +48 -0
  169. data/test/test_scheme.rb +48 -0
  170. data/test/test_select.rb +119 -0
  171. data/test/test_select_all.rb +15 -0
  172. data/test/test_select_none.rb +15 -0
  173. data/test/test_select_noopts.rb +18 -0
  174. data/test/test_set_fields.rb +44 -0
  175. data/test/test_ssl_server.rb +20 -0
  176. metadata +360 -0
@@ -0,0 +1,37 @@
1
+ require "helper"
2
+
3
+ class PostForm < MiniTest::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(page.links.find { |l| l.text == "gender:female" },
13
+ "gender field missing")
14
+ end
15
+
16
+ def test_post_form_json
17
+ page = @agent.post "http://localhost/form_post",
18
+ 'json' => '["&quot;"]'
19
+
20
+ assert page.links.find { |l| l.text == 'json:["""]' }
21
+ end
22
+
23
+ def test_post_form_multival
24
+ page = @agent.post("http://localhost/form_post",
25
+ [ ['gender', 'female'],
26
+ ['gender', 'male']
27
+ ]
28
+ )
29
+ assert(page.links.find { |l| l.text == "gender:female" },
30
+ "gender field missing")
31
+
32
+ assert(page.links.find { |l| l.text == "gender:male" },
33
+ "gender field missing")
34
+
35
+ assert_equal(2, page.links.length)
36
+ end
37
+ end
@@ -0,0 +1,22 @@
1
+ require "helper"
2
+
3
+ class TestPrettyPrint < MiniTest::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 "helper"
2
+
3
+ class TestRadioButtons < MiniTest::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 "helper"
2
+
3
+ class TestRedirectLimitReached < MiniTest::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,25 @@
1
+ require "helper"
2
+
3
+ class TestRedirectOk < MiniTest::Unit::TestCase
4
+ def setup
5
+ @agent = Mechanize.new
6
+ end
7
+
8
+ def test_false
9
+ @agent.redirect_ok = false
10
+ page = @agent.get('http://localhost/redirect_ok')
11
+ assert_equal(URI('http://localhost/redirect_ok'), @agent.page.uri)
12
+ end
13
+
14
+ def test_true
15
+ @agent.redirect_ok = true
16
+ page = @agent.get('http://localhost/redirect_ok')
17
+ assert_equal(URI('http://localhost/redirect_ok?q=5'), @agent.page.uri)
18
+ end
19
+
20
+ def test_permanent
21
+ @agent.redirect_ok = :permanent
22
+ page = @agent.get('http://localhost/redirect_ok')
23
+ assert_equal(URI('http://localhost/redirect_ok?q=3'), @agent.page.uri)
24
+ end
25
+ end
@@ -0,0 +1,81 @@
1
+ require "helper"
2
+
3
+ class RefererTest < MiniTest::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[0]
16
+ assert_equal("http://localhost/tc_referer.html", page.body)
17
+ end
18
+
19
+ def test_send_referer_noreferrer
20
+ page = @agent.get("http://localhost/tc_referer.html")
21
+ page = @agent.click page.links[3]
22
+ assert_equal("", page.body)
23
+ end
24
+
25
+ def test_fetch_two
26
+ page1 = @agent.get("http://localhost/tc_referer.html")
27
+ @agent.get("http://localhost/tc_pretty_print.html")
28
+ page = @agent.click page1.links[0]
29
+ assert_equal("http://localhost/tc_referer.html", page.body)
30
+ end
31
+
32
+ def test_fetch_two_first
33
+ page1 = @agent.get("http://localhost/tc_referer.html")
34
+ @agent.get("http://localhost/tc_pretty_print.html")
35
+ page = @agent.click page1.links[0]
36
+ assert_equal("http://localhost/tc_referer.html", page.body)
37
+ end
38
+
39
+ def test_post_form
40
+ page1 = @agent.get("http://localhost/tc_referer.html")
41
+ @agent.get("http://localhost/tc_pretty_print.html")
42
+ page = @agent.submit page1.forms.first
43
+ assert_equal("http://localhost/tc_referer.html", page.body)
44
+ end
45
+
46
+ def test_http_to_https
47
+ page = @agent.get("http://localhost/tc_referer.html")
48
+ page = @agent.click page.links[2]
49
+ assert_equal("http://localhost/tc_referer.html", page.body)
50
+ end
51
+
52
+ def test_http_to_https_noreferrer
53
+ page = @agent.get("http://localhost/tc_referer.html")
54
+ page = @agent.click page.links[5]
55
+ assert_equal("", page.body)
56
+ end
57
+
58
+ def test_https_to_https
59
+ page = @agent.get("https://localhost/tc_referer.html")
60
+ page = @agent.click page.links[2]
61
+ assert_equal("https://localhost/tc_referer.html", page.body)
62
+ end
63
+
64
+ def test_https_to_https_noreferrer
65
+ page = @agent.get("https://localhost/tc_referer.html")
66
+ page = @agent.click page.links[5]
67
+ assert_equal("", page.body)
68
+ end
69
+
70
+ def test_https_to_http
71
+ page = @agent.get("https://localhost/tc_referer.html")
72
+ page = @agent.click page.links[1]
73
+ assert_equal("", page.body)
74
+ end
75
+
76
+ def test_https_to_http_noreferrer
77
+ page = @agent.get("https://localhost/tc_referer.html")
78
+ page = @agent.click page.links[4]
79
+ assert_equal("", page.body)
80
+ end
81
+ end
@@ -0,0 +1,40 @@
1
+ require "helper"
2
+
3
+ class TestRelativeLinks < MiniTest::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.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
+
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
+ @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
+ @agent.click @page.frame_with(:name => 'frame1')
36
+ assert_equal('http://localhost/relative/tc_relative_links.html', @agent.current_page.uri.to_s)
37
+ @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
@@ -0,0 +1,13 @@
1
+ require "helper"
2
+
3
+ class RequestTest < MiniTest::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,53 @@
1
+ require "helper"
2
+
3
+ class ResponseCodeMechTest < MiniTest::Unit::TestCase
4
+ def setup
5
+ @mech = Mechanize.new
6
+ end
7
+
8
+ def test_eof_error_loop
9
+ assert_raises(Net::HTTP::Persistent::Error) {
10
+ @mech.get("http://localhost/http_headers?Content-Length=300")
11
+ }
12
+ end
13
+
14
+ def test_redirect
15
+ @mech.get("http://localhost/response_code?code=300")
16
+ assert_equal("http://localhost/index.html",
17
+ @mech.current_page.uri.to_s)
18
+
19
+ @mech.get("http://localhost/response_code?code=301")
20
+ assert_equal("http://localhost/index.html",
21
+ @mech.current_page.uri.to_s)
22
+
23
+ @mech.get("http://localhost/response_code?code=302")
24
+ assert_equal("http://localhost/index.html",
25
+ @mech.current_page.uri.to_s)
26
+
27
+ @mech.get("http://localhost/response_code?code=303")
28
+ assert_equal("http://localhost/index.html",
29
+ @mech.current_page.uri.to_s)
30
+
31
+ @mech.get("http://localhost/response_code?code=307")
32
+ assert_equal("http://localhost/index.html",
33
+ @mech.current_page.uri.to_s)
34
+ end
35
+
36
+ def test_do_not_follow_redirect
37
+ @mech.redirect_ok = false
38
+
39
+ @mech.get("http://localhost/response_code?code=302")
40
+ assert_equal("http://localhost/response_code?code=302",
41
+ @mech.current_page.uri.to_s)
42
+ end
43
+
44
+ def test_error
45
+ e = assert_raises Mechanize::ResponseCodeError do
46
+ @mech.get "http://localhost/response_code?code=500"
47
+ end
48
+
49
+ assert_equal "500", e.response_code
50
+ end
51
+
52
+ end
53
+
@@ -0,0 +1,72 @@
1
+ require "helper"
2
+
3
+ class TestRobots < MiniTest::Unit::TestCase
4
+
5
+ def setup
6
+ @mech = Mechanize.new
7
+ @robot = Mechanize.new { |a|
8
+ a.robots = true
9
+ }
10
+ end
11
+
12
+ def test_robots
13
+ assert_equal "Welcome!", @robot.get("http://localhost/robots.html").title
14
+
15
+ assert_raises Mechanize::RobotsDisallowedError do
16
+ @robot.get("http://localhost/norobots.html")
17
+ end
18
+ end
19
+
20
+ def test_robots_allowed_eh
21
+ allowed = URI.parse 'http://localhost/robots.html'
22
+ disallowed = URI.parse 'http://localhost/norobots.html'
23
+ assert @mech.agent.robots_allowed?(allowed)
24
+ assert !@mech.agent.robots_allowed?(disallowed)
25
+
26
+ assert !@mech.agent.robots_disallowed?(allowed)
27
+ assert @mech.agent.robots_disallowed?(disallowed)
28
+ end
29
+
30
+ def test_noindex
31
+ @mech.get("http://localhost/noindex.html")
32
+
33
+ assert @robot.agent.robots_allowed? URI("http://localhost/noindex.html")
34
+
35
+ assert_raises Mechanize::RobotsDisallowedError do
36
+ @robot.get("http://localhost/noindex.html")
37
+ end
38
+ end
39
+
40
+ def test_nofollow
41
+ page = @mech.get("http://localhost/nofollow.html")
42
+
43
+ page.links[0].click
44
+ page.links[1].click
45
+
46
+ page = @robot.get("http://localhost/nofollow.html")
47
+
48
+ assert_raises Mechanize::RobotsDisallowedError do
49
+ page.links[0].click
50
+ end
51
+ assert_raises Mechanize::RobotsDisallowedError do
52
+ page.links[1].click
53
+ end
54
+ end
55
+
56
+ def test_rel_nofollow
57
+ page = @mech.get("http://localhost/rel_nofollow.html")
58
+
59
+ page.links[0].click
60
+ page.links[1].click
61
+
62
+ page = @robot.get("http://localhost/rel_nofollow.html")
63
+
64
+ page.links[0].click
65
+
66
+ assert_raises Mechanize::RobotsDisallowedError do
67
+ page.links[1].click
68
+ end
69
+ end
70
+
71
+ end
72
+