nokogiri 1.9.0.rc1 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of nokogiri might be problematic. Click here for more details.

Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/lib/nokogiri/css/parser.rb +61 -61
  3. data/lib/nokogiri/version.rb +1 -1
  4. metadata +4 -146
  5. data/.autotest +0 -22
  6. data/.cross_rubies +0 -8
  7. data/.editorconfig +0 -17
  8. data/.gemtest +0 -0
  9. data/.travis.yml +0 -63
  10. data/CHANGELOG.md +0 -1402
  11. data/CONTRIBUTING.md +0 -42
  12. data/C_CODING_STYLE.rdoc +0 -33
  13. data/Gemfile +0 -23
  14. data/Gemfile-libxml-ruby +0 -3
  15. data/Manifest.txt +0 -371
  16. data/ROADMAP.md +0 -111
  17. data/Rakefile +0 -358
  18. data/SECURITY.md +0 -19
  19. data/STANDARD_RESPONSES.md +0 -47
  20. data/Y_U_NO_GEMSPEC.md +0 -155
  21. data/appveyor.yml +0 -29
  22. data/build_all +0 -48
  23. data/patches/sort-patches-by-date +0 -25
  24. data/suppressions/README.txt +0 -1
  25. data/suppressions/nokogiri_ruby-2.supp +0 -10
  26. data/tasks/test.rb +0 -100
  27. data/test/css/test_nthiness.rb +0 -226
  28. data/test/css/test_parser.rb +0 -386
  29. data/test/css/test_tokenizer.rb +0 -215
  30. data/test/css/test_xpath_visitor.rb +0 -96
  31. data/test/decorators/test_slop.rb +0 -23
  32. data/test/files/2ch.html +0 -108
  33. data/test/files/GH_1042.html +0 -18
  34. data/test/files/address_book.rlx +0 -12
  35. data/test/files/address_book.xml +0 -10
  36. data/test/files/atom.xml +0 -344
  37. data/test/files/bar/bar.xsd +0 -4
  38. data/test/files/bogus.xml +0 -0
  39. data/test/files/dont_hurt_em_why.xml +0 -422
  40. data/test/files/encoding.html +0 -82
  41. data/test/files/encoding.xhtml +0 -84
  42. data/test/files/exslt.xml +0 -8
  43. data/test/files/exslt.xslt +0 -35
  44. data/test/files/foo/foo.xsd +0 -4
  45. data/test/files/metacharset.html +0 -10
  46. data/test/files/namespace_pressure_test.xml +0 -1684
  47. data/test/files/noencoding.html +0 -47
  48. data/test/files/po.xml +0 -32
  49. data/test/files/po.xsd +0 -66
  50. data/test/files/saml/saml20assertion_schema.xsd +0 -283
  51. data/test/files/saml/saml20protocol_schema.xsd +0 -302
  52. data/test/files/saml/xenc_schema.xsd +0 -146
  53. data/test/files/saml/xmldsig_schema.xsd +0 -318
  54. data/test/files/shift_jis.html +0 -10
  55. data/test/files/shift_jis.xml +0 -5
  56. data/test/files/shift_jis_no_charset.html +0 -9
  57. data/test/files/slow-xpath.xml +0 -25509
  58. data/test/files/snuggles.xml +0 -3
  59. data/test/files/staff.dtd +0 -10
  60. data/test/files/staff.xml +0 -59
  61. data/test/files/staff.xslt +0 -32
  62. data/test/files/test_document_url/bar.xml +0 -2
  63. data/test/files/test_document_url/document.dtd +0 -4
  64. data/test/files/test_document_url/document.xml +0 -6
  65. data/test/files/tlm.html +0 -851
  66. data/test/files/to_be_xincluded.xml +0 -2
  67. data/test/files/valid_bar.xml +0 -2
  68. data/test/files/xinclude.xml +0 -4
  69. data/test/helper.rb +0 -271
  70. data/test/html/sax/test_parser.rb +0 -168
  71. data/test/html/sax/test_parser_context.rb +0 -46
  72. data/test/html/sax/test_parser_text.rb +0 -163
  73. data/test/html/sax/test_push_parser.rb +0 -87
  74. data/test/html/test_attributes.rb +0 -85
  75. data/test/html/test_builder.rb +0 -164
  76. data/test/html/test_document.rb +0 -722
  77. data/test/html/test_document_encoding.rb +0 -143
  78. data/test/html/test_document_fragment.rb +0 -310
  79. data/test/html/test_element_description.rb +0 -105
  80. data/test/html/test_named_characters.rb +0 -14
  81. data/test/html/test_node.rb +0 -212
  82. data/test/html/test_node_encoding.rb +0 -91
  83. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
  84. data/test/namespaces/test_namespaces_aliased_default.rb +0 -24
  85. data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
  86. data/test/namespaces/test_namespaces_in_cloned_doc.rb +0 -31
  87. data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
  88. data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -80
  89. data/test/namespaces/test_namespaces_preservation.rb +0 -31
  90. data/test/test_convert_xpath.rb +0 -135
  91. data/test/test_css_cache.rb +0 -47
  92. data/test/test_encoding_handler.rb +0 -48
  93. data/test/test_memory_leak.rb +0 -226
  94. data/test/test_nokogiri.rb +0 -138
  95. data/test/test_soap4r_sax.rb +0 -52
  96. data/test/test_xslt_transforms.rb +0 -314
  97. data/test/xml/node/test_save_options.rb +0 -28
  98. data/test/xml/node/test_subclass.rb +0 -44
  99. data/test/xml/sax/test_parser.rb +0 -402
  100. data/test/xml/sax/test_parser_context.rb +0 -115
  101. data/test/xml/sax/test_parser_text.rb +0 -202
  102. data/test/xml/sax/test_push_parser.rb +0 -265
  103. data/test/xml/test_attr.rb +0 -96
  104. data/test/xml/test_attribute_decl.rb +0 -86
  105. data/test/xml/test_builder.rb +0 -353
  106. data/test/xml/test_c14n.rb +0 -180
  107. data/test/xml/test_cdata.rb +0 -54
  108. data/test/xml/test_comment.rb +0 -40
  109. data/test/xml/test_document.rb +0 -982
  110. data/test/xml/test_document_encoding.rb +0 -31
  111. data/test/xml/test_document_fragment.rb +0 -312
  112. data/test/xml/test_dtd.rb +0 -187
  113. data/test/xml/test_dtd_encoding.rb +0 -31
  114. data/test/xml/test_element_content.rb +0 -56
  115. data/test/xml/test_element_decl.rb +0 -73
  116. data/test/xml/test_entity_decl.rb +0 -122
  117. data/test/xml/test_entity_reference.rb +0 -262
  118. data/test/xml/test_namespace.rb +0 -96
  119. data/test/xml/test_node.rb +0 -1379
  120. data/test/xml/test_node_attributes.rb +0 -115
  121. data/test/xml/test_node_encoding.rb +0 -75
  122. data/test/xml/test_node_inheritance.rb +0 -32
  123. data/test/xml/test_node_reparenting.rb +0 -661
  124. data/test/xml/test_node_set.rb +0 -828
  125. data/test/xml/test_parse_options.rb +0 -64
  126. data/test/xml/test_processing_instruction.rb +0 -30
  127. data/test/xml/test_reader.rb +0 -620
  128. data/test/xml/test_reader_encoding.rb +0 -134
  129. data/test/xml/test_relax_ng.rb +0 -60
  130. data/test/xml/test_schema.rb +0 -142
  131. data/test/xml/test_syntax_error.rb +0 -36
  132. data/test/xml/test_text.rb +0 -69
  133. data/test/xml/test_unparented_node.rb +0 -483
  134. data/test/xml/test_xinclude.rb +0 -83
  135. data/test/xml/test_xpath.rb +0 -470
  136. data/test/xslt/test_custom_functions.rb +0 -133
  137. data/test/xslt/test_exception_handling.rb +0 -37
@@ -1,143 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require "helper"
3
-
4
- module Nokogiri
5
- module HTML
6
- class TestDocumentEncoding < Nokogiri::TestCase
7
- def test_encoding
8
- doc = Nokogiri::HTML File.open(SHIFT_JIS_HTML, 'rb')
9
-
10
- hello = "こんにちは"
11
-
12
- assert_match doc.encoding, doc.to_html
13
- assert_match hello.encode('Shift_JIS'), doc.to_html
14
- assert_equal 'Shift_JIS', doc.to_html.encoding.name
15
-
16
- assert_match hello, doc.to_html(:encoding => 'UTF-8')
17
- assert_match 'UTF-8', doc.to_html(:encoding => 'UTF-8')
18
- assert_match 'UTF-8', doc.to_html(:encoding => 'UTF-8').encoding.name
19
- end
20
-
21
- def test_encoding_without_charset
22
- doc = Nokogiri::HTML File.open(SHIFT_JIS_NO_CHARSET, 'r:cp932:cp932').read
23
-
24
- hello = "こんにちは"
25
-
26
- assert_match hello, doc.content
27
- assert_match hello, doc.to_html(:encoding => 'UTF-8')
28
- assert_match 'UTF-8', doc.to_html(:encoding => 'UTF-8').encoding.name
29
- end
30
-
31
- def test_default_to_encoding_from_string
32
- bad_charset = <<-eohtml
33
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
34
- <html>
35
- <head>
36
- <meta http-equiv="Content-Type" content="text/html; charset=charset=UTF-8">
37
- </head>
38
- <body>
39
- <a href="http://tenderlovemaking.com/">blah!</a>
40
- </body>
41
- </html>
42
- eohtml
43
- doc = Nokogiri::HTML(bad_charset)
44
- assert_equal bad_charset.encoding.name, doc.encoding
45
-
46
- doc = Nokogiri.parse(bad_charset)
47
- assert_equal bad_charset.encoding.name, doc.encoding
48
- end
49
-
50
- def test_encoding_non_utf8
51
- orig = '日本語が上手です'
52
- bin = Encoding::ASCII_8BIT
53
- [Encoding::Shift_JIS, Encoding::EUC_JP].each do |enc|
54
- html = <<-eohtml.encode(enc)
55
- <html>
56
- <meta http-equiv="Content-Type" content="text/html; charset=#{enc.name}">
57
- <title xml:lang="ja">#{orig}</title></html>
58
- eohtml
59
- text = Nokogiri::HTML.parse(html).at('title').inner_text
60
- assert_equal(
61
- orig.encode(enc).force_encoding(bin),
62
- text.encode(enc).force_encoding(bin)
63
- )
64
- end
65
- end
66
-
67
- def test_encoding_with_a_bad_name
68
- bad_charset = <<-eohtml
69
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
70
- <html>
71
- <head>
72
- <meta http-equiv="Content-Type" content="text/html; charset=charset=UTF-8">
73
- </head>
74
- <body>
75
- <a href="http://tenderlovemaking.com/">blah!</a>
76
- </body>
77
- </html>
78
- eohtml
79
- doc = Nokogiri::HTML(bad_charset, nil, 'askldjfhalsdfjhlkasdfjh')
80
- assert_equal ['http://tenderlovemaking.com/'],
81
- doc.css('a').map { |a| a['href'] }
82
- end
83
-
84
- def test_empty_doc_encoding
85
- encoding = 'US-ASCII'
86
- assert_equal encoding, Nokogiri::HTML.parse(nil, nil, encoding).encoding
87
- end
88
- end
89
-
90
- class TestDocumentEncodingDetection < Nokogiri::TestCase
91
- def binread(file)
92
- IO.binread(file)
93
- end
94
-
95
- def binopen(file)
96
- File.open(file, 'rb')
97
- end
98
-
99
- def test_document_html_noencoding
100
- from_stream = Nokogiri::HTML(binopen(NOENCODING_FILE))
101
- from_string = Nokogiri::HTML(binread(NOENCODING_FILE))
102
-
103
- assert_equal from_string.to_s.size, from_stream.to_s.size
104
- end
105
-
106
- def test_document_html_charset
107
- html = Nokogiri::HTML(binopen(METACHARSET_FILE))
108
- assert_equal 'iso-2022-jp', html.encoding
109
- assert_equal 'たこ焼き仮面', html.title
110
- end
111
-
112
- def test_document_xhtml_enc
113
- [ENCODING_XHTML_FILE, ENCODING_HTML_FILE].each { |file|
114
- doc_from_string_enc = Nokogiri::HTML(binread(file), nil, 'Shift_JIS')
115
- ary_from_string_enc = doc_from_string_enc.xpath('//p/text()').map(&:text)
116
-
117
- doc_from_string = Nokogiri::HTML(binread(file))
118
- ary_from_string = doc_from_string.xpath('//p/text()').map(&:text)
119
-
120
- doc_from_file_enc = Nokogiri::HTML(binopen(file), nil, 'Shift_JIS')
121
- ary_from_file_enc = doc_from_file_enc.xpath('//p/text()').map(&:text)
122
-
123
- doc_from_file = Nokogiri::HTML(binopen(file))
124
- ary_from_file = doc_from_file.xpath('//p/text()').map(&:text)
125
-
126
- title = 'たこ焼き仮面'
127
-
128
- assert_equal(title, doc_from_string_enc.at('//title/text()').text)
129
- assert_equal(title, doc_from_string.at('//title/text()').text)
130
- assert_equal(title, doc_from_file_enc.at('//title/text()').text)
131
- assert_equal(title, doc_from_file.at('//title/text()').text)
132
-
133
- evil = (0..72).map { |i| '超' * i + '悪い事を構想中。' }
134
-
135
- assert_equal(evil, ary_from_string_enc)
136
- assert_equal(evil, ary_from_string)
137
- assert_equal(evil, ary_from_file_enc)
138
- assert_equal(evil, ary_from_file)
139
- }
140
- end
141
- end
142
- end
143
- end
@@ -1,310 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require "helper"
3
-
4
- module Nokogiri
5
- module HTML
6
- class TestDocumentFragment < Nokogiri::TestCase
7
- def setup
8
- super
9
- @html = Nokogiri::HTML.parse(File.read(HTML_FILE), HTML_FILE)
10
- end
11
-
12
- def test_ascii_8bit_encoding
13
- s = String.new 'hello'
14
- s.force_encoding ::Encoding::ASCII_8BIT
15
- assert_equal "hello", Nokogiri::HTML::DocumentFragment.parse(s).to_html
16
- end
17
-
18
- def test_inspect_encoding
19
- fragment = "<div>こんにちは!</div>".encode('EUC-JP')
20
- f = Nokogiri::HTML::DocumentFragment.parse fragment
21
- assert_equal "こんにちは!", f.content
22
- end
23
-
24
- def test_html_parse_encoding
25
- fragment = "<div>こんにちは!</div>".encode 'EUC-JP'
26
- f = Nokogiri::HTML.fragment fragment
27
- assert_equal 'EUC-JP', f.document.encoding
28
- assert_equal "こんにちは!", f.content
29
- end
30
-
31
- def test_unlink_empty_document
32
- frag = Nokogiri::HTML::DocumentFragment.parse('').unlink # must_not_raise
33
- assert_nil frag.parent
34
- end
35
-
36
- def test_colons_are_not_removed
37
- doc = Nokogiri::HTML::DocumentFragment.parse("<span>3:30pm</span>")
38
- assert_match(/3:30/, doc.to_s)
39
- end
40
-
41
- def test_parse_encoding
42
- fragment = "<div>hello world</div>"
43
- f = Nokogiri::HTML::DocumentFragment.parse fragment, 'ISO-8859-1'
44
- assert_equal 'ISO-8859-1', f.document.encoding
45
- assert_equal "hello world", f.content
46
- end
47
-
48
- def test_html_parse_with_encoding
49
- fragment = "<div>hello world</div>"
50
- f = Nokogiri::HTML.fragment fragment, 'ISO-8859-1'
51
- assert_equal 'ISO-8859-1', f.document.encoding
52
- assert_equal "hello world", f.content
53
- end
54
-
55
- def test_parse_in_context
56
- assert_equal('<br>', @html.root.parse('<br />').to_s)
57
- end
58
-
59
- def test_inner_html=
60
- fragment = Nokogiri::HTML.fragment '<hr />'
61
-
62
- fragment.inner_html = "hello"
63
- assert_equal 'hello', fragment.inner_html
64
- end
65
-
66
- def test_ancestors_search
67
- html = %q{
68
- <div>
69
- <ul>
70
- <li>foo</li>
71
- </ul>
72
- </div>
73
- }
74
- fragment = Nokogiri::HTML.fragment html
75
- li = fragment.at('li')
76
- assert li.matches?('li')
77
- end
78
-
79
- def test_fun_encoding
80
- string = %Q(<body>こんにちは</body>)
81
- html = Nokogiri::HTML::DocumentFragment.parse(
82
- string
83
- ).to_html(:encoding => 'UTF-8')
84
- assert_equal string, html
85
- end
86
-
87
- def test_new
88
- assert Nokogiri::HTML::DocumentFragment.new(@html)
89
- end
90
-
91
- def test_body_fragment_should_contain_body
92
- fragment = Nokogiri::HTML::DocumentFragment.parse(" <body><div>foo</div></body>")
93
- assert_match(/^<body>/, fragment.to_s)
94
- end
95
-
96
- def test_nonbody_fragment_should_not_contain_body
97
- fragment = Nokogiri::HTML::DocumentFragment.parse("<div>foo</div>")
98
- assert_match(/^<div>/, fragment.to_s)
99
- end
100
-
101
- def test_fragment_should_have_document
102
- fragment = Nokogiri::HTML::DocumentFragment.new(@html)
103
- assert_equal @html, fragment.document
104
- end
105
-
106
- def test_empty_fragment_should_be_searchable_by_css
107
- fragment = Nokogiri::HTML.fragment("")
108
- assert_equal 0, fragment.css("a").size
109
- end
110
-
111
- def test_empty_fragment_should_be_searchable
112
- fragment = Nokogiri::HTML.fragment("")
113
- assert_equal 0, fragment.search("//a").size
114
- end
115
-
116
- def test_name
117
- fragment = Nokogiri::HTML::DocumentFragment.new(@html)
118
- assert_equal '#document-fragment', fragment.name
119
- end
120
-
121
- def test_static_method
122
- fragment = Nokogiri::HTML::DocumentFragment.parse("<div>a</div>")
123
- assert_instance_of Nokogiri::HTML::DocumentFragment, fragment
124
- end
125
-
126
- def test_many_fragments
127
- 100.times { Nokogiri::HTML::DocumentFragment.new(@html) }
128
- end
129
-
130
- def test_subclass
131
- klass = Class.new(Nokogiri::HTML::DocumentFragment)
132
- fragment = klass.new(@html, "<div>a</div>")
133
- assert_instance_of klass, fragment
134
- end
135
-
136
- def test_subclass_parse
137
- klass = Class.new(Nokogiri::HTML::DocumentFragment)
138
- doc = klass.parse("<div>a</div>")
139
- assert_instance_of klass, doc
140
- end
141
-
142
- def test_html_fragment
143
- fragment = Nokogiri::HTML.fragment("<div>a</div>")
144
- assert_equal "<div>a</div>", fragment.to_s
145
- end
146
-
147
- def test_html_fragment_has_outer_text
148
- doc = "a<div>b</div>c"
149
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
150
- if Nokogiri.uses_libxml? &&
151
- Nokogiri::VERSION_INFO['libxml']['loaded'] <= "2.6.16"
152
- assert_equal "a<div>b</div><p>c</p>", fragment.to_s
153
- else
154
- assert_equal "a<div>b</div>c", fragment.to_s
155
- end
156
- end
157
-
158
- def test_html_fragment_case_insensitivity
159
- doc = "<Div>b</Div>"
160
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
161
- assert_equal "<div>b</div>", fragment.to_s
162
- end
163
-
164
- def test_html_fragment_with_leading_whitespace
165
- doc = " <div>b</div> "
166
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
167
- assert_match %r% <div>b</div> *%, fragment.to_s
168
- end
169
-
170
- def test_html_fragment_with_leading_whitespace_and_newline
171
- doc = " \n<div>b</div> "
172
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
173
- assert_match %r% \n<div>b</div> *%, fragment.to_s
174
- end
175
-
176
- def test_html_fragment_with_input_and_intermediate_whitespace
177
- doc = "<label>Label</label><input type=\"text\"> <span>span</span>"
178
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
179
- assert_equal "<label>Label</label><input type=\"text\"> <span>span</span>", fragment.to_s
180
- end
181
-
182
- def test_html_fragment_with_leading_text_and_newline
183
- fragment = HTML::Document.new.fragment("First line\nSecond line<br>Broken line")
184
- assert_equal fragment.to_s, "First line\nSecond line<br>Broken line"
185
- end
186
-
187
- def test_html_fragment_with_leading_whitespace_and_text_and_newline
188
- fragment = HTML::Document.new.fragment(" First line\nSecond line<br>Broken line")
189
- assert_equal " First line\nSecond line<br>Broken line", fragment.to_s
190
- end
191
-
192
- def test_html_fragment_with_leading_entity
193
- failed = "&quot;test<br/>test&quot;"
194
- fragment = Nokogiri::HTML::DocumentFragment.parse(failed)
195
- assert_equal '"test<br>test"', fragment.to_html
196
- end
197
-
198
- def test_to_s
199
- doc = "<span>foo<br></span><span>bar</span>"
200
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
201
- assert_equal "<span>foo<br></span><span>bar</span>", fragment.to_s
202
- end
203
-
204
- def test_to_html
205
- doc = "<span>foo<br></span><span>bar</span>"
206
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
207
- assert_equal "<span>foo<br></span><span>bar</span>", fragment.to_html
208
- end
209
-
210
- def test_to_xhtml
211
- doc = "<span>foo<br></span><span>bar</span><p></p>"
212
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
213
- if Nokogiri.jruby? || Nokogiri::VERSION_INFO['libxml']['loaded'] >= "2.7.0"
214
- assert_equal "<span>foo<br /></span><span>bar</span><p></p>", fragment.to_xhtml
215
- else
216
- # FIXME: why are we doing this ? this violates the spec,
217
- # see http://www.w3.org/TR/xhtml1/#C_2
218
- assert_equal "<span>foo<br></span><span>bar</span><p></p>", fragment.to_xhtml
219
- end
220
- end
221
-
222
- def test_to_xml
223
- doc = "<span>foo<br></span><span>bar</span>"
224
- fragment = Nokogiri::HTML::Document.new.fragment(doc)
225
- assert_equal "<span>foo<br/></span><span>bar</span>", fragment.to_xml
226
- end
227
-
228
- def test_fragment_script_tag_with_cdata
229
- doc = HTML::Document.new
230
- fragment = doc.fragment("<script>var foo = 'bar';</script>")
231
- assert_equal("<script>var foo = 'bar';</script>",
232
- fragment.to_s)
233
- end
234
-
235
- def test_fragment_with_comment
236
- doc = HTML::Document.new
237
- fragment = doc.fragment("<p>hello<!-- your ad here --></p>")
238
- assert_equal("<p>hello<!-- your ad here --></p>",
239
- fragment.to_s)
240
- end
241
-
242
- def test_element_children_counts
243
- if Nokogiri.uses_libxml? && Nokogiri::VERSION_INFO['libxml']['loaded'] <= "2.9.1"
244
- skip "#elements doesn't work in 2.9.1, see 1793a5a for history"
245
- end
246
- doc = Nokogiri::HTML::DocumentFragment.parse(" <div> </div>\n ")
247
- assert_equal 1, doc.element_children.count
248
- end
249
-
250
- def test_malformed_fragment_is_corrected
251
- fragment = HTML::DocumentFragment.parse("<div </div>")
252
- assert_equal "<div></div>", fragment.to_s
253
- end
254
-
255
- def test_unclosed_script_tag
256
- # see GH#315
257
- fragment = HTML::DocumentFragment.parse("foo <script>bar")
258
- assert_equal "foo <script>bar</script>", fragment.to_html
259
- end
260
-
261
- def test_error_propagation_on_fragment_parse
262
- frag = Nokogiri::HTML::DocumentFragment.parse "<hello>oh, hello there.</hello>"
263
- assert frag.errors.any?{|err| err.to_s =~ /Tag hello invalid/}, "errors should be copied to the fragment"
264
- end
265
-
266
- def test_error_propagation_on_fragment_parse_in_node_context
267
- doc = Nokogiri::HTML::Document.parse "<html><body><div></div></body></html>"
268
- context_node = doc.at_css "div"
269
- frag = Nokogiri::HTML::DocumentFragment.new doc, "<hello>oh, hello there.</hello>", context_node
270
- assert frag.errors.any?{|err| err.to_s =~ /Tag hello invalid/}, "errors should be on the context node's document"
271
- end
272
-
273
- def test_error_propagation_on_fragment_parse_in_node_context_should_not_include_preexisting_errors
274
- doc = Nokogiri::HTML::Document.parse "<html><body><div></div><jimmy></jimmy></body></html>"
275
- assert doc.errors.any?{|err| err.to_s =~ /jimmy/}, "assert on setup"
276
-
277
- context_node = doc.at_css "div"
278
- frag = Nokogiri::HTML::DocumentFragment.new doc, "<hello>oh, hello there.</hello>", context_node
279
- assert frag.errors.any?{|err| err.to_s =~ /Tag hello invalid/}, "errors should be on the context node's document"
280
- assert frag.errors.none?{|err| err.to_s =~ /jimmy/}, "errors should not include pre-existing document errors"
281
- end
282
-
283
- def test_capturing_nonparse_errors_during_fragment_clone
284
- # see https://github.com/sparklemotion/nokogiri/issues/1196 for background
285
- original = Nokogiri::HTML.fragment("<div id='unique'></div><div id='unique'></div>")
286
- original_errors = original.errors.dup
287
-
288
- copy = original.dup
289
- assert_equal original_errors, copy.errors
290
- end
291
-
292
- def test_capturing_nonparse_errors_during_node_copy_between_fragments
293
- # Errors should be emitted while parsing only, and should not change when moving nodes.
294
- frag1 = Nokogiri::HTML.fragment("<diva id='unique'>one</diva>")
295
- frag2 = Nokogiri::HTML.fragment("<dive id='unique'>two</dive>")
296
- node1 = frag1.at_css("#unique")
297
- node2 = frag2.at_css("#unique")
298
- original_errors1 = frag1.errors.dup
299
- original_errors2 = frag2.errors.dup
300
- assert original_errors1.any?{|e| e.to_s =~ /Tag diva invalid/ }, "it should complain about the tag name"
301
- assert original_errors2.any?{|e| e.to_s =~ /Tag dive invalid/ }, "it should complain about the tag name"
302
-
303
- node1.add_child node2
304
-
305
- assert_equal original_errors1, frag1.errors
306
- assert_equal original_errors2, frag2.errors
307
- end
308
- end
309
- end
310
- end