libxml-ruby 3.2.2-x64-mingw-ucrt
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/HISTORY +848 -0
- data/LICENSE +21 -0
- data/MANIFEST +166 -0
- data/README.rdoc +217 -0
- data/Rakefile +99 -0
- data/ext/libxml/extconf.rb +61 -0
- data/ext/libxml/libxml.c +80 -0
- data/ext/libxml/libxml_ruby.def +35 -0
- data/ext/libxml/ruby_libxml.h +67 -0
- data/ext/libxml/ruby_xml.c +933 -0
- data/ext/libxml/ruby_xml.h +10 -0
- data/ext/libxml/ruby_xml_attr.c +333 -0
- data/ext/libxml/ruby_xml_attr.h +12 -0
- data/ext/libxml/ruby_xml_attr_decl.c +153 -0
- data/ext/libxml/ruby_xml_attr_decl.h +11 -0
- data/ext/libxml/ruby_xml_attributes.c +275 -0
- data/ext/libxml/ruby_xml_attributes.h +15 -0
- data/ext/libxml/ruby_xml_cbg.c +85 -0
- data/ext/libxml/ruby_xml_document.c +1123 -0
- data/ext/libxml/ruby_xml_document.h +11 -0
- data/ext/libxml/ruby_xml_dtd.c +248 -0
- data/ext/libxml/ruby_xml_dtd.h +9 -0
- data/ext/libxml/ruby_xml_encoding.c +250 -0
- data/ext/libxml/ruby_xml_encoding.h +16 -0
- data/ext/libxml/ruby_xml_error.c +996 -0
- data/ext/libxml/ruby_xml_error.h +12 -0
- data/ext/libxml/ruby_xml_html_parser.c +89 -0
- data/ext/libxml/ruby_xml_html_parser.h +10 -0
- data/ext/libxml/ruby_xml_html_parser_context.c +337 -0
- data/ext/libxml/ruby_xml_html_parser_context.h +10 -0
- data/ext/libxml/ruby_xml_html_parser_options.c +46 -0
- data/ext/libxml/ruby_xml_html_parser_options.h +10 -0
- data/ext/libxml/ruby_xml_input_cbg.c +191 -0
- data/ext/libxml/ruby_xml_input_cbg.h +20 -0
- data/ext/libxml/ruby_xml_io.c +47 -0
- data/ext/libxml/ruby_xml_io.h +10 -0
- data/ext/libxml/ruby_xml_namespace.c +153 -0
- data/ext/libxml/ruby_xml_namespace.h +10 -0
- data/ext/libxml/ruby_xml_namespaces.c +293 -0
- data/ext/libxml/ruby_xml_namespaces.h +9 -0
- data/ext/libxml/ruby_xml_node.c +1402 -0
- data/ext/libxml/ruby_xml_node.h +13 -0
- data/ext/libxml/ruby_xml_parser.c +91 -0
- data/ext/libxml/ruby_xml_parser.h +12 -0
- data/ext/libxml/ruby_xml_parser_context.c +999 -0
- data/ext/libxml/ruby_xml_parser_context.h +10 -0
- data/ext/libxml/ruby_xml_parser_options.c +66 -0
- data/ext/libxml/ruby_xml_parser_options.h +12 -0
- data/ext/libxml/ruby_xml_reader.c +1239 -0
- data/ext/libxml/ruby_xml_reader.h +17 -0
- data/ext/libxml/ruby_xml_relaxng.c +110 -0
- data/ext/libxml/ruby_xml_relaxng.h +10 -0
- data/ext/libxml/ruby_xml_sax2_handler.c +326 -0
- data/ext/libxml/ruby_xml_sax2_handler.h +10 -0
- data/ext/libxml/ruby_xml_sax_parser.c +116 -0
- data/ext/libxml/ruby_xml_sax_parser.h +10 -0
- data/ext/libxml/ruby_xml_schema.c +278 -0
- data/ext/libxml/ruby_xml_schema.h +809 -0
- data/ext/libxml/ruby_xml_schema_attribute.c +109 -0
- data/ext/libxml/ruby_xml_schema_attribute.h +15 -0
- data/ext/libxml/ruby_xml_schema_element.c +95 -0
- data/ext/libxml/ruby_xml_schema_element.h +14 -0
- data/ext/libxml/ruby_xml_schema_facet.c +52 -0
- data/ext/libxml/ruby_xml_schema_facet.h +13 -0
- data/ext/libxml/ruby_xml_schema_type.c +232 -0
- data/ext/libxml/ruby_xml_schema_type.h +9 -0
- data/ext/libxml/ruby_xml_version.h +9 -0
- data/ext/libxml/ruby_xml_writer.c +1133 -0
- data/ext/libxml/ruby_xml_writer.h +10 -0
- data/ext/libxml/ruby_xml_xinclude.c +16 -0
- data/ext/libxml/ruby_xml_xinclude.h +11 -0
- data/ext/libxml/ruby_xml_xpath.c +194 -0
- data/ext/libxml/ruby_xml_xpath.h +13 -0
- data/ext/libxml/ruby_xml_xpath_context.c +360 -0
- data/ext/libxml/ruby_xml_xpath_context.h +9 -0
- data/ext/libxml/ruby_xml_xpath_expression.c +81 -0
- data/ext/libxml/ruby_xml_xpath_expression.h +10 -0
- data/ext/libxml/ruby_xml_xpath_object.c +338 -0
- data/ext/libxml/ruby_xml_xpath_object.h +17 -0
- data/ext/libxml/ruby_xml_xpointer.c +99 -0
- data/ext/libxml/ruby_xml_xpointer.h +11 -0
- data/ext/vc/libxml_ruby.sln +28 -0
- data/lib/3.1/libxml_ruby.so +0 -0
- data/lib/libxml/attr.rb +123 -0
- data/lib/libxml/attr_decl.rb +80 -0
- data/lib/libxml/attributes.rb +14 -0
- data/lib/libxml/document.rb +194 -0
- data/lib/libxml/error.rb +95 -0
- data/lib/libxml/hpricot.rb +78 -0
- data/lib/libxml/html_parser.rb +96 -0
- data/lib/libxml/namespace.rb +62 -0
- data/lib/libxml/namespaces.rb +38 -0
- data/lib/libxml/node.rb +323 -0
- data/lib/libxml/parser.rb +101 -0
- data/lib/libxml/sax_callbacks.rb +180 -0
- data/lib/libxml/sax_parser.rb +41 -0
- data/lib/libxml/schema/attribute.rb +19 -0
- data/lib/libxml/schema/element.rb +19 -0
- data/lib/libxml/schema/type.rb +21 -0
- data/lib/libxml/schema.rb +48 -0
- data/lib/libxml/tree.rb +29 -0
- data/lib/libxml-ruby.rb +30 -0
- data/lib/libxml.rb +5 -0
- data/lib/xml/libxml.rb +10 -0
- data/lib/xml.rb +14 -0
- data/libxml-ruby.gemspec +48 -0
- data/script/benchmark/depixelate +634 -0
- data/script/benchmark/hamlet.xml +9055 -0
- data/script/benchmark/parsecount +170 -0
- data/script/benchmark/sock_entries.xml +507 -0
- data/script/benchmark/throughput +41 -0
- data/script/test +6 -0
- data/setup.rb +1584 -0
- data/test/c14n/given/doc.dtd +1 -0
- data/test/c14n/given/example-1.xml +14 -0
- data/test/c14n/given/example-2.xml +11 -0
- data/test/c14n/given/example-3.xml +18 -0
- data/test/c14n/given/example-4.xml +9 -0
- data/test/c14n/given/example-5.xml +12 -0
- data/test/c14n/given/example-6.xml +2 -0
- data/test/c14n/given/example-7.xml +11 -0
- data/test/c14n/given/example-8.xml +11 -0
- data/test/c14n/given/example-8.xpath +10 -0
- data/test/c14n/given/world.txt +1 -0
- data/test/c14n/result/1-1-without-comments/example-1 +4 -0
- data/test/c14n/result/1-1-without-comments/example-2 +11 -0
- data/test/c14n/result/1-1-without-comments/example-3 +14 -0
- data/test/c14n/result/1-1-without-comments/example-4 +9 -0
- data/test/c14n/result/1-1-without-comments/example-5 +3 -0
- data/test/c14n/result/1-1-without-comments/example-6 +1 -0
- data/test/c14n/result/1-1-without-comments/example-7 +1 -0
- data/test/c14n/result/1-1-without-comments/example-8 +1 -0
- data/test/c14n/result/with-comments/example-1 +6 -0
- data/test/c14n/result/with-comments/example-2 +11 -0
- data/test/c14n/result/with-comments/example-3 +14 -0
- data/test/c14n/result/with-comments/example-4 +9 -0
- data/test/c14n/result/with-comments/example-5 +4 -0
- data/test/c14n/result/with-comments/example-6 +1 -0
- data/test/c14n/result/with-comments/example-7 +1 -0
- data/test/c14n/result/without-comments/example-1 +4 -0
- data/test/c14n/result/without-comments/example-2 +11 -0
- data/test/c14n/result/without-comments/example-3 +14 -0
- data/test/c14n/result/without-comments/example-4 +9 -0
- data/test/c14n/result/without-comments/example-5 +3 -0
- data/test/c14n/result/without-comments/example-6 +1 -0
- data/test/c14n/result/without-comments/example-7 +1 -0
- data/test/model/atom.xml +13 -0
- data/test/model/bands.iso-8859-1.xml +5 -0
- data/test/model/bands.utf-8.xml +5 -0
- data/test/model/bands.xml +5 -0
- data/test/model/books.xml +154 -0
- data/test/model/cwm_1_0.xml +11336 -0
- data/test/model/merge_bug_data.xml +58 -0
- data/test/model/ruby-lang.html +238 -0
- data/test/model/rubynet.xml +79 -0
- data/test/model/rubynet_project +1 -0
- data/test/model/shiporder.rnc +28 -0
- data/test/model/shiporder.rng +86 -0
- data/test/model/shiporder.xml +23 -0
- data/test/model/shiporder.xsd +40 -0
- data/test/model/soap.xml +27 -0
- data/test/model/xinclude.xml +5 -0
- data/test/test_attr.rb +181 -0
- data/test/test_attr_decl.rb +132 -0
- data/test/test_attributes.rb +136 -0
- data/test/test_canonicalize.rb +120 -0
- data/test/test_deprecated_require.rb +12 -0
- data/test/test_document.rb +132 -0
- data/test/test_document_write.rb +146 -0
- data/test/test_dtd.rb +129 -0
- data/test/test_encoding.rb +129 -0
- data/test/test_encoding_sax.rb +115 -0
- data/test/test_error.rb +178 -0
- data/test/test_helper.rb +9 -0
- data/test/test_html_parser.rb +162 -0
- data/test/test_html_parser_context.rb +23 -0
- data/test/test_namespace.rb +60 -0
- data/test/test_namespaces.rb +200 -0
- data/test/test_node.rb +237 -0
- data/test/test_node_cdata.rb +50 -0
- data/test/test_node_comment.rb +32 -0
- data/test/test_node_copy.rb +40 -0
- data/test/test_node_edit.rb +158 -0
- data/test/test_node_pi.rb +37 -0
- data/test/test_node_text.rb +69 -0
- data/test/test_node_write.rb +97 -0
- data/test/test_node_xlink.rb +28 -0
- data/test/test_parser.rb +324 -0
- data/test/test_parser_context.rb +198 -0
- data/test/test_properties.rb +38 -0
- data/test/test_reader.rb +364 -0
- data/test/test_relaxng.rb +53 -0
- data/test/test_sax_parser.rb +326 -0
- data/test/test_schema.rb +168 -0
- data/test/test_suite.rb +48 -0
- data/test/test_traversal.rb +152 -0
- data/test/test_writer.rb +468 -0
- data/test/test_xinclude.rb +20 -0
- data/test/test_xml.rb +263 -0
- data/test/test_xpath.rb +244 -0
- data/test/test_xpath_context.rb +88 -0
- data/test/test_xpath_expression.rb +37 -0
- data/test/test_xpointer.rb +72 -0
- metadata +325 -0
data/test/test_xml.rb
ADDED
@@ -0,0 +1,263 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require_relative './test_helper'
|
4
|
+
require 'stringio'
|
5
|
+
|
6
|
+
class TestXml < Minitest::Test
|
7
|
+
# ----- Constants ------
|
8
|
+
def test_lib_versions
|
9
|
+
assert(LibXML::XML.check_lib_versions)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_debug_entities
|
13
|
+
original = LibXML::XML.debug_entities
|
14
|
+
|
15
|
+
LibXML::XML.debug_entities = false
|
16
|
+
refute(LibXML::XML.debug_entities)
|
17
|
+
|
18
|
+
LibXML::XML.debug_entities = true
|
19
|
+
assert(LibXML::XML.debug_entities)
|
20
|
+
|
21
|
+
LibXML::XML.debug_entities = false
|
22
|
+
refute(LibXML::XML.debug_entities)
|
23
|
+
|
24
|
+
LibXML::XML.debug_entities = original
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_default_compression
|
28
|
+
return unless LibXML::XML.default_compression
|
29
|
+
|
30
|
+
original = LibXML::XML.default_compression
|
31
|
+
|
32
|
+
0.upto(9) do |i|
|
33
|
+
LibXML::XML.default_compression = i
|
34
|
+
assert_equal(i, LibXML::XML.default_compression)
|
35
|
+
end
|
36
|
+
|
37
|
+
9.downto(0) do |i|
|
38
|
+
assert_equal(i, LibXML::XML.default_compression = i)
|
39
|
+
assert_equal(i, LibXML::XML.default_compression)
|
40
|
+
end
|
41
|
+
|
42
|
+
0.downto(-10) do |i|
|
43
|
+
assert_equal(i, LibXML::XML.default_compression = i)
|
44
|
+
assert_equal(0, LibXML::XML.default_compression)
|
45
|
+
end
|
46
|
+
|
47
|
+
10.upto(20) do |i|
|
48
|
+
assert_equal(i, LibXML::XML.default_compression = i)
|
49
|
+
assert_equal(9, LibXML::XML.default_compression)
|
50
|
+
end
|
51
|
+
|
52
|
+
LibXML::XML.default_compression = original
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_default_keep_blanks
|
56
|
+
original = LibXML::XML.default_keep_blanks
|
57
|
+
|
58
|
+
LibXML::XML.default_keep_blanks = false
|
59
|
+
refute(LibXML::XML.default_keep_blanks)
|
60
|
+
assert_equal(LibXML::XML::Parser::Options::NOBLANKS, LibXML::XML.default_options)
|
61
|
+
|
62
|
+
LibXML::XML.default_keep_blanks = true
|
63
|
+
assert(LibXML::XML.default_keep_blanks)
|
64
|
+
assert_equal(0, LibXML::XML.default_options)
|
65
|
+
|
66
|
+
LibXML::XML.default_keep_blanks = original
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_default_line_numbers
|
70
|
+
original = LibXML::XML.default_line_numbers
|
71
|
+
|
72
|
+
LibXML::XML.default_line_numbers = false
|
73
|
+
refute(LibXML::XML.default_line_numbers)
|
74
|
+
|
75
|
+
LibXML::XML.default_line_numbers = true
|
76
|
+
assert(LibXML::XML.default_line_numbers)
|
77
|
+
|
78
|
+
LibXML::XML.default_line_numbers = false
|
79
|
+
refute(LibXML::XML.default_line_numbers)
|
80
|
+
|
81
|
+
LibXML::XML.default_line_numbers = original
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_default_substitute_entities
|
85
|
+
original = LibXML::XML.default_substitute_entities
|
86
|
+
|
87
|
+
LibXML::XML.default_substitute_entities = false
|
88
|
+
refute(LibXML::XML.default_substitute_entities)
|
89
|
+
assert_equal(0, LibXML::XML.default_options)
|
90
|
+
|
91
|
+
LibXML::XML.default_substitute_entities = true
|
92
|
+
assert(LibXML::XML.default_substitute_entities)
|
93
|
+
assert_equal(LibXML::XML::Parser::Options::NOENT, LibXML::XML.default_options)
|
94
|
+
|
95
|
+
LibXML::XML.default_substitute_entities = false
|
96
|
+
refute(LibXML::XML.default_substitute_entities)
|
97
|
+
|
98
|
+
LibXML::XML.default_substitute_entities = original
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_default_tree_indent_string
|
102
|
+
original = LibXML::XML.default_tree_indent_string
|
103
|
+
|
104
|
+
s = LibXML::XML.default_tree_indent_string
|
105
|
+
assert_instance_of(String, s)
|
106
|
+
assert_equal(' ', s)
|
107
|
+
LibXML::XML.default_tree_indent_string = 'uga'
|
108
|
+
s = LibXML::XML.default_tree_indent_string
|
109
|
+
assert_instance_of(String, s)
|
110
|
+
assert_equal('uga', s)
|
111
|
+
LibXML::XML.default_tree_indent_string = ' '
|
112
|
+
s = LibXML::XML.default_tree_indent_string
|
113
|
+
assert_instance_of(String, s)
|
114
|
+
assert_equal(' ', s)
|
115
|
+
|
116
|
+
LibXML::XML.default_tree_indent_string = original
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_default_validity_checking
|
120
|
+
original = LibXML::XML.default_validity_checking
|
121
|
+
|
122
|
+
LibXML::XML.default_validity_checking = false
|
123
|
+
refute(LibXML::XML.default_validity_checking)
|
124
|
+
assert_equal(0, LibXML::XML.default_options)
|
125
|
+
|
126
|
+
LibXML::XML.default_validity_checking = true
|
127
|
+
assert(LibXML::XML.default_validity_checking)
|
128
|
+
assert_equal(LibXML::XML::Parser::Options::DTDVALID, LibXML::XML.default_options)
|
129
|
+
|
130
|
+
LibXML::XML.default_validity_checking = false
|
131
|
+
refute(LibXML::XML.default_validity_checking)
|
132
|
+
|
133
|
+
LibXML::XML.default_validity_checking = original
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_default_warnings
|
137
|
+
original = LibXML::XML.default_warnings
|
138
|
+
|
139
|
+
LibXML::XML.default_warnings = false
|
140
|
+
refute(LibXML::XML.default_warnings)
|
141
|
+
assert_equal(LibXML::XML::Parser::Options::NOWARNING, LibXML::XML.default_options)
|
142
|
+
|
143
|
+
LibXML::XML.default_warnings = true
|
144
|
+
assert(LibXML::XML.default_warnings)
|
145
|
+
assert_equal(0, LibXML::XML.default_options)
|
146
|
+
|
147
|
+
LibXML::XML.default_warnings = false
|
148
|
+
refute(LibXML::XML.default_warnings)
|
149
|
+
|
150
|
+
LibXML::XML.default_warnings = original
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_enabled_automata
|
154
|
+
assert(LibXML::XML.enabled_automata?)
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_enabled_c14n
|
158
|
+
assert(LibXML::XML.enabled_c14n?)
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_enabled_catalog
|
162
|
+
assert(LibXML::XML.enabled_catalog?)
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_enabled_debug
|
166
|
+
assert(LibXML::XML.enabled_debug?)
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_enabled_docbook
|
170
|
+
assert(LibXML::XML.enabled_docbook?)
|
171
|
+
end
|
172
|
+
|
173
|
+
def test_enabled_ftp
|
174
|
+
assert(LibXML::XML.enabled_ftp?)
|
175
|
+
end
|
176
|
+
|
177
|
+
def test_enabled_http
|
178
|
+
assert(LibXML::XML.enabled_http?)
|
179
|
+
end
|
180
|
+
|
181
|
+
def test_enabled_html
|
182
|
+
assert(LibXML::XML.enabled_html?)
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_enabled_iconv
|
186
|
+
iconv_enabled = RUBY_PLATFORM !~ /darwin/
|
187
|
+
assert_equal(iconv_enabled, LibXML::XML.enabled_iconv?)
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_enabled_memory_debug
|
191
|
+
assert_equal(false, LibXML::XML.enabled_memory_debug?)
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_enabled_regexp
|
195
|
+
assert(LibXML::XML.enabled_regexp?)
|
196
|
+
end
|
197
|
+
|
198
|
+
def test_enabled_schemas
|
199
|
+
assert(LibXML::XML.enabled_schemas?)
|
200
|
+
end
|
201
|
+
|
202
|
+
def test_enabled_thread
|
203
|
+
assert(LibXML::XML.enabled_thread?)
|
204
|
+
end
|
205
|
+
|
206
|
+
def test_enabled_unicode
|
207
|
+
assert(LibXML::XML.enabled_unicode?)
|
208
|
+
end
|
209
|
+
|
210
|
+
def test_enabled_xinclude
|
211
|
+
assert(LibXML::XML.enabled_xinclude?)
|
212
|
+
end
|
213
|
+
|
214
|
+
def test_enabled_xpath
|
215
|
+
assert(LibXML::XML.enabled_xpath?)
|
216
|
+
end
|
217
|
+
|
218
|
+
def test_enabled_xpointer
|
219
|
+
assert(LibXML::XML.enabled_xpointer?)
|
220
|
+
end
|
221
|
+
|
222
|
+
def test_enabled_zlib
|
223
|
+
assert(LibXML::XML.enabled_zlib?.is_a?(TrueClass) || LibXML::XML.enabled_zlib?.is_a?(FalseClass))
|
224
|
+
end
|
225
|
+
|
226
|
+
def test_intent_tree_output
|
227
|
+
assert(TrueClass, LibXML::XML.indent_tree_output)
|
228
|
+
|
229
|
+
LibXML::XML.indent_tree_output = false
|
230
|
+
assert(FalseClass, LibXML::XML.indent_tree_output)
|
231
|
+
|
232
|
+
LibXML::XML.indent_tree_output = true
|
233
|
+
assert(TrueClass, LibXML::XML.indent_tree_output)
|
234
|
+
end
|
235
|
+
|
236
|
+
def test_version
|
237
|
+
assert_instance_of(String, LibXML::XML::VERSION)
|
238
|
+
end
|
239
|
+
|
240
|
+
def test_vernum
|
241
|
+
assert_instance_of(Integer, LibXML::XML::VERNUM)
|
242
|
+
end
|
243
|
+
|
244
|
+
def test_libxml_parser_features
|
245
|
+
assert_instance_of(Array, LibXML::XML.features)
|
246
|
+
end
|
247
|
+
|
248
|
+
def test_default_options
|
249
|
+
assert_equal(0, LibXML::XML.default_options)
|
250
|
+
end
|
251
|
+
|
252
|
+
def test_default_save_no_empty_tags
|
253
|
+
original = LibXML::XML.default_save_no_empty_tags
|
254
|
+
|
255
|
+
LibXML::XML.default_save_no_empty_tags = false
|
256
|
+
refute(LibXML::XML.default_save_no_empty_tags)
|
257
|
+
|
258
|
+
LibXML::XML.default_save_no_empty_tags = true
|
259
|
+
assert(LibXML::XML.default_save_no_empty_tags)
|
260
|
+
|
261
|
+
LibXML::XML.default_save_no_empty_tags = original
|
262
|
+
end
|
263
|
+
end
|
data/test/test_xpath.rb
ADDED
@@ -0,0 +1,244 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require_relative './test_helper'
|
4
|
+
require 'tempfile'
|
5
|
+
|
6
|
+
class TestXPath < Minitest::Test
|
7
|
+
def setup
|
8
|
+
@doc = LibXML::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(LibXML::XML::XPath::Object, nodes)
|
18
|
+
assert_equal(1, nodes.length)
|
19
|
+
assert_equal(nodes.xpath_type, LibXML::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(LibXML::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 = LibXML::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
|
+
LibXML::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 = LibXML::XML::Document.file(File.join(File.dirname(__FILE__), 'model/atom.xml'))
|
109
|
+
|
110
|
+
# No namespace has been yet defined
|
111
|
+
assert_raises(LibXML::XML::Error) do
|
112
|
+
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
|
+
refute_equal(nodes.first.object_id, nodes.last.object_id)
|
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 = LibXML::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 = LibXML::XML::Document.new('1.0')
|
161
|
+
doc.root = LibXML::XML::Node.new("header")
|
162
|
+
|
163
|
+
1000.times do
|
164
|
+
doc.root << LibXML::XML::Node.new("footer")
|
165
|
+
end
|
166
|
+
|
167
|
+
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 = LibXML::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 = LibXML::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(LibXML::XML::Node::ELEMENT_NODE, node.node_type)
|
186
|
+
|
187
|
+
node = nodes[1]
|
188
|
+
assert_equal(LibXML::XML::Node::NAMESPACE_DECL, node.node_type)
|
189
|
+
|
190
|
+
node = nodes[2]
|
191
|
+
assert_equal(LibXML::XML::Node::NAMESPACE_DECL, node.node_type)
|
192
|
+
|
193
|
+
node = nodes[3]
|
194
|
+
assert_equal(LibXML::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 = LibXML::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(LibXML::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(LibXML::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
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require_relative './test_helper'
|
4
|
+
require "tempfile"
|
5
|
+
|
6
|
+
class TestXPathContext < Minitest::Test
|
7
|
+
SOAP_PREFIX = 'soap'
|
8
|
+
SOAP_URI = 'http://schemas.xmlsoap.org/soap/envelope/'
|
9
|
+
|
10
|
+
NS0_PREFIX = 'ns0'
|
11
|
+
NS0_URI = 'http://services.somewhere.com'
|
12
|
+
|
13
|
+
def setup
|
14
|
+
doc = LibXML::XML::Document.file(File.join(File.dirname(__FILE__), 'model/soap.xml'))
|
15
|
+
@context = LibXML::XML::XPath::Context.new(doc)
|
16
|
+
end
|
17
|
+
|
18
|
+
def teardown()
|
19
|
+
@context = nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_no_ns
|
23
|
+
error = assert_raises(LibXML::XML::Error) do
|
24
|
+
@context.find('/soap:Envelope')
|
25
|
+
end
|
26
|
+
assert_equal("Error: Undefined namespace prefix.", error.to_s)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_ns_register
|
30
|
+
@context.register_namespace(SOAP_PREFIX, SOAP_URI)
|
31
|
+
@context.register_namespace(NS0_PREFIX, NS0_URI)
|
32
|
+
nodes = @context.find('/soap:Envelope/soap:Body/ns0:getManufacturerNamesResponse')
|
33
|
+
assert_equal(1, nodes.length)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_ns_register_string
|
37
|
+
@context.register_namespaces("#{SOAP_PREFIX}:#{SOAP_URI}")
|
38
|
+
@context.register_namespaces("#{NS0_PREFIX}:#{NS0_URI}")
|
39
|
+
nodes = @context.find('/soap:Envelope/soap:Body/ns0:getManufacturerNamesResponse')
|
40
|
+
assert_equal(1, nodes.length)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_ns_register_array
|
44
|
+
@context.register_namespaces(["#{SOAP_PREFIX}:#{SOAP_URI}", "#{NS0_PREFIX}:#{NS0_URI}"])
|
45
|
+
nodes = @context.find('/soap:Envelope/soap:Body/ns0:getManufacturerNamesResponse')
|
46
|
+
assert_equal(1, nodes.length)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_ns_register_hash
|
50
|
+
@context.register_namespaces(SOAP_PREFIX => SOAP_URI,
|
51
|
+
NS0_PREFIX => NS0_URI)
|
52
|
+
|
53
|
+
nodes = @context.find('/soap:Envelope/soap:Body/ns0:getManufacturerNamesResponse')
|
54
|
+
assert_equal(1, nodes.length)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_ns_register_node
|
58
|
+
@context.register_namespaces_from_node(@context.doc.root)
|
59
|
+
nodes = @context.find('/soap:Envelope')
|
60
|
+
assert_equal(1, nodes.length)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_node
|
64
|
+
@context.register_namespaces_from_node(@context.doc.root)
|
65
|
+
|
66
|
+
nodes = @context.find('soap:Body')
|
67
|
+
assert_equal(0, nodes.length)
|
68
|
+
|
69
|
+
|
70
|
+
@context.node = @context.doc.root.child.next
|
71
|
+
nodes = @context.find('soap:Body')
|
72
|
+
assert_equal(0, nodes.length)
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_cache
|
76
|
+
@context.enable_cache
|
77
|
+
@context.enable_cache(10)
|
78
|
+
@context.disable_cache
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_require_doc
|
82
|
+
doc = LibXML::XML::Document.file(File.join(File.dirname(__FILE__), 'model/soap.xml'))
|
83
|
+
error = assert_raises(TypeError) do
|
84
|
+
@context = LibXML::XML::XPath::Context.new(doc.root)
|
85
|
+
end
|
86
|
+
assert_equal("Supplied argument must be a document or node.", error.to_s)
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require_relative './test_helper'
|
4
|
+
|
5
|
+
|
6
|
+
class TestXPathExpression < Minitest::Test
|
7
|
+
def setup
|
8
|
+
xp = LibXML::XML::Parser.string('<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>')
|
9
|
+
@doc = xp.parse
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
@doc = nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_nodes
|
17
|
+
expr = LibXML::XML::XPath::Expression.compile('/ruby_array/fixnum')
|
18
|
+
set = @doc.find(expr)
|
19
|
+
assert_instance_of(LibXML::XML::XPath::Object, set)
|
20
|
+
assert_equal(2, set.size)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_find_class
|
24
|
+
expr = LibXML::XML::XPath::Expression.new('/ruby_array/fixnum')
|
25
|
+
set = @doc.find(expr)
|
26
|
+
assert_instance_of(LibXML::XML::XPath::Object, set)
|
27
|
+
assert_equal(2, set.size)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_find_invalid
|
31
|
+
error = assert_raises(TypeError) do
|
32
|
+
@doc.find(999)
|
33
|
+
end
|
34
|
+
assert_equal('Argument should be an instance of a String or XPath::Expression',
|
35
|
+
error.to_s)
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require_relative './test_helper'
|
3
|
+
|
4
|
+
class TC_XML_XPointer < Minitest::Test
|
5
|
+
def setup()
|
6
|
+
xp = LibXML::XML::Parser.string('<!DOCTYPE ra [<!ELEMENT ra (foo+)><!ATTLIST ra id ID #IMPLIED><!ELEMENT foo (#PCDATA)><!ATTLIST foo id ID #IMPLIED>]><ra id="start"><foo id="one">one</foo><foo id="two">two</foo><foo id="three">three</foo></ra>')
|
7
|
+
@doc = xp.parse
|
8
|
+
assert_instance_of(LibXML::XML::Document, @doc)
|
9
|
+
@root = @doc.root
|
10
|
+
assert_instance_of(LibXML::XML::Node, @root)
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown()
|
14
|
+
@doc = nil
|
15
|
+
@root = nil
|
16
|
+
@xptr = nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_libxml_xpointer_id
|
20
|
+
xptr = @root.pointer('xpointer(id("two"))')
|
21
|
+
assert_instance_of(LibXML::XML::XPath::Object, xptr)
|
22
|
+
xptr.each do |node|
|
23
|
+
# It seems from the spec that the pointer should
|
24
|
+
# be the whole node, rather than just the ID attr.
|
25
|
+
assert_equal('two', node.content)
|
26
|
+
assert_instance_of(LibXML::XML::Node, node)
|
27
|
+
assert_equal('two', node['id'])
|
28
|
+
end
|
29
|
+
|
30
|
+
# FIXME: Not sure at all about this kind of range
|
31
|
+
if ENV['NOTWORKING']
|
32
|
+
@xptr = @root.pointer('xpointer(id("two")) xpointer(id("three"))')
|
33
|
+
assert_instance_of(LibXML::XML::XPath, @xptr)
|
34
|
+
assert_instance_of(LibXML::XML::Node::Set, @xptr.set)
|
35
|
+
assert_equal(2, @xptr.set.length)
|
36
|
+
for n in @xptr.set
|
37
|
+
assert_match(/two|three/, n.to_s)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# FIXME: There is a bug in these ranges...
|
43
|
+
if ENV['NOTWORKING']
|
44
|
+
def test_libxml_xpointer_range()
|
45
|
+
nstart = nend = nil
|
46
|
+
@xptr = @root.pointer('xpointer(id("one"))').set
|
47
|
+
@xptr.each{|n| nstart = n}
|
48
|
+
assert_instance_of(LibXML::XML::Node, nstart)
|
49
|
+
@xptr = @root.pointer('xpointer(id("three"))').set
|
50
|
+
@xptr.each{|n| nend = n}
|
51
|
+
assert_instance_of(LibXML::XML::Node, nend)
|
52
|
+
range = LibXML::XML::XPointer.range(nstart, nend)
|
53
|
+
assert_instance_of(LibXML::XML::XPath, range)
|
54
|
+
assert_instance_of(LibXML::XML::Node::Set, range.set)
|
55
|
+
|
56
|
+
for n in range.set
|
57
|
+
assert_match(/one|two|three/, n.to_s)
|
58
|
+
end
|
59
|
+
assert_equal(3, range.set.length)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# def test_libxml_xpointer_start_point()
|
64
|
+
# @xptr = @root.pointer('xpointer(start-point("one"))')
|
65
|
+
# assert_instance_of(LibXML::XML::XPath, @xptr)
|
66
|
+
# set = @xptr.set
|
67
|
+
# assert_instance_of(LibXML::XML::Node::Set, set)
|
68
|
+
# for n in set
|
69
|
+
# assert_match(/one|two|three/, n.to_s)
|
70
|
+
# end
|
71
|
+
# end
|
72
|
+
end
|