nokogiri 1.8.5-java → 1.9.0-java

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 (160) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +0 -1
  3. data/ext/java/nokogiri/XmlAttr.java +3 -1
  4. data/ext/java/nokogiri/XmlDtd.java +20 -16
  5. data/ext/java/nokogiri/XmlElement.java +6 -6
  6. data/ext/java/nokogiri/XmlNode.java +29 -9
  7. data/ext/java/nokogiri/XmlNodeSet.java +258 -77
  8. data/ext/java/nokogiri/XmlXpathContext.java +10 -12
  9. data/ext/java/nokogiri/internals/NokogiriHelpers.java +25 -23
  10. data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +5 -5
  11. data/ext/java/nokogiri/internals/XalanDTMManagerPatch.java +11 -10
  12. data/ext/java/{org/apache/xml/dtm/ref/dom2dtm/DOM2DTMExt.java → nokogiri/internals/dom2dtm/DOM2DTM.java} +3 -7
  13. data/ext/java/nokogiri/internals/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.java +685 -0
  14. data/ext/nokogiri/extconf.rb +10 -6
  15. data/ext/nokogiri/xml_attr.c +26 -21
  16. data/ext/nokogiri/xml_document.c +4 -1
  17. data/ext/nokogiri/xml_namespace.c +3 -3
  18. data/ext/nokogiri/xml_namespace.h +1 -2
  19. data/ext/nokogiri/xml_node.c +55 -15
  20. data/lib/nokogiri/css/parser.rb +61 -61
  21. data/lib/nokogiri/nokogiri.jar +0 -0
  22. data/lib/nokogiri/version.rb +1 -1
  23. data/lib/nokogiri/xml/document_fragment.rb +11 -0
  24. data/lib/nokogiri/xml/node.rb +12 -0
  25. data/lib/nokogiri/xml/node_set.rb +4 -8
  26. data/lib/xercesImpl.jar +0 -0
  27. metadata +17 -152
  28. data/.autotest +0 -22
  29. data/.cross_rubies +0 -8
  30. data/.editorconfig +0 -17
  31. data/.gemtest +0 -0
  32. data/.travis.yml +0 -63
  33. data/CHANGELOG.md +0 -1368
  34. data/CONTRIBUTING.md +0 -42
  35. data/C_CODING_STYLE.rdoc +0 -33
  36. data/Gemfile +0 -23
  37. data/Gemfile-libxml-ruby +0 -3
  38. data/Manifest.txt +0 -370
  39. data/ROADMAP.md +0 -111
  40. data/Rakefile +0 -348
  41. data/SECURITY.md +0 -19
  42. data/STANDARD_RESPONSES.md +0 -47
  43. data/Y_U_NO_GEMSPEC.md +0 -155
  44. data/appveyor.yml +0 -29
  45. data/build_all +0 -44
  46. data/patches/sort-patches-by-date +0 -25
  47. data/suppressions/README.txt +0 -1
  48. data/suppressions/nokogiri_ruby-2.supp +0 -10
  49. data/tasks/test.rb +0 -100
  50. data/test/css/test_nthiness.rb +0 -226
  51. data/test/css/test_parser.rb +0 -386
  52. data/test/css/test_tokenizer.rb +0 -215
  53. data/test/css/test_xpath_visitor.rb +0 -96
  54. data/test/decorators/test_slop.rb +0 -23
  55. data/test/files/2ch.html +0 -108
  56. data/test/files/GH_1042.html +0 -18
  57. data/test/files/address_book.rlx +0 -12
  58. data/test/files/address_book.xml +0 -10
  59. data/test/files/atom.xml +0 -344
  60. data/test/files/bar/bar.xsd +0 -4
  61. data/test/files/bogus.xml +0 -0
  62. data/test/files/dont_hurt_em_why.xml +0 -422
  63. data/test/files/encoding.html +0 -82
  64. data/test/files/encoding.xhtml +0 -84
  65. data/test/files/exslt.xml +0 -8
  66. data/test/files/exslt.xslt +0 -35
  67. data/test/files/foo/foo.xsd +0 -4
  68. data/test/files/metacharset.html +0 -10
  69. data/test/files/namespace_pressure_test.xml +0 -1684
  70. data/test/files/noencoding.html +0 -47
  71. data/test/files/po.xml +0 -32
  72. data/test/files/po.xsd +0 -66
  73. data/test/files/saml/saml20assertion_schema.xsd +0 -283
  74. data/test/files/saml/saml20protocol_schema.xsd +0 -302
  75. data/test/files/saml/xenc_schema.xsd +0 -146
  76. data/test/files/saml/xmldsig_schema.xsd +0 -318
  77. data/test/files/shift_jis.html +0 -10
  78. data/test/files/shift_jis.xml +0 -5
  79. data/test/files/shift_jis_no_charset.html +0 -9
  80. data/test/files/slow-xpath.xml +0 -25509
  81. data/test/files/snuggles.xml +0 -3
  82. data/test/files/staff.dtd +0 -10
  83. data/test/files/staff.xml +0 -59
  84. data/test/files/staff.xslt +0 -32
  85. data/test/files/test_document_url/bar.xml +0 -2
  86. data/test/files/test_document_url/document.dtd +0 -4
  87. data/test/files/test_document_url/document.xml +0 -6
  88. data/test/files/tlm.html +0 -851
  89. data/test/files/to_be_xincluded.xml +0 -2
  90. data/test/files/valid_bar.xml +0 -2
  91. data/test/files/xinclude.xml +0 -4
  92. data/test/helper.rb +0 -271
  93. data/test/html/sax/test_parser.rb +0 -168
  94. data/test/html/sax/test_parser_context.rb +0 -46
  95. data/test/html/sax/test_parser_text.rb +0 -163
  96. data/test/html/sax/test_push_parser.rb +0 -87
  97. data/test/html/test_attributes.rb +0 -85
  98. data/test/html/test_builder.rb +0 -164
  99. data/test/html/test_document.rb +0 -712
  100. data/test/html/test_document_encoding.rb +0 -143
  101. data/test/html/test_document_fragment.rb +0 -310
  102. data/test/html/test_element_description.rb +0 -105
  103. data/test/html/test_named_characters.rb +0 -14
  104. data/test/html/test_node.rb +0 -212
  105. data/test/html/test_node_encoding.rb +0 -91
  106. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
  107. data/test/namespaces/test_namespaces_aliased_default.rb +0 -24
  108. data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
  109. data/test/namespaces/test_namespaces_in_cloned_doc.rb +0 -31
  110. data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
  111. data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -80
  112. data/test/namespaces/test_namespaces_preservation.rb +0 -31
  113. data/test/test_convert_xpath.rb +0 -135
  114. data/test/test_css_cache.rb +0 -47
  115. data/test/test_encoding_handler.rb +0 -48
  116. data/test/test_memory_leak.rb +0 -156
  117. data/test/test_nokogiri.rb +0 -138
  118. data/test/test_soap4r_sax.rb +0 -52
  119. data/test/test_xslt_transforms.rb +0 -314
  120. data/test/xml/node/test_save_options.rb +0 -28
  121. data/test/xml/node/test_subclass.rb +0 -44
  122. data/test/xml/sax/test_parser.rb +0 -402
  123. data/test/xml/sax/test_parser_context.rb +0 -115
  124. data/test/xml/sax/test_parser_text.rb +0 -202
  125. data/test/xml/sax/test_push_parser.rb +0 -265
  126. data/test/xml/test_attr.rb +0 -74
  127. data/test/xml/test_attribute_decl.rb +0 -86
  128. data/test/xml/test_builder.rb +0 -341
  129. data/test/xml/test_c14n.rb +0 -180
  130. data/test/xml/test_cdata.rb +0 -54
  131. data/test/xml/test_comment.rb +0 -40
  132. data/test/xml/test_document.rb +0 -982
  133. data/test/xml/test_document_encoding.rb +0 -31
  134. data/test/xml/test_document_fragment.rb +0 -298
  135. data/test/xml/test_dtd.rb +0 -187
  136. data/test/xml/test_dtd_encoding.rb +0 -31
  137. data/test/xml/test_element_content.rb +0 -56
  138. data/test/xml/test_element_decl.rb +0 -73
  139. data/test/xml/test_entity_decl.rb +0 -122
  140. data/test/xml/test_entity_reference.rb +0 -262
  141. data/test/xml/test_namespace.rb +0 -96
  142. data/test/xml/test_node.rb +0 -1325
  143. data/test/xml/test_node_attributes.rb +0 -115
  144. data/test/xml/test_node_encoding.rb +0 -75
  145. data/test/xml/test_node_inheritance.rb +0 -32
  146. data/test/xml/test_node_reparenting.rb +0 -592
  147. data/test/xml/test_node_set.rb +0 -809
  148. data/test/xml/test_parse_options.rb +0 -64
  149. data/test/xml/test_processing_instruction.rb +0 -30
  150. data/test/xml/test_reader.rb +0 -620
  151. data/test/xml/test_reader_encoding.rb +0 -134
  152. data/test/xml/test_relax_ng.rb +0 -60
  153. data/test/xml/test_schema.rb +0 -142
  154. data/test/xml/test_syntax_error.rb +0 -36
  155. data/test/xml/test_text.rb +0 -60
  156. data/test/xml/test_unparented_node.rb +0 -483
  157. data/test/xml/test_xinclude.rb +0 -83
  158. data/test/xml/test_xpath.rb +0 -470
  159. data/test/xslt/test_custom_functions.rb +0 -133
  160. data/test/xslt/test_exception_handling.rb +0 -37
@@ -1,31 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestDocumentEncoding < Nokogiri::TestCase
6
- def setup
7
- super
8
- @xml = Nokogiri::XML(File.read(SHIFT_JIS_XML), SHIFT_JIS_XML)
9
- end
10
-
11
- def test_url
12
- assert_equal 'UTF-8', @xml.url.encoding.name
13
- end
14
-
15
- def test_encoding
16
- assert_equal 'UTF-8', @xml.encoding.encoding.name
17
- end
18
-
19
- def test_dotted_version
20
- if Nokogiri.uses_libxml?
21
- assert_equal 'UTF-8', Nokogiri::LIBXML_VERSION.encoding.name
22
- end
23
- end
24
-
25
- def test_empty_doc_encoding
26
- encoding = 'US-ASCII'
27
- assert_equal encoding, Nokogiri::XML(nil, nil, encoding).encoding
28
- end
29
- end
30
- end
31
- end
@@ -1,298 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestDocumentFragment < Nokogiri::TestCase
6
- def setup
7
- super
8
- @xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
9
- end
10
-
11
- def test_replace_text_node
12
- html = "foo"
13
- doc = Nokogiri::XML::DocumentFragment.parse(html)
14
- doc.children[0].replace "bar"
15
- assert_equal 'bar', doc.children[0].content
16
- end
17
-
18
- def test_fragment_is_relative
19
- doc = Nokogiri::XML('<root><a xmlns="blah" /></root>')
20
- ctx = doc.root.child
21
- fragment = Nokogiri::XML::DocumentFragment.new(doc, '<hello />', ctx)
22
- hello = fragment.child
23
-
24
- assert_equal 'hello', hello.name
25
- assert_equal doc.root.child.namespace, hello.namespace
26
- end
27
-
28
- def test_node_fragment_is_relative
29
- doc = Nokogiri::XML('<root><a xmlns="blah" /></root>')
30
- assert doc.root.child
31
- fragment = doc.root.child.fragment('<hello />')
32
- hello = fragment.child
33
-
34
- assert_equal 'hello', hello.name
35
- assert_equal doc.root.child.namespace, hello.namespace
36
- end
37
-
38
- def test_new
39
- assert Nokogiri::XML::DocumentFragment.new(@xml)
40
- end
41
-
42
- def test_fragment_should_have_document
43
- fragment = Nokogiri::XML::DocumentFragment.new(@xml)
44
- assert_equal @xml, fragment.document
45
- end
46
-
47
- def test_name
48
- fragment = Nokogiri::XML::DocumentFragment.new(@xml)
49
- assert_equal '#document-fragment', fragment.name
50
- end
51
-
52
- def test_static_method
53
- fragment = Nokogiri::XML::DocumentFragment.parse("<div>a</div>")
54
- assert_instance_of Nokogiri::XML::DocumentFragment, fragment
55
- end
56
-
57
- def test_static_method_with_namespaces
58
- # follows different path in FragmentHandler#start_element which blew up after 597195ff
59
- fragment = Nokogiri::XML::DocumentFragment.parse("<o:div>a</o:div>")
60
- assert_instance_of Nokogiri::XML::DocumentFragment, fragment
61
- end
62
-
63
- def test_many_fragments
64
- 100.times { Nokogiri::XML::DocumentFragment.new(@xml) }
65
- end
66
-
67
- def test_subclass
68
- klass = Class.new(Nokogiri::XML::DocumentFragment)
69
- fragment = klass.new(@xml, "<div>a</div>")
70
- assert_instance_of klass, fragment
71
- end
72
-
73
- def test_subclass_parse
74
- klass = Class.new(Nokogiri::XML::DocumentFragment)
75
- doc = klass.parse("<div>a</div>")
76
- assert_instance_of klass, doc
77
- end
78
-
79
- def test_unparented_text_node_parse
80
- fragment = Nokogiri::XML::DocumentFragment.parse("foo")
81
- fragment.children.after("<bar/>")
82
- end
83
-
84
- def test_xml_fragment
85
- fragment = Nokogiri::XML.fragment("<div>a</div>")
86
- assert_equal "<div>a</div>", fragment.to_s
87
- end
88
-
89
- def test_xml_fragment_has_multiple_toplevel_children
90
- doc = "<div>b</div><div>e</div>"
91
- fragment = Nokogiri::XML::Document.new.fragment(doc)
92
- assert_equal "<div>b</div><div>e</div>", fragment.to_s
93
- end
94
-
95
- def test_xml_fragment_has_outer_text
96
- # this test is descriptive, not prescriptive.
97
- doc = "a<div>b</div>"
98
- fragment = Nokogiri::XML::Document.new.fragment(doc)
99
- assert_equal "a<div>b</div>", fragment.to_s
100
-
101
- doc = "<div>b</div>c"
102
- fragment = Nokogiri::XML::Document.new.fragment(doc)
103
- assert_equal "<div>b</div>c", fragment.to_s
104
- end
105
-
106
- def test_xml_fragment_case_sensitivity
107
- doc = "<crazyDiv>b</crazyDiv>"
108
- fragment = Nokogiri::XML::Document.new.fragment(doc)
109
- assert_equal "<crazyDiv>b</crazyDiv>", fragment.to_s
110
- end
111
-
112
- def test_xml_fragment_with_leading_whitespace
113
- doc = " <div>b</div> "
114
- fragment = Nokogiri::XML::Document.new.fragment(doc)
115
- assert_equal " <div>b</div> ", fragment.to_s
116
- end
117
-
118
- def test_xml_fragment_with_leading_whitespace_and_newline
119
- doc = " \n<div>b</div> "
120
- fragment = Nokogiri::XML::Document.new.fragment(doc)
121
- assert_equal " \n<div>b</div> ", fragment.to_s
122
- end
123
-
124
- def test_fragment_children_search
125
- fragment = Nokogiri::XML::Document.new.fragment(
126
- '<div><p id="content">hi</p></div>'
127
- )
128
- expected = fragment.children.xpath('.//p')
129
- assert_equal 1, expected.length
130
-
131
- css = fragment.children.css('p')
132
- search_css = fragment.children.search('p')
133
- search_xpath = fragment.children.search('.//p')
134
- assert_equal expected, css
135
- assert_equal expected, search_css
136
- assert_equal expected, search_xpath
137
- end
138
-
139
- def test_fragment_css_search_with_whitespace_and_node_removal
140
- # The same xml without leading whitespace in front of the first line
141
- # does not expose the error. Putting both nodes on the same line
142
- # instead also fixes the crash.
143
- fragment = Nokogiri::XML::DocumentFragment.parse <<-EOXML
144
- <p id="content">hi</p> x <!--y--> <p>another paragraph</p>
145
- EOXML
146
- children = fragment.css('p')
147
- assert_equal 2, children.length
148
- # removing the last node instead does not yield the error. Probably the
149
- # node removal leaves around two consecutive text nodes which make the
150
- # css search crash?
151
- children.first.remove
152
- assert_equal 1, fragment.xpath('.//p | self::p').length
153
- assert_equal 1, fragment.css('p').length
154
- end
155
-
156
- def test_fragment_search_three_ways
157
- frag = Nokogiri::XML::Document.new.fragment '<p id="content">foo</p><p id="content">bar</p>'
158
- expected = frag.xpath('./*[@id = "content"]')
159
- assert_equal 2, expected.length
160
-
161
- [
162
- [:css, '#content'],
163
- [:search, '#content'],
164
- [:search, './*[@id = \'content\']'],
165
- ].each do |method, query|
166
- result = frag.send(method, query)
167
- assert_equal(expected, result,
168
- "fragment search with :#{method} using '#{query}' expected '#{expected}' got '#{result}'")
169
- end
170
- end
171
-
172
- def test_fragment_search_with_multiple_queries
173
- xml = '<thing>
174
- <div class="title">important thing</div>
175
- </thing>
176
- <thing>
177
- <div class="content">stuff</div>
178
- </thing>
179
- <thing>
180
- <p class="blah">more stuff</div>
181
- </thing>'
182
- fragment = Nokogiri::XML.fragment(xml)
183
- assert_kind_of Nokogiri::XML::DocumentFragment, fragment
184
-
185
- assert_equal 3, fragment.xpath('.//div', './/p').length
186
- assert_equal 3, fragment.css('.title', '.content', 'p').length
187
- assert_equal 3, fragment.search('.//div', 'p.blah').length
188
- end
189
-
190
- def test_fragment_without_a_namespace_does_not_get_a_namespace
191
- doc = Nokogiri::XML <<-EOX
192
- <root xmlns="http://tenderlovemaking.com/" xmlns:foo="http://flavorjon.es/" xmlns:bar="http://google.com/">
193
- <foo:existing></foo:existing>
194
- </root>
195
- EOX
196
- frag = doc.fragment "<newnode></newnode>"
197
- assert_nil frag.namespace
198
- end
199
-
200
- def test_fragment_namespace_resolves_against_document_root
201
- doc = Nokogiri::XML <<-EOX
202
- <root xmlns:foo="http://flavorjon.es/" xmlns:bar="http://google.com/">
203
- <foo:existing></foo:existing>
204
- </root>
205
- EOX
206
- ns = doc.root.namespace_definitions.detect { |x| x.prefix == "bar" }
207
-
208
- frag = doc.fragment "<bar:newnode></bar:newnode>"
209
- assert frag.children.first.namespace
210
- assert_equal ns, frag.children.first.namespace
211
- end
212
-
213
- def test_fragment_invalid_namespace_is_silently_ignored
214
- doc = Nokogiri::XML <<-EOX
215
- <root xmlns:foo="http://flavorjon.es/" xmlns:bar="http://google.com/">
216
- <foo:existing></foo:existing>
217
- </root>
218
- EOX
219
- frag = doc.fragment "<baz:newnode></baz:newnode>"
220
- assert_nil frag.children.first.namespace
221
- end
222
-
223
- def test_decorator_is_applied
224
- x = Module.new do
225
- def awesome!
226
- end
227
- end
228
- util_decorate(@xml, x)
229
- fragment = Nokogiri::XML::DocumentFragment.new(@xml, "<div>a</div><div>b</div>")
230
-
231
- assert node_set = fragment.css('div')
232
- assert node_set.respond_to?(:awesome!)
233
- node_set.each do |node|
234
- assert node.respond_to?(:awesome!), node.class
235
- end
236
- assert fragment.children.respond_to?(:awesome!), fragment.children.class
237
- end
238
-
239
- def test_decorator_is_applied_to_empty_set
240
- x = Module.new do
241
- def awesome!
242
- end
243
- end
244
- util_decorate(@xml, x)
245
- fragment = Nokogiri::XML::DocumentFragment.new(@xml, "")
246
- assert fragment.children.respond_to?(:awesome!), fragment.children.class
247
- end
248
-
249
- def test_add_node_to_doc_fragment_segfault
250
- frag = Nokogiri::XML::DocumentFragment.new(@xml, '<p>hello world</p>')
251
- Nokogiri::XML::Comment.new(frag,'moo')
252
- end
253
-
254
- def test_issue_1077_parsing_of_frozen_strings
255
- input = <<-EOS
256
- <?xml version="1.0" encoding="utf-8"?>
257
- <library>
258
- <book title="I like turtles"/>
259
- </library>
260
- EOS
261
- input.freeze
262
-
263
- Nokogiri::XML::DocumentFragment.parse(input) # assert_nothing_raised
264
- end
265
-
266
- if Nokogiri.uses_libxml?
267
- def test_for_libxml_in_context_fragment_parsing_bug_workaround
268
- 10.times do
269
- begin
270
- fragment = Nokogiri::XML.fragment("<div></div>")
271
- parent = fragment.children.first
272
- child = parent.parse("<h1></h1>").first
273
- parent.add_child child
274
- end
275
- GC.start
276
- end
277
- end
278
-
279
- def test_for_libxml_in_context_memory_badness_when_encountering_encoding_errors
280
- # see issue #643 for background
281
- # this test exists solely to raise an error during valgrind test runs.
282
- html = <<-EOHTML
283
- <html>
284
- <head>
285
- <meta http-equiv="Content-Type" content="text/html; charset=shizzle" />
286
- </head>
287
- <body>
288
- <div>Foo</div>
289
- </body>
290
- </html>
291
- EOHTML
292
- doc = Nokogiri::HTML html
293
- doc.at_css("div").replace("Bar")
294
- end
295
- end
296
- end
297
- end
298
- end
@@ -1,187 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestDTD < Nokogiri::TestCase
6
- def setup
7
- super
8
- @xml = Nokogiri::XML(File.open(XML_FILE))
9
- assert @dtd = @xml.internal_subset
10
- end
11
-
12
- def test_system_id
13
- assert_equal 'staff.dtd', @dtd.system_id
14
- end
15
-
16
- def test_external_id
17
- xml = Nokogiri::XML('<!DOCTYPE foo PUBLIC "bar" ""><foo />')
18
- assert dtd = xml.internal_subset, 'no internal subset'
19
- assert_equal 'bar', dtd.external_id
20
- end
21
-
22
- def test_html_dtd
23
- {
24
- 'MathML 2.0' => [
25
- '<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">',
26
- false,
27
- false,
28
- ],
29
- 'HTML 2.0' => [
30
- '<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">',
31
- true,
32
- false,
33
- ],
34
- 'HTML 3.2' => [
35
- '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">',
36
- true,
37
- false,
38
- ],
39
- 'XHTML Basic 1.0' => [
40
- '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">',
41
- true,
42
- false,
43
- ],
44
- 'XHTML 1.0 Strict' => [
45
- '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
46
- true,
47
- false,
48
- ],
49
- 'XHTML + MathML + SVG Profile (XHTML as the host language)' => [
50
- '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">',
51
- true,
52
- false,
53
- ],
54
- 'XHTML + MathML + SVG Profile (Using SVG as the host)' => [
55
- '<!DOCTYPE svg:svg PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">',
56
- false,
57
- false,
58
- ],
59
- 'CHTML 1.0' => [
60
- '<!DOCTYPE HTML PUBLIC "-//W3C//DTD Compact HTML 1.0 Draft//EN">',
61
- true,
62
- false,
63
- ],
64
- 'HTML 4.01 Strict' => [
65
- '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">',
66
- true,
67
- false,
68
- ],
69
- 'HTML 4.01 Transitional' => [
70
- '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">',
71
- true,
72
- false,
73
- ],
74
- 'HTML 4.01 Frameset' => [
75
- '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">',
76
- true,
77
- false,
78
- ],
79
- 'HTML 5' => [
80
- '<!DOCTYPE html>',
81
- true,
82
- true,
83
- ],
84
- 'HTML 5 legacy compatible' => [
85
- '<!DOCTYPE HTML SYSTEM "about:legacy-compat">',
86
- true,
87
- true,
88
- ],
89
- }.each { |name, (dtd_str, html_p, html5_p)|
90
- doc = Nokogiri(dtd_str)
91
- dtd = doc.internal_subset
92
- assert_instance_of Nokogiri::XML::DTD, dtd, name
93
- if html_p
94
- assert dtd.html_dtd?, name
95
- else
96
- refute dtd.html_dtd?, name
97
- end
98
- if html5_p
99
- assert dtd.html5_dtd?, name
100
- else
101
- refute dtd.html5_dtd?, name
102
- end
103
- }
104
- end
105
-
106
- def test_content
107
- assert_raise NoMethodError do
108
- @dtd.content
109
- end
110
- end
111
-
112
- def test_empty_attributes
113
- dtd = Nokogiri::HTML("<html></html>").internal_subset
114
- assert_equal Hash.new, dtd.attributes
115
- end
116
-
117
- def test_attributes
118
- assert_equal ['width'], @dtd.attributes.keys
119
- assert_equal '0', @dtd.attributes['width'].default
120
- end
121
-
122
- def test_keys
123
- assert_equal ['width'], @dtd.keys
124
- end
125
-
126
- def test_each
127
- hash = {}
128
- @dtd.each { |key, value| hash[key] = value }
129
- assert_equal @dtd.attributes, hash
130
- end
131
-
132
- def test_namespace
133
- assert_raise NoMethodError do
134
- @dtd.namespace
135
- end
136
- end
137
-
138
- def test_namespace_definitions
139
- assert_raise NoMethodError do
140
- @dtd.namespace_definitions
141
- end
142
- end
143
-
144
- def test_line
145
- assert_raise NoMethodError do
146
- @dtd.line
147
- end
148
- end
149
-
150
- def test_validate
151
- if Nokogiri.uses_libxml?
152
- list = @xml.internal_subset.validate @xml
153
- assert_equal 44, list.length
154
- else
155
- xml = Nokogiri::XML(File.open(XML_FILE)) {|cfg| cfg.dtdvalid}
156
- list = xml.internal_subset.validate xml
157
- assert_equal 40, list.length
158
- end
159
- end
160
-
161
- def test_external_subsets
162
- assert subset = @xml.internal_subset
163
- assert_equal 'staff', subset.name
164
- end
165
-
166
- def test_entities
167
- assert entities = @dtd.entities
168
- assert_equal %w[ ent1 ent2 ent3 ent4 ent5 ].sort, entities.keys.sort
169
- end
170
-
171
- def test_elements
172
- assert elements = @dtd.elements
173
- assert_equal %w[ br ], elements.keys
174
- assert_equal 'br', elements['br'].name
175
- end
176
-
177
- def test_notations
178
- assert notations = @dtd.notations
179
- assert_equal %w[ notation1 notation2 ].sort, notations.keys.sort
180
- assert notation1 = notations['notation1']
181
- assert_equal 'notation1', notation1.name
182
- assert_equal 'notation1File', notation1.public_id
183
- assert_nil notation1.system_id
184
- end
185
- end
186
- end
187
- end