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,76 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeFormSelectList < Mechanize::TestCase
4
-
5
- def setup
6
- super
7
-
8
- page = html_page <<-BODY
9
- <form name="form1" method="post" action="/form_post">
10
- <select name="select">
11
- <option value="1">Option 1</option>
12
- <option value="2" selected>Option 2</option>
13
- <option value="3">Option 3</option>
14
- <option value="4">Option 4</option>
15
- <option value="5">Option 5</option>
16
- <option value="6">Option 6</option>
17
- </select>
18
- </form>
19
- BODY
20
-
21
- form = page.forms.first
22
- @select = form.fields.first
23
- end
24
-
25
- def test_option_with
26
- option = @select.option_with :value => '1'
27
-
28
- assert_equal '1', option.value
29
- end
30
-
31
- def test_options_with
32
- options = @select.options_with :value => /[12]/
33
-
34
- assert_equal 2, options.length
35
- end
36
-
37
- def test_query_value
38
- assert_equal [%w[select 2]], @select.query_value
39
-
40
- @select.select_all
41
-
42
- assert_equal [%w[select 6]], @select.query_value
43
- end
44
-
45
- def test_select_all
46
- @select.select_all
47
-
48
- assert_equal "6", @select.value
49
- end
50
-
51
- def test_select_none
52
- @select.select_none
53
-
54
- assert_equal "1", @select.value
55
- end
56
-
57
- def test_selected_options
58
- assert_equal [@select.options[1]], @select.selected_options
59
-
60
- @select.options.last.click
61
-
62
- assert_equal [@select.options.last], @select.selected_options
63
- end
64
-
65
- def test_value
66
- assert_equal "2", @select.value
67
- end
68
-
69
- def test_value_equals
70
- @select.value = %w[a 1 2]
71
-
72
- assert_equal "a", @select.value
73
- end
74
-
75
- end
76
-
@@ -1,52 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeFormTextarea < Mechanize::TestCase
4
- def setup
5
- super
6
-
7
- @page = @mech.get("http://localhost/tc_textarea.html")
8
- end
9
-
10
- def test_empty_text_area
11
- form = @page.forms_with(:name => 'form1').first
12
- assert_equal('', form.field_with(:name => 'text1').value)
13
- form.text1 = 'Hello World'
14
- assert_equal('Hello World', form.field_with(:name => 'text1').value)
15
- page = @mech.submit(form)
16
- assert_equal(1, page.links.length)
17
- assert_equal('text1:Hello World', page.links[0].text)
18
- end
19
-
20
- def test_non_empty_textfield
21
- form = @page.forms_with(:name => 'form2').first
22
- assert_equal('sample text', form.field_with(:name => 'text1').value)
23
- page = @mech.submit(form)
24
- assert_equal(1, page.links.length)
25
- assert_equal('text1:sample text', page.links[0].text)
26
- end
27
-
28
- def test_multi_textfield
29
- form = @page.form_with(:name => 'form3')
30
-
31
- assert_equal(2, form.fields_with(:name => 'text1').length)
32
- assert_equal('', form.fields_with(:name => 'text1')[0].value)
33
- assert_equal('sample text', form.fields_with(:name => 'text1')[1].value)
34
-
35
- form.text1 = 'Hello World'
36
-
37
- assert_equal('Hello World', form.fields_with(:name => 'text1')[0].value)
38
- assert_equal('sample text', form.fields_with(:name => 'text1')[1].value)
39
-
40
- page = @mech.submit(form)
41
-
42
- assert_equal(2, page.links.length)
43
-
44
- link = page.links_with(:text => 'text1:sample text')
45
-
46
- assert_equal(1, link.length)
47
-
48
- link = page.links_with(:text => 'text1:Hello World')
49
-
50
- assert_equal(1, link.length)
51
- end
52
- end
@@ -1,35 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeHeaders < Mechanize::TestCase
4
- def setup
5
- super
6
-
7
- @headers = Mechanize::Headers.new
8
- @headers['content-type'] = 'text/html'
9
- @headers['Content-encoding'] = 'gzip'
10
- @headers['SERVER'] = 'Apache/2.2'
11
- end
12
-
13
- def test_aref
14
- assert_equal('Apache/2.2', @headers['server'])
15
- assert_equal('text/html', @headers['Content-Type'])
16
- end
17
-
18
- def test_key?
19
- assert_equal(true, @headers.key?('content-Encoding'))
20
- end
21
-
22
- def test_canonical_each
23
- all_keys = ['Content-Type', 'Content-Encoding', 'Server']
24
- keys = all_keys.dup
25
- @headers.canonical_each { |key, value|
26
- case keys.delete(key)
27
- when *all_keys
28
- # ok
29
- else
30
- flunk "unexpected key: #{key}"
31
- end
32
- }
33
- assert_equal([], keys)
34
- end
35
- end
@@ -1,103 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeHistory < Mechanize::TestCase
4
-
5
- def setup
6
- super
7
-
8
- @uri = URI 'http://example/'
9
- @uri2 = @uri + '/a'
10
- @history = Mechanize::History.new
11
- end
12
-
13
- def test_initialize
14
- assert_empty @history
15
- end
16
-
17
- def test_clear
18
- @history.push :page, @uri
19
-
20
- @history.clear
21
-
22
- assert_empty @history
23
- end
24
-
25
- def test_pop
26
- assert_nil @history.pop
27
-
28
- @history.push :page1, @uri
29
- @history.push :page2, @uri2
30
-
31
- assert_equal :page2, @history.pop
32
- refute_empty @history
33
- end
34
-
35
- def test_push
36
- p1 = page @uri
37
-
38
- obj = @history.push p1
39
-
40
- assert_same @history, obj
41
- assert_equal 1, @history.length
42
-
43
- p2 = page @uri2
44
-
45
- @history.push p2
46
-
47
- assert_equal 2, @history.length
48
- end
49
-
50
- def test_push_max_size
51
- @history = Mechanize::History.new 2
52
-
53
- @history.push :page1, @uri
54
-
55
- assert_equal 1, @history.length
56
-
57
- @history.push :page2, @uri
58
-
59
- assert_equal 2, @history.length
60
-
61
- @history.push :page3, @uri
62
-
63
- assert_equal 2, @history.length
64
- end
65
-
66
- def test_push_uri
67
- obj = @history.push :page, @uri
68
-
69
- assert_same @history, obj
70
- assert_equal 1, @history.length
71
-
72
- @history.push :page2, @uri
73
-
74
- assert_equal 2, @history.length
75
- end
76
-
77
- def test_shift
78
- assert_nil @history.shift
79
-
80
- @history.push :page1, @uri
81
- @history.push :page2, @uri2
82
-
83
- page = @history.shift
84
-
85
- assert_equal :page1, page
86
- refute_empty @history
87
-
88
- @history.shift
89
-
90
- assert_empty @history
91
- end
92
-
93
- def test_visited_eh
94
- refute @history.visited? @uri
95
-
96
- @history.push page @uri
97
-
98
- assert @history.visited? URI('http://example')
99
- assert @history.visited? URI('http://example/')
100
- end
101
-
102
- end
103
-
@@ -1,1225 +0,0 @@
1
- # coding: utf-8
2
-
3
- require 'mechanize/test_case'
4
-
5
- class TestMechanizeHttpAgent < Mechanize::TestCase
6
-
7
- def setup
8
- super
9
-
10
- @agent = @mech.agent
11
-
12
- @uri = URI.parse 'http://example/'
13
-
14
- @req = Net::HTTP::Get.new '/'
15
- @res = Net::HTTPOK.allocate
16
- @res.instance_variable_set :@code, 200
17
- @res.instance_variable_set :@header, {}
18
-
19
- @headers = if RUBY_VERSION > '1.9' then
20
- %w[accept user-agent]
21
- else
22
- %w[accept]
23
- end
24
- end
25
-
26
- def auth_realm uri, scheme, type
27
- base_uri = uri + '/'
28
- realm = Mechanize::HTTP::AuthRealm.new scheme, base_uri, 'r'
29
- @agent.authenticate_methods[base_uri][type] << realm
30
-
31
- realm
32
- end
33
-
34
- def test_connection_for_file
35
- uri = URI.parse 'file:///nonexistent'
36
- conn = @agent.connection_for uri
37
-
38
- assert_equal Mechanize::FileConnection.new, conn
39
- end
40
-
41
- def test_connection_for_http
42
- conn = @agent.connection_for @uri
43
-
44
- assert_equal @agent.http, conn
45
- end
46
-
47
- def test_disable_keep_alive
48
- @agent.disable_keep_alive @req
49
-
50
- refute @req['connection']
51
- end
52
-
53
- def test_disable_keep_alive_no
54
- @agent.keep_alive = false
55
-
56
- @agent.disable_keep_alive @req
57
-
58
- assert_equal 'close', @req['connection']
59
- end
60
-
61
- def test_enable_gzip
62
- @agent.enable_gzip @req
63
-
64
- assert_equal 'gzip,deflate,identity', @req['accept-encoding']
65
- end
66
-
67
- def test_enable_gzip_no
68
- @agent.gzip_enabled = false
69
-
70
- @agent.enable_gzip @req
71
-
72
- assert_equal 'identity', @req['accept-encoding']
73
- end
74
-
75
- def test_fetch_hooks
76
- @agent.pre_connect_hooks << proc do |agent, request|
77
- assert_equal '/index.html', request.path
78
- assert_equal @agent, agent
79
- end
80
-
81
- @agent.post_connect_hooks << proc do |agent, uri, response, body|
82
- assert_equal @agent, agent
83
- assert_equal URI('http://example/index.html'), uri
84
- assert_equal '200', response.code
85
- assert_kind_of String, body
86
- end
87
-
88
- @agent.fetch URI 'http://example/index.html'
89
- end
90
-
91
- def test_fetch_file_plus
92
- Tempfile.open '++plus++' do |io|
93
- content = 'plusses +++'
94
- io.write content
95
- io.rewind
96
-
97
- uri = URI.parse "file://#{Mechanize::Util.uri_escape io.path}"
98
-
99
- page = @agent.fetch uri
100
-
101
- assert_equal content, page.body
102
- assert_kind_of Mechanize::File, page
103
- end
104
- end
105
-
106
- def test_fetch_file_space
107
- foo = File.expand_path("../htdocs/dir with spaces/foo.html", __FILE__)
108
-
109
- uri = URI.parse "file://#{Mechanize::Util.uri_escape foo}"
110
-
111
- page = @agent.fetch uri
112
-
113
- assert_equal File.read(foo), page.body
114
- assert_kind_of Mechanize::Page, page
115
- end
116
-
117
- def test_fetch_file_nonexistent
118
- uri = URI.parse 'file:///nonexistent'
119
-
120
- e = assert_raises Mechanize::ResponseCodeError do
121
- @agent.fetch uri
122
- end
123
-
124
- assert_equal '404 => Net::HTTPNotFound', e.message
125
- end
126
-
127
- def test_fetch_post_connect_hook
128
- response = nil
129
- @agent.post_connect_hooks << lambda { |_, _, res, _| response = res }
130
-
131
- @agent.fetch 'http://localhost/'
132
-
133
- assert response
134
- end
135
-
136
- def test_fetch_server_error
137
- e = assert_raises Mechanize::ResponseCodeError do
138
- @mech.get 'http://localhost/response_code?code=500'
139
- end
140
-
141
- assert_equal '500', e.response_code
142
- end
143
-
144
- def test_get_robots
145
- robotstxt = @agent.get_robots 'http://localhost/robots.txt'
146
- refute_equal '', robotstxt
147
-
148
- robotstxt = @agent.get_robots 'http://localhost/response_code?code=404'
149
- assert_equal '', robotstxt
150
- end
151
-
152
- def test_http_request_file
153
- uri = URI.parse 'file:///nonexistent'
154
- request = @agent.http_request uri, :get
155
-
156
- assert_kind_of Mechanize::FileRequest, request
157
- assert_equal '/nonexistent', request.path
158
- end
159
-
160
- def test_http_request_get
161
- request = @agent.http_request @uri, :get
162
-
163
- assert_kind_of Net::HTTP::Get, request
164
- assert_equal '/', request.path
165
- end
166
-
167
- def test_http_request_post
168
- request = @agent.http_request @uri, :post
169
-
170
- assert_kind_of Net::HTTP::Post, request
171
- assert_equal '/', request.path
172
- end
173
-
174
- def test_idle_timeout_equals
175
- @agent.set_http
176
- @agent.idle_timeout = 1
177
-
178
- assert_equal 1, @agent.http.idle_timeout
179
- end
180
-
181
- def test_post_connect
182
- @agent.post_connect_hooks << proc { |agent, uri, response, body|
183
- assert_equal @agent, agent
184
- assert_equal @res, response
185
- assert_equal 'body', body
186
- throw :called
187
- }
188
-
189
- io = StringIO.new 'body'
190
-
191
- assert_throws :called do
192
- @agent.post_connect @uri, @res, io
193
- end
194
-
195
- assert_equal 0, io.pos
196
- end
197
-
198
- def test_pre_connect
199
- @agent.pre_connect_hooks << proc { |agent, request|
200
- assert_equal @agent, agent
201
- assert_equal @req, request
202
- throw :called
203
- }
204
-
205
- assert_throws :called do
206
- @agent.pre_connect @req
207
- end
208
- end
209
-
210
- def test_request_cookies
211
- uri = URI.parse 'http://host.example.com'
212
- Mechanize::Cookie.parse uri, 'hello=world domain=.example.com' do |cookie|
213
- @agent.cookie_jar.add uri, cookie
214
- end
215
-
216
- @agent.request_cookies @req, uri
217
-
218
- assert_equal 'hello=world domain=.example.com', @req['Cookie']
219
- end
220
-
221
- def test_request_cookies_none
222
- @agent.request_cookies @req, @uri
223
-
224
- assert_nil @req['Cookie']
225
- end
226
-
227
- def test_request_cookies_many
228
- uri = URI.parse 'http://host.example.com'
229
- cookie_str = 'a=b domain=.example.com, c=d domain=.example.com'
230
- Mechanize::Cookie.parse uri, cookie_str do |cookie|
231
- @agent.cookie_jar.add uri, cookie
232
- end
233
-
234
- @agent.request_cookies @req, uri
235
-
236
- expected = cookie_str.sub ', ', '; '
237
-
238
- assert_equal expected, @req['Cookie']
239
- end
240
-
241
- def test_request_cookies_wrong_domain
242
- uri = URI.parse 'http://host.example.com'
243
- Mechanize::Cookie.parse uri, 'hello=world domain=.example.com' do |cookie|
244
- @agent.cookie_jar.add uri, cookie
245
- end
246
-
247
- @agent.request_cookies @req, @uri
248
-
249
- assert_nil @req['Cookie']
250
- end
251
-
252
- def test_request_host
253
- @agent.request_host @req, @uri
254
-
255
- assert_equal 'example', @req['host']
256
- end
257
-
258
- def test_request_host_nonstandard
259
- @uri.port = 81
260
-
261
- @agent.request_host @req, @uri
262
-
263
- assert_equal 'example:81', @req['host']
264
- end
265
-
266
- def test_request_language_charset
267
- @agent.request_language_charset @req
268
-
269
- assert_equal 'en-us,en;q=0.5', @req['accept-language']
270
- assert_equal 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', @req['accept-charset']
271
- end
272
-
273
- def test_request_add_headers
274
- @agent.request_add_headers @req, 'Content-Length' => 300
275
-
276
- assert_equal '300', @req['content-length']
277
- end
278
-
279
- def test_request_add_headers_etag
280
- @agent.request_add_headers @req, :etag => '300'
281
-
282
- assert_equal '300', @req['etag']
283
- end
284
-
285
- def test_request_add_headers_if_modified_since
286
- @agent.request_add_headers @req, :if_modified_since => 'some_date'
287
-
288
- assert_equal 'some_date', @req['if-modified-since']
289
- end
290
-
291
- def test_request_add_headers_none
292
- @agent.request_add_headers @req
293
-
294
- assert_equal @headers, @req.to_hash.keys.sort
295
- end
296
-
297
- def test_request_add_headers_request_headers
298
- @agent.request_headers['X-Foo'] = 'bar'
299
-
300
- @agent.request_add_headers @req
301
-
302
- assert_equal @headers + %w[x-foo], @req.to_hash.keys.sort
303
- end
304
-
305
- def test_request_add_headers_symbol
306
- e = assert_raises ArgumentError do
307
- @agent.request_add_headers @req, :content_length => 300
308
- end
309
-
310
- assert_equal 'unknown header symbol content_length', e.message
311
- end
312
-
313
- def test_request_auth_none
314
- @agent.request_auth @req, @uri
315
-
316
- assert_nil @req['Authorization']
317
- end
318
-
319
- def test_request_auth_basic
320
- @agent.user = 'user'
321
- @agent.password = 'password'
322
-
323
- auth_realm @uri, 'Basic', :basic
324
-
325
- @agent.request_auth @req, @uri
326
-
327
- assert_match %r%^Basic %, @req['Authorization']
328
- end
329
-
330
- def test_request_auth_digest
331
- @agent.user = 'user'
332
- @agent.password = 'password'
333
-
334
- realm = auth_realm @uri, 'Digest', :digest
335
- @agent.digest_challenges[realm] = 'Digest realm=r, qop="auth"'
336
-
337
- @agent.request_auth @req, @uri
338
-
339
- assert_match %r%^Digest %, @req['Authorization']
340
- assert_match %r%qop=auth%, @req['Authorization']
341
- end
342
-
343
- def test_request_auth_iis_digest
344
- @agent.user = 'user'
345
- @agent.password = 'password'
346
-
347
- realm = auth_realm @uri, 'Digest', :digest
348
- @agent.digest_challenges[realm] = 'Digest realm=r, qop="auth"'
349
-
350
- @agent.request_auth @req, @uri
351
-
352
- assert_match %r%^Digest %, @req['Authorization']
353
- assert_match %r%qop=auth%, @req['Authorization']
354
- end
355
-
356
- def test_request_referer
357
- referer = URI.parse 'http://old.example'
358
-
359
- @agent.request_referer @req, @uri, referer
360
-
361
- assert_equal 'http://old.example', @req['referer']
362
- end
363
-
364
- def test_request_referer_https
365
- uri = URI.parse 'https://example'
366
- referer = URI.parse 'https://old.example'
367
-
368
- @agent.request_referer @req, uri, referer
369
-
370
- assert_equal 'https://old.example', @req['referer']
371
- end
372
-
373
- def test_request_referer_https_downgrade
374
- referer = URI.parse 'https://old.example'
375
-
376
- @agent.request_referer @req, @uri, referer
377
-
378
- assert_nil @req['referer']
379
- end
380
-
381
- def test_request_referer_https_downgrade_case
382
- uri = URI.parse 'http://example'
383
- referer = URI.parse 'httpS://old.example'
384
-
385
- @agent.request_referer @req, uri, referer
386
-
387
- assert_nil @req['referer']
388
- end
389
-
390
- def test_request_referer_https_upgrade
391
- uri = URI.parse 'https://example'
392
- referer = URI.parse 'http://old.example'
393
-
394
- @agent.request_referer @req, uri, referer
395
-
396
- assert_equal 'http://old.example', @req['referer']
397
- end
398
-
399
- def test_request_referer_none
400
- @agent.request_referer @req, @uri, nil
401
-
402
- assert_nil @req['referer']
403
- end
404
-
405
- def test_request_user_agent
406
- @agent.request_user_agent @req
407
-
408
- assert_match %r%^Mechanize/#{Mechanize::VERSION}%, @req['user-agent']
409
-
410
- ruby_version = if RUBY_PATCHLEVEL >= 0 then
411
- "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}"
412
- else
413
- "#{RUBY_VERSION}dev#{RUBY_REVISION}"
414
- end
415
-
416
- assert_match %r%Ruby/#{ruby_version}%, @req['user-agent']
417
- end
418
-
419
- def test_resolve_bad_uri
420
- e = assert_raises ArgumentError do
421
- @agent.resolve 'google'
422
- end
423
-
424
- assert_equal 'absolute URL needed (not google)', e.message
425
- end
426
-
427
- def test_resolve_utf8
428
- uri = 'http://example?q=ü'
429
-
430
- resolved = @agent.resolve uri
431
-
432
- assert_equal '/?q=%C3%BC', resolved.request_uri
433
- end
434
-
435
- def test_resolve_parameters_body
436
- input_params = { :q => 'hello' }
437
-
438
- uri, params = @agent.resolve_parameters @uri, :post, input_params
439
-
440
- assert_equal 'http://example/', uri.to_s
441
- assert_equal input_params, params
442
- end
443
-
444
- def test_resolve_parameters_query
445
- uri, params = @agent.resolve_parameters @uri, :get, :q => 'hello'
446
-
447
- assert_equal 'http://example/?q=hello', uri.to_s
448
- assert_nil params
449
- end
450
-
451
- def test_resolve_parameters_query_append
452
- input_params = { :q => 'hello' }
453
- @uri.query = 'a=b'
454
-
455
- uri, params = @agent.resolve_parameters @uri, :get, input_params
456
-
457
- assert_equal 'http://example/?a=b&q=hello', uri.to_s
458
- assert_nil params
459
- end
460
-
461
- def test_response_authenticate
462
- @res.instance_variable_set :@header, 'www-authenticate' => ['Basic realm=r']
463
- @agent.user = 'user'
464
- @agent.password = 'password'
465
-
466
- @agent.response_authenticate @res, nil, @uri, @req, {}, nil, nil
467
-
468
- base_uri = @uri + '/'
469
- realm = Mechanize::HTTP::AuthRealm.new 'Basic', base_uri, 'r'
470
- assert_equal [realm], @agent.authenticate_methods[base_uri][:basic]
471
- end
472
-
473
- def test_response_authenticate_digest
474
- @res.instance_variable_set(:@header,
475
- 'www-authenticate' => ['Digest realm=r'])
476
- @agent.user = 'user'
477
- @agent.password = 'password'
478
-
479
- @agent.response_authenticate @res, nil, @uri, @req, {}, nil, nil
480
-
481
- base_uri = @uri + '/'
482
- realm = Mechanize::HTTP::AuthRealm.new 'Digest', base_uri, 'r'
483
- assert_equal [realm], @agent.authenticate_methods[base_uri][:digest]
484
-
485
- challenge = Mechanize::HTTP::AuthChallenge.new 'Digest', 'realm' => 'r'
486
- assert_equal challenge, @agent.digest_challenges[realm]
487
- end
488
-
489
- def test_response_authenticate_digest_iis
490
- @res.instance_variable_set(:@header,
491
- 'www-authenticate' => ['Digest realm=r'],
492
- 'server' => ['Microsoft-IIS'])
493
- @agent.user = 'user'
494
- @agent.password = 'password'
495
-
496
- @agent.response_authenticate @res, nil, @uri, @req, {}, nil, nil
497
-
498
- base_uri = @uri + '/'
499
- realm = Mechanize::HTTP::AuthRealm.new 'Digest', base_uri, 'r'
500
- assert_equal [realm], @agent.authenticate_methods[base_uri][:iis_digest]
501
- end
502
-
503
- def test_response_authenticate_multiple
504
- @res.instance_variable_set(:@header,
505
- 'www-authenticate' =>
506
- ['Basic realm=r, Digest realm=r'])
507
- @agent.user = 'user'
508
- @agent.password = 'password'
509
-
510
- @agent.response_authenticate @res, nil, @uri, @req, {}, nil, nil
511
-
512
- base_uri = @uri + '/'
513
- realm = Mechanize::HTTP::AuthRealm.new 'Digest', base_uri, 'r'
514
- assert_equal [realm], @agent.authenticate_methods[base_uri][:digest]
515
-
516
- assert_empty @agent.authenticate_methods[base_uri][:basic]
517
- end
518
-
519
- def test_response_authenticate_ntlm
520
- @uri += '/ntlm'
521
- @res.instance_variable_set(:@header,
522
- 'www-authenticate' => ['NTLM'])
523
- @agent.user = 'user'
524
- @agent.password = 'password'
525
-
526
- page = @agent.response_authenticate @res, nil, @uri, @req, {}, nil, nil
527
-
528
- assert_equal 'ok', page.body # lame test
529
- end
530
-
531
- def test_response_authenticate_unknown
532
- @agent.user = 'user'
533
- @agent.password = 'password'
534
- page = Mechanize::File.new nil, nil, nil, 401
535
- @res.instance_variable_set(:@header,
536
- 'www-authenticate' => ['Unknown realm=r'])
537
-
538
- assert_raises Mechanize::UnauthorizedError do
539
- @agent.response_authenticate @res, page, @uri, @req, nil, nil, nil
540
- end
541
- end
542
-
543
- def test_response_content_encoding_7_bit
544
- def @res.content_length() 4 end
545
- @res.instance_variable_set :@header, 'content-encoding' => %w[7bit]
546
-
547
- body = @agent.response_content_encoding @res, StringIO.new('part')
548
-
549
- assert_equal 'part', body.read
550
- end
551
-
552
- def test_response_content_encoding_deflate
553
- def @res.content_length() 12 end
554
- @res.instance_variable_set :@header, 'content-encoding' => %w[deflate]
555
- body_io = StringIO.new "x\x9C+H,*\x01\x00\x04?\x01\xB8"
556
-
557
- body = @agent.response_content_encoding @res, body_io
558
-
559
- assert_equal 'part', body.read
560
- end
561
-
562
- def test_response_content_encoding_deflate_chunked
563
- def @res.content_length() nil end
564
- @res.instance_variable_set :@header, 'content-encoding' => %w[deflate]
565
- body_io = StringIO.new "x\x9C+H,*\x01\x00\x04?\x01\xB8"
566
-
567
- body = @agent.response_content_encoding @res, body_io
568
-
569
- assert_equal 'part', body.read
570
- end
571
-
572
- # IIS/6.0 ASP.NET/2.0.50727 does not wrap deflate with zlib, WTF?
573
- def test_response_content_encoding_deflate_no_zlib
574
- def @res.content_length() 6 end
575
- @res.instance_variable_set :@header, 'content-encoding' => %w[deflate]
576
-
577
- body = @agent.response_content_encoding @res, StringIO.new("+H,*\001\000")
578
-
579
- assert_equal 'part', body.read
580
- end
581
-
582
- def test_response_content_encoding_gzip
583
- def @res.content_length() 24 end
584
- @res.instance_variable_set :@header, 'content-encoding' => %w[gzip]
585
- body_io = StringIO.new \
586
- "\037\213\b\0002\002\225M\000\003+H,*\001\000\306p\017I\004\000\000\000"
587
-
588
- body = @agent.response_content_encoding @res, body_io
589
-
590
- assert_equal 'part', body.read
591
- end
592
-
593
- def test_response_content_encoding_gzip_chunked
594
- def @res.content_length() nil end
595
- @res.instance_variable_set :@header, 'content-encoding' => %w[gzip]
596
- body_io = StringIO.new \
597
- "\037\213\b\0002\002\225M\000\003+H,*\001\000\306p\017I\004\000\000\000"
598
-
599
- body = @agent.response_content_encoding @res, body_io
600
-
601
- assert_equal 'part', body.read
602
- end
603
-
604
- def test_response_content_encoding_gzip_encoding_bad
605
- def @res.content_length() 24 end
606
- @res.instance_variable_set(:@header,
607
- 'content-encoding' => %w[gzip],
608
- 'content-type' => 'text/html; charset=UTF-8')
609
-
610
- # "test\xB2"
611
- body_io = StringIO.new \
612
- "\037\213\b\000*+\314N\000\003+I-.\331\004\000x\016\003\376\005\000\000\000"
613
-
614
- body = @agent.response_content_encoding @res, body_io
615
-
616
- expected = "test\xB2"
617
- expected.force_encoding Encoding::BINARY if have_encoding?
618
-
619
- content = body.read
620
- assert_equal expected, content
621
- assert_equal Encoding::BINARY, content.encoding if have_encoding?
622
- end
623
-
624
- def test_response_content_encoding_none
625
- def @res.content_length() 4 end
626
- @res.instance_variable_set :@header, 'content-encoding' => %w[none]
627
-
628
- body = @agent.response_content_encoding @res, StringIO.new('part')
629
-
630
- assert_equal 'part', body.read
631
- end
632
-
633
- def test_response_content_encoding_x_gzip
634
- def @res.content_length() 24 end
635
- @res.instance_variable_set :@header, 'content-encoding' => %w[x-gzip]
636
- body_io = StringIO.new \
637
- "\037\213\b\0002\002\225M\000\003+H,*\001\000\306p\017I\004\000\000\000"
638
-
639
- body = @agent.response_content_encoding @res, body_io
640
-
641
- assert_equal 'part', body.read
642
- end
643
-
644
- def test_response_content_encoding_unknown
645
- def @res.content_length() 4 end
646
- @res.instance_variable_set :@header, 'content-encoding' => %w[unknown]
647
- body = StringIO.new 'part'
648
-
649
- e = assert_raises Mechanize::Error do
650
- @agent.response_content_encoding @res, body
651
- end
652
-
653
- assert_equal 'Unsupported Content-Encoding: unknown', e.message
654
- end
655
-
656
- def test_get_meta_refresh_header_follow_self
657
- @agent.follow_meta_refresh = true
658
- @agent.follow_meta_refresh_self = true
659
-
660
- page = Mechanize::Page.new(@uri, {'content-type' => 'text/html'}, '',
661
- 200, @mech)
662
- @res.instance_variable_set :@header, 'refresh' => ['0']
663
-
664
- refresh = @agent.get_meta_refresh @res, @uri, page
665
-
666
- assert_equal [0.0, URI('http://example/')], refresh
667
- end
668
-
669
- def test_get_meta_refresh_header_no_follow
670
- page = Mechanize::Page.new(@uri, {'content-type' => 'text/html'}, '',
671
- 200, @mech)
672
- @res.instance_variable_set :@header, 'refresh' => ['0']
673
-
674
- refresh = @agent.get_meta_refresh @res, @uri, page
675
-
676
- assert_nil refresh
677
- end
678
-
679
- def test_get_meta_refresh_header_no_follow_self
680
- @agent.follow_meta_refresh = true
681
-
682
- page = Mechanize::Page.new(@uri, {'content-type' => 'text/html'}, '',
683
- 200, @mech)
684
- @res.instance_variable_set :@header, 'refresh' => ['0']
685
-
686
- refresh = @agent.get_meta_refresh @res, @uri, page
687
-
688
- assert_nil refresh
689
- end
690
-
691
- def test_get_meta_refresh_meta_follow_self
692
- @agent.follow_meta_refresh = true
693
- @agent.follow_meta_refresh_self = true
694
-
695
- body = <<-BODY
696
- <title></title>
697
- <meta http-equiv="refresh" content="0">
698
- BODY
699
-
700
- page = Mechanize::Page.new(@uri, {'content-type' => 'text/html'}, body,
701
- 200, @mech)
702
-
703
- refresh = @agent.get_meta_refresh @res, @uri, page
704
-
705
- assert_equal [0, 'http://example/'], refresh
706
- end
707
-
708
- def test_get_meta_refresh_meta_no_follow
709
- body = <<-BODY
710
- <title></title>
711
- <meta http-equiv="refresh" content="0">
712
- BODY
713
-
714
- page = Mechanize::Page.new(@uri, {'content-type' => 'text/html'}, body,
715
- 200, @mech)
716
-
717
- refresh = @agent.get_meta_refresh @res, @uri, page
718
-
719
- assert_nil refresh
720
- end
721
-
722
- def test_get_meta_refresh_meta_no_follow_self
723
- @agent.follow_meta_refresh = true
724
-
725
- body = <<-BODY
726
- <title></title>
727
- <meta http-equiv="refresh" content="0">
728
- BODY
729
-
730
- page = Mechanize::Page.new(@uri, {'content-type' => 'text/html'}, body,
731
- 200, @mech)
732
-
733
- refresh = @agent.get_meta_refresh @res, @uri, page
734
-
735
- assert_nil refresh
736
- end
737
-
738
- def test_hook_content_encoding_response
739
- @mech.content_encoding_hooks << lambda{|agent, uri, response, response_body_io|
740
- response['content-encoding'] = 'gzip' if response['content-encoding'] == 'agzip'}
741
-
742
- @res.instance_variable_set :@header, 'content-encoding' => %w[agzip]
743
- body_io = StringIO.new 'part'
744
- @agent.hook_content_encoding @res, @uri, body_io
745
-
746
- assert_equal 'gzip', @res['content-encoding']
747
- end
748
-
749
- def test_response_cookies
750
- uri = URI.parse 'http://host.example.com'
751
- cookie_str = 'a=b domain=.example.com'
752
- @res.instance_variable_set(:@header,
753
- 'set-cookie' => [cookie_str],
754
- 'content-type' => %w[text/html])
755
- page = Mechanize::Page.new uri, @res, '', 200, @mech
756
-
757
- @agent.response_cookies @res, uri, page
758
-
759
- assert_equal ['a=b domain=.example.com'],
760
- @agent.cookie_jar.cookies(uri).map { |c| c.to_s }
761
- end
762
-
763
- def test_response_cookies_many
764
- uri = URI.parse 'http://host.example.com'
765
- cookie1 = 'a=b domain=.example.com'
766
- cookie2 = 'c=d domain=.example.com'
767
- @res.instance_variable_set(:@header,
768
- 'set-cookie' => [cookie1, cookie2],
769
- 'content-type' => %w[text/html])
770
- page = Mechanize::Page.new uri, @res, '', 200, @mech
771
-
772
- @agent.response_cookies @res, uri, page
773
-
774
- assert_equal ['a=b domain=.example.com', 'c=d domain=.example.com'],
775
- @agent.cookie_jar.cookies(uri).map { |c| c.to_s }
776
- end
777
-
778
- def test_response_cookies_meta
779
- uri = URI.parse 'http://host.example.com'
780
- cookie_str = 'a=b domain=.example.com'
781
-
782
- body = <<-BODY
783
- <head>
784
- <meta http-equiv="Set-Cookie" content="#{cookie_str}">
785
- </head>"
786
- BODY
787
-
788
- @res.instance_variable_set(:@header,
789
- 'content-type' => %w[text/html])
790
- page = Mechanize::Page.new uri, @res, body, 200, @mech
791
-
792
- @agent.response_cookies @res, uri, page
793
-
794
- assert_equal ['a=b domain=.example.com'],
795
- @agent.cookie_jar.cookies(uri).map { |c| c.to_s }
796
- end
797
-
798
- def test_response_follow_meta_refresh
799
- uri = URI.parse 'http://example/#id+1'
800
-
801
- body = <<-BODY
802
- <title></title>
803
- <meta http-equiv="refresh" content="0">
804
- BODY
805
-
806
- page = Mechanize::Page.new(uri, {'content-type' => 'text/html'}, body,
807
- 200, @mech)
808
-
809
- @agent.follow_meta_refresh = true
810
- @agent.follow_meta_refresh_self = true
811
-
812
- page = @agent.response_follow_meta_refresh @res, uri, page, 0
813
-
814
- assert_equal uri, page.uri
815
- end
816
-
817
- def test_response_follow_meta_refresh_limit
818
- uri = URI.parse 'http://example/#id+1'
819
-
820
- body = <<-BODY
821
- <title></title>
822
- <meta http-equiv="refresh" content="0">
823
- BODY
824
-
825
- page = Mechanize::Page.new(uri, {'content-type' => 'text/html'}, body,
826
- 200, @mech)
827
-
828
- @agent.follow_meta_refresh = true
829
- @agent.follow_meta_refresh_self = true
830
-
831
- assert_raises Mechanize::RedirectLimitReachedError do
832
- @agent.response_follow_meta_refresh(@res, uri, page,
833
- @agent.redirection_limit)
834
- end
835
- end
836
-
837
- def test_response_read
838
- def @res.read_body() yield 'part' end
839
- def @res.content_length() 4 end
840
-
841
- io = @agent.response_read @res, @req
842
-
843
- body = io.read
844
-
845
- assert_equal 'part', body
846
- assert_equal Encoding::BINARY, body.encoding if body.respond_to? :encoding
847
- end
848
-
849
- def test_response_read_large
850
- def @res.read_body() yield 'a' * 10241 end
851
- def @res.content_length() 10241 end
852
-
853
- io = @agent.response_read @res, @req
854
-
855
- assert_kind_of Tempfile, io
856
- assert_equal 10241, io.stat.size
857
- end
858
-
859
- def test_response_read_large_chunked
860
- def @res.read_body
861
- 11.times do yield 'a' * 1024 end
862
- end
863
- def @res.content_length() end
864
-
865
- io = @agent.response_read @res, @req
866
-
867
- assert_kind_of Tempfile, io
868
- assert_equal 11264, io.stat.size
869
- end
870
-
871
- def test_response_read_content_length_head
872
- req = Net::HTTP::Head.new '/'
873
-
874
- def @res.content_length() end
875
- def @res.read_body() end
876
-
877
- io = @agent.response_read @res, req
878
-
879
- assert_equal '', io.read
880
- end
881
-
882
- def test_response_read_content_length_mismatch
883
- def @res.content_length() 5 end
884
- def @res.read_body() yield 'part' end
885
-
886
- e = assert_raises EOFError do
887
- @agent.response_read @res, @req
888
- end
889
-
890
- assert_equal 'Content-Length (5) does not match response body length (4)',
891
- e.message
892
- end
893
-
894
- def test_response_read_content_length_redirect
895
- res = Net::HTTPFound.allocate
896
- def res.content_length() 5 end
897
- def res.code() 302 end
898
- def res.read_body() yield 'part' end
899
- res.instance_variable_set :@header, {}
900
-
901
- io = @agent.response_read res, @req
902
-
903
- assert_equal 'part', io.read
904
- end
905
-
906
- def test_response_read_error
907
- def @res.read_body()
908
- yield 'part'
909
- raise Net::HTTP::Persistent::Error
910
- end
911
-
912
- e = assert_raises Mechanize::ResponseReadError do
913
- @agent.response_read @res, @req
914
- end
915
-
916
- assert_equal @res, e.response
917
- assert_equal 'part', e.body_io.read
918
- assert_kind_of Net::HTTP::Persistent::Error, e.error
919
- end
920
-
921
- def test_response_read_file
922
- Tempfile.open 'pi.txt' do |tempfile|
923
- tempfile.write "π\n"
924
- tempfile.flush
925
- tempfile.rewind
926
-
927
- uri = URI.parse "file://#{tempfile.path}"
928
- req = Mechanize::FileRequest.new uri
929
- res = Mechanize::FileResponse.new tempfile.path
930
-
931
- io = @agent.response_read res, req
932
-
933
- expected = "π\n"
934
- expected.force_encoding Encoding::BINARY if expected.respond_to? :encoding
935
-
936
- body = io.read
937
- assert_equal expected, body
938
- assert_equal Encoding::BINARY, body.encoding if body.respond_to? :encoding
939
- end
940
- end
941
-
942
- def test_response_read_no_body
943
- req = Net::HTTP::Options.new '/'
944
-
945
- def @res.content_length() end
946
- def @res.read_body() end
947
-
948
- io = @agent.response_read @res, req
949
-
950
- assert_equal '', io.read
951
- end
952
-
953
- def test_response_read_unknown_code
954
- res = Net::HTTPUnknownResponse.allocate
955
- res.instance_variable_set :@code, 9999
956
- res.instance_variable_set :@header, {}
957
- def res.read_body() yield 'part' end
958
-
959
- e = assert_raises Mechanize::ResponseCodeError do
960
- @agent.response_read res, @req
961
- end
962
-
963
- assert_equal res, e.page
964
- end
965
-
966
- def test_response_redirect
967
- @agent.redirect_ok = true
968
- referer = page 'http://example/referer'
969
-
970
- page = fake_page
971
- page = @agent.response_redirect({ 'Location' => '/index.html' }, :get,
972
- page, 0, referer)
973
-
974
- assert_equal URI('http://fake.example/index.html'), page.uri
975
-
976
- assert_equal 'http://example/referer', requests.first['Referer']
977
- end
978
-
979
- def test_response_redirect_limit
980
- @agent.redirect_ok = true
981
- referer = page 'http://example/referer'
982
-
983
- assert_raises Mechanize::RedirectLimitReachedError do
984
- @agent.response_redirect({ 'Location' => '/index.html' }, :get,
985
- fake_page, @agent.redirection_limit, referer)
986
- end
987
- end
988
-
989
- def test_response_redirect_not_ok
990
- @agent.redirect_ok = false
991
-
992
- page = fake_page
993
- page = @agent.response_redirect({ 'Location' => '/other' }, :get, page, 0,
994
- page)
995
-
996
- assert_equal URI('http://fake.example'), page.uri
997
- end
998
-
999
- def test_response_redirect_permanent
1000
- @agent.redirect_ok = :permanent
1001
-
1002
- response = Net::HTTPMovedPermanently.allocate
1003
- response.instance_variable_set :@header, { 'location' => %w[/index.html] }
1004
-
1005
- page = fake_page
1006
- page = @agent.response_redirect response, :get, page, 0, page
1007
-
1008
- assert_equal URI('http://fake.example/index.html'), page.uri
1009
- end
1010
-
1011
- def test_response_redirect_permanent_temporary
1012
- @agent.redirect_ok = :permanent
1013
-
1014
- response = Net::HTTPMovedTemporarily.allocate
1015
- response.instance_variable_set :@header, { 'location' => %w[/index.html] }
1016
-
1017
- page = fake_page
1018
- page = @agent.response_redirect response, :get, page, 0, page
1019
-
1020
- assert_equal URI('http://fake.example/'), page.uri
1021
- end
1022
-
1023
- def test_response_parse
1024
- body = '<title>hi</title>'
1025
- @res.instance_variable_set :@header, 'content-type' => %w[text/html]
1026
-
1027
- page = @agent.response_parse @res, body, @uri
1028
-
1029
- assert_instance_of Mechanize::Page, page
1030
- assert_equal @mech, page.mech
1031
- end
1032
-
1033
- def test_response_parse_content_type_case
1034
- body = '<title>hi</title>'
1035
- @res.instance_variable_set(:@header, 'content-type' => %w[text/HTML])
1036
-
1037
- page = @agent.response_parse @res, body, @uri
1038
-
1039
- assert_instance_of Mechanize::Page, page
1040
-
1041
- assert_equal 'text/HTML', page.content_type
1042
- end
1043
-
1044
- def test_response_parse_content_type_encoding
1045
- body = '<title>hi</title>'
1046
- @res.instance_variable_set(:@header,
1047
- 'content-type' =>
1048
- %w[text/html;charset=ISO-8859-1])
1049
-
1050
- page = @agent.response_parse @res, body, @uri
1051
-
1052
- assert_instance_of Mechanize::Page, page
1053
- assert_equal @mech, page.mech
1054
-
1055
- assert_equal 'ISO-8859-1', page.encoding
1056
- assert_equal 'ISO-8859-1', page.parser.encoding
1057
- end
1058
-
1059
- def test_response_parse_content_type_encoding_garbage
1060
- body = '<title>hi</title>'
1061
- @res.instance_variable_set(:@header,
1062
- 'content-type' =>
1063
- %w[text/html; charset=garbage_charset])
1064
-
1065
- page = @agent.response_parse @res, body, @uri
1066
-
1067
- assert_instance_of Mechanize::Page, page
1068
- assert_equal @mech, page.mech
1069
- end
1070
-
1071
- def test_response_parse_content_type_encoding_broken_iso_8859_1
1072
- body = '<title>hi</title>'
1073
- @res.instance_variable_set(:@header,
1074
- 'content-type' =>
1075
- %w[text/html; charset=ISO_8859-1])
1076
-
1077
- page = @agent.response_parse @res, body, @uri
1078
-
1079
- assert_instance_of Mechanize::Page, page
1080
- assert_equal 'ISO_8859-1', page.encoding
1081
- end
1082
-
1083
- def test_response_parse_content_type_encoding_broken_utf_8
1084
- body = '<title>hi</title>'
1085
- @res.instance_variable_set(:@header,
1086
- 'content-type' =>
1087
- %w[text/html; charset=UTF8])
1088
-
1089
- page = @agent.response_parse @res, body, @uri
1090
-
1091
- assert_instance_of Mechanize::Page, page
1092
- assert_equal 'UTF8', page.encoding
1093
- assert_equal 'UTF8', page.parser.encoding
1094
- end
1095
-
1096
- def test_response_parse_content_type_encoding_semicolon
1097
- body = '<title>hi</title>'
1098
- @res.instance_variable_set(:@header,
1099
- 'content-type' =>
1100
- %w[text/html;charset=UTF-8;])
1101
-
1102
- page = @agent.response_parse @res, body, @uri
1103
-
1104
- assert_instance_of Mechanize::Page, page
1105
-
1106
- assert_equal 'UTF-8', page.encoding
1107
- end
1108
-
1109
- def test_robots_allowed_eh
1110
- allowed = URI 'http://localhost/index.html'
1111
- disallowed = URI 'http://localhost/norobots.html'
1112
-
1113
- assert @agent.robots_allowed? allowed
1114
- refute @agent.robots_allowed? disallowed
1115
-
1116
- refute @agent.robots_disallowed? allowed
1117
- assert @agent.robots_disallowed? disallowed
1118
- end
1119
-
1120
- def test_robots_allowed_eh_noindex
1121
- @agent.robots = true
1122
-
1123
- noindex = URI 'http://localhost/noindex.html'
1124
-
1125
- assert @agent.robots_allowed? noindex
1126
-
1127
- assert_raises Mechanize::RobotsDisallowedError do
1128
- @agent.fetch noindex
1129
- end
1130
- end
1131
-
1132
- def test_set_http
1133
- @agent.set_http
1134
-
1135
- assert_equal 'mechanize', @agent.http.name
1136
- refute @agent.http.retry_change_requests
1137
- end
1138
-
1139
- def test_set_http_idle_timeout
1140
- @agent.idle_timeout = 1
1141
- @agent.set_http
1142
-
1143
- assert_equal 'mechanize', @agent.http.name
1144
- assert_equal 1, @agent.http.idle_timeout
1145
- end
1146
-
1147
- def test_set_http_ssl
1148
- in_tmpdir do
1149
- store = OpenSSL::X509::Store.new
1150
- @agent.cert = ssl_certificate
1151
- @agent.key = ssl_private_key
1152
- @agent.cert_store = store
1153
- @agent.ca_file = '.'
1154
- @agent.verify_callback = proc { |ok, context| }
1155
-
1156
- @agent.set_http
1157
-
1158
- http = @agent.http
1159
-
1160
- assert_equal ssl_certificate, http.certificate
1161
- assert_equal ssl_private_key, http.private_key
1162
- assert_equal store, http.cert_store
1163
- assert_equal '.', http.ca_file
1164
- assert_equal OpenSSL::SSL::VERIFY_PEER, http.verify_mode
1165
- assert http.verify_callback
1166
- end
1167
- end
1168
-
1169
- def test_set_http_ssl_verify_none
1170
- in_tmpdir do
1171
- @agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
1172
-
1173
- @agent.set_http
1174
-
1175
- http = @agent.http
1176
-
1177
- assert_equal OpenSSL::SSL::VERIFY_NONE, http.verify_mode
1178
- end
1179
- end
1180
-
1181
- def test_set_http_retry_change_request
1182
- @agent.retry_change_requests = true
1183
- @agent.set_http
1184
-
1185
- assert_equal 'mechanize', @agent.http.name
1186
- assert @agent.http.retry_change_requests
1187
- end
1188
-
1189
- def test_set_proxy
1190
- @agent.set_proxy 'www.example.com', 9001, 'joe', 'lol'
1191
-
1192
- assert_equal @agent.proxy_uri.host, 'www.example.com'
1193
- assert_equal @agent.proxy_uri.port, 9001
1194
- assert_equal @agent.proxy_uri.user, 'joe'
1195
- assert_equal @agent.proxy_uri.password, 'lol'
1196
- end
1197
-
1198
- def test_set_proxy_port_string
1199
- @agent.set_proxy 'www.example.com', '9001', 'joe', 'lol'
1200
-
1201
- assert_equal @agent.proxy_uri.host, 'www.example.com'
1202
- assert_equal @agent.proxy_uri.port, 9001
1203
- assert_equal @agent.proxy_uri.user, 'joe'
1204
- assert_equal @agent.proxy_uri.password, 'lol'
1205
- end
1206
-
1207
- def test_set_proxy_service_name
1208
- @agent.set_proxy 'www.example.com', 'http', 'joe', 'lol'
1209
-
1210
- assert_equal @agent.proxy_uri.host, 'www.example.com'
1211
- assert_equal @agent.proxy_uri.port, 80
1212
- assert_equal @agent.proxy_uri.user, 'joe'
1213
- assert_equal @agent.proxy_uri.password, 'lol'
1214
- end
1215
-
1216
- def test_set_proxy_service_name_bad
1217
- e = assert_raises ArgumentError do
1218
- @agent.set_proxy 'www.example.com', 'nonexistent service', 'joe', 'lol'
1219
- end
1220
-
1221
- assert_equal 'invalid value for port: "nonexistent service"', e.message
1222
- end
1223
-
1224
- end
1225
-