libxml-ruby 3.2.2-x64-mingw-ucrt

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. checksums.yaml +7 -0
  2. data/HISTORY +848 -0
  3. data/LICENSE +21 -0
  4. data/MANIFEST +166 -0
  5. data/README.rdoc +217 -0
  6. data/Rakefile +99 -0
  7. data/ext/libxml/extconf.rb +61 -0
  8. data/ext/libxml/libxml.c +80 -0
  9. data/ext/libxml/libxml_ruby.def +35 -0
  10. data/ext/libxml/ruby_libxml.h +67 -0
  11. data/ext/libxml/ruby_xml.c +933 -0
  12. data/ext/libxml/ruby_xml.h +10 -0
  13. data/ext/libxml/ruby_xml_attr.c +333 -0
  14. data/ext/libxml/ruby_xml_attr.h +12 -0
  15. data/ext/libxml/ruby_xml_attr_decl.c +153 -0
  16. data/ext/libxml/ruby_xml_attr_decl.h +11 -0
  17. data/ext/libxml/ruby_xml_attributes.c +275 -0
  18. data/ext/libxml/ruby_xml_attributes.h +15 -0
  19. data/ext/libxml/ruby_xml_cbg.c +85 -0
  20. data/ext/libxml/ruby_xml_document.c +1123 -0
  21. data/ext/libxml/ruby_xml_document.h +11 -0
  22. data/ext/libxml/ruby_xml_dtd.c +248 -0
  23. data/ext/libxml/ruby_xml_dtd.h +9 -0
  24. data/ext/libxml/ruby_xml_encoding.c +250 -0
  25. data/ext/libxml/ruby_xml_encoding.h +16 -0
  26. data/ext/libxml/ruby_xml_error.c +996 -0
  27. data/ext/libxml/ruby_xml_error.h +12 -0
  28. data/ext/libxml/ruby_xml_html_parser.c +89 -0
  29. data/ext/libxml/ruby_xml_html_parser.h +10 -0
  30. data/ext/libxml/ruby_xml_html_parser_context.c +337 -0
  31. data/ext/libxml/ruby_xml_html_parser_context.h +10 -0
  32. data/ext/libxml/ruby_xml_html_parser_options.c +46 -0
  33. data/ext/libxml/ruby_xml_html_parser_options.h +10 -0
  34. data/ext/libxml/ruby_xml_input_cbg.c +191 -0
  35. data/ext/libxml/ruby_xml_input_cbg.h +20 -0
  36. data/ext/libxml/ruby_xml_io.c +47 -0
  37. data/ext/libxml/ruby_xml_io.h +10 -0
  38. data/ext/libxml/ruby_xml_namespace.c +153 -0
  39. data/ext/libxml/ruby_xml_namespace.h +10 -0
  40. data/ext/libxml/ruby_xml_namespaces.c +293 -0
  41. data/ext/libxml/ruby_xml_namespaces.h +9 -0
  42. data/ext/libxml/ruby_xml_node.c +1402 -0
  43. data/ext/libxml/ruby_xml_node.h +13 -0
  44. data/ext/libxml/ruby_xml_parser.c +91 -0
  45. data/ext/libxml/ruby_xml_parser.h +12 -0
  46. data/ext/libxml/ruby_xml_parser_context.c +999 -0
  47. data/ext/libxml/ruby_xml_parser_context.h +10 -0
  48. data/ext/libxml/ruby_xml_parser_options.c +66 -0
  49. data/ext/libxml/ruby_xml_parser_options.h +12 -0
  50. data/ext/libxml/ruby_xml_reader.c +1239 -0
  51. data/ext/libxml/ruby_xml_reader.h +17 -0
  52. data/ext/libxml/ruby_xml_relaxng.c +110 -0
  53. data/ext/libxml/ruby_xml_relaxng.h +10 -0
  54. data/ext/libxml/ruby_xml_sax2_handler.c +326 -0
  55. data/ext/libxml/ruby_xml_sax2_handler.h +10 -0
  56. data/ext/libxml/ruby_xml_sax_parser.c +116 -0
  57. data/ext/libxml/ruby_xml_sax_parser.h +10 -0
  58. data/ext/libxml/ruby_xml_schema.c +278 -0
  59. data/ext/libxml/ruby_xml_schema.h +809 -0
  60. data/ext/libxml/ruby_xml_schema_attribute.c +109 -0
  61. data/ext/libxml/ruby_xml_schema_attribute.h +15 -0
  62. data/ext/libxml/ruby_xml_schema_element.c +95 -0
  63. data/ext/libxml/ruby_xml_schema_element.h +14 -0
  64. data/ext/libxml/ruby_xml_schema_facet.c +52 -0
  65. data/ext/libxml/ruby_xml_schema_facet.h +13 -0
  66. data/ext/libxml/ruby_xml_schema_type.c +232 -0
  67. data/ext/libxml/ruby_xml_schema_type.h +9 -0
  68. data/ext/libxml/ruby_xml_version.h +9 -0
  69. data/ext/libxml/ruby_xml_writer.c +1133 -0
  70. data/ext/libxml/ruby_xml_writer.h +10 -0
  71. data/ext/libxml/ruby_xml_xinclude.c +16 -0
  72. data/ext/libxml/ruby_xml_xinclude.h +11 -0
  73. data/ext/libxml/ruby_xml_xpath.c +194 -0
  74. data/ext/libxml/ruby_xml_xpath.h +13 -0
  75. data/ext/libxml/ruby_xml_xpath_context.c +360 -0
  76. data/ext/libxml/ruby_xml_xpath_context.h +9 -0
  77. data/ext/libxml/ruby_xml_xpath_expression.c +81 -0
  78. data/ext/libxml/ruby_xml_xpath_expression.h +10 -0
  79. data/ext/libxml/ruby_xml_xpath_object.c +338 -0
  80. data/ext/libxml/ruby_xml_xpath_object.h +17 -0
  81. data/ext/libxml/ruby_xml_xpointer.c +99 -0
  82. data/ext/libxml/ruby_xml_xpointer.h +11 -0
  83. data/ext/vc/libxml_ruby.sln +28 -0
  84. data/lib/3.1/libxml_ruby.so +0 -0
  85. data/lib/libxml/attr.rb +123 -0
  86. data/lib/libxml/attr_decl.rb +80 -0
  87. data/lib/libxml/attributes.rb +14 -0
  88. data/lib/libxml/document.rb +194 -0
  89. data/lib/libxml/error.rb +95 -0
  90. data/lib/libxml/hpricot.rb +78 -0
  91. data/lib/libxml/html_parser.rb +96 -0
  92. data/lib/libxml/namespace.rb +62 -0
  93. data/lib/libxml/namespaces.rb +38 -0
  94. data/lib/libxml/node.rb +323 -0
  95. data/lib/libxml/parser.rb +101 -0
  96. data/lib/libxml/sax_callbacks.rb +180 -0
  97. data/lib/libxml/sax_parser.rb +41 -0
  98. data/lib/libxml/schema/attribute.rb +19 -0
  99. data/lib/libxml/schema/element.rb +19 -0
  100. data/lib/libxml/schema/type.rb +21 -0
  101. data/lib/libxml/schema.rb +48 -0
  102. data/lib/libxml/tree.rb +29 -0
  103. data/lib/libxml-ruby.rb +30 -0
  104. data/lib/libxml.rb +5 -0
  105. data/lib/xml/libxml.rb +10 -0
  106. data/lib/xml.rb +14 -0
  107. data/libxml-ruby.gemspec +48 -0
  108. data/script/benchmark/depixelate +634 -0
  109. data/script/benchmark/hamlet.xml +9055 -0
  110. data/script/benchmark/parsecount +170 -0
  111. data/script/benchmark/sock_entries.xml +507 -0
  112. data/script/benchmark/throughput +41 -0
  113. data/script/test +6 -0
  114. data/setup.rb +1584 -0
  115. data/test/c14n/given/doc.dtd +1 -0
  116. data/test/c14n/given/example-1.xml +14 -0
  117. data/test/c14n/given/example-2.xml +11 -0
  118. data/test/c14n/given/example-3.xml +18 -0
  119. data/test/c14n/given/example-4.xml +9 -0
  120. data/test/c14n/given/example-5.xml +12 -0
  121. data/test/c14n/given/example-6.xml +2 -0
  122. data/test/c14n/given/example-7.xml +11 -0
  123. data/test/c14n/given/example-8.xml +11 -0
  124. data/test/c14n/given/example-8.xpath +10 -0
  125. data/test/c14n/given/world.txt +1 -0
  126. data/test/c14n/result/1-1-without-comments/example-1 +4 -0
  127. data/test/c14n/result/1-1-without-comments/example-2 +11 -0
  128. data/test/c14n/result/1-1-without-comments/example-3 +14 -0
  129. data/test/c14n/result/1-1-without-comments/example-4 +9 -0
  130. data/test/c14n/result/1-1-without-comments/example-5 +3 -0
  131. data/test/c14n/result/1-1-without-comments/example-6 +1 -0
  132. data/test/c14n/result/1-1-without-comments/example-7 +1 -0
  133. data/test/c14n/result/1-1-without-comments/example-8 +1 -0
  134. data/test/c14n/result/with-comments/example-1 +6 -0
  135. data/test/c14n/result/with-comments/example-2 +11 -0
  136. data/test/c14n/result/with-comments/example-3 +14 -0
  137. data/test/c14n/result/with-comments/example-4 +9 -0
  138. data/test/c14n/result/with-comments/example-5 +4 -0
  139. data/test/c14n/result/with-comments/example-6 +1 -0
  140. data/test/c14n/result/with-comments/example-7 +1 -0
  141. data/test/c14n/result/without-comments/example-1 +4 -0
  142. data/test/c14n/result/without-comments/example-2 +11 -0
  143. data/test/c14n/result/without-comments/example-3 +14 -0
  144. data/test/c14n/result/without-comments/example-4 +9 -0
  145. data/test/c14n/result/without-comments/example-5 +3 -0
  146. data/test/c14n/result/without-comments/example-6 +1 -0
  147. data/test/c14n/result/without-comments/example-7 +1 -0
  148. data/test/model/atom.xml +13 -0
  149. data/test/model/bands.iso-8859-1.xml +5 -0
  150. data/test/model/bands.utf-8.xml +5 -0
  151. data/test/model/bands.xml +5 -0
  152. data/test/model/books.xml +154 -0
  153. data/test/model/cwm_1_0.xml +11336 -0
  154. data/test/model/merge_bug_data.xml +58 -0
  155. data/test/model/ruby-lang.html +238 -0
  156. data/test/model/rubynet.xml +79 -0
  157. data/test/model/rubynet_project +1 -0
  158. data/test/model/shiporder.rnc +28 -0
  159. data/test/model/shiporder.rng +86 -0
  160. data/test/model/shiporder.xml +23 -0
  161. data/test/model/shiporder.xsd +40 -0
  162. data/test/model/soap.xml +27 -0
  163. data/test/model/xinclude.xml +5 -0
  164. data/test/test_attr.rb +181 -0
  165. data/test/test_attr_decl.rb +132 -0
  166. data/test/test_attributes.rb +136 -0
  167. data/test/test_canonicalize.rb +120 -0
  168. data/test/test_deprecated_require.rb +12 -0
  169. data/test/test_document.rb +132 -0
  170. data/test/test_document_write.rb +146 -0
  171. data/test/test_dtd.rb +129 -0
  172. data/test/test_encoding.rb +129 -0
  173. data/test/test_encoding_sax.rb +115 -0
  174. data/test/test_error.rb +178 -0
  175. data/test/test_helper.rb +9 -0
  176. data/test/test_html_parser.rb +162 -0
  177. data/test/test_html_parser_context.rb +23 -0
  178. data/test/test_namespace.rb +60 -0
  179. data/test/test_namespaces.rb +200 -0
  180. data/test/test_node.rb +237 -0
  181. data/test/test_node_cdata.rb +50 -0
  182. data/test/test_node_comment.rb +32 -0
  183. data/test/test_node_copy.rb +40 -0
  184. data/test/test_node_edit.rb +158 -0
  185. data/test/test_node_pi.rb +37 -0
  186. data/test/test_node_text.rb +69 -0
  187. data/test/test_node_write.rb +97 -0
  188. data/test/test_node_xlink.rb +28 -0
  189. data/test/test_parser.rb +324 -0
  190. data/test/test_parser_context.rb +198 -0
  191. data/test/test_properties.rb +38 -0
  192. data/test/test_reader.rb +364 -0
  193. data/test/test_relaxng.rb +53 -0
  194. data/test/test_sax_parser.rb +326 -0
  195. data/test/test_schema.rb +168 -0
  196. data/test/test_suite.rb +48 -0
  197. data/test/test_traversal.rb +152 -0
  198. data/test/test_writer.rb +468 -0
  199. data/test/test_xinclude.rb +20 -0
  200. data/test/test_xml.rb +263 -0
  201. data/test/test_xpath.rb +244 -0
  202. data/test/test_xpath_context.rb +88 -0
  203. data/test/test_xpath_expression.rb +37 -0
  204. data/test/test_xpointer.rb +72 -0
  205. metadata +325 -0
@@ -0,0 +1,326 @@
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+ require 'stringio'
5
+
6
+ class DocTypeCallback
7
+ include LibXML::XML::SaxParser::Callbacks
8
+ def on_start_element(element, attributes)
9
+ end
10
+ end
11
+
12
+ class TestCaseCallbacks
13
+ include LibXML::XML::SaxParser::Callbacks
14
+
15
+ attr_accessor :result
16
+
17
+ def initialize
18
+ @result = Array.new
19
+ end
20
+
21
+ def on_cdata_block(cdata)
22
+ @result << "cdata: #{cdata}"
23
+ end
24
+
25
+ def on_characters(chars)
26
+ @result << "characters: #{chars}"
27
+ end
28
+
29
+ def on_comment(text)
30
+ @result << "comment: #{text}"
31
+ end
32
+
33
+ def on_end_document
34
+ @result << "end_document"
35
+ end
36
+
37
+ def on_end_element(name)
38
+ @result << "end_element: #{name}"
39
+ end
40
+
41
+ def on_end_element_ns(name, prefix, uri)
42
+ @result << "end_element_ns #{name}, prefix: #{prefix}, uri: #{uri}"
43
+ end
44
+
45
+ # Called for parser errors.
46
+ def on_error(error)
47
+ @result << "error: #{error}"
48
+ end
49
+
50
+ def on_processing_instruction(target, data)
51
+ @result << "pi: #{target} #{data}"
52
+ end
53
+
54
+ def on_start_document
55
+ @result << "startdoc"
56
+ end
57
+
58
+ def on_start_element(name, attributes)
59
+ attributes ||= Hash.new
60
+ @result << "start_element: #{name}, attr: #{attributes.inspect}"
61
+ end
62
+
63
+ def on_start_element_ns(name, attributes, prefix, uri, namespaces)
64
+ attributes ||= Hash.new
65
+ namespaces ||= Hash.new
66
+ @result << "start_element_ns: #{name}, attr: #{attributes.inspect}, prefix: #{prefix}, uri: #{uri}, ns: #{namespaces.inspect}"
67
+ end
68
+ end
69
+
70
+ class TestSaxParser < Minitest::Test
71
+ def saxtest_file
72
+ File.join(File.dirname(__FILE__), 'model/atom.xml')
73
+ end
74
+
75
+ def verify(parser)
76
+ result = parser.callbacks.result
77
+
78
+ i = -1
79
+ assert_equal("startdoc", result[i+=1])
80
+ assert_equal("pi: xml-stylesheet type=\"text/xsl\" href=\"my_stylesheet.xsl\"", result[i+=1])
81
+ assert_equal("start_element: feed, attr: {}", result[i+=1])
82
+ assert_equal("start_element_ns: feed, attr: {}, prefix: , uri: http://www.w3.org/2005/Atom, ns: {nil=>\"http://www.w3.org/2005/Atom\"}", result[i+=1])
83
+ assert_equal("characters: \n ", result[i+=1])
84
+ assert_equal("comment: Not a valid atom entry ", result[i+=1])
85
+ assert_equal("characters: \n ", result[i+=1])
86
+ assert_equal("start_element: entry, attr: {}", result[i+=1])
87
+ assert_equal("start_element_ns: entry, attr: {}, prefix: , uri: http://www.w3.org/2005/Atom, ns: {}", result[i+=1])
88
+ assert_equal("characters: \n ", result[i+=1])
89
+ assert_equal("start_element: title, attr: {\"type\"=>\"html\"}", result[i+=1])
90
+ assert_equal("start_element_ns: title, attr: {\"type\"=>\"html\"}, prefix: , uri: http://www.w3.org/2005/Atom, ns: {}", result[i+=1])
91
+ assert_equal("cdata: <<strong>>", result[i+=1])
92
+ assert_equal("end_element: title", result[i+=1])
93
+ assert_equal("end_element_ns title, prefix: , uri: http://www.w3.org/2005/Atom", result[i+=1])
94
+ assert_equal("characters: \n ", result[i+=1])
95
+ assert_equal("start_element: content, attr: {\"type\"=>\"xhtml\"}", result[i+=1])
96
+ assert_equal("start_element_ns: content, attr: {\"type\"=>\"xhtml\"}, prefix: , uri: http://www.w3.org/2005/Atom, ns: {}", result[i+=1])
97
+ assert_equal("characters: \n ", result[i+=1])
98
+ assert_equal("start_element: xhtml:div, attr: {}", result[i+=1])
99
+ assert_equal("start_element_ns: div, attr: {}, prefix: xhtml, uri: http://www.w3.org/1999/xhtml, ns: {\"xhtml\"=>\"http://www.w3.org/1999/xhtml\"}", result[i+=1])
100
+ assert_equal("characters: \n ", result[i+=1])
101
+ assert_equal("start_element: xhtml:p, attr: {}", result[i+=1])
102
+ assert_equal("start_element_ns: p, attr: {}, prefix: xhtml, uri: http://www.w3.org/1999/xhtml, ns: {}", result[i+=1])
103
+ assert_equal("characters: hi there", result[i+=1])
104
+ assert_equal("end_element: xhtml:p", result[i+=1])
105
+ assert_equal("end_element_ns p, prefix: xhtml, uri: http://www.w3.org/1999/xhtml", result[i+=1])
106
+ assert_equal("characters: \n ", result[i+=1])
107
+ assert_equal("end_element: xhtml:div", result[i+=1])
108
+ assert_equal("end_element_ns div, prefix: xhtml, uri: http://www.w3.org/1999/xhtml", result[i+=1])
109
+ assert_equal("characters: \n ", result[i+=1])
110
+ assert_equal("end_element: content", result[i+=1])
111
+ assert_equal("end_element_ns content, prefix: , uri: http://www.w3.org/2005/Atom", result[i+=1])
112
+ assert_equal("characters: \n ", result[i+=1])
113
+ assert_equal("end_element: entry", result[i+=1])
114
+ assert_equal("end_element_ns entry, prefix: , uri: http://www.w3.org/2005/Atom", result[i+=1])
115
+ assert_equal("characters: \n", result[i+=1])
116
+ assert_equal("end_element: feed", result[i+=1])
117
+ assert_equal("end_element_ns feed, prefix: , uri: http://www.w3.org/2005/Atom", result[i+=1])
118
+ assert_equal("end_document", result[i+=1])
119
+ end
120
+
121
+ def test_file
122
+ parser = LibXML::XML::SaxParser.file(saxtest_file)
123
+ parser.callbacks = TestCaseCallbacks.new
124
+ parser.parse
125
+ verify(parser)
126
+ end
127
+
128
+ def test_file_no_callbacks
129
+ parser = LibXML::XML::SaxParser.file(saxtest_file)
130
+ assert_equal true, parser.parse
131
+ end
132
+
133
+ def test_noexistent_file
134
+ error = assert_raises(LibXML::XML::Error) do
135
+ LibXML::XML::SaxParser.file('i_dont_exist.xml')
136
+ end
137
+
138
+ assert_equal('Warning: failed to load external entity "i_dont_exist.xml".', error.to_s)
139
+ end
140
+
141
+ def test_nil_file
142
+ error = assert_raises(TypeError) do
143
+ LibXML::XML::SaxParser.file(nil)
144
+ end
145
+
146
+ assert_match(/nil into String/, error.to_s)
147
+ end
148
+
149
+ def test_io
150
+ File.open(saxtest_file) do |file|
151
+ parser = LibXML::XML::SaxParser.io(file)
152
+ parser.callbacks = TestCaseCallbacks.new
153
+ parser.parse
154
+ verify(parser)
155
+ end
156
+ end
157
+
158
+ def test_nil_io
159
+ error = assert_raises(TypeError) do
160
+ LibXML::XML::HTMLParser.io(nil)
161
+ end
162
+
163
+ assert_equal("Must pass in an IO object", error.to_s)
164
+ end
165
+
166
+ def test_string_no_callbacks
167
+ xml = File.read(saxtest_file)
168
+ parser = LibXML::XML::SaxParser.string(xml)
169
+ assert_equal true, parser.parse
170
+ end
171
+
172
+ def test_string
173
+ xml = File.read(saxtest_file)
174
+ parser = LibXML::XML::SaxParser.string(xml)
175
+ parser.callbacks = TestCaseCallbacks.new
176
+ parser.parse
177
+ verify(parser)
178
+ end
179
+
180
+ def test_string_io
181
+ xml = File.read(saxtest_file)
182
+ io = StringIO.new(xml)
183
+ parser = LibXML::XML::SaxParser.io(io)
184
+
185
+ parser.callbacks = TestCaseCallbacks.new
186
+ parser.parse
187
+ verify(parser)
188
+ end
189
+
190
+ def test_nil_string
191
+ error = assert_raises(TypeError) do
192
+ LibXML::XML::SaxParser.string(nil)
193
+ end
194
+
195
+ assert_equal("wrong argument type nil (expected String)", error.to_s)
196
+ end
197
+
198
+ def test_doctype
199
+ xml = <<-EOS
200
+ <?xml version="1.0" encoding="UTF-8"?>
201
+ <!DOCTYPE Results SYSTEM "results.dtd">
202
+ <Results>
203
+ <a>a1</a>
204
+ </Results>
205
+ EOS
206
+ parser = LibXML::XML::SaxParser.string(xml)
207
+ parser.callbacks = DocTypeCallback.new
208
+ doc = parser.parse
209
+ refute_nil(doc)
210
+ end
211
+
212
+ def test_parse_warning
213
+ # Two xml PIs is a warning
214
+ xml = <<-EOS
215
+ <?xml version="1.0" encoding="utf-8"?>
216
+ <?xml-invalid?>
217
+ <Test/>
218
+ EOS
219
+
220
+ parser = LibXML::XML::SaxParser.string(xml)
221
+ parser.callbacks = TestCaseCallbacks.new
222
+
223
+ parser.parse
224
+
225
+ # Check callbacks
226
+ result = parser.callbacks.result
227
+ i = -1
228
+ assert_equal("startdoc", result[i+=1])
229
+ assert_equal("error: Warning: xmlParsePITarget: invalid name prefix 'xml' at :2.", result[i+=1])
230
+ assert_equal("pi: xml-invalid ", result[i+=1])
231
+ assert_equal("start_element: Test, attr: {}", result[i+=1])
232
+ assert_equal("start_element_ns: Test, attr: {}, prefix: , uri: , ns: {}", result[i+=1])
233
+ assert_equal("end_element: Test", result[i+=1])
234
+ assert_equal("end_element_ns Test, prefix: , uri: ", result[i+=1])
235
+ assert_equal("end_document", result[i+=1])
236
+ end
237
+
238
+ def test_parse_error
239
+ xml = <<-EOS
240
+ <Results>
241
+ EOS
242
+ parser = LibXML::XML::SaxParser.string(xml)
243
+ parser.callbacks = TestCaseCallbacks.new
244
+
245
+ error = assert_raises(LibXML::XML::Error) do
246
+ parser.parse
247
+ end
248
+
249
+ # Check callbacks
250
+ result = parser.callbacks.result
251
+
252
+ i = -1
253
+
254
+ base_err_msg = "Fatal error: (Premature end of data in tag Results line 1|EndTag: '<\\/' not found) at :2\\."
255
+ re_err_msg1 = /\A(error: )#{base_err_msg}\z/
256
+ re_err_msg2 = /\A#{base_err_msg}\z/
257
+
258
+ assert_equal("startdoc", result[i+=1])
259
+ assert_equal("start_element: Results, attr: {}", result[i+=1])
260
+ assert_equal("start_element_ns: Results, attr: {}, prefix: , uri: , ns: {}", result[i+=1])
261
+ assert_equal("characters: \n", result[i+=1])
262
+ assert_match(re_err_msg1, result[i+=1])
263
+ assert_equal("end_document", result[i+=1])
264
+
265
+ refute_nil(error)
266
+ assert_kind_of(LibXML::XML::Error, error)
267
+ assert_match(re_err_msg2, error.message)
268
+ assert_equal(LibXML::XML::Error::PARSER, error.domain)
269
+
270
+ assert([LibXML::XML::Error::TAG_NOT_FINISHED, LibXML::XML::Error::LTSLASH_REQUIRED].include?(error.code))
271
+ assert_equal(LibXML::XML::Error::FATAL, error.level)
272
+ assert_nil(error.file)
273
+ assert_equal(2, error.line)
274
+ # Sometimes this is nil and sometimes its not depending on OS and libxlm version
275
+ # assert_nil(error.str1)
276
+ assert_nil(error.str2)
277
+ assert_nil(error.str3)
278
+ assert([0, 1].include?(error.int1))
279
+ assert_equal(1, error.int2)
280
+ assert_nil(error.node)
281
+ end
282
+
283
+ def test_parse_seg_fail
284
+ xml = <<-EOS
285
+ <?xml version="1.0" encoding="ISO-8859-1" ?>
286
+ <Products>
287
+ <Product>
288
+ <ProductDescription>
289
+ AQUALIA THERMAL Lichte cr├иme - Versterkende & kalmerende 24 u hydraterende verzorging<br />
290
+ Huid wordt continu gehydrateerd, intens versterkt en gekalmeerd.<br />
291
+ Hypoallergeen. Geschikt voor de gevoelige huid.<br />
292
+ <br />
293
+ 01.EFFECTIVITEIT<br />
294
+ Intensief gehydrateerd, de huid voelt gekalmeerd. Ze voelt de hele dag soepel en fluweelzacht aan, zonder een trekkerig gevoel. De huid is elastischer, soepeler en stralender. Doeltreffendheid getest onder dermatologisch toezicht. <br />
295
+ <br />
296
+ 02.GEBRUIK<br />
297
+ 's Morgens en/ of 's avonds aanbrengen. <br />
298
+ <br />
299
+ 03.ACTIEVE INGREDIENTEN<br />
300
+ Technologische innovatie: 24 u continue cellulaire vochtnevel. Voor de 1ste keer worden Thermaal Bronwater van Vichy, rijk aan zeldzame mineralen en Actief HyaluronineтДв verwerkt in microcapsules, die deze vervolgens verspreiden in de cellen. <br />
301
+ <br />
302
+ 04.TEXTUUR<br />
303
+ De lichte cr├иme is verfrissend en trekt makkelijk in. Niet vet en niet kleverig. Zonder 'maskereffect'. <br />
304
+ <br />
305
+ 05.GEUR<br />
306
+ Geparfumeerd <br />
307
+ <br />
308
+ 06.INHOUD<br />
309
+ 40 ml tube <br />
310
+ </ProductDescription>
311
+ </Product>
312
+ </Products>
313
+ EOS
314
+
315
+ parser = LibXML::XML::SaxParser.string(xml)
316
+ parser.callbacks = TestCaseCallbacks.new
317
+
318
+ error = assert_raises(LibXML::XML::Error) do
319
+ parser.parse
320
+ end
321
+ assert_equal("Fatal error: xmlParseEntityRef: no name at :5.", error.to_s)
322
+
323
+ # Check callbacks
324
+ parser.callbacks.result
325
+ end
326
+ end
@@ -0,0 +1,168 @@
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+
5
+ class TestSchema < Minitest::Test
6
+ def setup
7
+ file = File.join(File.dirname(__FILE__), 'model/shiporder.xml')
8
+ @doc = LibXML::XML::Document.file(file)
9
+ end
10
+
11
+ def teardown
12
+ @doc = nil
13
+ end
14
+
15
+ def schema
16
+ document = LibXML::XML::Document.file(File.join(File.dirname(__FILE__), 'model/shiporder.xsd'))
17
+ LibXML::XML::Schema.document(document)
18
+ end
19
+
20
+ def check_error(error)
21
+ refute_nil(error)
22
+ assert(error.message.match(/Error: Element 'invalid': This element is not expected. Expected is \( item \)/))
23
+ assert_kind_of(LibXML::XML::Error, error)
24
+ assert_equal(LibXML::XML::Error::SCHEMASV, error.domain)
25
+ assert_equal(LibXML::XML::Error::SCHEMAV_ELEMENT_CONTENT, error.code)
26
+ assert_equal(LibXML::XML::Error::ERROR, error.level)
27
+ assert(error.file.match(/shiporder.xml/)) if error.file
28
+ assert_nil(error.str1)
29
+ assert_nil(error.str2)
30
+ assert_nil(error.str3)
31
+ assert_equal(0, error.int1)
32
+ assert_equal(0, error.int2)
33
+ end
34
+
35
+ def test_load_from_doc
36
+ assert_instance_of(LibXML::XML::Schema, schema)
37
+ end
38
+
39
+ def test_doc_valid
40
+ assert(@doc.validate_schema(schema))
41
+ end
42
+
43
+ def test_doc_invalid
44
+ new_node = LibXML::XML::Node.new('invalid', 'this will mess up validation')
45
+ @doc.root << new_node
46
+
47
+ error = assert_raises(LibXML::XML::Error) do
48
+ @doc.validate_schema(schema)
49
+ end
50
+
51
+ check_error(error)
52
+ assert_nil(error.line)
53
+ refute_nil(error.node)
54
+ assert_equal('invalid', error.node.name)
55
+ end
56
+
57
+ def test_reader_valid
58
+ reader = LibXML::XML::Reader.string(@doc.to_s)
59
+ assert(reader.schema_validate(schema))
60
+
61
+ while reader.read
62
+ end
63
+ end
64
+
65
+ def test_reader_invalid
66
+ # Set error handler
67
+ errors = Array.new
68
+ LibXML::XML::Error.set_handler do |error|
69
+ errors << error
70
+ end
71
+
72
+ new_node = LibXML::XML::Node.new('invalid', 'this will mess up validation')
73
+ @doc.root << new_node
74
+ reader = LibXML::XML::Reader.string(@doc.to_s)
75
+
76
+ # Set a schema
77
+ assert(reader.schema_validate(schema))
78
+
79
+ while reader.read
80
+ end
81
+
82
+ assert_equal(1, errors.length)
83
+
84
+ error = errors.first
85
+ check_error(error)
86
+ assert_equal(21, error.line)
87
+ ensure
88
+ LibXML::XML::Error.set_handler(&LibXML::XML::Error::VERBOSE_HANDLER)
89
+ end
90
+
91
+
92
+ # Schema meta-data tests
93
+ def test_elements
94
+ assert_instance_of(Hash, schema.elements)
95
+ assert_equal(1, schema.elements.length)
96
+ assert_instance_of(LibXML::XML::Schema::Element, schema.elements['shiporder'])
97
+ end
98
+
99
+ def test_types
100
+ assert_instance_of(Hash, schema.types)
101
+ assert_equal(1, schema.types.length)
102
+ assert_instance_of(LibXML::XML::Schema::Type, schema.types['shiporder'])
103
+ end
104
+
105
+ def test_imported_types
106
+ assert_instance_of(Hash, schema.imported_types)
107
+ assert_equal(1, schema.imported_types.length)
108
+ assert_instance_of(LibXML::XML::Schema::Type, schema.types['shiporder'])
109
+ end
110
+
111
+ def test_namespaces
112
+ assert_instance_of(Array, schema.namespaces)
113
+ assert_equal(1, schema.namespaces.length)
114
+ end
115
+
116
+ def test_schema_type
117
+ type = schema.types['shiporder']
118
+
119
+ assert_equal('shiporder', type.name)
120
+ assert_nil(type.namespace)
121
+ assert_equal("Shiporder type documentation", type.annotation)
122
+ assert_instance_of(LibXML::XML::Node, type.node)
123
+ assert_equal(LibXML::XML::Schema::Types::XML_SCHEMA_TYPE_COMPLEX, type.kind)
124
+ assert_instance_of(LibXML::XML::Schema::Type, type.base)
125
+ assert_equal("anyType", type.base.name)
126
+ assert_equal(LibXML::XML::Schema::Types::XML_SCHEMA_TYPE_BASIC, type.base.kind)
127
+
128
+ assert_instance_of(Hash, type.elements)
129
+ assert_equal(3, type.elements.length)
130
+ end
131
+
132
+ def test_schema_element
133
+ element = schema.types['shiporder'].elements['orderperson']
134
+
135
+ assert_equal('orderperson', element.name)
136
+ assert_nil(element.namespace)
137
+ assert_equal("orderperson element documentation", element.annotation)
138
+
139
+ element = schema.types['shiporder'].elements['item']
140
+ assert_equal('item', element.name)
141
+
142
+ element = schema.types['shiporder'].elements['item'].type.elements['note']
143
+ assert_equal('note', element.name)
144
+ assert_equal('string', element.type.name)
145
+ end
146
+
147
+ def test_schema_attributes
148
+ type = schema.types['shiporder']
149
+
150
+ assert_instance_of(Array, type.attributes)
151
+ assert_equal(2, type.attributes.length)
152
+ assert_instance_of(LibXML::XML::Schema::Attribute, type.attributes.first)
153
+ end
154
+
155
+ def test_schema_attribute
156
+ attribute = schema.types['shiporder'].attributes.first
157
+
158
+ assert_equal("orderid", attribute.name)
159
+ assert_nil(attribute.namespace)
160
+ assert_equal(1, attribute.occurs)
161
+ assert_equal('string', attribute.type.name)
162
+
163
+ attribute = schema.types['shiporder'].attributes[1]
164
+ assert_equal(2, attribute.occurs)
165
+ assert_equal('1', attribute.default)
166
+ assert_equal('integer', attribute.type.name)
167
+ end
168
+ end
@@ -0,0 +1,48 @@
1
+ # encoding: UTF-8
2
+
3
+ # Change to current directory so relative
4
+ # requires work.
5
+ dir = File.dirname(__FILE__)
6
+ Dir.chdir(dir)
7
+
8
+ require './test_attr'
9
+ require './test_attr_decl'
10
+ require './test_attributes'
11
+ require './test_canonicalize'
12
+ require './test_document'
13
+ require './test_document_write'
14
+ require './test_dtd'
15
+ require './test_error'
16
+ require './test_html_parser'
17
+ require './test_html_parser_context'
18
+ require './test_namespace'
19
+ require './test_namespaces'
20
+ require './test_node'
21
+ require './test_node_cdata'
22
+ require './test_node_comment'
23
+ require './test_node_copy'
24
+ require './test_node_edit'
25
+ require './test_node_pi'
26
+ require './test_node_text'
27
+ require './test_node_write'
28
+ require './test_node_xlink'
29
+ require './test_parser'
30
+ require './test_parser_context'
31
+ require './test_reader'
32
+ require './test_relaxng'
33
+ require './test_sax_parser'
34
+ require './test_schema'
35
+ require './test_traversal'
36
+ require './test_writer'
37
+ require './test_xinclude'
38
+ require './test_xpath'
39
+ require './test_xpath_context'
40
+ require './test_xpath_expression'
41
+ require './test_xpointer'
42
+
43
+ require './test_encoding'
44
+ require './test_encoding_sax'
45
+
46
+ # Compatibility
47
+ require './test_properties'
48
+ require './test_deprecated_require'
@@ -0,0 +1,152 @@
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+
5
+ class TestTranversal < Minitest::Test
6
+ ROOT_NODES_LENGTH = 27
7
+ ROOT_ELEMENTS_LENGTH = 13
8
+
9
+ def setup
10
+ filename = File.join(File.dirname(__FILE__), 'model/books.xml')
11
+ @doc = LibXML::XML::Document.file(filename)
12
+ end
13
+
14
+ def teardown
15
+ @doc = nil
16
+ end
17
+
18
+ def test_children
19
+ # Includes text nodes and such
20
+ assert_equal(ROOT_NODES_LENGTH, @doc.root.children.length)
21
+ end
22
+
23
+ def test_children_iteration
24
+ # Includes text nodes and such
25
+ nodes = @doc.root.children.inject([]) do |arr, node|
26
+ arr << node
27
+ arr
28
+ end
29
+
30
+ assert_equal(ROOT_NODES_LENGTH, nodes.length)
31
+ end
32
+
33
+ def test_no_children
34
+ # Get a node with no children
35
+ node = @doc.find_first('/catalog/book[@id="bk113"]/price')
36
+ assert_equal(0, node.children.length)
37
+ end
38
+
39
+ def test_no_children_inner_xml
40
+ # Get a node with no children
41
+ node = @doc.find_first('/catalog/book[@id="bk113"]/price')
42
+ assert_nil(node.inner_xml)
43
+ end
44
+ def test_each
45
+ # Includes text nodes and such
46
+ nodes = @doc.root.inject([]) do |arr, node|
47
+ arr << node
48
+ arr
49
+ end
50
+
51
+ assert_equal(ROOT_NODES_LENGTH, nodes.length)
52
+ end
53
+
54
+ def test_each_element
55
+ # Includes text nodes and such
56
+ nodes = []
57
+ @doc.root.each_element do |node|
58
+ nodes << node
59
+ end
60
+
61
+ assert_equal(ROOT_ELEMENTS_LENGTH, nodes.length)
62
+ end
63
+
64
+ def test_next
65
+ nodes = []
66
+
67
+ node = @doc.root.first
68
+
69
+ while node
70
+ nodes << node
71
+ node = node.next
72
+ end
73
+ assert_equal(ROOT_NODES_LENGTH, nodes.length)
74
+ end
75
+
76
+ def test_next?
77
+ first_node = @doc.root.first
78
+ assert(first_node.next?)
79
+
80
+ last_node = @doc.root.last
81
+ assert(!last_node.next?)
82
+ end
83
+
84
+ def test_prev
85
+ nodes = []
86
+
87
+ node = @doc.root.last
88
+
89
+ while node
90
+ nodes << node
91
+ node = node.prev
92
+ end
93
+ assert_equal(ROOT_NODES_LENGTH, nodes.length)
94
+ end
95
+
96
+ def test_prev?
97
+ first_node = @doc.root.first
98
+ assert(!first_node.prev?)
99
+
100
+ last_node = @doc.root.last
101
+ assert(last_node.prev?)
102
+ end
103
+
104
+ def test_parent?
105
+ assert(!@doc.parent?)
106
+ assert(@doc.root.parent?)
107
+ end
108
+
109
+ def test_child?
110
+ assert(@doc.child?)
111
+ assert(!@doc.root.first.child?)
112
+ end
113
+
114
+ def test_next_prev_equivalence
115
+ next_nodes = []
116
+ last_nodes = []
117
+
118
+ node = @doc.root.first
119
+ while node
120
+ next_nodes << node
121
+ node = node.next
122
+ end
123
+
124
+ node = @doc.root.last
125
+ while node
126
+ last_nodes << node
127
+ node = node.prev
128
+ end
129
+
130
+ assert_equal(next_nodes, last_nodes.reverse)
131
+ end
132
+
133
+ def test_next_children_equivalence
134
+ next_nodes = []
135
+
136
+ node = @doc.root.first
137
+ while node
138
+ next_nodes << node
139
+ node = node.next
140
+ end
141
+
142
+ assert_equal(@doc.root.children, next_nodes)
143
+ end
144
+
145
+ def test_doc_class
146
+ assert_instance_of(LibXML::XML::Document, @doc)
147
+ end
148
+
149
+ def test_root_class
150
+ assert_instance_of(LibXML::XML::Node, @doc.root)
151
+ end
152
+ end