mechanize 2.14.1 → 2.14.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 (77) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -1
  3. data/lib/mechanize/directory_saver.rb +2 -1
  4. data/lib/mechanize/file_saver.rb +2 -0
  5. data/lib/mechanize/parser.rb +33 -3
  6. data/lib/mechanize/test_case.rb +2 -9
  7. data/lib/mechanize/version.rb +1 -1
  8. metadata +3 -172
  9. data/.autotest +0 -6
  10. data/.github/dependabot.yml +0 -11
  11. data/.github/workflows/ci.yml +0 -43
  12. data/.github/workflows/upstream.yml +0 -51
  13. data/.gitignore +0 -15
  14. data/.yardopts +0 -8
  15. data/Gemfile +0 -12
  16. data/Rakefile +0 -56
  17. data/examples/flickr_upload.rb +0 -22
  18. data/examples/latest_user_agents.rb +0 -100
  19. data/examples/mech-dump.rb +0 -5
  20. data/examples/proxy_req.rb +0 -7
  21. data/examples/rubygems.rb +0 -23
  22. data/examples/spider.rb +0 -22
  23. data/examples/wikipedia_links_to_philosophy.rb +0 -158
  24. data/mechanize.gemspec +0 -74
  25. data/test/data/htpasswd +0 -1
  26. data/test/data/server.crt +0 -16
  27. data/test/data/server.csr +0 -12
  28. data/test/data/server.key +0 -15
  29. data/test/data/server.pem +0 -15
  30. data/test/test_mechanize.rb +0 -1382
  31. data/test/test_mechanize_cookie.rb +0 -559
  32. data/test/test_mechanize_cookie_jar.rb +0 -615
  33. data/test/test_mechanize_directory_saver.rb +0 -60
  34. data/test/test_mechanize_download.rb +0 -102
  35. data/test/test_mechanize_element_not_found_error.rb +0 -16
  36. data/test/test_mechanize_file.rb +0 -118
  37. data/test/test_mechanize_file_connection.rb +0 -40
  38. data/test/test_mechanize_file_request.rb +0 -26
  39. data/test/test_mechanize_file_response.rb +0 -48
  40. data/test/test_mechanize_file_saver.rb +0 -22
  41. data/test/test_mechanize_form.rb +0 -1025
  42. data/test/test_mechanize_form_check_box.rb +0 -49
  43. data/test/test_mechanize_form_encoding.rb +0 -110
  44. data/test/test_mechanize_form_field.rb +0 -78
  45. data/test/test_mechanize_form_file_upload.rb +0 -21
  46. data/test/test_mechanize_form_image_button.rb +0 -13
  47. data/test/test_mechanize_form_keygen.rb +0 -34
  48. data/test/test_mechanize_form_multi_select_list.rb +0 -98
  49. data/test/test_mechanize_form_option.rb +0 -60
  50. data/test/test_mechanize_form_radio_button.rb +0 -96
  51. data/test/test_mechanize_form_select_list.rb +0 -81
  52. data/test/test_mechanize_form_textarea.rb +0 -53
  53. data/test/test_mechanize_headers.rb +0 -36
  54. data/test/test_mechanize_history.rb +0 -104
  55. data/test/test_mechanize_http_agent.rb +0 -2145
  56. data/test/test_mechanize_http_auth_challenge.rb +0 -64
  57. data/test/test_mechanize_http_auth_realm.rb +0 -56
  58. data/test/test_mechanize_http_auth_store.rb +0 -233
  59. data/test/test_mechanize_http_content_disposition_parser.rb +0 -167
  60. data/test/test_mechanize_http_www_authenticate_parser.rb +0 -204
  61. data/test/test_mechanize_image.rb +0 -9
  62. data/test/test_mechanize_link.rb +0 -171
  63. data/test/test_mechanize_page.rb +0 -295
  64. data/test/test_mechanize_page_encoding.rb +0 -215
  65. data/test/test_mechanize_page_frame.rb +0 -17
  66. data/test/test_mechanize_page_image.rb +0 -191
  67. data/test/test_mechanize_page_link.rb +0 -377
  68. data/test/test_mechanize_page_meta_refresh.rb +0 -151
  69. data/test/test_mechanize_parser.rb +0 -316
  70. data/test/test_mechanize_pluggable_parser.rb +0 -68
  71. data/test/test_mechanize_redirect_limit_reached_error.rb +0 -25
  72. data/test/test_mechanize_redirect_not_get_or_head_error.rb +0 -15
  73. data/test/test_mechanize_response_read_error.rb +0 -29
  74. data/test/test_mechanize_subclass.rb +0 -23
  75. data/test/test_mechanize_util.rb +0 -144
  76. data/test/test_mechanize_xml_file.rb +0 -30
  77. data/test/test_multi_select.rb +0 -120
@@ -1,215 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- # frozen_string_literal: true
3
- require 'mechanize/test_case'
4
-
5
- # tests for Page encoding and charset and parsing
6
-
7
- class TestMechanizePageEncoding < Mechanize::TestCase
8
-
9
- MECH_ASCII_ENCODING = 'US-ASCII'
10
-
11
- def setup
12
- super
13
-
14
- @uri = URI('http://localhost/')
15
- @response_headers = { 'content-type' => 'text/html' }
16
- @body = +'<title>hi</title>'
17
- end
18
-
19
- def util_page body = @body, headers = @response_headers
20
- Mechanize::Page.new @uri, headers, body && body.force_encoding(Encoding::BINARY), 200, @mech
21
- end
22
-
23
- def test_page_charset
24
- charset = Mechanize::Page.charset 'text/html;charset=vAlue'
25
- assert_equal 'vAlue', charset
26
-
27
- charset = Mechanize::Page.charset 'text/html;charset=vaLue, text/html'
28
- assert_equal 'vaLue', charset
29
-
30
- charset = Mechanize::Page.charset 'text/html ; charset = valUe, text/html'
31
- assert_equal 'valUe', charset
32
- end
33
-
34
- def test_page_charset_upcase
35
- charset = Mechanize::Page.charset 'TEXT/HTML;CHARSET=UTF-8'
36
- assert_equal 'UTF-8', charset
37
- end
38
-
39
- def test_page_charset_semicolon
40
- charset = Mechanize::Page.charset 'text/html;charset=UTF-8;'
41
- assert_equal 'UTF-8', charset
42
- end
43
-
44
- def test_page_charset_no_chaset_token
45
- charset = Mechanize::Page.charset 'text/html'
46
- assert_nil charset
47
- end
48
-
49
- def test_page_charset_returns_nil_when_charset_says_none
50
- charset = Mechanize::Page.charset 'text/html;charset=none'
51
-
52
- assert_nil charset
53
- end
54
-
55
- def test_page_charset_multiple
56
- charset = Mechanize::Page.charset 'text/html;charset=111;charset=222'
57
-
58
- assert_equal '111', charset
59
- end
60
-
61
- def test_page_response_header_charset
62
- headers = { 'content-type' => 'text/html;charset=HEADER' }
63
- charsets = Mechanize::Page.response_header_charset(headers)
64
-
65
- assert_equal ['HEADER'], charsets
66
- end
67
-
68
- def test_page_response_header_charset_no_token
69
- headers = {'content-type' => 'text/html'}
70
- charsets = Mechanize::Page.response_header_charset(headers)
71
-
72
- assert_equal [], charsets
73
-
74
- headers = {'X-My-Header' => 'hello'}
75
- charsets = Mechanize::Page.response_header_charset(headers)
76
-
77
- assert_equal [], charsets
78
- end
79
-
80
- def test_page_response_header_charset_wrong_header
81
- headers = { 'x-content-type' => 'text/html;charset=bogus' }
82
- charsets = Mechanize::Page.response_header_charset(headers)
83
-
84
- assert_equal [], charsets
85
- end
86
-
87
- def test_response_header_charset
88
- page = util_page nil, {'content-type' => 'text/html;charset=HEADER'}
89
-
90
- assert_equal ['HEADER'], page.response_header_charset
91
- end
92
-
93
- def test_page_meta_charset
94
- body = '<meta http-equiv="content-type" content="text/html;charset=META">'
95
- charsets = Mechanize::Page.meta_charset(body)
96
-
97
- assert_equal ['META'], charsets
98
- end
99
-
100
- def test_page_meta_charset_is_empty_when_no_charset_meta
101
- body = '<meta http-equiv="refresh" content="5; url=index.html">'
102
- charsets = Mechanize::Page.meta_charset(body)
103
- assert_equal [], charsets
104
- end
105
-
106
- def test_page_meta_charset_no_content
107
- body = '<meta http-equiv="content-type">'
108
-
109
- charsets = Mechanize::Page.meta_charset(body)
110
-
111
- assert_empty charsets
112
- end
113
-
114
- # Test to fix issue: https://github.com/sparklemotion/mechanize/issues/143
115
- def test_page_meta_charset_handles_whitespace
116
- body = '<meta http-equiv = "Content-Type" content = "text/html; charset=iso-8859-1">'
117
- charsets = Mechanize::Page.meta_charset(body)
118
- assert_equal ["iso-8859-1"], charsets
119
- end
120
-
121
- def test_meta_charset
122
- body = +'<meta http-equiv="content-type" content="text/html;charset=META">'
123
- page = util_page body
124
-
125
- assert_equal ['META'], page.meta_charset
126
- end
127
-
128
- def test_detected_encoding
129
- page = util_page
130
-
131
- assert_equal MECH_ASCII_ENCODING, page.detected_encoding
132
- end
133
-
134
- def test_encodings
135
- response = {'content-type' => 'text/html;charset=HEADER'}
136
- body = +'<meta http-equiv="content-type" content="text/html;charset=META">'
137
- @mech.default_encoding = 'DEFAULT'
138
- page = util_page body, response
139
-
140
- assert_equal true, page.encodings.include?('HEADER')
141
- assert_equal true, page.encodings.include?('META')
142
- assert_equal true, page.encodings.include?(MECH_ASCII_ENCODING)
143
- assert_equal true, page.encodings.include?('DEFAULT')
144
- end
145
-
146
- def test_parser_with_default_encoding
147
- # pre test
148
- assert_equal false, util_page.encodings.include?('Windows-1252')
149
-
150
- @mech.default_encoding = 'Windows-1252'
151
- page = util_page
152
-
153
- assert_equal true, page.encodings.include?('Windows-1252')
154
- end
155
-
156
- def test_parser_force_default_encoding
157
- @mech.default_encoding = 'Windows-1252'
158
- @mech.force_default_encoding = true
159
- page = util_page
160
-
161
- assert page.encodings.include? 'Windows-1252'
162
- end
163
-
164
- def test_parser_encoding_equals_overwrites_force_default_encoding
165
- @mech.default_encoding = 'Windows-1252'
166
- @mech.force_default_encoding = true
167
- page = util_page
168
-
169
- assert_equal 'Windows-1252', page.encoding
170
-
171
- page.encoding = 'ISO-8859-2'
172
-
173
- assert_equal 'ISO-8859-2', page.encoding
174
- end
175
-
176
- def test_parser_encoding_when_searching_elements
177
- skip "Encoding not implemented" unless have_encoding?
178
-
179
- body = +'<span id="latin1">hi</span>'
180
- page = util_page body, 'content-type' => 'text/html,charset=ISO-8859-1'
181
-
182
- result = page.search('#latin1')
183
-
184
- assert_equal Encoding::UTF_8, result.text.encoding
185
- end
186
-
187
- def test_parser_error_message_containing_encoding_errors
188
- skip if RUBY_ENGINE == 'jruby' # this is a libxml2-specific condition
189
-
190
- # https://github.com/sparklemotion/mechanize/issues/553
191
- body = +<<~EOF
192
- <html>
193
- <body>
194
- <!--
195
- ## メモ
196
- 処理の一般化, 二重ループ, 多重ループ
197
- wzxhzdk:25
198
- -->
199
- EOF
200
- page = util_page body
201
-
202
- # this should not raise an "invalid byte sequence in UTF-8" error while processing parsing errors
203
- page.search("body")
204
-
205
- # let's assert on the setup: a libxml2-returned parsing error itself contains an invalid character
206
- # note that this problem only appears in libxml <= 2.9.10
207
- error = page.parser.errors.find { |e| e.message.include?("Comment not terminated") }
208
- if error
209
- exception = assert_raises(ArgumentError) do
210
- error.message =~ /any regex just to trigger encoding error/
211
- end
212
- assert_includes(exception.message, "invalid byte sequence in UTF-8")
213
- end
214
- end
215
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'mechanize/test_case'
3
-
4
- class TestMechanizePageFrame < Mechanize::TestCase
5
-
6
- def test_content
7
- page = page 'http://example/referer'
8
- frame = node 'frame', 'name' => 'frame1', 'src' => 'http://example/'
9
- frame = Mechanize::Page::Frame.new frame, @mech, page
10
-
11
- frame.content
12
-
13
- assert_equal 'http://example/referer', requests.first['Referer']
14
- end
15
-
16
- end
17
-
@@ -1,191 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'mechanize/test_case'
3
-
4
- class TestMechanizePageImage < Mechanize::TestCase
5
-
6
- def setup
7
- super
8
-
9
- @uri = URI 'http://example/'
10
- @src = (@uri + 'a.jpg').to_s
11
-
12
- @empty_page = Mechanize::Page.new(@uri, nil, '', 200, @mech)
13
- end
14
-
15
- def img attributes
16
- img = node 'img', attributes
17
-
18
- Mechanize::Page::Image.new img, @empty_page
19
- end
20
-
21
- def test_initialize
22
- image = img("src" => "a.jpg", "alt" => "alt", "width" => "100",
23
- "height" => "200", "title" => "title", "id" => "id",
24
- "class" => "class")
25
-
26
- assert_equal "a.jpg", image.src
27
- assert_equal "alt", image.alt
28
- assert_equal "100", image.width
29
- assert_equal "200", image.height
30
- assert_equal "title", image.title
31
- assert_equal "id", image.dom_id
32
- assert_equal "class", image.dom_class
33
- end
34
-
35
- def test_initialize_no_attributes
36
- image = img({})
37
-
38
- assert_nil image.src
39
- assert_nil image.alt
40
- assert_nil image.width
41
- assert_nil image.height
42
- assert_nil image.title
43
- assert_nil image.dom_id
44
- assert_nil image.dom_class
45
- end
46
-
47
- def test_caption
48
- assert_equal "", img("src" => @src).caption
49
- assert_equal "alt", img("src" => @src, "alt" => "alt").caption
50
- assert_equal "title", img("src" => @src, "title" => "title").caption
51
- assert_equal "title", img("src" => @src,
52
- "alt" => "alt", "title" => "title").caption
53
- end
54
-
55
- def test_url
56
- assert_equal ".jpg", img('src' => @src).extname
57
- assert_equal "http://example/a.jpg", img('src' => @src).url.to_s
58
- assert_equal "http://example/a%20.jpg", img('src' => 'http://example/a .jpg' ).url.to_s
59
- end
60
-
61
- def test_url_base
62
- page = html_page <<-BODY
63
- <head>
64
- <base href="http://other.example/">
65
- </head>
66
- <body>
67
- <img src="a.jpg">
68
- </body>
69
- BODY
70
-
71
- assert_equal "http://other.example/a.jpg", page.images.first.url
72
- end
73
-
74
- def test_extname
75
- assert_equal ".jpg", img("src" => "a.jpg").extname
76
- assert_equal ".PNG", img("src" => "a.PNG").extname
77
- assert_equal ".aaa", img("src" => "unknown.aaa").extname
78
- assert_equal "", img("src" => "nosuffiximage").extname
79
-
80
- assert_nil img("width" => "1", "height" => "1").extname
81
-
82
- assert_equal ".jpg", img("src" => "a.jpg?cache_buster").extname
83
- end
84
-
85
- def test_mime_type
86
- assert_equal "image/jpeg", img("src" => "a.jpg").mime_type
87
- assert_equal "image/png", img("src" => "a.PNG").mime_type
88
-
89
- assert_nil img("src" => "unknown.aaa").mime_type
90
- assert_nil img("src" => "nosuffiximage").mime_type
91
- end
92
-
93
- def test_fetch
94
- image = img "src" => "http://localhost/button.jpg"
95
-
96
- fetched = image.fetch
97
-
98
- assert_equal fetched, @mech.page
99
- assert_equal "http://localhost/button.jpg", fetched.uri.to_s
100
- assert_equal "http://example/", requests.first['Referer']
101
- assert @mech.visited? "http://localhost/button.jpg"
102
- end
103
-
104
- def test_fetch_referer_http_page_rel_src
105
- # | rel-src http-src https-src
106
- # http page | *page* page page
107
- # https page | page empty empty
108
- page = html_page '<img src="./button.jpg">'
109
- page.images.first.fetch
110
-
111
- assert_equal 'http', page.uri.scheme
112
- assert_equal true, page.images.first.relative?
113
- assert_equal "http://example/", requests.first['Referer']
114
- end
115
-
116
- def test_fetch_referer_http_page_abs_src
117
- # | rel-src http-src https-src
118
- # http page | page *page* *page*
119
- # https page | page empty empty
120
- page = html_page '<img src="http://localhost/button.jpg">'
121
- page.images.first.fetch
122
-
123
- assert_equal 'http', page.uri.scheme
124
- assert_equal false, page.images.first.relative?
125
- assert_equal "http://example/", requests.first['Referer']
126
- end
127
-
128
- def test_fetch_referer_https_page_rel_src
129
- # | rel-src http-src https-src
130
- # http page | page page page
131
- # https page | *page* empty empty
132
- page = html_page '<img src="./button.jpg">'
133
- page.uri = URI 'https://example/'
134
- page.images.first.fetch
135
-
136
- assert_equal 'https', page.uri.scheme
137
- assert_equal true, page.images.first.relative?
138
- assert_equal "https://example/", requests.first['Referer']
139
- end
140
-
141
- def test_fetch_referer_https_page_abs_src
142
- # | rel-src http-src https-src
143
- # http page | page page page
144
- # https page | page *empty* *empty*
145
- page = html_page '<img src="http://localhost/button.jpg">'
146
- page.uri = URI 'https://example/'
147
- page.images.first.fetch
148
-
149
- assert_equal 'https', page.uri.scheme
150
- assert_equal false, page.images.first.relative?
151
- assert_nil requests.first['Referer']
152
- end
153
-
154
- def test_image_referer_http_page_abs_src
155
- page = html_page '<img src="http://localhost/button.jpg">'
156
-
157
- assert_equal 'http', page.uri.scheme
158
- assert_equal @uri, page.images.first.image_referer.uri
159
- end
160
-
161
- def test_image_referer_http_page_rel_src
162
- page = html_page '<img src="./button.jpg">'
163
-
164
- assert_equal 'http', page.uri.scheme
165
- assert_equal @uri, page.images.first.image_referer.uri
166
- end
167
-
168
- def test_image_referer_https_page_abs_src
169
- page = html_page '<img src="http://localhost/button.jpg">'
170
- page.uri = URI 'https://example/'
171
-
172
- assert_equal 'https', page.uri.scheme
173
- assert_nil page.images.first.image_referer.uri
174
- end
175
-
176
- def test_image_referer_https_page_rel_src
177
- page = html_page '<img src="./button.jpg">'
178
- page.uri = URI 'https://example/'
179
-
180
- assert_equal 'https', page.uri.scheme
181
- assert_equal URI('https://example/'), page.images.first.image_referer.uri
182
- end
183
-
184
- def test_no_src_attribute
185
- page = html_page '<img width="10" height="10" class="foo" />'
186
- page.uri = URI 'https://example/'
187
- assert_equal URI('https://example/'), page.images.first.url
188
- end
189
-
190
- end
191
-