nokogiri 1.2.3-x86-mswin32-60 → 1.4.5-x86-mswin32-60
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.
- data/.autotest +18 -7
- data/.gemtest +0 -0
- data/CHANGELOG.ja.rdoc +297 -3
- data/CHANGELOG.rdoc +289 -0
- data/Manifest.txt +148 -37
- data/README.ja.rdoc +20 -20
- data/README.rdoc +53 -22
- data/Rakefile +127 -211
- data/bin/nokogiri +54 -0
- data/ext/nokogiri/depend +358 -0
- data/ext/nokogiri/extconf.rb +89 -54
- data/ext/nokogiri/html_document.c +34 -27
- data/ext/nokogiri/html_document.h +1 -1
- data/ext/nokogiri/html_element_description.c +276 -0
- data/ext/nokogiri/html_element_description.h +10 -0
- data/ext/nokogiri/html_entity_lookup.c +7 -5
- data/ext/nokogiri/html_entity_lookup.h +1 -1
- data/ext/nokogiri/html_sax_parser_context.c +94 -0
- data/ext/nokogiri/html_sax_parser_context.h +11 -0
- data/ext/nokogiri/{native.c → nokogiri.c} +31 -7
- data/ext/nokogiri/{native.h → nokogiri.h} +68 -41
- data/ext/nokogiri/xml_attr.c +20 -9
- data/ext/nokogiri/xml_attr.h +1 -1
- data/ext/nokogiri/xml_attribute_decl.c +70 -0
- data/ext/nokogiri/xml_attribute_decl.h +9 -0
- data/ext/nokogiri/xml_cdata.c +21 -9
- data/ext/nokogiri/xml_cdata.h +1 -1
- data/ext/nokogiri/xml_comment.c +18 -6
- data/ext/nokogiri/xml_comment.h +1 -1
- data/ext/nokogiri/xml_document.c +247 -68
- data/ext/nokogiri/xml_document.h +5 -3
- data/ext/nokogiri/xml_document_fragment.c +15 -7
- data/ext/nokogiri/xml_document_fragment.h +1 -1
- data/ext/nokogiri/xml_dtd.c +110 -10
- data/ext/nokogiri/xml_dtd.h +3 -1
- 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 +16 -5
- data/ext/nokogiri/xml_entity_reference.h +1 -1
- data/ext/nokogiri/xml_io.c +40 -8
- data/ext/nokogiri/xml_io.h +2 -1
- data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
- data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
- data/ext/nokogiri/xml_namespace.c +84 -0
- data/ext/nokogiri/xml_namespace.h +13 -0
- data/ext/nokogiri/xml_node.c +782 -225
- data/ext/nokogiri/xml_node.h +2 -4
- data/ext/nokogiri/xml_node_set.c +253 -34
- data/ext/nokogiri/xml_node_set.h +2 -2
- data/ext/nokogiri/xml_processing_instruction.c +17 -5
- data/ext/nokogiri/xml_processing_instruction.h +1 -1
- data/ext/nokogiri/xml_reader.c +277 -85
- data/ext/nokogiri/xml_reader.h +1 -1
- data/ext/nokogiri/xml_relax_ng.c +168 -0
- data/ext/nokogiri/xml_relax_ng.h +9 -0
- data/ext/nokogiri/xml_sax_parser.c +183 -111
- data/ext/nokogiri/xml_sax_parser.h +30 -1
- data/ext/nokogiri/xml_sax_parser_context.c +199 -0
- data/ext/nokogiri/xml_sax_parser_context.h +10 -0
- data/ext/nokogiri/xml_sax_push_parser.c +42 -12
- data/ext/nokogiri/xml_sax_push_parser.h +1 -1
- data/ext/nokogiri/xml_schema.c +205 -0
- data/ext/nokogiri/xml_schema.h +9 -0
- data/ext/nokogiri/xml_syntax_error.c +28 -173
- data/ext/nokogiri/xml_syntax_error.h +2 -1
- data/ext/nokogiri/xml_text.c +16 -6
- data/ext/nokogiri/xml_text.h +1 -1
- data/ext/nokogiri/xml_xpath_context.c +104 -47
- data/ext/nokogiri/xml_xpath_context.h +1 -1
- data/ext/nokogiri/xslt_stylesheet.c +161 -19
- data/ext/nokogiri/xslt_stylesheet.h +1 -1
- data/lib/nokogiri.rb +47 -8
- data/lib/nokogiri/1.8/nokogiri.so +0 -0
- data/lib/nokogiri/1.9/nokogiri.so +0 -0
- data/lib/nokogiri/css.rb +6 -3
- data/lib/nokogiri/css/node.rb +14 -12
- data/lib/nokogiri/css/parser.rb +665 -62
- data/lib/nokogiri/css/parser.y +20 -10
- data/lib/nokogiri/css/parser_extras.rb +91 -0
- data/lib/nokogiri/css/tokenizer.rb +148 -5
- data/lib/nokogiri/css/tokenizer.rex +10 -9
- data/lib/nokogiri/css/xpath_visitor.rb +47 -44
- data/lib/nokogiri/decorators/slop.rb +8 -4
- data/lib/nokogiri/ffi/encoding_handler.rb +42 -0
- data/lib/nokogiri/ffi/html/document.rb +28 -0
- data/lib/nokogiri/ffi/html/element_description.rb +81 -0
- data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
- data/lib/nokogiri/ffi/html/sax/parser_context.rb +38 -0
- data/lib/nokogiri/ffi/io_callbacks.rb +42 -0
- data/lib/nokogiri/ffi/libxml.rb +420 -0
- data/lib/nokogiri/ffi/structs/common_node.rb +38 -0
- data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
- data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
- data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
- data/lib/nokogiri/ffi/structs/xml_attr.rb +20 -0
- data/lib/nokogiri/ffi/structs/xml_attribute.rb +27 -0
- data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
- data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +11 -0
- data/lib/nokogiri/ffi/structs/xml_document.rb +117 -0
- data/lib/nokogiri/ffi/structs/xml_dtd.rb +28 -0
- data/lib/nokogiri/ffi/structs/xml_element.rb +26 -0
- data/lib/nokogiri/ffi/structs/xml_element_content.rb +17 -0
- data/lib/nokogiri/ffi/structs/xml_entity.rb +32 -0
- data/lib/nokogiri/ffi/structs/xml_enumeration.rb +12 -0
- data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
- data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
- data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
- data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
- data/lib/nokogiri/ffi/structs/xml_parser_context.rb +20 -0
- data/lib/nokogiri/ffi/structs/xml_parser_input.rb +19 -0
- data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
- data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
- data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +124 -0
- data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
- data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
- data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
- data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +38 -0
- data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
- data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
- data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
- data/lib/nokogiri/ffi/weak_bucket.rb +40 -0
- data/lib/nokogiri/ffi/xml/attr.rb +41 -0
- data/lib/nokogiri/ffi/xml/attribute_decl.rb +27 -0
- data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
- data/lib/nokogiri/ffi/xml/comment.rb +18 -0
- data/lib/nokogiri/ffi/xml/document.rb +174 -0
- data/lib/nokogiri/ffi/xml/document_fragment.rb +21 -0
- data/lib/nokogiri/ffi/xml/dtd.rb +67 -0
- data/lib/nokogiri/ffi/xml/element_content.rb +43 -0
- data/lib/nokogiri/ffi/xml/element_decl.rb +19 -0
- data/lib/nokogiri/ffi/xml/entity_decl.rb +36 -0
- data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
- data/lib/nokogiri/ffi/xml/namespace.rb +44 -0
- data/lib/nokogiri/ffi/xml/node.rb +559 -0
- data/lib/nokogiri/ffi/xml/node_set.rb +150 -0
- data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
- data/lib/nokogiri/ffi/xml/reader.rb +236 -0
- data/lib/nokogiri/ffi/xml/relax_ng.rb +85 -0
- data/lib/nokogiri/ffi/xml/sax/parser.rb +143 -0
- data/lib/nokogiri/ffi/xml/sax/parser_context.rb +79 -0
- data/lib/nokogiri/ffi/xml/sax/push_parser.rb +51 -0
- data/lib/nokogiri/ffi/xml/schema.rb +109 -0
- data/lib/nokogiri/ffi/xml/syntax_error.rb +98 -0
- data/lib/nokogiri/ffi/xml/text.rb +18 -0
- data/lib/nokogiri/ffi/xml/xpath.rb +9 -0
- data/lib/nokogiri/ffi/xml/xpath_context.rb +153 -0
- data/lib/nokogiri/ffi/xslt/stylesheet.rb +77 -0
- data/lib/nokogiri/html.rb +13 -47
- data/lib/nokogiri/html/builder.rb +27 -1
- data/lib/nokogiri/html/document.rb +201 -7
- data/lib/nokogiri/html/document_fragment.rb +41 -0
- data/lib/nokogiri/html/element_description.rb +23 -0
- data/lib/nokogiri/html/entity_lookup.rb +2 -0
- data/lib/nokogiri/html/sax/parser.rb +34 -3
- data/lib/nokogiri/html/sax/parser_context.rb +16 -0
- data/lib/nokogiri/nokogiri.rb +1 -0
- data/lib/nokogiri/version.rb +40 -1
- data/lib/nokogiri/version_warning.rb +14 -0
- data/lib/nokogiri/xml.rb +32 -53
- data/lib/nokogiri/xml/attr.rb +5 -0
- data/lib/nokogiri/xml/attribute_decl.rb +18 -0
- data/lib/nokogiri/xml/builder.rb +349 -29
- data/lib/nokogiri/xml/cdata.rb +3 -1
- data/lib/nokogiri/xml/character_data.rb +7 -0
- data/lib/nokogiri/xml/document.rb +166 -14
- data/lib/nokogiri/xml/document_fragment.rb +76 -1
- data/lib/nokogiri/xml/dtd.rb +16 -3
- 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 +561 -166
- data/lib/nokogiri/xml/node/save_options.rb +22 -2
- data/lib/nokogiri/xml/node_set.rb +202 -40
- data/lib/nokogiri/xml/parse_options.rb +93 -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 +2 -0
- data/lib/nokogiri/xml/reader.rb +93 -8
- data/lib/nokogiri/xml/relax_ng.rb +32 -0
- data/lib/nokogiri/xml/sax.rb +1 -7
- data/lib/nokogiri/xml/sax/document.rb +107 -2
- data/lib/nokogiri/xml/sax/parser.rb +57 -7
- data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
- data/lib/nokogiri/xml/sax/push_parser.rb +13 -1
- data/lib/nokogiri/xml/schema.rb +63 -0
- data/lib/nokogiri/xml/syntax_error.rb +25 -1
- data/lib/nokogiri/xml/text.rb +4 -1
- data/lib/nokogiri/xml/xpath.rb +1 -1
- data/lib/nokogiri/xml/xpath/syntax_error.rb +3 -0
- data/lib/nokogiri/xml/xpath_context.rb +2 -0
- data/lib/nokogiri/xslt.rb +26 -2
- data/lib/nokogiri/xslt/stylesheet.rb +19 -0
- data/lib/xsd/xmlparser/nokogiri.rb +45 -9
- data/tasks/cross_compile.rb +173 -0
- data/tasks/test.rb +25 -69
- data/test/css/test_nthiness.rb +3 -4
- data/test/css/test_parser.rb +75 -20
- data/test/css/test_tokenizer.rb +23 -1
- data/test/css/test_xpath_visitor.rb +10 -1
- data/test/decorators/test_slop.rb +16 -0
- data/test/ffi/test_document.rb +35 -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/bar/bar.xsd +4 -0
- data/test/files/encoding.html +82 -0
- data/test/files/encoding.xhtml +84 -0
- data/test/files/foo/foo.xsd +4 -0
- data/test/files/po.xml +32 -0
- data/test/files/po.xsd +66 -0
- data/test/files/shift_jis.html +10 -0
- data/test/files/shift_jis.xml +5 -0
- data/test/files/snuggles.xml +3 -0
- data/test/files/staff.dtd +10 -0
- data/test/files/valid_bar.xml +2 -0
- data/test/helper.rb +101 -23
- data/test/html/sax/test_parser.rb +81 -2
- data/test/html/sax/test_parser_context.rb +48 -0
- data/test/html/test_builder.rb +39 -8
- data/test/html/test_document.rb +186 -23
- data/test/html/test_document_encoding.rb +78 -1
- data/test/html/test_document_fragment.rb +253 -0
- data/test/html/test_element_description.rb +98 -0
- data/test/html/test_named_characters.rb +1 -1
- data/test/html/test_node.rb +124 -36
- data/test/html/test_node_encoding.rb +27 -0
- data/test/test_convert_xpath.rb +1 -52
- data/test/test_css_cache.rb +2 -13
- data/test/test_encoding_handler.rb +46 -0
- data/test/test_memory_leak.rb +88 -19
- data/test/test_nokogiri.rb +38 -5
- data/test/test_reader.rb +188 -6
- data/test/test_soap4r_sax.rb +52 -0
- data/test/test_xslt_transforms.rb +183 -83
- data/test/xml/node/test_save_options.rb +1 -1
- data/test/xml/node/test_subclass.rb +44 -0
- data/test/xml/sax/test_parser.rb +175 -4
- data/test/xml/sax/test_parser_context.rb +113 -0
- data/test/xml/sax/test_push_parser.rb +90 -2
- data/test/xml/test_attr.rb +35 -1
- data/test/xml/test_attribute_decl.rb +82 -0
- data/test/xml/test_builder.rb +186 -1
- data/test/xml/test_cdata.rb +32 -1
- data/test/xml/test_comment.rb +13 -1
- data/test/xml/test_document.rb +415 -43
- data/test/xml/test_document_encoding.rb +1 -1
- data/test/xml/test_document_fragment.rb +173 -5
- data/test/xml/test_dtd.rb +61 -6
- data/test/xml/test_dtd_encoding.rb +3 -1
- 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 +120 -0
- data/test/xml/test_entity_reference.rb +5 -1
- data/test/xml/test_namespace.rb +68 -0
- data/test/xml/test_node.rb +546 -201
- data/test/xml/test_node_attributes.rb +34 -0
- data/test/xml/test_node_encoding.rb +33 -3
- data/test/xml/test_node_reparenting.rb +321 -0
- data/test/xml/test_node_set.rb +538 -2
- data/test/xml/test_parse_options.rb +52 -0
- data/test/xml/test_processing_instruction.rb +6 -1
- data/test/xml/test_reader_encoding.rb +1 -1
- data/test/xml/test_relax_ng.rb +60 -0
- data/test/xml/test_schema.rb +94 -0
- data/test/xml/test_syntax_error.rb +12 -0
- data/test/xml/test_text.rb +35 -1
- data/test/xml/test_unparented_node.rb +5 -5
- data/test/xml/test_xpath.rb +142 -11
- data/test/xslt/test_custom_functions.rb +94 -0
- metadata +328 -92
- data/ext/nokogiri/html_sax_parser.c +0 -57
- data/ext/nokogiri/html_sax_parser.h +0 -11
- data/ext/nokogiri/iconv.dll +0 -0
- data/ext/nokogiri/libexslt.dll +0 -0
- data/ext/nokogiri/libxml2.dll +0 -0
- data/ext/nokogiri/libxslt.dll +0 -0
- data/ext/nokogiri/native.so +0 -0
- data/ext/nokogiri/xml_xpath.c +0 -53
- data/ext/nokogiri/xml_xpath.h +0 -11
- data/ext/nokogiri/zlib1.dll +0 -0
- data/lib/action-nokogiri.rb +0 -30
- data/lib/nokogiri/css/generated_parser.rb +0 -713
- data/lib/nokogiri/css/generated_tokenizer.rb +0 -144
- data/lib/nokogiri/decorators.rb +0 -2
- data/lib/nokogiri/decorators/hpricot.rb +0 -3
- data/lib/nokogiri/decorators/hpricot/node.rb +0 -56
- data/lib/nokogiri/decorators/hpricot/node_set.rb +0 -54
- data/lib/nokogiri/decorators/hpricot/xpath_visitor.rb +0 -28
- data/lib/nokogiri/hpricot.rb +0 -51
- data/lib/nokogiri/xml/comment.rb +0 -6
- data/lib/nokogiri/xml/element.rb +0 -6
- data/lib/nokogiri/xml/entity_declaration.rb +0 -9
- data/lib/nokogiri/xml/fragment_handler.rb +0 -34
- data/test/hpricot/files/basic.xhtml +0 -17
- data/test/hpricot/files/boingboing.html +0 -2266
- data/test/hpricot/files/cy0.html +0 -3653
- data/test/hpricot/files/immob.html +0 -400
- data/test/hpricot/files/pace_application.html +0 -1320
- data/test/hpricot/files/tenderlove.html +0 -16
- data/test/hpricot/files/uswebgen.html +0 -220
- data/test/hpricot/files/utf8.html +0 -1054
- data/test/hpricot/files/week9.html +0 -1723
- data/test/hpricot/files/why.xml +0 -19
- data/test/hpricot/load_files.rb +0 -11
- data/test/hpricot/test_alter.rb +0 -68
- data/test/hpricot/test_builder.rb +0 -20
- data/test/hpricot/test_parser.rb +0 -426
- data/test/hpricot/test_paths.rb +0 -15
- data/test/hpricot/test_preserved.rb +0 -77
- data/test/hpricot/test_xml.rb +0 -30
- data/test/test_gc.rb +0 -15
data/test/xml/test_attr.rb
CHANGED
@@ -1,8 +1,17 @@
|
|
1
|
-
require
|
1
|
+
require "helper"
|
2
2
|
|
3
3
|
module Nokogiri
|
4
4
|
module XML
|
5
5
|
class TestAttr < Nokogiri::TestCase
|
6
|
+
def test_new
|
7
|
+
assert_nothing_raised do
|
8
|
+
100.times {
|
9
|
+
doc = Nokogiri::XML::Document.new
|
10
|
+
Nokogiri::XML::Attr.new(doc, 'foo')
|
11
|
+
}
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
6
15
|
def test_content=
|
7
16
|
xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
|
8
17
|
address = xml.xpath('//address')[3]
|
@@ -26,6 +35,31 @@ module Nokogiri
|
|
26
35
|
address.attribute_nodes.first.unlink
|
27
36
|
assert_nil address['domestic']
|
28
37
|
end
|
38
|
+
|
39
|
+
def test_parsing_attribute_namespace
|
40
|
+
doc = Nokogiri::XML <<-EOXML
|
41
|
+
<root xmlns='http://google.com/' xmlns:f='http://flavorjon.es/'>
|
42
|
+
<div f:myattr='foo'></div>
|
43
|
+
</root>
|
44
|
+
EOXML
|
45
|
+
|
46
|
+
node = doc.at_css "div"
|
47
|
+
attr = node.attributes["myattr"]
|
48
|
+
assert_equal "http://flavorjon.es/", attr.namespace.href
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_setting_attribute_namespace
|
52
|
+
doc = Nokogiri::XML <<-EOXML
|
53
|
+
<root xmlns='http://google.com/' xmlns:f='http://flavorjon.es/'>
|
54
|
+
<div f:myattr='foo'></div>
|
55
|
+
</root>
|
56
|
+
EOXML
|
57
|
+
|
58
|
+
node = doc.at_css "div"
|
59
|
+
attr = node.attributes["myattr"]
|
60
|
+
attr.add_namespace("fizzle", "http://fizzle.com/")
|
61
|
+
assert_equal "http://fizzle.com/", attr.namespace.href
|
62
|
+
end
|
29
63
|
end
|
30
64
|
end
|
31
65
|
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
module Nokogiri
|
4
|
+
module XML
|
5
|
+
class TestAttributeDecl < 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
|
+
<!ATTLIST br width CDATA "0">
|
12
|
+
<!ATTLIST a width CDATA >
|
13
|
+
<!ATTLIST payment type (check|cash) "cash">
|
14
|
+
]>
|
15
|
+
<root />
|
16
|
+
eoxml
|
17
|
+
@attrs = @xml.internal_subset.children
|
18
|
+
@attr_decl = @attrs.first
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_inspect
|
22
|
+
assert_equal(
|
23
|
+
"#<#{@attr_decl.class.name}:#{sprintf("0x%x", @attr_decl.object_id)} #{@attr_decl.to_s.inspect}>",
|
24
|
+
@attr_decl.inspect
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_type
|
29
|
+
assert_equal 16, @attr_decl.type
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_class
|
33
|
+
assert_instance_of Nokogiri::XML::AttributeDecl, @attr_decl
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_content
|
37
|
+
assert_raise NoMethodError do
|
38
|
+
@attr_decl.content
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_attributes
|
43
|
+
assert_raise NoMethodError do
|
44
|
+
@attr_decl.attributes
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_namespace
|
49
|
+
assert_raise NoMethodError do
|
50
|
+
@attr_decl.namespace
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_namespace_definitions
|
55
|
+
assert_raise NoMethodError do
|
56
|
+
@attr_decl.namespace_definitions
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_line
|
61
|
+
assert_raise NoMethodError do
|
62
|
+
@attr_decl.line
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_attribute_type
|
67
|
+
assert_equal 1, @attr_decl.attribute_type
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_default
|
71
|
+
assert_equal '0', @attr_decl.default
|
72
|
+
assert_nil @attrs[1].default
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_enumeration
|
76
|
+
assert_equal [], @attr_decl.enumeration
|
77
|
+
assert_equal ['check', 'cash'], @attrs[2].enumeration
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
data/test/xml/test_builder.rb
CHANGED
@@ -1,8 +1,187 @@
|
|
1
|
-
require
|
1
|
+
require "helper"
|
2
2
|
|
3
3
|
module Nokogiri
|
4
4
|
module XML
|
5
5
|
class TestBuilder < Nokogiri::TestCase
|
6
|
+
def test_builder_namespace
|
7
|
+
doc = Nokogiri::XML::Builder.new { |xml|
|
8
|
+
xml.a("xmlns:a" => "x") do
|
9
|
+
xml.b("xmlns:a" => "x", "xmlns:b" => "y")
|
10
|
+
end
|
11
|
+
}.doc
|
12
|
+
|
13
|
+
b = doc.at('b')
|
14
|
+
assert b
|
15
|
+
assert_equal({"xmlns:a"=>"x", "xmlns:b"=>"y"}, b.namespaces)
|
16
|
+
assert_equal({"xmlns:b"=>"y"}, namespaces_defined_on(b))
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_builder_namespace_part_deux
|
20
|
+
doc = Nokogiri::XML::Builder.new { |xml|
|
21
|
+
xml.a("xmlns:b" => "y") do
|
22
|
+
xml.b("xmlns:a" => "x", "xmlns:b" => "y", "xmlns:c" => "z")
|
23
|
+
end
|
24
|
+
}.doc
|
25
|
+
|
26
|
+
b = doc.at('b')
|
27
|
+
assert b
|
28
|
+
assert_equal({"xmlns:a"=>"x", "xmlns:b"=>"y", "xmlns:c"=>"z"}, b.namespaces)
|
29
|
+
assert_equal({"xmlns:a"=>"x", "xmlns:c"=>"z"}, namespaces_defined_on(b))
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_builder_with_unlink
|
33
|
+
assert_nothing_raised do
|
34
|
+
Nokogiri::XML::Builder.new do |xml|
|
35
|
+
xml.foo do
|
36
|
+
xml.bar { xml.parent.unlink }
|
37
|
+
xml.bar2
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_with_root
|
44
|
+
doc = Nokogiri::XML(File.read(XML_FILE))
|
45
|
+
Nokogiri::XML::Builder.with(doc.at('employee')) do |xml|
|
46
|
+
xml.foo
|
47
|
+
end
|
48
|
+
assert_equal 1, doc.xpath('//employee/foo').length
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_root_namespace_default_decl
|
52
|
+
b = Nokogiri::XML::Builder.new { |xml| xml.root(:xmlns => 'one:two') }
|
53
|
+
doc = b.doc
|
54
|
+
assert_equal 'one:two', doc.root.namespace.href
|
55
|
+
assert_equal({ 'xmlns' => 'one:two' }, doc.root.namespaces)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_root_namespace_multi_decl
|
59
|
+
b = Nokogiri::XML::Builder.new { |xml|
|
60
|
+
xml.root(:xmlns => 'one:two', 'xmlns:foo' => 'bar') do
|
61
|
+
xml.hello
|
62
|
+
end
|
63
|
+
}
|
64
|
+
doc = b.doc
|
65
|
+
assert_equal 'one:two', doc.root.namespace.href
|
66
|
+
assert_equal({ 'xmlns' => 'one:two', 'xmlns:foo' => 'bar' }, doc.root.namespaces)
|
67
|
+
|
68
|
+
assert_equal 'one:two', doc.at('hello').namespace.href
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_non_root_namespace
|
72
|
+
b = Nokogiri::XML::Builder.new { |xml|
|
73
|
+
xml.root { xml.hello(:xmlns => 'one') }
|
74
|
+
}
|
75
|
+
assert_equal 'one', b.doc.at('hello', 'xmlns' => 'one').namespace.href
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_specify_namespace
|
79
|
+
b = Nokogiri::XML::Builder.new { |xml|
|
80
|
+
xml.root('xmlns:foo' => 'bar') do
|
81
|
+
xml[:foo].bar
|
82
|
+
xml['foo'].baz
|
83
|
+
end
|
84
|
+
}
|
85
|
+
doc = b.doc
|
86
|
+
assert_equal 'bar', doc.at('foo|bar', 'foo' => 'bar').namespace.href
|
87
|
+
assert_equal 'bar', doc.at('foo|baz', 'foo' => 'bar').namespace.href
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_specify_namespace_nested
|
91
|
+
b = Nokogiri::XML::Builder.new { |xml|
|
92
|
+
xml.root('xmlns:foo' => 'bar') do
|
93
|
+
xml.yay do
|
94
|
+
xml[:foo].bar
|
95
|
+
|
96
|
+
xml.yikes do
|
97
|
+
xml['foo'].baz
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
}
|
102
|
+
doc = b.doc
|
103
|
+
assert_equal 'bar', doc.at('foo|bar', 'foo' => 'bar').namespace.href
|
104
|
+
assert_equal 'bar', doc.at('foo|baz', 'foo' => 'bar').namespace.href
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_specified_namespace_undeclared
|
108
|
+
Nokogiri::XML::Builder.new { |xml|
|
109
|
+
xml.root do
|
110
|
+
assert_raises(ArgumentError) do
|
111
|
+
xml[:foo]
|
112
|
+
end
|
113
|
+
end
|
114
|
+
}
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_set_encoding
|
118
|
+
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
119
|
+
xml.root do
|
120
|
+
xml.bar 'blah'
|
121
|
+
end
|
122
|
+
end
|
123
|
+
assert_match 'UTF-8', builder.to_xml
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_bang_and_underscore_is_escaped
|
127
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
128
|
+
xml.root do
|
129
|
+
xml.p_('adsfadsf')
|
130
|
+
xml.p!('adsfadsf')
|
131
|
+
end
|
132
|
+
end
|
133
|
+
assert_equal 2, builder.doc.xpath('//p').length
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_square_brackets_set_attributes
|
137
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
138
|
+
xml.root do
|
139
|
+
foo = xml.foo
|
140
|
+
foo['id'] = 'hello'
|
141
|
+
assert_equal 'hello', foo['id']
|
142
|
+
end
|
143
|
+
end
|
144
|
+
assert_equal 1, builder.doc.xpath('//foo[@id = "hello"]').length
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_nested_local_variable
|
148
|
+
@ivar = 'hello'
|
149
|
+
local_var = 'hello world'
|
150
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
151
|
+
xml.root do
|
152
|
+
xml.foo local_var
|
153
|
+
xml.bar @ivar
|
154
|
+
xml.baz {
|
155
|
+
xml.text @ivar
|
156
|
+
}
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
assert_equal 'hello world', builder.doc.at('//root/foo').content
|
161
|
+
assert_equal 'hello', builder.doc.at('//root/bar').content
|
162
|
+
assert_equal 'hello', builder.doc.at('baz').content
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_raw_append
|
166
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
167
|
+
xml.root do
|
168
|
+
xml << 'hello'
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
assert_equal 'hello', builder.doc.at('/root').content
|
173
|
+
end
|
174
|
+
|
175
|
+
def test_raw_append_with_instance_eval
|
176
|
+
builder = Nokogiri::XML::Builder.new do
|
177
|
+
root do
|
178
|
+
self << 'hello'
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
assert_equal 'hello', builder.doc.at('/root').content
|
183
|
+
end
|
184
|
+
|
6
185
|
def test_cdata
|
7
186
|
builder = Nokogiri::XML::Builder.new do
|
8
187
|
root {
|
@@ -20,6 +199,12 @@ module Nokogiri
|
|
20
199
|
}
|
21
200
|
assert_equal("<?xml version=\"1.0\"?><root><![CDATA[hello world]]></root>", builder.to_xml.gsub(/\n/, ''))
|
22
201
|
end
|
202
|
+
|
203
|
+
private
|
204
|
+
|
205
|
+
def namespaces_defined_on(node)
|
206
|
+
Hash[*node.namespace_definitions.collect{|n| ["xmlns:" + n.prefix, n.href]}.flatten]
|
207
|
+
end
|
23
208
|
end
|
24
209
|
end
|
25
210
|
end
|
data/test/xml/test_cdata.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "helper"
|
2
2
|
|
3
3
|
module Nokogiri
|
4
4
|
module XML
|
@@ -14,6 +14,37 @@ module Nokogiri
|
|
14
14
|
assert cdata.cdata?
|
15
15
|
assert_equal '#cdata-section', cdata.name
|
16
16
|
end
|
17
|
+
|
18
|
+
def test_new
|
19
|
+
node = CDATA.new(@xml, "foo")
|
20
|
+
assert_equal "foo", node.content
|
21
|
+
|
22
|
+
node = CDATA.new(@xml.root, "foo")
|
23
|
+
assert_equal "foo", node.content
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_new_with_nil
|
27
|
+
node = CDATA.new(@xml, nil)
|
28
|
+
assert_equal nil, node.content
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_lots_of_new_cdata
|
32
|
+
assert_nothing_raised do
|
33
|
+
100.times { CDATA.new(@xml, "asdfasdf") }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_content=
|
38
|
+
node = CDATA.new(@xml, 'foo')
|
39
|
+
assert_equal('foo', node.content)
|
40
|
+
|
41
|
+
node.content = '& <foo> &'
|
42
|
+
assert_equal('& <foo> &', node.content)
|
43
|
+
assert_equal('<![CDATA[& <foo> &]]>', node.to_xml)
|
44
|
+
|
45
|
+
node.content = 'foo ]]> bar'
|
46
|
+
assert_equal('foo ]]> bar', node.content)
|
47
|
+
end
|
17
48
|
end
|
18
49
|
end
|
19
50
|
end
|
data/test/xml/test_comment.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "helper"
|
2
2
|
|
3
3
|
module Nokogiri
|
4
4
|
module XML
|
@@ -12,6 +12,18 @@ module Nokogiri
|
|
12
12
|
comment = Nokogiri::XML::Comment.new(@xml, 'hello world')
|
13
13
|
assert_equal('<!--hello world-->', comment.to_s)
|
14
14
|
end
|
15
|
+
|
16
|
+
def test_comment?
|
17
|
+
comment = Nokogiri::XML::Comment.new(@xml, 'hello world')
|
18
|
+
assert(comment.comment?)
|
19
|
+
assert(!@xml.root.comment?)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_many_comments
|
23
|
+
100.times {
|
24
|
+
Nokogiri::XML::Comment.new(@xml, 'hello world')
|
25
|
+
}
|
26
|
+
end
|
15
27
|
end
|
16
28
|
end
|
17
29
|
end
|
data/test/xml/test_document.rb
CHANGED
@@ -1,15 +1,327 @@
|
|
1
|
-
require
|
1
|
+
require "helper"
|
2
2
|
|
3
3
|
require 'uri'
|
4
4
|
|
5
5
|
module Nokogiri
|
6
6
|
module XML
|
7
7
|
class TestDocument < Nokogiri::TestCase
|
8
|
+
URI = if URI.const_defined?(:DEFAULT_PARSER)
|
9
|
+
::URI::DEFAULT_PARSER
|
10
|
+
else
|
11
|
+
::URI
|
12
|
+
end
|
13
|
+
|
8
14
|
def setup
|
9
15
|
super
|
10
16
|
@xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
|
11
17
|
end
|
12
18
|
|
19
|
+
def test_root_set_to_nil
|
20
|
+
@xml.root = nil
|
21
|
+
assert_equal nil, @xml.root
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_collect_namespaces
|
25
|
+
doc = Nokogiri::XML(<<-eoxml)
|
26
|
+
<xml>
|
27
|
+
<foo xmlns='hello'>
|
28
|
+
<bar xmlns:foo='world' />
|
29
|
+
</foo>
|
30
|
+
</xml>
|
31
|
+
eoxml
|
32
|
+
assert_equal({"xmlns"=>"hello", "xmlns:foo"=>"world"},
|
33
|
+
doc.collect_namespaces)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_subclass_initialize_modify # testing a segv
|
37
|
+
Class.new(Nokogiri::XML::Document) {
|
38
|
+
def initialize
|
39
|
+
super
|
40
|
+
body_node = Nokogiri::XML::Node.new "body", self
|
41
|
+
body_node.content = "stuff"
|
42
|
+
self.root = body_node
|
43
|
+
end
|
44
|
+
}.new
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_create_text_node
|
48
|
+
txt = @xml.create_text_node 'foo'
|
49
|
+
assert_instance_of Nokogiri::XML::Text, txt
|
50
|
+
assert_equal 'foo', txt.text
|
51
|
+
assert_equal @xml, txt.document
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_create_element
|
55
|
+
elm = @xml.create_element('foo')
|
56
|
+
assert_instance_of Nokogiri::XML::Element, elm
|
57
|
+
assert_equal 'foo', elm.name
|
58
|
+
assert_equal @xml, elm.document
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_create_element_with_attributes
|
62
|
+
elm = @xml.create_element('foo',:a => "1")
|
63
|
+
assert_instance_of Nokogiri::XML::Element, elm
|
64
|
+
assert_instance_of Nokogiri::XML::Attr, elm.attributes["a"]
|
65
|
+
assert_equal "1", elm["a"]
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_create_element_with_namespace
|
69
|
+
elm = @xml.create_element('foo',:'xmlns:foo' => 'http://tenderlovemaking.com')
|
70
|
+
assert_equal 'http://tenderlovemaking.com', elm.namespaces['xmlns:foo']
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_create_element_with_content
|
74
|
+
elm = @xml.create_element('foo',"needs more xml/violence")
|
75
|
+
assert_equal "needs more xml/violence", elm.content
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_create_cdata
|
79
|
+
cdata = @xml.create_cdata("abc")
|
80
|
+
assert_instance_of Nokogiri::XML::CDATA, cdata
|
81
|
+
assert_equal "abc", cdata.content
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_pp
|
85
|
+
out = StringIO.new('')
|
86
|
+
assert_nothing_raised do
|
87
|
+
::PP.pp @xml, out
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_create_internal_subset_on_existing_subset
|
92
|
+
assert_not_nil @xml.internal_subset
|
93
|
+
assert_raises(RuntimeError) do
|
94
|
+
@xml.create_internal_subset('staff', nil, 'staff.dtd')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_create_internal_subset
|
99
|
+
xml = Nokogiri::XML('<root />')
|
100
|
+
assert_nil xml.internal_subset
|
101
|
+
|
102
|
+
xml.create_internal_subset('name', nil, 'staff.dtd')
|
103
|
+
ss = xml.internal_subset
|
104
|
+
assert_equal 'name', ss.name
|
105
|
+
assert_nil ss.external_id
|
106
|
+
assert_equal 'staff.dtd', ss.system_id
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_external_subset
|
110
|
+
assert_nil @xml.external_subset
|
111
|
+
Dir.chdir(ASSETS_DIR) do
|
112
|
+
@xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE) { |cfg|
|
113
|
+
cfg.dtdload
|
114
|
+
}
|
115
|
+
end
|
116
|
+
assert @xml.external_subset
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_create_external_subset_fails_with_existing_subset
|
120
|
+
assert_nil @xml.external_subset
|
121
|
+
Dir.chdir(ASSETS_DIR) do
|
122
|
+
@xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE) { |cfg|
|
123
|
+
cfg.dtdload
|
124
|
+
}
|
125
|
+
end
|
126
|
+
assert @xml.external_subset
|
127
|
+
|
128
|
+
assert_raises(RuntimeError) do
|
129
|
+
@xml.create_external_subset('staff', nil, 'staff.dtd')
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_create_external_subset
|
134
|
+
dtd = @xml.create_external_subset('staff', nil, 'staff.dtd')
|
135
|
+
assert_nil dtd.external_id
|
136
|
+
assert_equal 'staff.dtd', dtd.system_id
|
137
|
+
assert_equal 'staff', dtd.name
|
138
|
+
assert_equal dtd, @xml.external_subset
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_version
|
142
|
+
assert_equal '1.0', @xml.version
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_add_namespace
|
146
|
+
assert_raise NoMethodError do
|
147
|
+
@xml.add_namespace('foo', 'bar')
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def test_attributes
|
152
|
+
assert_raise NoMethodError do
|
153
|
+
@xml.attributes
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_namespace
|
158
|
+
assert_raise NoMethodError do
|
159
|
+
@xml.namespace
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def test_namespace_definitions
|
164
|
+
assert_raise NoMethodError do
|
165
|
+
@xml.namespace_definitions
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_line
|
170
|
+
assert_raise NoMethodError do
|
171
|
+
@xml.line
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def test_empty_node_converted_to_html_is_not_self_closing
|
176
|
+
doc = Nokogiri::XML('<a></a>')
|
177
|
+
assert_equal "<a></a>", doc.inner_html
|
178
|
+
end
|
179
|
+
|
180
|
+
def test_fragment
|
181
|
+
fragment = @xml.fragment
|
182
|
+
assert_equal 0, fragment.children.length
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_add_child_fragment_with_single_node
|
186
|
+
doc = Nokogiri::XML::Document.new
|
187
|
+
fragment = doc.fragment('<hello />')
|
188
|
+
doc.add_child fragment
|
189
|
+
assert_equal '/hello', doc.at('//hello').path
|
190
|
+
assert_equal 'hello', doc.root.name
|
191
|
+
end
|
192
|
+
|
193
|
+
def test_add_child_fragment_with_multiple_nodes
|
194
|
+
doc = Nokogiri::XML::Document.new
|
195
|
+
fragment = doc.fragment('<hello /><goodbye />')
|
196
|
+
assert_raises(RuntimeError) do
|
197
|
+
doc.add_child fragment
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
def test_add_child_with_multiple_roots
|
202
|
+
assert_raises(RuntimeError) do
|
203
|
+
@xml << Node.new('foo', @xml)
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
def test_move_root_to_document_with_no_root
|
208
|
+
sender = Nokogiri::XML('<root>foo</root>')
|
209
|
+
newdoc = Nokogiri::XML::Document.new
|
210
|
+
newdoc.root = sender.root
|
211
|
+
end
|
212
|
+
|
213
|
+
def test_move_root_with_existing_root_gets_gcd
|
214
|
+
doc = Nokogiri::XML('<root>test</root>')
|
215
|
+
doc2 = Nokogiri::XML("<root>#{'x' * 5000000}</root>")
|
216
|
+
doc2.root = doc.root
|
217
|
+
end
|
218
|
+
|
219
|
+
def test_validate
|
220
|
+
assert_equal 44, @xml.validate.length
|
221
|
+
end
|
222
|
+
|
223
|
+
def test_validate_no_internal_subset
|
224
|
+
doc = Nokogiri::XML('<test/>')
|
225
|
+
assert_nil doc.validate
|
226
|
+
end
|
227
|
+
|
228
|
+
def test_clone
|
229
|
+
assert @xml.clone
|
230
|
+
end
|
231
|
+
|
232
|
+
def test_document_should_not_have_default_ns
|
233
|
+
doc = Nokogiri::XML::Document.new
|
234
|
+
|
235
|
+
assert_raises NoMethodError do
|
236
|
+
doc.default_namespace = 'http://innernet.com/'
|
237
|
+
end
|
238
|
+
|
239
|
+
assert_raises NoMethodError do
|
240
|
+
doc.add_namespace_definition('foo', 'bar')
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
def test_parse_handles_nil_gracefully
|
245
|
+
assert_nothing_raised do
|
246
|
+
@doc = Nokogiri::XML::Document.parse(nil)
|
247
|
+
end
|
248
|
+
assert_instance_of Nokogiri::XML::Document, @doc
|
249
|
+
end
|
250
|
+
|
251
|
+
def test_parse_takes_block
|
252
|
+
options = nil
|
253
|
+
Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE) do |cfg|
|
254
|
+
options = cfg
|
255
|
+
end
|
256
|
+
assert options
|
257
|
+
end
|
258
|
+
|
259
|
+
def test_parse_yields_parse_options
|
260
|
+
options = nil
|
261
|
+
Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE) do |cfg|
|
262
|
+
options = cfg
|
263
|
+
options.nonet.nowarning.dtdattr
|
264
|
+
end
|
265
|
+
assert options.nonet?
|
266
|
+
assert options.nowarning?
|
267
|
+
assert options.dtdattr?
|
268
|
+
end
|
269
|
+
|
270
|
+
def test_XML_takes_block
|
271
|
+
options = nil
|
272
|
+
Nokogiri::XML(File.read(XML_FILE), XML_FILE) do |cfg|
|
273
|
+
options = cfg
|
274
|
+
options.nonet.nowarning.dtdattr
|
275
|
+
end
|
276
|
+
assert options.nonet?
|
277
|
+
assert options.nowarning?
|
278
|
+
assert options.dtdattr?
|
279
|
+
end
|
280
|
+
|
281
|
+
def test_subclass
|
282
|
+
klass = Class.new(Nokogiri::XML::Document)
|
283
|
+
doc = klass.new
|
284
|
+
assert_instance_of klass, doc
|
285
|
+
end
|
286
|
+
|
287
|
+
def test_subclass_initialize
|
288
|
+
klass = Class.new(Nokogiri::XML::Document) do
|
289
|
+
attr_accessor :initialized_with
|
290
|
+
|
291
|
+
def initialize(*args)
|
292
|
+
@initialized_with = args
|
293
|
+
end
|
294
|
+
end
|
295
|
+
doc = klass.new("1.0", 1)
|
296
|
+
assert_equal ["1.0", 1], doc.initialized_with
|
297
|
+
end
|
298
|
+
|
299
|
+
def test_subclass_dup
|
300
|
+
klass = Class.new(Nokogiri::XML::Document)
|
301
|
+
doc = klass.new.dup
|
302
|
+
assert_instance_of klass, doc
|
303
|
+
end
|
304
|
+
|
305
|
+
def test_subclass_parse
|
306
|
+
klass = Class.new(Nokogiri::XML::Document)
|
307
|
+
doc = klass.parse(File.read(XML_FILE))
|
308
|
+
assert_equal @xml.to_s, doc.to_s
|
309
|
+
assert_instance_of klass, doc
|
310
|
+
end
|
311
|
+
|
312
|
+
def test_document_parse_method
|
313
|
+
xml = Nokogiri::XML::Document.parse(File.read(XML_FILE))
|
314
|
+
assert_equal @xml.to_s, xml.to_s
|
315
|
+
end
|
316
|
+
|
317
|
+
def test_encoding=
|
318
|
+
@xml.encoding = 'UTF-8'
|
319
|
+
assert_match 'UTF-8', @xml.to_xml
|
320
|
+
|
321
|
+
@xml.encoding = 'EUC-JP'
|
322
|
+
assert_match 'EUC-JP', @xml.to_xml
|
323
|
+
end
|
324
|
+
|
13
325
|
def test_namespace_should_not_exist
|
14
326
|
assert_raises(NoMethodError) {
|
15
327
|
@xml.namespace
|
@@ -17,13 +329,22 @@ module Nokogiri
|
|
17
329
|
end
|
18
330
|
|
19
331
|
def test_non_existant_function
|
20
|
-
|
332
|
+
# WTF. I don't know why this is different between MRI and ffi.
|
333
|
+
# They should be the same... Either way, raising an exception
|
334
|
+
# is the correct thing to do.
|
335
|
+
exception = RuntimeError
|
336
|
+
|
337
|
+
if Nokogiri::VERSION_INFO['libxml']['platform'] == 'jruby'
|
338
|
+
exception = Nokogiri::XML::XPath::SyntaxError
|
339
|
+
end
|
340
|
+
|
341
|
+
assert_raises(exception) {
|
21
342
|
@xml.xpath('//name[foo()]')
|
22
343
|
}
|
23
344
|
end
|
24
345
|
|
25
346
|
def test_ancestors
|
26
|
-
assert_equal
|
347
|
+
assert_equal 0, @xml.ancestors.length
|
27
348
|
end
|
28
349
|
|
29
350
|
def test_root_node_parent_is_document
|
@@ -68,6 +389,22 @@ module Nokogiri
|
|
68
389
|
assert_equal 1, doc.search('//xmlns:foo').search('./xmlns:bar').length
|
69
390
|
end
|
70
391
|
|
392
|
+
def test_to_xml_with_indent
|
393
|
+
doc = Nokogiri::XML('<root><foo><bar/></foo></root>')
|
394
|
+
doc = Nokogiri::XML(doc.to_xml(:indent => 5))
|
395
|
+
|
396
|
+
assert_indent 5, doc
|
397
|
+
end
|
398
|
+
|
399
|
+
def test_write_xml_to_with_indent
|
400
|
+
io = StringIO.new
|
401
|
+
doc = Nokogiri::XML('<root><foo><bar/></foo></root>')
|
402
|
+
doc.write_xml_to io, :indent => 5
|
403
|
+
io.rewind
|
404
|
+
doc = Nokogiri::XML(io.read)
|
405
|
+
assert_indent 5, doc
|
406
|
+
end
|
407
|
+
|
71
408
|
# wtf... osx's libxml sucks.
|
72
409
|
unless Nokogiri::LIBXML_VERSION =~ /^2\.6\./
|
73
410
|
def test_encoding
|
@@ -91,6 +428,18 @@ module Nokogiri
|
|
91
428
|
assert_raises(Nokogiri::XML::SyntaxError) {
|
92
429
|
Nokogiri::XML('<foo><bar></foo>', nil, nil, 0)
|
93
430
|
}
|
431
|
+
|
432
|
+
assert_raises(Nokogiri::XML::SyntaxError) {
|
433
|
+
Nokogiri::XML('<foo><bar></foo>') { |cfg|
|
434
|
+
cfg.strict
|
435
|
+
}
|
436
|
+
}
|
437
|
+
|
438
|
+
assert_raises(Nokogiri::XML::SyntaxError) {
|
439
|
+
Nokogiri::XML(StringIO.new('<foo><bar></foo>')) { |cfg|
|
440
|
+
cfg.strict
|
441
|
+
}
|
442
|
+
}
|
94
443
|
end
|
95
444
|
|
96
445
|
def test_XML_function
|
@@ -143,11 +492,6 @@ module Nokogiri
|
|
143
492
|
}
|
144
493
|
end
|
145
494
|
|
146
|
-
def test_new_document_collect_namespaces
|
147
|
-
doc = Nokogiri::XML::Document.new
|
148
|
-
assert_equal({}, doc.collect_namespaces)
|
149
|
-
end
|
150
|
-
|
151
495
|
def test_find_with_namespace
|
152
496
|
doc = Nokogiri::XML.parse(<<-eoxml)
|
153
497
|
<x xmlns:tenderlove='http://tenderlovemaking.com/'>
|
@@ -157,21 +501,21 @@ module Nokogiri
|
|
157
501
|
|
158
502
|
ctx = Nokogiri::XML::XPathContext.new(doc)
|
159
503
|
ctx.register_ns 'tenderlove', 'http://tenderlovemaking.com/'
|
160
|
-
set = ctx.evaluate('//tenderlove:foo')
|
504
|
+
set = ctx.evaluate('//tenderlove:foo')
|
161
505
|
assert_equal 1, set.length
|
162
506
|
assert_equal 'foo', set.first.name
|
163
507
|
|
164
508
|
# It looks like only the URI is important:
|
165
509
|
ctx = Nokogiri::XML::XPathContext.new(doc)
|
166
510
|
ctx.register_ns 'america', 'http://tenderlovemaking.com/'
|
167
|
-
set = ctx.evaluate('//america:foo')
|
511
|
+
set = ctx.evaluate('//america:foo')
|
168
512
|
assert_equal 1, set.length
|
169
513
|
assert_equal 'foo', set.first.name
|
170
514
|
|
171
515
|
# Its so important that a missing slash will cause it to return nothing
|
172
516
|
ctx = Nokogiri::XML::XPathContext.new(doc)
|
173
517
|
ctx.register_ns 'america', 'http://tenderlovemaking.com'
|
174
|
-
set = ctx.evaluate('//america:foo')
|
518
|
+
set = ctx.evaluate('//america:foo')
|
175
519
|
assert_equal 0, set.length
|
176
520
|
end
|
177
521
|
|
@@ -230,6 +574,65 @@ module Nokogiri
|
|
230
574
|
assert dup.xml?, 'duplicate should be xml'
|
231
575
|
end
|
232
576
|
|
577
|
+
def test_new
|
578
|
+
doc = nil
|
579
|
+
assert_nothing_raised {
|
580
|
+
doc = Nokogiri::XML::Document.new
|
581
|
+
}
|
582
|
+
assert doc
|
583
|
+
assert doc.xml?
|
584
|
+
assert_nil doc.root
|
585
|
+
end
|
586
|
+
|
587
|
+
def test_set_root
|
588
|
+
doc = nil
|
589
|
+
assert_nothing_raised {
|
590
|
+
doc = Nokogiri::XML::Document.new
|
591
|
+
}
|
592
|
+
assert doc
|
593
|
+
assert doc.xml?
|
594
|
+
assert_nil doc.root
|
595
|
+
node = Nokogiri::XML::Node.new("b", doc) { |n|
|
596
|
+
n.content = 'hello world'
|
597
|
+
}
|
598
|
+
assert_equal('hello world', node.content)
|
599
|
+
doc.root = node
|
600
|
+
assert_equal(node, doc.root)
|
601
|
+
end
|
602
|
+
|
603
|
+
def test_remove_namespaces
|
604
|
+
doc = Nokogiri::XML <<-EOX
|
605
|
+
<root xmlns:a="http://a.flavorjon.es/" xmlns:b="http://b.flavorjon.es/">
|
606
|
+
<a:foo>hello from a</a:foo>
|
607
|
+
<b:foo>hello from b</b:foo>
|
608
|
+
<container xmlns:c="http://c.flavorjon.es/">
|
609
|
+
<c:foo c:attr='attr-value'>hello from c</c:foo>
|
610
|
+
</container>
|
611
|
+
</root>
|
612
|
+
EOX
|
613
|
+
|
614
|
+
namespaces = doc.root.namespaces
|
615
|
+
|
616
|
+
# assert on setup
|
617
|
+
assert_equal 2, doc.root.namespaces.length
|
618
|
+
assert_equal 3, doc.at_xpath("//container").namespaces.length
|
619
|
+
assert_equal 0, doc.xpath("//foo").length
|
620
|
+
assert_equal 1, doc.xpath("//a:foo").length
|
621
|
+
assert_equal 1, doc.xpath("//a:foo").length
|
622
|
+
assert_equal 1, doc.xpath("//x:foo", "x" => "http://c.flavorjon.es/").length
|
623
|
+
assert_match %r{foo c:attr}, doc.to_xml
|
624
|
+
|
625
|
+
doc.remove_namespaces!
|
626
|
+
|
627
|
+
assert_equal 0, doc.root.namespaces.length
|
628
|
+
assert_equal 0, doc.at_xpath("//container").namespaces.length
|
629
|
+
assert_equal 3, doc.xpath("//foo").length
|
630
|
+
assert_equal 0, doc.xpath("//a:foo", namespaces).length
|
631
|
+
assert_equal 0, doc.xpath("//a:foo", namespaces).length
|
632
|
+
assert_equal 0, doc.xpath("//x:foo", "x" => "http://c.flavorjon.es/").length
|
633
|
+
assert_match %r{foo attr}, doc.to_xml
|
634
|
+
end
|
635
|
+
|
233
636
|
def test_subset_is_decorated
|
234
637
|
x = Module.new do
|
235
638
|
def awesome!
|
@@ -260,38 +663,7 @@ module Nokogiri
|
|
260
663
|
assert node.respond_to?(:awesome!), node.class
|
261
664
|
end
|
262
665
|
assert @xml.root.respond_to?(:awesome!)
|
263
|
-
|
264
|
-
|
265
|
-
def test_new
|
266
|
-
doc = nil
|
267
|
-
assert_nothing_raised {
|
268
|
-
doc = Nokogiri::XML::Document.new
|
269
|
-
}
|
270
|
-
assert doc
|
271
|
-
assert doc.xml?
|
272
|
-
assert_nil doc.root
|
273
|
-
end
|
274
|
-
|
275
|
-
def test_set_root
|
276
|
-
doc = nil
|
277
|
-
assert_nothing_raised {
|
278
|
-
doc = Nokogiri::XML::Document.new
|
279
|
-
}
|
280
|
-
assert doc
|
281
|
-
assert doc.xml?
|
282
|
-
assert_nil doc.root
|
283
|
-
node = Nokogiri::XML::Node.new("b", doc) { |n|
|
284
|
-
n.content = 'hello world'
|
285
|
-
}
|
286
|
-
assert_equal('hello world', node.content)
|
287
|
-
doc.root = node
|
288
|
-
assert_equal(node, doc.root)
|
289
|
-
end
|
290
|
-
|
291
|
-
def util_decorate(document, x)
|
292
|
-
document.decorators(XML::Node) << x
|
293
|
-
document.decorators(XML::NodeSet) << x
|
294
|
-
document.decorate!
|
666
|
+
assert @xml.children.respond_to?(:awesome!)
|
295
667
|
end
|
296
668
|
end
|
297
669
|
end
|