libxml-ruby 4.1.2 → 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.
Files changed (172) hide show
  1. checksums.yaml +4 -4
  2. data/{HISTORY → CHANGELOG.md} +875 -887
  3. data/LICENSE +20 -20
  4. data/README.md +67 -0
  5. data/Rakefile +77 -98
  6. data/ext/libxml/extconf.rb +39 -20
  7. data/ext/libxml/libxml.c +67 -79
  8. data/ext/libxml/ruby_libxml.h +43 -44
  9. data/ext/libxml/ruby_xml.c +556 -899
  10. data/ext/libxml/ruby_xml.h +9 -10
  11. data/ext/libxml/ruby_xml_attr.c +338 -333
  12. data/ext/libxml/ruby_xml_attr.h +13 -12
  13. data/ext/libxml/ruby_xml_attr_decl.c +19 -12
  14. data/ext/libxml/ruby_xml_attr_decl.h +11 -11
  15. data/ext/libxml/ruby_xml_attributes.c +18 -9
  16. data/ext/libxml/ruby_xml_attributes.h +17 -15
  17. data/ext/libxml/ruby_xml_document.c +1142 -1129
  18. data/ext/libxml/ruby_xml_document.h +12 -11
  19. data/ext/libxml/ruby_xml_dtd.c +287 -248
  20. data/ext/libxml/ruby_xml_dtd.h +10 -9
  21. data/ext/libxml/ruby_xml_encoding.c +250 -250
  22. data/ext/libxml/ruby_xml_encoding.h +20 -18
  23. data/ext/libxml/ruby_xml_error.c +1003 -996
  24. data/ext/libxml/ruby_xml_error.h +14 -14
  25. data/ext/libxml/ruby_xml_html_parser.c +91 -91
  26. data/ext/libxml/ruby_xml_html_parser.h +10 -10
  27. data/ext/libxml/ruby_xml_html_parser_context.c +364 -337
  28. data/ext/libxml/ruby_xml_html_parser_context.h +11 -10
  29. data/ext/libxml/ruby_xml_html_parser_options.c +48 -48
  30. data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
  31. data/ext/libxml/ruby_xml_input_cbg.c +216 -188
  32. data/ext/libxml/ruby_xml_input_cbg.h +20 -20
  33. data/ext/libxml/ruby_xml_io.c +49 -47
  34. data/ext/libxml/ruby_xml_io.h +10 -10
  35. data/ext/libxml/ruby_xml_namespace.c +159 -154
  36. data/ext/libxml/ruby_xml_namespace.h +11 -10
  37. data/ext/libxml/ruby_xml_namespaces.c +313 -293
  38. data/ext/libxml/ruby_xml_namespaces.h +9 -9
  39. data/ext/libxml/ruby_xml_node.c +1433 -1398
  40. data/ext/libxml/ruby_xml_node.h +15 -13
  41. data/ext/libxml/ruby_xml_parser.c +91 -91
  42. data/ext/libxml/ruby_xml_parser.h +10 -10
  43. data/ext/libxml/ruby_xml_parser_context.c +1016 -1001
  44. data/ext/libxml/ruby_xml_parser_context.h +11 -10
  45. data/ext/libxml/ruby_xml_parser_options.c +74 -66
  46. data/ext/libxml/ruby_xml_parser_options.h +10 -10
  47. data/ext/libxml/ruby_xml_reader.c +40 -31
  48. data/ext/libxml/ruby_xml_reader.h +14 -14
  49. data/ext/libxml/ruby_xml_registry.c +31 -0
  50. data/ext/libxml/ruby_xml_registry.h +22 -0
  51. data/ext/libxml/ruby_xml_relaxng.c +21 -5
  52. data/ext/libxml/ruby_xml_relaxng.h +9 -8
  53. data/ext/libxml/ruby_xml_sax2_handler.c +326 -326
  54. data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
  55. data/ext/libxml/ruby_xml_sax_parser.c +108 -116
  56. data/ext/libxml/ruby_xml_sax_parser.h +10 -10
  57. data/ext/libxml/ruby_xml_schema.c +22 -15
  58. data/ext/libxml/ruby_xml_schema.h +26 -25
  59. data/ext/libxml/ruby_xml_schema_attribute.c +7 -7
  60. data/ext/libxml/ruby_xml_schema_attribute.h +37 -37
  61. data/ext/libxml/ruby_xml_schema_element.c +8 -8
  62. data/ext/libxml/ruby_xml_schema_element.h +11 -11
  63. data/ext/libxml/ruby_xml_schema_facet.c +50 -50
  64. data/ext/libxml/ruby_xml_schema_facet.h +9 -9
  65. data/ext/libxml/ruby_xml_schema_type.c +12 -19
  66. data/ext/libxml/ruby_xml_schema_type.h +9 -9
  67. data/ext/libxml/ruby_xml_version.h +9 -9
  68. data/ext/libxml/ruby_xml_writer.c +183 -185
  69. data/ext/libxml/ruby_xml_writer.h +6 -6
  70. data/ext/libxml/ruby_xml_xinclude.c +20 -20
  71. data/ext/libxml/ruby_xml_xinclude.h +11 -11
  72. data/ext/libxml/ruby_xml_xpath.c +195 -195
  73. data/ext/libxml/ruby_xml_xpath.h +15 -15
  74. data/ext/libxml/ruby_xml_xpath_context.c +408 -362
  75. data/ext/libxml/ruby_xml_xpath_context.h +9 -9
  76. data/ext/libxml/ruby_xml_xpath_expression.c +12 -6
  77. data/ext/libxml/ruby_xml_xpath_expression.h +11 -10
  78. data/ext/libxml/ruby_xml_xpath_object.c +69 -54
  79. data/ext/libxml/ruby_xml_xpath_object.h +19 -17
  80. data/ext/vc/libxml_ruby/libxml_ruby.vcxproj +271 -0
  81. data/ext/xcode/libxml-ruby.xcodeproj/project.pbxproj +633 -0
  82. data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  83. data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  84. data/ext/xcode/libxml-ruby.xcodeproj/xcshareddata/xcschemes/libxml-ruby.xcscheme +80 -0
  85. data/lib/libxml/attr.rb +122 -122
  86. data/lib/libxml/attr_decl.rb +80 -80
  87. data/lib/libxml/attributes.rb +13 -13
  88. data/lib/libxml/document.rb +165 -194
  89. data/lib/libxml/error.rb +122 -95
  90. data/lib/libxml/html_parser.rb +80 -96
  91. data/lib/libxml/namespace.rb +61 -61
  92. data/lib/libxml/namespaces.rb +37 -37
  93. data/lib/libxml/node.rb +321 -323
  94. data/lib/libxml/parser.rb +94 -100
  95. data/lib/libxml/sax_callbacks.rb +179 -179
  96. data/lib/libxml/sax_parser.rb +40 -40
  97. data/lib/libxml/schema/attribute.rb +27 -19
  98. data/lib/libxml/schema/element.rb +20 -0
  99. data/lib/libxml/schema/type.rb +44 -21
  100. data/lib/libxml/schema.rb +47 -47
  101. data/lib/libxml/tree.rb +28 -28
  102. data/lib/libxml-ruby.rb +30 -30
  103. data/libxml-ruby.gemspec +46 -48
  104. data/test/c14n/result/1-1-without-comments/example-1 +3 -3
  105. data/test/c14n/result/1-1-without-comments/example-2 +10 -10
  106. data/test/c14n/result/1-1-without-comments/example-3 +13 -13
  107. data/test/c14n/result/1-1-without-comments/example-4 +8 -8
  108. data/test/c14n/result/1-1-without-comments/example-5 +2 -2
  109. data/test/c14n/result/with-comments/example-1 +5 -5
  110. data/test/c14n/result/with-comments/example-2 +10 -10
  111. data/test/c14n/result/with-comments/example-3 +13 -13
  112. data/test/c14n/result/with-comments/example-4 +8 -8
  113. data/test/c14n/result/with-comments/example-5 +3 -3
  114. data/test/c14n/result/without-comments/example-1 +3 -3
  115. data/test/c14n/result/without-comments/example-2 +10 -10
  116. data/test/c14n/result/without-comments/example-3 +13 -13
  117. data/test/c14n/result/without-comments/example-4 +8 -8
  118. data/test/c14n/result/without-comments/example-5 +2 -2
  119. data/test/test_attr.rb +179 -180
  120. data/test/test_attr_decl.rb +131 -131
  121. data/test/test_attributes.rb +135 -135
  122. data/test/test_canonicalize.rb +122 -120
  123. data/test/test_document.rb +138 -132
  124. data/test/test_document_write.rb +142 -145
  125. data/test/test_dtd.rb +134 -129
  126. data/test/test_encoding.rb +126 -129
  127. data/test/test_encoding_sax.rb +114 -114
  128. data/test/test_error.rb +197 -194
  129. data/test/test_helper.rb +21 -13
  130. data/test/test_html_parser.rb +166 -162
  131. data/test/test_html_parser_context.rb +22 -22
  132. data/test/test_input_callbacks.rb +36 -0
  133. data/test/test_namespace.rb +58 -60
  134. data/test/test_namespaces.rb +200 -200
  135. data/test/test_node.rb +251 -237
  136. data/test/test_node_cdata.rb +50 -50
  137. data/test/test_node_comment.rb +32 -32
  138. data/test/test_node_copy.rb +40 -40
  139. data/test/test_node_edit.rb +176 -158
  140. data/test/test_node_pi.rb +37 -37
  141. data/test/test_node_text.rb +69 -69
  142. data/test/test_node_write.rb +93 -96
  143. data/test/test_node_xlink.rb +28 -28
  144. data/test/test_parser.rb +297 -324
  145. data/test/test_parser_context.rb +198 -198
  146. data/test/test_properties.rb +38 -38
  147. data/test/test_reader.rb +413 -364
  148. data/test/test_relaxng.rb +59 -53
  149. data/test/test_sax_parser.rb +345 -326
  150. data/test/test_schema.rb +28 -0
  151. data/test/test_traversal.rb +152 -152
  152. data/test/test_writer.rb +469 -468
  153. data/test/test_xinclude.rb +20 -20
  154. data/test/test_xml.rb +164 -267
  155. data/test/test_xpath.rb +244 -244
  156. data/test/test_xpath_context.rb +87 -87
  157. data/test/test_xpath_expression.rb +37 -37
  158. metadata +49 -31
  159. data/README.rdoc +0 -217
  160. data/ext/libxml/extconf.h +0 -3
  161. data/ext/libxml/ruby_xml_cbg.c +0 -85
  162. data/lib/libxml/hpricot.rb +0 -78
  163. data/lib/libxml.rb +0 -5
  164. data/lib/xml/libxml.rb +0 -10
  165. data/lib/xml.rb +0 -14
  166. data/script/benchmark/depixelate +0 -634
  167. data/script/benchmark/hamlet.xml +0 -9055
  168. data/script/benchmark/parsecount +0 -170
  169. data/script/benchmark/sock_entries.xml +0 -507
  170. data/script/benchmark/throughput +0 -41
  171. data/script/test +0 -6
  172. 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
@@ -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