libxml-ruby 2.8.0 → 3.2.1

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 (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