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,56 @@
|
|
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
|
@@ -0,0 +1,73 @@
|
|
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
|
@@ -0,0 +1,122 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
module Nokogiri
|
4
|
+
module XML
|
5
|
+
class TestEntityDecl < 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
|
+
<!ENTITY ent1 "es">
|
12
|
+
<!ENTITY nocontent "">
|
13
|
+
]>
|
14
|
+
<root />
|
15
|
+
eoxml
|
16
|
+
|
17
|
+
@entities = @xml.internal_subset.children
|
18
|
+
@entity_decl = @entities.first
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_constants
|
22
|
+
assert_equal 1, EntityDecl::INTERNAL_GENERAL
|
23
|
+
assert_equal 2, EntityDecl::EXTERNAL_GENERAL_PARSED
|
24
|
+
assert_equal 3, EntityDecl::EXTERNAL_GENERAL_UNPARSED
|
25
|
+
assert_equal 4, EntityDecl::INTERNAL_PARAMETER
|
26
|
+
assert_equal 5, EntityDecl::EXTERNAL_PARAMETER
|
27
|
+
assert_equal 6, EntityDecl::INTERNAL_PREDEFINED
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_create_typed_entity
|
31
|
+
entity = @xml.create_entity(
|
32
|
+
'foo', EntityDecl::INTERNAL_GENERAL, nil, nil, nil
|
33
|
+
)
|
34
|
+
assert_equal EntityDecl::INTERNAL_GENERAL, entity.entity_type
|
35
|
+
assert_equal 'foo', entity.name
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_new
|
39
|
+
entity = Nokogiri::XML::EntityDecl.new(
|
40
|
+
'foo', @xml, EntityDecl::INTERNAL_GENERAL, nil, nil, nil
|
41
|
+
)
|
42
|
+
assert_equal EntityDecl::INTERNAL_GENERAL, entity.entity_type
|
43
|
+
assert_equal 'foo', entity.name
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_create_default_args
|
47
|
+
entity = @xml.create_entity('foo')
|
48
|
+
assert_equal EntityDecl::INTERNAL_GENERAL, entity.entity_type
|
49
|
+
assert_equal 'foo', entity.name
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_external_id
|
53
|
+
assert_nil @entity_decl.external_id
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_system_id
|
57
|
+
assert_nil @entity_decl.system_id
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_entity_type
|
61
|
+
assert_equal 1, @entity_decl.entity_type
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_original_content
|
65
|
+
assert_equal "es", @entity_decl.original_content
|
66
|
+
if Nokogiri.jruby?
|
67
|
+
assert_nil @entities[1].original_content
|
68
|
+
else
|
69
|
+
assert_equal "", @entities[1].original_content
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_content
|
74
|
+
assert_equal "es", @entity_decl.content
|
75
|
+
if Nokogiri.jruby?
|
76
|
+
assert_nil @entities[1].content
|
77
|
+
else
|
78
|
+
assert_equal "", @entities[1].content
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_type
|
83
|
+
assert_equal 17, @entities.first.type
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_class
|
87
|
+
assert_instance_of Nokogiri::XML::EntityDecl, @entities.first
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_attributes
|
91
|
+
assert_raise NoMethodError do
|
92
|
+
@entity_decl.attributes
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_namespace
|
97
|
+
assert_raise NoMethodError do
|
98
|
+
@entity_decl.namespace
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_namespace_definitions
|
103
|
+
assert_raise NoMethodError do
|
104
|
+
@entity_decl.namespace_definitions
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_line
|
109
|
+
assert_raise NoMethodError do
|
110
|
+
@entity_decl.line
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_inspect
|
115
|
+
assert_equal(
|
116
|
+
"#<#{@entity_decl.class.name}:#{sprintf("0x%x", @entity_decl.object_id)} #{@entity_decl.to_s.inspect}>",
|
117
|
+
@entity_decl.inspect
|
118
|
+
)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,245 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
module Nokogiri
|
4
|
+
module XML
|
5
|
+
class TestEntityReference < Nokogiri::TestCase
|
6
|
+
def setup
|
7
|
+
super
|
8
|
+
@xml = Nokogiri::XML(File.open(XML_FILE), XML_FILE)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_new
|
12
|
+
assert ref = EntityReference.new(@xml, 'ent4')
|
13
|
+
assert_instance_of EntityReference, ref
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_many_references
|
17
|
+
100.times { EntityReference.new(@xml, 'foo') }
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_newline_node
|
21
|
+
# issue 719
|
22
|
+
xml = <<EOF
|
23
|
+
<?xml version="1.0" ?>
|
24
|
+
<item></item>
|
25
|
+
EOF
|
26
|
+
doc = Nokogiri::XML xml
|
27
|
+
lf_node = Nokogiri::XML::EntityReference.new(doc, "#xa")
|
28
|
+
doc.xpath('/item').first.add_child(lf_node)
|
29
|
+
assert_match /
/, doc.to_xml
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
module Common
|
34
|
+
PATH = 'test/files/test_document_url/'
|
35
|
+
|
36
|
+
attr_accessor :path, :parser
|
37
|
+
|
38
|
+
def xml_document
|
39
|
+
File.join path, 'document.xml'
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.included base
|
43
|
+
def base.test_relative_and_absolute_path method_name, &block
|
44
|
+
test_relative_path method_name, &block
|
45
|
+
test_absolute_path method_name, &block
|
46
|
+
end
|
47
|
+
|
48
|
+
def base.test_absolute_path method_name, &block
|
49
|
+
define_method "#{method_name}_with_absolute_path" do
|
50
|
+
self.path = "#{File.expand_path PATH}/"
|
51
|
+
instance_eval(&block)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def base.test_relative_path method_name, &block
|
56
|
+
define_method method_name do
|
57
|
+
self.path = PATH
|
58
|
+
instance_eval(&block)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
class TestDOMEntityReference < Nokogiri::TestCase
|
65
|
+
include Common
|
66
|
+
|
67
|
+
def setup
|
68
|
+
super
|
69
|
+
@parser = Nokogiri::XML::Document
|
70
|
+
end
|
71
|
+
|
72
|
+
test_relative_and_absolute_path :test_dom_entity_reference_with_dtdloda do
|
73
|
+
# Make sure that we can parse entity references and include them in the document
|
74
|
+
html = File.read xml_document
|
75
|
+
doc = @parser.parse html, path do |cfg|
|
76
|
+
cfg.default_xml
|
77
|
+
cfg.dtdload
|
78
|
+
cfg.noent
|
79
|
+
end
|
80
|
+
assert_equal [], doc.errors
|
81
|
+
assert_equal "foobar", doc.xpath('//blah').text
|
82
|
+
end
|
83
|
+
|
84
|
+
test_relative_and_absolute_path :test_dom_entity_reference_with_dtdvalid do
|
85
|
+
# Make sure that we can parse entity references and include them in the document
|
86
|
+
html = File.read xml_document
|
87
|
+
doc = @parser.parse html, path do |cfg|
|
88
|
+
cfg.default_xml
|
89
|
+
cfg.dtdvalid
|
90
|
+
cfg.noent
|
91
|
+
end
|
92
|
+
assert_equal [], doc.errors
|
93
|
+
assert_equal "foobar", doc.xpath('//blah').text
|
94
|
+
end
|
95
|
+
|
96
|
+
test_absolute_path :test_dom_dtd_loading_with_absolute_path do
|
97
|
+
# Make sure that we can parse entity references and include them in the document
|
98
|
+
html = %Q[<?xml version="1.0" encoding="UTF-8" ?>
|
99
|
+
<!DOCTYPE document SYSTEM "#{path}/document.dtd">
|
100
|
+
<document>
|
101
|
+
<body>&bar;</body>
|
102
|
+
</document>
|
103
|
+
]
|
104
|
+
doc = @parser.parse html, xml_document do |cfg|
|
105
|
+
cfg.default_xml
|
106
|
+
cfg.dtdvalid
|
107
|
+
cfg.noent
|
108
|
+
end
|
109
|
+
assert_equal [], doc.errors
|
110
|
+
assert_equal "foobar", doc.xpath('//blah').text
|
111
|
+
end
|
112
|
+
|
113
|
+
test_relative_and_absolute_path :test_dom_entity_reference_with_io do
|
114
|
+
# Make sure that we can parse entity references and include them in the document
|
115
|
+
html = File.open xml_document
|
116
|
+
doc = @parser.parse html, nil do |cfg|
|
117
|
+
cfg.default_xml
|
118
|
+
cfg.dtdload
|
119
|
+
cfg.noent
|
120
|
+
end
|
121
|
+
assert_equal [], doc.errors
|
122
|
+
assert_equal "foobar", doc.xpath('//blah').text
|
123
|
+
end
|
124
|
+
|
125
|
+
test_relative_and_absolute_path :test_dom_entity_reference_without_noent do
|
126
|
+
# Make sure that we don't include entity references unless NOENT is set to true
|
127
|
+
html = File.read xml_document
|
128
|
+
doc = @parser.parse html, path do |cfg|
|
129
|
+
cfg.default_xml
|
130
|
+
cfg.dtdload
|
131
|
+
end
|
132
|
+
assert_equal [], doc.errors
|
133
|
+
assert_kind_of Nokogiri::XML::EntityReference, doc.xpath('//body').first.children.first
|
134
|
+
end
|
135
|
+
|
136
|
+
test_relative_and_absolute_path :test_dom_entity_reference_without_dtdload do
|
137
|
+
# Make sure that we don't include entity references unless NOENT is set to true
|
138
|
+
html = File.read xml_document
|
139
|
+
doc = @parser.parse html, path do |cfg|
|
140
|
+
cfg.default_xml
|
141
|
+
end
|
142
|
+
assert_kind_of Nokogiri::XML::EntityReference, doc.xpath('//body').first.children.first
|
143
|
+
if Nokogiri.uses_libxml?
|
144
|
+
assert_equal ["Entity 'bar' not defined"], doc.errors.map(&:to_s)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
test_relative_and_absolute_path :test_document_dtd_loading_with_nonet do
|
149
|
+
# Make sure that we don't include remote entities unless NOENT is set to true
|
150
|
+
html = %Q[<?xml version="1.0" encoding="UTF-8" ?>
|
151
|
+
<!DOCTYPE document SYSTEM "http://foo.bar.com/">
|
152
|
+
<document>
|
153
|
+
<body>&bar;</body>
|
154
|
+
</document>
|
155
|
+
]
|
156
|
+
doc = @parser.parse html, path do |cfg|
|
157
|
+
cfg.default_xml
|
158
|
+
cfg.dtdload
|
159
|
+
end
|
160
|
+
assert_kind_of Nokogiri::XML::EntityReference, doc.xpath('//body').first.children.first
|
161
|
+
if Nokogiri.uses_libxml?
|
162
|
+
assert_equal ["Attempt to load network entity http://foo.bar.com/", "Entity 'bar' not defined"], doc.errors.map(&:to_s)
|
163
|
+
else
|
164
|
+
assert_equal ["Attempt to load network entity http://foo.bar.com/"], doc.errors.map(&:to_s)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
# TODO: can we retreive a resource pointing to localhost when NONET is set to true ?
|
168
|
+
end
|
169
|
+
|
170
|
+
class TestSaxEntityReference < Nokogiri::SAX::TestCase
|
171
|
+
include Common
|
172
|
+
|
173
|
+
def setup
|
174
|
+
super
|
175
|
+
@parser = XML::SAX::Parser.new(Doc.new) do |ctx|
|
176
|
+
ctx.replace_entities = true
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
test_relative_and_absolute_path :test_sax_entity_reference do
|
181
|
+
# Make sure that we can parse entity references and include them in the document
|
182
|
+
html = File.read xml_document
|
183
|
+
@parser.parse html
|
184
|
+
refute_nil @parser.document.errors
|
185
|
+
assert_equal ["Entity 'bar' not defined"], @parser.document.errors.map(&:to_s).map(&:strip)
|
186
|
+
end
|
187
|
+
|
188
|
+
test_relative_and_absolute_path :test_more_sax_entity_reference do
|
189
|
+
# Make sure that we don't include entity references unless NOENT is set to true
|
190
|
+
html = %Q[<?xml version="1.0" encoding="UTF-8" ?>
|
191
|
+
<!DOCTYPE document SYSTEM "http://foo.bar.com/">
|
192
|
+
<document>
|
193
|
+
<body>&bar;</body>
|
194
|
+
</document>
|
195
|
+
]
|
196
|
+
@parser.parse html
|
197
|
+
refute_nil @parser.document.errors
|
198
|
+
assert_equal ["Entity 'bar' not defined"], @parser.document.errors.map(&:to_s).map(&:strip)
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
class TestReaderEntityReference < Nokogiri::TestCase
|
203
|
+
include Common
|
204
|
+
|
205
|
+
def setup
|
206
|
+
super
|
207
|
+
end
|
208
|
+
|
209
|
+
test_relative_and_absolute_path :test_reader_entity_reference do
|
210
|
+
# Make sure that we can parse entity references and include them in the document
|
211
|
+
html = File.read xml_document
|
212
|
+
reader = Nokogiri::XML::Reader html, path do |cfg|
|
213
|
+
cfg.default_xml
|
214
|
+
cfg.dtdload
|
215
|
+
cfg.noent
|
216
|
+
end
|
217
|
+
nodes = []
|
218
|
+
reader.each { |n| nodes << n.value }
|
219
|
+
assert_equal ['foobar'], nodes.compact.map(&:strip).reject(&:empty?)
|
220
|
+
end
|
221
|
+
|
222
|
+
test_relative_and_absolute_path :test_reader_entity_reference_without_noent do
|
223
|
+
# Make sure that we can parse entity references and include them in the document
|
224
|
+
html = File.read xml_document
|
225
|
+
reader = Nokogiri::XML::Reader html, path do |cfg|
|
226
|
+
cfg.default_xml
|
227
|
+
cfg.dtdload
|
228
|
+
end
|
229
|
+
nodes = []
|
230
|
+
reader.each { |n| nodes << n.value }
|
231
|
+
assert_equal [], nodes.compact.map(&:strip).reject(&:empty?)
|
232
|
+
end
|
233
|
+
|
234
|
+
test_relative_and_absolute_path :test_reader_entity_reference_without_dtdload do
|
235
|
+
html = File.read xml_document
|
236
|
+
reader = Nokogiri::XML::Reader html, path do |cfg|
|
237
|
+
cfg.default_xml
|
238
|
+
end
|
239
|
+
assert_raises(Nokogiri::XML::SyntaxError) do
|
240
|
+
reader.each { |n| n }
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|