nokogiri 1.6.2.rc1-x64-mingw32
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 +7 -0
- data/.autotest +26 -0
- data/.editorconfig +17 -0
- data/.gemtest +0 -0
- data/.travis.yml +25 -0
- data/CHANGELOG.ja.rdoc +857 -0
- data/CHANGELOG.rdoc +880 -0
- data/C_CODING_STYLE.rdoc +33 -0
- data/Gemfile +21 -0
- data/Manifest.txt +371 -0
- data/README.ja.rdoc +112 -0
- data/README.rdoc +180 -0
- data/ROADMAP.md +89 -0
- data/Rakefile +351 -0
- data/STANDARD_RESPONSES.md +47 -0
- data/Y_U_NO_GEMSPEC.md +155 -0
- data/bin/nokogiri +78 -0
- data/build_all +130 -0
- data/dependencies.yml +4 -0
- data/ext/nokogiri/depend +358 -0
- data/ext/nokogiri/extconf.rb +453 -0
- data/ext/nokogiri/html_document.c +170 -0
- data/ext/nokogiri/html_document.h +10 -0
- data/ext/nokogiri/html_element_description.c +279 -0
- data/ext/nokogiri/html_element_description.h +10 -0
- data/ext/nokogiri/html_entity_lookup.c +32 -0
- data/ext/nokogiri/html_entity_lookup.h +8 -0
- data/ext/nokogiri/html_sax_parser_context.c +116 -0
- data/ext/nokogiri/html_sax_parser_context.h +11 -0
- data/ext/nokogiri/html_sax_push_parser.c +87 -0
- data/ext/nokogiri/html_sax_push_parser.h +9 -0
- data/ext/nokogiri/nokogiri.c +148 -0
- data/ext/nokogiri/nokogiri.h +164 -0
- data/ext/nokogiri/xml_attr.c +94 -0
- data/ext/nokogiri/xml_attr.h +9 -0
- data/ext/nokogiri/xml_attribute_decl.c +70 -0
- data/ext/nokogiri/xml_attribute_decl.h +9 -0
- data/ext/nokogiri/xml_cdata.c +56 -0
- data/ext/nokogiri/xml_cdata.h +9 -0
- data/ext/nokogiri/xml_comment.c +54 -0
- data/ext/nokogiri/xml_comment.h +9 -0
- data/ext/nokogiri/xml_document.c +577 -0
- data/ext/nokogiri/xml_document.h +23 -0
- data/ext/nokogiri/xml_document_fragment.c +48 -0
- data/ext/nokogiri/xml_document_fragment.h +10 -0
- data/ext/nokogiri/xml_dtd.c +202 -0
- data/ext/nokogiri/xml_dtd.h +10 -0
- data/ext/nokogiri/xml_element_content.c +123 -0
- data/ext/nokogiri/xml_element_content.h +10 -0
- data/ext/nokogiri/xml_element_decl.c +69 -0
- data/ext/nokogiri/xml_element_decl.h +9 -0
- data/ext/nokogiri/xml_encoding_handler.c +79 -0
- data/ext/nokogiri/xml_encoding_handler.h +8 -0
- data/ext/nokogiri/xml_entity_decl.c +110 -0
- data/ext/nokogiri/xml_entity_decl.h +10 -0
- data/ext/nokogiri/xml_entity_reference.c +52 -0
- data/ext/nokogiri/xml_entity_reference.h +9 -0
- data/ext/nokogiri/xml_io.c +56 -0
- data/ext/nokogiri/xml_io.h +11 -0
- data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
- data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
- data/ext/nokogiri/xml_namespace.c +78 -0
- data/ext/nokogiri/xml_namespace.h +13 -0
- data/ext/nokogiri/xml_node.c +1541 -0
- data/ext/nokogiri/xml_node.h +13 -0
- data/ext/nokogiri/xml_node_set.c +467 -0
- data/ext/nokogiri/xml_node_set.h +14 -0
- data/ext/nokogiri/xml_processing_instruction.c +56 -0
- data/ext/nokogiri/xml_processing_instruction.h +9 -0
- data/ext/nokogiri/xml_reader.c +681 -0
- data/ext/nokogiri/xml_reader.h +10 -0
- data/ext/nokogiri/xml_relax_ng.c +161 -0
- data/ext/nokogiri/xml_relax_ng.h +9 -0
- data/ext/nokogiri/xml_sax_parser.c +312 -0
- data/ext/nokogiri/xml_sax_parser.h +39 -0
- data/ext/nokogiri/xml_sax_parser_context.c +262 -0
- data/ext/nokogiri/xml_sax_parser_context.h +10 -0
- data/ext/nokogiri/xml_sax_push_parser.c +115 -0
- data/ext/nokogiri/xml_sax_push_parser.h +9 -0
- data/ext/nokogiri/xml_schema.c +205 -0
- data/ext/nokogiri/xml_schema.h +9 -0
- data/ext/nokogiri/xml_syntax_error.c +63 -0
- data/ext/nokogiri/xml_syntax_error.h +13 -0
- data/ext/nokogiri/xml_text.c +52 -0
- data/ext/nokogiri/xml_text.h +9 -0
- data/ext/nokogiri/xml_xpath_context.c +307 -0
- data/ext/nokogiri/xml_xpath_context.h +10 -0
- data/ext/nokogiri/xslt_stylesheet.c +270 -0
- data/ext/nokogiri/xslt_stylesheet.h +14 -0
- data/lib/nokogiri.rb +137 -0
- data/lib/nokogiri/2.0/nokogiri.so +0 -0
- data/lib/nokogiri/2.1/nokogiri.so +0 -0
- data/lib/nokogiri/css.rb +27 -0
- data/lib/nokogiri/css/node.rb +52 -0
- data/lib/nokogiri/css/parser.rb +715 -0
- data/lib/nokogiri/css/parser.y +249 -0
- data/lib/nokogiri/css/parser_extras.rb +91 -0
- data/lib/nokogiri/css/syntax_error.rb +7 -0
- data/lib/nokogiri/css/tokenizer.rb +152 -0
- data/lib/nokogiri/css/tokenizer.rex +55 -0
- data/lib/nokogiri/css/xpath_visitor.rb +219 -0
- data/lib/nokogiri/decorators/slop.rb +35 -0
- data/lib/nokogiri/html.rb +37 -0
- data/lib/nokogiri/html/builder.rb +35 -0
- data/lib/nokogiri/html/document.rb +333 -0
- data/lib/nokogiri/html/document_fragment.rb +41 -0
- data/lib/nokogiri/html/element_description.rb +23 -0
- data/lib/nokogiri/html/element_description_defaults.rb +671 -0
- data/lib/nokogiri/html/entity_lookup.rb +13 -0
- data/lib/nokogiri/html/sax/parser.rb +52 -0
- data/lib/nokogiri/html/sax/parser_context.rb +16 -0
- data/lib/nokogiri/html/sax/push_parser.rb +16 -0
- data/lib/nokogiri/syntax_error.rb +4 -0
- data/lib/nokogiri/version.rb +106 -0
- data/lib/nokogiri/xml.rb +73 -0
- data/lib/nokogiri/xml/attr.rb +14 -0
- data/lib/nokogiri/xml/attribute_decl.rb +18 -0
- data/lib/nokogiri/xml/builder.rb +443 -0
- data/lib/nokogiri/xml/cdata.rb +11 -0
- data/lib/nokogiri/xml/character_data.rb +7 -0
- data/lib/nokogiri/xml/document.rb +279 -0
- data/lib/nokogiri/xml/document_fragment.rb +112 -0
- data/lib/nokogiri/xml/dtd.rb +32 -0
- data/lib/nokogiri/xml/element_content.rb +36 -0
- data/lib/nokogiri/xml/element_decl.rb +13 -0
- data/lib/nokogiri/xml/entity_decl.rb +19 -0
- data/lib/nokogiri/xml/namespace.rb +13 -0
- data/lib/nokogiri/xml/node.rb +982 -0
- data/lib/nokogiri/xml/node/save_options.rb +61 -0
- data/lib/nokogiri/xml/node_set.rb +355 -0
- data/lib/nokogiri/xml/notation.rb +6 -0
- data/lib/nokogiri/xml/parse_options.rb +98 -0
- data/lib/nokogiri/xml/pp.rb +2 -0
- data/lib/nokogiri/xml/pp/character_data.rb +18 -0
- data/lib/nokogiri/xml/pp/node.rb +56 -0
- data/lib/nokogiri/xml/processing_instruction.rb +8 -0
- data/lib/nokogiri/xml/reader.rb +112 -0
- data/lib/nokogiri/xml/relax_ng.rb +32 -0
- data/lib/nokogiri/xml/sax.rb +4 -0
- data/lib/nokogiri/xml/sax/document.rb +171 -0
- data/lib/nokogiri/xml/sax/parser.rb +123 -0
- data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
- data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
- data/lib/nokogiri/xml/schema.rb +63 -0
- data/lib/nokogiri/xml/syntax_error.rb +47 -0
- data/lib/nokogiri/xml/text.rb +9 -0
- data/lib/nokogiri/xml/xpath.rb +10 -0
- data/lib/nokogiri/xml/xpath/syntax_error.rb +11 -0
- data/lib/nokogiri/xml/xpath_context.rb +16 -0
- data/lib/nokogiri/xslt.rb +56 -0
- data/lib/nokogiri/xslt/stylesheet.rb +25 -0
- data/lib/xsd/xmlparser/nokogiri.rb +102 -0
- data/suppressions/README.txt +1 -0
- data/suppressions/nokogiri_ree-1.8.7.358.supp +61 -0
- data/suppressions/nokogiri_ruby-1.8.7.370.supp +0 -0
- data/suppressions/nokogiri_ruby-1.9.2.320.supp +28 -0
- data/suppressions/nokogiri_ruby-1.9.3.327.supp +28 -0
- data/tasks/nokogiri.org.rb +24 -0
- data/tasks/test.rb +95 -0
- data/test/css/test_nthiness.rb +222 -0
- data/test/css/test_parser.rb +358 -0
- data/test/css/test_tokenizer.rb +198 -0
- data/test/css/test_xpath_visitor.rb +96 -0
- data/test/decorators/test_slop.rb +16 -0
- data/test/files/2ch.html +108 -0
- data/test/files/address_book.rlx +12 -0
- data/test/files/address_book.xml +10 -0
- data/test/files/atom.xml +344 -0
- data/test/files/bar/bar.xsd +4 -0
- data/test/files/bogus.xml +0 -0
- data/test/files/dont_hurt_em_why.xml +422 -0
- data/test/files/encoding.html +82 -0
- data/test/files/encoding.xhtml +84 -0
- data/test/files/exslt.xml +8 -0
- data/test/files/exslt.xslt +35 -0
- data/test/files/foo/foo.xsd +4 -0
- data/test/files/metacharset.html +10 -0
- data/test/files/noencoding.html +47 -0
- data/test/files/po.xml +32 -0
- data/test/files/po.xsd +66 -0
- data/test/files/saml/saml20assertion_schema.xsd +283 -0
- data/test/files/saml/saml20protocol_schema.xsd +302 -0
- data/test/files/saml/xenc_schema.xsd +146 -0
- data/test/files/saml/xmldsig_schema.xsd +318 -0
- data/test/files/shift_jis.html +10 -0
- data/test/files/shift_jis.xml +5 -0
- data/test/files/shift_jis_no_charset.html +9 -0
- data/test/files/snuggles.xml +3 -0
- data/test/files/staff.dtd +10 -0
- data/test/files/staff.xml +59 -0
- data/test/files/staff.xslt +32 -0
- data/test/files/test_document_url/bar.xml +2 -0
- data/test/files/test_document_url/document.dtd +4 -0
- data/test/files/test_document_url/document.xml +6 -0
- data/test/files/tlm.html +850 -0
- data/test/files/to_be_xincluded.xml +2 -0
- data/test/files/valid_bar.xml +2 -0
- data/test/files/xinclude.xml +4 -0
- data/test/helper.rb +164 -0
- data/test/html/sax/test_parser.rb +141 -0
- data/test/html/sax/test_parser_context.rb +46 -0
- data/test/html/test_builder.rb +164 -0
- data/test/html/test_document.rb +619 -0
- data/test/html/test_document_encoding.rb +148 -0
- data/test/html/test_document_fragment.rb +261 -0
- data/test/html/test_element_description.rb +105 -0
- data/test/html/test_named_characters.rb +14 -0
- data/test/html/test_node.rb +196 -0
- data/test/html/test_node_encoding.rb +27 -0
- data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +14 -0
- data/test/namespaces/test_namespaces_in_builder_doc.rb +75 -0
- data/test/namespaces/test_namespaces_in_cloned_doc.rb +31 -0
- data/test/namespaces/test_namespaces_in_created_doc.rb +75 -0
- data/test/namespaces/test_namespaces_in_parsed_doc.rb +66 -0
- data/test/test_convert_xpath.rb +135 -0
- data/test/test_css_cache.rb +45 -0
- data/test/test_encoding_handler.rb +46 -0
- data/test/test_memory_leak.rb +156 -0
- data/test/test_nokogiri.rb +138 -0
- data/test/test_reader.rb +558 -0
- data/test/test_soap4r_sax.rb +52 -0
- data/test/test_xslt_transforms.rb +279 -0
- data/test/xml/node/test_save_options.rb +28 -0
- data/test/xml/node/test_subclass.rb +44 -0
- data/test/xml/sax/test_parser.rb +382 -0
- data/test/xml/sax/test_parser_context.rb +115 -0
- data/test/xml/sax/test_push_parser.rb +157 -0
- data/test/xml/test_attr.rb +64 -0
- data/test/xml/test_attribute_decl.rb +86 -0
- data/test/xml/test_builder.rb +315 -0
- data/test/xml/test_c14n.rb +161 -0
- data/test/xml/test_cdata.rb +48 -0
- data/test/xml/test_comment.rb +29 -0
- data/test/xml/test_document.rb +934 -0
- data/test/xml/test_document_encoding.rb +28 -0
- data/test/xml/test_document_fragment.rb +228 -0
- data/test/xml/test_dtd.rb +187 -0
- data/test/xml/test_dtd_encoding.rb +33 -0
- data/test/xml/test_element_content.rb +56 -0
- data/test/xml/test_element_decl.rb +73 -0
- data/test/xml/test_entity_decl.rb +122 -0
- data/test/xml/test_entity_reference.rb +245 -0
- data/test/xml/test_namespace.rb +95 -0
- data/test/xml/test_node.rb +1155 -0
- data/test/xml/test_node_attributes.rb +113 -0
- data/test/xml/test_node_encoding.rb +107 -0
- data/test/xml/test_node_inheritance.rb +32 -0
- data/test/xml/test_node_reparenting.rb +374 -0
- data/test/xml/test_node_set.rb +755 -0
- data/test/xml/test_parse_options.rb +64 -0
- data/test/xml/test_processing_instruction.rb +30 -0
- data/test/xml/test_reader_encoding.rb +142 -0
- data/test/xml/test_relax_ng.rb +60 -0
- data/test/xml/test_schema.rb +129 -0
- data/test/xml/test_syntax_error.rb +12 -0
- data/test/xml/test_text.rb +45 -0
- data/test/xml/test_unparented_node.rb +422 -0
- data/test/xml/test_xinclude.rb +83 -0
- data/test/xml/test_xpath.rb +376 -0
- data/test/xslt/test_custom_functions.rb +133 -0
- data/test/xslt/test_exception_handling.rb +37 -0
- data/test_all +81 -0
- metadata +601 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
module Nokogiri
|
4
|
+
module XML
|
5
|
+
class TestParseOptions < Nokogiri::TestCase
|
6
|
+
def test_new
|
7
|
+
options = Nokogiri::XML::ParseOptions.new
|
8
|
+
assert_equal 0, options.options
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_to_i
|
12
|
+
options = Nokogiri::XML::ParseOptions.new
|
13
|
+
assert_equal 0, options.to_i
|
14
|
+
end
|
15
|
+
|
16
|
+
ParseOptions.constants.each do |constant|
|
17
|
+
next if constant == 'STRICT'
|
18
|
+
class_eval %{
|
19
|
+
def test_predicate_#{constant.downcase}
|
20
|
+
options = ParseOptions.new(ParseOptions::#{constant})
|
21
|
+
assert options.#{constant.downcase}?
|
22
|
+
|
23
|
+
assert ParseOptions.new.#{constant.downcase}.#{constant.downcase}?
|
24
|
+
end
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_strict_noent
|
29
|
+
options = ParseOptions.new.recover.noent
|
30
|
+
assert !options.strict?
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_new_with_argument
|
34
|
+
options = Nokogiri::XML::ParseOptions.new 1 << 1
|
35
|
+
assert_equal 1 << 1, options.options
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_unsetting
|
39
|
+
options = Nokogiri::XML::ParseOptions.new Nokogiri::XML::ParseOptions::DEFAULT_HTML
|
40
|
+
assert options.nonet?
|
41
|
+
assert options.recover?
|
42
|
+
options.nononet.norecover
|
43
|
+
assert ! options.nonet?
|
44
|
+
assert ! options.recover?
|
45
|
+
options.nonet.recover
|
46
|
+
assert options.nonet?
|
47
|
+
assert options.recover?
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_chaining
|
51
|
+
options = Nokogiri::XML::ParseOptions.new.recover.noent
|
52
|
+
assert options.recover?
|
53
|
+
assert options.noent?
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_inspect
|
57
|
+
options = Nokogiri::XML::ParseOptions.new.recover.noent
|
58
|
+
ins = options.inspect
|
59
|
+
assert_match(/recover/, ins)
|
60
|
+
assert_match(/noent/, ins)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
module Nokogiri
|
4
|
+
module XML
|
5
|
+
class TestProcessingInstruction < Nokogiri::TestCase
|
6
|
+
def setup
|
7
|
+
super
|
8
|
+
@xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_type
|
12
|
+
assert_equal(Node::PI_NODE, @xml.children[0].type)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_name
|
16
|
+
assert_equal 'TEST-STYLE', @xml.children[0].name
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_new
|
20
|
+
assert ref = ProcessingInstruction.new(@xml, 'name', 'content')
|
21
|
+
assert_instance_of ProcessingInstruction, ref
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_many_new
|
25
|
+
100.times { ProcessingInstruction.new(@xml, 'foo', 'bar') }
|
26
|
+
@xml.root << ProcessingInstruction.new(@xml, 'foo', 'bar')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require "helper"
|
3
|
+
|
4
|
+
module Nokogiri
|
5
|
+
module XML
|
6
|
+
if RUBY_VERSION =~ /^1\.9/
|
7
|
+
class TestReaderEncoding < Nokogiri::TestCase
|
8
|
+
def setup
|
9
|
+
super
|
10
|
+
@reader = Nokogiri::XML::Reader(
|
11
|
+
File.read(XML_FILE),
|
12
|
+
XML_FILE,
|
13
|
+
'UTF-8'
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_attribute_at
|
18
|
+
@reader.each do |node|
|
19
|
+
next unless attribute = node.attribute_at(0)
|
20
|
+
assert_equal @reader.encoding, attribute.encoding.name
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_attributes
|
25
|
+
@reader.each do |node|
|
26
|
+
node.attributes.each do |k,v|
|
27
|
+
assert_equal @reader.encoding, k.encoding.name
|
28
|
+
assert_equal @reader.encoding, v.encoding.name
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_attribute
|
34
|
+
xml = <<-eoxml
|
35
|
+
<x xmlns:tenderlove='http://tenderlovemaking.com/'>
|
36
|
+
<tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
|
37
|
+
</x>
|
38
|
+
eoxml
|
39
|
+
reader = Nokogiri::XML::Reader(xml, nil, 'UTF-8')
|
40
|
+
reader.each do |node|
|
41
|
+
next unless attribute = node.attribute('awesome')
|
42
|
+
assert_equal reader.encoding, attribute.encoding.name
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_xml_version
|
47
|
+
@reader.each do |node|
|
48
|
+
next unless version = node.xml_version
|
49
|
+
assert_equal @reader.encoding, version.encoding.name
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_lang
|
54
|
+
xml = <<-eoxml
|
55
|
+
<awesome>
|
56
|
+
<p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
|
57
|
+
<p xml:lang="ja">日本語が上手です</p>
|
58
|
+
</awesome>
|
59
|
+
eoxml
|
60
|
+
|
61
|
+
reader = Nokogiri::XML::Reader(xml, nil, 'UTF-8')
|
62
|
+
reader.each do |node|
|
63
|
+
next unless lang = node.lang
|
64
|
+
assert_equal reader.encoding, lang.encoding.name
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_value
|
69
|
+
called = false
|
70
|
+
@reader.each do |node|
|
71
|
+
next unless value = node.value
|
72
|
+
assert_equal @reader.encoding, value.encoding.name
|
73
|
+
called = true
|
74
|
+
end
|
75
|
+
assert called
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_prefix
|
79
|
+
xml = <<-eoxml
|
80
|
+
<x xmlns:edi='http://ecommerce.example.org/schema'>
|
81
|
+
<edi:foo>hello</edi:foo>
|
82
|
+
</x>
|
83
|
+
eoxml
|
84
|
+
reader = Nokogiri::XML::Reader(xml, nil, 'UTF-8')
|
85
|
+
reader.each do |node|
|
86
|
+
next unless prefix = node.prefix
|
87
|
+
assert_equal reader.encoding, prefix.encoding.name
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_ns_uri
|
92
|
+
xml = <<-eoxml
|
93
|
+
<x xmlns:edi='http://ecommerce.example.org/schema'>
|
94
|
+
<edi:foo>hello</edi:foo>
|
95
|
+
</x>
|
96
|
+
eoxml
|
97
|
+
reader = Nokogiri::XML::Reader(xml, nil, 'UTF-8')
|
98
|
+
reader.each do |node|
|
99
|
+
next unless uri = node.namespace_uri
|
100
|
+
assert_equal reader.encoding, uri.encoding.name
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_local_name
|
105
|
+
xml = <<-eoxml
|
106
|
+
<x xmlns:edi='http://ecommerce.example.org/schema'>
|
107
|
+
<edi:foo>hello</edi:foo>
|
108
|
+
</x>
|
109
|
+
eoxml
|
110
|
+
reader = Nokogiri::XML::Reader(xml, nil, 'UTF-8')
|
111
|
+
reader.each do |node|
|
112
|
+
next unless lname = node.local_name
|
113
|
+
assert_equal reader.encoding, lname.encoding.name
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_name
|
118
|
+
@reader.each do |node|
|
119
|
+
next unless name = node.name
|
120
|
+
assert_equal @reader.encoding, name.encoding.name
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_value_lookup_segfault
|
125
|
+
skip("JRuby doesn't do GC.") if Nokogiri.jruby?
|
126
|
+
old_stress = GC.stress
|
127
|
+
|
128
|
+
begin
|
129
|
+
GC.stress = true
|
130
|
+
|
131
|
+
while node = @reader.read
|
132
|
+
nodes = node.send(:attr_nodes)
|
133
|
+
nodes.first.name if nodes.first
|
134
|
+
end
|
135
|
+
ensure
|
136
|
+
GC.stress = old_stress
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
module Nokogiri
|
4
|
+
module XML
|
5
|
+
class TestRelaxNG < Nokogiri::TestCase
|
6
|
+
def setup
|
7
|
+
assert @schema = Nokogiri::XML::RelaxNG(File.read(ADDRESS_SCHEMA_FILE))
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_parse_with_memory
|
11
|
+
assert_instance_of Nokogiri::XML::RelaxNG, @schema
|
12
|
+
assert_equal 0, @schema.errors.length
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_new
|
16
|
+
assert schema = Nokogiri::XML::RelaxNG.new(
|
17
|
+
File.read(ADDRESS_SCHEMA_FILE))
|
18
|
+
assert_instance_of Nokogiri::XML::RelaxNG, schema
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_parse_with_io
|
22
|
+
xsd = nil
|
23
|
+
File.open(ADDRESS_SCHEMA_FILE, 'rb') { |f|
|
24
|
+
assert xsd = Nokogiri::XML::RelaxNG(f)
|
25
|
+
}
|
26
|
+
assert_equal 0, xsd.errors.length
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_parse_with_errors
|
30
|
+
xml = File.read(ADDRESS_SCHEMA_FILE).sub(/name="/, 'name=')
|
31
|
+
assert_raises(Nokogiri::XML::SyntaxError) {
|
32
|
+
Nokogiri::XML::RelaxNG(xml)
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_validate_document
|
37
|
+
doc = Nokogiri::XML(File.read(ADDRESS_XML_FILE))
|
38
|
+
assert errors = @schema.validate(doc)
|
39
|
+
assert_equal 0, errors.length
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_validate_invalid_document
|
43
|
+
# Empty address book is not allowed
|
44
|
+
read_doc = '<addressBook></addressBook>'
|
45
|
+
|
46
|
+
assert errors = @schema.validate(Nokogiri::XML(read_doc))
|
47
|
+
assert_equal 1, errors.length
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_valid?
|
51
|
+
valid_doc = Nokogiri::XML(File.read(ADDRESS_XML_FILE))
|
52
|
+
|
53
|
+
invalid_doc = Nokogiri::XML('<addressBook></addressBook>')
|
54
|
+
|
55
|
+
assert(@schema.valid?(valid_doc))
|
56
|
+
assert(!@schema.valid?(invalid_doc))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
module Nokogiri
|
4
|
+
module XML
|
5
|
+
class TestSchema < Nokogiri::TestCase
|
6
|
+
def setup
|
7
|
+
assert @xsd = Nokogiri::XML::Schema(File.read(PO_SCHEMA_FILE))
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_schema_from_document
|
11
|
+
doc = Nokogiri::XML(File.open(PO_SCHEMA_FILE))
|
12
|
+
assert doc
|
13
|
+
xsd = Nokogiri::XML::Schema.from_document doc
|
14
|
+
assert_instance_of Nokogiri::XML::Schema, xsd
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_invalid_schema_do_not_raise_exceptions
|
18
|
+
xsd = Nokogiri::XML::Schema.new <<EOF
|
19
|
+
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
20
|
+
<xs:group name="foo1">
|
21
|
+
<xs:sequence>
|
22
|
+
<xs:element name="bar" type="xs:boolean" />
|
23
|
+
</xs:sequence>
|
24
|
+
</xs:group>
|
25
|
+
<xs:group name="foo2">
|
26
|
+
<xs:sequence>
|
27
|
+
<xs:element name="bar" type="xs:string" />
|
28
|
+
</xs:sequence>
|
29
|
+
</xs:group>
|
30
|
+
<xs:element name="foo">
|
31
|
+
<xs:complexType>
|
32
|
+
<xs:choice>
|
33
|
+
<xs:group ref="foo1"/>
|
34
|
+
<xs:group ref="foo2"/>
|
35
|
+
</xs:choice>
|
36
|
+
</xs:complexType>
|
37
|
+
</xs:element>
|
38
|
+
</xs:schema>
|
39
|
+
EOF
|
40
|
+
assert_instance_of Nokogiri::XML::Schema, xsd
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_schema_from_document_node
|
44
|
+
doc = Nokogiri::XML(File.open(PO_SCHEMA_FILE))
|
45
|
+
assert doc
|
46
|
+
xsd = Nokogiri::XML::Schema.from_document doc.root
|
47
|
+
assert_instance_of Nokogiri::XML::Schema, xsd
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_schema_validates_with_relative_paths
|
51
|
+
xsd = File.join(ASSETS_DIR, 'foo', 'foo.xsd')
|
52
|
+
xml = File.join(ASSETS_DIR, 'valid_bar.xml')
|
53
|
+
doc = Nokogiri::XML(File.open(xsd))
|
54
|
+
xsd = Nokogiri::XML::Schema.from_document doc
|
55
|
+
|
56
|
+
doc = Nokogiri::XML(File.open(xml))
|
57
|
+
assert xsd.valid?(doc)
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_parse_with_memory
|
61
|
+
assert_instance_of Nokogiri::XML::Schema, @xsd
|
62
|
+
assert_equal 0, @xsd.errors.length
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_new
|
66
|
+
assert xsd = Nokogiri::XML::Schema.new(File.read(PO_SCHEMA_FILE))
|
67
|
+
assert_instance_of Nokogiri::XML::Schema, xsd
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_parse_with_io
|
71
|
+
xsd = nil
|
72
|
+
File.open(PO_SCHEMA_FILE, 'rb') { |f|
|
73
|
+
assert xsd = Nokogiri::XML::Schema(f)
|
74
|
+
}
|
75
|
+
assert_equal 0, xsd.errors.length
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_parse_with_errors
|
79
|
+
xml = File.read(PO_SCHEMA_FILE).sub(/name="/, 'name=')
|
80
|
+
assert_raises(Nokogiri::XML::SyntaxError) {
|
81
|
+
Nokogiri::XML::Schema(xml)
|
82
|
+
}
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_validate_document
|
86
|
+
doc = Nokogiri::XML(File.read(PO_XML_FILE))
|
87
|
+
assert errors = @xsd.validate(doc)
|
88
|
+
assert_equal 0, errors.length
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_validate_file
|
92
|
+
assert errors = @xsd.validate(PO_XML_FILE)
|
93
|
+
assert_equal 0, errors.length
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_validate_invalid_document
|
97
|
+
read_doc = File.read(PO_XML_FILE).gsub(/<city>[^<]*<\/city>/, '')
|
98
|
+
|
99
|
+
assert errors = @xsd.validate(Nokogiri::XML(read_doc))
|
100
|
+
assert_equal 2, errors.length
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_validate_non_document
|
104
|
+
string = File.read(PO_XML_FILE)
|
105
|
+
assert_raise(ArgumentError) {@xsd.validate(string)}
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_valid?
|
109
|
+
valid_doc = Nokogiri::XML(File.read(PO_XML_FILE))
|
110
|
+
|
111
|
+
invalid_doc = Nokogiri::XML(
|
112
|
+
File.read(PO_XML_FILE).gsub(/<city>[^<]*<\/city>/, '')
|
113
|
+
)
|
114
|
+
|
115
|
+
assert(@xsd.valid?(valid_doc))
|
116
|
+
assert(!@xsd.valid?(invalid_doc))
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_xsd_with_dtd
|
120
|
+
Dir.chdir(File.join(ASSETS_DIR, 'saml')) do
|
121
|
+
# works
|
122
|
+
Nokogiri::XML::Schema(IO.read('xmldsig_schema.xsd'))
|
123
|
+
# was not working
|
124
|
+
Nokogiri::XML::Schema(IO.read('saml20protocol_schema.xsd'))
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
module Nokogiri
|
4
|
+
module XML
|
5
|
+
class TestText < Nokogiri::TestCase
|
6
|
+
def test_css_path
|
7
|
+
doc = Nokogiri.XML "<root> foo <a>something</a> bar bazz </root>"
|
8
|
+
node = doc.root.children[2]
|
9
|
+
assert_instance_of Nokogiri::XML::Text, node
|
10
|
+
assert_equal node, doc.at_css(node.css_path)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_inspect
|
14
|
+
node = Text.new('hello world', Document.new)
|
15
|
+
assert_equal "#<#{node.class.name}:#{sprintf("0x%x",node.object_id)} #{node.text.inspect}>", node.inspect
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_new
|
19
|
+
node = Text.new('hello world', Document.new)
|
20
|
+
assert node
|
21
|
+
assert_equal('hello world', node.content)
|
22
|
+
assert_instance_of Nokogiri::XML::Text, node
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_lots_of_text
|
26
|
+
100.times { Text.new('hello world', Document.new) }
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_new_without_document
|
30
|
+
doc = Document.new
|
31
|
+
node = Nokogiri::XML::Element.new('foo', doc)
|
32
|
+
|
33
|
+
assert Text.new('hello world', node)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_content=
|
37
|
+
node = Text.new('foo', Document.new)
|
38
|
+
assert_equal('foo', node.content)
|
39
|
+
node.content = '& <foo> &'
|
40
|
+
assert_equal('& <foo> &', node.content)
|
41
|
+
assert_equal('& <foo> &amp;', node.to_xml)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|