libxml-ruby 2.9.0-x64-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. checksums.yaml +7 -0
  2. data/HISTORY +790 -0
  3. data/LICENSE +21 -0
  4. data/MANIFEST +166 -0
  5. data/README.rdoc +184 -0
  6. data/Rakefile +81 -0
  7. data/ext/libxml/extconf.h +4 -0
  8. data/ext/libxml/extconf.rb +57 -0
  9. data/ext/libxml/libxml.c +80 -0
  10. data/ext/libxml/libxml_ruby.def +35 -0
  11. data/ext/libxml/ruby_libxml.h +75 -0
  12. data/ext/libxml/ruby_xml.c +977 -0
  13. data/ext/libxml/ruby_xml.h +20 -0
  14. data/ext/libxml/ruby_xml_attr.c +333 -0
  15. data/ext/libxml/ruby_xml_attr.h +12 -0
  16. data/ext/libxml/ruby_xml_attr_decl.c +153 -0
  17. data/ext/libxml/ruby_xml_attr_decl.h +11 -0
  18. data/ext/libxml/ruby_xml_attributes.c +275 -0
  19. data/ext/libxml/ruby_xml_attributes.h +15 -0
  20. data/ext/libxml/ruby_xml_cbg.c +85 -0
  21. data/ext/libxml/ruby_xml_document.c +1133 -0
  22. data/ext/libxml/ruby_xml_document.h +11 -0
  23. data/ext/libxml/ruby_xml_dtd.c +261 -0
  24. data/ext/libxml/ruby_xml_dtd.h +9 -0
  25. data/ext/libxml/ruby_xml_encoding.c +262 -0
  26. data/ext/libxml/ruby_xml_encoding.h +19 -0
  27. data/ext/libxml/ruby_xml_error.c +996 -0
  28. data/ext/libxml/ruby_xml_error.h +12 -0
  29. data/ext/libxml/ruby_xml_html_parser.c +92 -0
  30. data/ext/libxml/ruby_xml_html_parser.h +10 -0
  31. data/ext/libxml/ruby_xml_html_parser_context.c +337 -0
  32. data/ext/libxml/ruby_xml_html_parser_context.h +10 -0
  33. data/ext/libxml/ruby_xml_html_parser_options.c +46 -0
  34. data/ext/libxml/ruby_xml_html_parser_options.h +10 -0
  35. data/ext/libxml/ruby_xml_input_cbg.c +191 -0
  36. data/ext/libxml/ruby_xml_input_cbg.h +20 -0
  37. data/ext/libxml/ruby_xml_io.c +52 -0
  38. data/ext/libxml/ruby_xml_io.h +10 -0
  39. data/ext/libxml/ruby_xml_namespace.c +153 -0
  40. data/ext/libxml/ruby_xml_namespace.h +10 -0
  41. data/ext/libxml/ruby_xml_namespaces.c +293 -0
  42. data/ext/libxml/ruby_xml_namespaces.h +9 -0
  43. data/ext/libxml/ruby_xml_node.c +1446 -0
  44. data/ext/libxml/ruby_xml_node.h +11 -0
  45. data/ext/libxml/ruby_xml_parser.c +94 -0
  46. data/ext/libxml/ruby_xml_parser.h +12 -0
  47. data/ext/libxml/ruby_xml_parser_context.c +999 -0
  48. data/ext/libxml/ruby_xml_parser_context.h +10 -0
  49. data/ext/libxml/ruby_xml_parser_options.c +66 -0
  50. data/ext/libxml/ruby_xml_parser_options.h +12 -0
  51. data/ext/libxml/ruby_xml_reader.c +1226 -0
  52. data/ext/libxml/ruby_xml_reader.h +17 -0
  53. data/ext/libxml/ruby_xml_relaxng.c +110 -0
  54. data/ext/libxml/ruby_xml_relaxng.h +10 -0
  55. data/ext/libxml/ruby_xml_sax2_handler.c +326 -0
  56. data/ext/libxml/ruby_xml_sax2_handler.h +10 -0
  57. data/ext/libxml/ruby_xml_sax_parser.c +120 -0
  58. data/ext/libxml/ruby_xml_sax_parser.h +10 -0
  59. data/ext/libxml/ruby_xml_schema.c +300 -0
  60. data/ext/libxml/ruby_xml_schema.h +809 -0
  61. data/ext/libxml/ruby_xml_schema_attribute.c +109 -0
  62. data/ext/libxml/ruby_xml_schema_attribute.h +15 -0
  63. data/ext/libxml/ruby_xml_schema_element.c +94 -0
  64. data/ext/libxml/ruby_xml_schema_element.h +14 -0
  65. data/ext/libxml/ruby_xml_schema_facet.c +52 -0
  66. data/ext/libxml/ruby_xml_schema_facet.h +13 -0
  67. data/ext/libxml/ruby_xml_schema_type.c +259 -0
  68. data/ext/libxml/ruby_xml_schema_type.h +9 -0
  69. data/ext/libxml/ruby_xml_version.h +9 -0
  70. data/ext/libxml/ruby_xml_writer.c +1136 -0
  71. data/ext/libxml/ruby_xml_writer.h +10 -0
  72. data/ext/libxml/ruby_xml_xinclude.c +16 -0
  73. data/ext/libxml/ruby_xml_xinclude.h +11 -0
  74. data/ext/libxml/ruby_xml_xpath.c +188 -0
  75. data/ext/libxml/ruby_xml_xpath.h +13 -0
  76. data/ext/libxml/ruby_xml_xpath_context.c +360 -0
  77. data/ext/libxml/ruby_xml_xpath_context.h +9 -0
  78. data/ext/libxml/ruby_xml_xpath_expression.c +81 -0
  79. data/ext/libxml/ruby_xml_xpath_expression.h +10 -0
  80. data/ext/libxml/ruby_xml_xpath_object.c +335 -0
  81. data/ext/libxml/ruby_xml_xpath_object.h +17 -0
  82. data/ext/libxml/ruby_xml_xpointer.c +99 -0
  83. data/ext/libxml/ruby_xml_xpointer.h +11 -0
  84. data/ext/vc/libxml_ruby.sln +26 -0
  85. data/lib/2.3/libxml_ruby.so +0 -0
  86. data/lib/libs/libiconv-2.dll +0 -0
  87. data/lib/libs/libxml2-2.dll +0 -0
  88. data/lib/libs/zlib1.dll +0 -0
  89. data/lib/libxml.rb +35 -0
  90. data/lib/libxml/attr.rb +123 -0
  91. data/lib/libxml/attr_decl.rb +80 -0
  92. data/lib/libxml/attributes.rb +14 -0
  93. data/lib/libxml/document.rb +194 -0
  94. data/lib/libxml/error.rb +95 -0
  95. data/lib/libxml/hpricot.rb +78 -0
  96. data/lib/libxml/html_parser.rb +96 -0
  97. data/lib/libxml/namespace.rb +62 -0
  98. data/lib/libxml/namespaces.rb +38 -0
  99. data/lib/libxml/node.rb +399 -0
  100. data/lib/libxml/ns.rb +22 -0
  101. data/lib/libxml/parser.rb +367 -0
  102. data/lib/libxml/properties.rb +23 -0
  103. data/lib/libxml/reader.rb +29 -0
  104. data/lib/libxml/sax_callbacks.rb +180 -0
  105. data/lib/libxml/sax_parser.rb +58 -0
  106. data/lib/libxml/schema.rb +67 -0
  107. data/lib/libxml/schema/attribute.rb +19 -0
  108. data/lib/libxml/schema/element.rb +27 -0
  109. data/lib/libxml/schema/type.rb +29 -0
  110. data/lib/libxml/tree.rb +29 -0
  111. data/lib/libxml/xpath_object.rb +16 -0
  112. data/lib/xml.rb +14 -0
  113. data/lib/xml/libxml.rb +10 -0
  114. data/libxml-ruby.gemspec +47 -0
  115. data/script/benchmark/depixelate +634 -0
  116. data/script/benchmark/hamlet.xml +9055 -0
  117. data/script/benchmark/parsecount +170 -0
  118. data/script/benchmark/sock_entries.xml +507 -0
  119. data/script/benchmark/throughput +41 -0
  120. data/script/test +6 -0
  121. data/setup.rb +1585 -0
  122. data/test/c14n/given/doc.dtd +1 -0
  123. data/test/c14n/given/example-1.xml +14 -0
  124. data/test/c14n/given/example-2.xml +11 -0
  125. data/test/c14n/given/example-3.xml +18 -0
  126. data/test/c14n/given/example-4.xml +9 -0
  127. data/test/c14n/given/example-5.xml +12 -0
  128. data/test/c14n/given/example-6.xml +2 -0
  129. data/test/c14n/given/example-7.xml +11 -0
  130. data/test/c14n/given/example-8.xml +11 -0
  131. data/test/c14n/given/example-8.xpath +10 -0
  132. data/test/c14n/given/world.txt +1 -0
  133. data/test/c14n/result/1-1-without-comments/example-1 +4 -0
  134. data/test/c14n/result/1-1-without-comments/example-2 +11 -0
  135. data/test/c14n/result/1-1-without-comments/example-3 +14 -0
  136. data/test/c14n/result/1-1-without-comments/example-4 +9 -0
  137. data/test/c14n/result/1-1-without-comments/example-5 +3 -0
  138. data/test/c14n/result/1-1-without-comments/example-6 +1 -0
  139. data/test/c14n/result/1-1-without-comments/example-7 +1 -0
  140. data/test/c14n/result/1-1-without-comments/example-8 +1 -0
  141. data/test/c14n/result/with-comments/example-1 +6 -0
  142. data/test/c14n/result/with-comments/example-2 +11 -0
  143. data/test/c14n/result/with-comments/example-3 +14 -0
  144. data/test/c14n/result/with-comments/example-4 +9 -0
  145. data/test/c14n/result/with-comments/example-5 +4 -0
  146. data/test/c14n/result/with-comments/example-6 +1 -0
  147. data/test/c14n/result/with-comments/example-7 +1 -0
  148. data/test/c14n/result/without-comments/example-1 +4 -0
  149. data/test/c14n/result/without-comments/example-2 +11 -0
  150. data/test/c14n/result/without-comments/example-3 +14 -0
  151. data/test/c14n/result/without-comments/example-4 +9 -0
  152. data/test/c14n/result/without-comments/example-5 +3 -0
  153. data/test/c14n/result/without-comments/example-6 +1 -0
  154. data/test/c14n/result/without-comments/example-7 +1 -0
  155. data/test/model/atom.xml +13 -0
  156. data/test/model/bands.iso-8859-1.xml +5 -0
  157. data/test/model/bands.utf-8.xml +5 -0
  158. data/test/model/bands.xml +5 -0
  159. data/test/model/books.xml +154 -0
  160. data/test/model/merge_bug_data.xml +58 -0
  161. data/test/model/ruby-lang.html +238 -0
  162. data/test/model/rubynet.xml +79 -0
  163. data/test/model/rubynet_project +1 -0
  164. data/test/model/shiporder.rnc +28 -0
  165. data/test/model/shiporder.rng +86 -0
  166. data/test/model/shiporder.xml +23 -0
  167. data/test/model/shiporder.xsd +40 -0
  168. data/test/model/soap.xml +27 -0
  169. data/test/model/xinclude.xml +5 -0
  170. data/test/tc_attr.rb +181 -0
  171. data/test/tc_attr_decl.rb +132 -0
  172. data/test/tc_attributes.rb +142 -0
  173. data/test/tc_canonicalize.rb +124 -0
  174. data/test/tc_deprecated_require.rb +12 -0
  175. data/test/tc_document.rb +125 -0
  176. data/test/tc_document_write.rb +195 -0
  177. data/test/tc_dtd.rb +128 -0
  178. data/test/tc_encoding.rb +126 -0
  179. data/test/tc_encoding_sax.rb +115 -0
  180. data/test/tc_error.rb +179 -0
  181. data/test/tc_html_parser.rb +161 -0
  182. data/test/tc_html_parser_context.rb +23 -0
  183. data/test/tc_namespace.rb +61 -0
  184. data/test/tc_namespaces.rb +209 -0
  185. data/test/tc_node.rb +215 -0
  186. data/test/tc_node_cdata.rb +50 -0
  187. data/test/tc_node_comment.rb +32 -0
  188. data/test/tc_node_copy.rb +41 -0
  189. data/test/tc_node_edit.rb +174 -0
  190. data/test/tc_node_pi.rb +39 -0
  191. data/test/tc_node_text.rb +70 -0
  192. data/test/tc_node_write.rb +107 -0
  193. data/test/tc_node_xlink.rb +28 -0
  194. data/test/tc_parser.rb +375 -0
  195. data/test/tc_parser_context.rb +204 -0
  196. data/test/tc_properties.rb +38 -0
  197. data/test/tc_reader.rb +399 -0
  198. data/test/tc_relaxng.rb +53 -0
  199. data/test/tc_sax_parser.rb +319 -0
  200. data/test/tc_schema.rb +161 -0
  201. data/test/tc_traversal.rb +152 -0
  202. data/test/tc_writer.rb +447 -0
  203. data/test/tc_xinclude.rb +20 -0
  204. data/test/tc_xml.rb +225 -0
  205. data/test/tc_xpath.rb +244 -0
  206. data/test/tc_xpath_context.rb +88 -0
  207. data/test/tc_xpath_expression.rb +37 -0
  208. data/test/tc_xpointer.rb +72 -0
  209. data/test/test_helper.rb +16 -0
  210. data/test/test_suite.rb +49 -0
  211. metadata +344 -0
@@ -0,0 +1,20 @@
1
+ # encoding: UTF-8
2
+
3
+ require './test_helper'
4
+
5
+ class TestXInclude < Minitest::Test
6
+ def setup
7
+ @doc = XML::Document.file(File.join(File.dirname(__FILE__), 'model/xinclude.xml'))
8
+ assert_instance_of(XML::Document, @doc)
9
+ end
10
+
11
+ def teardown
12
+ @doc = nil
13
+ end
14
+
15
+ def test_ruby_xml_xinclude
16
+ assert_equal(1, @doc.xinclude)
17
+ assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document xmlns:xi=\"http://www.w3.org/2001/XInclude\">\n <p>This libxml2 binding has the following project information:\n <code>This is some text to include in an xml file via XInclude.</code></p>\n</document>\n",
18
+ @doc.to_s)
19
+ end
20
+ end
@@ -0,0 +1,225 @@
1
+ # encoding: UTF-8
2
+
3
+ require './test_helper'
4
+ require 'stringio'
5
+
6
+ class TestXml < Minitest::Test
7
+ # ----- Constants ------
8
+ def test_lib_versions
9
+ assert(XML.check_lib_versions)
10
+ end
11
+
12
+ def test_debug_entities
13
+ XML.debug_entities = false
14
+ assert(!XML.debug_entities)
15
+
16
+ XML.debug_entities = true
17
+ assert(XML.debug_entities)
18
+
19
+ XML.debug_entities = false
20
+ assert(!XML.debug_entities)
21
+ end
22
+
23
+ def test_default_compression
24
+ return unless XML.default_compression
25
+
26
+ 0.upto(9) do |i|
27
+ XML.default_compression = i
28
+ assert_equal(i, XML.default_compression)
29
+ end
30
+
31
+ 9.downto(0) do |i|
32
+ assert_equal(i, XML.default_compression = i)
33
+ assert_equal(i, XML.default_compression)
34
+ end
35
+
36
+ 0.downto(-10) do |i|
37
+ assert_equal(i, XML.default_compression = i)
38
+ assert_equal(0, XML.default_compression)
39
+ end
40
+
41
+ 10.upto(20) do |i|
42
+ assert_equal(i, XML.default_compression = i)
43
+ assert_equal(9, XML.default_compression)
44
+ end
45
+ end
46
+
47
+ def test_default_keep_blanks
48
+ XML.default_keep_blanks = false
49
+ assert(!XML.default_keep_blanks)
50
+ assert_equal(XML::Parser::Options::NOBLANKS, XML.default_options)
51
+
52
+ XML.default_keep_blanks = true
53
+ assert(XML.default_keep_blanks)
54
+ assert_equal(0, XML.default_options)
55
+
56
+ XML.default_keep_blanks = false
57
+ assert(!XML.default_keep_blanks)
58
+
59
+ # other tests depend on keeping blanks by default,
60
+ # which is the default default behaviour anyway.
61
+ XML.default_keep_blanks = true
62
+ end
63
+
64
+ def test_default_line_numbers
65
+ XML.default_line_numbers = false
66
+ assert(!XML.default_line_numbers)
67
+
68
+ XML.default_line_numbers = true
69
+ assert(XML.default_line_numbers)
70
+
71
+ XML.default_line_numbers = false
72
+ assert(!XML.default_line_numbers)
73
+ end
74
+
75
+ def test_default_substitute_entities
76
+ XML.default_substitute_entities = false
77
+ assert(!XML.default_substitute_entities)
78
+ assert_equal(0, XML.default_options)
79
+
80
+ XML.default_substitute_entities = true
81
+ assert(XML.default_substitute_entities)
82
+ assert_equal(XML::Parser::Options::NOENT, XML.default_options)
83
+
84
+ XML.default_substitute_entities = false
85
+ assert(!XML.default_substitute_entities)
86
+ end
87
+
88
+ def test_default_tree_indent_string
89
+ s = XML.default_tree_indent_string
90
+ assert_instance_of(String, s)
91
+ assert_equal(' ', s)
92
+ XML.default_tree_indent_string = 'uga'
93
+ s = XML.default_tree_indent_string
94
+ assert_instance_of(String, s)
95
+ assert_equal('uga', s)
96
+ XML.default_tree_indent_string = ' '
97
+ s = XML.default_tree_indent_string
98
+ assert_instance_of(String, s)
99
+ assert_equal(' ', s)
100
+ end
101
+
102
+ def test_default_validity_checking
103
+ XML.default_validity_checking = false
104
+ assert(!XML.default_validity_checking)
105
+ assert_equal(0, XML.default_options)
106
+
107
+ XML.default_validity_checking = true
108
+ assert(XML.default_validity_checking)
109
+ assert_equal(XML::Parser::Options::DTDVALID, XML.default_options)
110
+
111
+ XML.default_validity_checking = false
112
+ assert(!XML.default_validity_checking)
113
+ end
114
+
115
+ def test_default_warnings
116
+ XML.default_warnings = false
117
+ assert(!XML.default_warnings)
118
+ assert_equal(XML::Parser::Options::NOWARNING, XML.default_options)
119
+
120
+ XML.default_warnings = true
121
+ assert(XML.default_warnings)
122
+ assert_equal(0, XML.default_options)
123
+
124
+ XML.default_warnings = false
125
+ assert(!XML.default_warnings)
126
+ end
127
+
128
+ def test_enabled_automata
129
+ assert_equal(true, XML.enabled_automata?)
130
+ end
131
+
132
+ def test_enabled_c14n
133
+ assert_equal(true, XML.enabled_c14n?)
134
+ end
135
+
136
+ def test_enabled_catalog
137
+ assert_equal(true, XML.enabled_catalog?)
138
+ end
139
+
140
+ def test_enabled_debug
141
+ assert_equal(true, XML.enabled_debug?)
142
+ end
143
+
144
+ def test_enabled_docbook
145
+ assert_equal(true, XML.enabled_docbook?)
146
+ end
147
+
148
+ def test_enabled_ftp
149
+ assert_equal(true, XML.enabled_ftp?)
150
+ end
151
+
152
+ def test_enabled_http
153
+ assert_equal(true, XML.enabled_http?)
154
+ end
155
+
156
+ def test_enabled_html
157
+ assert_equal(true, XML.enabled_html?)
158
+ end
159
+
160
+ def test_enabled_iconv
161
+ assert_equal(true, XML.enabled_iconv?)
162
+ end
163
+
164
+ def test_enabled_memory_debug
165
+ assert_equal(false, XML.enabled_memory_debug?)
166
+ end
167
+
168
+ def test_enabled_regexp
169
+ assert_equal(true, XML.enabled_regexp?)
170
+ end
171
+
172
+ def test_enabled_schemas
173
+ assert_equal(true, XML.enabled_schemas?)
174
+ end
175
+
176
+ def test_enabled_thread
177
+ assert_equal(true, XML.enabled_thread?)
178
+ end
179
+
180
+ def test_enabled_unicode
181
+ assert_equal(true, XML.enabled_unicode?)
182
+ end
183
+
184
+ def test_enabled_xinclude
185
+ assert_equal(true, XML.enabled_xinclude?)
186
+ end
187
+
188
+ def test_enabled_xpath
189
+ assert_equal(true, XML.enabled_xpath?)
190
+ end
191
+
192
+ def test_enabled_xpointer
193
+ assert_equal(true, XML.enabled_xpointer?)
194
+ end
195
+
196
+ def test_enabled_zlib
197
+ assert_equal(true, XML.enabled_zlib?)
198
+ end
199
+
200
+ def test_intent_tree_output
201
+ assert(TrueClass, XML.indent_tree_output)
202
+
203
+ XML.indent_tree_output = false
204
+ assert(FalseClass, XML.indent_tree_output)
205
+
206
+ XML.indent_tree_output = true
207
+ assert(TrueClass, XML.indent_tree_output)
208
+ end
209
+
210
+ def test_version
211
+ assert_instance_of(String, XML::VERSION)
212
+ end
213
+
214
+ def test_vernum
215
+ assert_instance_of(Fixnum, XML::VERNUM)
216
+ end
217
+
218
+ def test_libxml_parser_features
219
+ assert_instance_of(Array, XML.features)
220
+ end
221
+
222
+ def test_default_options
223
+ assert_equal(0, XML.default_options)
224
+ end
225
+ end
@@ -0,0 +1,244 @@
1
+ # encoding: UTF-8
2
+
3
+ require './test_helper'
4
+ require 'tempfile'
5
+
6
+ class TestXPath < Minitest::Test
7
+ def setup
8
+ @doc = XML::Document.file(File.join(File.dirname(__FILE__), 'model/soap.xml'))
9
+ end
10
+
11
+ def teardown
12
+ @doc = nil
13
+ end
14
+
15
+ def test_doc_find
16
+ nodes = @doc.find('/soap:Envelope')
17
+ assert_instance_of(XML::XPath::Object, nodes)
18
+ assert_equal(1, nodes.length)
19
+ assert_equal(nodes.xpath_type, XML::XPath::NODESET)
20
+ end
21
+
22
+ def test_doc_find_first
23
+ node = @doc.find_first('/soap:Envelope/soap:Body')
24
+ assert_instance_of(XML::Node, node)
25
+ end
26
+
27
+ def test_ns
28
+ nodes = @doc.find('//ns1:IdAndName', 'ns1:http://domain.somewhere.com')
29
+ assert_equal(3, nodes.length)
30
+ end
31
+
32
+ def test_ns_gc
33
+ _stress = GC.stress
34
+ GC.stress = true
35
+
36
+ doc = XML::Document.string('<foo xmlns="http://bar.com" />')
37
+ node = doc.root
38
+ # This line segfaults on prior versions of libxml-ruby
39
+ node.find("namespace::*")
40
+
41
+ GC.stress = _stress
42
+ end
43
+
44
+ def test_ns_array
45
+ nodes = @doc.find('//ns1:IdAndName', ['ns1:http://domain.somewhere.com'])
46
+ assert_equal(3, nodes.length)
47
+ end
48
+
49
+ def test_default_ns1
50
+ # Find all nodes with http://services.somewhere.com namespace
51
+ nodes = @doc.find('//*[namespace-uri()="http://services.somewhere.com"]')
52
+ assert_equal(2, nodes.length)
53
+ assert_equal('getManufacturerNamesResponse', nodes[0].name)
54
+ assert_equal('IDAndNameList', nodes[1].name)
55
+ end
56
+
57
+ def test_default_ns2
58
+ # Find all nodes with http://services.somewhere.com namespace
59
+ nodes = @doc.find('//ns:*', 'ns:http://services.somewhere.com')
60
+ assert_equal(2, nodes.length)
61
+ assert_equal('getManufacturerNamesResponse', nodes[0].name)
62
+ assert_equal('IDAndNameList', nodes[1].name)
63
+
64
+ # Get getManufacturerNamesResponse node
65
+ nodes = @doc.find('//ns:getManufacturerNamesResponse', 'ns:http://services.somewhere.com')
66
+ assert_equal(1, nodes.length)
67
+
68
+ # Get IdAndName node
69
+ nodes = @doc.find('/soap:Envelope/soap:Body/ns0:getManufacturerNamesResponse/ns0:IDAndNameList/ns1:IdAndName',
70
+ ['ns0:http://services.somewhere.com', 'ns1:http://domain.somewhere.com'])
71
+ assert_equal(3, nodes.length)
72
+ end
73
+
74
+ def test_default_ns3
75
+ # Find all nodes with http://services.somewhere.com namespace
76
+ nodes = @doc.find('//ns:*', 'ns' => 'http://services.somewhere.com')
77
+ assert_equal(2, nodes.length)
78
+ assert_equal('getManufacturerNamesResponse', nodes[0].name)
79
+ assert_equal('IDAndNameList', nodes[1].name)
80
+ end
81
+
82
+ def test_default_ns4
83
+ # Find all nodes with http://services.somewhere.com namespace
84
+ nodes = @doc.find('//ns:*', :ns => 'http://services.somewhere.com')
85
+ assert_equal(2, nodes.length)
86
+ assert_equal('getManufacturerNamesResponse', nodes[0].name)
87
+ assert_equal('IDAndNameList', nodes[1].name)
88
+ end
89
+
90
+ def test_default_ns5
91
+ # Find all nodes with http://services.somewhere.com namespace
92
+ XML::Namespace.new(@doc.root, 'ns', 'http://services.somewhere.com')
93
+ nodes = @doc.find('//ns:*')
94
+ assert_equal(2, nodes.length)
95
+ assert_equal('getManufacturerNamesResponse', nodes[0].name)
96
+ assert_equal('IDAndNameList', nodes[1].name)
97
+ end
98
+
99
+ def test_attribute_ns
100
+ # Pull all nodes with http://services.somewhere.com namespace
101
+ nodes = @doc.find('@soap:encodingStyle')
102
+ assert_equal(1, nodes.length)
103
+ assert_equal('encodingStyle', nodes.first.name)
104
+ assert_equal('http://www.w3.org/2001/12/soap-encoding', nodes.first.value)
105
+ end
106
+
107
+ def test_register_default_ns
108
+ doc = XML::Document.file(File.join(File.dirname(__FILE__), 'model/atom.xml'))
109
+
110
+ # No namespace has been yet defined
111
+ assert_raises(XML::Error) do
112
+ node = doc.find("atom:title")
113
+ end
114
+
115
+ node = doc.find('atom:title', 'atom:http://www.w3.org/2005/Atom')
116
+ refute_nil(node)
117
+
118
+ # Register namespace
119
+ doc.root.namespaces.default_prefix = 'atom'
120
+ node = doc.find("atom:title")
121
+ refute_nil(node)
122
+ end
123
+
124
+ def test_node_find
125
+ nodes = @doc.find('//ns1:IdAndName', 'ns1:http://domain.somewhere.com')
126
+ node = nodes.first
127
+
128
+ # Since we are searching on the node, don't have to register namespace
129
+ nodes = node.find('ns1:name')
130
+ assert_equal(1, nodes.length)
131
+ assert_equal(nodes.first.object_id, nodes.last.object_id, 'First and last should be the same')
132
+ assert_equal('name', nodes.first.name)
133
+ assert_equal('man1', nodes.first.content)
134
+ end
135
+
136
+ def test_node_find_first
137
+ node = @doc.find_first('//ns1:IdAndName', 'ns1:http://domain.somewhere.com')
138
+
139
+ # Since we are searching on the node, don't have to register namespace
140
+ node = node.find_first('ns1:name')
141
+ assert_equal('name', node.name)
142
+ assert_equal('man1', node.content)
143
+ end
144
+
145
+ def test_node_no_doc
146
+ node = XML::Node.new('header', 'some content')
147
+ assert_raises(TypeError) do
148
+ node = node.find_first('/header')
149
+ end
150
+ end
151
+
152
+ def test_memory
153
+ # This sometimes causes a segmentation fault because
154
+ # an xml document is sometimes freed before the
155
+ # xpath_object used to query it. When the xpath_object
156
+ # is free, it iterates over its results which are pointers
157
+ # to the document's nodes. A segmentation fault then happens.
158
+
159
+ 1000.times do
160
+ doc = XML::Document.new('1.0')
161
+ doc.root = XML::Node.new("header")
162
+
163
+ 1000.times do
164
+ doc.root << XML::Node.new("footer")
165
+ end
166
+
167
+ nodes = doc.find('/header/footer')
168
+ end
169
+ end
170
+
171
+ # Test that document doesn't get freed before nodes
172
+ def test_xpath_free
173
+ doc = XML::Document.file(File.join(File.dirname(__FILE__), 'model/soap.xml'))
174
+ nodes = doc.find('//*')
175
+ GC.start
176
+ assert_equal('Envelope', nodes.first.name)
177
+ end
178
+
179
+ def test_xpath_namespace_nodes
180
+ doc = XML::Document.string('<feed xmlns="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml"><entry/></feed>')
181
+ nodes = doc.find('//atom:entry|namespace::*', :atom => "http://www.w3.org/2005/Atom")
182
+ assert_equal(4, nodes.length)
183
+
184
+ node = nodes[0]
185
+ assert_equal(XML::Node::ELEMENT_NODE, node.node_type)
186
+
187
+ node = nodes[1]
188
+ assert_equal(XML::Node::NAMESPACE_DECL, node.node_type)
189
+
190
+ node = nodes[2]
191
+ assert_equal(XML::Node::NAMESPACE_DECL, node.node_type)
192
+
193
+ node = nodes[3]
194
+ assert_equal(XML::Node::NAMESPACE_DECL, node.node_type)
195
+ end
196
+
197
+ # Test to make sure we don't get nil on empty results.
198
+ # This is also to test that we don't segfault due to our C code getting a NULL pointer
199
+ # and not handling it properly.
200
+ def test_xpath_empty_result
201
+ doc = XML::Document.string('<html><body><p>Welcome to XHTML land!</p></body></html>')
202
+ nodes = doc.find("//object/param[translate(@name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'wmode']")
203
+ refute_nil nodes
204
+ end
205
+
206
+ def test_invalid_expression
207
+ xml = LibXML::XML::Document.string('<a></a>')
208
+
209
+ # Using the expression twice used to cause a Segmentation Fault
210
+ error = assert_raises(XML::Error) do
211
+ xml.find('//a/')
212
+ end
213
+ assert_equal("Error: Invalid expression.", error.to_s)
214
+
215
+ # Try again - this used to cause a Segmentation Fault
216
+ error = assert_raises(XML::Error) do
217
+ xml.find('//a/')
218
+ end
219
+ assert_equal("Error: Invalid expression.", error.to_s)
220
+ end
221
+
222
+ def test_find_cdata
223
+ doc = LibXML::XML::Document.string('<root>hi there <![CDATA[ mycdata ]]> bye!</root>')
224
+
225
+ nodes = doc.find('/root/text()')
226
+ assert_equal(3, nodes.length)
227
+ assert_equal(nodes[0].node_type, LibXML::XML::Node::TEXT_NODE)
228
+ assert_equal(nodes[0].content, 'hi there ')
229
+
230
+ assert_equal(nodes[1].node_type, LibXML::XML::Node::CDATA_SECTION_NODE)
231
+ assert_equal(nodes[1].content, ' mycdata ')
232
+
233
+ assert_equal(nodes[2].node_type, LibXML::XML::Node::TEXT_NODE)
234
+ assert_equal(nodes[2].content, ' bye!')
235
+ end
236
+
237
+ def test_find_comment
238
+ doc = LibXML::XML::Document.string('<root>hi there <!-- my comment --> bye!</root>')
239
+
240
+ nodes = doc.find('//comment()')
241
+ assert_equal(1, nodes.length)
242
+ assert_equal(nodes[0].content, ' my comment ')
243
+ end
244
+ end