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.
- metadata +222 -167
- data/Rakefile +0 -49
- data/lib/mechanize/content_type_error.rb +0 -13
- data/lib/mechanize/cookie.rb +0 -232
- data/lib/mechanize/cookie_jar.rb +0 -194
- data/lib/mechanize/download.rb +0 -59
- data/lib/mechanize/element_matcher.rb +0 -36
- data/lib/mechanize/file.rb +0 -65
- data/lib/mechanize/file_connection.rb +0 -17
- data/lib/mechanize/file_request.rb +0 -26
- data/lib/mechanize/file_response.rb +0 -74
- data/lib/mechanize/file_saver.rb +0 -39
- data/lib/mechanize/form/button.rb +0 -6
- data/lib/mechanize/form/check_box.rb +0 -12
- data/lib/mechanize/form/field.rb +0 -54
- data/lib/mechanize/form/file_upload.rb +0 -21
- data/lib/mechanize/form/hidden.rb +0 -3
- data/lib/mechanize/form/image_button.rb +0 -19
- data/lib/mechanize/form/keygen.rb +0 -34
- data/lib/mechanize/form/multi_select_list.rb +0 -94
- data/lib/mechanize/form/option.rb +0 -50
- data/lib/mechanize/form/radio_button.rb +0 -55
- data/lib/mechanize/form/reset.rb +0 -3
- data/lib/mechanize/form/select_list.rb +0 -44
- data/lib/mechanize/form/submit.rb +0 -3
- data/lib/mechanize/form/text.rb +0 -3
- data/lib/mechanize/form/textarea.rb +0 -3
- data/lib/mechanize/form.rb +0 -543
- data/lib/mechanize/headers.rb +0 -23
- data/lib/mechanize/history.rb +0 -82
- data/lib/mechanize/http/agent.rb +0 -1004
- data/lib/mechanize/http/auth_challenge.rb +0 -59
- data/lib/mechanize/http/auth_realm.rb +0 -31
- data/lib/mechanize/http/content_disposition_parser.rb +0 -188
- data/lib/mechanize/http/www_authenticate_parser.rb +0 -155
- data/lib/mechanize/http.rb +0 -8
- data/lib/mechanize/monkey_patch.rb +0 -16
- data/lib/mechanize/page/base.rb +0 -7
- data/lib/mechanize/page/frame.rb +0 -27
- data/lib/mechanize/page/image.rb +0 -30
- data/lib/mechanize/page/label.rb +0 -20
- data/lib/mechanize/page/link.rb +0 -98
- data/lib/mechanize/page/meta_refresh.rb +0 -68
- data/lib/mechanize/page.rb +0 -440
- data/lib/mechanize/parser.rb +0 -173
- data/lib/mechanize/pluggable_parsers.rb +0 -144
- data/lib/mechanize/redirect_limit_reached_error.rb +0 -19
- data/lib/mechanize/redirect_not_get_or_head_error.rb +0 -21
- data/lib/mechanize/response_code_error.rb +0 -21
- data/lib/mechanize/response_read_error.rb +0 -27
- data/lib/mechanize/robots_disallowed_error.rb +0 -28
- data/lib/mechanize/test_case.rb +0 -663
- data/lib/mechanize/unauthorized_error.rb +0 -3
- data/lib/mechanize/unsupported_scheme_error.rb +0 -6
- data/lib/mechanize/util.rb +0 -101
- data/lib/mechanize.rb +0 -1079
- 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/htdocs/alt_text.html +0 -10
- data/test/htdocs/bad_form_test.html +0 -9
- data/test/htdocs/button.jpg +0 -0
- data/test/htdocs/canonical_uri.html +0 -9
- data/test/htdocs/dir with spaces/foo.html +0 -1
- data/test/htdocs/empty_form.html +0 -6
- data/test/htdocs/file_upload.html +0 -26
- data/test/htdocs/find_link.html +0 -41
- data/test/htdocs/form_multi_select.html +0 -16
- data/test/htdocs/form_multival.html +0 -37
- data/test/htdocs/form_no_action.html +0 -18
- data/test/htdocs/form_no_input_name.html +0 -16
- data/test/htdocs/form_order_test.html +0 -11
- data/test/htdocs/form_select.html +0 -16
- data/test/htdocs/form_set_fields.html +0 -14
- data/test/htdocs/form_test.html +0 -188
- data/test/htdocs/frame_referer_test.html +0 -10
- data/test/htdocs/frame_test.html +0 -30
- data/test/htdocs/google.html +0 -13
- data/test/htdocs/index.html +0 -6
- data/test/htdocs/link with space.html +0 -5
- data/test/htdocs/meta_cookie.html +0 -11
- data/test/htdocs/no_title_test.html +0 -6
- data/test/htdocs/noindex.html +0 -9
- data/test/htdocs/rails_3_encoding_hack_form_test.html +0 -27
- data/test/htdocs/relative/tc_relative_links.html +0 -21
- data/test/htdocs/robots.html +0 -8
- data/test/htdocs/robots.txt +0 -2
- data/test/htdocs/tc_bad_charset.html +0 -9
- data/test/htdocs/tc_bad_links.html +0 -5
- data/test/htdocs/tc_base_link.html +0 -8
- data/test/htdocs/tc_blank_form.html +0 -11
- data/test/htdocs/tc_charset.html +0 -6
- data/test/htdocs/tc_checkboxes.html +0 -19
- data/test/htdocs/tc_encoded_links.html +0 -5
- data/test/htdocs/tc_field_precedence.html +0 -11
- data/test/htdocs/tc_follow_meta.html +0 -8
- data/test/htdocs/tc_form_action.html +0 -48
- data/test/htdocs/tc_links.html +0 -19
- data/test/htdocs/tc_meta_in_body.html +0 -9
- data/test/htdocs/tc_pretty_print.html +0 -17
- data/test/htdocs/tc_referer.html +0 -16
- data/test/htdocs/tc_relative_links.html +0 -19
- data/test/htdocs/tc_textarea.html +0 -23
- data/test/htdocs/test_click.html +0 -11
- data/test/htdocs/unusual______.html +0 -5
- data/test/test_mechanize.rb +0 -1164
- data/test/test_mechanize_cookie.rb +0 -451
- data/test/test_mechanize_cookie_jar.rb +0 -483
- data/test/test_mechanize_download.rb +0 -43
- data/test/test_mechanize_file.rb +0 -61
- data/test/test_mechanize_file_connection.rb +0 -21
- data/test/test_mechanize_file_request.rb +0 -19
- data/test/test_mechanize_file_saver.rb +0 -21
- data/test/test_mechanize_form.rb +0 -875
- data/test/test_mechanize_form_check_box.rb +0 -38
- data/test/test_mechanize_form_encoding.rb +0 -114
- data/test/test_mechanize_form_field.rb +0 -63
- data/test/test_mechanize_form_file_upload.rb +0 -20
- data/test/test_mechanize_form_image_button.rb +0 -12
- data/test/test_mechanize_form_keygen.rb +0 -32
- data/test/test_mechanize_form_multi_select_list.rb +0 -84
- data/test/test_mechanize_form_option.rb +0 -55
- data/test/test_mechanize_form_radio_button.rb +0 -78
- data/test/test_mechanize_form_select_list.rb +0 -76
- data/test/test_mechanize_form_textarea.rb +0 -52
- data/test/test_mechanize_headers.rb +0 -35
- data/test/test_mechanize_history.rb +0 -103
- data/test/test_mechanize_http_agent.rb +0 -1225
- data/test/test_mechanize_http_auth_challenge.rb +0 -39
- data/test/test_mechanize_http_auth_realm.rb +0 -49
- data/test/test_mechanize_http_content_disposition_parser.rb +0 -118
- data/test/test_mechanize_http_www_authenticate_parser.rb +0 -146
- data/test/test_mechanize_link.rb +0 -80
- data/test/test_mechanize_page.rb +0 -118
- data/test/test_mechanize_page_encoding.rb +0 -182
- data/test/test_mechanize_page_frame.rb +0 -16
- data/test/test_mechanize_page_link.rb +0 -390
- data/test/test_mechanize_page_meta_refresh.rb +0 -127
- data/test/test_mechanize_parser.rb +0 -289
- data/test/test_mechanize_pluggable_parser.rb +0 -52
- data/test/test_mechanize_redirect_limit_reached_error.rb +0 -24
- data/test/test_mechanize_redirect_not_get_or_head_error.rb +0 -14
- data/test/test_mechanize_subclass.rb +0 -22
- data/test/test_mechanize_util.rb +0 -103
- data/test/test_multi_select.rb +0 -119
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'mechanize/test_case'
|
2
|
-
|
3
|
-
class TestMechanizeHttpAuthChallenge < Mechanize::TestCase
|
4
|
-
|
5
|
-
def setup
|
6
|
-
super
|
7
|
-
|
8
|
-
@uri = URI 'http://example/'
|
9
|
-
@AR = Mechanize::HTTP::AuthRealm
|
10
|
-
@AC = Mechanize::HTTP::AuthChallenge
|
11
|
-
@challenge = @AC.new 'Digest', 'realm' => 'r'
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_realm_basic
|
15
|
-
@challenge.scheme = 'Basic'
|
16
|
-
|
17
|
-
expected = @AR.new 'Basic', @uri, 'r'
|
18
|
-
|
19
|
-
assert_equal expected, @challenge.realm(@uri + '/foo')
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_realm_digest
|
23
|
-
expected = @AR.new 'Digest', @uri, 'r'
|
24
|
-
|
25
|
-
assert_equal expected, @challenge.realm(@uri + '/foo')
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_realm_unknown
|
29
|
-
@challenge.scheme = 'Unknown'
|
30
|
-
|
31
|
-
e = assert_raises Mechanize::Error do
|
32
|
-
@challenge.realm(@uri + '/foo')
|
33
|
-
end
|
34
|
-
|
35
|
-
assert_equal 'unknown HTTP authentication scheme Unknown', e.message
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'mechanize/test_case'
|
2
|
-
|
3
|
-
class TestMechanizeHttpAuthRealm < Mechanize::TestCase
|
4
|
-
|
5
|
-
def setup
|
6
|
-
super
|
7
|
-
|
8
|
-
@uri = URI 'http://example/'
|
9
|
-
@AR = Mechanize::HTTP::AuthRealm
|
10
|
-
@realm = @AR.new 'Digest', @uri, 'r'
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_initialize
|
14
|
-
assert_equal 'r', @realm.realm
|
15
|
-
|
16
|
-
realm = @AR.new 'Digest', @uri, 'R'
|
17
|
-
assert_equal 'r', realm.realm
|
18
|
-
|
19
|
-
realm = @AR.new 'Digest', @uri, nil
|
20
|
-
assert_nil realm.realm
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_equals2
|
24
|
-
other = @realm.dup
|
25
|
-
assert_equal @realm, other
|
26
|
-
|
27
|
-
other = @AR.new 'Basic', @uri, 'r'
|
28
|
-
refute_equal @realm, other
|
29
|
-
|
30
|
-
other = @AR.new 'Digest', URI('http://other.example/'), 'r'
|
31
|
-
refute_equal @realm, other
|
32
|
-
|
33
|
-
other = @AR.new 'Digest', @uri, 's'
|
34
|
-
refute_equal @realm, other
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_hash
|
38
|
-
h = {}
|
39
|
-
h[@realm] = 1
|
40
|
-
|
41
|
-
other = @realm.dup
|
42
|
-
assert_equal 1, h[other]
|
43
|
-
|
44
|
-
other = @AR.new 'Basic', @uri, 'r'
|
45
|
-
assert_nil h[other]
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
|
@@ -1,118 +0,0 @@
|
|
1
|
-
require 'mechanize/test_case'
|
2
|
-
|
3
|
-
class TestMechanizeHttpContentDispositionParser < Mechanize::TestCase
|
4
|
-
|
5
|
-
def setup
|
6
|
-
super
|
7
|
-
|
8
|
-
@parser = Mechanize::HTTP::ContentDispositionParser.new
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_parse
|
12
|
-
now = Time.at Time.now.to_i
|
13
|
-
|
14
|
-
content_disposition = @parser.parse \
|
15
|
-
'attachment;' \
|
16
|
-
'filename=value;' \
|
17
|
-
"creation-date=\"#{now.rfc822}\";" \
|
18
|
-
"modification-date=\"#{(now + 1).rfc822}\";" \
|
19
|
-
"read-date=\"#{(now + 2).rfc822}\";" \
|
20
|
-
'size=5;' \
|
21
|
-
'arbitrary=value'
|
22
|
-
|
23
|
-
assert_equal 'attachment', content_disposition.type
|
24
|
-
assert_equal 'value', content_disposition.filename
|
25
|
-
assert_equal now, content_disposition.creation_date
|
26
|
-
assert_equal((now + 1), content_disposition.modification_date)
|
27
|
-
assert_equal((now + 2), content_disposition.read_date)
|
28
|
-
assert_equal 5, content_disposition.size
|
29
|
-
expected = { 'arbitrary' => 'value' }
|
30
|
-
assert_equal expected, content_disposition.parameters
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_parse_header
|
34
|
-
content_disposition = @parser.parse \
|
35
|
-
'content-disposition: attachment;filename=value', true
|
36
|
-
|
37
|
-
assert_equal 'attachment', content_disposition.type
|
38
|
-
assert_equal 'value', content_disposition.filename
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_parse_no_type
|
42
|
-
content_disposition = @parser.parse 'filename=value'
|
43
|
-
|
44
|
-
assert_nil content_disposition.type
|
45
|
-
assert_equal 'value', content_disposition.filename
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_parse_semicolons
|
49
|
-
content_disposition = @parser.parse 'attachment;;filename=value'
|
50
|
-
|
51
|
-
assert_equal 'attachment', content_disposition.type
|
52
|
-
assert_equal 'value', content_disposition.filename
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_rfc_2045_quoted_string
|
56
|
-
@parser.scanner = StringScanner.new '"text"'
|
57
|
-
|
58
|
-
string = @parser.rfc_2045_quoted_string
|
59
|
-
|
60
|
-
assert_equal 'text', string
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_rfc_2045_quoted_string_bad
|
64
|
-
@parser.scanner = StringScanner.new '"text'
|
65
|
-
|
66
|
-
assert_nil @parser.rfc_2045_quoted_string
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_rfc_2045_quoted_string_crlf
|
70
|
-
@parser.scanner = StringScanner.new "\"multiline\\\r\n\ttext\""
|
71
|
-
|
72
|
-
string = @parser.rfc_2045_quoted_string
|
73
|
-
|
74
|
-
assert_equal "multiline\r\n\ttext", string
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_rfc_2045_quoted_string_escape
|
78
|
-
@parser.scanner = StringScanner.new "\"escape\\ text\""
|
79
|
-
|
80
|
-
string = @parser.rfc_2045_quoted_string
|
81
|
-
|
82
|
-
assert_equal 'escape text', string
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_rfc_2045_quoted_string_escape_bad
|
86
|
-
@parser.scanner = StringScanner.new '"escape\\'
|
87
|
-
|
88
|
-
string = @parser.rfc_2045_quoted_string
|
89
|
-
|
90
|
-
assert_nil string
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_rfc_2045_quoted_string_folded
|
94
|
-
@parser.scanner = StringScanner.new "\"multiline\r\n\ttext\""
|
95
|
-
|
96
|
-
string = @parser.rfc_2045_quoted_string
|
97
|
-
|
98
|
-
assert_equal 'multiline text', string
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_rfc_2045_quoted_string_quote
|
102
|
-
@parser.scanner = StringScanner.new '"escaped \\" here"'
|
103
|
-
|
104
|
-
string = @parser.rfc_2045_quoted_string
|
105
|
-
|
106
|
-
assert_equal 'escaped " here', string
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_rfc_2045_quoted_string_quote_end
|
110
|
-
@parser.scanner = StringScanner.new '"end \\""'
|
111
|
-
|
112
|
-
string = @parser.rfc_2045_quoted_string
|
113
|
-
|
114
|
-
assert_equal 'end "', string
|
115
|
-
end
|
116
|
-
|
117
|
-
end
|
118
|
-
|
@@ -1,146 +0,0 @@
|
|
1
|
-
require 'mechanize/test_case'
|
2
|
-
|
3
|
-
class TestMechanizeHttpWwwAuthenticateParser < Mechanize::TestCase
|
4
|
-
|
5
|
-
def setup
|
6
|
-
super
|
7
|
-
|
8
|
-
@parser = Mechanize::HTTP::WWWAuthenticateParser.new
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_auth_param
|
12
|
-
@parser.scanner = StringScanner.new 'realm=here'
|
13
|
-
|
14
|
-
param = @parser.auth_param
|
15
|
-
|
16
|
-
assert_equal %w[realm here], param
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_auth_param_bad_no_value
|
20
|
-
@parser.scanner = StringScanner.new 'realm='
|
21
|
-
|
22
|
-
assert_nil @parser.auth_param
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_auth_param_bad_token
|
26
|
-
@parser.scanner = StringScanner.new 'realm'
|
27
|
-
|
28
|
-
assert_nil @parser.auth_param
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_auth_param_bad_value
|
32
|
-
@parser.scanner = StringScanner.new 'realm="this '
|
33
|
-
|
34
|
-
assert_nil @parser.auth_param
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_auth_param_quoted
|
38
|
-
@parser.scanner = StringScanner.new 'realm="this site"'
|
39
|
-
|
40
|
-
param = @parser.auth_param
|
41
|
-
|
42
|
-
assert_equal ['realm', 'this site'], param
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_parse
|
46
|
-
expected = [
|
47
|
-
challenge('Basic', { 'realm' => 'foo' }),
|
48
|
-
]
|
49
|
-
|
50
|
-
assert_equal expected, @parser.parse('Basic realm=foo')
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_parse_multiple
|
54
|
-
expected = [
|
55
|
-
challenge('Basic', { 'realm' => 'foo' }),
|
56
|
-
challenge('Digest', { 'realm' => 'foo' }),
|
57
|
-
]
|
58
|
-
|
59
|
-
assert_equal expected, @parser.parse('Basic realm=foo, Digest realm=foo')
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_parse_multiple_blank
|
63
|
-
expected = [
|
64
|
-
challenge('Basic', { 'realm' => 'foo' }),
|
65
|
-
challenge('Digest', { 'realm' => 'foo' }),
|
66
|
-
]
|
67
|
-
|
68
|
-
assert_equal expected, @parser.parse('Basic realm=foo,, Digest realm=foo')
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_parse_ntlm_init
|
72
|
-
expected = [
|
73
|
-
challenge('NTLM', nil),
|
74
|
-
]
|
75
|
-
|
76
|
-
assert_equal expected, @parser.parse('NTLM')
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_parse_ntlm_type_2_3
|
80
|
-
expected = [
|
81
|
-
challenge('NTLM', 'foo='),
|
82
|
-
]
|
83
|
-
|
84
|
-
assert_equal expected, @parser.parse('NTLM foo=')
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_quoted_string
|
88
|
-
@parser.scanner = StringScanner.new '"text"'
|
89
|
-
|
90
|
-
string = @parser.quoted_string
|
91
|
-
|
92
|
-
assert_equal 'text', string
|
93
|
-
end
|
94
|
-
|
95
|
-
def test_quoted_string_bad
|
96
|
-
@parser.scanner = StringScanner.new '"text'
|
97
|
-
|
98
|
-
assert_nil @parser.quoted_string
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_quoted_string_quote
|
102
|
-
@parser.scanner = StringScanner.new '"escaped \\" here"'
|
103
|
-
|
104
|
-
string = @parser.quoted_string
|
105
|
-
|
106
|
-
assert_equal 'escaped \\" here', string
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_quoted_string_quote_end
|
110
|
-
@parser.scanner = StringScanner.new '"end \""'
|
111
|
-
|
112
|
-
string = @parser.quoted_string
|
113
|
-
|
114
|
-
assert_equal 'end \"', string
|
115
|
-
end
|
116
|
-
|
117
|
-
def test_token
|
118
|
-
@parser.scanner = StringScanner.new 'text'
|
119
|
-
|
120
|
-
string = @parser.token
|
121
|
-
|
122
|
-
assert_equal 'text', string
|
123
|
-
end
|
124
|
-
|
125
|
-
def test_token_space
|
126
|
-
@parser.scanner = StringScanner.new 't ext'
|
127
|
-
|
128
|
-
string = @parser.token
|
129
|
-
|
130
|
-
assert_equal 't', string
|
131
|
-
end
|
132
|
-
|
133
|
-
def test_token_special
|
134
|
-
@parser.scanner = StringScanner.new "t\text"
|
135
|
-
|
136
|
-
string = @parser.token
|
137
|
-
|
138
|
-
assert_equal 't', string
|
139
|
-
end
|
140
|
-
|
141
|
-
def challenge scheme, params
|
142
|
-
Mechanize::HTTP::AuthChallenge.new scheme, params
|
143
|
-
end
|
144
|
-
|
145
|
-
end
|
146
|
-
|
data/test/test_mechanize_link.rb
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
require 'mechanize/test_case'
|
2
|
-
|
3
|
-
class TestMechanizeLink < Mechanize::TestCase
|
4
|
-
|
5
|
-
def test_click
|
6
|
-
page = @mech.get("http://localhost/frame_test.html")
|
7
|
-
link = page.link_with(:text => "Form Test")
|
8
|
-
|
9
|
-
assert_equal('Form Test', link.text)
|
10
|
-
page = link.click
|
11
|
-
assert_equal("http://localhost/form_test.html",
|
12
|
-
@mech.history.last.uri.to_s)
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_click_base
|
16
|
-
page = @mech.get("http://google.com/tc_base_link.html")
|
17
|
-
page = page.links.first.click
|
18
|
-
assert @mech.visited?("http://localhost/index.html")
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_click_unsupported_scheme
|
22
|
-
page = @mech.get("http://google.com/tc_links.html")
|
23
|
-
link = page.link_with(:text => 'javascript link')
|
24
|
-
assert_raises Mechanize::UnsupportedSchemeError do
|
25
|
-
link.click
|
26
|
-
end
|
27
|
-
|
28
|
-
@mech.scheme_handlers['javascript'] = lambda { |my_link, my_page|
|
29
|
-
URI.parse('http://localhost/tc_links.html')
|
30
|
-
}
|
31
|
-
|
32
|
-
link.click
|
33
|
-
|
34
|
-
# HACK no assertion
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_text_alt_text
|
38
|
-
page = @mech.get("http://localhost/alt_text.html")
|
39
|
-
assert_equal(5, page.links.length)
|
40
|
-
assert_equal(1, page.meta_refresh.length)
|
41
|
-
|
42
|
-
assert_equal '', page.meta_refresh.first.text
|
43
|
-
assert_equal 'alt text', page.link_with(:href => 'alt_text.html').text
|
44
|
-
assert_equal '', page.link_with(:href => 'no_alt_text.html').text
|
45
|
-
assert_equal 'no image', page.link_with(:href => 'no_image.html').text
|
46
|
-
assert_equal '', page.link_with(:href => 'no_text.html').text
|
47
|
-
assert_equal '', page.link_with(:href => 'nil_alt_text.html').text
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_uri_escaped
|
51
|
-
doc = Nokogiri::HTML::Document.new
|
52
|
-
|
53
|
-
node = Nokogiri::XML::Node.new('foo', doc)
|
54
|
-
node['href'] = 'http://foo.bar/%20baz'
|
55
|
-
|
56
|
-
link = Mechanize::Page::Link.new(node, nil, nil)
|
57
|
-
|
58
|
-
assert_equal 'http://foo.bar/%20baz', link.uri.to_s
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_uri_no_path
|
62
|
-
page = @mech.get("http://localhost/relative/tc_relative_links.html")
|
63
|
-
page = page.link_with(:text => 'just the query string').click
|
64
|
-
assert_equal('http://localhost/relative/tc_relative_links.html?a=b',
|
65
|
-
page.uri.to_s)
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_uri_weird
|
69
|
-
doc = Nokogiri::HTML::Document.new
|
70
|
-
|
71
|
-
node = Nokogiri::XML::Node.new('foo', doc)
|
72
|
-
node['href'] = 'http://foo.bar/ baz'
|
73
|
-
|
74
|
-
link = Mechanize::Page::Link.new(node, nil, nil)
|
75
|
-
|
76
|
-
assert_equal 'http://foo.bar/%20baz', link.uri.to_s
|
77
|
-
end
|
78
|
-
|
79
|
-
end
|
80
|
-
|
data/test/test_mechanize_page.rb
DELETED
@@ -1,118 +0,0 @@
|
|
1
|
-
require 'mechanize/test_case'
|
2
|
-
|
3
|
-
class TestMechanizePage < Mechanize::TestCase
|
4
|
-
|
5
|
-
def setup
|
6
|
-
super
|
7
|
-
|
8
|
-
@uri = URI 'http://example/'
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_initialize_bad_content_type
|
12
|
-
e = assert_raises Mechanize::ContentTypeError do
|
13
|
-
Mechanize::Page.new(URI('http://example/'),
|
14
|
-
{ 'content-type' => 'text/xml' }, 'hello', '200')
|
15
|
-
end
|
16
|
-
|
17
|
-
assert_equal('text/xml', e.content_type)
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_frames
|
21
|
-
page = html_page <<-BODY
|
22
|
-
<TITLE>A simple frameset document</TITLE>
|
23
|
-
<FRAMESET cols="20%, 80%">
|
24
|
-
<FRAMESET rows="100, 200">
|
25
|
-
<FRAME name="frame1" src="/google.html">
|
26
|
-
<FRAME name="frame2" src="/form_test.html">
|
27
|
-
</FRAMESET>
|
28
|
-
<FRAMESET rows="100, 200">
|
29
|
-
<FRAME name="frame3" src="/file_upload.html">
|
30
|
-
<IFRAME src="http://google.com/" name="frame4"></IFRAME>
|
31
|
-
</FRAMESET>
|
32
|
-
</FRAMESET>
|
33
|
-
BODY
|
34
|
-
|
35
|
-
assert_equal 3, page.frames.size
|
36
|
-
assert_equal "frame1", page.frames[0].name
|
37
|
-
assert_equal "/google.html", page.frames[0].src
|
38
|
-
assert_equal "Google", page.frames[0].content.title
|
39
|
-
|
40
|
-
assert_equal "frame2", page.frames[1].name
|
41
|
-
assert_equal "/form_test.html", page.frames[1].src
|
42
|
-
assert_equal "Page Title", page.frames[1].content.title
|
43
|
-
|
44
|
-
assert_equal "frame3", page.frames[2].name
|
45
|
-
assert_equal "/file_upload.html", page.frames[2].src
|
46
|
-
assert_equal "File Upload Form", page.frames[2].content.title
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_iframes
|
50
|
-
page = html_page <<-BODY
|
51
|
-
<TITLE>A simple frameset document</TITLE>
|
52
|
-
<FRAME name="frame1" src="/google.html">
|
53
|
-
<IFRAME src="/file_upload.html" name="frame4">
|
54
|
-
</IFRAME>
|
55
|
-
BODY
|
56
|
-
|
57
|
-
assert_equal 1, page.iframes.size
|
58
|
-
|
59
|
-
assert_equal "frame4", page.iframes.first.name
|
60
|
-
assert_equal "/file_upload.html", page.iframes.first.src
|
61
|
-
assert_equal "File Upload Form", page.iframes.first.content.title
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_images
|
65
|
-
page = html_page <<-BODY
|
66
|
-
<img src="a.jpg">
|
67
|
-
BODY
|
68
|
-
|
69
|
-
assert_equal page.images.first.url, "http://example/a.jpg"
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_images_base
|
73
|
-
page = html_page <<-BODY
|
74
|
-
<head>
|
75
|
-
<base href="http://other.example/">
|
76
|
-
</head>
|
77
|
-
<body>
|
78
|
-
<img src="a.jpg">
|
79
|
-
</body>
|
80
|
-
BODY
|
81
|
-
|
82
|
-
assert_equal page.images.first.url, "http://other.example/a.jpg"
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_links
|
86
|
-
page = html_page <<-BODY
|
87
|
-
<a href="foo.html">
|
88
|
-
BODY
|
89
|
-
|
90
|
-
assert_equal page.links.first.href, "foo.html"
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_parser_no_attributes
|
94
|
-
page = html_page <<-BODY
|
95
|
-
<html>
|
96
|
-
<meta>
|
97
|
-
<head><title></title>
|
98
|
-
<body>
|
99
|
-
<a>Hello</a>
|
100
|
-
<a><img /></a>
|
101
|
-
<form>
|
102
|
-
<input />
|
103
|
-
<select>
|
104
|
-
<option />
|
105
|
-
</select>
|
106
|
-
<textarea></textarea>
|
107
|
-
</form>
|
108
|
-
<frame></frame>
|
109
|
-
</body>
|
110
|
-
</html>
|
111
|
-
BODY
|
112
|
-
|
113
|
-
# HACK weak assertion
|
114
|
-
assert_kind_of Nokogiri::HTML::Document, page.root
|
115
|
-
end
|
116
|
-
|
117
|
-
end
|
118
|
-
|