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,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
-
@@ -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
-
@@ -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
-