libxml-ruby 5.0.4 → 5.0.6

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 (97) hide show
  1. checksums.yaml +4 -4
  2. data/HISTORY +17 -6
  3. data/README.rdoc +1 -1
  4. data/Rakefile +98 -98
  5. data/ext/libxml/extconf.h +1 -0
  6. data/ext/libxml/extconf.rb +5 -0
  7. data/ext/libxml/libxml.c +79 -79
  8. data/ext/libxml/ruby_xml.c +556 -556
  9. data/ext/libxml/ruby_xml_attr.c +333 -333
  10. data/ext/libxml/ruby_xml_attr.h +12 -12
  11. data/ext/libxml/ruby_xml_attr_decl.h +11 -11
  12. data/ext/libxml/ruby_xml_attributes.h +17 -17
  13. data/ext/libxml/ruby_xml_cbg.c +85 -85
  14. data/ext/libxml/ruby_xml_document.c +1129 -1129
  15. data/ext/libxml/ruby_xml_dtd.c +257 -257
  16. data/ext/libxml/ruby_xml_dtd.h +9 -9
  17. data/ext/libxml/ruby_xml_encoding.c +250 -250
  18. data/ext/libxml/ruby_xml_error.c +1003 -1003
  19. data/ext/libxml/ruby_xml_error.h +14 -14
  20. data/ext/libxml/ruby_xml_html_parser.c +91 -91
  21. data/ext/libxml/ruby_xml_html_parser.h +10 -10
  22. data/ext/libxml/ruby_xml_html_parser_context.c +351 -351
  23. data/ext/libxml/ruby_xml_html_parser_context.h +10 -10
  24. data/ext/libxml/ruby_xml_html_parser_options.c +48 -48
  25. data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
  26. data/ext/libxml/ruby_xml_input_cbg.c +188 -188
  27. data/ext/libxml/ruby_xml_input_cbg.h +20 -20
  28. data/ext/libxml/ruby_xml_io.c +47 -47
  29. data/ext/libxml/ruby_xml_io.h +10 -10
  30. data/ext/libxml/ruby_xml_namespace.c +151 -151
  31. data/ext/libxml/ruby_xml_namespace.h +10 -10
  32. data/ext/libxml/ruby_xml_namespaces.c +293 -293
  33. data/ext/libxml/ruby_xml_namespaces.h +9 -9
  34. data/ext/libxml/ruby_xml_node.h +13 -13
  35. data/ext/libxml/ruby_xml_parser.c +91 -91
  36. data/ext/libxml/ruby_xml_parser.h +10 -10
  37. data/ext/libxml/ruby_xml_parser_context.c +1009 -1009
  38. data/ext/libxml/ruby_xml_parser_context.h +10 -10
  39. data/ext/libxml/ruby_xml_parser_options.c +74 -74
  40. data/ext/libxml/ruby_xml_parser_options.h +10 -10
  41. data/ext/libxml/ruby_xml_reader.h +14 -14
  42. data/ext/libxml/ruby_xml_relaxng.h +8 -8
  43. data/ext/libxml/ruby_xml_sax2_handler.c +326 -326
  44. data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
  45. data/ext/libxml/ruby_xml_sax_parser.c +108 -108
  46. data/ext/libxml/ruby_xml_sax_parser.h +10 -10
  47. data/ext/libxml/ruby_xml_schema.h +25 -25
  48. data/ext/libxml/ruby_xml_schema_attribute.h +37 -37
  49. data/ext/libxml/ruby_xml_schema_element.h +11 -11
  50. data/ext/libxml/ruby_xml_schema_facet.c +50 -50
  51. data/ext/libxml/ruby_xml_schema_facet.h +9 -9
  52. data/ext/libxml/ruby_xml_schema_type.h +9 -9
  53. data/ext/libxml/ruby_xml_version.h +9 -9
  54. data/ext/libxml/ruby_xml_writer.c +1124 -1124
  55. data/ext/libxml/ruby_xml_writer.h +6 -6
  56. data/ext/libxml/ruby_xml_xinclude.c +20 -20
  57. data/ext/libxml/ruby_xml_xinclude.h +11 -11
  58. data/ext/libxml/ruby_xml_xpath.c +195 -195
  59. data/ext/libxml/ruby_xml_xpath.h +15 -15
  60. data/ext/libxml/ruby_xml_xpath_context.c +362 -362
  61. data/ext/libxml/ruby_xml_xpath_context.h +9 -9
  62. data/ext/libxml/ruby_xml_xpath_expression.h +10 -10
  63. data/ext/libxml/ruby_xml_xpath_object.h +17 -17
  64. data/lib/libxml/attr.rb +122 -122
  65. data/lib/libxml/attr_decl.rb +80 -80
  66. data/lib/libxml/attributes.rb +13 -13
  67. data/lib/libxml/document.rb +194 -194
  68. data/lib/libxml/error.rb +95 -95
  69. data/lib/libxml/hpricot.rb +77 -77
  70. data/lib/libxml/html_parser.rb +96 -96
  71. data/lib/libxml/namespace.rb +61 -61
  72. data/lib/libxml/namespaces.rb +37 -37
  73. data/lib/libxml/node.rb +323 -323
  74. data/lib/libxml/parser.rb +102 -102
  75. data/lib/libxml/sax_callbacks.rb +179 -179
  76. data/lib/libxml/sax_parser.rb +40 -40
  77. data/lib/libxml/tree.rb +28 -28
  78. data/lib/libxml-ruby.rb +2 -2
  79. data/lib/libxml.rb +4 -4
  80. data/lib/xml/libxml.rb +10 -10
  81. data/lib/xml.rb +13 -13
  82. data/libxml-ruby.gemspec +50 -49
  83. data/test/test_document.rb +140 -140
  84. data/test/test_document_write.rb +142 -142
  85. data/test/test_dtd.rb +126 -126
  86. data/test/test_encoding.rb +126 -126
  87. data/test/test_error.rb +197 -194
  88. data/test/test_helper.rb +21 -20
  89. data/test/test_namespace.rb +58 -58
  90. data/test/test_node.rb +235 -235
  91. data/test/test_node_write.rb +93 -93
  92. data/test/test_parser.rb +333 -333
  93. data/test/test_reader.rb +364 -364
  94. data/test/test_writer.rb +500 -468
  95. data/test/test_xml.rb +168 -168
  96. metadata +5 -5
  97. data/test/test.rb +0 -5
@@ -1,143 +1,143 @@
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
- file = File.join(File.dirname(__FILE__), @file_name)
11
- @doc = LibXML::XML::Document.file(file, options: LibXML::XML::Parser::Options::NOBLANKS)
12
- end
13
-
14
- def teardown
15
- @doc = nil
16
- end
17
-
18
- # --- to_s tests ---
19
- def test_to_s_default
20
- # Default to_s has indentation
21
- 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",
22
- @doc.to_s)
23
- end
24
-
25
- def test_to_s_no_global_indentation
26
- # No indentation due to global setting
27
- LibXML::XML.indent_tree_output = false
28
- value = @doc.to_s
29
-
30
- assert_equal(Encoding::UTF_8, value.encoding)
31
- 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",
32
- value)
33
- ensure
34
- LibXML::XML.indent_tree_output = true
35
- end
36
-
37
- def test_to_s_no_indentation
38
- # No indentation due to local setting
39
- value = @doc.to_s(:indent => false)
40
- assert_equal(Encoding::UTF_8, value.encoding)
41
- 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",
42
- value)
43
- end
44
-
45
- def test_to_s_encoding
46
- # Test encodings
47
-
48
- # UTF8:
49
- # ö - c3 b6 in hex, \303\266 in octal
50
- # ü - c3 bc in hex, \303\274 in octal
51
- value = @doc.to_s(:encoding => LibXML::XML::Encoding::UTF_8)
52
- assert_equal(Encoding::UTF_8, value.encoding)
53
- 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",
54
- value)
55
-
56
- # ISO_8859_1:
57
- # ö - f6 in hex, \366 in octal
58
- # ü - fc in hex, \374 in octal
59
- value = @doc.to_s(:encoding => LibXML::XML::Encoding::ISO_8859_1)
60
- assert_equal(Encoding::ISO8859_1, value.encoding)
61
- 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),
62
- @doc.to_s(:encoding => LibXML::XML::Encoding::ISO_8859_1))
63
-
64
- # Invalid encoding
65
- error = assert_raises(ArgumentError) do
66
- @doc.to_s(:encoding => -9999)
67
- end
68
- assert_equal('Unknown encoding value: -9999', error.to_s)
69
- end
70
-
71
- # --- save tests -----
72
- def test_save_utf8
73
- temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_utf8.xml")
74
-
75
- bytes = @doc.save(temp_filename)
76
- assert_equal(305, bytes)
77
-
78
- contents = File.read(temp_filename, nil, nil, :encoding => Encoding::UTF_8)
79
- assert_equal(Encoding::UTF_8, contents.encoding)
80
- 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",
81
- contents)
82
- ensure
83
- File.delete(temp_filename)
84
- end
85
-
86
- def test_save_utf8_no_indents
87
- temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_utf8_no_indents.xml")
88
-
89
- bytes = @doc.save(temp_filename, :indent => false)
90
- assert_equal(298, bytes)
91
-
92
- contents = File.read(temp_filename, nil, nil, :encoding => Encoding::UTF_8)
93
- 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",
94
- contents)
95
- ensure
96
- File.delete(temp_filename)
97
- end
98
-
99
- def test_save_iso_8859_1
100
- temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_iso_8859_1.xml")
101
- bytes = @doc.save(temp_filename, :encoding => LibXML::XML::Encoding::ISO_8859_1)
102
- assert_equal(304, bytes)
103
-
104
- contents = File.read(temp_filename, nil, nil, :encoding => Encoding::ISO8859_1)
105
- assert_equal(Encoding::ISO8859_1, contents.encoding)
106
- 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),
107
- contents)
108
- ensure
109
- File.delete(temp_filename)
110
- end
111
-
112
- def test_save_iso_8859_1_no_indent
113
- temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_iso_8859_1_no_indent.xml")
114
- bytes = @doc.save(temp_filename, :indent => false, :encoding => LibXML::XML::Encoding::ISO_8859_1)
115
- assert_equal(297, bytes)
116
-
117
- contents = File.read(temp_filename, nil, nil, :encoding => Encoding::ISO8859_1)
118
- assert_equal(Encoding::ISO8859_1, contents.encoding)
119
- 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),
120
- contents)
121
- ensure
122
- File.delete(temp_filename)
123
- end
124
-
125
- def test_thread_set_root
126
- # Previously a segmentation fault occurred when running libxml in
127
- # background threads.
128
- thread = Thread.new do
129
- 100000.times do |i|
130
- document = LibXML::XML::Document.new
131
- node = LibXML::XML::Node.new('test')
132
- document.root = node
133
- end
134
- end
135
- thread.join
136
- assert(true)
137
- end
138
-
139
- # --- Debug ---
140
- def test_debug
141
- assert(@doc.debug)
142
- end
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
+ file = File.join(File.dirname(__FILE__), @file_name)
11
+ @doc = LibXML::XML::Document.file(file, options: LibXML::XML::Parser::Options::NOBLANKS)
12
+ end
13
+
14
+ def teardown
15
+ @doc = nil
16
+ end
17
+
18
+ # --- to_s tests ---
19
+ def test_to_s_default
20
+ # Default to_s has indentation
21
+ 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",
22
+ @doc.to_s)
23
+ end
24
+
25
+ def test_to_s_no_global_indentation
26
+ # No indentation due to global setting
27
+ LibXML::XML.indent_tree_output = false
28
+ value = @doc.to_s
29
+
30
+ assert_equal(Encoding::UTF_8, value.encoding)
31
+ 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",
32
+ value)
33
+ ensure
34
+ LibXML::XML.indent_tree_output = true
35
+ end
36
+
37
+ def test_to_s_no_indentation
38
+ # No indentation due to local setting
39
+ value = @doc.to_s(:indent => false)
40
+ assert_equal(Encoding::UTF_8, value.encoding)
41
+ 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",
42
+ value)
43
+ end
44
+
45
+ def test_to_s_encoding
46
+ # Test encodings
47
+
48
+ # UTF8:
49
+ # ö - c3 b6 in hex, \303\266 in octal
50
+ # ü - c3 bc in hex, \303\274 in octal
51
+ value = @doc.to_s(:encoding => LibXML::XML::Encoding::UTF_8)
52
+ assert_equal(Encoding::UTF_8, value.encoding)
53
+ 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",
54
+ value)
55
+
56
+ # ISO_8859_1:
57
+ # ö - f6 in hex, \366 in octal
58
+ # ü - fc in hex, \374 in octal
59
+ value = @doc.to_s(:encoding => LibXML::XML::Encoding::ISO_8859_1)
60
+ assert_equal(Encoding::ISO8859_1, value.encoding)
61
+ 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),
62
+ @doc.to_s(:encoding => LibXML::XML::Encoding::ISO_8859_1))
63
+
64
+ # Invalid encoding
65
+ error = assert_raises(ArgumentError) do
66
+ @doc.to_s(:encoding => -9999)
67
+ end
68
+ assert_equal('Unknown encoding value: -9999', error.to_s)
69
+ end
70
+
71
+ # --- save tests -----
72
+ def test_save_utf8
73
+ temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_utf8.xml")
74
+
75
+ bytes = @doc.save(temp_filename)
76
+ assert_equal(305, bytes)
77
+
78
+ contents = File.read(temp_filename, nil, nil, :encoding => Encoding::UTF_8)
79
+ assert_equal(Encoding::UTF_8, contents.encoding)
80
+ 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",
81
+ contents)
82
+ ensure
83
+ File.delete(temp_filename)
84
+ end
85
+
86
+ def test_save_utf8_no_indents
87
+ temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_utf8_no_indents.xml")
88
+
89
+ bytes = @doc.save(temp_filename, :indent => false)
90
+ assert_equal(298, bytes)
91
+
92
+ contents = File.read(temp_filename, nil, nil, :encoding => Encoding::UTF_8)
93
+ 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",
94
+ contents)
95
+ ensure
96
+ File.delete(temp_filename)
97
+ end
98
+
99
+ def test_save_iso_8859_1
100
+ temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_iso_8859_1.xml")
101
+ bytes = @doc.save(temp_filename, :encoding => LibXML::XML::Encoding::ISO_8859_1)
102
+ assert_equal(304, bytes)
103
+
104
+ contents = File.read(temp_filename, nil, nil, :encoding => Encoding::ISO8859_1)
105
+ assert_equal(Encoding::ISO8859_1, contents.encoding)
106
+ 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),
107
+ contents)
108
+ ensure
109
+ File.delete(temp_filename)
110
+ end
111
+
112
+ def test_save_iso_8859_1_no_indent
113
+ temp_filename = File.join(Dir.tmpdir, "tc_document_write_test_save_iso_8859_1_no_indent.xml")
114
+ bytes = @doc.save(temp_filename, :indent => false, :encoding => LibXML::XML::Encoding::ISO_8859_1)
115
+ assert_equal(297, bytes)
116
+
117
+ contents = File.read(temp_filename, nil, nil, :encoding => Encoding::ISO8859_1)
118
+ assert_equal(Encoding::ISO8859_1, contents.encoding)
119
+ 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),
120
+ contents)
121
+ ensure
122
+ File.delete(temp_filename)
123
+ end
124
+
125
+ def test_thread_set_root
126
+ # Previously a segmentation fault occurred when running libxml in
127
+ # background threads.
128
+ thread = Thread.new do
129
+ 100000.times do |i|
130
+ document = LibXML::XML::Document.new
131
+ node = LibXML::XML::Node.new('test')
132
+ document.root = node
133
+ end
134
+ end
135
+ thread.join
136
+ assert(true)
137
+ end
138
+
139
+ # --- Debug ---
140
+ def test_debug
141
+ assert(@doc.debug)
142
+ end
143
143
  end
data/test/test_dtd.rb CHANGED
@@ -1,126 +1,126 @@
1
- # encoding: UTF-8
2
-
3
- require_relative './test_helper'
4
-
5
-
6
- class TestDtd < Minitest::Test
7
- def setup
8
- xp = LibXML::XML::Parser.string(<<-EOS)
9
- <root>
10
- <head a="ee" id="1">Colorado</head>
11
- <descr>Lots of nice mountains</descr>
12
- </root>
13
- EOS
14
- @doc = xp.parse
15
- end
16
-
17
- def teardown
18
- @doc = nil
19
- end
20
-
21
- def dtd
22
- LibXML::XML::Dtd.new(<<-EOS)
23
- <!ELEMENT root (head, descr)>
24
- <!ELEMENT head (#PCDATA)>
25
- <!ATTLIST head
26
- id NMTOKEN #REQUIRED
27
- a CDATA #IMPLIED
28
- >
29
- <!ELEMENT descr (#PCDATA)>
30
- EOS
31
- end
32
-
33
- def test_internal_subset
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)
35
- assert xhtml_dtd.name.nil?
36
- assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
37
- assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
38
- assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
39
-
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)
41
- assert_equal "xhtml1", xhtml_dtd.name
42
- assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
43
- assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
44
- assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
45
- end
46
-
47
- def test_external_subset
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)
49
- assert xhtml_dtd.name.nil?
50
- assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
51
- assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
52
- assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
53
-
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")
55
- assert_equal "xhtml1", xhtml_dtd.name
56
- assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
57
- assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
58
- assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
59
- end
60
-
61
- def test_valid
62
- assert(@doc.validate(dtd))
63
- end
64
-
65
- def test_node_type
66
- assert_equal(LibXML::XML::Node::DTD_NODE, dtd.node_type)
67
- end
68
-
69
- def test_invalid
70
- new_node = LibXML::XML::Node.new('invalid', 'this will mess up validation')
71
- @doc.root << new_node
72
-
73
- error = assert_raises(LibXML::XML::Error) do
74
- @doc.validate(dtd)
75
- end
76
-
77
- # Check the error worked
78
- refute_nil(error)
79
- assert_kind_of(LibXML::XML::Error, error)
80
- assert_equal("Error: No declaration for element invalid.", error.message)
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)
84
- assert_nil(error.file)
85
- assert_nil(error.line)
86
- assert_equal('invalid', error.str1)
87
- # Different answers across operating systems
88
- # assert_nil(error.str2)
89
- assert_nil(error.str3)
90
- assert_equal(0, error.int1)
91
- assert_equal(0, error.int2)
92
- refute_nil(error.node)
93
- assert_equal('invalid', error.node.name)
94
- end
95
-
96
- def test_external_dtd
97
- xml = <<-EOS
98
- <!DOCTYPE test PUBLIC "-//TEST" "test.dtd" []>
99
- <test>
100
- <title>T1</title>
101
- </test>
102
- EOS
103
-
104
- errors = Array.new
105
- LibXML::XML::Error.set_handler do |error|
106
- errors << error
107
- end
108
-
109
- LibXML::XML::Parser.string(xml).parse
110
- assert_equal(0, errors.length)
111
-
112
- errors.clear
113
- LibXML::XML::Parser.string(xml, options: LibXML::XML::Parser::Options::DTDLOAD).parse
114
- assert_equal(1, errors.length)
115
- assert_equal("Warning: failed to load external entity \"test.dtd\" at :1.",
116
- errors[0].to_s)
117
-
118
- errors = Array.new
119
- LibXML::XML::Parser.string(xml, :options => LibXML::XML::Parser::Options::DTDLOAD).parse
120
- assert_equal(1, errors.length)
121
- assert_equal("Warning: failed to load external entity \"test.dtd\" at :1.",
122
- errors[0].to_s)
123
- ensure
124
- LibXML::XML::Error.reset_handler
125
- end
126
- end
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+
5
+
6
+ class TestDtd < Minitest::Test
7
+ def setup
8
+ xp = LibXML::XML::Parser.string(<<-EOS)
9
+ <root>
10
+ <head a="ee" id="1">Colorado</head>
11
+ <descr>Lots of nice mountains</descr>
12
+ </root>
13
+ EOS
14
+ @doc = xp.parse
15
+ end
16
+
17
+ def teardown
18
+ @doc = nil
19
+ end
20
+
21
+ def dtd
22
+ LibXML::XML::Dtd.new(<<-EOS)
23
+ <!ELEMENT root (head, descr)>
24
+ <!ELEMENT head (#PCDATA)>
25
+ <!ATTLIST head
26
+ id NMTOKEN #REQUIRED
27
+ a CDATA #IMPLIED
28
+ >
29
+ <!ELEMENT descr (#PCDATA)>
30
+ EOS
31
+ end
32
+
33
+ def test_internal_subset
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)
35
+ assert xhtml_dtd.name.nil?
36
+ assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
37
+ assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
38
+ assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
39
+
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)
41
+ assert_equal "xhtml1", xhtml_dtd.name
42
+ assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
43
+ assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
44
+ assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
45
+ end
46
+
47
+ def test_external_subset
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)
49
+ assert xhtml_dtd.name.nil?
50
+ assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
51
+ assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
52
+ assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
53
+
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")
55
+ assert_equal "xhtml1", xhtml_dtd.name
56
+ assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
57
+ assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
58
+ assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
59
+ end
60
+
61
+ def test_valid
62
+ assert(@doc.validate(dtd))
63
+ end
64
+
65
+ def test_node_type
66
+ assert_equal(LibXML::XML::Node::DTD_NODE, dtd.node_type)
67
+ end
68
+
69
+ def test_invalid
70
+ new_node = LibXML::XML::Node.new('invalid', 'this will mess up validation')
71
+ @doc.root << new_node
72
+
73
+ error = assert_raises(LibXML::XML::Error) do
74
+ @doc.validate(dtd)
75
+ end
76
+
77
+ # Check the error worked
78
+ refute_nil(error)
79
+ assert_kind_of(LibXML::XML::Error, error)
80
+ assert_equal("Error: No declaration for element invalid.", error.message)
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)
84
+ assert_nil(error.file)
85
+ assert_nil(error.line)
86
+ assert_equal('invalid', error.str1)
87
+ # Different answers across operating systems
88
+ # assert_nil(error.str2)
89
+ assert_nil(error.str3)
90
+ assert_equal(0, error.int1)
91
+ assert_equal(0, error.int2)
92
+ refute_nil(error.node)
93
+ assert_equal('invalid', error.node.name)
94
+ end
95
+
96
+ def test_external_dtd
97
+ xml = <<-EOS
98
+ <!DOCTYPE test PUBLIC "-//TEST" "test.dtd" []>
99
+ <test>
100
+ <title>T1</title>
101
+ </test>
102
+ EOS
103
+
104
+ errors = Array.new
105
+ LibXML::XML::Error.set_handler do |error|
106
+ errors << error
107
+ end
108
+
109
+ LibXML::XML::Parser.string(xml).parse
110
+ assert_equal(0, errors.length)
111
+
112
+ errors.clear
113
+ LibXML::XML::Parser.string(xml, options: LibXML::XML::Parser::Options::DTDLOAD).parse
114
+ assert_equal(1, errors.length)
115
+ assert_equal("Warning: failed to load external entity \"test.dtd\" at :1.",
116
+ errors[0].to_s)
117
+
118
+ errors = Array.new
119
+ LibXML::XML::Parser.string(xml, :options => LibXML::XML::Parser::Options::DTDLOAD).parse
120
+ assert_equal(1, errors.length)
121
+ assert_equal("Warning: failed to load external entity \"test.dtd\" at :1.",
122
+ errors[0].to_s)
123
+ ensure
124
+ LibXML::XML::Error.reset_handler
125
+ end
126
+ end