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
data/test/tc_reader.rb
DELETED
|
@@ -1,400 +0,0 @@
|
|
|
1
|
-
# encoding: UTF-8
|
|
2
|
-
|
|
3
|
-
require './test_helper'
|
|
4
|
-
require 'stringio'
|
|
5
|
-
require 'test/unit'
|
|
6
|
-
|
|
7
|
-
class TestReader < Test::Unit::TestCase
|
|
8
|
-
XML_FILE = File.join(File.dirname(__FILE__), 'model/atom.xml')
|
|
9
|
-
|
|
10
|
-
def verify_simple(reader)
|
|
11
|
-
node_types = []
|
|
12
|
-
|
|
13
|
-
# Read each node
|
|
14
|
-
26.times do
|
|
15
|
-
assert(reader.read)
|
|
16
|
-
node_types << reader.node_type
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
# There are no more nodes
|
|
20
|
-
assert(!reader.read)
|
|
21
|
-
|
|
22
|
-
# Check what was read
|
|
23
|
-
expected = [XML::Reader::TYPE_PROCESSING_INSTRUCTION,
|
|
24
|
-
XML::Reader::TYPE_ELEMENT,
|
|
25
|
-
XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
|
|
26
|
-
XML::Reader::TYPE_COMMENT,
|
|
27
|
-
XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
|
|
28
|
-
XML::Reader::TYPE_ELEMENT,
|
|
29
|
-
XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
|
|
30
|
-
XML::Reader::TYPE_ELEMENT,
|
|
31
|
-
XML::Reader::TYPE_CDATA,
|
|
32
|
-
XML::Reader::TYPE_END_ELEMENT,
|
|
33
|
-
XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
|
|
34
|
-
XML::Reader::TYPE_ELEMENT,
|
|
35
|
-
XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
|
|
36
|
-
XML::Reader::TYPE_ELEMENT,
|
|
37
|
-
XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
|
|
38
|
-
XML::Reader::TYPE_ELEMENT,
|
|
39
|
-
XML::Reader::TYPE_TEXT,
|
|
40
|
-
XML::Reader::TYPE_END_ELEMENT,
|
|
41
|
-
XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
|
|
42
|
-
XML::Reader::TYPE_END_ELEMENT,
|
|
43
|
-
XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
|
|
44
|
-
XML::Reader::TYPE_END_ELEMENT,
|
|
45
|
-
XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
|
|
46
|
-
XML::Reader::TYPE_END_ELEMENT,
|
|
47
|
-
XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
|
|
48
|
-
XML::Reader::TYPE_END_ELEMENT]
|
|
49
|
-
|
|
50
|
-
assert_equal(expected, node_types)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def test_document
|
|
54
|
-
reader = XML::Reader.document(XML::Document.file(XML_FILE))
|
|
55
|
-
verify_simple(reader)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def test_file
|
|
59
|
-
reader = XML::Reader.file(XML_FILE)
|
|
60
|
-
verify_simple(reader)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def test_invalid_file
|
|
64
|
-
assert_raise(XML::Error) do
|
|
65
|
-
XML::Reader.file('/does/not/exist')
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def test_string
|
|
70
|
-
reader = XML::Reader.string(File.read(XML_FILE))
|
|
71
|
-
verify_simple(reader)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def test_io
|
|
75
|
-
File.open(XML_FILE, 'rb') do |io|
|
|
76
|
-
reader = XML::Reader.io(io)
|
|
77
|
-
verify_simple(reader)
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def test_io_gc
|
|
82
|
-
# Test that the reader keeps a reference
|
|
83
|
-
# to the io object
|
|
84
|
-
file = File.open(XML_FILE, 'rb')
|
|
85
|
-
reader = XML::Reader.io(file)
|
|
86
|
-
file = nil
|
|
87
|
-
GC.start
|
|
88
|
-
assert(reader.read)
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def test_string_io
|
|
92
|
-
data = File.read(XML_FILE)
|
|
93
|
-
string_io = StringIO.new(data)
|
|
94
|
-
reader = XML::Reader.io(string_io)
|
|
95
|
-
verify_simple(reader)
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def test_error
|
|
99
|
-
reader = XML::Reader.string('<foo blah')
|
|
100
|
-
|
|
101
|
-
error = assert_raise(XML::Error) do
|
|
102
|
-
reader.read
|
|
103
|
-
end
|
|
104
|
-
assert_equal("Fatal error: Couldn't find end of Start Tag foo at :1.", error.to_s)
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def test_deprecated_error_handler
|
|
108
|
-
called = false
|
|
109
|
-
reader = XML::Reader.string('<foo blah')
|
|
110
|
-
reader.set_error_handler do |error|
|
|
111
|
-
called = true
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
assert_raise(XML::Error) do
|
|
115
|
-
reader.read
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
assert(called)
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
def test_deprecated_reset_error_handler
|
|
122
|
-
called = false
|
|
123
|
-
reader = XML::Reader.string('<foo blah')
|
|
124
|
-
reader.set_error_handler do |error|
|
|
125
|
-
called = true
|
|
126
|
-
end
|
|
127
|
-
reader.reset_error_handler
|
|
128
|
-
|
|
129
|
-
assert_raise(XML::Error) do
|
|
130
|
-
reader.read
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
assert(!called)
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
def test_attr
|
|
137
|
-
parser = XML::Reader.string("<foo x='1' y='2'/>")
|
|
138
|
-
assert(parser.read)
|
|
139
|
-
assert_equal('foo', parser.name)
|
|
140
|
-
assert_equal('1', parser['x'])
|
|
141
|
-
assert_equal('1', parser[0])
|
|
142
|
-
assert_equal('2', parser['y'])
|
|
143
|
-
assert_equal('2', parser[1])
|
|
144
|
-
assert_equal(nil, parser['z'])
|
|
145
|
-
assert_equal(nil, parser[2])
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
def test_move_to_attribute_depreciation
|
|
149
|
-
previous_stderr, $stderr = $stderr, StringIO.new
|
|
150
|
-
reader = XML::Reader.string("<foo x='1' y='2'/>")
|
|
151
|
-
assert(reader.read)
|
|
152
|
-
assert(reader.move_to_attribute 1)
|
|
153
|
-
assert($stderr.string =~ /deprecated/)
|
|
154
|
-
ensure
|
|
155
|
-
$stderr = previous_stderr
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
def test_move_attr
|
|
159
|
-
reader = XML::Reader.string('<root xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xhtml="http://www.w3.org/1999/xhtml"><link xml:id="abc" xlink:href="def" xhtml:class="ghi" bar="jkl" /></root>')
|
|
160
|
-
assert(reader.read) # <root/>
|
|
161
|
-
assert(reader.read) # <link/>
|
|
162
|
-
|
|
163
|
-
assert(reader.move_to_attribute_no(1))
|
|
164
|
-
assert_equal(reader.value, 'def')
|
|
165
|
-
assert(reader.move_to_attribute_ns('id', 'http://www.w3.org/XML/1998/namespace'))
|
|
166
|
-
assert_equal(reader.value, 'abc')
|
|
167
|
-
assert(reader.move_to_attribute('bar'))
|
|
168
|
-
assert_equal(reader.value, 'jkl')
|
|
169
|
-
|
|
170
|
-
# 1 in case of success, -1 in case of error, 0 if not found
|
|
171
|
-
assert_equal(reader.move_to_attribute_no(12), 0)
|
|
172
|
-
assert_equal(reader.move_to_attribute('baz'), 0)
|
|
173
|
-
assert_equal(reader.move_to_attribute_ns('baz', 'http://ruby/namespace'), 0)
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
def test_get_attr
|
|
177
|
-
reader = XML::Reader.string('<root xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xhtml="http://www.w3.org/1999/xhtml"><link xml:id="abc" xlink:href="def" xhtml:class="ghi" bar="jkl" /></root>')
|
|
178
|
-
assert(reader.read) # <root/>
|
|
179
|
-
assert(reader.read) # <link/>
|
|
180
|
-
|
|
181
|
-
assert_equal(reader.get_attribute_no(1), 'def')
|
|
182
|
-
assert_equal(reader.get_attribute_ns('id', 'http://www.w3.org/XML/1998/namespace'), 'abc')
|
|
183
|
-
assert_equal(reader.get_attribute('bar'), 'jkl')
|
|
184
|
-
|
|
185
|
-
assert_equal(reader.get_attribute_no(12), nil)
|
|
186
|
-
assert_equal(reader.get_attribute('baz'), nil)
|
|
187
|
-
assert_equal(reader.get_attribute_ns('baz', 'http://ruby/namespace'), nil)
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
def test_value
|
|
191
|
-
parser = XML::Reader.string("<foo><bar>1</bar><bar>2</bar><bar>3</bar></foo>")
|
|
192
|
-
assert(parser.read)
|
|
193
|
-
assert_equal('foo', parser.name)
|
|
194
|
-
assert_equal(nil, parser.value)
|
|
195
|
-
3.times do |i|
|
|
196
|
-
assert(parser.read)
|
|
197
|
-
assert_equal(XML::Reader::TYPE_ELEMENT, parser.node_type)
|
|
198
|
-
assert_equal('bar', parser.name)
|
|
199
|
-
assert(parser.read)
|
|
200
|
-
assert_equal(XML::Reader::TYPE_TEXT, parser.node_type)
|
|
201
|
-
assert_equal((i + 1).to_s, parser.value)
|
|
202
|
-
assert(parser.read)
|
|
203
|
-
assert_equal(XML::Reader::TYPE_END_ELEMENT, parser.node_type)
|
|
204
|
-
end
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
def test_expand
|
|
208
|
-
reader = XML::Reader.file(XML_FILE)
|
|
209
|
-
reader.read.to_s
|
|
210
|
-
reader.read
|
|
211
|
-
|
|
212
|
-
# Read a node
|
|
213
|
-
node = reader.expand
|
|
214
|
-
assert_equal('feed', node.name)
|
|
215
|
-
assert_equal(::Encoding::UTF_8, node.name.encoding) if defined?(::Encoding)
|
|
216
|
-
end
|
|
217
|
-
|
|
218
|
-
def test_expand_doc
|
|
219
|
-
reader = XML::Reader.file(XML_FILE)
|
|
220
|
-
reader.read.to_s
|
|
221
|
-
reader.read
|
|
222
|
-
|
|
223
|
-
# Read a node
|
|
224
|
-
node = reader.expand
|
|
225
|
-
|
|
226
|
-
# Try to access the document
|
|
227
|
-
assert_not_nil(node.doc)
|
|
228
|
-
end
|
|
229
|
-
|
|
230
|
-
def test_expand_find
|
|
231
|
-
reader = XML::Reader.file(XML_FILE)
|
|
232
|
-
reader.read.to_s
|
|
233
|
-
reader.read
|
|
234
|
-
|
|
235
|
-
# Read first node which
|
|
236
|
-
node = reader.expand
|
|
237
|
-
assert_equal('feed', node.name)
|
|
238
|
-
|
|
239
|
-
# Search for entries
|
|
240
|
-
entries = node.find('atom:entry', 'atom:http://www.w3.org/2005/Atom')
|
|
241
|
-
|
|
242
|
-
assert_equal(1, entries.length)
|
|
243
|
-
end
|
|
244
|
-
|
|
245
|
-
def test_expand_invalid
|
|
246
|
-
reader = XML::Reader.file(XML_FILE)
|
|
247
|
-
|
|
248
|
-
# Expand a node before one has been read
|
|
249
|
-
error = assert_raise(RuntimeError) do
|
|
250
|
-
reader.expand
|
|
251
|
-
end
|
|
252
|
-
assert_equal("The reader does not have a document. Did you forget to call read?", error.to_s)
|
|
253
|
-
end
|
|
254
|
-
|
|
255
|
-
def test_expand_invalid_access
|
|
256
|
-
reader = XML::Reader.file(XML_FILE)
|
|
257
|
-
|
|
258
|
-
# Read a node
|
|
259
|
-
reader.read
|
|
260
|
-
reader.read
|
|
261
|
-
|
|
262
|
-
# Expand the node
|
|
263
|
-
node = reader.expand
|
|
264
|
-
assert_equal('feed', node.name)
|
|
265
|
-
|
|
266
|
-
# Read another node, this makes the last node invalid
|
|
267
|
-
reader.next
|
|
268
|
-
|
|
269
|
-
# The previous node is now invalid
|
|
270
|
-
error = assert_raise(RuntimeError) do
|
|
271
|
-
assert_equal('feed', node.name)
|
|
272
|
-
end
|
|
273
|
-
assert_equal("This node has already been freed.", error.to_s)
|
|
274
|
-
end
|
|
275
|
-
|
|
276
|
-
def test_mode
|
|
277
|
-
reader = XML::Reader.string('<xml/>')
|
|
278
|
-
assert_equal(XML::Reader::MODE_INITIAL, reader.read_state)
|
|
279
|
-
reader.read
|
|
280
|
-
assert_equal(XML::Reader::MODE_EOF, reader.read_state)
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
def test_bytes_consumed
|
|
284
|
-
reader = XML::Reader.file(XML_FILE)
|
|
285
|
-
reader.read
|
|
286
|
-
assert_equal(416, reader.byte_consumed)
|
|
287
|
-
end
|
|
288
|
-
|
|
289
|
-
def test_node
|
|
290
|
-
XML.default_line_numbers = true
|
|
291
|
-
reader = XML::Reader.file(XML_FILE)
|
|
292
|
-
|
|
293
|
-
# first try to get a node
|
|
294
|
-
assert_nil(reader.node)
|
|
295
|
-
|
|
296
|
-
reader.read
|
|
297
|
-
assert_instance_of(XML::Node, reader.node)
|
|
298
|
-
end
|
|
299
|
-
|
|
300
|
-
def test_base_uri
|
|
301
|
-
# UTF8:
|
|
302
|
-
# ö - c3 b6 in hex, \303\266 in octal
|
|
303
|
-
# ü - c3 bc in hex, \303\274 in octal
|
|
304
|
-
xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><bands genre=\"metal\">\n <m\303\266tley_cr\303\274e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\303\266tley_cr\303\274e>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>"
|
|
305
|
-
reader = XML::Reader.string(xml, :base_uri => "http://libxml.rubyforge.org")
|
|
306
|
-
|
|
307
|
-
reader.read
|
|
308
|
-
assert_equal(reader.base_uri, "http://libxml.rubyforge.org")
|
|
309
|
-
assert_equal(::Encoding::UTF_8, reader.base_uri.encoding) if defined?(::Encoding)
|
|
310
|
-
end
|
|
311
|
-
|
|
312
|
-
def test_options
|
|
313
|
-
xml = <<-EOS
|
|
314
|
-
<!DOCTYPE foo [<!ENTITY foo 'bar'>]>
|
|
315
|
-
<test>
|
|
316
|
-
<cdata><![CDATA[something]]></cdata>
|
|
317
|
-
<entity>&foo;</entity>
|
|
318
|
-
</test>
|
|
319
|
-
EOS
|
|
320
|
-
|
|
321
|
-
# Parse normally
|
|
322
|
-
reader = XML::Reader.string(xml)
|
|
323
|
-
reader.read # foo
|
|
324
|
-
reader.read # test
|
|
325
|
-
reader.read # text
|
|
326
|
-
reader.read # cdata
|
|
327
|
-
reader.read # cdata-section
|
|
328
|
-
assert_equal(XML::Node::CDATA_SECTION_NODE, reader.node_type)
|
|
329
|
-
|
|
330
|
-
# Convert cdata section to text
|
|
331
|
-
reader = XML::Reader.string(xml, :options => XML::Parser::Options::NOCDATA)
|
|
332
|
-
reader.read # foo
|
|
333
|
-
reader.read # test
|
|
334
|
-
reader.read # text
|
|
335
|
-
reader.read # cdata
|
|
336
|
-
reader.read # cdata-section
|
|
337
|
-
assert_equal(XML::Node::TEXT_NODE, reader.node_type)
|
|
338
|
-
end
|
|
339
|
-
|
|
340
|
-
def test_encoding
|
|
341
|
-
# ISO_8859_1:
|
|
342
|
-
# ö - f6 in hex, \366 in octal
|
|
343
|
-
# ü - fc in hex, \374 in octal
|
|
344
|
-
xml = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><bands genre=\"metal\">\n <m\366tley_cr\374e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\366tley_cr\374e>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>"
|
|
345
|
-
|
|
346
|
-
reader = XML::Reader.string(xml, :encoding => XML::Encoding::ISO_8859_1)
|
|
347
|
-
reader.read
|
|
348
|
-
|
|
349
|
-
if defined?(Encoding)
|
|
350
|
-
assert_equal(Encoding::ISO8859_1, reader.read_outer_xml.encoding)
|
|
351
|
-
assert_equal(Encoding::ISO8859_1, reader.read_inner_xml.encoding)
|
|
352
|
-
assert_equal(Encoding::ISO8859_1, reader.read_string.encoding)
|
|
353
|
-
|
|
354
|
-
assert_equal("<bands genre=\"metal\">\n <m\xC3\xB6tley_cr\xC3\xBCe country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\xC3\xB6tley_cr\xC3\xBCe>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>".force_encoding(Encoding::ISO8859_1),
|
|
355
|
-
reader.read_outer_xml)
|
|
356
|
-
assert_equal("\n <m\xC3\xB6tley_cr\xC3\xBCe country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\xC3\xB6tley_cr\xC3\xBCe>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n".force_encoding(Encoding::ISO8859_1),
|
|
357
|
-
reader.read_inner_xml)
|
|
358
|
-
assert_equal("\n An American heavy metal band formed in Los Angeles, California in 1981.\n British heavy metal band formed in 1975.\n".force_encoding(Encoding::ISO8859_1),
|
|
359
|
-
reader.read_string)
|
|
360
|
-
else
|
|
361
|
-
assert_equal("<bands genre=\"metal\">\n <m\303\266tley_cr\303\274e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\303\266tley_cr\303\274e>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>",
|
|
362
|
-
reader.read_outer_xml)
|
|
363
|
-
end
|
|
364
|
-
end
|
|
365
|
-
|
|
366
|
-
def test_invalid_encoding
|
|
367
|
-
# ISO_8859_1:
|
|
368
|
-
# ö - f6 in hex, \366 in octal
|
|
369
|
-
# ü - fc in hex, \374 in octal
|
|
370
|
-
xml = "<bands genre=\"metal\">\n <m\366tley_cr\374e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\366tley_cr\374e>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>"
|
|
371
|
-
|
|
372
|
-
reader = XML::Reader.string(xml)
|
|
373
|
-
error = assert_raise(XML::Error) do
|
|
374
|
-
node = reader.read
|
|
375
|
-
end
|
|
376
|
-
|
|
377
|
-
assert_equal("Fatal error: Input is not proper UTF-8, indicate encoding !\nBytes: 0xF6 0x74 0x6C 0x65 at :2.",
|
|
378
|
-
error.to_s)
|
|
379
|
-
|
|
380
|
-
end
|
|
381
|
-
|
|
382
|
-
def test_file_encoding
|
|
383
|
-
reader = XML::Reader.file(XML_FILE)
|
|
384
|
-
reader.read
|
|
385
|
-
assert_equal(XML::Encoding::UTF_8, reader.encoding)
|
|
386
|
-
assert_equal(Encoding::UTF_8, reader.value.encoding) if defined?(Encoding)
|
|
387
|
-
end
|
|
388
|
-
|
|
389
|
-
def test_string_encoding
|
|
390
|
-
# ISO_8859_1:
|
|
391
|
-
# ö - f6 in hex, \366 in octal
|
|
392
|
-
# ü - fc in hex, \374 in octal
|
|
393
|
-
xml = "<bands genre=\"metal\">\n <m\366tley_cr\374e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\366tley_cr\374e>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>"
|
|
394
|
-
reader = XML::Reader.string(xml, :encoding => XML::Encoding::ISO_8859_1)
|
|
395
|
-
reader.read
|
|
396
|
-
|
|
397
|
-
# Encoding is always null for strings, very annoying!
|
|
398
|
-
assert_equal(reader.encoding, XML::Encoding::NONE)
|
|
399
|
-
end
|
|
400
|
-
end
|
data/test/tc_relaxng.rb
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# encoding: UTF-8
|
|
2
|
-
|
|
3
|
-
require './test_helper'
|
|
4
|
-
|
|
5
|
-
require 'test/unit'
|
|
6
|
-
|
|
7
|
-
class TestRelaxNG < Test::Unit::TestCase
|
|
8
|
-
def setup
|
|
9
|
-
file = File.join(File.dirname(__FILE__), 'model/shiporder.xml')
|
|
10
|
-
@doc = XML::Document.file(file)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def teardown
|
|
14
|
-
@doc = nil
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def relaxng
|
|
18
|
-
document = XML::Document.file(File.join(File.dirname(__FILE__), 'model/shiporder.rng'))
|
|
19
|
-
relaxng = XML::RelaxNG.document(document)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def test_from_doc
|
|
23
|
-
assert_instance_of(XML::RelaxNG, relaxng)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def test_valid
|
|
27
|
-
assert(@doc.validate_relaxng(relaxng))
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def test_invalid
|
|
31
|
-
new_node = XML::Node.new('invalid', 'this will mess up validation')
|
|
32
|
-
@doc.root << new_node
|
|
33
|
-
|
|
34
|
-
error = assert_raise(XML::Error) do
|
|
35
|
-
@doc.validate_relaxng(relaxng)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
assert_not_nil(error)
|
|
39
|
-
assert_kind_of(XML::Error, error)
|
|
40
|
-
assert(error.message.match(/Error: Did not expect element invalid there/))
|
|
41
|
-
assert_equal(XML::Error::RELAXNGV, error.domain)
|
|
42
|
-
assert_equal(XML::Error::LT_IN_ATTRIBUTE, error.code)
|
|
43
|
-
assert_equal(XML::Error::ERROR, error.level)
|
|
44
|
-
assert(error.file.match(/shiporder\.xml/))
|
|
45
|
-
assert_nil(error.line)
|
|
46
|
-
assert_equal('invalid', error.str1)
|
|
47
|
-
assert_nil(error.str2)
|
|
48
|
-
assert_nil(error.str3)
|
|
49
|
-
assert_equal(0, error.int1)
|
|
50
|
-
assert_equal(0, error.int2)
|
|
51
|
-
assert_not_nil(error.node)
|
|
52
|
-
assert_equal('invalid', error.node.name)
|
|
53
|
-
end
|
|
54
|
-
end
|
data/test/tc_schema.rb
DELETED
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
# encoding: UTF-8
|
|
2
|
-
|
|
3
|
-
require './test_helper'
|
|
4
|
-
require 'test/unit'
|
|
5
|
-
|
|
6
|
-
class TestSchema < Test::Unit::TestCase
|
|
7
|
-
def setup
|
|
8
|
-
file = File.join(File.dirname(__FILE__), 'model/shiporder.xml')
|
|
9
|
-
@doc = XML::Document.file(file)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def teardown
|
|
13
|
-
@doc = nil
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def schema
|
|
17
|
-
document = XML::Document.file(File.join(File.dirname(__FILE__), 'model/shiporder.xsd'))
|
|
18
|
-
XML::Schema.document(document)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def check_error(error)
|
|
22
|
-
assert_not_nil(error)
|
|
23
|
-
assert(error.message.match(/Error: Element 'invalid': This element is not expected. Expected is \( item \)/))
|
|
24
|
-
assert_kind_of(XML::Error, error)
|
|
25
|
-
assert_equal(XML::Error::SCHEMASV, error.domain)
|
|
26
|
-
assert_equal(XML::Error::SCHEMAV_ELEMENT_CONTENT, error.code)
|
|
27
|
-
assert_equal(XML::Error::ERROR, error.level)
|
|
28
|
-
assert(error.file.match(/shiporder.xml/)) if error.file
|
|
29
|
-
assert_nil(error.str1)
|
|
30
|
-
assert_nil(error.str2)
|
|
31
|
-
assert_nil(error.str3)
|
|
32
|
-
assert_equal(0, error.int1)
|
|
33
|
-
assert_equal(0, error.int2)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def test_load_from_doc
|
|
37
|
-
assert_instance_of(XML::Schema, schema)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def test_doc_valid
|
|
41
|
-
assert(@doc.validate_schema(schema))
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def test_doc_invalid
|
|
45
|
-
new_node = XML::Node.new('invalid', 'this will mess up validation')
|
|
46
|
-
@doc.root << new_node
|
|
47
|
-
|
|
48
|
-
error = assert_raise(XML::Error) do
|
|
49
|
-
@doc.validate_schema(schema)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
check_error(error)
|
|
53
|
-
assert_nil(error.line)
|
|
54
|
-
assert_not_nil(error.node)
|
|
55
|
-
assert_equal('invalid', error.node.name)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def test_reader_valid
|
|
59
|
-
reader = XML::Reader.string(@doc.to_s)
|
|
60
|
-
assert(reader.schema_validate(schema))
|
|
61
|
-
|
|
62
|
-
while reader.read
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def test_reader_invalid
|
|
67
|
-
# Set error handler
|
|
68
|
-
errors = Array.new
|
|
69
|
-
XML::Error.set_handler do |error|
|
|
70
|
-
errors << error
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
new_node = XML::Node.new('invalid', 'this will mess up validation')
|
|
74
|
-
@doc.root << new_node
|
|
75
|
-
reader = XML::Reader.string(@doc.to_s)
|
|
76
|
-
|
|
77
|
-
# Set a schema
|
|
78
|
-
assert(reader.schema_validate(schema))
|
|
79
|
-
|
|
80
|
-
while reader.read
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
assert_equal(1, errors.length)
|
|
84
|
-
|
|
85
|
-
error = errors.first
|
|
86
|
-
check_error(error)
|
|
87
|
-
assert_equal(21, error.line)
|
|
88
|
-
ensure
|
|
89
|
-
XML::Error.set_handler(&LibXML::XML::Error::VERBOSE_HANDLER)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
# Schema meta-data tests
|
|
94
|
-
|
|
95
|
-
def test_elements
|
|
96
|
-
assert_instance_of(Hash, schema.elements)
|
|
97
|
-
assert_equal(1, schema.elements.length)
|
|
98
|
-
assert_instance_of(XML::Schema::Element, schema.elements['shiporder'])
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def test_types
|
|
102
|
-
assert_instance_of(Hash, schema.types)
|
|
103
|
-
assert_equal(1, schema.types.length)
|
|
104
|
-
assert_instance_of(XML::Schema::Type, schema.types['shiporder'])
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def test_schema_type
|
|
108
|
-
type = schema.types['shiporder']
|
|
109
|
-
|
|
110
|
-
assert_equal('shiporder', type.name)
|
|
111
|
-
assert_equal(nil, type.namespace)
|
|
112
|
-
assert_equal("Shiporder type documentation", type.annotation)
|
|
113
|
-
assert_instance_of(XML::Node, type.node)
|
|
114
|
-
assert_equal(XML::Schema::Types::XML_SCHEMA_TYPE_COMPLEX, type.kind)
|
|
115
|
-
assert_instance_of(XML::Schema::Type, type.base)
|
|
116
|
-
assert_equal("anyType", type.base.name)
|
|
117
|
-
assert_equal(XML::Schema::Types::XML_SCHEMA_TYPE_BASIC, type.base.kind)
|
|
118
|
-
|
|
119
|
-
assert_instance_of(Hash, type.elements)
|
|
120
|
-
assert_equal(3, type.elements.length)
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
def test_schema_element
|
|
124
|
-
element = schema.types['shiporder'].elements['orderperson']
|
|
125
|
-
|
|
126
|
-
assert_equal('orderperson', element.name)
|
|
127
|
-
assert_equal(nil, element.namespace)
|
|
128
|
-
assert_equal("orderperson element documentation", element.annotation)
|
|
129
|
-
assert_equal(1, element.min_occurs)
|
|
130
|
-
assert_equal(1, element.max_occurs)
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
element = schema.types['shiporder'].elements['item']
|
|
134
|
-
assert_equal(Float::INFINITY, element.max_occurs)
|
|
135
|
-
|
|
136
|
-
element = schema.types['shiporder'].elements['item'].type.elements['note']
|
|
137
|
-
assert_equal(0, element.min_occurs)
|
|
138
|
-
assert_equal('string', element.type.name)
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
def test_schema_attributes
|
|
142
|
-
type = schema.types['shiporder']
|
|
143
|
-
|
|
144
|
-
assert_instance_of(Array, type.attributes)
|
|
145
|
-
assert_equal(2, type.attributes.length)
|
|
146
|
-
assert_instance_of(XML::Schema::Attribute, type.attributes.first)
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
def test_schema_attribute
|
|
150
|
-
attribute = schema.types['shiporder'].attributes.first
|
|
151
|
-
|
|
152
|
-
assert_equal("orderid", attribute.name)
|
|
153
|
-
assert_equal(nil, attribute.namespace)
|
|
154
|
-
assert_equal(1, attribute.occurs)
|
|
155
|
-
assert_equal('string', attribute.type.name)
|
|
156
|
-
|
|
157
|
-
attribute = schema.types['shiporder'].attributes[1]
|
|
158
|
-
assert_equal(2, attribute.occurs)
|
|
159
|
-
assert_equal('1', attribute.default)
|
|
160
|
-
assert_equal('integer', attribute.type.name)
|
|
161
|
-
end
|
|
162
|
-
end
|