nokogiri 1.8.5 → 1.13.9
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 +765 -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 +199 -88
- data/ext/nokogiri/test_global_handlers.c +40 -0
- data/ext/nokogiri/xml_attr.c +42 -37
- data/ext/nokogiri/xml_attribute_decl.c +21 -21
- data/ext/nokogiri/xml_cdata.c +14 -19
- data/ext/nokogiri/xml_comment.c +19 -26
- data/ext/nokogiri/xml_document.c +296 -217
- data/ext/nokogiri/xml_document_fragment.c +12 -16
- data/ext/nokogiri/xml_dtd.c +64 -58
- data/ext/nokogiri/xml_element_content.c +31 -26
- data/ext/nokogiri/xml_element_decl.c +25 -25
- data/ext/nokogiri/xml_encoding_handler.c +43 -18
- data/ext/nokogiri/xml_entity_decl.c +37 -35
- data/ext/nokogiri/xml_entity_reference.c +16 -18
- data/ext/nokogiri/xml_namespace.c +99 -54
- data/ext/nokogiri/xml_node.c +1107 -658
- data/ext/nokogiri/xml_node_set.c +178 -166
- data/ext/nokogiri/xml_processing_instruction.c +17 -19
- data/ext/nokogiri/xml_reader.c +277 -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 +114 -35
- data/ext/nokogiri/xml_syntax_error.c +42 -21
- data/ext/nokogiri/xml_text.c +14 -18
- data/ext/nokogiri/xml_xpath_context.c +226 -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 +21 -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/0005-avoid-isnan-isinf.patch +81 -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.10.3.tar.xz +0 -0
- data/ports/archives/libxslt-1.1.37.tar.xz +0 -0
- metadata +211 -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
data/test/html/test_node.rb
DELETED
@@ -1,212 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
require 'nkf'
|
4
|
-
|
5
|
-
module Nokogiri
|
6
|
-
module HTML
|
7
|
-
class TestNode < Nokogiri::TestCase
|
8
|
-
def setup
|
9
|
-
super
|
10
|
-
@html = Nokogiri::HTML(<<-eohtml)
|
11
|
-
<html>
|
12
|
-
<head></head>
|
13
|
-
<body>
|
14
|
-
<div class='baz'><a href="foo" class="bar">first</a></div>
|
15
|
-
</body>
|
16
|
-
</html>
|
17
|
-
eohtml
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_to_a
|
21
|
-
assert_equal [['class', 'bar'], ['href', 'foo']],@html.at('a').to_a.sort
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_attr
|
25
|
-
node = @html.at('div.baz')
|
26
|
-
assert_equal node['class'], node.attr('class')
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_get_attribute
|
30
|
-
element = @html.at('div')
|
31
|
-
assert_equal 'baz', element.get_attribute('class')
|
32
|
-
assert_equal 'baz', element['class']
|
33
|
-
element['href'] = "javascript:alert(\"AGGA-KA-BOO!\")"
|
34
|
-
assert_match(/%22AGGA-KA-BOO!%22/, element.to_html)
|
35
|
-
end
|
36
|
-
|
37
|
-
# The HTML parser ignores namespaces, so even properly declared namespaces
|
38
|
-
# are treated as as undeclared and have to be accessed via prefix:tagname
|
39
|
-
def test_ns_attribute
|
40
|
-
html = '<i foo:bar="baz"></i>'
|
41
|
-
doc = Nokogiri::HTML(html)
|
42
|
-
assert_equal 'baz', (doc%'i')['foo:bar']
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_css_path_round_trip
|
46
|
-
doc = Nokogiri::HTML(File.read(HTML_FILE))
|
47
|
-
%w{ #header small div[2] div.post body }.each do |css_sel|
|
48
|
-
ele = doc.at css_sel
|
49
|
-
assert_equal ele, doc.at(ele.css_path), ele.css_path
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_path_round_trip
|
54
|
-
doc = Nokogiri::HTML(File.read(HTML_FILE))
|
55
|
-
%w{ #header small div[2] div.post body }.each do |css_sel|
|
56
|
-
ele = doc.at css_sel
|
57
|
-
assert_equal ele, doc.at(ele.path), ele.path
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_append_with_document
|
62
|
-
assert_raises(ArgumentError) do
|
63
|
-
@html.root << Nokogiri::HTML::Document.new
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
###
|
68
|
-
# Make sure a document that doesn't declare a meta encoding returns
|
69
|
-
# nil.
|
70
|
-
def test_meta_encoding
|
71
|
-
assert_nil @html.meta_encoding
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_description
|
75
|
-
assert desc = @html.at('a.bar').description
|
76
|
-
assert_equal 'a', desc.name
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_ancestors_with_selector
|
80
|
-
assert node = @html.at('a.bar').child
|
81
|
-
assert list = node.ancestors('.baz')
|
82
|
-
assert_equal 1, list.length
|
83
|
-
assert_equal 'div', list.first.name
|
84
|
-
end
|
85
|
-
|
86
|
-
def test_matches_inside_fragment
|
87
|
-
fragment = DocumentFragment.new @html
|
88
|
-
fragment << XML::Node.new('a', @html)
|
89
|
-
|
90
|
-
a = fragment.children.last
|
91
|
-
assert a.matches?('a'), 'a should match'
|
92
|
-
end
|
93
|
-
|
94
|
-
def test_css_matches?
|
95
|
-
assert node = @html.at('a.bar')
|
96
|
-
assert node.matches?('a.bar')
|
97
|
-
end
|
98
|
-
|
99
|
-
def test_xpath_matches?
|
100
|
-
assert node = @html.at('//a')
|
101
|
-
assert node.matches?('//a')
|
102
|
-
end
|
103
|
-
|
104
|
-
def test_unlink_then_swap
|
105
|
-
node = @html.at('a')
|
106
|
-
node.unlink
|
107
|
-
|
108
|
-
another_node = @html.at('div')
|
109
|
-
assert another_node, 'should have a node'
|
110
|
-
|
111
|
-
# This used to segv
|
112
|
-
assert node.add_previous_sibling another_node
|
113
|
-
end
|
114
|
-
|
115
|
-
def test_swap
|
116
|
-
@html.at('div').swap('<a href="foo">bar</a>')
|
117
|
-
a_tag = @html.css('a').first
|
118
|
-
assert_equal 'body', a_tag.parent.name
|
119
|
-
assert_equal 0, @html.css('div').length
|
120
|
-
end
|
121
|
-
|
122
|
-
def test_swap_with_regex_characters
|
123
|
-
@html.at('div').swap('<a href="foo">ba)r</a>')
|
124
|
-
a_tag = @html.css('a').first
|
125
|
-
assert_equal 'ba)r', a_tag.text
|
126
|
-
end
|
127
|
-
|
128
|
-
def test_attribute_decodes_entities
|
129
|
-
node = @html.at('div')
|
130
|
-
node['href'] = 'foo&bar'
|
131
|
-
assert_equal 'foo&bar', node['href']
|
132
|
-
node['href'] += '&baz'
|
133
|
-
assert_equal 'foo&bar&baz', node['href']
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_parse_config_option
|
137
|
-
node = @html.at('div')
|
138
|
-
options = nil
|
139
|
-
node.parse("<div></div>") do |config|
|
140
|
-
options = config
|
141
|
-
end
|
142
|
-
assert_equal Nokogiri::XML::ParseOptions::DEFAULT_HTML, options.to_i
|
143
|
-
end
|
144
|
-
|
145
|
-
def test_fragment_handler_does_not_regurge_on_invalid_attributes
|
146
|
-
iframe = %Q{<iframe style="width: 0%; height: 0px" src="http://someurl" allowtransparency></iframe>}
|
147
|
-
assert @html.at('div').fragment(iframe)
|
148
|
-
end
|
149
|
-
|
150
|
-
def test_fragment
|
151
|
-
fragment = @html.fragment(<<-eohtml)
|
152
|
-
hello
|
153
|
-
<div class="foo">
|
154
|
-
<p>bar</p>
|
155
|
-
</div>
|
156
|
-
world
|
157
|
-
eohtml
|
158
|
-
assert_match(/^hello/, fragment.inner_html.strip)
|
159
|
-
assert_equal 3, fragment.children.length
|
160
|
-
assert p_tag = fragment.css('p').first
|
161
|
-
assert_equal 'div', p_tag.parent.name
|
162
|
-
assert_equal 'foo', p_tag.parent['class']
|
163
|
-
end
|
164
|
-
|
165
|
-
def test_fragment_serialization
|
166
|
-
fragment = Nokogiri::HTML.fragment("<div>foo</div>")
|
167
|
-
assert_equal "<div>foo</div>", fragment.serialize.chomp
|
168
|
-
assert_equal "<div>foo</div>", fragment.to_xml.chomp
|
169
|
-
assert_equal "<div>foo</div>", fragment.inner_html
|
170
|
-
assert_equal "<div>foo</div>", fragment.to_html
|
171
|
-
assert_equal "<div>foo</div>", fragment.to_s
|
172
|
-
end
|
173
|
-
|
174
|
-
def test_to_html_does_not_contain_entities
|
175
|
-
return unless defined?(NKF) # NKF is not implemented on Rubinius as of 2009-11-23
|
176
|
-
html = NKF.nkf("-e --msdos", <<-EOH)
|
177
|
-
<html><body>
|
178
|
-
<p> test paragraph
|
179
|
-
foo bar </p>
|
180
|
-
</body></html>
|
181
|
-
EOH
|
182
|
-
nokogiri = Nokogiri::HTML.parse(html)
|
183
|
-
|
184
|
-
if RUBY_PLATFORM =~ /java/
|
185
|
-
# NKF linebreak modes are not supported as of jruby 1.2
|
186
|
-
# see http://jira.codehaus.org/browse/JRUBY-3602 for status
|
187
|
-
assert_equal "<p>testparagraph\nfoobar</p>",
|
188
|
-
nokogiri.at("p").to_html.gsub(/ /, '')
|
189
|
-
else
|
190
|
-
assert_equal "<p>testparagraph\r\nfoobar</p>",
|
191
|
-
nokogiri.at("p").to_html.gsub(/ /, '')
|
192
|
-
end
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
def test_GH_1042
|
197
|
-
file = File.join(ASSETS_DIR, 'GH_1042.html');
|
198
|
-
html = Nokogiri::HTML(File.read(file))
|
199
|
-
table = html.xpath("//table")[1]
|
200
|
-
trs = table.xpath("tr").drop(1)
|
201
|
-
|
202
|
-
# the jruby inplementation of drop uses dup() on the IRubyObject (which
|
203
|
-
# is NOT the same dup() method on the ruby Object) which produces a
|
204
|
-
# shallow clone. a shallow of valid XMLNode triggers several
|
205
|
-
# NullPointerException on inspect() since loads of invariants
|
206
|
-
# are not set. the fix for GH1042 ensures a proper working clone.
|
207
|
-
assert_nothing_raised do
|
208
|
-
trs.inspect
|
209
|
-
end
|
210
|
-
end
|
211
|
-
end
|
212
|
-
end
|
@@ -1,91 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require "helper"
|
3
|
-
|
4
|
-
module Nokogiri
|
5
|
-
module HTML
|
6
|
-
class TestNodeEncoding < Nokogiri::TestCase
|
7
|
-
def setup
|
8
|
-
super
|
9
|
-
@html = Nokogiri::HTML(File.open(NICH_FILE, "rb"))
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_get_attribute
|
13
|
-
node = @html.css('a').first
|
14
|
-
assert_equal 'UTF-8', node['href'].encoding.name
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_text_encoding_is_utf_8
|
18
|
-
assert_equal 'UTF-8', @html.text.encoding.name
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_serialize_encoding_html
|
22
|
-
assert_equal @html.encoding.downcase,
|
23
|
-
@html.serialize.encoding.name.downcase
|
24
|
-
|
25
|
-
@doc = Nokogiri::HTML(@html.serialize)
|
26
|
-
assert_equal @html.serialize, @doc.serialize
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_default_encoding
|
30
|
-
doc = Nokogiri::HTML(nil)
|
31
|
-
assert_nil doc.encoding
|
32
|
-
assert_equal 'UTF-8', doc.serialize.encoding.name
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_encode_special_chars
|
36
|
-
foo = @html.css('a').first.encode_special_chars('foo')
|
37
|
-
assert_equal 'UTF-8', foo.encoding.name
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_content
|
41
|
-
node = @html.css('a').first
|
42
|
-
assert_equal 'UTF-8', node.content.encoding.name
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_name
|
46
|
-
node = @html.css('a').first
|
47
|
-
assert_equal 'UTF-8', node.name.encoding.name
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_path
|
51
|
-
node = @html.css('a').first
|
52
|
-
assert_equal 'UTF-8', node.path.encoding.name
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_inner_html
|
56
|
-
doc = Nokogiri::HTML File.open(SHIFT_JIS_HTML, 'rb')
|
57
|
-
|
58
|
-
hello = "こんにちは"
|
59
|
-
|
60
|
-
contents = doc.at('h2').inner_html
|
61
|
-
assert_equal doc.encoding, contents.encoding.name
|
62
|
-
assert_match hello.encode('Shift_JIS'), contents
|
63
|
-
|
64
|
-
contents = doc.at('h2').inner_html(:encoding => 'UTF-8')
|
65
|
-
assert_match hello, contents
|
66
|
-
|
67
|
-
doc.encoding = 'UTF-8'
|
68
|
-
contents = doc.at('h2').inner_html
|
69
|
-
assert_match hello, contents
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_encoding_GH_1113
|
73
|
-
doc = Nokogiri::HTML::Document.new
|
74
|
-
hex = '<p>🍀</p>'
|
75
|
-
decimal = '<p>🍀</p>'
|
76
|
-
encoded = '<p>🍀</p>'
|
77
|
-
|
78
|
-
doc.encoding = 'UTF-8'
|
79
|
-
[hex, decimal, encoded].each do |document|
|
80
|
-
assert_equal encoded, doc.fragment(document).to_s
|
81
|
-
end
|
82
|
-
|
83
|
-
doc.encoding = 'US-ASCII'
|
84
|
-
expected = Nokogiri.jruby? ? hex : decimal
|
85
|
-
[hex, decimal].each do |document|
|
86
|
-
assert_equal expected, doc.fragment(document).to_s
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestAdditionalNamespacesInBuilderDoc < Nokogiri::TestCase
|
6
|
-
def test_builder_namespaced_root_node_ns
|
7
|
-
b = Nokogiri::XML::Builder.new do |x|
|
8
|
-
x[:foo].RDF(:'xmlns:foo' => 'http://foo.io')
|
9
|
-
end
|
10
|
-
assert_equal 'http://foo.io', b.doc.root.namespace.href
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestAliasedDefaultNamespaces < Nokogiri::TestCase
|
6
|
-
def setup
|
7
|
-
super
|
8
|
-
end
|
9
|
-
|
10
|
-
def test_alised_default_namespace_on_parse
|
11
|
-
doc = Nokogiri::XML('<apple xmlns="ns:fruit" xmlns:fruit="ns:fruit" />')
|
12
|
-
ns = doc.root.namespaces
|
13
|
-
assert_equal "ns:fruit", ns["xmlns:fruit"], "Should have parsed aliased default namespace"
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_add_aliased_default_namespace
|
17
|
-
doc = Nokogiri::XML('<apple xmlns="ns:fruit" />')
|
18
|
-
doc.root.add_namespace_definition("fruit", "ns:fruit")
|
19
|
-
ns = doc.root.namespaces
|
20
|
-
assert_equal "ns:fruit", ns["xmlns:fruit"],"Should have added aliased default namespace"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestNamespacesInBuilderDoc < Nokogiri::TestCase
|
6
|
-
def setup
|
7
|
-
super
|
8
|
-
b = Nokogiri::XML::Builder.new do |x|
|
9
|
-
x.fruit(:xmlns => 'ns:fruit', :'xmlns:veg' => 'ns:veg', :'xmlns:xlink' => 'http://www.w3.org/1999/xlink') do
|
10
|
-
x.pear { x.bosc }
|
11
|
-
x.orange
|
12
|
-
x[:veg].carrot do
|
13
|
-
x.cheese(:xmlns => 'ns:dairy', :'xlink:href' => 'http://example.com/cheese/')
|
14
|
-
end
|
15
|
-
x[:meat].bacon(:'xmlns:meat' => 'ns:meat') do
|
16
|
-
x.apple :count => 2
|
17
|
-
x[:veg].tomato
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
@doc = b.doc
|
23
|
-
end
|
24
|
-
|
25
|
-
def check_namespace e
|
26
|
-
e.namespace.nil? ? nil : e.namespace.href
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_builder_default_ns
|
30
|
-
assert_equal 'ns:fruit', check_namespace(@doc.root)
|
31
|
-
end
|
32
|
-
def test_builder_parent_default_ns
|
33
|
-
assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0])
|
34
|
-
assert_equal 'ns:fruit', check_namespace(@doc.root.elements[1])
|
35
|
-
end
|
36
|
-
def test_builder_grandparent_default_ns
|
37
|
-
assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0].elements[0])
|
38
|
-
end
|
39
|
-
def test_builder_parent_nondefault_ns
|
40
|
-
assert_equal 'ns:veg', check_namespace(@doc.root.elements[2])
|
41
|
-
end
|
42
|
-
def test_builder_single_decl_ns_1
|
43
|
-
assert_equal 'ns:dairy', check_namespace(@doc.root.elements[2].elements[0])
|
44
|
-
end
|
45
|
-
def test_builder_nondefault_attr_ns
|
46
|
-
assert_equal 'http://www.w3.org/1999/xlink',
|
47
|
-
check_namespace(@doc.root.elements[2].elements[0].attribute_nodes.find { |a| a.name =~ /href/ })
|
48
|
-
end
|
49
|
-
def test_builder_single_decl_ns_2
|
50
|
-
assert_equal 'ns:meat', check_namespace(@doc.root.elements[3])
|
51
|
-
end
|
52
|
-
def test_builder_buried_default_ns
|
53
|
-
assert_equal 'ns:fruit', check_namespace(@doc.root.elements[3].elements[0])
|
54
|
-
end
|
55
|
-
def test_builder_buried_decl_ns
|
56
|
-
assert_equal 'ns:veg', check_namespace(@doc.root.elements[3].elements[1])
|
57
|
-
end
|
58
|
-
def test_builder_namespace_count
|
59
|
-
n = @doc.root.clone
|
60
|
-
n.children.each(&:remove)
|
61
|
-
ns_attrs = n.to_xml.scan(/\bxmlns(?::.+?)?=/)
|
62
|
-
assert_equal 3, ns_attrs.length
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_builder_namespaced_attribute_on_unparented_node
|
66
|
-
doc = Nokogiri::XML::Builder.new do |x|
|
67
|
-
x.root('xmlns:foo' => 'http://foo.io') {
|
68
|
-
x.obj('foo:attr' => 'baz')
|
69
|
-
}
|
70
|
-
end.doc
|
71
|
-
assert_equal 'http://foo.io', doc.root.children.first.attribute_nodes.first.namespace.href
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestNamespacesInClonedDoc < Nokogiri::TestCase
|
6
|
-
def setup
|
7
|
-
super
|
8
|
-
b = Nokogiri::XML::Builder.new do |xml|
|
9
|
-
xml.mods("xmlns"=>"http://www.loc.gov/mods/v3") {
|
10
|
-
xml.name(:type=>"personal") {
|
11
|
-
xml.namePart()
|
12
|
-
}
|
13
|
-
}
|
14
|
-
end
|
15
|
-
|
16
|
-
@doc = b.doc
|
17
|
-
@clone = Nokogiri::XML(@doc.to_s)
|
18
|
-
end
|
19
|
-
|
20
|
-
def check_namespace e
|
21
|
-
e.namespace.nil? ? nil : e.namespace.href
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_namespace_ns
|
25
|
-
xpath = '//oxns:name[@type="personal"]'
|
26
|
-
namespaces = {'oxns' => "http://www.loc.gov/mods/v3"}
|
27
|
-
assert_equal @doc.xpath(xpath, namespaces).length, @clone.xpath(xpath, namespaces).length
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestNamespacesInCreatedDoc < Nokogiri::TestCase
|
6
|
-
def setup
|
7
|
-
super
|
8
|
-
@doc = Nokogiri::XML('<fruit xmlns="ns:fruit" xmlns:veg="ns:veg" xmlns:xlink="http://www.w3.org/1999/xlink"/>')
|
9
|
-
pear = @doc.create_element('pear')
|
10
|
-
bosc = @doc.create_element('bosc')
|
11
|
-
pear.add_child(bosc)
|
12
|
-
@doc.root << pear
|
13
|
-
@doc.root.add_child('<orange/>')
|
14
|
-
carrot = @doc.create_element('veg:carrot')
|
15
|
-
@doc.root << carrot
|
16
|
-
cheese = @doc.create_element('cheese', :xmlns => 'ns:dairy', :'xlink:href' => 'http://example.com/cheese/')
|
17
|
-
carrot << cheese
|
18
|
-
bacon = @doc.create_element('meat:bacon', :'xmlns:meat' => 'ns:meat')
|
19
|
-
apple = @doc.create_element('apple')
|
20
|
-
apple['count'] = 2
|
21
|
-
bacon << apple
|
22
|
-
tomato = @doc.create_element('veg:tomato')
|
23
|
-
bacon << tomato
|
24
|
-
@doc.root << bacon
|
25
|
-
end
|
26
|
-
|
27
|
-
def check_namespace e
|
28
|
-
e.namespace.nil? ? nil : e.namespace.href
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_created_default_ns
|
32
|
-
assert_equal 'ns:fruit', check_namespace(@doc.root)
|
33
|
-
end
|
34
|
-
def test_created_parent_default_ns
|
35
|
-
assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0])
|
36
|
-
assert_equal 'ns:fruit', check_namespace(@doc.root.elements[1])
|
37
|
-
end
|
38
|
-
def test_created_grandparent_default_ns
|
39
|
-
assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0].elements[0])
|
40
|
-
end
|
41
|
-
def test_created_parent_nondefault_ns
|
42
|
-
assert_equal 'ns:veg', check_namespace(@doc.root.elements[2])
|
43
|
-
end
|
44
|
-
def test_created_single_decl_ns_1
|
45
|
-
assert_equal 'ns:dairy', check_namespace(@doc.root.elements[2].elements[0])
|
46
|
-
end
|
47
|
-
def test_created_nondefault_attr_ns
|
48
|
-
assert_equal 'http://www.w3.org/1999/xlink',
|
49
|
-
check_namespace(@doc.root.elements[2].elements[0].attribute_nodes.find { |a| a.name =~ /href/ })
|
50
|
-
end
|
51
|
-
def test_created_single_decl_ns_2
|
52
|
-
assert_equal 'ns:meat', check_namespace(@doc.root.elements[3])
|
53
|
-
end
|
54
|
-
def test_created_buried_default_ns
|
55
|
-
assert_equal 'ns:fruit', check_namespace(@doc.root.elements[3].elements[0])
|
56
|
-
end
|
57
|
-
def test_created_buried_decl_ns
|
58
|
-
assert_equal 'ns:veg', check_namespace(@doc.root.elements[3].elements[1])
|
59
|
-
end
|
60
|
-
def test_created_namespace_count
|
61
|
-
n = @doc.root.clone
|
62
|
-
n.children.each(&:remove)
|
63
|
-
ns_attrs = n.to_xml.scan(/\bxmlns(?::.+?)?=/)
|
64
|
-
assert_equal 3, ns_attrs.length
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_created_namespaced_attribute_on_unparented_node
|
68
|
-
doc = Nokogiri::XML('<root xmlns:foo="http://foo.io"/>')
|
69
|
-
node = @doc.create_element('obj', 'foo:attr' => 'baz')
|
70
|
-
doc.root.add_child(node)
|
71
|
-
assert_equal 'http://foo.io', doc.root.children.first.attribute_nodes.first.namespace.href
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestNamespacesInParsedDoc < Nokogiri::TestCase
|
6
|
-
def setup
|
7
|
-
super
|
8
|
-
@doc = Nokogiri::XML <<-eoxml
|
9
|
-
<fruit xmlns="ns:fruit" xmlns:veg="ns:veg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
10
|
-
<pear>
|
11
|
-
<bosc/>
|
12
|
-
</pear>
|
13
|
-
<orange/>
|
14
|
-
<veg:carrot>
|
15
|
-
<cheese xmlns="ns:dairy" xlink:href="http://example.com/cheese/"/>
|
16
|
-
</veg:carrot>
|
17
|
-
<meat:bacon xmlns:meat="ns:meat">
|
18
|
-
<apple count="2"/>
|
19
|
-
<veg:tomato/>
|
20
|
-
</meat:bacon>
|
21
|
-
</fruit>
|
22
|
-
eoxml
|
23
|
-
end
|
24
|
-
|
25
|
-
def check_namespace e
|
26
|
-
e.namespace.nil? ? nil : e.namespace.href
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_parsed_default_ns
|
30
|
-
assert_equal 'ns:fruit', check_namespace(@doc.root)
|
31
|
-
end
|
32
|
-
def test_parsed_parent_default_ns
|
33
|
-
assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0])
|
34
|
-
assert_equal 'ns:fruit', check_namespace(@doc.root.elements[1])
|
35
|
-
end
|
36
|
-
def test_parsed_grandparent_default_ns
|
37
|
-
assert_equal 'ns:fruit', check_namespace(@doc.root.elements[0].elements[0])
|
38
|
-
end
|
39
|
-
def test_parsed_parent_nondefault_ns
|
40
|
-
assert_equal 'ns:veg', check_namespace(@doc.root.elements[2])
|
41
|
-
end
|
42
|
-
def test_parsed_single_decl_ns_1
|
43
|
-
assert_equal 'ns:dairy', check_namespace(@doc.root.elements[2].elements[0])
|
44
|
-
end
|
45
|
-
def test_parsed_nondefault_attr_ns
|
46
|
-
assert_equal 'http://www.w3.org/1999/xlink',
|
47
|
-
check_namespace(@doc.root.elements[2].elements[0].attribute_nodes.find { |a| a.name =~ /href/ })
|
48
|
-
end
|
49
|
-
def test_parsed_single_decl_ns_2
|
50
|
-
assert_equal 'ns:meat', check_namespace(@doc.root.elements[3])
|
51
|
-
end
|
52
|
-
def test_parsed_buried_default_ns
|
53
|
-
assert_equal 'ns:fruit', check_namespace(@doc.root.elements[3].elements[0])
|
54
|
-
end
|
55
|
-
def test_parsed_buried_decl_ns
|
56
|
-
assert_equal 'ns:veg', check_namespace(@doc.root.elements[3].elements[1])
|
57
|
-
end
|
58
|
-
def test_parsed_namespace_count
|
59
|
-
n = @doc.root.clone
|
60
|
-
n.children.each(&:remove)
|
61
|
-
ns_attrs = n.to_xml.scan(/\bxmlns(?::.+?)?=/)
|
62
|
-
assert_equal 3, ns_attrs.length
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_namespaces_under_memory_pressure_issue1155
|
66
|
-
skip("JRuby doesn't do GC.") if Nokogiri.jruby?
|
67
|
-
|
68
|
-
# this test is here to emit warnings when run under valgrind
|
69
|
-
# see https://github.com/sparklemotion/nokogiri/issues/1155 for background
|
70
|
-
filename = File.join ASSETS_DIR, 'namespace_pressure_test.xml'
|
71
|
-
doc = Nokogiri::XML File.open(filename)
|
72
|
-
|
73
|
-
# bizarrely, can't repro without the call to #to_a
|
74
|
-
doc.xpath('//namespace::*').to_a.each do |ns|
|
75
|
-
ns.inspect
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestNamespacePreservation < Nokogiri::TestCase
|
6
|
-
|
7
|
-
def setup
|
8
|
-
@xml = Nokogiri.XML <<-eoxml
|
9
|
-
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
10
|
-
<xs:element xmlns:quer="http://api.geotrust.com/webtrust/query"/>
|
11
|
-
<xs:element xmlns:quer="http://api.geotrust.com/webtrust/query"/>
|
12
|
-
</xs:schema>
|
13
|
-
eoxml
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_xpath
|
17
|
-
first = @xml.at_xpath('//xs:element', 'xs' => 'http://www.w3.org/2001/XMLSchema')
|
18
|
-
last = @xml.at_xpath('//xs:element[last()]', 'xs' => 'http://www.w3.org/2001/XMLSchema')
|
19
|
-
assert_equal 'http://api.geotrust.com/webtrust/query' , first.namespaces['xmlns:quer'], "Should contain quer namespace"
|
20
|
-
assert_equal 'http://api.geotrust.com/webtrust/query' , last.namespaces['xmlns:quer'], "Should contain quer namespace"
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_traversing
|
24
|
-
first = @xml.root.element_children.first
|
25
|
-
last = @xml.root.element_children.last
|
26
|
-
assert_equal 'http://api.geotrust.com/webtrust/query' , first.namespaces['xmlns:quer'], "Should contain quer namespace"
|
27
|
-
assert_equal 'http://api.geotrust.com/webtrust/query' , last.namespaces['xmlns:quer'], "Should contain quer namespace"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|