libxml-ruby 2.8.0 → 3.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (204) hide show
  1. checksums.yaml +5 -5
  2. data/HISTORY +842 -775
  3. data/LICENSE +20 -20
  4. data/MANIFEST +166 -166
  5. data/README.rdoc +217 -184
  6. data/Rakefile +90 -78
  7. data/ext/libxml/extconf.h +3 -0
  8. data/ext/libxml/extconf.rb +61 -116
  9. data/ext/libxml/libxml.c +80 -76
  10. data/ext/libxml/ruby_libxml.h +67 -75
  11. data/ext/libxml/ruby_xml.c +933 -893
  12. data/ext/libxml/ruby_xml.h +10 -10
  13. data/ext/libxml/ruby_xml_attr.c +333 -333
  14. data/ext/libxml/ruby_xml_attr.h +12 -12
  15. data/ext/libxml/ruby_xml_attr_decl.c +153 -153
  16. data/ext/libxml/ruby_xml_attr_decl.h +11 -11
  17. data/ext/libxml/ruby_xml_attributes.c +275 -275
  18. data/ext/libxml/ruby_xml_attributes.h +15 -15
  19. data/ext/libxml/ruby_xml_cbg.c +85 -85
  20. data/ext/libxml/ruby_xml_document.c +1123 -1147
  21. data/ext/libxml/ruby_xml_document.h +11 -11
  22. data/ext/libxml/ruby_xml_dtd.c +248 -268
  23. data/ext/libxml/ruby_xml_dtd.h +9 -9
  24. data/ext/libxml/ruby_xml_encoding.c +250 -260
  25. data/ext/libxml/ruby_xml_encoding.h +16 -19
  26. data/ext/libxml/ruby_xml_error.c +996 -996
  27. data/ext/libxml/ruby_xml_error.h +12 -12
  28. data/ext/libxml/ruby_xml_html_parser.c +89 -92
  29. data/ext/libxml/ruby_xml_html_parser.h +10 -10
  30. data/ext/libxml/ruby_xml_html_parser_context.c +337 -338
  31. data/ext/libxml/ruby_xml_html_parser_context.h +10 -10
  32. data/ext/libxml/ruby_xml_html_parser_options.c +46 -46
  33. data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
  34. data/ext/libxml/ruby_xml_input_cbg.c +191 -191
  35. data/ext/libxml/ruby_xml_input_cbg.h +20 -20
  36. data/ext/libxml/ruby_xml_io.c +47 -50
  37. data/ext/libxml/ruby_xml_io.h +10 -10
  38. data/ext/libxml/ruby_xml_namespace.c +153 -153
  39. data/ext/libxml/ruby_xml_namespace.h +10 -10
  40. data/ext/libxml/ruby_xml_namespaces.c +293 -293
  41. data/ext/libxml/ruby_xml_namespaces.h +9 -9
  42. data/ext/libxml/ruby_xml_node.c +1402 -1452
  43. data/ext/libxml/ruby_xml_node.h +13 -11
  44. data/ext/libxml/ruby_xml_parser.c +91 -94
  45. data/ext/libxml/ruby_xml_parser.h +12 -12
  46. data/ext/libxml/ruby_xml_parser_context.c +999 -1001
  47. data/ext/libxml/ruby_xml_parser_context.h +10 -10
  48. data/ext/libxml/ruby_xml_parser_options.c +66 -66
  49. data/ext/libxml/ruby_xml_parser_options.h +12 -12
  50. data/ext/libxml/ruby_xml_reader.c +1239 -1228
  51. data/ext/libxml/ruby_xml_reader.h +17 -17
  52. data/ext/libxml/ruby_xml_relaxng.c +110 -111
  53. data/ext/libxml/ruby_xml_relaxng.h +10 -10
  54. data/ext/libxml/ruby_xml_sax2_handler.c +326 -328
  55. data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
  56. data/ext/libxml/ruby_xml_sax_parser.c +116 -120
  57. data/ext/libxml/ruby_xml_sax_parser.h +10 -10
  58. data/ext/libxml/ruby_xml_schema.c +278 -301
  59. data/ext/libxml/ruby_xml_schema.h +809 -809
  60. data/ext/libxml/ruby_xml_schema_attribute.c +109 -109
  61. data/ext/libxml/ruby_xml_schema_attribute.h +15 -15
  62. data/ext/libxml/ruby_xml_schema_element.c +95 -94
  63. data/ext/libxml/ruby_xml_schema_element.h +14 -14
  64. data/ext/libxml/ruby_xml_schema_facet.c +52 -52
  65. data/ext/libxml/ruby_xml_schema_facet.h +13 -13
  66. data/ext/libxml/ruby_xml_schema_type.c +232 -259
  67. data/ext/libxml/ruby_xml_schema_type.h +9 -9
  68. data/ext/libxml/ruby_xml_version.h +9 -9
  69. data/ext/libxml/ruby_xml_writer.c +1133 -1137
  70. data/ext/libxml/ruby_xml_writer.h +10 -10
  71. data/ext/libxml/ruby_xml_xinclude.c +16 -16
  72. data/ext/libxml/ruby_xml_xinclude.h +11 -11
  73. data/ext/libxml/ruby_xml_xpath.c +194 -188
  74. data/ext/libxml/ruby_xml_xpath.h +13 -13
  75. data/ext/libxml/ruby_xml_xpath_context.c +360 -361
  76. data/ext/libxml/ruby_xml_xpath_context.h +9 -9
  77. data/ext/libxml/ruby_xml_xpath_expression.c +81 -81
  78. data/ext/libxml/ruby_xml_xpath_expression.h +10 -10
  79. data/ext/libxml/ruby_xml_xpath_object.c +338 -335
  80. data/ext/libxml/ruby_xml_xpath_object.h +17 -17
  81. data/ext/libxml/ruby_xml_xpointer.c +99 -99
  82. data/ext/libxml/ruby_xml_xpointer.h +11 -11
  83. data/ext/vc/libxml_ruby.sln +17 -15
  84. data/lib/libxml-ruby.rb +30 -0
  85. data/lib/libxml.rb +3 -33
  86. data/lib/libxml/node.rb +2 -78
  87. data/lib/libxml/parser.rb +0 -266
  88. data/lib/libxml/sax_parser.rb +0 -17
  89. data/lib/libxml/schema.rb +47 -66
  90. data/lib/libxml/schema/attribute.rb +19 -19
  91. data/lib/libxml/schema/element.rb +19 -27
  92. data/lib/libxml/schema/type.rb +21 -29
  93. data/libxml-ruby.gemspec +48 -44
  94. data/script/benchmark/depixelate +634 -634
  95. data/script/benchmark/hamlet.xml +9054 -9054
  96. data/script/benchmark/parsecount +170 -170
  97. data/script/benchmark/throughput +41 -41
  98. data/script/test +6 -6
  99. data/setup.rb +0 -1
  100. data/test/c14n/given/example-1.xml +14 -14
  101. data/test/c14n/given/example-2.xml +11 -11
  102. data/test/c14n/given/example-3.xml +18 -18
  103. data/test/c14n/given/example-4.xml +9 -9
  104. data/test/c14n/given/example-5.xml +12 -12
  105. data/test/c14n/given/example-6.xml +2 -2
  106. data/test/c14n/given/example-7.xml +11 -11
  107. data/test/c14n/given/example-8.xml +11 -11
  108. data/test/c14n/given/example-8.xpath +9 -9
  109. data/test/c14n/result/1-1-without-comments/example-1 +3 -3
  110. data/test/c14n/result/1-1-without-comments/example-2 +10 -10
  111. data/test/c14n/result/1-1-without-comments/example-3 +13 -13
  112. data/test/c14n/result/1-1-without-comments/example-4 +8 -8
  113. data/test/c14n/result/1-1-without-comments/example-5 +2 -2
  114. data/test/c14n/result/with-comments/example-1 +5 -5
  115. data/test/c14n/result/with-comments/example-2 +10 -10
  116. data/test/c14n/result/with-comments/example-3 +13 -13
  117. data/test/c14n/result/with-comments/example-4 +8 -8
  118. data/test/c14n/result/with-comments/example-5 +3 -3
  119. data/test/c14n/result/without-comments/example-1 +3 -3
  120. data/test/c14n/result/without-comments/example-2 +10 -10
  121. data/test/c14n/result/without-comments/example-3 +13 -13
  122. data/test/c14n/result/without-comments/example-4 +8 -8
  123. data/test/c14n/result/without-comments/example-5 +2 -2
  124. data/test/model/atom.xml +12 -12
  125. data/test/model/bands.iso-8859-1.xml +4 -4
  126. data/test/model/bands.utf-8.xml +4 -4
  127. data/test/model/bands.xml +4 -4
  128. data/test/model/books.xml +153 -153
  129. data/test/model/cwm_1_0.xml +11336 -0
  130. data/test/model/merge_bug_data.xml +58 -58
  131. data/test/model/ruby-lang.html +238 -238
  132. data/test/model/rubynet.xml +79 -79
  133. data/test/model/shiporder.rnc +28 -28
  134. data/test/model/shiporder.rng +86 -86
  135. data/test/model/shiporder.xml +22 -22
  136. data/test/model/shiporder.xsd +39 -39
  137. data/test/model/soap.xml +27 -27
  138. data/test/model/xinclude.xml +4 -4
  139. data/test/test.xml +2 -0
  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} +32 -27
  146. data/test/test_document_write.rb +146 -0
  147. data/test/{tc_dtd.rb → test_dtd.rb} +28 -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 +3 -10
  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} +41 -42
  167. data/test/{tc_properties.rb → test_properties.rb} +6 -7
  168. data/test/test_reader.rb +363 -0
  169. data/test/test_relaxng.rb +53 -0
  170. data/test/{tc_sax_parser.rb → test_sax_parser.rb} +36 -37
  171. data/test/{tc_schema.rb → test_schema.rb} +43 -37
  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 +262 -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 +117 -95
  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_xml.rb +0 -226
  204. data/test/tc_xpath_expression.rb +0 -38
@@ -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
@@ -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