mechanize 2.14.0 → 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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +27 -1
- data/README.md +7 -0
- data/SECURITY.md +11 -0
- data/lib/mechanize/directory_saver.rb +2 -1
- data/lib/mechanize/file_saver.rb +2 -0
- data/lib/mechanize/http/agent.rb +83 -29
- data/lib/mechanize/parser.rb +33 -3
- data/lib/mechanize/test_case.rb +2 -9
- data/lib/mechanize/version.rb +1 -1
- data/lib/mechanize.rb +12 -2
- data/test/htdocs/frame_test.html +8 -6
- data/test/htdocs/relative/tc_relative_links.html +1 -1
- metadata +7 -174
- data/.autotest +0 -6
- data/.github/dependabot.yml +0 -11
- data/.github/workflows/ci.yml +0 -43
- data/.github/workflows/upstream.yml +0 -51
- data/.gitignore +0 -15
- data/.yardopts +0 -8
- data/Gemfile +0 -12
- data/Rakefile +0 -56
- data/examples/flickr_upload.rb +0 -22
- data/examples/latest_user_agents.rb +0 -100
- data/examples/mech-dump.rb +0 -5
- data/examples/proxy_req.rb +0 -7
- data/examples/rubygems.rb +0 -23
- data/examples/spider.rb +0 -22
- data/examples/wikipedia_links_to_philosophy.rb +0 -158
- data/mechanize.gemspec +0 -74
- data/test/data/htpasswd +0 -1
- data/test/data/server.crt +0 -16
- data/test/data/server.csr +0 -12
- data/test/data/server.key +0 -15
- data/test/data/server.pem +0 -15
- data/test/test_mechanize.rb +0 -1382
- data/test/test_mechanize_cookie.rb +0 -559
- data/test/test_mechanize_cookie_jar.rb +0 -615
- data/test/test_mechanize_directory_saver.rb +0 -60
- data/test/test_mechanize_download.rb +0 -102
- data/test/test_mechanize_element_not_found_error.rb +0 -16
- data/test/test_mechanize_file.rb +0 -118
- data/test/test_mechanize_file_connection.rb +0 -40
- data/test/test_mechanize_file_request.rb +0 -26
- data/test/test_mechanize_file_response.rb +0 -48
- data/test/test_mechanize_file_saver.rb +0 -22
- data/test/test_mechanize_form.rb +0 -1025
- data/test/test_mechanize_form_check_box.rb +0 -49
- data/test/test_mechanize_form_encoding.rb +0 -110
- data/test/test_mechanize_form_field.rb +0 -78
- data/test/test_mechanize_form_file_upload.rb +0 -21
- data/test/test_mechanize_form_image_button.rb +0 -13
- data/test/test_mechanize_form_keygen.rb +0 -34
- data/test/test_mechanize_form_multi_select_list.rb +0 -98
- data/test/test_mechanize_form_option.rb +0 -60
- data/test/test_mechanize_form_radio_button.rb +0 -96
- data/test/test_mechanize_form_select_list.rb +0 -81
- data/test/test_mechanize_form_textarea.rb +0 -53
- data/test/test_mechanize_headers.rb +0 -36
- data/test/test_mechanize_history.rb +0 -104
- data/test/test_mechanize_http_agent.rb +0 -1915
- data/test/test_mechanize_http_auth_challenge.rb +0 -64
- data/test/test_mechanize_http_auth_realm.rb +0 -56
- data/test/test_mechanize_http_auth_store.rb +0 -233
- data/test/test_mechanize_http_content_disposition_parser.rb +0 -167
- data/test/test_mechanize_http_www_authenticate_parser.rb +0 -204
- data/test/test_mechanize_image.rb +0 -9
- data/test/test_mechanize_link.rb +0 -171
- data/test/test_mechanize_page.rb +0 -295
- data/test/test_mechanize_page_encoding.rb +0 -215
- data/test/test_mechanize_page_frame.rb +0 -17
- data/test/test_mechanize_page_image.rb +0 -191
- data/test/test_mechanize_page_link.rb +0 -377
- data/test/test_mechanize_page_meta_refresh.rb +0 -151
- data/test/test_mechanize_parser.rb +0 -316
- data/test/test_mechanize_pluggable_parser.rb +0 -68
- data/test/test_mechanize_redirect_limit_reached_error.rb +0 -25
- data/test/test_mechanize_redirect_not_get_or_head_error.rb +0 -15
- data/test/test_mechanize_response_read_error.rb +0 -29
- data/test/test_mechanize_subclass.rb +0 -23
- data/test/test_mechanize_util.rb +0 -144
- data/test/test_mechanize_xml_file.rb +0 -30
- 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
|
-
|