libxml-ruby 2.8.0 → 3.2.1
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 +842 -775
- data/LICENSE +20 -20
- data/MANIFEST +166 -166
- data/README.rdoc +217 -184
- data/Rakefile +90 -78
- data/ext/libxml/extconf.h +3 -0
- 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 +933 -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 +153 -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 +1402 -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 +278 -301
- data/ext/libxml/ruby_xml_schema.h +809 -809
- data/ext/libxml/ruby_xml_schema_attribute.c +109 -109
- data/ext/libxml/ruby_xml_schema_attribute.h +15 -15
- data/ext/libxml/ruby_xml_schema_element.c +95 -94
- data/ext/libxml/ruby_xml_schema_element.h +14 -14
- data/ext/libxml/ruby_xml_schema_facet.c +52 -52
- data/ext/libxml/ruby_xml_schema_facet.h +13 -13
- data/ext/libxml/ruby_xml_schema_type.c +232 -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-ruby.rb +30 -0
- data/lib/libxml.rb +3 -33
- 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.rb +47 -66
- 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/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 +39 -39
- data/test/model/soap.xml +27 -27
- data/test/model/xinclude.xml +4 -4
- data/test/test.xml +2 -0
- 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} +32 -27
- data/test/test_document_write.rb +146 -0
- data/test/{tc_dtd.rb → test_dtd.rb} +28 -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 +3 -10
- 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} +41 -42
- data/test/{tc_properties.rb → test_properties.rb} +6 -7
- data/test/test_reader.rb +363 -0
- data/test/test_relaxng.rb +53 -0
- data/test/{tc_sax_parser.rb → test_sax_parser.rb} +36 -37
- data/test/{tc_schema.rb → test_schema.rb} +43 -37
- 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 +262 -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 +117 -95
- 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_xml.rb +0 -226
- data/test/tc_xpath_expression.rb +0 -38
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require 'xml/libxml'
|
|
4
|
+
|
|
5
|
+
class TestDeprecatedRequire < Minitest::Test
|
|
6
|
+
def test_basic
|
|
7
|
+
xp = LibXML::XML::Parser.string('<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>')
|
|
8
|
+
assert_instance_of(LibXML::XML::Parser, xp)
|
|
9
|
+
@doc = xp.parse
|
|
10
|
+
assert_instance_of(LibXML::XML::Document, @doc)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -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,10 @@ 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
|
+
schema_document = LibXML::XML::Document.file('d:/src/libxml-ruby/test/model/atom.xml', options: LibXML::XML::Parser::Options::NONET)
|
|
130
|
+
end
|
|
126
131
|
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,64 @@ 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
|
+
assert_nil(error.str2)
|
|
89
88
|
assert_nil(error.str3)
|
|
90
89
|
assert_equal(0, error.int1)
|
|
91
90
|
assert_equal(0, error.int2)
|
|
92
|
-
|
|
91
|
+
refute_nil(error.node)
|
|
93
92
|
assert_equal('invalid', error.node.name)
|
|
94
93
|
end
|
|
95
94
|
|
|
@@ -102,28 +101,28 @@ class TestDtd < Test::Unit::TestCase
|
|
|
102
101
|
EOS
|
|
103
102
|
|
|
104
103
|
errors = Array.new
|
|
105
|
-
XML::Error.set_handler do |error|
|
|
104
|
+
LibXML::XML::Error.set_handler do |error|
|
|
106
105
|
errors << error
|
|
107
106
|
end
|
|
108
107
|
|
|
109
|
-
XML.default_load_external_dtd = false
|
|
110
|
-
|
|
108
|
+
LibXML::XML.default_load_external_dtd = false
|
|
109
|
+
LibXML::XML::Parser.string(xml).parse
|
|
111
110
|
assert_equal(0, errors.length)
|
|
112
111
|
|
|
113
112
|
errors.clear
|
|
114
|
-
XML.default_load_external_dtd = true
|
|
115
|
-
|
|
113
|
+
LibXML::XML.default_load_external_dtd = true
|
|
114
|
+
LibXML::XML::Parser.string(xml).parse
|
|
116
115
|
assert_equal(1, errors.length)
|
|
117
116
|
assert_equal("Warning: failed to load external entity \"test.dtd\" at :1.",
|
|
118
117
|
errors[0].to_s)
|
|
119
118
|
|
|
120
119
|
errors = Array.new
|
|
121
|
-
|
|
120
|
+
LibXML::XML::Parser.string(xml, :options => LibXML::XML::Parser::Options::DTDLOAD).parse
|
|
122
121
|
assert_equal(1, errors.length)
|
|
123
122
|
assert_equal("Warning: failed to load external entity \"test.dtd\" at :1.",
|
|
124
123
|
errors[0].to_s)
|
|
125
124
|
ensure
|
|
126
|
-
XML.default_load_external_dtd = false
|
|
127
|
-
XML::Error.reset_handler
|
|
125
|
+
LibXML::XML.default_load_external_dtd = false
|
|
126
|
+
LibXML::XML::Error.reset_handler
|
|
128
127
|
end
|
|
129
128
|
end
|
|
@@ -1,126 +1,129 @@
|
|
|
1
|
-
# encoding: UTF-8
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
#
|
|
20
|
-
# http://en.wikipedia.org/wiki/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
Encoding.default_internal = nil
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
doc = XML::Document.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
doc = XML::Document.
|
|
49
|
-
assert_equal(XML::Encoding::
|
|
50
|
-
assert_equal(Encoding::
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
assert_equal(Encoding::
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
Encoding.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
assert_equal(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
assert_equal(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
assert_equal(
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
assert_equal(
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require_relative './test_helper'
|
|
4
|
+
|
|
5
|
+
# Code UTF8 Latin1 Hex
|
|
6
|
+
# m 109 109 6D
|
|
7
|
+
# ö 195 182 246 C3 B6 / F6
|
|
8
|
+
# t 116 116 74
|
|
9
|
+
# l 108 108 6C
|
|
10
|
+
# e 101 101 65
|
|
11
|
+
# y 121 121 79
|
|
12
|
+
# _ 95 95 5F
|
|
13
|
+
# c 99 99 63
|
|
14
|
+
# r 114 114 72
|
|
15
|
+
# ü 195 188 252 C3 BC / FC
|
|
16
|
+
# e 101 101 65
|
|
17
|
+
|
|
18
|
+
# See:
|
|
19
|
+
# http://en.wikipedia.org/wiki/ISO/IEC_8859-1
|
|
20
|
+
# http://en.wikipedia.org/wiki/List_of_Unicode_characters
|
|
21
|
+
|
|
22
|
+
class TestEncoding < Minitest::Test
|
|
23
|
+
def setup
|
|
24
|
+
@original_encoding = Encoding.default_internal
|
|
25
|
+
Encoding.default_internal = nil
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def teardown
|
|
29
|
+
Encoding.default_internal = @original_encoding
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def file_for_encoding(encoding)
|
|
33
|
+
file_name = "model/bands.#{encoding.name.downcase}.xml"
|
|
34
|
+
File.join(File.dirname(__FILE__), file_name)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def load_encoding(encoding)
|
|
38
|
+
@encoding = encoding
|
|
39
|
+
file = file_for_encoding(encoding)
|
|
40
|
+
|
|
41
|
+
# Strip spaces to make testing easier
|
|
42
|
+
LibXML::XML.default_keep_blanks = false
|
|
43
|
+
@doc = LibXML::XML::Document.file(file)
|
|
44
|
+
LibXML::XML.default_keep_blanks = true
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_encoding
|
|
48
|
+
doc = LibXML::XML::Document.new
|
|
49
|
+
assert_equal(LibXML::XML::Encoding::NONE, doc.encoding)
|
|
50
|
+
assert_equal(Encoding::ASCII_8BIT, doc.rb_encoding)
|
|
51
|
+
|
|
52
|
+
file = File.expand_path(File.join(File.dirname(__FILE__), 'model/bands.xml'))
|
|
53
|
+
doc = LibXML::XML::Document.file(file)
|
|
54
|
+
assert_equal(LibXML::XML::Encoding::UTF_8, doc.encoding)
|
|
55
|
+
assert_equal(Encoding::UTF_8, doc.rb_encoding)
|
|
56
|
+
|
|
57
|
+
doc.encoding = LibXML::XML::Encoding::ISO_8859_1
|
|
58
|
+
assert_equal(LibXML::XML::Encoding::ISO_8859_1, doc.encoding)
|
|
59
|
+
assert_equal(Encoding::ISO8859_1, doc.rb_encoding)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_no_internal_encoding_iso_8859_1
|
|
63
|
+
load_encoding(Encoding::ISO_8859_1)
|
|
64
|
+
node = @doc.root.children.first
|
|
65
|
+
|
|
66
|
+
name = node.name
|
|
67
|
+
assert_equal(Encoding::UTF_8, name.encoding)
|
|
68
|
+
assert_equal("m\u00F6tley_cr\u00FCe", name)
|
|
69
|
+
assert_equal("109 195 182 116 108 101 121 95 99 114 195 188 101",
|
|
70
|
+
name.bytes.to_a.join(" "))
|
|
71
|
+
assert_equal("M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.",
|
|
72
|
+
node.content)
|
|
73
|
+
|
|
74
|
+
name = name.encode(Encoding::ISO_8859_1)
|
|
75
|
+
assert_equal(Encoding::ISO_8859_1, name.encoding)
|
|
76
|
+
assert_equal("m\xF6tley_cr\xFCe".force_encoding(Encoding::ISO_8859_1), name)
|
|
77
|
+
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
|
78
|
+
name.bytes.to_a.join(" "))
|
|
79
|
+
assert_equal("M\xF6tley Cr\xFCe is an American heavy metal band formed in Los Angeles, California in 1981.".force_encoding(Encoding::ISO_8859_1),
|
|
80
|
+
node.content.encode(Encoding::ISO_8859_1))
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def test_internal_encoding_iso_8859_1
|
|
84
|
+
Encoding.default_internal = Encoding::ISO_8859_1
|
|
85
|
+
load_encoding(Encoding::ISO_8859_1)
|
|
86
|
+
node = @doc.root.children.first
|
|
87
|
+
|
|
88
|
+
name = node.name
|
|
89
|
+
assert_equal(Encoding::ISO_8859_1, name.encoding)
|
|
90
|
+
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
|
91
|
+
name.bytes.to_a.join(" "))
|
|
92
|
+
assert_equal("m\xF6tley_cr\xFCe".force_encoding(Encoding::ISO_8859_1), name)
|
|
93
|
+
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
|
94
|
+
name.bytes.to_a.join(" "))
|
|
95
|
+
assert_equal("M\xF6tley Cr\xFCe is an American heavy metal band formed in Los Angeles, California in 1981.".force_encoding(Encoding::ISO_8859_1),
|
|
96
|
+
node.content.encode(Encoding::ISO_8859_1))
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def test_no_internal_encoding_utf_8
|
|
100
|
+
load_encoding(Encoding::UTF_8)
|
|
101
|
+
node = @doc.root.children.first
|
|
102
|
+
|
|
103
|
+
name = node.name
|
|
104
|
+
assert_equal(@encoding, name.encoding)
|
|
105
|
+
assert_equal("109 195 182 116 108 101 121 95 99 114 195 188 101",
|
|
106
|
+
name.bytes.to_a.join(" "))
|
|
107
|
+
|
|
108
|
+
name = name.encode(Encoding::ISO_8859_1)
|
|
109
|
+
assert_equal(Encoding::ISO_8859_1, name.encoding)
|
|
110
|
+
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
|
111
|
+
name.bytes.to_a.join(" "))
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def test_internal_encoding_utf_8
|
|
115
|
+
Encoding.default_internal = Encoding::ISO_8859_1
|
|
116
|
+
load_encoding(Encoding::UTF_8)
|
|
117
|
+
node = @doc.root.children.first
|
|
118
|
+
|
|
119
|
+
name = node.name
|
|
120
|
+
assert_equal(Encoding::ISO_8859_1, name.encoding)
|
|
121
|
+
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
|
122
|
+
name.bytes.to_a.join(" "))
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def test_encoding_conversions
|
|
126
|
+
assert_equal("UTF-8", LibXML::XML::Encoding.to_s(LibXML::XML::Encoding::UTF_8))
|
|
127
|
+
assert_equal(LibXML::XML::Encoding::UTF_8, LibXML::XML::Encoding.from_s("UTF-8"))
|
|
128
|
+
end
|
|
129
|
+
end
|