nokogiri 1.8.5 → 1.13.6
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.
- checksums.yaml +4 -4
- data/Gemfile +3 -21
- data/LICENSE-DEPENDENCIES.md +1159 -868
- data/LICENSE.md +5 -28
- data/README.md +196 -90
- data/bin/nokogiri +63 -50
- data/dependencies.yml +13 -59
- data/ext/nokogiri/depend +38 -358
- data/ext/nokogiri/extconf.rb +750 -420
- data/ext/nokogiri/gumbo.c +584 -0
- data/ext/nokogiri/html4_document.c +166 -0
- data/ext/nokogiri/html4_element_description.c +294 -0
- data/ext/nokogiri/html4_entity_lookup.c +37 -0
- data/ext/nokogiri/html4_sax_parser_context.c +119 -0
- data/ext/nokogiri/html4_sax_push_parser.c +95 -0
- data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
- data/ext/nokogiri/nokogiri.c +228 -91
- data/ext/nokogiri/nokogiri.h +191 -89
- data/ext/nokogiri/test_global_handlers.c +40 -0
- data/ext/nokogiri/xml_attr.c +41 -36
- data/ext/nokogiri/xml_attribute_decl.c +18 -18
- data/ext/nokogiri/xml_cdata.c +13 -18
- data/ext/nokogiri/xml_comment.c +19 -26
- data/ext/nokogiri/xml_document.c +291 -216
- data/ext/nokogiri/xml_document_fragment.c +12 -16
- data/ext/nokogiri/xml_dtd.c +56 -50
- data/ext/nokogiri/xml_element_content.c +31 -26
- data/ext/nokogiri/xml_element_decl.c +22 -22
- data/ext/nokogiri/xml_encoding_handler.c +43 -18
- data/ext/nokogiri/xml_entity_decl.c +32 -30
- data/ext/nokogiri/xml_entity_reference.c +16 -18
- data/ext/nokogiri/xml_namespace.c +61 -52
- data/ext/nokogiri/xml_node.c +1044 -616
- data/ext/nokogiri/xml_node_set.c +174 -162
- data/ext/nokogiri/xml_processing_instruction.c +17 -19
- data/ext/nokogiri/xml_reader.c +226 -175
- data/ext/nokogiri/xml_relax_ng.c +52 -28
- data/ext/nokogiri/xml_sax_parser.c +112 -112
- data/ext/nokogiri/xml_sax_parser_context.c +112 -86
- data/ext/nokogiri/xml_sax_push_parser.c +36 -27
- data/ext/nokogiri/xml_schema.c +112 -33
- data/ext/nokogiri/xml_syntax_error.c +42 -21
- data/ext/nokogiri/xml_text.c +13 -17
- data/ext/nokogiri/xml_xpath_context.c +223 -115
- data/ext/nokogiri/xslt_stylesheet.c +265 -173
- data/gumbo-parser/CHANGES.md +63 -0
- data/gumbo-parser/Makefile +101 -0
- data/gumbo-parser/THANKS +27 -0
- data/gumbo-parser/src/Makefile +34 -0
- data/gumbo-parser/src/README.md +41 -0
- data/gumbo-parser/src/ascii.c +75 -0
- data/gumbo-parser/src/ascii.h +115 -0
- data/gumbo-parser/src/attribute.c +42 -0
- data/gumbo-parser/src/attribute.h +17 -0
- data/gumbo-parser/src/char_ref.c +22225 -0
- data/gumbo-parser/src/char_ref.h +29 -0
- data/gumbo-parser/src/char_ref.rl +2154 -0
- data/gumbo-parser/src/error.c +626 -0
- data/gumbo-parser/src/error.h +148 -0
- data/gumbo-parser/src/foreign_attrs.c +104 -0
- data/gumbo-parser/src/foreign_attrs.gperf +27 -0
- data/gumbo-parser/src/gumbo.h +943 -0
- data/gumbo-parser/src/insertion_mode.h +33 -0
- data/gumbo-parser/src/macros.h +91 -0
- data/gumbo-parser/src/parser.c +4875 -0
- data/gumbo-parser/src/parser.h +41 -0
- data/gumbo-parser/src/replacement.h +33 -0
- data/gumbo-parser/src/string_buffer.c +103 -0
- data/gumbo-parser/src/string_buffer.h +68 -0
- data/gumbo-parser/src/string_piece.c +48 -0
- data/gumbo-parser/src/svg_attrs.c +174 -0
- data/gumbo-parser/src/svg_attrs.gperf +77 -0
- data/gumbo-parser/src/svg_tags.c +137 -0
- data/gumbo-parser/src/svg_tags.gperf +55 -0
- data/gumbo-parser/src/tag.c +222 -0
- data/gumbo-parser/src/tag_lookup.c +382 -0
- data/gumbo-parser/src/tag_lookup.gperf +169 -0
- data/gumbo-parser/src/tag_lookup.h +13 -0
- data/gumbo-parser/src/token_buffer.c +79 -0
- data/gumbo-parser/src/token_buffer.h +71 -0
- data/gumbo-parser/src/token_type.h +17 -0
- data/gumbo-parser/src/tokenizer.c +3463 -0
- data/gumbo-parser/src/tokenizer.h +112 -0
- data/gumbo-parser/src/tokenizer_states.h +339 -0
- data/gumbo-parser/src/utf8.c +245 -0
- data/gumbo-parser/src/utf8.h +164 -0
- data/gumbo-parser/src/util.c +68 -0
- data/gumbo-parser/src/util.h +30 -0
- data/gumbo-parser/src/vector.c +111 -0
- data/gumbo-parser/src/vector.h +45 -0
- data/lib/nokogiri/class_resolver.rb +67 -0
- data/lib/nokogiri/css/node.rb +10 -8
- data/lib/nokogiri/css/parser.rb +397 -377
- data/lib/nokogiri/css/parser.y +250 -245
- data/lib/nokogiri/css/parser_extras.rb +54 -49
- data/lib/nokogiri/css/syntax_error.rb +3 -1
- data/lib/nokogiri/css/tokenizer.rb +107 -104
- data/lib/nokogiri/css/tokenizer.rex +3 -2
- data/lib/nokogiri/css/xpath_visitor.rb +218 -91
- data/lib/nokogiri/css.rb +50 -17
- data/lib/nokogiri/decorators/slop.rb +9 -7
- data/lib/nokogiri/extension.rb +31 -0
- data/lib/nokogiri/gumbo.rb +15 -0
- data/lib/nokogiri/html.rb +38 -27
- data/lib/nokogiri/{html → html4}/builder.rb +4 -2
- data/lib/nokogiri/{html → html4}/document.rb +103 -105
- data/lib/nokogiri/html4/document_fragment.rb +54 -0
- data/lib/nokogiri/{html → html4}/element_description.rb +3 -1
- data/lib/nokogiri/html4/element_description_defaults.rb +578 -0
- data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
- data/lib/nokogiri/{html → html4}/sax/parser.rb +17 -16
- data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
- data/lib/nokogiri/{html → html4}/sax/push_parser.rb +12 -11
- data/lib/nokogiri/html4.rb +46 -0
- data/lib/nokogiri/html5/document.rb +91 -0
- data/lib/nokogiri/html5/document_fragment.rb +83 -0
- data/lib/nokogiri/html5/node.rb +100 -0
- data/lib/nokogiri/html5.rb +478 -0
- data/lib/nokogiri/jruby/dependencies.rb +21 -0
- data/lib/nokogiri/syntax_error.rb +2 -0
- data/lib/nokogiri/version/constant.rb +6 -0
- data/lib/nokogiri/version/info.rb +222 -0
- data/lib/nokogiri/version.rb +3 -108
- data/lib/nokogiri/xml/attr.rb +6 -3
- data/lib/nokogiri/xml/attribute_decl.rb +3 -1
- data/lib/nokogiri/xml/builder.rb +97 -53
- data/lib/nokogiri/xml/cdata.rb +3 -1
- data/lib/nokogiri/xml/character_data.rb +2 -0
- data/lib/nokogiri/xml/document.rb +224 -86
- data/lib/nokogiri/xml/document_fragment.rb +57 -44
- data/lib/nokogiri/xml/dtd.rb +4 -2
- data/lib/nokogiri/xml/element_content.rb +2 -0
- data/lib/nokogiri/xml/element_decl.rb +3 -1
- data/lib/nokogiri/xml/entity_decl.rb +4 -2
- data/lib/nokogiri/xml/entity_reference.rb +2 -0
- data/lib/nokogiri/xml/namespace.rb +3 -0
- data/lib/nokogiri/xml/node/save_options.rb +10 -5
- data/lib/nokogiri/xml/node.rb +895 -377
- data/lib/nokogiri/xml/node_set.rb +92 -65
- data/lib/nokogiri/xml/notation.rb +13 -0
- data/lib/nokogiri/xml/parse_options.rb +22 -8
- data/lib/nokogiri/xml/pp/character_data.rb +9 -6
- data/lib/nokogiri/xml/pp/node.rb +25 -26
- data/lib/nokogiri/xml/pp.rb +4 -2
- data/lib/nokogiri/xml/processing_instruction.rb +3 -1
- data/lib/nokogiri/xml/reader.rb +23 -28
- data/lib/nokogiri/xml/relax_ng.rb +8 -2
- data/lib/nokogiri/xml/sax/document.rb +45 -49
- data/lib/nokogiri/xml/sax/parser.rb +38 -34
- data/lib/nokogiri/xml/sax/parser_context.rb +8 -3
- data/lib/nokogiri/xml/sax/push_parser.rb +6 -5
- data/lib/nokogiri/xml/sax.rb +6 -4
- data/lib/nokogiri/xml/schema.rb +19 -9
- data/lib/nokogiri/xml/searchable.rb +112 -72
- data/lib/nokogiri/xml/syntax_error.rb +6 -4
- data/lib/nokogiri/xml/text.rb +2 -0
- data/lib/nokogiri/xml/xpath/syntax_error.rb +4 -2
- data/lib/nokogiri/xml/xpath.rb +15 -4
- data/lib/nokogiri/xml/xpath_context.rb +3 -3
- data/lib/nokogiri/xml.rb +38 -37
- data/lib/nokogiri/xslt/stylesheet.rb +3 -1
- data/lib/nokogiri/xslt.rb +29 -20
- data/lib/nokogiri.rb +49 -65
- data/lib/xsd/xmlparser/nokogiri.rb +26 -24
- data/patches/libxml2/0001-Remove-script-macro-support.patch +40 -0
- data/patches/libxml2/0002-Update-entities-to-remove-handling-of-ssi.patch +44 -0
- data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
- data/patches/libxml2/0004-use-glibc-strlen.patch +53 -0
- data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
- data/patches/libxml2/0006-update-automake-files-for-arm64.patch +3040 -0
- data/patches/libxml2/0008-htmlParseComment-handle-abruptly-closed-comments.patch +61 -0
- data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
- data/patches/libxslt/0001-update-automake-files-for-arm64.patch +3037 -0
- data/ports/archives/libxml2-2.9.14.tar.xz +0 -0
- data/ports/archives/libxslt-1.1.35.tar.xz +0 -0
- metadata +220 -266
- data/.autotest +0 -22
- data/.cross_rubies +0 -8
- data/.editorconfig +0 -17
- data/.gemtest +0 -0
- data/.travis.yml +0 -63
- data/CHANGELOG.md +0 -1368
- data/CONTRIBUTING.md +0 -42
- data/C_CODING_STYLE.rdoc +0 -33
- data/Gemfile-libxml-ruby +0 -3
- data/Manifest.txt +0 -370
- data/ROADMAP.md +0 -111
- data/Rakefile +0 -348
- data/SECURITY.md +0 -19
- data/STANDARD_RESPONSES.md +0 -47
- data/Y_U_NO_GEMSPEC.md +0 -155
- data/appveyor.yml +0 -29
- data/build_all +0 -44
- data/ext/nokogiri/html_document.c +0 -170
- data/ext/nokogiri/html_document.h +0 -10
- data/ext/nokogiri/html_element_description.c +0 -279
- data/ext/nokogiri/html_element_description.h +0 -10
- data/ext/nokogiri/html_entity_lookup.c +0 -32
- data/ext/nokogiri/html_entity_lookup.h +0 -8
- data/ext/nokogiri/html_sax_parser_context.c +0 -116
- data/ext/nokogiri/html_sax_parser_context.h +0 -11
- data/ext/nokogiri/html_sax_push_parser.c +0 -87
- data/ext/nokogiri/html_sax_push_parser.h +0 -9
- data/ext/nokogiri/xml_attr.h +0 -9
- data/ext/nokogiri/xml_attribute_decl.h +0 -9
- data/ext/nokogiri/xml_cdata.h +0 -9
- data/ext/nokogiri/xml_comment.h +0 -9
- data/ext/nokogiri/xml_document.h +0 -23
- data/ext/nokogiri/xml_document_fragment.h +0 -10
- data/ext/nokogiri/xml_dtd.h +0 -10
- data/ext/nokogiri/xml_element_content.h +0 -10
- data/ext/nokogiri/xml_element_decl.h +0 -9
- data/ext/nokogiri/xml_encoding_handler.h +0 -8
- data/ext/nokogiri/xml_entity_decl.h +0 -10
- data/ext/nokogiri/xml_entity_reference.h +0 -9
- data/ext/nokogiri/xml_io.c +0 -61
- data/ext/nokogiri/xml_io.h +0 -11
- data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
- data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
- data/ext/nokogiri/xml_namespace.h +0 -15
- data/ext/nokogiri/xml_node.h +0 -13
- data/ext/nokogiri/xml_node_set.h +0 -12
- data/ext/nokogiri/xml_processing_instruction.h +0 -9
- data/ext/nokogiri/xml_reader.h +0 -10
- data/ext/nokogiri/xml_relax_ng.h +0 -9
- data/ext/nokogiri/xml_sax_parser.h +0 -39
- data/ext/nokogiri/xml_sax_parser_context.h +0 -10
- data/ext/nokogiri/xml_sax_push_parser.h +0 -9
- data/ext/nokogiri/xml_schema.h +0 -9
- data/ext/nokogiri/xml_syntax_error.h +0 -13
- data/ext/nokogiri/xml_text.h +0 -9
- data/ext/nokogiri/xml_xpath_context.h +0 -10
- data/ext/nokogiri/xslt_stylesheet.h +0 -14
- data/lib/nokogiri/html/document_fragment.rb +0 -49
- data/lib/nokogiri/html/element_description_defaults.rb +0 -671
- data/lib/nokogiri/html/sax/parser_context.rb +0 -16
- data/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +0 -78
- data/patches/libxml2/0002-Fix-nullptr-deref-with-XPath-logic-ops.patch +0 -54
- data/patches/libxml2/0003-Fix-infinite-loop-in-LZMA-decompression.patch +0 -50
- data/patches/sort-patches-by-date +0 -25
- data/ports/archives/libxml2-2.9.8.tar.gz +0 -0
- data/ports/archives/libxslt-1.1.32.tar.gz +0 -0
- data/suppressions/README.txt +0 -1
- data/suppressions/nokogiri_ruby-2.supp +0 -10
- data/tasks/test.rb +0 -100
- data/test/css/test_nthiness.rb +0 -226
- data/test/css/test_parser.rb +0 -386
- data/test/css/test_tokenizer.rb +0 -215
- data/test/css/test_xpath_visitor.rb +0 -96
- data/test/decorators/test_slop.rb +0 -23
- data/test/files/2ch.html +0 -108
- data/test/files/GH_1042.html +0 -18
- data/test/files/address_book.rlx +0 -12
- data/test/files/address_book.xml +0 -10
- data/test/files/atom.xml +0 -344
- data/test/files/bar/bar.xsd +0 -4
- data/test/files/bogus.xml +0 -0
- data/test/files/dont_hurt_em_why.xml +0 -422
- data/test/files/encoding.html +0 -82
- data/test/files/encoding.xhtml +0 -84
- data/test/files/exslt.xml +0 -8
- data/test/files/exslt.xslt +0 -35
- data/test/files/foo/foo.xsd +0 -4
- data/test/files/metacharset.html +0 -10
- data/test/files/namespace_pressure_test.xml +0 -1684
- data/test/files/noencoding.html +0 -47
- data/test/files/po.xml +0 -32
- data/test/files/po.xsd +0 -66
- data/test/files/saml/saml20assertion_schema.xsd +0 -283
- data/test/files/saml/saml20protocol_schema.xsd +0 -302
- data/test/files/saml/xenc_schema.xsd +0 -146
- data/test/files/saml/xmldsig_schema.xsd +0 -318
- data/test/files/shift_jis.html +0 -10
- data/test/files/shift_jis.xml +0 -5
- data/test/files/shift_jis_no_charset.html +0 -9
- data/test/files/slow-xpath.xml +0 -25509
- data/test/files/snuggles.xml +0 -3
- data/test/files/staff.dtd +0 -10
- data/test/files/staff.xml +0 -59
- data/test/files/staff.xslt +0 -32
- data/test/files/test_document_url/bar.xml +0 -2
- data/test/files/test_document_url/document.dtd +0 -4
- data/test/files/test_document_url/document.xml +0 -6
- data/test/files/tlm.html +0 -851
- data/test/files/to_be_xincluded.xml +0 -2
- data/test/files/valid_bar.xml +0 -2
- data/test/files/xinclude.xml +0 -4
- data/test/helper.rb +0 -271
- data/test/html/sax/test_parser.rb +0 -168
- data/test/html/sax/test_parser_context.rb +0 -46
- data/test/html/sax/test_parser_text.rb +0 -163
- data/test/html/sax/test_push_parser.rb +0 -87
- data/test/html/test_attributes.rb +0 -85
- data/test/html/test_builder.rb +0 -164
- data/test/html/test_document.rb +0 -712
- data/test/html/test_document_encoding.rb +0 -143
- data/test/html/test_document_fragment.rb +0 -310
- data/test/html/test_element_description.rb +0 -105
- data/test/html/test_named_characters.rb +0 -14
- data/test/html/test_node.rb +0 -212
- data/test/html/test_node_encoding.rb +0 -91
- data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
- data/test/namespaces/test_namespaces_aliased_default.rb +0 -24
- data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
- data/test/namespaces/test_namespaces_in_cloned_doc.rb +0 -31
- data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
- data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -80
- data/test/namespaces/test_namespaces_preservation.rb +0 -31
- data/test/test_convert_xpath.rb +0 -135
- data/test/test_css_cache.rb +0 -47
- data/test/test_encoding_handler.rb +0 -48
- data/test/test_memory_leak.rb +0 -156
- data/test/test_nokogiri.rb +0 -138
- data/test/test_soap4r_sax.rb +0 -52
- data/test/test_xslt_transforms.rb +0 -314
- data/test/xml/node/test_save_options.rb +0 -28
- data/test/xml/node/test_subclass.rb +0 -44
- data/test/xml/sax/test_parser.rb +0 -402
- data/test/xml/sax/test_parser_context.rb +0 -115
- data/test/xml/sax/test_parser_text.rb +0 -202
- data/test/xml/sax/test_push_parser.rb +0 -265
- data/test/xml/test_attr.rb +0 -74
- data/test/xml/test_attribute_decl.rb +0 -86
- data/test/xml/test_builder.rb +0 -341
- data/test/xml/test_c14n.rb +0 -180
- data/test/xml/test_cdata.rb +0 -54
- data/test/xml/test_comment.rb +0 -40
- data/test/xml/test_document.rb +0 -982
- data/test/xml/test_document_encoding.rb +0 -31
- data/test/xml/test_document_fragment.rb +0 -298
- data/test/xml/test_dtd.rb +0 -187
- data/test/xml/test_dtd_encoding.rb +0 -31
- data/test/xml/test_element_content.rb +0 -56
- data/test/xml/test_element_decl.rb +0 -73
- data/test/xml/test_entity_decl.rb +0 -122
- data/test/xml/test_entity_reference.rb +0 -262
- data/test/xml/test_namespace.rb +0 -96
- data/test/xml/test_node.rb +0 -1325
- data/test/xml/test_node_attributes.rb +0 -115
- data/test/xml/test_node_encoding.rb +0 -75
- data/test/xml/test_node_inheritance.rb +0 -32
- data/test/xml/test_node_reparenting.rb +0 -592
- data/test/xml/test_node_set.rb +0 -809
- data/test/xml/test_parse_options.rb +0 -64
- data/test/xml/test_processing_instruction.rb +0 -30
- data/test/xml/test_reader.rb +0 -620
- data/test/xml/test_reader_encoding.rb +0 -134
- data/test/xml/test_relax_ng.rb +0 -60
- data/test/xml/test_schema.rb +0 -142
- data/test/xml/test_syntax_error.rb +0 -36
- data/test/xml/test_text.rb +0 -60
- data/test/xml/test_unparented_node.rb +0 -483
- data/test/xml/test_xinclude.rb +0 -83
- data/test/xml/test_xpath.rb +0 -470
- data/test/xslt/test_custom_functions.rb +0 -133
- 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
|
data/test/xml/test_dtd.rb
DELETED
@@ -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
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require "helper"
|
4
|
-
|
5
|
-
module Nokogiri
|
6
|
-
module XML
|
7
|
-
class TestDTDEncoding < Nokogiri::TestCase
|
8
|
-
def setup
|
9
|
-
super
|
10
|
-
@xml = Nokogiri::XML(File.read(XML_FILE), XML_FILE, 'UTF-8')
|
11
|
-
assert @dtd = @xml.internal_subset
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_entities
|
15
|
-
@dtd.entities.each do |k,v|
|
16
|
-
assert_equal @xml.encoding, k.encoding.name
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_notations
|
21
|
-
@dtd.notations.each do |k,notation|
|
22
|
-
assert_equal 'UTF-8', k.encoding.name
|
23
|
-
%w{ name public_id system_id }.each do |attribute|
|
24
|
-
v = notation.send(:"#{attribute}") || next
|
25
|
-
assert_equal 'UTF-8', v.encoding.name
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestElementContent < Nokogiri::TestCase
|
6
|
-
def setup
|
7
|
-
super
|
8
|
-
@xml = Nokogiri::XML(<<-eoxml)
|
9
|
-
<?xml version="1.0"?><?TEST-STYLE PIDATA?>
|
10
|
-
<!DOCTYPE staff SYSTEM "staff.dtd" [
|
11
|
-
<!ELEMENT br EMPTY>
|
12
|
-
<!ELEMENT div1 (head, (p | list | note)*, div2*)>
|
13
|
-
<!ELEMENT div2 (tender:love)>
|
14
|
-
]>
|
15
|
-
<root/>
|
16
|
-
eoxml
|
17
|
-
@elements = @xml.internal_subset.children.find_all { |x|
|
18
|
-
x.type == 15
|
19
|
-
}
|
20
|
-
@tree = @elements[1].content
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_allowed_content_not_defined
|
24
|
-
assert_nil @elements.first.content
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_document
|
28
|
-
assert @tree
|
29
|
-
assert_equal @xml, @tree.document
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_type
|
33
|
-
assert_equal ElementContent::SEQ, @tree.type
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_children
|
37
|
-
assert_equal 2, @tree.children.length
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_name
|
41
|
-
assert_nil @tree.name
|
42
|
-
assert_equal 'head', @tree.children.first.name
|
43
|
-
assert_equal 'p', @tree.children[1].children.first.children.first.name
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_occur
|
47
|
-
assert_equal ElementContent::ONCE, @tree.occur
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_prefix
|
51
|
-
assert_nil @tree.prefix
|
52
|
-
assert_equal 'tender', @elements[2].content.prefix
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,73 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestElementDecl < Nokogiri::TestCase
|
6
|
-
def setup
|
7
|
-
super
|
8
|
-
@xml = Nokogiri::XML(<<-eoxml)
|
9
|
-
<?xml version="1.0"?><?TEST-STYLE PIDATA?>
|
10
|
-
<!DOCTYPE staff SYSTEM "staff.dtd" [
|
11
|
-
<!ELEMENT br EMPTY>
|
12
|
-
<!ELEMENT div1 (head, (p | list | note)*, div2*)>
|
13
|
-
<!ELEMENT my:way EMPTY>
|
14
|
-
<!ATTLIST br width CDATA "0">
|
15
|
-
<!ATTLIST br height CDATA "0">
|
16
|
-
]>
|
17
|
-
<root/>
|
18
|
-
eoxml
|
19
|
-
@elements = @xml.internal_subset.children.find_all { |x|
|
20
|
-
x.type == 15
|
21
|
-
}
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_inspect
|
25
|
-
e = @elements.first
|
26
|
-
assert_equal(
|
27
|
-
"#<#{e.class.name}:#{sprintf("0x%x", e.object_id)} #{e.to_s.inspect}>",
|
28
|
-
e.inspect
|
29
|
-
)
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_prefix
|
33
|
-
assert_nil @elements[1].prefix
|
34
|
-
assert_equal 'my', @elements[2].prefix
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_line
|
38
|
-
assert_raise NoMethodError do
|
39
|
-
@elements.first.line
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_namespace
|
44
|
-
assert_raise NoMethodError do
|
45
|
-
@elements.first.namespace
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_namespace_definitions
|
50
|
-
assert_raise NoMethodError do
|
51
|
-
@elements.first.namespace_definitions
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_element_type
|
56
|
-
assert_equal 1, @elements.first.element_type
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_type
|
60
|
-
assert_equal 15, @elements.first.type
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_class
|
64
|
-
assert_instance_of Nokogiri::XML::ElementDecl, @elements.first
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_attributes
|
68
|
-
assert_equal 2, @elements.first.attribute_nodes.length
|
69
|
-
assert_equal 'width', @elements.first.attribute_nodes.first.name
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|