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
@@ -1,13 +1,12 @@
1
1
  # encoding: UTF-8
2
- require './test_helper'
3
- require 'test/unit'
2
+ require_relative './test_helper'
4
3
 
5
- class TestDocument < Test::Unit::TestCase
4
+ class TestDocument < Minitest::Test
6
5
  def setup
7
- xp = XML::Parser.string('<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>')
8
- assert_instance_of(XML::Parser, xp)
6
+ xp = LibXML::XML::Parser.string('<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>')
7
+ assert_instance_of(LibXML::XML::Parser, xp)
9
8
  @doc = xp.parse
10
- assert_instance_of(XML::Document, @doc)
9
+ assert_instance_of(LibXML::XML::Document, @doc)
11
10
  end
12
11
 
13
12
  def teardown
@@ -15,24 +14,24 @@ class TestDocument < Test::Unit::TestCase
15
14
  end
16
15
 
17
16
  def test_klass
18
- assert_instance_of(XML::Document, @doc)
17
+ assert_instance_of(LibXML::XML::Document, @doc)
19
18
  end
20
19
 
21
20
  def test_context
22
21
  context = @doc.context
23
- assert_instance_of(XML::XPath::Context, context)
22
+ assert_instance_of(LibXML::XML::XPath::Context, context)
24
23
  end
25
24
 
26
25
  def test_find
27
26
  set = @doc.find('/ruby_array/fixnum')
28
- assert_instance_of(XML::XPath::Object, set)
29
- assert_raise(NoMethodError) {
30
- xpt = set.xpath
27
+ assert_instance_of(LibXML::XML::XPath::Object, set)
28
+ assert_raises(NoMethodError) {
29
+ set.xpath
31
30
  }
32
31
  end
33
32
 
34
33
  def test_compression
35
- if XML.enabled_zlib?
34
+ if LibXML::XML.enabled_zlib?
36
35
  0.upto(9) do |i|
37
36
  assert_equal(i, @doc.compression = i)
38
37
  assert_equal(i, @doc.compression)
@@ -60,41 +59,41 @@ class TestDocument < Test::Unit::TestCase
60
59
  def test_version
61
60
  assert_equal('1.0', @doc.version)
62
61
 
63
- doc = XML::Document.new('6.9')
62
+ doc = LibXML::XML::Document.new('6.9')
64
63
  assert_equal('6.9', doc.version)
65
64
  end
66
65
 
67
66
  def test_write_root
68
- @doc.root = XML::Node.new('rubynet')
69
- assert_instance_of(XML::Node, @doc.root)
70
- assert_instance_of(XML::Document, @doc.root.doc)
67
+ @doc.root = LibXML::XML::Node.new('rubynet')
68
+ assert_instance_of(LibXML::XML::Node, @doc.root)
69
+ assert_instance_of(LibXML::XML::Document, @doc.root.doc)
71
70
  assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rubynet/>\n",
72
71
  @doc.to_s(:indent => false))
73
72
  end
74
73
 
75
74
  def test_doc_node_type
76
- assert_equal(XML::Node::DOCUMENT_NODE, XML::Document.new.node_type)
75
+ assert_equal(LibXML::XML::Node::DOCUMENT_NODE, LibXML::XML::Document.new.node_type)
77
76
  end
78
77
 
79
78
  def test_doc_node_type_name
80
- assert_equal('document_xml', XML::Document.new.node_type_name)
79
+ assert_equal('document_xml', LibXML::XML::Document.new.node_type_name)
81
80
  end
82
81
 
83
82
  def test_xhtml
84
- doc = XML::Document.new
83
+ doc = LibXML::XML::Document.new
85
84
  assert(!doc.xhtml?)
86
- XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil, doc, true
85
+ LibXML::XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil, doc, true
87
86
  assert(doc.xhtml?)
88
- end
87
+ end
89
88
 
90
89
  def test_document_root
91
90
  doc1 = LibXML::XML::Document.string("<one/>")
92
91
  doc2 = LibXML::XML::Document.string("<two/>")
93
92
 
94
- error = assert_raise(XML::Error) do
93
+ error = assert_raises(LibXML::XML::Error) do
95
94
  doc1.root = doc2.root
96
95
  end
97
- assert_equal(" Nodes belong to different documents. You must first import the node by calling XML::Document.import.",
96
+ assert_equal(" Nodes belong to different documents. You must first import the node by calling LibXML::XML::Document.import.",
98
97
  error.to_s)
99
98
 
100
99
  doc2.root << doc2.import(doc1.root)
@@ -106,16 +105,16 @@ class TestDocument < Test::Unit::TestCase
106
105
  end
107
106
 
108
107
  def test_import_node
109
- doc1 = XML::Parser.string('<nums><one></one></nums>').parse
110
- doc2 = XML::Parser.string('<nums><two></two></nums>').parse
108
+ doc1 = LibXML::XML::Parser.string('<nums><one></one></nums>').parse
109
+ doc2 = LibXML::XML::Parser.string('<nums><two></two></nums>').parse
111
110
 
112
111
  node = doc1.root.child
113
112
 
114
- error = assert_raise(XML::Error) do
113
+ error = assert_raises(LibXML::XML::Error) do
115
114
  doc2.root << node
116
115
  end
117
116
 
118
- assert_equal(" Nodes belong to different documents. You must first import the node by calling XML::Document.import.",
117
+ assert_equal(" Nodes belong to different documents. You must first import the node by calling LibXML::XML::Document.import.",
119
118
  error.to_s)
120
119
 
121
120
  doc2.root << doc2.import(node)
@@ -123,4 +122,11 @@ class TestDocument < Test::Unit::TestCase
123
122
  assert_equal("<nums><two/><one/></nums>",
124
123
  doc2.root.to_s(:indent => false))
125
124
  end
125
+
126
+ def test_nonet
127
+ xml_string = '<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>'
128
+ xml = LibXML::XML::Document.string(xml_string, options: LibXML::XML::Parser::Options::NONET)
129
+ file = File.join(File.dirname(__FILE__), 'model/atom.xml')
130
+ schema_document = LibXML::XML::Document.file(file, options: LibXML::XML::Parser::Options::NONET)
131
+ end
126
132
  end
@@ -0,0 +1,146 @@
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+ require 'tmpdir'
5
+
6
+ class TestDocumentWrite < Minitest::Test
7
+ def setup
8
+ @file_name = "model/bands.utf-8.xml"
9
+
10
+ # Strip spaces to make testing easier
11
+ LibXML::XML.default_keep_blanks = false
12
+ file = File.join(File.dirname(__FILE__), @file_name)
13
+ @doc = LibXML::XML::Document.file(file)
14
+ end
15
+
16
+ def teardown
17
+ LibXML::XML.default_keep_blanks = true
18
+ @doc = nil
19
+ end
20
+
21
+ # --- to_s tests ---
22
+ def test_to_s_default
23
+ # Default to_s has indentation
24
+ 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",
25
+ @doc.to_s)
26
+ end
27
+
28
+ def test_to_s_no_global_indentation
29
+ # No indentation due to global setting
30
+ LibXML::XML.indent_tree_output = false
31
+ value = @doc.to_s
32
+
33
+ assert_equal(Encoding::UTF_8, value.encoding)
34
+ 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",
35
+ value)
36
+ ensure
37
+ LibXML::XML.indent_tree_output = true
38
+ end
39
+
40
+ def test_to_s_no_indentation
41
+ # No indentation due to local setting
42
+ value = @doc.to_s(:indent => false)
43
+ assert_equal(Encoding::UTF_8, value.encoding)
44
+ 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",
45
+ value)
46
+ end
47
+
48
+ def test_to_s_encoding
49
+ # Test encodings
50
+
51
+ # UTF8:
52
+ # ö - c3 b6 in hex, \303\266 in octal
53
+ # ü - c3 bc in hex, \303\274 in octal
54
+ value = @doc.to_s(:encoding => LibXML::XML::Encoding::UTF_8)
55
+ assert_equal(Encoding::UTF_8, value.encoding)
56
+ 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",
57
+ value)
58
+
59
+ # ISO_8859_1:
60
+ # ö - f6 in hex, \366 in octal
61
+ # ü - fc in hex, \374 in octal
62
+ value = @doc.to_s(:encoding => LibXML::XML::Encoding::ISO_8859_1)
63
+ assert_equal(Encoding::ISO8859_1, value.encoding)
64
+ 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),
65
+ @doc.to_s(:encoding => LibXML::XML::Encoding::ISO_8859_1))
66
+
67
+ # Invalid encoding
68
+ error = assert_raises(ArgumentError) do
69
+ @doc.to_s(:encoding => -9999)
70
+ end
71
+ assert_equal('Unknown encoding value: -9999', error.to_s)
72
+ end
73
+
74
+ # --- save tests -----
75
+ def test_save_utf8
76
+ temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_utf8.xml")
77
+
78
+ bytes = @doc.save(temp_filename)
79
+ assert_equal(305, bytes)
80
+
81
+ contents = File.read(temp_filename, nil, nil, :encoding => Encoding::UTF_8)
82
+ assert_equal(Encoding::UTF_8, contents.encoding)
83
+ 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",
84
+ contents)
85
+ ensure
86
+ File.delete(temp_filename)
87
+ end
88
+
89
+ def test_save_utf8_no_indents
90
+ temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_utf8_no_indents.xml")
91
+
92
+ bytes = @doc.save(temp_filename, :indent => false)
93
+ assert_equal(298, bytes)
94
+
95
+ contents = File.read(temp_filename, nil, nil, :encoding => Encoding::UTF_8)
96
+ 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",
97
+ contents)
98
+ ensure
99
+ File.delete(temp_filename)
100
+ end
101
+
102
+ def test_save_iso_8859_1
103
+ temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_iso_8859_1.xml")
104
+ bytes = @doc.save(temp_filename, :encoding => LibXML::XML::Encoding::ISO_8859_1)
105
+ assert_equal(304, bytes)
106
+
107
+ contents = File.read(temp_filename, nil, nil, :encoding => Encoding::ISO8859_1)
108
+ assert_equal(Encoding::ISO8859_1, contents.encoding)
109
+ 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),
110
+ contents)
111
+ ensure
112
+ File.delete(temp_filename)
113
+ end
114
+
115
+ def test_save_iso_8859_1_no_indent
116
+ temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_iso_8859_1_no_indent.xml")
117
+ bytes = @doc.save(temp_filename, :indent => false, :encoding => LibXML::XML::Encoding::ISO_8859_1)
118
+ assert_equal(297, bytes)
119
+
120
+ contents = File.read(temp_filename, nil, nil, :encoding => Encoding::ISO8859_1)
121
+ assert_equal(Encoding::ISO8859_1, contents.encoding)
122
+ 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),
123
+ contents)
124
+ ensure
125
+ File.delete(temp_filename)
126
+ end
127
+
128
+ def test_thread_set_root
129
+ # Previously a segmentation fault occurred when running libxml in
130
+ # background threads.
131
+ thread = Thread.new do
132
+ 100000.times do |i|
133
+ document = LibXML::XML::Document.new
134
+ node = LibXML::XML::Node.new('test')
135
+ document.root = node
136
+ end
137
+ end
138
+ thread.join
139
+ assert(true)
140
+ end
141
+
142
+ # --- Debug ---
143
+ def test_debug
144
+ assert(@doc.debug)
145
+ end
146
+ end
@@ -1,12 +1,11 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require './test_helper'
3
+ require_relative './test_helper'
4
4
 
5
- require 'test/unit'
6
5
 
7
- class TestDtd < Test::Unit::TestCase
6
+ class TestDtd < Minitest::Test
8
7
  def setup
9
- xp = XML::Parser.string(<<-EOS)
8
+ xp = LibXML::XML::Parser.string(<<-EOS)
10
9
  <root>
11
10
  <head a="ee" id="1">Colorado</head>
12
11
  <descr>Lots of nice mountains</descr>
@@ -20,7 +19,7 @@ class TestDtd < Test::Unit::TestCase
20
19
  end
21
20
 
22
21
  def dtd
23
- XML::Dtd.new(<<-EOS)
22
+ LibXML::XML::Dtd.new(<<-EOS)
24
23
  <!ELEMENT root (head, descr)>
25
24
  <!ELEMENT head (#PCDATA)>
26
25
  <!ATTLIST head
@@ -32,64 +31,65 @@ class TestDtd < Test::Unit::TestCase
32
31
  end
33
32
 
34
33
  def test_internal_subset
35
- xhtml_dtd = XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil, nil, true
34
+ xhtml_dtd = LibXML::XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil, nil, true
36
35
  assert xhtml_dtd.name.nil?
37
36
  assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
38
37
  assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
39
38
  assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
40
39
 
41
- xhtml_dtd = XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", "xhtml1", nil, true
40
+ xhtml_dtd = LibXML::XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", "xhtml1", nil, true
42
41
  assert_equal "xhtml1", xhtml_dtd.name
43
42
  assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
44
43
  assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
45
44
  assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
46
- end
45
+ end
47
46
 
48
47
  def test_external_subset
49
- xhtml_dtd = XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil
48
+ xhtml_dtd = LibXML::XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil
50
49
  assert xhtml_dtd.name.nil?
51
50
  assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
52
51
  assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
53
52
  assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
54
53
 
55
- xhtml_dtd = XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", "xhtml1"
54
+ xhtml_dtd = LibXML::XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", "xhtml1"
56
55
  assert_equal "xhtml1", xhtml_dtd.name
57
56
  assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
58
57
  assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
59
58
  assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
60
- end
59
+ end
61
60
 
62
61
  def test_valid
63
62
  assert(@doc.validate(dtd))
64
63
  end
65
64
 
66
65
  def test_node_type
67
- assert_equal(XML::Node::DTD_NODE, dtd.node_type)
66
+ assert_equal(LibXML::XML::Node::DTD_NODE, dtd.node_type)
68
67
  end
69
68
 
70
69
  def test_invalid
71
- new_node = XML::Node.new('invalid', 'this will mess up validation')
70
+ new_node = LibXML::XML::Node.new('invalid', 'this will mess up validation')
72
71
  @doc.root << new_node
73
72
 
74
- error = assert_raise(XML::Error) do
73
+ error = assert_raises(LibXML::XML::Error) do
75
74
  @doc.validate(dtd)
76
75
  end
77
76
 
78
77
  # Check the error worked
79
- assert_not_nil(error)
80
- assert_kind_of(XML::Error, error)
78
+ refute_nil(error)
79
+ assert_kind_of(LibXML::XML::Error, error)
81
80
  assert_equal("Error: No declaration for element invalid.", error.message)
82
- assert_equal(XML::Error::VALID, error.domain)
83
- assert_equal(XML::Error::DTD_UNKNOWN_ELEM, error.code)
84
- assert_equal(XML::Error::ERROR, error.level)
81
+ assert_equal(LibXML::XML::Error::VALID, error.domain)
82
+ assert_equal(LibXML::XML::Error::DTD_UNKNOWN_ELEM, error.code)
83
+ assert_equal(LibXML::XML::Error::ERROR, error.level)
85
84
  assert_nil(error.file)
86
85
  assert_nil(error.line)
87
86
  assert_equal('invalid', error.str1)
88
- assert_equal('invalid', error.str2)
87
+ # Different answers across operating systems
88
+ # assert_nil(error.str2)
89
89
  assert_nil(error.str3)
90
90
  assert_equal(0, error.int1)
91
91
  assert_equal(0, error.int2)
92
- assert_not_nil(error.node)
92
+ refute_nil(error.node)
93
93
  assert_equal('invalid', error.node.name)
94
94
  end
95
95
 
@@ -102,28 +102,28 @@ class TestDtd < Test::Unit::TestCase
102
102
  EOS
103
103
 
104
104
  errors = Array.new
105
- XML::Error.set_handler do |error|
105
+ LibXML::XML::Error.set_handler do |error|
106
106
  errors << error
107
107
  end
108
108
 
109
- XML.default_load_external_dtd = false
110
- doc = XML::Parser.string(xml).parse
109
+ LibXML::XML.default_load_external_dtd = false
110
+ LibXML::XML::Parser.string(xml).parse
111
111
  assert_equal(0, errors.length)
112
112
 
113
113
  errors.clear
114
- XML.default_load_external_dtd = true
115
- doc = XML::Parser.string(xml).parse
114
+ LibXML::XML.default_load_external_dtd = true
115
+ LibXML::XML::Parser.string(xml).parse
116
116
  assert_equal(1, errors.length)
117
117
  assert_equal("Warning: failed to load external entity \"test.dtd\" at :1.",
118
118
  errors[0].to_s)
119
119
 
120
120
  errors = Array.new
121
- doc = XML::Parser.string(xml, :options => XML::Parser::Options::DTDLOAD).parse
121
+ LibXML::XML::Parser.string(xml, :options => LibXML::XML::Parser::Options::DTDLOAD).parse
122
122
  assert_equal(1, errors.length)
123
123
  assert_equal("Warning: failed to load external entity \"test.dtd\" at :1.",
124
124
  errors[0].to_s)
125
125
  ensure
126
- XML.default_load_external_dtd = false
127
- XML::Error.reset_handler
126
+ LibXML::XML.default_load_external_dtd = false
127
+ LibXML::XML::Error.reset_handler
128
128
  end
129
129
  end