libxml-ruby 2.8.0 → 3.2.3

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 (205) hide show
  1. checksums.yaml +5 -5
  2. data/HISTORY +859 -775
  3. data/LICENSE +20 -20
  4. data/MANIFEST +166 -166
  5. data/README.rdoc +217 -184
  6. data/Rakefile +98 -78
  7. data/ext/libxml/extconf.rb +61 -116
  8. data/ext/libxml/libxml.c +80 -76
  9. data/ext/libxml/ruby_libxml.h +67 -75
  10. data/ext/libxml/ruby_xml.c +937 -893
  11. data/ext/libxml/ruby_xml.h +10 -10
  12. data/ext/libxml/ruby_xml_attr.c +333 -333
  13. data/ext/libxml/ruby_xml_attr.h +12 -12
  14. data/ext/libxml/ruby_xml_attr_decl.c +153 -153
  15. data/ext/libxml/ruby_xml_attr_decl.h +11 -11
  16. data/ext/libxml/ruby_xml_attributes.c +275 -275
  17. data/ext/libxml/ruby_xml_attributes.h +15 -15
  18. data/ext/libxml/ruby_xml_cbg.c +85 -85
  19. data/ext/libxml/ruby_xml_document.c +1123 -1147
  20. data/ext/libxml/ruby_xml_document.h +11 -11
  21. data/ext/libxml/ruby_xml_dtd.c +248 -268
  22. data/ext/libxml/ruby_xml_dtd.h +9 -9
  23. data/ext/libxml/ruby_xml_encoding.c +250 -260
  24. data/ext/libxml/ruby_xml_encoding.h +16 -19
  25. data/ext/libxml/ruby_xml_error.c +996 -996
  26. data/ext/libxml/ruby_xml_error.h +12 -12
  27. data/ext/libxml/ruby_xml_html_parser.c +89 -92
  28. data/ext/libxml/ruby_xml_html_parser.h +10 -10
  29. data/ext/libxml/ruby_xml_html_parser_context.c +337 -338
  30. data/ext/libxml/ruby_xml_html_parser_context.h +10 -10
  31. data/ext/libxml/ruby_xml_html_parser_options.c +46 -46
  32. data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
  33. data/ext/libxml/ruby_xml_input_cbg.c +191 -191
  34. data/ext/libxml/ruby_xml_input_cbg.h +20 -20
  35. data/ext/libxml/ruby_xml_io.c +47 -50
  36. data/ext/libxml/ruby_xml_io.h +10 -10
  37. data/ext/libxml/ruby_xml_namespace.c +154 -153
  38. data/ext/libxml/ruby_xml_namespace.h +10 -10
  39. data/ext/libxml/ruby_xml_namespaces.c +293 -293
  40. data/ext/libxml/ruby_xml_namespaces.h +9 -9
  41. data/ext/libxml/ruby_xml_node.c +1406 -1452
  42. data/ext/libxml/ruby_xml_node.h +13 -11
  43. data/ext/libxml/ruby_xml_parser.c +91 -94
  44. data/ext/libxml/ruby_xml_parser.h +12 -12
  45. data/ext/libxml/ruby_xml_parser_context.c +999 -1001
  46. data/ext/libxml/ruby_xml_parser_context.h +10 -10
  47. data/ext/libxml/ruby_xml_parser_options.c +66 -66
  48. data/ext/libxml/ruby_xml_parser_options.h +12 -12
  49. data/ext/libxml/ruby_xml_reader.c +1239 -1228
  50. data/ext/libxml/ruby_xml_reader.h +17 -17
  51. data/ext/libxml/ruby_xml_relaxng.c +110 -111
  52. data/ext/libxml/ruby_xml_relaxng.h +10 -10
  53. data/ext/libxml/ruby_xml_sax2_handler.c +326 -328
  54. data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
  55. data/ext/libxml/ruby_xml_sax_parser.c +116 -120
  56. data/ext/libxml/ruby_xml_sax_parser.h +10 -10
  57. data/ext/libxml/ruby_xml_schema.c +350 -301
  58. data/ext/libxml/ruby_xml_schema.h +806 -809
  59. data/ext/libxml/ruby_xml_schema_attribute.c +61 -109
  60. data/ext/libxml/ruby_xml_schema_attribute.h +15 -15
  61. data/ext/libxml/ruby_xml_schema_element.c +69 -94
  62. data/ext/libxml/ruby_xml_schema_element.h +14 -14
  63. data/ext/libxml/ruby_xml_schema_facet.c +46 -52
  64. data/ext/libxml/ruby_xml_schema_facet.h +13 -13
  65. data/ext/libxml/ruby_xml_schema_type.c +214 -259
  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 +1133 -1137
  69. data/ext/libxml/ruby_xml_writer.h +10 -10
  70. data/ext/libxml/ruby_xml_xinclude.c +16 -16
  71. data/ext/libxml/ruby_xml_xinclude.h +11 -11
  72. data/ext/libxml/ruby_xml_xpath.c +194 -188
  73. data/ext/libxml/ruby_xml_xpath.h +13 -13
  74. data/ext/libxml/ruby_xml_xpath_context.c +360 -361
  75. data/ext/libxml/ruby_xml_xpath_context.h +9 -9
  76. data/ext/libxml/ruby_xml_xpath_expression.c +81 -81
  77. data/ext/libxml/ruby_xml_xpath_expression.h +10 -10
  78. data/ext/libxml/ruby_xml_xpath_object.c +338 -335
  79. data/ext/libxml/ruby_xml_xpath_object.h +17 -17
  80. data/ext/libxml/ruby_xml_xpointer.c +99 -99
  81. data/ext/libxml/ruby_xml_xpointer.h +11 -11
  82. data/ext/vc/libxml_ruby.sln +17 -15
  83. data/lib/libxml/node.rb +2 -78
  84. data/lib/libxml/parser.rb +0 -266
  85. data/lib/libxml/sax_parser.rb +0 -17
  86. data/lib/libxml/schema/attribute.rb +19 -19
  87. data/lib/libxml/schema/element.rb +19 -27
  88. data/lib/libxml/schema/type.rb +21 -29
  89. data/lib/libxml/schema.rb +47 -66
  90. data/lib/libxml-ruby.rb +30 -0
  91. data/lib/libxml.rb +3 -33
  92. data/libxml-ruby.gemspec +48 -44
  93. data/script/benchmark/depixelate +634 -634
  94. data/script/benchmark/hamlet.xml +9054 -9054
  95. data/script/benchmark/parsecount +170 -170
  96. data/script/benchmark/throughput +41 -41
  97. data/script/test +6 -6
  98. data/setup.rb +0 -1
  99. data/test/c14n/given/example-1.xml +14 -14
  100. data/test/c14n/given/example-2.xml +11 -11
  101. data/test/c14n/given/example-3.xml +18 -18
  102. data/test/c14n/given/example-4.xml +9 -9
  103. data/test/c14n/given/example-5.xml +12 -12
  104. data/test/c14n/given/example-6.xml +2 -2
  105. data/test/c14n/given/example-7.xml +11 -11
  106. data/test/c14n/given/example-8.xml +11 -11
  107. data/test/c14n/given/example-8.xpath +9 -9
  108. data/test/c14n/result/1-1-without-comments/example-1 +3 -3
  109. data/test/c14n/result/1-1-without-comments/example-2 +10 -10
  110. data/test/c14n/result/1-1-without-comments/example-3 +13 -13
  111. data/test/c14n/result/1-1-without-comments/example-4 +8 -8
  112. data/test/c14n/result/1-1-without-comments/example-5 +2 -2
  113. data/test/c14n/result/with-comments/example-1 +5 -5
  114. data/test/c14n/result/with-comments/example-2 +10 -10
  115. data/test/c14n/result/with-comments/example-3 +13 -13
  116. data/test/c14n/result/with-comments/example-4 +8 -8
  117. data/test/c14n/result/with-comments/example-5 +3 -3
  118. data/test/c14n/result/without-comments/example-1 +3 -3
  119. data/test/c14n/result/without-comments/example-2 +10 -10
  120. data/test/c14n/result/without-comments/example-3 +13 -13
  121. data/test/c14n/result/without-comments/example-4 +8 -8
  122. data/test/c14n/result/without-comments/example-5 +2 -2
  123. data/test/model/atom.xml +12 -12
  124. data/test/model/bands.iso-8859-1.xml +4 -4
  125. data/test/model/bands.utf-8.xml +4 -4
  126. data/test/model/bands.xml +4 -4
  127. data/test/model/books.xml +153 -153
  128. data/test/model/cwm_1_0.xml +11336 -0
  129. data/test/model/merge_bug_data.xml +58 -58
  130. data/test/model/ruby-lang.html +238 -238
  131. data/test/model/rubynet.xml +79 -79
  132. data/test/model/shiporder.rnc +28 -28
  133. data/test/model/shiporder.rng +86 -86
  134. data/test/model/shiporder.xml +22 -22
  135. data/test/model/shiporder.xsd +44 -40
  136. data/test/model/shiporder_bad.xsd +40 -0
  137. data/test/model/shiporder_import.xsd +45 -0
  138. data/test/model/soap.xml +27 -27
  139. data/test/model/xinclude.xml +4 -4
  140. data/test/{tc_attr.rb → test_attr.rb} +23 -25
  141. data/test/{tc_attr_decl.rb → test_attr_decl.rb} +13 -14
  142. data/test/{tc_attributes.rb → test_attributes.rb} +11 -18
  143. data/test/{tc_canonicalize.rb → test_canonicalize.rb} +36 -41
  144. data/test/test_deprecated_require.rb +12 -0
  145. data/test/{tc_document.rb → test_document.rb} +33 -27
  146. data/test/test_document_write.rb +146 -0
  147. data/test/{tc_dtd.rb → test_dtd.rb} +29 -29
  148. data/test/{tc_encoding.rb → test_encoding.rb} +129 -126
  149. data/test/{tc_encoding_sax.rb → test_encoding_sax.rb} +7 -6
  150. data/test/test_error.rb +178 -0
  151. data/test/test_helper.rb +4 -9
  152. data/test/test_html_parser.rb +162 -0
  153. data/test/test_html_parser_context.rb +23 -0
  154. data/test/test_namespace.rb +60 -0
  155. data/test/{tc_namespaces.rb → test_namespaces.rb} +34 -44
  156. data/test/{tc_node.rb → test_node.rb} +68 -47
  157. data/test/{tc_node_cdata.rb → test_node_cdata.rb} +12 -13
  158. data/test/{tc_node_comment.rb → test_node_comment.rb} +7 -8
  159. data/test/{tc_node_copy.rb → test_node_copy.rb} +4 -6
  160. data/test/{tc_node_edit.rb → test_node_edit.rb} +23 -41
  161. data/test/{tc_node_pi.rb → test_node_pi.rb} +37 -40
  162. data/test/{tc_node_text.rb → test_node_text.rb} +10 -12
  163. data/test/{tc_node_write.rb → test_node_write.rb} +18 -29
  164. data/test/test_node_xlink.rb +28 -0
  165. data/test/test_parser.rb +324 -0
  166. data/test/{tc_parser_context.rb → test_parser_context.rb} +42 -49
  167. data/test/{tc_properties.rb → test_properties.rb} +6 -7
  168. data/test/test_reader.rb +364 -0
  169. data/test/test_relaxng.rb +53 -0
  170. data/test/{tc_sax_parser.rb → test_sax_parser.rb} +44 -38
  171. data/test/test_schema.rb +231 -0
  172. data/test/test_suite.rb +38 -40
  173. data/test/{tc_traversal.rb → test_traversal.rb} +5 -6
  174. data/test/{tc_writer.rb → test_writer.rb} +468 -448
  175. data/test/{tc_xinclude.rb → test_xinclude.rb} +4 -5
  176. data/test/test_xml.rb +263 -0
  177. data/test/{tc_xpath.rb → test_xpath.rb} +31 -32
  178. data/test/{tc_xpath_context.rb → test_xpath_context.rb} +8 -9
  179. data/test/test_xpath_expression.rb +37 -0
  180. data/test/{tc_xpointer.rb → test_xpointer.rb} +16 -18
  181. metadata +122 -100
  182. data/lib/libxml/ns.rb +0 -22
  183. data/lib/libxml/properties.rb +0 -23
  184. data/lib/libxml/reader.rb +0 -29
  185. data/lib/libxml/xpath_object.rb +0 -16
  186. data/test/etc_doc_to_s.rb +0 -21
  187. data/test/ets_doc_file.rb +0 -17
  188. data/test/ets_doc_to_s.rb +0 -23
  189. data/test/ets_gpx.rb +0 -28
  190. data/test/ets_node_gc.rb +0 -23
  191. data/test/ets_test.xml +0 -2
  192. data/test/ets_tsr.rb +0 -11
  193. data/test/tc_deprecated_require.rb +0 -13
  194. data/test/tc_document_write.rb +0 -196
  195. data/test/tc_error.rb +0 -180
  196. data/test/tc_html_parser.rb +0 -153
  197. data/test/tc_html_parser_context.rb +0 -24
  198. data/test/tc_namespace.rb +0 -62
  199. data/test/tc_node_xlink.rb +0 -29
  200. data/test/tc_parser.rb +0 -381
  201. data/test/tc_reader.rb +0 -400
  202. data/test/tc_relaxng.rb +0 -54
  203. data/test/tc_schema.rb +0 -162
  204. data/test/tc_xml.rb +0 -226
  205. data/test/tc_xpath_expression.rb +0 -38
data/test/tc_reader.rb DELETED
@@ -1,400 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require './test_helper'
4
- require 'stringio'
5
- require 'test/unit'
6
-
7
- class TestReader < Test::Unit::TestCase
8
- XML_FILE = File.join(File.dirname(__FILE__), 'model/atom.xml')
9
-
10
- def verify_simple(reader)
11
- node_types = []
12
-
13
- # Read each node
14
- 26.times do
15
- assert(reader.read)
16
- node_types << reader.node_type
17
- end
18
-
19
- # There are no more nodes
20
- assert(!reader.read)
21
-
22
- # Check what was read
23
- expected = [XML::Reader::TYPE_PROCESSING_INSTRUCTION,
24
- XML::Reader::TYPE_ELEMENT,
25
- XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
26
- XML::Reader::TYPE_COMMENT,
27
- XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
28
- XML::Reader::TYPE_ELEMENT,
29
- XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
30
- XML::Reader::TYPE_ELEMENT,
31
- XML::Reader::TYPE_CDATA,
32
- XML::Reader::TYPE_END_ELEMENT,
33
- XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
34
- XML::Reader::TYPE_ELEMENT,
35
- XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
36
- XML::Reader::TYPE_ELEMENT,
37
- XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
38
- XML::Reader::TYPE_ELEMENT,
39
- XML::Reader::TYPE_TEXT,
40
- XML::Reader::TYPE_END_ELEMENT,
41
- XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
42
- XML::Reader::TYPE_END_ELEMENT,
43
- XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
44
- XML::Reader::TYPE_END_ELEMENT,
45
- XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
46
- XML::Reader::TYPE_END_ELEMENT,
47
- XML::Reader::TYPE_SIGNIFICANT_WHITESPACE,
48
- XML::Reader::TYPE_END_ELEMENT]
49
-
50
- assert_equal(expected, node_types)
51
- end
52
-
53
- def test_document
54
- reader = XML::Reader.document(XML::Document.file(XML_FILE))
55
- verify_simple(reader)
56
- end
57
-
58
- def test_file
59
- reader = XML::Reader.file(XML_FILE)
60
- verify_simple(reader)
61
- end
62
-
63
- def test_invalid_file
64
- assert_raise(XML::Error) do
65
- XML::Reader.file('/does/not/exist')
66
- end
67
- end
68
-
69
- def test_string
70
- reader = XML::Reader.string(File.read(XML_FILE))
71
- verify_simple(reader)
72
- end
73
-
74
- def test_io
75
- File.open(XML_FILE, 'rb') do |io|
76
- reader = XML::Reader.io(io)
77
- verify_simple(reader)
78
- end
79
- end
80
-
81
- def test_io_gc
82
- # Test that the reader keeps a reference
83
- # to the io object
84
- file = File.open(XML_FILE, 'rb')
85
- reader = XML::Reader.io(file)
86
- file = nil
87
- GC.start
88
- assert(reader.read)
89
- end
90
-
91
- def test_string_io
92
- data = File.read(XML_FILE)
93
- string_io = StringIO.new(data)
94
- reader = XML::Reader.io(string_io)
95
- verify_simple(reader)
96
- end
97
-
98
- def test_error
99
- reader = XML::Reader.string('<foo blah')
100
-
101
- error = assert_raise(XML::Error) do
102
- reader.read
103
- end
104
- assert_equal("Fatal error: Couldn't find end of Start Tag foo at :1.", error.to_s)
105
- end
106
-
107
- def test_deprecated_error_handler
108
- called = false
109
- reader = XML::Reader.string('<foo blah')
110
- reader.set_error_handler do |error|
111
- called = true
112
- end
113
-
114
- assert_raise(XML::Error) do
115
- reader.read
116
- end
117
-
118
- assert(called)
119
- end
120
-
121
- def test_deprecated_reset_error_handler
122
- called = false
123
- reader = XML::Reader.string('<foo blah')
124
- reader.set_error_handler do |error|
125
- called = true
126
- end
127
- reader.reset_error_handler
128
-
129
- assert_raise(XML::Error) do
130
- reader.read
131
- end
132
-
133
- assert(!called)
134
- end
135
-
136
- def test_attr
137
- parser = XML::Reader.string("<foo x='1' y='2'/>")
138
- assert(parser.read)
139
- assert_equal('foo', parser.name)
140
- assert_equal('1', parser['x'])
141
- assert_equal('1', parser[0])
142
- assert_equal('2', parser['y'])
143
- assert_equal('2', parser[1])
144
- assert_equal(nil, parser['z'])
145
- assert_equal(nil, parser[2])
146
- end
147
-
148
- def test_move_to_attribute_depreciation
149
- previous_stderr, $stderr = $stderr, StringIO.new
150
- reader = XML::Reader.string("<foo x='1' y='2'/>")
151
- assert(reader.read)
152
- assert(reader.move_to_attribute 1)
153
- assert($stderr.string =~ /deprecated/)
154
- ensure
155
- $stderr = previous_stderr
156
- end
157
-
158
- def test_move_attr
159
- reader = XML::Reader.string('<root xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xhtml="http://www.w3.org/1999/xhtml"><link xml:id="abc" xlink:href="def" xhtml:class="ghi" bar="jkl" /></root>')
160
- assert(reader.read) # <root/>
161
- assert(reader.read) # <link/>
162
-
163
- assert(reader.move_to_attribute_no(1))
164
- assert_equal(reader.value, 'def')
165
- assert(reader.move_to_attribute_ns('id', 'http://www.w3.org/XML/1998/namespace'))
166
- assert_equal(reader.value, 'abc')
167
- assert(reader.move_to_attribute('bar'))
168
- assert_equal(reader.value, 'jkl')
169
-
170
- # 1 in case of success, -1 in case of error, 0 if not found
171
- assert_equal(reader.move_to_attribute_no(12), 0)
172
- assert_equal(reader.move_to_attribute('baz'), 0)
173
- assert_equal(reader.move_to_attribute_ns('baz', 'http://ruby/namespace'), 0)
174
- end
175
-
176
- def test_get_attr
177
- reader = XML::Reader.string('<root xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xhtml="http://www.w3.org/1999/xhtml"><link xml:id="abc" xlink:href="def" xhtml:class="ghi" bar="jkl" /></root>')
178
- assert(reader.read) # <root/>
179
- assert(reader.read) # <link/>
180
-
181
- assert_equal(reader.get_attribute_no(1), 'def')
182
- assert_equal(reader.get_attribute_ns('id', 'http://www.w3.org/XML/1998/namespace'), 'abc')
183
- assert_equal(reader.get_attribute('bar'), 'jkl')
184
-
185
- assert_equal(reader.get_attribute_no(12), nil)
186
- assert_equal(reader.get_attribute('baz'), nil)
187
- assert_equal(reader.get_attribute_ns('baz', 'http://ruby/namespace'), nil)
188
- end
189
-
190
- def test_value
191
- parser = XML::Reader.string("<foo><bar>1</bar><bar>2</bar><bar>3</bar></foo>")
192
- assert(parser.read)
193
- assert_equal('foo', parser.name)
194
- assert_equal(nil, parser.value)
195
- 3.times do |i|
196
- assert(parser.read)
197
- assert_equal(XML::Reader::TYPE_ELEMENT, parser.node_type)
198
- assert_equal('bar', parser.name)
199
- assert(parser.read)
200
- assert_equal(XML::Reader::TYPE_TEXT, parser.node_type)
201
- assert_equal((i + 1).to_s, parser.value)
202
- assert(parser.read)
203
- assert_equal(XML::Reader::TYPE_END_ELEMENT, parser.node_type)
204
- end
205
- end
206
-
207
- def test_expand
208
- reader = XML::Reader.file(XML_FILE)
209
- reader.read.to_s
210
- reader.read
211
-
212
- # Read a node
213
- node = reader.expand
214
- assert_equal('feed', node.name)
215
- assert_equal(::Encoding::UTF_8, node.name.encoding) if defined?(::Encoding)
216
- end
217
-
218
- def test_expand_doc
219
- reader = XML::Reader.file(XML_FILE)
220
- reader.read.to_s
221
- reader.read
222
-
223
- # Read a node
224
- node = reader.expand
225
-
226
- # Try to access the document
227
- assert_not_nil(node.doc)
228
- end
229
-
230
- def test_expand_find
231
- reader = XML::Reader.file(XML_FILE)
232
- reader.read.to_s
233
- reader.read
234
-
235
- # Read first node which
236
- node = reader.expand
237
- assert_equal('feed', node.name)
238
-
239
- # Search for entries
240
- entries = node.find('atom:entry', 'atom:http://www.w3.org/2005/Atom')
241
-
242
- assert_equal(1, entries.length)
243
- end
244
-
245
- def test_expand_invalid
246
- reader = XML::Reader.file(XML_FILE)
247
-
248
- # Expand a node before one has been read
249
- error = assert_raise(RuntimeError) do
250
- reader.expand
251
- end
252
- assert_equal("The reader does not have a document. Did you forget to call read?", error.to_s)
253
- end
254
-
255
- def test_expand_invalid_access
256
- reader = XML::Reader.file(XML_FILE)
257
-
258
- # Read a node
259
- reader.read
260
- reader.read
261
-
262
- # Expand the node
263
- node = reader.expand
264
- assert_equal('feed', node.name)
265
-
266
- # Read another node, this makes the last node invalid
267
- reader.next
268
-
269
- # The previous node is now invalid
270
- error = assert_raise(RuntimeError) do
271
- assert_equal('feed', node.name)
272
- end
273
- assert_equal("This node has already been freed.", error.to_s)
274
- end
275
-
276
- def test_mode
277
- reader = XML::Reader.string('<xml/>')
278
- assert_equal(XML::Reader::MODE_INITIAL, reader.read_state)
279
- reader.read
280
- assert_equal(XML::Reader::MODE_EOF, reader.read_state)
281
- end
282
-
283
- def test_bytes_consumed
284
- reader = XML::Reader.file(XML_FILE)
285
- reader.read
286
- assert_equal(416, reader.byte_consumed)
287
- end
288
-
289
- def test_node
290
- XML.default_line_numbers = true
291
- reader = XML::Reader.file(XML_FILE)
292
-
293
- # first try to get a node
294
- assert_nil(reader.node)
295
-
296
- reader.read
297
- assert_instance_of(XML::Node, reader.node)
298
- end
299
-
300
- def test_base_uri
301
- # UTF8:
302
- # ö - c3 b6 in hex, \303\266 in octal
303
- # ü - c3 bc in hex, \303\274 in octal
304
- xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><bands genre=\"metal\">\n <m\303\266tley_cr\303\274e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\303\266tley_cr\303\274e>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>"
305
- reader = XML::Reader.string(xml, :base_uri => "http://libxml.rubyforge.org")
306
-
307
- reader.read
308
- assert_equal(reader.base_uri, "http://libxml.rubyforge.org")
309
- assert_equal(::Encoding::UTF_8, reader.base_uri.encoding) if defined?(::Encoding)
310
- end
311
-
312
- def test_options
313
- xml = <<-EOS
314
- <!DOCTYPE foo [<!ENTITY foo 'bar'>]>
315
- <test>
316
- <cdata><![CDATA[something]]></cdata>
317
- <entity>&foo;</entity>
318
- </test>
319
- EOS
320
-
321
- # Parse normally
322
- reader = XML::Reader.string(xml)
323
- reader.read # foo
324
- reader.read # test
325
- reader.read # text
326
- reader.read # cdata
327
- reader.read # cdata-section
328
- assert_equal(XML::Node::CDATA_SECTION_NODE, reader.node_type)
329
-
330
- # Convert cdata section to text
331
- reader = XML::Reader.string(xml, :options => XML::Parser::Options::NOCDATA)
332
- reader.read # foo
333
- reader.read # test
334
- reader.read # text
335
- reader.read # cdata
336
- reader.read # cdata-section
337
- assert_equal(XML::Node::TEXT_NODE, reader.node_type)
338
- end
339
-
340
- def test_encoding
341
- # ISO_8859_1:
342
- # ö - f6 in hex, \366 in octal
343
- # ü - fc in hex, \374 in octal
344
- xml = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><bands genre=\"metal\">\n <m\366tley_cr\374e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\366tley_cr\374e>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>"
345
-
346
- reader = XML::Reader.string(xml, :encoding => XML::Encoding::ISO_8859_1)
347
- reader.read
348
-
349
- if defined?(Encoding)
350
- assert_equal(Encoding::ISO8859_1, reader.read_outer_xml.encoding)
351
- assert_equal(Encoding::ISO8859_1, reader.read_inner_xml.encoding)
352
- assert_equal(Encoding::ISO8859_1, reader.read_string.encoding)
353
-
354
- assert_equal("<bands genre=\"metal\">\n <m\xC3\xB6tley_cr\xC3\xBCe country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\xC3\xB6tley_cr\xC3\xBCe>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>".force_encoding(Encoding::ISO8859_1),
355
- reader.read_outer_xml)
356
- assert_equal("\n <m\xC3\xB6tley_cr\xC3\xBCe country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\xC3\xB6tley_cr\xC3\xBCe>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n".force_encoding(Encoding::ISO8859_1),
357
- reader.read_inner_xml)
358
- assert_equal("\n An American heavy metal band formed in Los Angeles, California in 1981.\n British heavy metal band formed in 1975.\n".force_encoding(Encoding::ISO8859_1),
359
- reader.read_string)
360
- else
361
- assert_equal("<bands genre=\"metal\">\n <m\303\266tley_cr\303\274e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\303\266tley_cr\303\274e>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>",
362
- reader.read_outer_xml)
363
- end
364
- end
365
-
366
- def test_invalid_encoding
367
- # ISO_8859_1:
368
- # ö - f6 in hex, \366 in octal
369
- # ü - fc in hex, \374 in octal
370
- xml = "<bands genre=\"metal\">\n <m\366tley_cr\374e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\366tley_cr\374e>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>"
371
-
372
- reader = XML::Reader.string(xml)
373
- error = assert_raise(XML::Error) do
374
- node = reader.read
375
- end
376
-
377
- assert_equal("Fatal error: Input is not proper UTF-8, indicate encoding !\nBytes: 0xF6 0x74 0x6C 0x65 at :2.",
378
- error.to_s)
379
-
380
- end
381
-
382
- def test_file_encoding
383
- reader = XML::Reader.file(XML_FILE)
384
- reader.read
385
- assert_equal(XML::Encoding::UTF_8, reader.encoding)
386
- assert_equal(Encoding::UTF_8, reader.value.encoding) if defined?(Encoding)
387
- end
388
-
389
- def test_string_encoding
390
- # ISO_8859_1:
391
- # ö - f6 in hex, \366 in octal
392
- # ü - fc in hex, \374 in octal
393
- xml = "<bands genre=\"metal\">\n <m\366tley_cr\374e country=\"us\">An American heavy metal band formed in Los Angeles, California in 1981.</m\366tley_cr\374e>\n <iron_maiden country=\"uk\">British heavy metal band formed in 1975.</iron_maiden>\n</bands>"
394
- reader = XML::Reader.string(xml, :encoding => XML::Encoding::ISO_8859_1)
395
- reader.read
396
-
397
- # Encoding is always null for strings, very annoying!
398
- assert_equal(reader.encoding, XML::Encoding::NONE)
399
- end
400
- end
data/test/tc_relaxng.rb DELETED
@@ -1,54 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require './test_helper'
4
-
5
- require 'test/unit'
6
-
7
- class TestRelaxNG < Test::Unit::TestCase
8
- def setup
9
- file = File.join(File.dirname(__FILE__), 'model/shiporder.xml')
10
- @doc = XML::Document.file(file)
11
- end
12
-
13
- def teardown
14
- @doc = nil
15
- end
16
-
17
- def relaxng
18
- document = XML::Document.file(File.join(File.dirname(__FILE__), 'model/shiporder.rng'))
19
- relaxng = XML::RelaxNG.document(document)
20
- end
21
-
22
- def test_from_doc
23
- assert_instance_of(XML::RelaxNG, relaxng)
24
- end
25
-
26
- def test_valid
27
- assert(@doc.validate_relaxng(relaxng))
28
- end
29
-
30
- def test_invalid
31
- new_node = XML::Node.new('invalid', 'this will mess up validation')
32
- @doc.root << new_node
33
-
34
- error = assert_raise(XML::Error) do
35
- @doc.validate_relaxng(relaxng)
36
- end
37
-
38
- assert_not_nil(error)
39
- assert_kind_of(XML::Error, error)
40
- assert(error.message.match(/Error: Did not expect element invalid there/))
41
- assert_equal(XML::Error::RELAXNGV, error.domain)
42
- assert_equal(XML::Error::LT_IN_ATTRIBUTE, error.code)
43
- assert_equal(XML::Error::ERROR, error.level)
44
- assert(error.file.match(/shiporder\.xml/))
45
- assert_nil(error.line)
46
- assert_equal('invalid', error.str1)
47
- assert_nil(error.str2)
48
- assert_nil(error.str3)
49
- assert_equal(0, error.int1)
50
- assert_equal(0, error.int2)
51
- assert_not_nil(error.node)
52
- assert_equal('invalid', error.node.name)
53
- end
54
- end
data/test/tc_schema.rb DELETED
@@ -1,162 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require './test_helper'
4
- require 'test/unit'
5
-
6
- class TestSchema < Test::Unit::TestCase
7
- def setup
8
- file = File.join(File.dirname(__FILE__), 'model/shiporder.xml')
9
- @doc = XML::Document.file(file)
10
- end
11
-
12
- def teardown
13
- @doc = nil
14
- end
15
-
16
- def schema
17
- document = XML::Document.file(File.join(File.dirname(__FILE__), 'model/shiporder.xsd'))
18
- XML::Schema.document(document)
19
- end
20
-
21
- def check_error(error)
22
- assert_not_nil(error)
23
- assert(error.message.match(/Error: Element 'invalid': This element is not expected. Expected is \( item \)/))
24
- assert_kind_of(XML::Error, error)
25
- assert_equal(XML::Error::SCHEMASV, error.domain)
26
- assert_equal(XML::Error::SCHEMAV_ELEMENT_CONTENT, error.code)
27
- assert_equal(XML::Error::ERROR, error.level)
28
- assert(error.file.match(/shiporder.xml/)) if error.file
29
- assert_nil(error.str1)
30
- assert_nil(error.str2)
31
- assert_nil(error.str3)
32
- assert_equal(0, error.int1)
33
- assert_equal(0, error.int2)
34
- end
35
-
36
- def test_load_from_doc
37
- assert_instance_of(XML::Schema, schema)
38
- end
39
-
40
- def test_doc_valid
41
- assert(@doc.validate_schema(schema))
42
- end
43
-
44
- def test_doc_invalid
45
- new_node = XML::Node.new('invalid', 'this will mess up validation')
46
- @doc.root << new_node
47
-
48
- error = assert_raise(XML::Error) do
49
- @doc.validate_schema(schema)
50
- end
51
-
52
- check_error(error)
53
- assert_nil(error.line)
54
- assert_not_nil(error.node)
55
- assert_equal('invalid', error.node.name)
56
- end
57
-
58
- def test_reader_valid
59
- reader = XML::Reader.string(@doc.to_s)
60
- assert(reader.schema_validate(schema))
61
-
62
- while reader.read
63
- end
64
- end
65
-
66
- def test_reader_invalid
67
- # Set error handler
68
- errors = Array.new
69
- XML::Error.set_handler do |error|
70
- errors << error
71
- end
72
-
73
- new_node = XML::Node.new('invalid', 'this will mess up validation')
74
- @doc.root << new_node
75
- reader = XML::Reader.string(@doc.to_s)
76
-
77
- # Set a schema
78
- assert(reader.schema_validate(schema))
79
-
80
- while reader.read
81
- end
82
-
83
- assert_equal(1, errors.length)
84
-
85
- error = errors.first
86
- check_error(error)
87
- assert_equal(21, error.line)
88
- ensure
89
- XML::Error.set_handler(&LibXML::XML::Error::VERBOSE_HANDLER)
90
- end
91
-
92
-
93
- # Schema meta-data tests
94
-
95
- def test_elements
96
- assert_instance_of(Hash, schema.elements)
97
- assert_equal(1, schema.elements.length)
98
- assert_instance_of(XML::Schema::Element, schema.elements['shiporder'])
99
- end
100
-
101
- def test_types
102
- assert_instance_of(Hash, schema.types)
103
- assert_equal(1, schema.types.length)
104
- assert_instance_of(XML::Schema::Type, schema.types['shiporder'])
105
- end
106
-
107
- def test_schema_type
108
- type = schema.types['shiporder']
109
-
110
- assert_equal('shiporder', type.name)
111
- assert_equal(nil, type.namespace)
112
- assert_equal("Shiporder type documentation", type.annotation)
113
- assert_instance_of(XML::Node, type.node)
114
- assert_equal(XML::Schema::Types::XML_SCHEMA_TYPE_COMPLEX, type.kind)
115
- assert_instance_of(XML::Schema::Type, type.base)
116
- assert_equal("anyType", type.base.name)
117
- assert_equal(XML::Schema::Types::XML_SCHEMA_TYPE_BASIC, type.base.kind)
118
-
119
- assert_instance_of(Hash, type.elements)
120
- assert_equal(3, type.elements.length)
121
- end
122
-
123
- def test_schema_element
124
- element = schema.types['shiporder'].elements['orderperson']
125
-
126
- assert_equal('orderperson', element.name)
127
- assert_equal(nil, element.namespace)
128
- assert_equal("orderperson element documentation", element.annotation)
129
- assert_equal(1, element.min_occurs)
130
- assert_equal(1, element.max_occurs)
131
-
132
-
133
- element = schema.types['shiporder'].elements['item']
134
- assert_equal(Float::INFINITY, element.max_occurs)
135
-
136
- element = schema.types['shiporder'].elements['item'].type.elements['note']
137
- assert_equal(0, element.min_occurs)
138
- assert_equal('string', element.type.name)
139
- end
140
-
141
- def test_schema_attributes
142
- type = schema.types['shiporder']
143
-
144
- assert_instance_of(Array, type.attributes)
145
- assert_equal(2, type.attributes.length)
146
- assert_instance_of(XML::Schema::Attribute, type.attributes.first)
147
- end
148
-
149
- def test_schema_attribute
150
- attribute = schema.types['shiporder'].attributes.first
151
-
152
- assert_equal("orderid", attribute.name)
153
- assert_equal(nil, attribute.namespace)
154
- assert_equal(1, attribute.occurs)
155
- assert_equal('string', attribute.type.name)
156
-
157
- attribute = schema.types['shiporder'].attributes[1]
158
- assert_equal(2, attribute.occurs)
159
- assert_equal('1', attribute.default)
160
- assert_equal('integer', attribute.type.name)
161
- end
162
- end