libxml-ruby 5.0.4 → 5.0.5
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 +4 -4
- data/HISTORY +10 -6
- data/README.rdoc +1 -1
- data/ext/libxml/extconf.rb +5 -0
- data/ext/libxml/ruby_xml.c +556 -556
- data/ext/libxml/ruby_xml_attributes.h +17 -17
- data/ext/libxml/ruby_xml_document.c +1129 -1129
- data/ext/libxml/ruby_xml_dtd.c +257 -257
- data/ext/libxml/ruby_xml_encoding.c +250 -250
- data/ext/libxml/ruby_xml_error.c +1003 -1003
- data/ext/libxml/ruby_xml_error.h +14 -14
- data/ext/libxml/ruby_xml_html_parser_context.c +351 -351
- data/ext/libxml/ruby_xml_input_cbg.c +188 -188
- data/ext/libxml/ruby_xml_namespace.c +151 -151
- data/ext/libxml/ruby_xml_parser.h +10 -10
- data/ext/libxml/ruby_xml_parser_context.c +1009 -1009
- data/ext/libxml/ruby_xml_parser_options.c +74 -74
- data/ext/libxml/ruby_xml_parser_options.h +10 -10
- data/ext/libxml/ruby_xml_sax2_handler.c +326 -326
- data/ext/libxml/ruby_xml_sax_parser.c +108 -108
- data/ext/libxml/ruby_xml_version.h +9 -9
- data/lib/libxml/attr.rb +122 -122
- data/lib/libxml/attr_decl.rb +80 -80
- data/lib/libxml/attributes.rb +13 -13
- data/lib/libxml/document.rb +194 -194
- data/lib/libxml/error.rb +95 -95
- data/lib/libxml/hpricot.rb +77 -77
- data/lib/libxml/html_parser.rb +96 -96
- data/lib/libxml/namespace.rb +61 -61
- data/lib/libxml/namespaces.rb +37 -37
- data/lib/libxml/node.rb +323 -323
- data/lib/libxml/parser.rb +102 -102
- data/lib/libxml/sax_callbacks.rb +179 -179
- data/lib/libxml/sax_parser.rb +40 -40
- data/lib/libxml/tree.rb +28 -28
- data/lib/libxml.rb +4 -4
- data/lib/xml/libxml.rb +10 -10
- data/lib/xml.rb +13 -13
- data/libxml-ruby.gemspec +50 -49
- data/test/test_document.rb +140 -140
- data/test/test_document_write.rb +142 -142
- data/test/test_dtd.rb +126 -126
- data/test/test_encoding.rb +126 -126
- data/test/test_error.rb +194 -194
- data/test/test_helper.rb +20 -20
- data/test/test_namespace.rb +58 -58
- data/test/test_node.rb +235 -235
- data/test/test_node_write.rb +93 -93
- data/test/test_parser.rb +333 -333
- data/test/test_reader.rb +364 -364
- data/test/test_xml.rb +168 -168
- metadata +5 -4
data/test/test_document_write.rb
CHANGED
@@ -1,143 +1,143 @@
|
|
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
|
-
file = File.join(File.dirname(__FILE__), @file_name)
|
11
|
-
@doc = LibXML::XML::Document.file(file, options: LibXML::XML::Parser::Options::NOBLANKS)
|
12
|
-
end
|
13
|
-
|
14
|
-
def teardown
|
15
|
-
@doc = nil
|
16
|
-
end
|
17
|
-
|
18
|
-
# --- to_s tests ---
|
19
|
-
def test_to_s_default
|
20
|
-
# Default to_s has indentation
|
21
|
-
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",
|
22
|
-
@doc.to_s)
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_to_s_no_global_indentation
|
26
|
-
# No indentation due to global setting
|
27
|
-
LibXML::XML.indent_tree_output = false
|
28
|
-
value = @doc.to_s
|
29
|
-
|
30
|
-
assert_equal(Encoding::UTF_8, value.encoding)
|
31
|
-
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",
|
32
|
-
value)
|
33
|
-
ensure
|
34
|
-
LibXML::XML.indent_tree_output = true
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_to_s_no_indentation
|
38
|
-
# No indentation due to local setting
|
39
|
-
value = @doc.to_s(:indent => false)
|
40
|
-
assert_equal(Encoding::UTF_8, value.encoding)
|
41
|
-
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",
|
42
|
-
value)
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_to_s_encoding
|
46
|
-
# Test encodings
|
47
|
-
|
48
|
-
# UTF8:
|
49
|
-
# ö - c3 b6 in hex, \303\266 in octal
|
50
|
-
# ü - c3 bc in hex, \303\274 in octal
|
51
|
-
value = @doc.to_s(:encoding => LibXML::XML::Encoding::UTF_8)
|
52
|
-
assert_equal(Encoding::UTF_8, value.encoding)
|
53
|
-
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",
|
54
|
-
value)
|
55
|
-
|
56
|
-
# ISO_8859_1:
|
57
|
-
# ö - f6 in hex, \366 in octal
|
58
|
-
# ü - fc in hex, \374 in octal
|
59
|
-
value = @doc.to_s(:encoding => LibXML::XML::Encoding::ISO_8859_1)
|
60
|
-
assert_equal(Encoding::ISO8859_1, value.encoding)
|
61
|
-
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),
|
62
|
-
@doc.to_s(:encoding => LibXML::XML::Encoding::ISO_8859_1))
|
63
|
-
|
64
|
-
# Invalid encoding
|
65
|
-
error = assert_raises(ArgumentError) do
|
66
|
-
@doc.to_s(:encoding => -9999)
|
67
|
-
end
|
68
|
-
assert_equal('Unknown encoding value: -9999', error.to_s)
|
69
|
-
end
|
70
|
-
|
71
|
-
# --- save tests -----
|
72
|
-
def test_save_utf8
|
73
|
-
temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_utf8.xml")
|
74
|
-
|
75
|
-
bytes = @doc.save(temp_filename)
|
76
|
-
assert_equal(305, bytes)
|
77
|
-
|
78
|
-
contents = File.read(temp_filename, nil, nil, :encoding => Encoding::UTF_8)
|
79
|
-
assert_equal(Encoding::UTF_8, contents.encoding)
|
80
|
-
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",
|
81
|
-
contents)
|
82
|
-
ensure
|
83
|
-
File.delete(temp_filename)
|
84
|
-
end
|
85
|
-
|
86
|
-
def test_save_utf8_no_indents
|
87
|
-
temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_utf8_no_indents.xml")
|
88
|
-
|
89
|
-
bytes = @doc.save(temp_filename, :indent => false)
|
90
|
-
assert_equal(298, bytes)
|
91
|
-
|
92
|
-
contents = File.read(temp_filename, nil, nil, :encoding => Encoding::UTF_8)
|
93
|
-
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",
|
94
|
-
contents)
|
95
|
-
ensure
|
96
|
-
File.delete(temp_filename)
|
97
|
-
end
|
98
|
-
|
99
|
-
def test_save_iso_8859_1
|
100
|
-
temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_iso_8859_1.xml")
|
101
|
-
bytes = @doc.save(temp_filename, :encoding => LibXML::XML::Encoding::ISO_8859_1)
|
102
|
-
assert_equal(304, bytes)
|
103
|
-
|
104
|
-
contents = File.read(temp_filename, nil, nil, :encoding => Encoding::ISO8859_1)
|
105
|
-
assert_equal(Encoding::ISO8859_1, contents.encoding)
|
106
|
-
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),
|
107
|
-
contents)
|
108
|
-
ensure
|
109
|
-
File.delete(temp_filename)
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_save_iso_8859_1_no_indent
|
113
|
-
temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_iso_8859_1_no_indent.xml")
|
114
|
-
bytes = @doc.save(temp_filename, :indent => false, :encoding => LibXML::XML::Encoding::ISO_8859_1)
|
115
|
-
assert_equal(297, bytes)
|
116
|
-
|
117
|
-
contents = File.read(temp_filename, nil, nil, :encoding => Encoding::ISO8859_1)
|
118
|
-
assert_equal(Encoding::ISO8859_1, contents.encoding)
|
119
|
-
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),
|
120
|
-
contents)
|
121
|
-
ensure
|
122
|
-
File.delete(temp_filename)
|
123
|
-
end
|
124
|
-
|
125
|
-
def test_thread_set_root
|
126
|
-
# Previously a segmentation fault occurred when running libxml in
|
127
|
-
# background threads.
|
128
|
-
thread = Thread.new do
|
129
|
-
100000.times do |i|
|
130
|
-
document = LibXML::XML::Document.new
|
131
|
-
node = LibXML::XML::Node.new('test')
|
132
|
-
document.root = node
|
133
|
-
end
|
134
|
-
end
|
135
|
-
thread.join
|
136
|
-
assert(true)
|
137
|
-
end
|
138
|
-
|
139
|
-
# --- Debug ---
|
140
|
-
def test_debug
|
141
|
-
assert(@doc.debug)
|
142
|
-
end
|
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
|
+
file = File.join(File.dirname(__FILE__), @file_name)
|
11
|
+
@doc = LibXML::XML::Document.file(file, options: LibXML::XML::Parser::Options::NOBLANKS)
|
12
|
+
end
|
13
|
+
|
14
|
+
def teardown
|
15
|
+
@doc = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
# --- to_s tests ---
|
19
|
+
def test_to_s_default
|
20
|
+
# Default to_s has indentation
|
21
|
+
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",
|
22
|
+
@doc.to_s)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_to_s_no_global_indentation
|
26
|
+
# No indentation due to global setting
|
27
|
+
LibXML::XML.indent_tree_output = false
|
28
|
+
value = @doc.to_s
|
29
|
+
|
30
|
+
assert_equal(Encoding::UTF_8, value.encoding)
|
31
|
+
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",
|
32
|
+
value)
|
33
|
+
ensure
|
34
|
+
LibXML::XML.indent_tree_output = true
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_to_s_no_indentation
|
38
|
+
# No indentation due to local setting
|
39
|
+
value = @doc.to_s(:indent => false)
|
40
|
+
assert_equal(Encoding::UTF_8, value.encoding)
|
41
|
+
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",
|
42
|
+
value)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_to_s_encoding
|
46
|
+
# Test encodings
|
47
|
+
|
48
|
+
# UTF8:
|
49
|
+
# ö - c3 b6 in hex, \303\266 in octal
|
50
|
+
# ü - c3 bc in hex, \303\274 in octal
|
51
|
+
value = @doc.to_s(:encoding => LibXML::XML::Encoding::UTF_8)
|
52
|
+
assert_equal(Encoding::UTF_8, value.encoding)
|
53
|
+
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",
|
54
|
+
value)
|
55
|
+
|
56
|
+
# ISO_8859_1:
|
57
|
+
# ö - f6 in hex, \366 in octal
|
58
|
+
# ü - fc in hex, \374 in octal
|
59
|
+
value = @doc.to_s(:encoding => LibXML::XML::Encoding::ISO_8859_1)
|
60
|
+
assert_equal(Encoding::ISO8859_1, value.encoding)
|
61
|
+
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),
|
62
|
+
@doc.to_s(:encoding => LibXML::XML::Encoding::ISO_8859_1))
|
63
|
+
|
64
|
+
# Invalid encoding
|
65
|
+
error = assert_raises(ArgumentError) do
|
66
|
+
@doc.to_s(:encoding => -9999)
|
67
|
+
end
|
68
|
+
assert_equal('Unknown encoding value: -9999', error.to_s)
|
69
|
+
end
|
70
|
+
|
71
|
+
# --- save tests -----
|
72
|
+
def test_save_utf8
|
73
|
+
temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_utf8.xml")
|
74
|
+
|
75
|
+
bytes = @doc.save(temp_filename)
|
76
|
+
assert_equal(305, bytes)
|
77
|
+
|
78
|
+
contents = File.read(temp_filename, nil, nil, :encoding => Encoding::UTF_8)
|
79
|
+
assert_equal(Encoding::UTF_8, contents.encoding)
|
80
|
+
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",
|
81
|
+
contents)
|
82
|
+
ensure
|
83
|
+
File.delete(temp_filename)
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_save_utf8_no_indents
|
87
|
+
temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_utf8_no_indents.xml")
|
88
|
+
|
89
|
+
bytes = @doc.save(temp_filename, :indent => false)
|
90
|
+
assert_equal(298, bytes)
|
91
|
+
|
92
|
+
contents = File.read(temp_filename, nil, nil, :encoding => Encoding::UTF_8)
|
93
|
+
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",
|
94
|
+
contents)
|
95
|
+
ensure
|
96
|
+
File.delete(temp_filename)
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_save_iso_8859_1
|
100
|
+
temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_iso_8859_1.xml")
|
101
|
+
bytes = @doc.save(temp_filename, :encoding => LibXML::XML::Encoding::ISO_8859_1)
|
102
|
+
assert_equal(304, bytes)
|
103
|
+
|
104
|
+
contents = File.read(temp_filename, nil, nil, :encoding => Encoding::ISO8859_1)
|
105
|
+
assert_equal(Encoding::ISO8859_1, contents.encoding)
|
106
|
+
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),
|
107
|
+
contents)
|
108
|
+
ensure
|
109
|
+
File.delete(temp_filename)
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_save_iso_8859_1_no_indent
|
113
|
+
temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_iso_8859_1_no_indent.xml")
|
114
|
+
bytes = @doc.save(temp_filename, :indent => false, :encoding => LibXML::XML::Encoding::ISO_8859_1)
|
115
|
+
assert_equal(297, bytes)
|
116
|
+
|
117
|
+
contents = File.read(temp_filename, nil, nil, :encoding => Encoding::ISO8859_1)
|
118
|
+
assert_equal(Encoding::ISO8859_1, contents.encoding)
|
119
|
+
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),
|
120
|
+
contents)
|
121
|
+
ensure
|
122
|
+
File.delete(temp_filename)
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_thread_set_root
|
126
|
+
# Previously a segmentation fault occurred when running libxml in
|
127
|
+
# background threads.
|
128
|
+
thread = Thread.new do
|
129
|
+
100000.times do |i|
|
130
|
+
document = LibXML::XML::Document.new
|
131
|
+
node = LibXML::XML::Node.new('test')
|
132
|
+
document.root = node
|
133
|
+
end
|
134
|
+
end
|
135
|
+
thread.join
|
136
|
+
assert(true)
|
137
|
+
end
|
138
|
+
|
139
|
+
# --- Debug ---
|
140
|
+
def test_debug
|
141
|
+
assert(@doc.debug)
|
142
|
+
end
|
143
143
|
end
|
data/test/test_dtd.rb
CHANGED
@@ -1,126 +1,126 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require_relative './test_helper'
|
4
|
-
|
5
|
-
|
6
|
-
class TestDtd < Minitest::Test
|
7
|
-
def setup
|
8
|
-
xp = LibXML::XML::Parser.string(<<-EOS)
|
9
|
-
<root>
|
10
|
-
<head a="ee" id="1">Colorado</head>
|
11
|
-
<descr>Lots of nice mountains</descr>
|
12
|
-
</root>
|
13
|
-
EOS
|
14
|
-
@doc = xp.parse
|
15
|
-
end
|
16
|
-
|
17
|
-
def teardown
|
18
|
-
@doc = nil
|
19
|
-
end
|
20
|
-
|
21
|
-
def dtd
|
22
|
-
LibXML::XML::Dtd.new(<<-EOS)
|
23
|
-
<!ELEMENT root (head, descr)>
|
24
|
-
<!ELEMENT head (#PCDATA)>
|
25
|
-
<!ATTLIST head
|
26
|
-
id NMTOKEN #REQUIRED
|
27
|
-
a CDATA #IMPLIED
|
28
|
-
>
|
29
|
-
<!ELEMENT descr (#PCDATA)>
|
30
|
-
EOS
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_internal_subset
|
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)
|
35
|
-
assert xhtml_dtd.name.nil?
|
36
|
-
assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
|
37
|
-
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
|
38
|
-
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
|
39
|
-
|
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)
|
41
|
-
assert_equal "xhtml1", xhtml_dtd.name
|
42
|
-
assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
|
43
|
-
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
|
44
|
-
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_external_subset
|
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)
|
49
|
-
assert xhtml_dtd.name.nil?
|
50
|
-
assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
|
51
|
-
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
|
52
|
-
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
|
53
|
-
|
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")
|
55
|
-
assert_equal "xhtml1", xhtml_dtd.name
|
56
|
-
assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
|
57
|
-
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
|
58
|
-
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_valid
|
62
|
-
assert(@doc.validate(dtd))
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_node_type
|
66
|
-
assert_equal(LibXML::XML::Node::DTD_NODE, dtd.node_type)
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_invalid
|
70
|
-
new_node = LibXML::XML::Node.new('invalid', 'this will mess up validation')
|
71
|
-
@doc.root << new_node
|
72
|
-
|
73
|
-
error = assert_raises(LibXML::XML::Error) do
|
74
|
-
@doc.validate(dtd)
|
75
|
-
end
|
76
|
-
|
77
|
-
# Check the error worked
|
78
|
-
refute_nil(error)
|
79
|
-
assert_kind_of(LibXML::XML::Error, error)
|
80
|
-
assert_equal("Error: No declaration for element invalid.", error.message)
|
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)
|
84
|
-
assert_nil(error.file)
|
85
|
-
assert_nil(error.line)
|
86
|
-
assert_equal('invalid', error.str1)
|
87
|
-
# Different answers across operating systems
|
88
|
-
# assert_nil(error.str2)
|
89
|
-
assert_nil(error.str3)
|
90
|
-
assert_equal(0, error.int1)
|
91
|
-
assert_equal(0, error.int2)
|
92
|
-
refute_nil(error.node)
|
93
|
-
assert_equal('invalid', error.node.name)
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_external_dtd
|
97
|
-
xml = <<-EOS
|
98
|
-
<!DOCTYPE test PUBLIC "-//TEST" "test.dtd" []>
|
99
|
-
<test>
|
100
|
-
<title>T1</title>
|
101
|
-
</test>
|
102
|
-
EOS
|
103
|
-
|
104
|
-
errors = Array.new
|
105
|
-
LibXML::XML::Error.set_handler do |error|
|
106
|
-
errors << error
|
107
|
-
end
|
108
|
-
|
109
|
-
LibXML::XML::Parser.string(xml).parse
|
110
|
-
assert_equal(0, errors.length)
|
111
|
-
|
112
|
-
errors.clear
|
113
|
-
LibXML::XML::Parser.string(xml, options: LibXML::XML::Parser::Options::DTDLOAD).parse
|
114
|
-
assert_equal(1, errors.length)
|
115
|
-
assert_equal("Warning: failed to load external entity \"test.dtd\" at :1.",
|
116
|
-
errors[0].to_s)
|
117
|
-
|
118
|
-
errors = Array.new
|
119
|
-
LibXML::XML::Parser.string(xml, :options => LibXML::XML::Parser::Options::DTDLOAD).parse
|
120
|
-
assert_equal(1, errors.length)
|
121
|
-
assert_equal("Warning: failed to load external entity \"test.dtd\" at :1.",
|
122
|
-
errors[0].to_s)
|
123
|
-
ensure
|
124
|
-
LibXML::XML::Error.reset_handler
|
125
|
-
end
|
126
|
-
end
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require_relative './test_helper'
|
4
|
+
|
5
|
+
|
6
|
+
class TestDtd < Minitest::Test
|
7
|
+
def setup
|
8
|
+
xp = LibXML::XML::Parser.string(<<-EOS)
|
9
|
+
<root>
|
10
|
+
<head a="ee" id="1">Colorado</head>
|
11
|
+
<descr>Lots of nice mountains</descr>
|
12
|
+
</root>
|
13
|
+
EOS
|
14
|
+
@doc = xp.parse
|
15
|
+
end
|
16
|
+
|
17
|
+
def teardown
|
18
|
+
@doc = nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def dtd
|
22
|
+
LibXML::XML::Dtd.new(<<-EOS)
|
23
|
+
<!ELEMENT root (head, descr)>
|
24
|
+
<!ELEMENT head (#PCDATA)>
|
25
|
+
<!ATTLIST head
|
26
|
+
id NMTOKEN #REQUIRED
|
27
|
+
a CDATA #IMPLIED
|
28
|
+
>
|
29
|
+
<!ELEMENT descr (#PCDATA)>
|
30
|
+
EOS
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_internal_subset
|
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)
|
35
|
+
assert xhtml_dtd.name.nil?
|
36
|
+
assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
|
37
|
+
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
|
38
|
+
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
|
39
|
+
|
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)
|
41
|
+
assert_equal "xhtml1", xhtml_dtd.name
|
42
|
+
assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
|
43
|
+
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
|
44
|
+
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_external_subset
|
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)
|
49
|
+
assert xhtml_dtd.name.nil?
|
50
|
+
assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
|
51
|
+
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
|
52
|
+
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
|
53
|
+
|
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")
|
55
|
+
assert_equal "xhtml1", xhtml_dtd.name
|
56
|
+
assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
|
57
|
+
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
|
58
|
+
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_valid
|
62
|
+
assert(@doc.validate(dtd))
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_node_type
|
66
|
+
assert_equal(LibXML::XML::Node::DTD_NODE, dtd.node_type)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_invalid
|
70
|
+
new_node = LibXML::XML::Node.new('invalid', 'this will mess up validation')
|
71
|
+
@doc.root << new_node
|
72
|
+
|
73
|
+
error = assert_raises(LibXML::XML::Error) do
|
74
|
+
@doc.validate(dtd)
|
75
|
+
end
|
76
|
+
|
77
|
+
# Check the error worked
|
78
|
+
refute_nil(error)
|
79
|
+
assert_kind_of(LibXML::XML::Error, error)
|
80
|
+
assert_equal("Error: No declaration for element invalid.", error.message)
|
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)
|
84
|
+
assert_nil(error.file)
|
85
|
+
assert_nil(error.line)
|
86
|
+
assert_equal('invalid', error.str1)
|
87
|
+
# Different answers across operating systems
|
88
|
+
# assert_nil(error.str2)
|
89
|
+
assert_nil(error.str3)
|
90
|
+
assert_equal(0, error.int1)
|
91
|
+
assert_equal(0, error.int2)
|
92
|
+
refute_nil(error.node)
|
93
|
+
assert_equal('invalid', error.node.name)
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_external_dtd
|
97
|
+
xml = <<-EOS
|
98
|
+
<!DOCTYPE test PUBLIC "-//TEST" "test.dtd" []>
|
99
|
+
<test>
|
100
|
+
<title>T1</title>
|
101
|
+
</test>
|
102
|
+
EOS
|
103
|
+
|
104
|
+
errors = Array.new
|
105
|
+
LibXML::XML::Error.set_handler do |error|
|
106
|
+
errors << error
|
107
|
+
end
|
108
|
+
|
109
|
+
LibXML::XML::Parser.string(xml).parse
|
110
|
+
assert_equal(0, errors.length)
|
111
|
+
|
112
|
+
errors.clear
|
113
|
+
LibXML::XML::Parser.string(xml, options: LibXML::XML::Parser::Options::DTDLOAD).parse
|
114
|
+
assert_equal(1, errors.length)
|
115
|
+
assert_equal("Warning: failed to load external entity \"test.dtd\" at :1.",
|
116
|
+
errors[0].to_s)
|
117
|
+
|
118
|
+
errors = Array.new
|
119
|
+
LibXML::XML::Parser.string(xml, :options => LibXML::XML::Parser::Options::DTDLOAD).parse
|
120
|
+
assert_equal(1, errors.length)
|
121
|
+
assert_equal("Warning: failed to load external entity \"test.dtd\" at :1.",
|
122
|
+
errors[0].to_s)
|
123
|
+
ensure
|
124
|
+
LibXML::XML::Error.reset_handler
|
125
|
+
end
|
126
|
+
end
|