libxml-ruby 5.0.5 → 6.0.0
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 → CHANGELOG.md} +875 -923
- data/LICENSE +20 -20
- data/README.md +67 -0
- data/Rakefile +77 -98
- data/ext/libxml/extconf.rb +34 -20
- data/ext/libxml/libxml.c +67 -79
- data/ext/libxml/ruby_libxml.h +1 -1
- data/ext/libxml/ruby_xml_attr.c +338 -333
- data/ext/libxml/ruby_xml_attr.h +13 -12
- data/ext/libxml/ruby_xml_attr_decl.c +19 -12
- data/ext/libxml/ruby_xml_attr_decl.h +11 -11
- data/ext/libxml/ruby_xml_attributes.c +18 -9
- data/ext/libxml/ruby_xml_document.c +111 -98
- data/ext/libxml/ruby_xml_document.h +1 -0
- data/ext/libxml/ruby_xml_dtd.c +49 -19
- data/ext/libxml/ruby_xml_dtd.h +10 -9
- data/ext/libxml/ruby_xml_html_parser.c +91 -91
- data/ext/libxml/ruby_xml_html_parser.h +10 -10
- data/ext/libxml/ruby_xml_html_parser_context.c +19 -6
- data/ext/libxml/ruby_xml_html_parser_context.h +11 -10
- data/ext/libxml/ruby_xml_html_parser_options.c +48 -48
- data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
- data/ext/libxml/ruby_xml_input_cbg.c +45 -17
- data/ext/libxml/ruby_xml_input_cbg.h +20 -20
- data/ext/libxml/ruby_xml_io.c +49 -47
- data/ext/libxml/ruby_xml_io.h +10 -10
- data/ext/libxml/ruby_xml_namespace.c +20 -12
- data/ext/libxml/ruby_xml_namespace.h +11 -10
- data/ext/libxml/ruby_xml_namespaces.c +313 -293
- data/ext/libxml/ruby_xml_namespaces.h +9 -9
- data/ext/libxml/ruby_xml_node.c +71 -32
- data/ext/libxml/ruby_xml_node.h +15 -13
- data/ext/libxml/ruby_xml_parser.c +91 -91
- data/ext/libxml/ruby_xml_parser_context.c +54 -47
- data/ext/libxml/ruby_xml_parser_context.h +11 -10
- data/ext/libxml/ruby_xml_reader.c +25 -15
- data/ext/libxml/ruby_xml_reader.h +14 -14
- data/ext/libxml/ruby_xml_registry.c +31 -0
- data/ext/libxml/ruby_xml_registry.h +22 -0
- data/ext/libxml/ruby_xml_relaxng.c +21 -5
- data/ext/libxml/ruby_xml_relaxng.h +9 -8
- data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
- data/ext/libxml/ruby_xml_sax_parser.c +1 -1
- data/ext/libxml/ruby_xml_sax_parser.h +10 -10
- data/ext/libxml/ruby_xml_schema.c +18 -11
- data/ext/libxml/ruby_xml_schema.h +26 -25
- data/ext/libxml/ruby_xml_schema_attribute.c +7 -7
- data/ext/libxml/ruby_xml_schema_attribute.h +37 -37
- data/ext/libxml/ruby_xml_schema_element.c +8 -8
- data/ext/libxml/ruby_xml_schema_element.h +11 -11
- data/ext/libxml/ruby_xml_schema_facet.c +50 -50
- data/ext/libxml/ruby_xml_schema_facet.h +9 -9
- data/ext/libxml/ruby_xml_schema_type.c +12 -19
- data/ext/libxml/ruby_xml_schema_type.h +9 -9
- data/ext/libxml/ruby_xml_version.h +4 -4
- data/ext/libxml/ruby_xml_writer.c +1136 -1124
- data/ext/libxml/ruby_xml_writer.h +6 -6
- data/ext/libxml/ruby_xml_xinclude.c +20 -20
- data/ext/libxml/ruby_xml_xinclude.h +11 -11
- data/ext/libxml/ruby_xml_xpath.c +195 -195
- data/ext/libxml/ruby_xml_xpath.h +15 -15
- data/ext/libxml/ruby_xml_xpath_context.c +408 -362
- data/ext/libxml/ruby_xml_xpath_context.h +9 -9
- data/ext/libxml/ruby_xml_xpath_expression.c +11 -5
- data/ext/libxml/ruby_xml_xpath_expression.h +11 -10
- data/ext/libxml/ruby_xml_xpath_object.c +69 -54
- data/ext/libxml/ruby_xml_xpath_object.h +19 -17
- data/ext/vc/libxml_ruby/libxml_ruby.vcxproj +271 -0
- data/ext/xcode/libxml-ruby.xcodeproj/project.pbxproj +633 -0
- data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- data/ext/xcode/libxml-ruby.xcodeproj/xcshareddata/xcschemes/libxml-ruby.xcscheme +80 -0
- data/lib/libxml/document.rb +0 -29
- data/lib/libxml/error.rb +30 -3
- data/lib/libxml/html_parser.rb +0 -16
- data/lib/libxml/node.rb +1 -3
- data/lib/libxml/parser.rb +0 -8
- data/lib/libxml/schema/attribute.rb +27 -19
- data/lib/libxml/schema/element.rb +20 -0
- data/lib/libxml/schema/type.rb +44 -21
- data/lib/libxml/schema.rb +47 -47
- data/lib/libxml-ruby.rb +30 -30
- data/libxml-ruby.gemspec +12 -16
- 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/test_attr.rb +179 -180
- data/test/test_attr_decl.rb +131 -131
- data/test/test_attributes.rb +135 -135
- data/test/test_canonicalize.rb +122 -120
- data/test/test_document.rb +2 -4
- data/test/test_dtd.rb +12 -4
- data/test/test_encoding_sax.rb +114 -114
- data/test/test_error.rb +6 -3
- data/test/test_helper.rb +1 -0
- data/test/test_html_parser.rb +6 -2
- data/test/test_html_parser_context.rb +22 -22
- data/test/test_input_callbacks.rb +36 -0
- data/test/test_namespace.rb +1 -1
- data/test/test_namespaces.rb +200 -200
- data/test/test_node.rb +16 -0
- data/test/test_node_cdata.rb +50 -50
- data/test/test_node_comment.rb +32 -32
- data/test/test_node_copy.rb +40 -40
- data/test/test_node_edit.rb +176 -158
- data/test/test_node_pi.rb +37 -37
- data/test/test_node_text.rb +69 -69
- data/test/test_node_xlink.rb +28 -28
- data/test/test_parser.rb +5 -41
- data/test/test_parser_context.rb +198 -198
- data/test/test_properties.rb +38 -38
- data/test/test_reader.rb +55 -6
- data/test/test_relaxng.rb +59 -53
- data/test/test_sax_parser.rb +345 -345
- data/test/test_schema.rb +28 -0
- data/test/test_traversal.rb +152 -152
- data/test/test_writer.rb +469 -468
- data/test/test_xinclude.rb +20 -20
- data/test/test_xml.rb +3 -7
- data/test/test_xpath.rb +244 -244
- data/test/test_xpath_context.rb +87 -87
- data/test/test_xpath_expression.rb +37 -37
- metadata +33 -27
- data/README.rdoc +0 -208
- data/ext/libxml/extconf.h +0 -3
- data/ext/libxml/ruby_xml_cbg.c +0 -85
- data/lib/libxml/hpricot.rb +0 -78
- data/lib/libxml.rb +0 -5
- data/lib/xml/libxml.rb +0 -10
- data/lib/xml.rb +0 -14
- data/script/benchmark/depixelate +0 -634
- data/script/benchmark/hamlet.xml +0 -9055
- data/script/benchmark/parsecount +0 -170
- data/script/benchmark/sock_entries.xml +0 -507
- data/script/benchmark/throughput +0 -41
- data/script/test +0 -6
- data/test/test.rb +0 -5
- data/test/test_deprecated_require.rb +0 -12
data/test/test_schema.rb
CHANGED
|
@@ -38,6 +38,7 @@ class TestSchema < Minitest::Test
|
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
def test_schema_load_from_uri
|
|
41
|
+
skip("HTTP support not available") unless LibXML::XML.enabled_http?
|
|
41
42
|
xlink_schema = LibXML::XML::Schema.new('http://www.w3.org/1999/xlink.xsd')
|
|
42
43
|
assert_instance_of(LibXML::XML::Schema, xlink_schema)
|
|
43
44
|
assert_instance_of(LibXML::XML::Schema::Element, xlink_schema.elements['title'])
|
|
@@ -234,4 +235,31 @@ class TestSchema < Minitest::Test
|
|
|
234
235
|
assert_equal('1', attribute.default)
|
|
235
236
|
assert_equal('integer', attribute.type.name)
|
|
236
237
|
end
|
|
238
|
+
|
|
239
|
+
def test_anonymous_subtypes
|
|
240
|
+
type = @schema.types['shiporderType']
|
|
241
|
+
anon = type.anonymous_subtypes
|
|
242
|
+
|
|
243
|
+
assert_instance_of(Hash, anon)
|
|
244
|
+
assert_equal(2, anon.length)
|
|
245
|
+
assert_includes(anon.keys, 'shipto')
|
|
246
|
+
assert_includes(anon.keys, 'item')
|
|
247
|
+
|
|
248
|
+
anon.each_value do |element|
|
|
249
|
+
assert_instance_of(LibXML::XML::Schema::Element, element)
|
|
250
|
+
assert_nil(element.type.name)
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
def test_anonymous_subtypes_recursively
|
|
255
|
+
type = @schema.types['shiporderType']
|
|
256
|
+
result = type.anonymous_subtypes_recursively
|
|
257
|
+
|
|
258
|
+
assert_instance_of(Array, result)
|
|
259
|
+
assert_operator(result.length, :>=, 2)
|
|
260
|
+
|
|
261
|
+
keys = result.select { |r| r.is_a?(Hash) }.flat_map(&:keys)
|
|
262
|
+
assert_includes(keys, 'shipto')
|
|
263
|
+
assert_includes(keys, 'item')
|
|
264
|
+
end
|
|
237
265
|
end
|
data/test/test_traversal.rb
CHANGED
|
@@ -1,152 +1,152 @@
|
|
|
1
|
-
# encoding: UTF-8
|
|
2
|
-
|
|
3
|
-
require_relative './test_helper'
|
|
4
|
-
|
|
5
|
-
class TestTranversal < Minitest::Test
|
|
6
|
-
ROOT_NODES_LENGTH = 27
|
|
7
|
-
ROOT_ELEMENTS_LENGTH = 13
|
|
8
|
-
|
|
9
|
-
def setup
|
|
10
|
-
filename = File.join(File.dirname(__FILE__), 'model/books.xml')
|
|
11
|
-
@doc = LibXML::XML::Document.file(filename)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def teardown
|
|
15
|
-
@doc = nil
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def test_children
|
|
19
|
-
# Includes text nodes and such
|
|
20
|
-
assert_equal(ROOT_NODES_LENGTH, @doc.root.children.length)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def test_children_iteration
|
|
24
|
-
# Includes text nodes and such
|
|
25
|
-
nodes = @doc.root.children.inject([]) do |arr, node|
|
|
26
|
-
arr << node
|
|
27
|
-
arr
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
assert_equal(ROOT_NODES_LENGTH, nodes.length)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def test_no_children
|
|
34
|
-
# Get a node with no children
|
|
35
|
-
node = @doc.find_first('/catalog/book[@id="bk113"]/price')
|
|
36
|
-
assert_equal(0, node.children.length)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def test_no_children_inner_xml
|
|
40
|
-
# Get a node with no children
|
|
41
|
-
node = @doc.find_first('/catalog/book[@id="bk113"]/price')
|
|
42
|
-
assert_nil(node.inner_xml)
|
|
43
|
-
end
|
|
44
|
-
def test_each
|
|
45
|
-
# Includes text nodes and such
|
|
46
|
-
nodes = @doc.root.inject([]) do |arr, node|
|
|
47
|
-
arr << node
|
|
48
|
-
arr
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
assert_equal(ROOT_NODES_LENGTH, nodes.length)
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def test_each_element
|
|
55
|
-
# Includes text nodes and such
|
|
56
|
-
nodes = []
|
|
57
|
-
@doc.root.each_element do |node|
|
|
58
|
-
nodes << node
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
assert_equal(ROOT_ELEMENTS_LENGTH, nodes.length)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def test_next
|
|
65
|
-
nodes = []
|
|
66
|
-
|
|
67
|
-
node = @doc.root.first
|
|
68
|
-
|
|
69
|
-
while node
|
|
70
|
-
nodes << node
|
|
71
|
-
node = node.next
|
|
72
|
-
end
|
|
73
|
-
assert_equal(ROOT_NODES_LENGTH, nodes.length)
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
def test_next?
|
|
77
|
-
first_node = @doc.root.first
|
|
78
|
-
assert(first_node.next?)
|
|
79
|
-
|
|
80
|
-
last_node = @doc.root.last
|
|
81
|
-
assert(!last_node.next?)
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
def test_prev
|
|
85
|
-
nodes = []
|
|
86
|
-
|
|
87
|
-
node = @doc.root.last
|
|
88
|
-
|
|
89
|
-
while node
|
|
90
|
-
nodes << node
|
|
91
|
-
node = node.prev
|
|
92
|
-
end
|
|
93
|
-
assert_equal(ROOT_NODES_LENGTH, nodes.length)
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
def test_prev?
|
|
97
|
-
first_node = @doc.root.first
|
|
98
|
-
assert(!first_node.prev?)
|
|
99
|
-
|
|
100
|
-
last_node = @doc.root.last
|
|
101
|
-
assert(last_node.prev?)
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def test_parent?
|
|
105
|
-
assert(!@doc.parent?)
|
|
106
|
-
assert(@doc.root.parent?)
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
def test_child?
|
|
110
|
-
assert(@doc.child?)
|
|
111
|
-
assert(!@doc.root.first.child?)
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
def test_next_prev_equivalence
|
|
115
|
-
next_nodes = []
|
|
116
|
-
last_nodes = []
|
|
117
|
-
|
|
118
|
-
node = @doc.root.first
|
|
119
|
-
while node
|
|
120
|
-
next_nodes << node
|
|
121
|
-
node = node.next
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
node = @doc.root.last
|
|
125
|
-
while node
|
|
126
|
-
last_nodes << node
|
|
127
|
-
node = node.prev
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
assert_equal(next_nodes, last_nodes.reverse)
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
def test_next_children_equivalence
|
|
134
|
-
next_nodes = []
|
|
135
|
-
|
|
136
|
-
node = @doc.root.first
|
|
137
|
-
while node
|
|
138
|
-
next_nodes << node
|
|
139
|
-
node = node.next
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
assert_equal(@doc.root.children, next_nodes)
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
def test_doc_class
|
|
146
|
-
assert_instance_of(LibXML::XML::Document, @doc)
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
def test_root_class
|
|
150
|
-
assert_instance_of(LibXML::XML::Node, @doc.root)
|
|
151
|
-
end
|
|
152
|
-
end
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require_relative './test_helper'
|
|
4
|
+
|
|
5
|
+
class TestTranversal < Minitest::Test
|
|
6
|
+
ROOT_NODES_LENGTH = 27
|
|
7
|
+
ROOT_ELEMENTS_LENGTH = 13
|
|
8
|
+
|
|
9
|
+
def setup
|
|
10
|
+
filename = File.join(File.dirname(__FILE__), 'model/books.xml')
|
|
11
|
+
@doc = LibXML::XML::Document.file(filename)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def teardown
|
|
15
|
+
@doc = nil
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_children
|
|
19
|
+
# Includes text nodes and such
|
|
20
|
+
assert_equal(ROOT_NODES_LENGTH, @doc.root.children.length)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_children_iteration
|
|
24
|
+
# Includes text nodes and such
|
|
25
|
+
nodes = @doc.root.children.inject([]) do |arr, node|
|
|
26
|
+
arr << node
|
|
27
|
+
arr
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
assert_equal(ROOT_NODES_LENGTH, nodes.length)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_no_children
|
|
34
|
+
# Get a node with no children
|
|
35
|
+
node = @doc.find_first('/catalog/book[@id="bk113"]/price')
|
|
36
|
+
assert_equal(0, node.children.length)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_no_children_inner_xml
|
|
40
|
+
# Get a node with no children
|
|
41
|
+
node = @doc.find_first('/catalog/book[@id="bk113"]/price')
|
|
42
|
+
assert_nil(node.inner_xml)
|
|
43
|
+
end
|
|
44
|
+
def test_each
|
|
45
|
+
# Includes text nodes and such
|
|
46
|
+
nodes = @doc.root.inject([]) do |arr, node|
|
|
47
|
+
arr << node
|
|
48
|
+
arr
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
assert_equal(ROOT_NODES_LENGTH, nodes.length)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_each_element
|
|
55
|
+
# Includes text nodes and such
|
|
56
|
+
nodes = []
|
|
57
|
+
@doc.root.each_element do |node|
|
|
58
|
+
nodes << node
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
assert_equal(ROOT_ELEMENTS_LENGTH, nodes.length)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_next
|
|
65
|
+
nodes = []
|
|
66
|
+
|
|
67
|
+
node = @doc.root.first
|
|
68
|
+
|
|
69
|
+
while node
|
|
70
|
+
nodes << node
|
|
71
|
+
node = node.next
|
|
72
|
+
end
|
|
73
|
+
assert_equal(ROOT_NODES_LENGTH, nodes.length)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def test_next?
|
|
77
|
+
first_node = @doc.root.first
|
|
78
|
+
assert(first_node.next?)
|
|
79
|
+
|
|
80
|
+
last_node = @doc.root.last
|
|
81
|
+
assert(!last_node.next?)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_prev
|
|
85
|
+
nodes = []
|
|
86
|
+
|
|
87
|
+
node = @doc.root.last
|
|
88
|
+
|
|
89
|
+
while node
|
|
90
|
+
nodes << node
|
|
91
|
+
node = node.prev
|
|
92
|
+
end
|
|
93
|
+
assert_equal(ROOT_NODES_LENGTH, nodes.length)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def test_prev?
|
|
97
|
+
first_node = @doc.root.first
|
|
98
|
+
assert(!first_node.prev?)
|
|
99
|
+
|
|
100
|
+
last_node = @doc.root.last
|
|
101
|
+
assert(last_node.prev?)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def test_parent?
|
|
105
|
+
assert(!@doc.parent?)
|
|
106
|
+
assert(@doc.root.parent?)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def test_child?
|
|
110
|
+
assert(@doc.child?)
|
|
111
|
+
assert(!@doc.root.first.child?)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def test_next_prev_equivalence
|
|
115
|
+
next_nodes = []
|
|
116
|
+
last_nodes = []
|
|
117
|
+
|
|
118
|
+
node = @doc.root.first
|
|
119
|
+
while node
|
|
120
|
+
next_nodes << node
|
|
121
|
+
node = node.next
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
node = @doc.root.last
|
|
125
|
+
while node
|
|
126
|
+
last_nodes << node
|
|
127
|
+
node = node.prev
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
assert_equal(next_nodes, last_nodes.reverse)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def test_next_children_equivalence
|
|
134
|
+
next_nodes = []
|
|
135
|
+
|
|
136
|
+
node = @doc.root.first
|
|
137
|
+
while node
|
|
138
|
+
next_nodes << node
|
|
139
|
+
node = node.next
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
assert_equal(@doc.root.children, next_nodes)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def test_doc_class
|
|
146
|
+
assert_instance_of(LibXML::XML::Document, @doc)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def test_root_class
|
|
150
|
+
assert_instance_of(LibXML::XML::Node, @doc.root)
|
|
151
|
+
end
|
|
152
|
+
end
|