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,23 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module LibXML
4
- module XML
5
- class Node
6
- def property(name)
7
- warn('Node#properties is deprecated. Use Node#[] instead.')
8
- self[name]
9
- end
10
-
11
- def properties
12
- warn('Node#properties is deprecated. Use Node#attributes instead.')
13
- self.attributes
14
- end
15
-
16
- def properties?
17
- warn('Node#properties? is deprecated. Use Node#attributes? instead.')
18
- self.attributes?
19
- end
20
- end
21
-
22
- end
23
- end
@@ -1,29 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module LibXML
4
- module XML
5
- class Reader
6
- def reset_error_handler
7
- warn('reset_error_handler is deprecated. Use Error.reset_handler instead')
8
- Error.reset_handler
9
- end
10
-
11
- def set_error_handler(&block)
12
- warn('set_error_handler is deprecated. Use Error.set_handler instead')
13
- Error.set_handler(&block)
14
- end
15
-
16
- # :enddoc:
17
-
18
- def self.walker(doc)
19
- warn("XML::Reader.walker is deprecated. Use XML::Reader.document instead")
20
- self.document(doc)
21
- end
22
-
23
- def self.data(string, options = nil)
24
- warn("XML::Reader.data is deprecated. Use XML::Reader.string instead")
25
- self.string(string, options)
26
- end
27
- end
28
- end
29
- end
@@ -1,16 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module LibXML
4
- module XML
5
- module XPath
6
- class Object
7
- alias :size :length
8
-
9
- def set
10
- warn("XPath::Object#set is deprecated. Simply use the XPath::Object API instead")
11
- self
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,21 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require './test_helper'
4
-
5
- 1.times do |count|
6
-
7
- xml_doc = XML::Document.new()
8
- xml_doc.encoding = "UTF-8"
9
- xml_doc.root = XML::Node.new("Request")
10
-
11
- 1000.times do |index|
12
- xml_doc.root << node = XML::Node.new("row")
13
- node["user_id"] = index.to_s
14
- node << "600445"
15
- end
16
-
17
- xml_str = xml_doc.to_s
18
- print "\r#{count}"
19
- $stdout.flush
20
- end
21
- puts "\n"
@@ -1,17 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require './test_helper'
4
-
5
- # This is related to bug 8337, complaint is on amd64/fbsd
6
- # unknown if it happens on other amd64/os combos
7
-
8
- Process.setrlimit(Process::RLIMIT_NOFILE,10005)
9
-
10
- (1..10000).each{|time|
11
- XML::Document.file(File.join(File.dirname(__FILE__),'ets_test.xml'))
12
- if time % 100 == 0
13
- print "\r#{time}"
14
- $stdout.flush
15
- end
16
- }
17
- puts "\n"
@@ -1,23 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require './test_helper'
4
-
5
- 100.times do |count|
6
-
7
- xml_doc = XML::Document.new()
8
- xml_doc.encoding = "UTF-8"
9
- xml_doc.root = XML::Node.new("Request")
10
-
11
- 1000.times do |index|
12
-
13
- xml_doc.root << node = XML::Node.new("row")
14
- node["user_id"] = index.to_s
15
- node << "600445"
16
-
17
- end
18
-
19
- xml_str = xml_doc.to_s
20
- print "\r#{count}"
21
- $stdout.flush
22
- end
23
- puts "\n"
@@ -1,28 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'libxml'
4
-
5
- 100.times do
6
- doc = XML::Document.new
7
- doc.encoding = 'UTF-8'
8
-
9
- root = XML::Node.new 'gpx'
10
- root['version'] = '1.0'
11
- root['creator'] = 'OpenStreetMap.org'
12
- root['xmlns'] = "http://www.topografix.com/GPX/1/0/"
13
-
14
- doc.root = root
15
-
16
- track = XML::Node.new 'trk'
17
- doc.root << track
18
-
19
- trkseg = XML::Node.new 'trkseg'
20
- track << trkseg
21
-
22
- 1.upto(1000) do |n|
23
- trkpt = XML::Node.new 'trkpt'
24
- trkpt['lat'] = n.to_s
25
- trkpt['lon'] = n.to_s
26
- trkseg << trkpt
27
- end
28
- end
@@ -1,23 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require './test_helper'
4
-
5
- # test of bug 13310, clears MEM2
6
-
7
- include GC
8
-
9
- inner = XML::Node.new('inner')
10
- save = nil
11
- 1.times do
12
- outer = XML::Node.new('outer')
13
- outer.child = inner
14
- 1.times do
15
- doc = XML::Document.new
16
- doc.root = outer
17
- # Uncomment the following line and it won't crash
18
- save = doc
19
- end
20
- garbage_collect
21
- end
22
- garbage_collect
23
- puts inner
@@ -1,2 +0,0 @@
1
- <?xml version="1.0"?>
2
- <test/>
@@ -1,11 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require './test_helper'
4
-
5
- 10_000.times {|n|
6
- j=XML::Node.new2(nil,"happy#{n}")
7
- 10.times {|r|
8
- j1=XML::Node.new("happy#{r}","farts")
9
- j.child=j1
10
- }
11
- }
@@ -1,13 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'xml/libxml'
4
- require 'test/unit'
5
-
6
- class TestDeprecatedRequire < Test::Unit::TestCase
7
- def test_basic
8
- xp = XML::Parser.string('<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>')
9
- assert_instance_of(XML::Parser, xp)
10
- @doc = xp.parse
11
- assert_instance_of(XML::Document, @doc)
12
- end
13
- end
@@ -1,196 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require './test_helper'
4
- require 'tmpdir'
5
- require 'test/unit'
6
-
7
- class TestDocumentWrite < Test::Unit::TestCase
8
- def setup
9
- @file_name = "model/bands.utf-8.xml"
10
-
11
- # Strip spaces to make testing easier
12
- XML.default_keep_blanks = false
13
- file = File.join(File.dirname(__FILE__), @file_name)
14
- @doc = XML::Document.file(file)
15
- end
16
-
17
- def teardown
18
- XML.default_keep_blanks = true
19
- @doc = nil
20
- end
21
-
22
- # --- to_s tests ---
23
- def test_to_s_default
24
- # Default to_s has indentation
25
- if defined?(Encoding)
26
- assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bands genre=\"metal\">\n <m\u00F6tley_cr\u00FCe country=\"us\">M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\u00F6tley_cr\u00FCe>\n <iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
27
- @doc.to_s)
28
- else
29
- assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bands genre=\"metal\">\n <m\303\266tley_cr\303\274e country=\"us\">M\303\266tley Cr\303\274e is an American heavy metal band formed in Los Angeles, California in 1981.</m\303\266tley_cr\303\274e>\n <iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
30
- @doc.to_s)
31
- end
32
- end
33
-
34
- def test_to_s_no_global_indentation
35
- # No indentation due to global setting
36
- XML.indent_tree_output = false
37
- value = @doc.to_s
38
-
39
- if defined?(Encoding)
40
- assert_equal(Encoding::UTF_8, value.encoding)
41
- assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bands genre=\"metal\">\n<m\u00F6tley_cr\u00FCe country=\"us\">M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\u00F6tley_cr\u00FCe>\n<iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
42
- value)
43
- else
44
- assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bands genre=\"metal\">\n<m\303\266tley_cr\303\274e country=\"us\">M\303\266tley Cr\303\274e is an American heavy metal band formed in Los Angeles, California in 1981.</m\303\266tley_cr\303\274e>\n<iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
45
- value)
46
- end
47
- ensure
48
- XML.indent_tree_output = true
49
- end
50
-
51
- def test_to_s_no_indentation
52
- # No indentation due to local setting
53
- value = @doc.to_s(:indent => false)
54
- if defined?(Encoding)
55
- assert_equal(Encoding::UTF_8, value.encoding)
56
- assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bands genre=\"metal\"><m\u00F6tley_cr\u00FCe country=\"us\">M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\u00F6tley_cr\u00FCe><iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden></bands>\n",
57
- value)
58
- else
59
- assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bands genre=\"metal\"><m\303\266tley_cr\303\274e country=\"us\">M\303\266tley Cr\303\274e is an American heavy metal band formed in Los Angeles, California in 1981.</m\303\266tley_cr\303\274e><iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden></bands>\n",
60
- value)
61
- end
62
- end
63
-
64
- def test_to_s_encoding
65
- # Test encodings
66
-
67
- # UTF8:
68
- # ö - c3 b6 in hex, \303\266 in octal
69
- # ü - c3 bc in hex, \303\274 in octal
70
- value = @doc.to_s(:encoding => XML::Encoding::UTF_8)
71
- if defined?(Encoding)
72
- assert_equal(Encoding::UTF_8, value.encoding)
73
- assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bands genre=\"metal\">\n <m\u00F6tley_cr\u00FCe country=\"us\">M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\u00F6tley_cr\u00FCe>\n <iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
74
- value)
75
- else
76
- assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<bands genre=\"metal\">\n <m\303\266tley_cr\303\274e country=\"us\">M\303\266tley Cr\303\274e is an American heavy metal band formed in Los Angeles, California in 1981.</m\303\266tley_cr\303\274e>\n <iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
77
- value)
78
- end
79
-
80
- # ISO_8859_1:
81
- # ö - f6 in hex, \366 in octal
82
- # ü - fc in hex, \374 in octal
83
- value = @doc.to_s(:encoding => XML::Encoding::ISO_8859_1)
84
- if defined?(Encoding)
85
- assert_equal(Encoding::ISO8859_1, value.encoding)
86
- assert_equal("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<bands genre=\"metal\">\n <m\xF6tley_cr\xFCe country=\"us\">M\xF6tley Cr\xFCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\xF6tley_cr\xFCe>\n <iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n".force_encoding(Encoding::ISO8859_1),
87
- @doc.to_s(:encoding => XML::Encoding::ISO_8859_1))
88
- else
89
- assert_equal("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<bands genre=\"metal\">\n <m\366tley_cr\374e country=\"us\">M\366tley Cr\374e is an American heavy metal band formed in Los Angeles, California in 1981.</m\366tley_cr\374e>\n <iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
90
- @doc.to_s(:encoding => XML::Encoding::ISO_8859_1))
91
- end
92
-
93
- # Invalid encoding
94
- error = assert_raise(ArgumentError) do
95
- @doc.to_s(:encoding => -9999)
96
- end
97
- assert_equal('Unknown encoding value: -9999', error.to_s)
98
- end
99
-
100
- # --- save tests -----
101
- def test_save_utf8
102
- temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_utf8.xml")
103
-
104
- bytes = @doc.save(temp_filename)
105
- assert_equal(305, bytes)
106
-
107
- if defined?(Encoding)
108
- contents = File.read(temp_filename, nil, nil, :encoding => Encoding::UTF_8)
109
- assert_equal(Encoding::UTF_8, contents.encoding)
110
- assert_equal("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<bands genre=\"metal\">\n <m\u00F6tley_cr\u00FCe country=\"us\">M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\u00F6tley_cr\u00FCe>\n <iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
111
- contents)
112
- else
113
- contents = File.read(temp_filename)
114
- assert_equal("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<bands genre=\"metal\">\n <m\303\266tley_cr\303\274e country=\"us\">M\303\266tley Cr\303\274e is an American heavy metal band formed in Los Angeles, California in 1981.</m\303\266tley_cr\303\274e>\n <iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
115
- contents)
116
- end
117
- ensure
118
- File.delete(temp_filename)
119
- end
120
-
121
- def test_save_utf8_no_indents
122
- temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_utf8_no_indents.xml")
123
-
124
- bytes = @doc.save(temp_filename, :indent => false)
125
- assert_equal(298, bytes)
126
-
127
- if defined?(Encoding)
128
- contents = File.read(temp_filename, nil, nil, :encoding => Encoding::UTF_8)
129
- assert_equal("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<bands genre=\"metal\"><m\u00F6tley_cr\u00FCe country=\"us\">M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\u00F6tley_cr\u00FCe><iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden></bands>\n",
130
- contents)
131
- else
132
- contents = File.read(temp_filename)
133
- assert_equal("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<bands genre=\"metal\"><m\303\266tley_cr\303\274e country=\"us\">M\303\266tley Cr\303\274e is an American heavy metal band formed in Los Angeles, California in 1981.</m\303\266tley_cr\303\274e><iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden></bands>\n",
134
- contents)
135
- end
136
- ensure
137
- File.delete(temp_filename)
138
- end
139
-
140
- def test_save_iso_8859_1
141
- temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_iso_8859_1.xml")
142
- bytes = @doc.save(temp_filename, :encoding => XML::Encoding::ISO_8859_1)
143
- assert_equal(304, bytes)
144
-
145
- if defined?(Encoding)
146
- contents = File.read(temp_filename, nil, nil, :encoding => Encoding::ISO8859_1)
147
- assert_equal(Encoding::ISO8859_1, contents.encoding)
148
- assert_equal("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<bands genre=\"metal\">\n <m\xF6tley_cr\xFCe country=\"us\">M\xF6tley Cr\xFCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\xF6tley_cr\xFCe>\n <iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n".force_encoding(Encoding::ISO8859_1),
149
- contents)
150
- else
151
- contents = File.read(temp_filename)
152
- assert_equal("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<bands genre=\"metal\">\n <m\xF6tley_cr\xFCe country=\"us\">M\xF6tley Cr\xFCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\xF6tley_cr\xFCe>\n <iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden>\n</bands>\n",
153
- contents)
154
- end
155
- ensure
156
- File.delete(temp_filename)
157
- end
158
-
159
- def test_save_iso_8859_1_no_indent
160
- temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_iso_8859_1_no_indent.xml")
161
- bytes = @doc.save(temp_filename, :indent => false, :encoding => XML::Encoding::ISO_8859_1)
162
- assert_equal(297, bytes)
163
-
164
- if defined?(Encoding)
165
- contents = File.read(temp_filename, nil, nil, :encoding => Encoding::ISO8859_1)
166
- assert_equal(Encoding::ISO8859_1, contents.encoding)
167
- assert_equal("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<bands genre=\"metal\"><m\xF6tley_cr\xFCe country=\"us\">M\xF6tley Cr\xFCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\xF6tley_cr\xFCe><iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden></bands>\n".force_encoding(Encoding::ISO8859_1),
168
- contents)
169
- else
170
- contents = File.read(temp_filename)
171
- assert_equal("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<bands genre=\"metal\"><m\xF6tley_cr\xFCe country=\"us\">M\xF6tley Cr\xFCe is an American heavy metal band formed in Los Angeles, California in 1981.</m\xF6tley_cr\xFCe><iron_maiden country=\"uk\">Iron Maiden is a British heavy metal band formed in 1975.</iron_maiden></bands>\n",
172
- contents)
173
- end
174
- ensure
175
- File.delete(temp_filename)
176
- end
177
-
178
- def test_thread_set_root
179
- # Previously a segmentation fault occurred when running libxml in
180
- # background threads.
181
- thread = Thread.new do
182
- 100000.times do |i|
183
- document = LibXML::XML::Document.new
184
- node = LibXML::XML::Node.new('test')
185
- document.root = node
186
- end
187
- end
188
- thread.join
189
- assert(true)
190
- end
191
-
192
- # --- Debug ---
193
- def test_debug
194
- assert(@doc.debug)
195
- end
196
- end
@@ -1,180 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require './test_helper'
4
- require 'test/unit'
5
- require 'stringio'
6
-
7
- class TestError < Test::Unit::TestCase
8
- def test_error_codes
9
- assert_equal(4, XML::Error::DTD)
10
- assert_equal(4, XML::Error.const_get('DTD'))
11
-
12
- assert_equal(4, XML::Error::DOCUMENT_EMPTY)
13
- assert_equal(4, XML::Error.const_get('DOCUMENT_EMPTY'))
14
- end
15
-
16
- def test_invalid_handler
17
- assert_raise(RuntimeError) do
18
- XML::Error.set_handler
19
- end
20
- end
21
-
22
- def test_handler
23
- exception = nil
24
- XML::Error.set_handler do |error|
25
- exception = error
26
- end
27
-
28
- # Raise the error
29
- error = assert_raise(XML::Error) do
30
- XML::Reader.string('<foo').read
31
- end
32
- assert_equal(exception, error)
33
-
34
- # Check the handler worked
35
- assert_not_nil(exception)
36
- assert_kind_of(XML::Error, exception)
37
- assert_equal("Fatal error: Couldn't find end of Start Tag foo at :1.", exception.message)
38
- assert_equal(XML::Error::PARSER, exception.domain)
39
- assert_equal(XML::Error::GT_REQUIRED, exception.code)
40
- assert_equal(XML::Error::FATAL, exception.level)
41
- assert_nil(exception.file)
42
- assert_equal(1, exception.line)
43
- assert_equal('foo', exception.str1)
44
- assert_nil(exception.str2)
45
- assert_nil(exception.str3)
46
- assert_equal(0, exception.int1)
47
- assert_equal(5, exception.int2)
48
- assert_nil(exception.node)
49
- end
50
-
51
- def test_reset_handler
52
- exception = nil
53
- XML::Error.set_handler do |error|
54
- exception = error
55
- end
56
-
57
- XML::Error.reset_handler
58
- XML::Reader.string('<foo')
59
- assert_nil(exception)
60
- end
61
-
62
- def test_get_handler
63
- assert_respond_to(XML::Error, :get_handler)
64
- assert_equal(0, XML::Error.method(:get_handler).arity)
65
-
66
- saved_handler = XML::Error.get_handler
67
- XML::Error.set_handler{ puts "New handler" }
68
- assert_not_equal(XML::Error.get_handler, saved_handler)
69
-
70
- XML::Error.set_handler(&saved_handler)
71
- assert_equal(XML::Error.get_handler, saved_handler)
72
- end
73
-
74
- def test_verbose_handler
75
- XML::Error.set_handler(&XML::Error::VERBOSE_HANDLER)
76
- output = StringIO.new
77
- original_stderr = Object::STDERR
78
-
79
- Object.const_set(:STDERR, output)
80
- begin
81
- assert_raise(XML::Error) do
82
- XML::Parser.string('<foo><bar/></foz>').parse
83
- end
84
- ensure
85
- Object.const_set(:STDERR, original_stderr)
86
- end
87
- assert_equal("Fatal error: Opening and ending tag mismatch: foo line 1 and foz at :1.\n", output.string)
88
- end
89
-
90
- def test_no_hanlder
91
- XML::Error.reset_handler
92
- output = StringIO.new
93
- original_stderr = Object::STDERR
94
-
95
- Object.const_set(:STDERR, output)
96
- begin
97
- assert_raise(XML::Error) do
98
- XML::Parser.string('<foo><bar/></foz>').parse
99
- end
100
- ensure
101
- Object.const_set(:STDERR, original_stderr)
102
- end
103
- assert_equal('', output.string)
104
- end
105
-
106
- def test_parse_error
107
- exception = assert_raise(XML::Error) do
108
- XML::Parser.string('<foo><bar/></foz>').parse
109
- end
110
-
111
- assert_instance_of(XML::Error, exception)
112
- assert_equal("Fatal error: Opening and ending tag mismatch: foo line 1 and foz at :1.", exception.message)
113
- assert_equal(XML::Error::PARSER, exception.domain)
114
- assert_equal(XML::Error::TAG_NAME_MISMATCH, exception.code)
115
- assert_equal(XML::Error::FATAL, exception.level)
116
- assert_nil(exception.file)
117
- assert_equal(1, exception.line)
118
- end
119
-
120
- def test_xpath_error
121
- doc = XML::Document.file(File.join(File.dirname(__FILE__), 'model/soap.xml'))
122
-
123
- exception = assert_raise(XML::Error) do
124
- doc.find('/foo[bar=test')
125
- end
126
-
127
- assert_instance_of(XML::Error, exception)
128
- assert_equal("Error: Invalid predicate.", exception.message)
129
- assert_equal(XML::Error::XPATH, exception.domain)
130
- assert_equal(XML::Error::XPATH_INVALID_PREDICATE_ERROR, exception.code)
131
- assert_equal(XML::Error::ERROR, exception.level)
132
- assert_nil(exception.file)
133
- assert_nil(nil)
134
- end
135
-
136
- def test_double_parse
137
- XML::Parser.register_error_handler(lambda {|msg| nil })
138
- parser = XML::Parser.string("<test>something</test>")
139
- parser.parse
140
-
141
- error = assert_raise(XML::Error) do
142
- # Try parsing a second time
143
- parser.parse
144
- end
145
-
146
- assert_equal(" LibXML::XML::Error.", error.to_s)
147
- end
148
-
149
- def test_libxml_parser_empty_string
150
- xp = XML::Parser.new
151
-
152
- error = assert_raise(TypeError) do
153
- xp.string = nil
154
- end
155
- assert_equal('wrong argument type nil (expected String)', error.to_s)
156
-
157
- error = assert_raise(ArgumentError) do
158
- xp.string = ''
159
- end
160
- assert_equal('Must specify a string with one or more characters', error.to_s)
161
- end
162
-
163
- def test_error_domain_to_s
164
- exception = assert_raise(XML::Error) do
165
- XML::Parser.string('<foo href="http://example.org/cgi?k1=v1&k2=v2"></foo>').parse
166
- end
167
-
168
- assert_equal(XML::Error::PARSER, exception.domain)
169
- assert_equal("PARSER",exception.domain_to_s)
170
- end
171
-
172
- def test_error_code_to_s
173
- exception = assert_raise(XML::Error) do
174
- XML::Parser.string('<foo href="http://example.org/cgi?k1=v1&k2=v2"></foo>').parse
175
- end
176
- assert_equal(XML::Error::ENTITYREF_SEMICOL_MISSING, exception.code)
177
- assert_equal("ENTITYREF_SEMICOL_MISSING",exception.code_to_s)
178
- end
179
-
180
- end