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
@@ -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