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,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
data/test/tc_error.rb DELETED
@@ -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
@@ -1,153 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require './test_helper'
4
- require 'stringio'
5
- require 'test/unit'
6
-
7
- class HTMLParserTest < Test::Unit::TestCase
8
- def html_file
9
- File.expand_path(File.join(File.dirname(__FILE__), 'model/ruby-lang.html'))
10
- end
11
-
12
- # ----- Sources ------
13
- def test_file
14
- xp = XML::HTMLParser.file(html_file)
15
- assert_instance_of(XML::HTMLParser, xp)
16
- doc = xp.parse
17
- assert_not_nil(doc)
18
- end
19
-
20
- def test_noexistent_file
21
- error = assert_raise(XML::Error) do
22
- XML::HTMLParser.file('i_dont_exist.xml')
23
- end
24
-
25
- assert_equal('Warning: failed to load external entity "i_dont_exist.xml".', error.to_s)
26
- end
27
-
28
- def test_nil_file
29
- error = assert_raise(TypeError) do
30
- XML::HTMLParser.file(nil)
31
- end
32
-
33
- assert_match(/nil into String/, error.to_s)
34
- end
35
-
36
- def test_io
37
- File.open(html_file) do |io|
38
- xp = XML::HTMLParser.io(io)
39
- assert_instance_of(XML::HTMLParser, xp)
40
-
41
- doc = xp.parse
42
- assert_instance_of(XML::Document, doc)
43
- end
44
- end
45
-
46
- def test_io_gc
47
- # Test that the reader keeps a reference
48
- # to the io object
49
- file = File.open(html_file)
50
- parser = XML::HTMLParser.io(file)
51
- file = nil
52
- GC.start
53
- assert(parser.parse)
54
- end
55
-
56
- def test_nil_io
57
- error = assert_raise(TypeError) do
58
- XML::HTMLParser.io(nil)
59
- end
60
-
61
- assert_equal("Must pass in an IO object", error.to_s)
62
- end
63
-
64
- def test_string_io
65
- data = File.read(html_file)
66
- io = StringIO.new(data)
67
- xp = XML::HTMLParser.io(io)
68
- assert_instance_of(XML::HTMLParser, xp)
69
-
70
- doc = xp.parse
71
- assert_instance_of(XML::Document, doc)
72
- end
73
-
74
- def test_string
75
- str = '<html><body><p>hi</p></body></html>'
76
- xp = XML::HTMLParser.string(str)
77
-
78
- assert_instance_of(XML::HTMLParser, xp)
79
- assert_instance_of(XML::HTMLParser, xp)
80
-
81
- doc = xp.parse
82
- assert_instance_of(XML::Document, doc)
83
- end
84
-
85
- def test_nil_string
86
- error = assert_raise(TypeError) do
87
- XML::HTMLParser.string(nil)
88
- end
89
-
90
- assert_equal("wrong argument type nil (expected String)", error.to_s)
91
- end
92
-
93
- def test_parse
94
- html = <<-EOS
95
- <html>
96
- <head>
97
- <meta name=keywords content=nasty>
98
- </head>
99
- <body>Hello<br>World</html>
100
- EOS
101
-
102
- parser = XML::HTMLParser.string(html, :options => XML::HTMLParser::Options::NOBLANKS)
103
- doc = parser.parse
104
- assert_instance_of XML::Document, doc
105
-
106
- root = doc.root
107
- assert_instance_of XML::Node, root
108
- assert_equal 'html', root.name
109
-
110
- head = root.child
111
- assert_instance_of XML::Node, head
112
- assert_equal 'head', head.name
113
-
114
- meta = head.child
115
- assert_instance_of XML::Node, meta
116
- assert_equal 'meta', meta.name
117
- assert_equal 'keywords', meta[:name]
118
- assert_equal 'nasty', meta[:content]
119
-
120
- body = head.next
121
- assert_instance_of XML::Node, body
122
- assert_equal 'body', body.name
123
-
124
- hello = body.child
125
- # It appears that some versions of libxml2 add a layer of <p>
126
- # cant figure our why or how, so this skips it if there
127
- hello = hello.child if hello.name == "p"
128
-
129
- assert_instance_of XML::Node, hello
130
- assert_equal 'Hello', hello.content
131
-
132
- br = hello.next
133
- assert_instance_of XML::Node, br
134
- assert_equal 'br', br.name
135
-
136
- world = br.next
137
- assert_instance_of XML::Node, world
138
- assert_equal 'World', world.content
139
- end
140
-
141
- def test_no_implied
142
- html = "hello world"
143
- parser = XML::HTMLParser.string(html, :options => XML::HTMLParser::Options::NOIMPLIED)
144
- doc = parser.parse
145
- assert_equal("<p>#{html}</p>", doc.root.to_s)
146
- end
147
-
148
- def test_open_many_files
149
- 1000.times do
150
- doc = XML::HTMLParser.file('model/ruby-lang.html').parse
151
- end
152
- end
153
- end
@@ -1,24 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require './test_helper'
4
-
5
- require 'test/unit'
6
-
7
- class TestHtmlParserContext < Test::Unit::TestCase
8
- def test_default_options
9
- context = XML::HTMLParser::Context.new
10
- assert_equal(0, context.options)
11
- end
12
-
13
- def test_no_options
14
- context = XML::HTMLParser::Context.new
15
- context.options = 0
16
- assert_equal(0, context.options)
17
- end
18
-
19
- def test_options
20
- context = XML::HTMLParser::Context.new
21
- context.options = XML::HTMLParser::Options::NOERROR
22
- assert_equal(XML::HTMLParser::Options::NOERROR, context.options)
23
- end
24
- end
data/test/tc_namespace.rb DELETED
@@ -1,62 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require './test_helper'
4
-
5
- require 'test/unit'
6
-
7
- class TestNS < Test::Unit::TestCase
8
- def setup
9
- file = File.join(File.dirname(__FILE__), 'model/soap.xml')
10
- @doc = XML::Document.file(file)
11
- end
12
-
13
- def teardown
14
- @doc = nil
15
- end
16
-
17
- def test_create_ns
18
- node = XML::Node.new('foo')
19
- ns = XML::Namespace.new(node, 'my_namepace', 'http://www.mynamespace.com')
20
- assert_equal(ns.prefix, 'my_namepace')
21
- assert_equal(ns.href, 'http://www.mynamespace.com')
22
- end
23
-
24
- def test_create_default_ns
25
- node = XML::Node.new('foo')
26
- ns = XML::Namespace.new(node, nil, 'http://www.mynamespace.com')
27
- assert_equal(ns.prefix, nil)
28
- assert_equal(ns.href, 'http://www.mynamespace.com')
29
- end
30
-
31
- def test_create_unbound_ns
32
- error = assert_raise(TypeError) do
33
- XML::Namespace.new(nil, 'my_namepace', 'http://www.mynamespace.com')
34
- end
35
- assert_equal('wrong argument type nil (expected Data)', error.to_s)
36
- end
37
-
38
- def test_duplicate_ns
39
- node = XML::Node.new('foo')
40
- XML::Namespace.new(node, 'myname', 'http://www.mynamespace.com')
41
- assert_raises(XML::Error) do
42
- XML::Namespace.new(node, 'myname', 'http://www.mynamespace.com')
43
- end
44
- end
45
-
46
- def test_eql
47
- node = XML::Node.new('Envelope')
48
- ns = XML::Namespace.new(node, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
49
-
50
- assert(node.namespaces.namespace.eql?(node.namespaces.namespace))
51
- end
52
-
53
- def test_equal
54
- node1 = XML::Node.new('Envelope')
55
- ns1 = XML::Namespace.new(node1, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
56
-
57
- node2 = XML::Node.new('Envelope')
58
- ns2 = XML::Namespace.new(node2, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
59
-
60
- assert(ns1 == ns2)
61
- end
62
- end
@@ -1,29 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- # $Id$
4
- require './test_helper'
5
-
6
- require 'test/unit'
7
-
8
- class TC_XML_Node_XLink < Test::Unit::TestCase
9
- def setup()
10
- xp = XML::Parser.string('<ruby_array xmlns:xlink="http://www.w3.org/1999/xlink/namespace/"><fixnum xlink:type="simple">one</fixnum></ruby_array>')
11
- doc = xp.parse
12
- assert_instance_of(XML::Document, doc)
13
- @root = doc.root
14
- assert_instance_of(XML::Node, @root)
15
- end
16
-
17
- def teardown()
18
- @root = nil
19
- end
20
-
21
- def test_xml_node_xlink()
22
- for elem in @root.find('fixnum')
23
- assert_instance_of(XML::Node, elem)
24
- assert_instance_of(TrueClass, elem.xlink?)
25
- assert_equal("simple", elem.xlink_type_name)
26
- assert_equal(XML::Node::XLINK_TYPE_SIMPLE, elem.xlink_type)
27
- end
28
- end
29
- end