libxml-ruby 2.8.0 → 3.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/HISTORY +859 -775
- data/LICENSE +20 -20
- data/MANIFEST +166 -166
- data/README.rdoc +217 -184
- data/Rakefile +98 -78
- data/ext/libxml/extconf.rb +61 -116
- data/ext/libxml/libxml.c +80 -76
- data/ext/libxml/ruby_libxml.h +67 -75
- data/ext/libxml/ruby_xml.c +937 -893
- data/ext/libxml/ruby_xml.h +10 -10
- data/ext/libxml/ruby_xml_attr.c +333 -333
- data/ext/libxml/ruby_xml_attr.h +12 -12
- data/ext/libxml/ruby_xml_attr_decl.c +153 -153
- data/ext/libxml/ruby_xml_attr_decl.h +11 -11
- data/ext/libxml/ruby_xml_attributes.c +275 -275
- data/ext/libxml/ruby_xml_attributes.h +15 -15
- data/ext/libxml/ruby_xml_cbg.c +85 -85
- data/ext/libxml/ruby_xml_document.c +1123 -1147
- data/ext/libxml/ruby_xml_document.h +11 -11
- data/ext/libxml/ruby_xml_dtd.c +248 -268
- data/ext/libxml/ruby_xml_dtd.h +9 -9
- data/ext/libxml/ruby_xml_encoding.c +250 -260
- data/ext/libxml/ruby_xml_encoding.h +16 -19
- data/ext/libxml/ruby_xml_error.c +996 -996
- data/ext/libxml/ruby_xml_error.h +12 -12
- data/ext/libxml/ruby_xml_html_parser.c +89 -92
- data/ext/libxml/ruby_xml_html_parser.h +10 -10
- data/ext/libxml/ruby_xml_html_parser_context.c +337 -338
- data/ext/libxml/ruby_xml_html_parser_context.h +10 -10
- data/ext/libxml/ruby_xml_html_parser_options.c +46 -46
- data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
- data/ext/libxml/ruby_xml_input_cbg.c +191 -191
- data/ext/libxml/ruby_xml_input_cbg.h +20 -20
- data/ext/libxml/ruby_xml_io.c +47 -50
- data/ext/libxml/ruby_xml_io.h +10 -10
- data/ext/libxml/ruby_xml_namespace.c +154 -153
- data/ext/libxml/ruby_xml_namespace.h +10 -10
- data/ext/libxml/ruby_xml_namespaces.c +293 -293
- data/ext/libxml/ruby_xml_namespaces.h +9 -9
- data/ext/libxml/ruby_xml_node.c +1406 -1452
- data/ext/libxml/ruby_xml_node.h +13 -11
- data/ext/libxml/ruby_xml_parser.c +91 -94
- data/ext/libxml/ruby_xml_parser.h +12 -12
- data/ext/libxml/ruby_xml_parser_context.c +999 -1001
- data/ext/libxml/ruby_xml_parser_context.h +10 -10
- data/ext/libxml/ruby_xml_parser_options.c +66 -66
- data/ext/libxml/ruby_xml_parser_options.h +12 -12
- data/ext/libxml/ruby_xml_reader.c +1239 -1228
- data/ext/libxml/ruby_xml_reader.h +17 -17
- data/ext/libxml/ruby_xml_relaxng.c +110 -111
- data/ext/libxml/ruby_xml_relaxng.h +10 -10
- data/ext/libxml/ruby_xml_sax2_handler.c +326 -328
- data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
- data/ext/libxml/ruby_xml_sax_parser.c +116 -120
- data/ext/libxml/ruby_xml_sax_parser.h +10 -10
- data/ext/libxml/ruby_xml_schema.c +350 -301
- data/ext/libxml/ruby_xml_schema.h +806 -809
- data/ext/libxml/ruby_xml_schema_attribute.c +61 -109
- data/ext/libxml/ruby_xml_schema_attribute.h +15 -15
- data/ext/libxml/ruby_xml_schema_element.c +69 -94
- data/ext/libxml/ruby_xml_schema_element.h +14 -14
- data/ext/libxml/ruby_xml_schema_facet.c +46 -52
- data/ext/libxml/ruby_xml_schema_facet.h +13 -13
- data/ext/libxml/ruby_xml_schema_type.c +214 -259
- data/ext/libxml/ruby_xml_schema_type.h +9 -9
- data/ext/libxml/ruby_xml_version.h +9 -9
- data/ext/libxml/ruby_xml_writer.c +1133 -1137
- data/ext/libxml/ruby_xml_writer.h +10 -10
- data/ext/libxml/ruby_xml_xinclude.c +16 -16
- data/ext/libxml/ruby_xml_xinclude.h +11 -11
- data/ext/libxml/ruby_xml_xpath.c +194 -188
- data/ext/libxml/ruby_xml_xpath.h +13 -13
- data/ext/libxml/ruby_xml_xpath_context.c +360 -361
- data/ext/libxml/ruby_xml_xpath_context.h +9 -9
- data/ext/libxml/ruby_xml_xpath_expression.c +81 -81
- data/ext/libxml/ruby_xml_xpath_expression.h +10 -10
- data/ext/libxml/ruby_xml_xpath_object.c +338 -335
- data/ext/libxml/ruby_xml_xpath_object.h +17 -17
- data/ext/libxml/ruby_xml_xpointer.c +99 -99
- data/ext/libxml/ruby_xml_xpointer.h +11 -11
- data/ext/vc/libxml_ruby.sln +17 -15
- data/lib/libxml/node.rb +2 -78
- data/lib/libxml/parser.rb +0 -266
- data/lib/libxml/sax_parser.rb +0 -17
- data/lib/libxml/schema/attribute.rb +19 -19
- data/lib/libxml/schema/element.rb +19 -27
- data/lib/libxml/schema/type.rb +21 -29
- data/lib/libxml/schema.rb +47 -66
- data/lib/libxml-ruby.rb +30 -0
- data/lib/libxml.rb +3 -33
- data/libxml-ruby.gemspec +48 -44
- data/script/benchmark/depixelate +634 -634
- data/script/benchmark/hamlet.xml +9054 -9054
- data/script/benchmark/parsecount +170 -170
- data/script/benchmark/throughput +41 -41
- data/script/test +6 -6
- data/setup.rb +0 -1
- data/test/c14n/given/example-1.xml +14 -14
- data/test/c14n/given/example-2.xml +11 -11
- data/test/c14n/given/example-3.xml +18 -18
- data/test/c14n/given/example-4.xml +9 -9
- data/test/c14n/given/example-5.xml +12 -12
- data/test/c14n/given/example-6.xml +2 -2
- data/test/c14n/given/example-7.xml +11 -11
- data/test/c14n/given/example-8.xml +11 -11
- data/test/c14n/given/example-8.xpath +9 -9
- data/test/c14n/result/1-1-without-comments/example-1 +3 -3
- data/test/c14n/result/1-1-without-comments/example-2 +10 -10
- data/test/c14n/result/1-1-without-comments/example-3 +13 -13
- data/test/c14n/result/1-1-without-comments/example-4 +8 -8
- data/test/c14n/result/1-1-without-comments/example-5 +2 -2
- data/test/c14n/result/with-comments/example-1 +5 -5
- data/test/c14n/result/with-comments/example-2 +10 -10
- data/test/c14n/result/with-comments/example-3 +13 -13
- data/test/c14n/result/with-comments/example-4 +8 -8
- data/test/c14n/result/with-comments/example-5 +3 -3
- data/test/c14n/result/without-comments/example-1 +3 -3
- data/test/c14n/result/without-comments/example-2 +10 -10
- data/test/c14n/result/without-comments/example-3 +13 -13
- data/test/c14n/result/without-comments/example-4 +8 -8
- data/test/c14n/result/without-comments/example-5 +2 -2
- data/test/model/atom.xml +12 -12
- data/test/model/bands.iso-8859-1.xml +4 -4
- data/test/model/bands.utf-8.xml +4 -4
- data/test/model/bands.xml +4 -4
- data/test/model/books.xml +153 -153
- data/test/model/cwm_1_0.xml +11336 -0
- data/test/model/merge_bug_data.xml +58 -58
- data/test/model/ruby-lang.html +238 -238
- data/test/model/rubynet.xml +79 -79
- data/test/model/shiporder.rnc +28 -28
- data/test/model/shiporder.rng +86 -86
- data/test/model/shiporder.xml +22 -22
- data/test/model/shiporder.xsd +44 -40
- data/test/model/shiporder_bad.xsd +40 -0
- data/test/model/shiporder_import.xsd +45 -0
- data/test/model/soap.xml +27 -27
- data/test/model/xinclude.xml +4 -4
- data/test/{tc_attr.rb → test_attr.rb} +23 -25
- data/test/{tc_attr_decl.rb → test_attr_decl.rb} +13 -14
- data/test/{tc_attributes.rb → test_attributes.rb} +11 -18
- data/test/{tc_canonicalize.rb → test_canonicalize.rb} +36 -41
- data/test/test_deprecated_require.rb +12 -0
- data/test/{tc_document.rb → test_document.rb} +33 -27
- data/test/test_document_write.rb +146 -0
- data/test/{tc_dtd.rb → test_dtd.rb} +29 -29
- data/test/{tc_encoding.rb → test_encoding.rb} +129 -126
- data/test/{tc_encoding_sax.rb → test_encoding_sax.rb} +7 -6
- data/test/test_error.rb +178 -0
- data/test/test_helper.rb +4 -9
- data/test/test_html_parser.rb +162 -0
- data/test/test_html_parser_context.rb +23 -0
- data/test/test_namespace.rb +60 -0
- data/test/{tc_namespaces.rb → test_namespaces.rb} +34 -44
- data/test/{tc_node.rb → test_node.rb} +68 -47
- data/test/{tc_node_cdata.rb → test_node_cdata.rb} +12 -13
- data/test/{tc_node_comment.rb → test_node_comment.rb} +7 -8
- data/test/{tc_node_copy.rb → test_node_copy.rb} +4 -6
- data/test/{tc_node_edit.rb → test_node_edit.rb} +23 -41
- data/test/{tc_node_pi.rb → test_node_pi.rb} +37 -40
- data/test/{tc_node_text.rb → test_node_text.rb} +10 -12
- data/test/{tc_node_write.rb → test_node_write.rb} +18 -29
- data/test/test_node_xlink.rb +28 -0
- data/test/test_parser.rb +324 -0
- data/test/{tc_parser_context.rb → test_parser_context.rb} +42 -49
- data/test/{tc_properties.rb → test_properties.rb} +6 -7
- data/test/test_reader.rb +364 -0
- data/test/test_relaxng.rb +53 -0
- data/test/{tc_sax_parser.rb → test_sax_parser.rb} +44 -38
- data/test/test_schema.rb +231 -0
- data/test/test_suite.rb +38 -40
- data/test/{tc_traversal.rb → test_traversal.rb} +5 -6
- data/test/{tc_writer.rb → test_writer.rb} +468 -448
- data/test/{tc_xinclude.rb → test_xinclude.rb} +4 -5
- data/test/test_xml.rb +263 -0
- data/test/{tc_xpath.rb → test_xpath.rb} +31 -32
- data/test/{tc_xpath_context.rb → test_xpath_context.rb} +8 -9
- data/test/test_xpath_expression.rb +37 -0
- data/test/{tc_xpointer.rb → test_xpointer.rb} +16 -18
- metadata +122 -100
- data/lib/libxml/ns.rb +0 -22
- data/lib/libxml/properties.rb +0 -23
- data/lib/libxml/reader.rb +0 -29
- data/lib/libxml/xpath_object.rb +0 -16
- data/test/etc_doc_to_s.rb +0 -21
- data/test/ets_doc_file.rb +0 -17
- data/test/ets_doc_to_s.rb +0 -23
- data/test/ets_gpx.rb +0 -28
- data/test/ets_node_gc.rb +0 -23
- data/test/ets_test.xml +0 -2
- data/test/ets_tsr.rb +0 -11
- data/test/tc_deprecated_require.rb +0 -13
- data/test/tc_document_write.rb +0 -196
- data/test/tc_error.rb +0 -180
- data/test/tc_html_parser.rb +0 -153
- data/test/tc_html_parser_context.rb +0 -24
- data/test/tc_namespace.rb +0 -62
- data/test/tc_node_xlink.rb +0 -29
- data/test/tc_parser.rb +0 -381
- data/test/tc_reader.rb +0 -400
- data/test/tc_relaxng.rb +0 -54
- data/test/tc_schema.rb +0 -162
- data/test/tc_xml.rb +0 -226
- data/test/tc_xpath_expression.rb +0 -38
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
|
-
|
|
3
|
-
require 'test/unit'
|
|
2
|
+
require_relative './test_helper'
|
|
4
3
|
|
|
5
|
-
class TestDocument < Test
|
|
4
|
+
class TestDocument < Minitest::Test
|
|
6
5
|
def setup
|
|
7
|
-
xp = XML::Parser.string('<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>')
|
|
8
|
-
assert_instance_of(XML::Parser, xp)
|
|
6
|
+
xp = LibXML::XML::Parser.string('<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>')
|
|
7
|
+
assert_instance_of(LibXML::XML::Parser, xp)
|
|
9
8
|
@doc = xp.parse
|
|
10
|
-
assert_instance_of(XML::Document, @doc)
|
|
9
|
+
assert_instance_of(LibXML::XML::Document, @doc)
|
|
11
10
|
end
|
|
12
11
|
|
|
13
12
|
def teardown
|
|
@@ -15,24 +14,24 @@ class TestDocument < Test::Unit::TestCase
|
|
|
15
14
|
end
|
|
16
15
|
|
|
17
16
|
def test_klass
|
|
18
|
-
assert_instance_of(XML::Document, @doc)
|
|
17
|
+
assert_instance_of(LibXML::XML::Document, @doc)
|
|
19
18
|
end
|
|
20
19
|
|
|
21
20
|
def test_context
|
|
22
21
|
context = @doc.context
|
|
23
|
-
assert_instance_of(XML::XPath::Context, context)
|
|
22
|
+
assert_instance_of(LibXML::XML::XPath::Context, context)
|
|
24
23
|
end
|
|
25
24
|
|
|
26
25
|
def test_find
|
|
27
26
|
set = @doc.find('/ruby_array/fixnum')
|
|
28
|
-
assert_instance_of(XML::XPath::Object, set)
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
assert_instance_of(LibXML::XML::XPath::Object, set)
|
|
28
|
+
assert_raises(NoMethodError) {
|
|
29
|
+
set.xpath
|
|
31
30
|
}
|
|
32
31
|
end
|
|
33
32
|
|
|
34
33
|
def test_compression
|
|
35
|
-
if XML.enabled_zlib?
|
|
34
|
+
if LibXML::XML.enabled_zlib?
|
|
36
35
|
0.upto(9) do |i|
|
|
37
36
|
assert_equal(i, @doc.compression = i)
|
|
38
37
|
assert_equal(i, @doc.compression)
|
|
@@ -60,41 +59,41 @@ class TestDocument < Test::Unit::TestCase
|
|
|
60
59
|
def test_version
|
|
61
60
|
assert_equal('1.0', @doc.version)
|
|
62
61
|
|
|
63
|
-
doc = XML::Document.new('6.9')
|
|
62
|
+
doc = LibXML::XML::Document.new('6.9')
|
|
64
63
|
assert_equal('6.9', doc.version)
|
|
65
64
|
end
|
|
66
65
|
|
|
67
66
|
def test_write_root
|
|
68
|
-
@doc.root = XML::Node.new('rubynet')
|
|
69
|
-
assert_instance_of(XML::Node, @doc.root)
|
|
70
|
-
assert_instance_of(XML::Document, @doc.root.doc)
|
|
67
|
+
@doc.root = LibXML::XML::Node.new('rubynet')
|
|
68
|
+
assert_instance_of(LibXML::XML::Node, @doc.root)
|
|
69
|
+
assert_instance_of(LibXML::XML::Document, @doc.root.doc)
|
|
71
70
|
assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rubynet/>\n",
|
|
72
71
|
@doc.to_s(:indent => false))
|
|
73
72
|
end
|
|
74
73
|
|
|
75
74
|
def test_doc_node_type
|
|
76
|
-
assert_equal(XML::Node::DOCUMENT_NODE, XML::Document.new.node_type)
|
|
75
|
+
assert_equal(LibXML::XML::Node::DOCUMENT_NODE, LibXML::XML::Document.new.node_type)
|
|
77
76
|
end
|
|
78
77
|
|
|
79
78
|
def test_doc_node_type_name
|
|
80
|
-
assert_equal('document_xml', XML::Document.new.node_type_name)
|
|
79
|
+
assert_equal('document_xml', LibXML::XML::Document.new.node_type_name)
|
|
81
80
|
end
|
|
82
81
|
|
|
83
82
|
def test_xhtml
|
|
84
|
-
doc = XML::Document.new
|
|
83
|
+
doc = LibXML::XML::Document.new
|
|
85
84
|
assert(!doc.xhtml?)
|
|
86
|
-
XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil, doc, true
|
|
85
|
+
LibXML::XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil, doc, true
|
|
87
86
|
assert(doc.xhtml?)
|
|
88
|
-
|
|
87
|
+
end
|
|
89
88
|
|
|
90
89
|
def test_document_root
|
|
91
90
|
doc1 = LibXML::XML::Document.string("<one/>")
|
|
92
91
|
doc2 = LibXML::XML::Document.string("<two/>")
|
|
93
92
|
|
|
94
|
-
error =
|
|
93
|
+
error = assert_raises(LibXML::XML::Error) do
|
|
95
94
|
doc1.root = doc2.root
|
|
96
95
|
end
|
|
97
|
-
assert_equal(" Nodes belong to different documents. You must first import the node by calling XML::Document.import.",
|
|
96
|
+
assert_equal(" Nodes belong to different documents. You must first import the node by calling LibXML::XML::Document.import.",
|
|
98
97
|
error.to_s)
|
|
99
98
|
|
|
100
99
|
doc2.root << doc2.import(doc1.root)
|
|
@@ -106,16 +105,16 @@ class TestDocument < Test::Unit::TestCase
|
|
|
106
105
|
end
|
|
107
106
|
|
|
108
107
|
def test_import_node
|
|
109
|
-
doc1 = XML::Parser.string('<nums><one></one></nums>').parse
|
|
110
|
-
doc2 = XML::Parser.string('<nums><two></two></nums>').parse
|
|
108
|
+
doc1 = LibXML::XML::Parser.string('<nums><one></one></nums>').parse
|
|
109
|
+
doc2 = LibXML::XML::Parser.string('<nums><two></two></nums>').parse
|
|
111
110
|
|
|
112
111
|
node = doc1.root.child
|
|
113
112
|
|
|
114
|
-
error =
|
|
113
|
+
error = assert_raises(LibXML::XML::Error) do
|
|
115
114
|
doc2.root << node
|
|
116
115
|
end
|
|
117
116
|
|
|
118
|
-
assert_equal(" Nodes belong to different documents. You must first import the node by calling XML::Document.import.",
|
|
117
|
+
assert_equal(" Nodes belong to different documents. You must first import the node by calling LibXML::XML::Document.import.",
|
|
119
118
|
error.to_s)
|
|
120
119
|
|
|
121
120
|
doc2.root << doc2.import(node)
|
|
@@ -123,4 +122,11 @@ class TestDocument < Test::Unit::TestCase
|
|
|
123
122
|
assert_equal("<nums><two/><one/></nums>",
|
|
124
123
|
doc2.root.to_s(:indent => false))
|
|
125
124
|
end
|
|
125
|
+
|
|
126
|
+
def test_nonet
|
|
127
|
+
xml_string = '<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>'
|
|
128
|
+
xml = LibXML::XML::Document.string(xml_string, options: LibXML::XML::Parser::Options::NONET)
|
|
129
|
+
file = File.join(File.dirname(__FILE__), 'model/atom.xml')
|
|
130
|
+
schema_document = LibXML::XML::Document.file(file, options: LibXML::XML::Parser::Options::NONET)
|
|
131
|
+
end
|
|
126
132
|
end
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require_relative './test_helper'
|
|
4
|
+
require 'tmpdir'
|
|
5
|
+
|
|
6
|
+
class TestDocumentWrite < Minitest::Test
|
|
7
|
+
def setup
|
|
8
|
+
@file_name = "model/bands.utf-8.xml"
|
|
9
|
+
|
|
10
|
+
# Strip spaces to make testing easier
|
|
11
|
+
LibXML::XML.default_keep_blanks = false
|
|
12
|
+
file = File.join(File.dirname(__FILE__), @file_name)
|
|
13
|
+
@doc = LibXML::XML::Document.file(file)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def teardown
|
|
17
|
+
LibXML::XML.default_keep_blanks = true
|
|
18
|
+
@doc = nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# --- to_s tests ---
|
|
22
|
+
def test_to_s_default
|
|
23
|
+
# Default to_s has indentation
|
|
24
|
+
assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bands genre=\"metal\">\n <m\u00F6tley_cr\u00FCe country=\"us\">M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\u00F6tley_cr\u00FCe>\n <iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
|
|
25
|
+
@doc.to_s)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_to_s_no_global_indentation
|
|
29
|
+
# No indentation due to global setting
|
|
30
|
+
LibXML::XML.indent_tree_output = false
|
|
31
|
+
value = @doc.to_s
|
|
32
|
+
|
|
33
|
+
assert_equal(Encoding::UTF_8, value.encoding)
|
|
34
|
+
assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bands genre=\"metal\">\n<m\u00F6tley_cr\u00FCe country=\"us\">M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\u00F6tley_cr\u00FCe>\n<iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
|
|
35
|
+
value)
|
|
36
|
+
ensure
|
|
37
|
+
LibXML::XML.indent_tree_output = true
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_to_s_no_indentation
|
|
41
|
+
# No indentation due to local setting
|
|
42
|
+
value = @doc.to_s(:indent => false)
|
|
43
|
+
assert_equal(Encoding::UTF_8, value.encoding)
|
|
44
|
+
assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bands genre=\"metal\"><m\u00F6tley_cr\u00FCe country=\"us\">M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\u00F6tley_cr\u00FCe><iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden></bands>\n",
|
|
45
|
+
value)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_to_s_encoding
|
|
49
|
+
# Test encodings
|
|
50
|
+
|
|
51
|
+
# UTF8:
|
|
52
|
+
# ö - c3 b6 in hex, \303\266 in octal
|
|
53
|
+
# ü - c3 bc in hex, \303\274 in octal
|
|
54
|
+
value = @doc.to_s(:encoding => LibXML::XML::Encoding::UTF_8)
|
|
55
|
+
assert_equal(Encoding::UTF_8, value.encoding)
|
|
56
|
+
assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bands genre=\"metal\">\n <m\u00F6tley_cr\u00FCe country=\"us\">M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\u00F6tley_cr\u00FCe>\n <iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
|
|
57
|
+
value)
|
|
58
|
+
|
|
59
|
+
# ISO_8859_1:
|
|
60
|
+
# ö - f6 in hex, \366 in octal
|
|
61
|
+
# ü - fc in hex, \374 in octal
|
|
62
|
+
value = @doc.to_s(:encoding => LibXML::XML::Encoding::ISO_8859_1)
|
|
63
|
+
assert_equal(Encoding::ISO8859_1, value.encoding)
|
|
64
|
+
assert_equal("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<bands genre=\"metal\">\n <m\xF6tley_cr\xFCe country=\"us\">M\xF6tley Cr\xFCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\xF6tley_cr\xFCe>\n <iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n".force_encoding(Encoding::ISO8859_1),
|
|
65
|
+
@doc.to_s(:encoding => LibXML::XML::Encoding::ISO_8859_1))
|
|
66
|
+
|
|
67
|
+
# Invalid encoding
|
|
68
|
+
error = assert_raises(ArgumentError) do
|
|
69
|
+
@doc.to_s(:encoding => -9999)
|
|
70
|
+
end
|
|
71
|
+
assert_equal('Unknown encoding value: -9999', error.to_s)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# --- save tests -----
|
|
75
|
+
def test_save_utf8
|
|
76
|
+
temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_utf8.xml")
|
|
77
|
+
|
|
78
|
+
bytes = @doc.save(temp_filename)
|
|
79
|
+
assert_equal(305, bytes)
|
|
80
|
+
|
|
81
|
+
contents = File.read(temp_filename, nil, nil, :encoding => Encoding::UTF_8)
|
|
82
|
+
assert_equal(Encoding::UTF_8, contents.encoding)
|
|
83
|
+
assert_equal("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<bands genre=\"metal\">\n <m\u00F6tley_cr\u00FCe country=\"us\">M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\u00F6tley_cr\u00FCe>\n <iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
|
|
84
|
+
contents)
|
|
85
|
+
ensure
|
|
86
|
+
File.delete(temp_filename)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def test_save_utf8_no_indents
|
|
90
|
+
temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_utf8_no_indents.xml")
|
|
91
|
+
|
|
92
|
+
bytes = @doc.save(temp_filename, :indent => false)
|
|
93
|
+
assert_equal(298, bytes)
|
|
94
|
+
|
|
95
|
+
contents = File.read(temp_filename, nil, nil, :encoding => Encoding::UTF_8)
|
|
96
|
+
assert_equal("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<bands genre=\"metal\"><m\u00F6tley_cr\u00FCe country=\"us\">M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\u00F6tley_cr\u00FCe><iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden></bands>\n",
|
|
97
|
+
contents)
|
|
98
|
+
ensure
|
|
99
|
+
File.delete(temp_filename)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def test_save_iso_8859_1
|
|
103
|
+
temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_iso_8859_1.xml")
|
|
104
|
+
bytes = @doc.save(temp_filename, :encoding => LibXML::XML::Encoding::ISO_8859_1)
|
|
105
|
+
assert_equal(304, bytes)
|
|
106
|
+
|
|
107
|
+
contents = File.read(temp_filename, nil, nil, :encoding => Encoding::ISO8859_1)
|
|
108
|
+
assert_equal(Encoding::ISO8859_1, contents.encoding)
|
|
109
|
+
assert_equal("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<bands genre=\"metal\">\n <m\xF6tley_cr\xFCe country=\"us\">M\xF6tley Cr\xFCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\xF6tley_cr\xFCe>\n <iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n".force_encoding(Encoding::ISO8859_1),
|
|
110
|
+
contents)
|
|
111
|
+
ensure
|
|
112
|
+
File.delete(temp_filename)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def test_save_iso_8859_1_no_indent
|
|
116
|
+
temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_iso_8859_1_no_indent.xml")
|
|
117
|
+
bytes = @doc.save(temp_filename, :indent => false, :encoding => LibXML::XML::Encoding::ISO_8859_1)
|
|
118
|
+
assert_equal(297, bytes)
|
|
119
|
+
|
|
120
|
+
contents = File.read(temp_filename, nil, nil, :encoding => Encoding::ISO8859_1)
|
|
121
|
+
assert_equal(Encoding::ISO8859_1, contents.encoding)
|
|
122
|
+
assert_equal("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<bands genre=\"metal\"><m\xF6tley_cr\xFCe country=\"us\">M\xF6tley Cr\xFCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\xF6tley_cr\xFCe><iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden></bands>\n".force_encoding(Encoding::ISO8859_1),
|
|
123
|
+
contents)
|
|
124
|
+
ensure
|
|
125
|
+
File.delete(temp_filename)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def test_thread_set_root
|
|
129
|
+
# Previously a segmentation fault occurred when running libxml in
|
|
130
|
+
# background threads.
|
|
131
|
+
thread = Thread.new do
|
|
132
|
+
100000.times do |i|
|
|
133
|
+
document = LibXML::XML::Document.new
|
|
134
|
+
node = LibXML::XML::Node.new('test')
|
|
135
|
+
document.root = node
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
thread.join
|
|
139
|
+
assert(true)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# --- Debug ---
|
|
143
|
+
def test_debug
|
|
144
|
+
assert(@doc.debug)
|
|
145
|
+
end
|
|
146
|
+
end
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require_relative './test_helper'
|
|
4
4
|
|
|
5
|
-
require 'test/unit'
|
|
6
5
|
|
|
7
|
-
class TestDtd < Test
|
|
6
|
+
class TestDtd < Minitest::Test
|
|
8
7
|
def setup
|
|
9
|
-
xp = XML::Parser.string(<<-EOS)
|
|
8
|
+
xp = LibXML::XML::Parser.string(<<-EOS)
|
|
10
9
|
<root>
|
|
11
10
|
<head a="ee" id="1">Colorado</head>
|
|
12
11
|
<descr>Lots of nice mountains</descr>
|
|
@@ -20,7 +19,7 @@ class TestDtd < Test::Unit::TestCase
|
|
|
20
19
|
end
|
|
21
20
|
|
|
22
21
|
def dtd
|
|
23
|
-
XML::Dtd.new(<<-EOS)
|
|
22
|
+
LibXML::XML::Dtd.new(<<-EOS)
|
|
24
23
|
<!ELEMENT root (head, descr)>
|
|
25
24
|
<!ELEMENT head (#PCDATA)>
|
|
26
25
|
<!ATTLIST head
|
|
@@ -32,64 +31,65 @@ class TestDtd < Test::Unit::TestCase
|
|
|
32
31
|
end
|
|
33
32
|
|
|
34
33
|
def test_internal_subset
|
|
35
|
-
xhtml_dtd = XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil, nil, true
|
|
34
|
+
xhtml_dtd = LibXML::XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil, nil, true
|
|
36
35
|
assert xhtml_dtd.name.nil?
|
|
37
36
|
assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
|
|
38
37
|
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
|
|
39
38
|
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
|
|
40
39
|
|
|
41
|
-
xhtml_dtd = XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", "xhtml1", nil, true
|
|
40
|
+
xhtml_dtd = LibXML::XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", "xhtml1", nil, true
|
|
42
41
|
assert_equal "xhtml1", xhtml_dtd.name
|
|
43
42
|
assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
|
|
44
43
|
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
|
|
45
44
|
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
|
|
46
|
-
|
|
45
|
+
end
|
|
47
46
|
|
|
48
47
|
def test_external_subset
|
|
49
|
-
xhtml_dtd = XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil
|
|
48
|
+
xhtml_dtd = LibXML::XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil
|
|
50
49
|
assert xhtml_dtd.name.nil?
|
|
51
50
|
assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
|
|
52
51
|
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
|
|
53
52
|
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
|
|
54
53
|
|
|
55
|
-
xhtml_dtd = XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", "xhtml1"
|
|
54
|
+
xhtml_dtd = LibXML::XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", "xhtml1"
|
|
56
55
|
assert_equal "xhtml1", xhtml_dtd.name
|
|
57
56
|
assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
|
|
58
57
|
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
|
|
59
58
|
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
|
|
60
|
-
|
|
59
|
+
end
|
|
61
60
|
|
|
62
61
|
def test_valid
|
|
63
62
|
assert(@doc.validate(dtd))
|
|
64
63
|
end
|
|
65
64
|
|
|
66
65
|
def test_node_type
|
|
67
|
-
assert_equal(XML::Node::DTD_NODE, dtd.node_type)
|
|
66
|
+
assert_equal(LibXML::XML::Node::DTD_NODE, dtd.node_type)
|
|
68
67
|
end
|
|
69
68
|
|
|
70
69
|
def test_invalid
|
|
71
|
-
new_node = XML::Node.new('invalid', 'this will mess up validation')
|
|
70
|
+
new_node = LibXML::XML::Node.new('invalid', 'this will mess up validation')
|
|
72
71
|
@doc.root << new_node
|
|
73
72
|
|
|
74
|
-
error =
|
|
73
|
+
error = assert_raises(LibXML::XML::Error) do
|
|
75
74
|
@doc.validate(dtd)
|
|
76
75
|
end
|
|
77
76
|
|
|
78
77
|
# Check the error worked
|
|
79
|
-
|
|
80
|
-
assert_kind_of(XML::Error, error)
|
|
78
|
+
refute_nil(error)
|
|
79
|
+
assert_kind_of(LibXML::XML::Error, error)
|
|
81
80
|
assert_equal("Error: No declaration for element invalid.", error.message)
|
|
82
|
-
assert_equal(XML::Error::VALID, error.domain)
|
|
83
|
-
assert_equal(XML::Error::DTD_UNKNOWN_ELEM, error.code)
|
|
84
|
-
assert_equal(XML::Error::ERROR, error.level)
|
|
81
|
+
assert_equal(LibXML::XML::Error::VALID, error.domain)
|
|
82
|
+
assert_equal(LibXML::XML::Error::DTD_UNKNOWN_ELEM, error.code)
|
|
83
|
+
assert_equal(LibXML::XML::Error::ERROR, error.level)
|
|
85
84
|
assert_nil(error.file)
|
|
86
85
|
assert_nil(error.line)
|
|
87
86
|
assert_equal('invalid', error.str1)
|
|
88
|
-
|
|
87
|
+
# Different answers across operating systems
|
|
88
|
+
# assert_nil(error.str2)
|
|
89
89
|
assert_nil(error.str3)
|
|
90
90
|
assert_equal(0, error.int1)
|
|
91
91
|
assert_equal(0, error.int2)
|
|
92
|
-
|
|
92
|
+
refute_nil(error.node)
|
|
93
93
|
assert_equal('invalid', error.node.name)
|
|
94
94
|
end
|
|
95
95
|
|
|
@@ -102,28 +102,28 @@ class TestDtd < Test::Unit::TestCase
|
|
|
102
102
|
EOS
|
|
103
103
|
|
|
104
104
|
errors = Array.new
|
|
105
|
-
XML::Error.set_handler do |error|
|
|
105
|
+
LibXML::XML::Error.set_handler do |error|
|
|
106
106
|
errors << error
|
|
107
107
|
end
|
|
108
108
|
|
|
109
|
-
XML.default_load_external_dtd = false
|
|
110
|
-
|
|
109
|
+
LibXML::XML.default_load_external_dtd = false
|
|
110
|
+
LibXML::XML::Parser.string(xml).parse
|
|
111
111
|
assert_equal(0, errors.length)
|
|
112
112
|
|
|
113
113
|
errors.clear
|
|
114
|
-
XML.default_load_external_dtd = true
|
|
115
|
-
|
|
114
|
+
LibXML::XML.default_load_external_dtd = true
|
|
115
|
+
LibXML::XML::Parser.string(xml).parse
|
|
116
116
|
assert_equal(1, errors.length)
|
|
117
117
|
assert_equal("Warning: failed to load external entity \"test.dtd\" at :1.",
|
|
118
118
|
errors[0].to_s)
|
|
119
119
|
|
|
120
120
|
errors = Array.new
|
|
121
|
-
|
|
121
|
+
LibXML::XML::Parser.string(xml, :options => LibXML::XML::Parser::Options::DTDLOAD).parse
|
|
122
122
|
assert_equal(1, errors.length)
|
|
123
123
|
assert_equal("Warning: failed to load external entity \"test.dtd\" at :1.",
|
|
124
124
|
errors[0].to_s)
|
|
125
125
|
ensure
|
|
126
|
-
XML.default_load_external_dtd = false
|
|
127
|
-
XML::Error.reset_handler
|
|
126
|
+
LibXML::XML.default_load_external_dtd = false
|
|
127
|
+
LibXML::XML::Error.reset_handler
|
|
128
128
|
end
|
|
129
129
|
end
|