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.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/{HISTORY → CHANGELOG.md} +875 -923
  3. data/LICENSE +20 -20
  4. data/README.md +67 -0
  5. data/Rakefile +77 -98
  6. data/ext/libxml/extconf.rb +34 -20
  7. data/ext/libxml/libxml.c +67 -79
  8. data/ext/libxml/ruby_libxml.h +1 -1
  9. data/ext/libxml/ruby_xml_attr.c +338 -333
  10. data/ext/libxml/ruby_xml_attr.h +13 -12
  11. data/ext/libxml/ruby_xml_attr_decl.c +19 -12
  12. data/ext/libxml/ruby_xml_attr_decl.h +11 -11
  13. data/ext/libxml/ruby_xml_attributes.c +18 -9
  14. data/ext/libxml/ruby_xml_document.c +111 -98
  15. data/ext/libxml/ruby_xml_document.h +1 -0
  16. data/ext/libxml/ruby_xml_dtd.c +49 -19
  17. data/ext/libxml/ruby_xml_dtd.h +10 -9
  18. data/ext/libxml/ruby_xml_html_parser.c +91 -91
  19. data/ext/libxml/ruby_xml_html_parser.h +10 -10
  20. data/ext/libxml/ruby_xml_html_parser_context.c +19 -6
  21. data/ext/libxml/ruby_xml_html_parser_context.h +11 -10
  22. data/ext/libxml/ruby_xml_html_parser_options.c +48 -48
  23. data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
  24. data/ext/libxml/ruby_xml_input_cbg.c +45 -17
  25. data/ext/libxml/ruby_xml_input_cbg.h +20 -20
  26. data/ext/libxml/ruby_xml_io.c +49 -47
  27. data/ext/libxml/ruby_xml_io.h +10 -10
  28. data/ext/libxml/ruby_xml_namespace.c +20 -12
  29. data/ext/libxml/ruby_xml_namespace.h +11 -10
  30. data/ext/libxml/ruby_xml_namespaces.c +313 -293
  31. data/ext/libxml/ruby_xml_namespaces.h +9 -9
  32. data/ext/libxml/ruby_xml_node.c +71 -32
  33. data/ext/libxml/ruby_xml_node.h +15 -13
  34. data/ext/libxml/ruby_xml_parser.c +91 -91
  35. data/ext/libxml/ruby_xml_parser_context.c +54 -47
  36. data/ext/libxml/ruby_xml_parser_context.h +11 -10
  37. data/ext/libxml/ruby_xml_reader.c +25 -15
  38. data/ext/libxml/ruby_xml_reader.h +14 -14
  39. data/ext/libxml/ruby_xml_registry.c +31 -0
  40. data/ext/libxml/ruby_xml_registry.h +22 -0
  41. data/ext/libxml/ruby_xml_relaxng.c +21 -5
  42. data/ext/libxml/ruby_xml_relaxng.h +9 -8
  43. data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
  44. data/ext/libxml/ruby_xml_sax_parser.c +1 -1
  45. data/ext/libxml/ruby_xml_sax_parser.h +10 -10
  46. data/ext/libxml/ruby_xml_schema.c +18 -11
  47. data/ext/libxml/ruby_xml_schema.h +26 -25
  48. data/ext/libxml/ruby_xml_schema_attribute.c +7 -7
  49. data/ext/libxml/ruby_xml_schema_attribute.h +37 -37
  50. data/ext/libxml/ruby_xml_schema_element.c +8 -8
  51. data/ext/libxml/ruby_xml_schema_element.h +11 -11
  52. data/ext/libxml/ruby_xml_schema_facet.c +50 -50
  53. data/ext/libxml/ruby_xml_schema_facet.h +9 -9
  54. data/ext/libxml/ruby_xml_schema_type.c +12 -19
  55. data/ext/libxml/ruby_xml_schema_type.h +9 -9
  56. data/ext/libxml/ruby_xml_version.h +4 -4
  57. data/ext/libxml/ruby_xml_writer.c +1136 -1124
  58. data/ext/libxml/ruby_xml_writer.h +6 -6
  59. data/ext/libxml/ruby_xml_xinclude.c +20 -20
  60. data/ext/libxml/ruby_xml_xinclude.h +11 -11
  61. data/ext/libxml/ruby_xml_xpath.c +195 -195
  62. data/ext/libxml/ruby_xml_xpath.h +15 -15
  63. data/ext/libxml/ruby_xml_xpath_context.c +408 -362
  64. data/ext/libxml/ruby_xml_xpath_context.h +9 -9
  65. data/ext/libxml/ruby_xml_xpath_expression.c +11 -5
  66. data/ext/libxml/ruby_xml_xpath_expression.h +11 -10
  67. data/ext/libxml/ruby_xml_xpath_object.c +69 -54
  68. data/ext/libxml/ruby_xml_xpath_object.h +19 -17
  69. data/ext/vc/libxml_ruby/libxml_ruby.vcxproj +271 -0
  70. data/ext/xcode/libxml-ruby.xcodeproj/project.pbxproj +633 -0
  71. data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  72. data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  73. data/ext/xcode/libxml-ruby.xcodeproj/xcshareddata/xcschemes/libxml-ruby.xcscheme +80 -0
  74. data/lib/libxml/document.rb +0 -29
  75. data/lib/libxml/error.rb +30 -3
  76. data/lib/libxml/html_parser.rb +0 -16
  77. data/lib/libxml/node.rb +1 -3
  78. data/lib/libxml/parser.rb +0 -8
  79. data/lib/libxml/schema/attribute.rb +27 -19
  80. data/lib/libxml/schema/element.rb +20 -0
  81. data/lib/libxml/schema/type.rb +44 -21
  82. data/lib/libxml/schema.rb +47 -47
  83. data/lib/libxml-ruby.rb +30 -30
  84. data/libxml-ruby.gemspec +12 -16
  85. data/test/c14n/result/1-1-without-comments/example-1 +3 -3
  86. data/test/c14n/result/1-1-without-comments/example-2 +10 -10
  87. data/test/c14n/result/1-1-without-comments/example-3 +13 -13
  88. data/test/c14n/result/1-1-without-comments/example-4 +8 -8
  89. data/test/c14n/result/1-1-without-comments/example-5 +2 -2
  90. data/test/c14n/result/with-comments/example-1 +5 -5
  91. data/test/c14n/result/with-comments/example-2 +10 -10
  92. data/test/c14n/result/with-comments/example-3 +13 -13
  93. data/test/c14n/result/with-comments/example-4 +8 -8
  94. data/test/c14n/result/with-comments/example-5 +3 -3
  95. data/test/c14n/result/without-comments/example-1 +3 -3
  96. data/test/c14n/result/without-comments/example-2 +10 -10
  97. data/test/c14n/result/without-comments/example-3 +13 -13
  98. data/test/c14n/result/without-comments/example-4 +8 -8
  99. data/test/c14n/result/without-comments/example-5 +2 -2
  100. data/test/test_attr.rb +179 -180
  101. data/test/test_attr_decl.rb +131 -131
  102. data/test/test_attributes.rb +135 -135
  103. data/test/test_canonicalize.rb +122 -120
  104. data/test/test_document.rb +2 -4
  105. data/test/test_dtd.rb +12 -4
  106. data/test/test_encoding_sax.rb +114 -114
  107. data/test/test_error.rb +6 -3
  108. data/test/test_helper.rb +1 -0
  109. data/test/test_html_parser.rb +6 -2
  110. data/test/test_html_parser_context.rb +22 -22
  111. data/test/test_input_callbacks.rb +36 -0
  112. data/test/test_namespace.rb +1 -1
  113. data/test/test_namespaces.rb +200 -200
  114. data/test/test_node.rb +16 -0
  115. data/test/test_node_cdata.rb +50 -50
  116. data/test/test_node_comment.rb +32 -32
  117. data/test/test_node_copy.rb +40 -40
  118. data/test/test_node_edit.rb +176 -158
  119. data/test/test_node_pi.rb +37 -37
  120. data/test/test_node_text.rb +69 -69
  121. data/test/test_node_xlink.rb +28 -28
  122. data/test/test_parser.rb +5 -41
  123. data/test/test_parser_context.rb +198 -198
  124. data/test/test_properties.rb +38 -38
  125. data/test/test_reader.rb +55 -6
  126. data/test/test_relaxng.rb +59 -53
  127. data/test/test_sax_parser.rb +345 -345
  128. data/test/test_schema.rb +28 -0
  129. data/test/test_traversal.rb +152 -152
  130. data/test/test_writer.rb +469 -468
  131. data/test/test_xinclude.rb +20 -20
  132. data/test/test_xml.rb +3 -7
  133. data/test/test_xpath.rb +244 -244
  134. data/test/test_xpath_context.rb +87 -87
  135. data/test/test_xpath_expression.rb +37 -37
  136. metadata +33 -27
  137. data/README.rdoc +0 -208
  138. data/ext/libxml/extconf.h +0 -3
  139. data/ext/libxml/ruby_xml_cbg.c +0 -85
  140. data/lib/libxml/hpricot.rb +0 -78
  141. data/lib/libxml.rb +0 -5
  142. data/lib/xml/libxml.rb +0 -10
  143. data/lib/xml.rb +0 -14
  144. data/script/benchmark/depixelate +0 -634
  145. data/script/benchmark/hamlet.xml +0 -9055
  146. data/script/benchmark/parsecount +0 -170
  147. data/script/benchmark/sock_entries.xml +0 -507
  148. data/script/benchmark/throughput +0 -41
  149. data/script/test +0 -6
  150. data/test/test.rb +0 -5
  151. data/test/test_deprecated_require.rb +0 -12
@@ -0,0 +1,36 @@
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+
5
+ class InputCallbacksGCStressRepro
6
+ def run
7
+ scheme_name = 'input-callback-gc://'
8
+
9
+ callback_class = Class.new do
10
+ def self.document_query(_uri)
11
+ '<root/>'
12
+ end
13
+ end
14
+ LibXML::XML::InputCallbacks.add_scheme(scheme_name, callback_class)
15
+ callback_class = nil
16
+
17
+ document = LibXML::XML::Document.file("#{scheme_name}fixture.xml")
18
+ document.root.name
19
+ ensure
20
+ LibXML::XML::InputCallbacks.remove_scheme(scheme_name)
21
+ end
22
+ end
23
+
24
+ class TestInputCallbacks < Minitest::Test
25
+ def setup
26
+ GC.stress = true
27
+ end
28
+
29
+ def teardown
30
+ GC.stress = false
31
+ end
32
+
33
+ def test_add_scheme_auto_registers_and_survives_gc_stress
34
+ assert_equal('root', InputCallbacksGCStressRepro.new.run)
35
+ end
36
+ end
@@ -31,7 +31,7 @@ class TestNS < Minitest::Test
31
31
  error = assert_raises(TypeError) do
32
32
  LibXML::XML::Namespace.new(nil, 'my_namepace', 'http://www.mynamespace.com')
33
33
  end
34
- assert_equal('wrong argument type nil (expected Data)', error.to_s)
34
+ assert_match(/wrong argument type nil/, error.to_s)
35
35
  end
36
36
 
37
37
  def test_duplicate_ns
@@ -1,200 +1,200 @@
1
- # encoding: UTF-8
2
-
3
- require_relative './test_helper'
4
-
5
-
6
- class TestNamespaces < Minitest::Test
7
- def setup
8
- file = File.join(File.dirname(__FILE__), 'model/soap.xml')
9
- @doc = LibXML::XML::Document.file(file)
10
- end
11
-
12
- def teardown
13
- @doc = nil
14
- end
15
-
16
- def test_namespace_node
17
- node = @doc.root
18
- ns = node.namespaces.namespace
19
- assert_equal('soap', ns.prefix)
20
- assert_equal('http://schemas.xmlsoap.org/soap/envelope/', ns.href)
21
- end
22
-
23
- def test_namespace_attr
24
- node = @doc.root
25
- attr = node.attributes.get_attribute('encodingStyle')
26
- assert_equal('soap', attr.ns.prefix)
27
- assert_equal('soap', attr.namespaces.namespace.prefix)
28
- end
29
-
30
- def test_set_namespace_node
31
- node = LibXML::XML::Node.new('Envelope')
32
- assert_equal('<Envelope/>', node.to_s)
33
-
34
- ns = LibXML::XML::Namespace.new(node, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
35
- assert_equal("<Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s)
36
- assert_nil(node.namespaces.namespace)
37
-
38
- # Now put the node in the soap namespace
39
- node.namespaces.namespace = ns
40
- refute_nil(node.namespaces.namespace)
41
- assert_equal("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s)
42
- end
43
-
44
- def test_set_namespace_attribute
45
- # Create node
46
- node = LibXML::XML::Node.new('Envelope')
47
- assert_equal('<Envelope/>', node.to_s)
48
-
49
- # Create attribute
50
- attr = LibXML::XML::Attr.new(node, "encodingStyle", "http://www.w3.org/2001/12/soap-encoding")
51
- assert_equal('<Envelope encodingStyle="http://www.w3.org/2001/12/soap-encoding"/>',
52
- node.to_s)
53
-
54
- # Create namespace attribute
55
- ns = LibXML::XML::Namespace.new(node, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
56
- assert_equal('<Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" encodingStyle="http://www.w3.org/2001/12/soap-encoding"/>',
57
- node.to_s)
58
- assert_nil(node.namespaces.namespace)
59
-
60
- # Now put the node in the soap namespace
61
- node.namespaces.namespace = ns
62
- refute_nil(node.namespaces.namespace)
63
- assert_equal('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" encodingStyle="http://www.w3.org/2001/12/soap-encoding"/>',
64
- node.to_s)
65
-
66
- # Now put the attribute in the soap namespace
67
- attr.namespaces.namespace = ns
68
- refute_nil(node.namespaces.namespace)
69
- assert_equal('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"/>',
70
- node.to_s)
71
- end
72
-
73
- def test_define_namespace
74
- node = LibXML::XML::Node.new('Envelope')
75
- assert_equal('<Envelope/>', node.to_s)
76
-
77
- LibXML::XML::Namespace.new(node, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
78
- assert_equal("<Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s)
79
- assert_nil(node.namespaces.namespace)
80
- end
81
-
82
- def test_define_default_namespace
83
- node = LibXML::XML::Node.new('Envelope')
84
- assert_equal('<Envelope/>', node.to_s)
85
-
86
- LibXML::XML::Namespace.new(node, nil, 'http://schemas.xmlsoap.org/soap/envelope/')
87
- assert_equal("<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s)
88
- # This seems wrong, but appears to be the way libxml works
89
- assert_nil(node.namespaces.namespace)
90
- end
91
-
92
- def test_namespaces
93
- node = @doc.find_first('//ns1:IdAndName',
94
- :ns1 => 'http://domain.somewhere.com')
95
-
96
- namespaces = node.namespaces.sort
97
- assert_equal(5, namespaces.length)
98
-
99
- namespace = namespaces[0]
100
- assert_instance_of(LibXML::XML::Namespace, namespace)
101
- assert_nil(namespace.prefix)
102
- assert_equal('http://services.somewhere.com', namespace.href)
103
-
104
- namespace = namespaces[1]
105
- assert_instance_of(LibXML::XML::Namespace, namespace)
106
- assert_equal('ns1', namespace.prefix)
107
- assert_equal('http://domain.somewhere.com', namespace.href)
108
-
109
- namespace = namespaces[2]
110
- assert_instance_of(LibXML::XML::Namespace, namespace)
111
- assert_equal('soap', namespace.prefix)
112
- assert_equal('http://schemas.xmlsoap.org/soap/envelope/', namespace.href)
113
-
114
- namespace = namespaces[3]
115
- assert_instance_of(LibXML::XML::Namespace, namespace)
116
- assert_equal('xsd', namespace.prefix)
117
- assert_equal('http://www.w3.org/2001/XMLSchema', namespace.href)
118
-
119
- namespace = namespaces[4]
120
- assert_instance_of(LibXML::XML::Namespace, namespace)
121
- assert_equal('xsi', namespace.prefix)
122
- assert_equal('http://www.w3.org/2001/XMLSchema-instance', namespace.href)
123
- end
124
-
125
- def test_namespace_definitions
126
- ns_defs = @doc.root.namespaces.definitions
127
- assert_equal(3, ns_defs.size)
128
-
129
- namespace = ns_defs[0]
130
- assert_instance_of(LibXML::XML::Namespace, namespace)
131
- assert_equal('soap', namespace.prefix)
132
- assert_equal('http://schemas.xmlsoap.org/soap/envelope/', namespace.href)
133
-
134
- namespace = ns_defs[1]
135
- assert_instance_of(LibXML::XML::Namespace, namespace)
136
- assert_equal('xsd', namespace.prefix)
137
- assert_equal('http://www.w3.org/2001/XMLSchema', namespace.href)
138
-
139
- namespace = ns_defs[2]
140
- assert_instance_of(LibXML::XML::Namespace, namespace)
141
- assert_equal('xsi', namespace.prefix)
142
- assert_equal('http://www.w3.org/2001/XMLSchema-instance', namespace.href)
143
-
144
- node = @doc.root.find_first('//ns:getManufacturerNamesResponse',
145
- :ns => 'http://services.somewhere.com')
146
- ns_defs = node.namespaces.definitions
147
- assert_equal(1, ns_defs.size)
148
-
149
- namespace = ns_defs[0]
150
- assert_instance_of(LibXML::XML::Namespace, namespace)
151
- assert_nil(namespace.prefix)
152
- assert_equal('http://services.somewhere.com', namespace.href)
153
- end
154
-
155
- def test_find_by_prefix
156
- namespace = @doc.root.namespaces.find_by_prefix('soap')
157
-
158
- assert_instance_of(LibXML::XML::Namespace, namespace)
159
- assert_equal('soap', namespace.prefix)
160
- assert_equal('http://schemas.xmlsoap.org/soap/envelope/', namespace.href)
161
- end
162
-
163
- def test_find_default_ns
164
- namespace = @doc.root.namespaces.find_by_prefix(nil)
165
- assert_nil(namespace)
166
-
167
- node = @doc.find_first('//ns1:getManufacturerNamesResponse',
168
- :ns1 => 'http://services.somewhere.com')
169
- namespace = node.namespaces.find_by_prefix(nil)
170
-
171
- assert_instance_of(LibXML::XML::Namespace, namespace)
172
- assert_nil(namespace.prefix)
173
- assert_equal('http://services.somewhere.com', namespace.href)
174
- end
175
-
176
- def test_find_ns_by_href
177
- node = @doc.find_first('//ns1:getManufacturerNamesResponse',
178
- :ns1 => 'http://services.somewhere.com')
179
-
180
- namespace = node.namespaces.find_by_href('http://schemas.xmlsoap.org/soap/envelope/')
181
-
182
- assert_instance_of(LibXML::XML::Namespace, namespace)
183
- assert_equal('soap', namespace.prefix)
184
- assert_equal('http://schemas.xmlsoap.org/soap/envelope/', namespace.href)
185
- end
186
-
187
- def test_default_namespace
188
- doc = LibXML::XML::Document.string('<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"/>')
189
- ns = doc.root.namespaces.default
190
- assert_equal(ns.href, 'http://schemas.xmlsoap.org/soap/envelope/')
191
- end
192
-
193
- def test_default_prefix
194
- doc = LibXML::XML::Document.string('<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"/>')
195
- doc.root.namespaces.default_prefix = 'soap'
196
-
197
- node = doc.root.find_first('/soap:Envelope')
198
- refute_nil(node)
199
- end
200
- end
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+
5
+
6
+ class TestNamespaces < Minitest::Test
7
+ def setup
8
+ file = File.join(File.dirname(__FILE__), 'model/soap.xml')
9
+ @doc = LibXML::XML::Document.file(file)
10
+ end
11
+
12
+ def teardown
13
+ @doc = nil
14
+ end
15
+
16
+ def test_namespace_node
17
+ node = @doc.root
18
+ ns = node.namespaces.namespace
19
+ assert_equal('soap', ns.prefix)
20
+ assert_equal('http://schemas.xmlsoap.org/soap/envelope/', ns.href)
21
+ end
22
+
23
+ def test_namespace_attr
24
+ node = @doc.root
25
+ attr = node.attributes.get_attribute('encodingStyle')
26
+ assert_equal('soap', attr.ns.prefix)
27
+ assert_equal('soap', attr.namespaces.namespace.prefix)
28
+ end
29
+
30
+ def test_set_namespace_node
31
+ node = LibXML::XML::Node.new('Envelope')
32
+ assert_equal('<Envelope/>', node.to_s)
33
+
34
+ ns = LibXML::XML::Namespace.new(node, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
35
+ assert_equal("<Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s)
36
+ assert_nil(node.namespaces.namespace)
37
+
38
+ # Now put the node in the soap namespace
39
+ node.namespaces.namespace = ns
40
+ refute_nil(node.namespaces.namespace)
41
+ assert_equal("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s)
42
+ end
43
+
44
+ def test_set_namespace_attribute
45
+ # Create node
46
+ node = LibXML::XML::Node.new('Envelope')
47
+ assert_equal('<Envelope/>', node.to_s)
48
+
49
+ # Create attribute
50
+ attr = LibXML::XML::Attr.new(node, "encodingStyle", "http://www.w3.org/2001/12/soap-encoding")
51
+ assert_equal('<Envelope encodingStyle="http://www.w3.org/2001/12/soap-encoding"/>',
52
+ node.to_s)
53
+
54
+ # Create namespace attribute
55
+ ns = LibXML::XML::Namespace.new(node, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
56
+ assert_equal('<Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" encodingStyle="http://www.w3.org/2001/12/soap-encoding"/>',
57
+ node.to_s)
58
+ assert_nil(node.namespaces.namespace)
59
+
60
+ # Now put the node in the soap namespace
61
+ node.namespaces.namespace = ns
62
+ refute_nil(node.namespaces.namespace)
63
+ assert_equal('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" encodingStyle="http://www.w3.org/2001/12/soap-encoding"/>',
64
+ node.to_s)
65
+
66
+ # Now put the attribute in the soap namespace
67
+ attr.namespaces.namespace = ns
68
+ refute_nil(node.namespaces.namespace)
69
+ assert_equal('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"/>',
70
+ node.to_s)
71
+ end
72
+
73
+ def test_define_namespace
74
+ node = LibXML::XML::Node.new('Envelope')
75
+ assert_equal('<Envelope/>', node.to_s)
76
+
77
+ LibXML::XML::Namespace.new(node, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
78
+ assert_equal("<Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s)
79
+ assert_nil(node.namespaces.namespace)
80
+ end
81
+
82
+ def test_define_default_namespace
83
+ node = LibXML::XML::Node.new('Envelope')
84
+ assert_equal('<Envelope/>', node.to_s)
85
+
86
+ LibXML::XML::Namespace.new(node, nil, 'http://schemas.xmlsoap.org/soap/envelope/')
87
+ assert_equal("<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s)
88
+ # This seems wrong, but appears to be the way libxml works
89
+ assert_nil(node.namespaces.namespace)
90
+ end
91
+
92
+ def test_namespaces
93
+ node = @doc.find_first('//ns1:IdAndName',
94
+ :ns1 => 'http://domain.somewhere.com')
95
+
96
+ namespaces = node.namespaces.sort
97
+ assert_equal(5, namespaces.length)
98
+
99
+ namespace = namespaces[0]
100
+ assert_instance_of(LibXML::XML::Namespace, namespace)
101
+ assert_nil(namespace.prefix)
102
+ assert_equal('http://services.somewhere.com', namespace.href)
103
+
104
+ namespace = namespaces[1]
105
+ assert_instance_of(LibXML::XML::Namespace, namespace)
106
+ assert_equal('ns1', namespace.prefix)
107
+ assert_equal('http://domain.somewhere.com', namespace.href)
108
+
109
+ namespace = namespaces[2]
110
+ assert_instance_of(LibXML::XML::Namespace, namespace)
111
+ assert_equal('soap', namespace.prefix)
112
+ assert_equal('http://schemas.xmlsoap.org/soap/envelope/', namespace.href)
113
+
114
+ namespace = namespaces[3]
115
+ assert_instance_of(LibXML::XML::Namespace, namespace)
116
+ assert_equal('xsd', namespace.prefix)
117
+ assert_equal('http://www.w3.org/2001/XMLSchema', namespace.href)
118
+
119
+ namespace = namespaces[4]
120
+ assert_instance_of(LibXML::XML::Namespace, namespace)
121
+ assert_equal('xsi', namespace.prefix)
122
+ assert_equal('http://www.w3.org/2001/XMLSchema-instance', namespace.href)
123
+ end
124
+
125
+ def test_namespace_definitions
126
+ ns_defs = @doc.root.namespaces.definitions
127
+ assert_equal(3, ns_defs.size)
128
+
129
+ namespace = ns_defs[0]
130
+ assert_instance_of(LibXML::XML::Namespace, namespace)
131
+ assert_equal('soap', namespace.prefix)
132
+ assert_equal('http://schemas.xmlsoap.org/soap/envelope/', namespace.href)
133
+
134
+ namespace = ns_defs[1]
135
+ assert_instance_of(LibXML::XML::Namespace, namespace)
136
+ assert_equal('xsd', namespace.prefix)
137
+ assert_equal('http://www.w3.org/2001/XMLSchema', namespace.href)
138
+
139
+ namespace = ns_defs[2]
140
+ assert_instance_of(LibXML::XML::Namespace, namespace)
141
+ assert_equal('xsi', namespace.prefix)
142
+ assert_equal('http://www.w3.org/2001/XMLSchema-instance', namespace.href)
143
+
144
+ node = @doc.root.find_first('//ns:getManufacturerNamesResponse',
145
+ :ns => 'http://services.somewhere.com')
146
+ ns_defs = node.namespaces.definitions
147
+ assert_equal(1, ns_defs.size)
148
+
149
+ namespace = ns_defs[0]
150
+ assert_instance_of(LibXML::XML::Namespace, namespace)
151
+ assert_nil(namespace.prefix)
152
+ assert_equal('http://services.somewhere.com', namespace.href)
153
+ end
154
+
155
+ def test_find_by_prefix
156
+ namespace = @doc.root.namespaces.find_by_prefix('soap')
157
+
158
+ assert_instance_of(LibXML::XML::Namespace, namespace)
159
+ assert_equal('soap', namespace.prefix)
160
+ assert_equal('http://schemas.xmlsoap.org/soap/envelope/', namespace.href)
161
+ end
162
+
163
+ def test_find_default_ns
164
+ namespace = @doc.root.namespaces.find_by_prefix(nil)
165
+ assert_nil(namespace)
166
+
167
+ node = @doc.find_first('//ns1:getManufacturerNamesResponse',
168
+ :ns1 => 'http://services.somewhere.com')
169
+ namespace = node.namespaces.find_by_prefix(nil)
170
+
171
+ assert_instance_of(LibXML::XML::Namespace, namespace)
172
+ assert_nil(namespace.prefix)
173
+ assert_equal('http://services.somewhere.com', namespace.href)
174
+ end
175
+
176
+ def test_find_ns_by_href
177
+ node = @doc.find_first('//ns1:getManufacturerNamesResponse',
178
+ :ns1 => 'http://services.somewhere.com')
179
+
180
+ namespace = node.namespaces.find_by_href('http://schemas.xmlsoap.org/soap/envelope/')
181
+
182
+ assert_instance_of(LibXML::XML::Namespace, namespace)
183
+ assert_equal('soap', namespace.prefix)
184
+ assert_equal('http://schemas.xmlsoap.org/soap/envelope/', namespace.href)
185
+ end
186
+
187
+ def test_default_namespace
188
+ doc = LibXML::XML::Document.string('<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"/>')
189
+ ns = doc.root.namespaces.default
190
+ assert_equal(ns.href, 'http://schemas.xmlsoap.org/soap/envelope/')
191
+ end
192
+
193
+ def test_default_prefix
194
+ doc = LibXML::XML::Document.string('<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"/>')
195
+ doc.root.namespaces.default_prefix = 'soap'
196
+
197
+ node = doc.root.find_first('/soap:Envelope')
198
+ refute_nil(node)
199
+ end
200
+ end
data/test/test_node.rb CHANGED
@@ -232,4 +232,20 @@ class TestNode < Minitest::Test
232
232
  assert_equal("unescaped & string", node.content)
233
233
  assert_equal("<test>unescaped &amp; string</test>", node.to_s)
234
234
  end
235
+
236
+ def test_document_node_marks_document
237
+ GC.stress = true
238
+ node = create_document_child
239
+ assert_equal("child", node.name)
240
+ refute_nil(node.doc)
241
+ ensure
242
+ GC.stress = false
243
+ end
244
+
245
+ private
246
+
247
+ def create_document_child
248
+ doc = LibXML::XML::Document.string("<root><child/></root>")
249
+ doc.root.children.first
250
+ end
235
251
  end
@@ -1,50 +1,50 @@
1
- # encoding: UTF-8
2
-
3
- require_relative './test_helper'
4
-
5
- class CDataCommentTest < Minitest::Test
6
- def setup
7
- xp = LibXML::XML::Parser.string('<root></root>')
8
- @doc = xp.parse
9
- assert_instance_of(LibXML::XML::Document, @doc)
10
- @root = @doc.root
11
- end
12
-
13
- def test_node_type
14
- cnode = LibXML::XML::Node.new_cdata('test cdata')
15
- assert_equal(LibXML::XML::Node::CDATA_SECTION_NODE, cnode.node_type)
16
- end
17
-
18
- def test_add_cdata
19
- @root << LibXML::XML::Node.new_cdata('mycdata')
20
- assert_equal '<root><![CDATA[mycdata]]></root>',
21
- @root.to_s.gsub(/\n\s*/,'')
22
- end
23
-
24
- def test_add_cdata_2
25
- @root << LibXML::XML::Node.new_cdata('mycdata')
26
- assert_equal 'cdata',
27
- @root.child.node_type_name
28
- end
29
-
30
- def test_add_cdata_3
31
- @root << el = LibXML::XML::Node.new_cdata('mycdata')
32
- el << "_this_is_added"
33
- assert_equal '<root><![CDATA[mycdata_this_is_added]]></root>',
34
- @root.to_s.gsub(/\n\s*/,'')
35
- end
36
-
37
- def test_attributes
38
- cnode = LibXML::XML::Node.new_cdata('test cdata')
39
- assert_equal(0, cnode.attributes.length)
40
- end
41
-
42
- def test_set_cdata_attribute
43
- cnode = LibXML::XML::Node.new_cdata('test cdata')
44
-
45
- # Can't create attributes on non-element nodes
46
- assert_raises(ArgumentError) do
47
- cnode['attr'] = '123'
48
- end
49
- end
50
- end
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+
5
+ class CDataCommentTest < Minitest::Test
6
+ def setup
7
+ xp = LibXML::XML::Parser.string('<root></root>')
8
+ @doc = xp.parse
9
+ assert_instance_of(LibXML::XML::Document, @doc)
10
+ @root = @doc.root
11
+ end
12
+
13
+ def test_node_type
14
+ cnode = LibXML::XML::Node.new_cdata('test cdata')
15
+ assert_equal(LibXML::XML::Node::CDATA_SECTION_NODE, cnode.node_type)
16
+ end
17
+
18
+ def test_add_cdata
19
+ @root << LibXML::XML::Node.new_cdata('mycdata')
20
+ assert_equal '<root><![CDATA[mycdata]]></root>',
21
+ @root.to_s.gsub(/\n\s*/,'')
22
+ end
23
+
24
+ def test_add_cdata_2
25
+ @root << LibXML::XML::Node.new_cdata('mycdata')
26
+ assert_equal 'cdata',
27
+ @root.child.node_type_name
28
+ end
29
+
30
+ def test_add_cdata_3
31
+ @root << el = LibXML::XML::Node.new_cdata('mycdata')
32
+ el << "_this_is_added"
33
+ assert_equal '<root><![CDATA[mycdata_this_is_added]]></root>',
34
+ @root.to_s.gsub(/\n\s*/,'')
35
+ end
36
+
37
+ def test_attributes
38
+ cnode = LibXML::XML::Node.new_cdata('test cdata')
39
+ assert_equal(0, cnode.attributes.length)
40
+ end
41
+
42
+ def test_set_cdata_attribute
43
+ cnode = LibXML::XML::Node.new_cdata('test cdata')
44
+
45
+ # Can't create attributes on non-element nodes
46
+ assert_raises(ArgumentError) do
47
+ cnode['attr'] = '123'
48
+ end
49
+ end
50
+ end
@@ -1,32 +1,32 @@
1
- # encoding: UTF-8
2
-
3
- require_relative './test_helper'
4
-
5
-
6
- class NodeCommentTest < Minitest::Test
7
- def setup
8
- xp = LibXML::XML::Parser.string('<root></root>')
9
- @doc = xp.parse
10
- assert_instance_of(LibXML::XML::Document, @doc)
11
- @root = @doc.root
12
- end
13
-
14
- def test_libxml_node_add_comment_01
15
- @root << LibXML::XML::Node.new_comment('mycomment')
16
- assert_equal '<root><!--mycomment--></root>',
17
- @root.to_s.gsub(/\n\s*/,'')
18
- end
19
-
20
- def test_libxml_node_add_comment_02
21
- @root << LibXML::XML::Node.new_comment('mycomment')
22
- assert_equal 'comment',
23
- @root.child.node_type_name
24
- end
25
-
26
- def test_libxml_node_add_comment_03
27
- @root << el = LibXML::XML::Node.new_comment('mycomment')
28
- el << "_this_is_added"
29
- assert_equal '<root><!--mycomment_this_is_added--></root>',
30
- @root.to_s.gsub(/\n\s*/,'')
31
- end
32
- end
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+
5
+
6
+ class NodeCommentTest < Minitest::Test
7
+ def setup
8
+ xp = LibXML::XML::Parser.string('<root></root>')
9
+ @doc = xp.parse
10
+ assert_instance_of(LibXML::XML::Document, @doc)
11
+ @root = @doc.root
12
+ end
13
+
14
+ def test_libxml_node_add_comment_01
15
+ @root << LibXML::XML::Node.new_comment('mycomment')
16
+ assert_equal '<root><!--mycomment--></root>',
17
+ @root.to_s.gsub(/\n\s*/,'')
18
+ end
19
+
20
+ def test_libxml_node_add_comment_02
21
+ @root << LibXML::XML::Node.new_comment('mycomment')
22
+ assert_equal 'comment',
23
+ @root.child.node_type_name
24
+ end
25
+
26
+ def test_libxml_node_add_comment_03
27
+ @root << el = LibXML::XML::Node.new_comment('mycomment')
28
+ el << "_this_is_added"
29
+ assert_equal '<root><!--mycomment_this_is_added--></root>',
30
+ @root.to_s.gsub(/\n\s*/,'')
31
+ end
32
+ end