libxml-ruby 2.8.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. checksums.yaml +5 -5
  2. data/HISTORY +842 -775
  3. data/LICENSE +20 -20
  4. data/MANIFEST +166 -166
  5. data/README.rdoc +217 -184
  6. data/Rakefile +90 -78
  7. data/ext/libxml/extconf.h +3 -0
  8. data/ext/libxml/extconf.rb +61 -116
  9. data/ext/libxml/libxml.c +80 -76
  10. data/ext/libxml/ruby_libxml.h +67 -75
  11. data/ext/libxml/ruby_xml.c +933 -893
  12. data/ext/libxml/ruby_xml.h +10 -10
  13. data/ext/libxml/ruby_xml_attr.c +333 -333
  14. data/ext/libxml/ruby_xml_attr.h +12 -12
  15. data/ext/libxml/ruby_xml_attr_decl.c +153 -153
  16. data/ext/libxml/ruby_xml_attr_decl.h +11 -11
  17. data/ext/libxml/ruby_xml_attributes.c +275 -275
  18. data/ext/libxml/ruby_xml_attributes.h +15 -15
  19. data/ext/libxml/ruby_xml_cbg.c +85 -85
  20. data/ext/libxml/ruby_xml_document.c +1123 -1147
  21. data/ext/libxml/ruby_xml_document.h +11 -11
  22. data/ext/libxml/ruby_xml_dtd.c +248 -268
  23. data/ext/libxml/ruby_xml_dtd.h +9 -9
  24. data/ext/libxml/ruby_xml_encoding.c +250 -260
  25. data/ext/libxml/ruby_xml_encoding.h +16 -19
  26. data/ext/libxml/ruby_xml_error.c +996 -996
  27. data/ext/libxml/ruby_xml_error.h +12 -12
  28. data/ext/libxml/ruby_xml_html_parser.c +89 -92
  29. data/ext/libxml/ruby_xml_html_parser.h +10 -10
  30. data/ext/libxml/ruby_xml_html_parser_context.c +337 -338
  31. data/ext/libxml/ruby_xml_html_parser_context.h +10 -10
  32. data/ext/libxml/ruby_xml_html_parser_options.c +46 -46
  33. data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
  34. data/ext/libxml/ruby_xml_input_cbg.c +191 -191
  35. data/ext/libxml/ruby_xml_input_cbg.h +20 -20
  36. data/ext/libxml/ruby_xml_io.c +47 -50
  37. data/ext/libxml/ruby_xml_io.h +10 -10
  38. data/ext/libxml/ruby_xml_namespace.c +153 -153
  39. data/ext/libxml/ruby_xml_namespace.h +10 -10
  40. data/ext/libxml/ruby_xml_namespaces.c +293 -293
  41. data/ext/libxml/ruby_xml_namespaces.h +9 -9
  42. data/ext/libxml/ruby_xml_node.c +1402 -1452
  43. data/ext/libxml/ruby_xml_node.h +13 -11
  44. data/ext/libxml/ruby_xml_parser.c +91 -94
  45. data/ext/libxml/ruby_xml_parser.h +12 -12
  46. data/ext/libxml/ruby_xml_parser_context.c +999 -1001
  47. data/ext/libxml/ruby_xml_parser_context.h +10 -10
  48. data/ext/libxml/ruby_xml_parser_options.c +66 -66
  49. data/ext/libxml/ruby_xml_parser_options.h +12 -12
  50. data/ext/libxml/ruby_xml_reader.c +1239 -1228
  51. data/ext/libxml/ruby_xml_reader.h +17 -17
  52. data/ext/libxml/ruby_xml_relaxng.c +110 -111
  53. data/ext/libxml/ruby_xml_relaxng.h +10 -10
  54. data/ext/libxml/ruby_xml_sax2_handler.c +326 -328
  55. data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
  56. data/ext/libxml/ruby_xml_sax_parser.c +116 -120
  57. data/ext/libxml/ruby_xml_sax_parser.h +10 -10
  58. data/ext/libxml/ruby_xml_schema.c +278 -301
  59. data/ext/libxml/ruby_xml_schema.h +809 -809
  60. data/ext/libxml/ruby_xml_schema_attribute.c +109 -109
  61. data/ext/libxml/ruby_xml_schema_attribute.h +15 -15
  62. data/ext/libxml/ruby_xml_schema_element.c +95 -94
  63. data/ext/libxml/ruby_xml_schema_element.h +14 -14
  64. data/ext/libxml/ruby_xml_schema_facet.c +52 -52
  65. data/ext/libxml/ruby_xml_schema_facet.h +13 -13
  66. data/ext/libxml/ruby_xml_schema_type.c +232 -259
  67. data/ext/libxml/ruby_xml_schema_type.h +9 -9
  68. data/ext/libxml/ruby_xml_version.h +9 -9
  69. data/ext/libxml/ruby_xml_writer.c +1133 -1137
  70. data/ext/libxml/ruby_xml_writer.h +10 -10
  71. data/ext/libxml/ruby_xml_xinclude.c +16 -16
  72. data/ext/libxml/ruby_xml_xinclude.h +11 -11
  73. data/ext/libxml/ruby_xml_xpath.c +194 -188
  74. data/ext/libxml/ruby_xml_xpath.h +13 -13
  75. data/ext/libxml/ruby_xml_xpath_context.c +360 -361
  76. data/ext/libxml/ruby_xml_xpath_context.h +9 -9
  77. data/ext/libxml/ruby_xml_xpath_expression.c +81 -81
  78. data/ext/libxml/ruby_xml_xpath_expression.h +10 -10
  79. data/ext/libxml/ruby_xml_xpath_object.c +338 -335
  80. data/ext/libxml/ruby_xml_xpath_object.h +17 -17
  81. data/ext/libxml/ruby_xml_xpointer.c +99 -99
  82. data/ext/libxml/ruby_xml_xpointer.h +11 -11
  83. data/ext/vc/libxml_ruby.sln +17 -15
  84. data/lib/libxml-ruby.rb +30 -0
  85. data/lib/libxml.rb +3 -33
  86. data/lib/libxml/node.rb +2 -78
  87. data/lib/libxml/parser.rb +0 -266
  88. data/lib/libxml/sax_parser.rb +0 -17
  89. data/lib/libxml/schema.rb +47 -66
  90. data/lib/libxml/schema/attribute.rb +19 -19
  91. data/lib/libxml/schema/element.rb +19 -27
  92. data/lib/libxml/schema/type.rb +21 -29
  93. data/libxml-ruby.gemspec +48 -44
  94. data/script/benchmark/depixelate +634 -634
  95. data/script/benchmark/hamlet.xml +9054 -9054
  96. data/script/benchmark/parsecount +170 -170
  97. data/script/benchmark/throughput +41 -41
  98. data/script/test +6 -6
  99. data/setup.rb +0 -1
  100. data/test/c14n/given/example-1.xml +14 -14
  101. data/test/c14n/given/example-2.xml +11 -11
  102. data/test/c14n/given/example-3.xml +18 -18
  103. data/test/c14n/given/example-4.xml +9 -9
  104. data/test/c14n/given/example-5.xml +12 -12
  105. data/test/c14n/given/example-6.xml +2 -2
  106. data/test/c14n/given/example-7.xml +11 -11
  107. data/test/c14n/given/example-8.xml +11 -11
  108. data/test/c14n/given/example-8.xpath +9 -9
  109. data/test/c14n/result/1-1-without-comments/example-1 +3 -3
  110. data/test/c14n/result/1-1-without-comments/example-2 +10 -10
  111. data/test/c14n/result/1-1-without-comments/example-3 +13 -13
  112. data/test/c14n/result/1-1-without-comments/example-4 +8 -8
  113. data/test/c14n/result/1-1-without-comments/example-5 +2 -2
  114. data/test/c14n/result/with-comments/example-1 +5 -5
  115. data/test/c14n/result/with-comments/example-2 +10 -10
  116. data/test/c14n/result/with-comments/example-3 +13 -13
  117. data/test/c14n/result/with-comments/example-4 +8 -8
  118. data/test/c14n/result/with-comments/example-5 +3 -3
  119. data/test/c14n/result/without-comments/example-1 +3 -3
  120. data/test/c14n/result/without-comments/example-2 +10 -10
  121. data/test/c14n/result/without-comments/example-3 +13 -13
  122. data/test/c14n/result/without-comments/example-4 +8 -8
  123. data/test/c14n/result/without-comments/example-5 +2 -2
  124. data/test/model/atom.xml +12 -12
  125. data/test/model/bands.iso-8859-1.xml +4 -4
  126. data/test/model/bands.utf-8.xml +4 -4
  127. data/test/model/bands.xml +4 -4
  128. data/test/model/books.xml +153 -153
  129. data/test/model/cwm_1_0.xml +11336 -0
  130. data/test/model/merge_bug_data.xml +58 -58
  131. data/test/model/ruby-lang.html +238 -238
  132. data/test/model/rubynet.xml +79 -79
  133. data/test/model/shiporder.rnc +28 -28
  134. data/test/model/shiporder.rng +86 -86
  135. data/test/model/shiporder.xml +22 -22
  136. data/test/model/shiporder.xsd +39 -39
  137. data/test/model/soap.xml +27 -27
  138. data/test/model/xinclude.xml +4 -4
  139. data/test/test.xml +2 -0
  140. data/test/{tc_attr.rb → test_attr.rb} +23 -25
  141. data/test/{tc_attr_decl.rb → test_attr_decl.rb} +13 -14
  142. data/test/{tc_attributes.rb → test_attributes.rb} +11 -18
  143. data/test/{tc_canonicalize.rb → test_canonicalize.rb} +36 -41
  144. data/test/test_deprecated_require.rb +12 -0
  145. data/test/{tc_document.rb → test_document.rb} +32 -27
  146. data/test/test_document_write.rb +146 -0
  147. data/test/{tc_dtd.rb → test_dtd.rb} +28 -29
  148. data/test/{tc_encoding.rb → test_encoding.rb} +129 -126
  149. data/test/{tc_encoding_sax.rb → test_encoding_sax.rb} +7 -6
  150. data/test/test_error.rb +178 -0
  151. data/test/test_helper.rb +3 -10
  152. data/test/test_html_parser.rb +162 -0
  153. data/test/test_html_parser_context.rb +23 -0
  154. data/test/test_namespace.rb +60 -0
  155. data/test/{tc_namespaces.rb → test_namespaces.rb} +34 -44
  156. data/test/{tc_node.rb → test_node.rb} +68 -47
  157. data/test/{tc_node_cdata.rb → test_node_cdata.rb} +12 -13
  158. data/test/{tc_node_comment.rb → test_node_comment.rb} +7 -8
  159. data/test/{tc_node_copy.rb → test_node_copy.rb} +4 -6
  160. data/test/{tc_node_edit.rb → test_node_edit.rb} +23 -41
  161. data/test/{tc_node_pi.rb → test_node_pi.rb} +37 -40
  162. data/test/{tc_node_text.rb → test_node_text.rb} +10 -12
  163. data/test/{tc_node_write.rb → test_node_write.rb} +18 -29
  164. data/test/test_node_xlink.rb +28 -0
  165. data/test/test_parser.rb +324 -0
  166. data/test/{tc_parser_context.rb → test_parser_context.rb} +41 -42
  167. data/test/{tc_properties.rb → test_properties.rb} +6 -7
  168. data/test/test_reader.rb +363 -0
  169. data/test/test_relaxng.rb +53 -0
  170. data/test/{tc_sax_parser.rb → test_sax_parser.rb} +36 -37
  171. data/test/{tc_schema.rb → test_schema.rb} +43 -37
  172. data/test/test_suite.rb +38 -40
  173. data/test/{tc_traversal.rb → test_traversal.rb} +5 -6
  174. data/test/{tc_writer.rb → test_writer.rb} +468 -448
  175. data/test/{tc_xinclude.rb → test_xinclude.rb} +4 -5
  176. data/test/test_xml.rb +262 -0
  177. data/test/{tc_xpath.rb → test_xpath.rb} +31 -32
  178. data/test/{tc_xpath_context.rb → test_xpath_context.rb} +8 -9
  179. data/test/test_xpath_expression.rb +37 -0
  180. data/test/{tc_xpointer.rb → test_xpointer.rb} +16 -18
  181. metadata +117 -95
  182. data/lib/libxml/ns.rb +0 -22
  183. data/lib/libxml/properties.rb +0 -23
  184. data/lib/libxml/reader.rb +0 -29
  185. data/lib/libxml/xpath_object.rb +0 -16
  186. data/test/etc_doc_to_s.rb +0 -21
  187. data/test/ets_doc_file.rb +0 -17
  188. data/test/ets_doc_to_s.rb +0 -23
  189. data/test/ets_gpx.rb +0 -28
  190. data/test/ets_node_gc.rb +0 -23
  191. data/test/ets_test.xml +0 -2
  192. data/test/ets_tsr.rb +0 -11
  193. data/test/tc_deprecated_require.rb +0 -13
  194. data/test/tc_document_write.rb +0 -196
  195. data/test/tc_error.rb +0 -180
  196. data/test/tc_html_parser.rb +0 -153
  197. data/test/tc_html_parser_context.rb +0 -24
  198. data/test/tc_namespace.rb +0 -62
  199. data/test/tc_node_xlink.rb +0 -29
  200. data/test/tc_parser.rb +0 -381
  201. data/test/tc_reader.rb +0 -400
  202. data/test/tc_relaxng.rb +0 -54
  203. data/test/tc_xml.rb +0 -226
  204. data/test/tc_xpath_expression.rb +0 -38
@@ -1,12 +1,13 @@
1
1
  # encoding: UTF-8
2
- require './test_helper'
3
- require 'test/unit'
2
+ require_relative './test_helper'
4
3
 
5
4
  class SaxEncodingCallbacks
6
5
  attr_reader :encoding
7
- include Test::Unit::Assertions
6
+ attr_accessor :assertions
7
+ include Minitest::Assertions
8
8
 
9
9
  def initialize
10
+ @assertions = 0
10
11
  @encoding = Encoding::UTF_8
11
12
  end
12
13
 
@@ -90,7 +91,7 @@ class SaxEncodingCallbacks
90
91
  end
91
92
  end
92
93
 
93
- class TestEncodingSax < Test::Unit::TestCase
94
+ class TestEncodingSax < Minitest::Test
94
95
  def setup
95
96
  Encoding.default_internal = nil
96
97
  end
@@ -101,13 +102,13 @@ class TestEncodingSax < Test::Unit::TestCase
101
102
  end
102
103
 
103
104
  def test_encoding_iso_8859_1
104
- parser = XML::SaxParser.file(file_for_encoding(Encoding::ISO_8859_1))
105
+ parser = LibXML::XML::SaxParser.file(file_for_encoding(Encoding::ISO_8859_1))
105
106
  parser.callbacks = SaxEncodingCallbacks.new
106
107
  parser.parse
107
108
  end
108
109
 
109
110
  def test_encoding_utf8
110
- parser = XML::SaxParser.file(file_for_encoding(Encoding::UTF_8))
111
+ parser = LibXML::XML::SaxParser.file(file_for_encoding(Encoding::UTF_8))
111
112
  parser.callbacks = SaxEncodingCallbacks.new
112
113
  parser.parse
113
114
  end
@@ -0,0 +1,178 @@
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+ require 'stringio'
5
+
6
+ class TestError < Minitest::Test
7
+ # def test_error_codes
8
+ # assert_equal(4, LibXML::XML::Error::DTD)
9
+ # assert_equal(4, LibXML::XML::Error.const_get('DTD'))
10
+ #
11
+ # assert_equal(4, LibXML::XML::Error::DOCUMENT_EMPTY)
12
+ # assert_equal(4, LibXML::XML::Error.const_get('DOCUMENT_EMPTY'))
13
+ # end
14
+ #
15
+ # def test_invalid_handler
16
+ # assert_raises(RuntimeError) do
17
+ # LibXML::XML::Error.set_handler
18
+ # end
19
+ # end
20
+ #
21
+ # def test_handler
22
+ # exception = nil
23
+ # LibXML::XML::Error.set_handler do |error|
24
+ # exception = error
25
+ # end
26
+ #
27
+ # # Raise the error
28
+ # error = assert_raises(LibXML::XML::Error) do
29
+ # LibXML::XML::Reader.string('<foo').read
30
+ # end
31
+ # assert_equal(exception, error)
32
+ #
33
+ # # Check the handler worked
34
+ # refute_nil(exception)
35
+ # assert_kind_of(LibXML::XML::Error, exception)
36
+ # assert_equal("Fatal error: Couldn't find end of Start Tag foo at :1.", exception.message)
37
+ # assert_equal(LibXML::XML::Error::PARSER, exception.domain)
38
+ # assert_equal(LibXML::XML::Error::GT_REQUIRED, exception.code)
39
+ # assert_equal(LibXML::XML::Error::FATAL, exception.level)
40
+ # assert_nil(exception.file)
41
+ # assert_equal(1, exception.line)
42
+ # assert_equal('foo', exception.str1)
43
+ # assert_nil(exception.str2)
44
+ # assert_nil(exception.str3)
45
+ # assert_equal(0, exception.int1)
46
+ # assert_equal(5, exception.int2)
47
+ # assert_nil(exception.node)
48
+ # end
49
+ #
50
+ # def test_reset_handler
51
+ # exception = nil
52
+ # LibXML::XML::Error.set_handler do |error|
53
+ # exception = error
54
+ # end
55
+ #
56
+ # LibXML::XML::Error.reset_handler
57
+ # LibXML::XML::Reader.string('<foo')
58
+ # assert_nil(exception)
59
+ # end
60
+ #
61
+ # def test_get_handler
62
+ # assert_respond_to(LibXML::XML::Error, :get_handler)
63
+ # assert_equal(0, LibXML::XML::Error.method(:get_handler).arity)
64
+ #
65
+ # saved_handler = LibXML::XML::Error.get_handler
66
+ # LibXML::XML::Error.set_handler{ puts "New handler" }
67
+ # refute_equal(LibXML::XML::Error.get_handler, saved_handler)
68
+ #
69
+ # LibXML::XML::Error.set_handler(&saved_handler)
70
+ # assert_equal(LibXML::XML::Error.get_handler, saved_handler)
71
+ # end
72
+ #
73
+ # def test_verbose_handler
74
+ # LibXML::XML::Error.set_handler(&LibXML::XML::Error::VERBOSE_HANDLER)
75
+ # output = StringIO.new
76
+ # original_stderr = Object::STDERR
77
+ #
78
+ # Object.const_set(:STDERR, output)
79
+ # begin
80
+ # assert_raises(LibXML::XML::Error) do
81
+ # LibXML::XML::Parser.string('<foo><bar/></foz>').parse
82
+ # end
83
+ # ensure
84
+ # Object.const_set(:STDERR, original_stderr)
85
+ # end
86
+ # assert_equal("Fatal error: Opening and ending tag mismatch: foo line 1 and foz at :1.\n", output.string)
87
+ # end
88
+ #
89
+ # def test_no_hanlder
90
+ # LibXML::XML::Error.reset_handler
91
+ # output = StringIO.new
92
+ # original_stderr = Object::STDERR
93
+ #
94
+ # Object.const_set(:STDERR, output)
95
+ # begin
96
+ # assert_raises(LibXML::XML::Error) do
97
+ # LibXML::XML::Parser.string('<foo><bar/></foz>').parse
98
+ # end
99
+ # ensure
100
+ # Object.const_set(:STDERR, original_stderr)
101
+ # end
102
+ # assert_equal('', output.string)
103
+ # end
104
+ #
105
+ # def test_parse_error
106
+ # exception = assert_raises(LibXML::XML::Error) do
107
+ # LibXML::XML::Parser.string('<foo><bar/></foz>').parse
108
+ # end
109
+ #
110
+ # assert_instance_of(LibXML::XML::Error, exception)
111
+ # assert_equal("Fatal error: Opening and ending tag mismatch: foo line 1 and foz at :1.", exception.message)
112
+ # assert_equal(LibXML::XML::Error::PARSER, exception.domain)
113
+ # assert_equal(LibXML::XML::Error::TAG_NAME_MISMATCH, exception.code)
114
+ # assert_equal(LibXML::XML::Error::FATAL, exception.level)
115
+ # assert_nil(exception.file)
116
+ # assert_equal(1, exception.line)
117
+ # end
118
+ #
119
+ # def test_xpath_error
120
+ # doc = LibXML::XML::Document.file(File.join(File.dirname(__FILE__), 'model/soap.xml'))
121
+ #
122
+ # exception = assert_raises(LibXML::XML::Error) do
123
+ # doc.find('/foo[bar=test')
124
+ # end
125
+ #
126
+ # assert_instance_of(LibXML::XML::Error, exception)
127
+ # assert_equal("Error: Invalid predicate.", exception.message)
128
+ # assert_equal(LibXML::XML::Error::XPATH, exception.domain)
129
+ # assert_equal(LibXML::XML::Error::XPATH_INVALID_PREDICATE_ERROR, exception.code)
130
+ # assert_equal(LibXML::XML::Error::ERROR, exception.level)
131
+ # assert_nil(exception.file)
132
+ # assert_nil(nil)
133
+ # end
134
+
135
+ def test_double_parse
136
+ LibXML::XML::Parser.register_error_handler(lambda {|msg| nil })
137
+ parser = LibXML::XML::Parser.string("<test>something</test>")
138
+ parser.parse
139
+
140
+ error = assert_raises(LibXML::XML::Error) do
141
+ # Try parsing a second time
142
+ parser.parse
143
+ end
144
+
145
+ assert_equal(" LibXML::XML::Error.", error.to_s)
146
+ end
147
+
148
+ # def test_libxml_parser_empty_string
149
+ # xp = LibXML::XML::Parser.new
150
+ #
151
+ # error = assert_raises(TypeError) do
152
+ # xp.string = nil
153
+ # end
154
+ # assert_equal('wrong argument type nil (expected String)', error.to_s)
155
+ #
156
+ # error = assert_raises(ArgumentError) do
157
+ # xp.string = ''
158
+ # end
159
+ # assert_equal('Must specify a string with one or more characters', error.to_s)
160
+ # end
161
+ #
162
+ # def test_error_domain_to_s
163
+ # exception = assert_raises(LibXML::XML::Error) do
164
+ # LibXML::XML::Parser.string('<foo href="http://example.org/cgi?k1=v1&k2=v2"></foo>').parse
165
+ # end
166
+ #
167
+ # assert_equal(LibXML::XML::Error::PARSER, exception.domain)
168
+ # assert_equal("PARSER",exception.domain_to_s)
169
+ # end
170
+ #
171
+ # def test_error_code_to_s
172
+ # exception = assert_raises(LibXML::XML::Error) do
173
+ # LibXML::XML::Parser.string('<foo href="http://example.org/cgi?k1=v1&k2=v2"></foo>').parse
174
+ # end
175
+ # assert_equal(LibXML::XML::Error::ENTITYREF_SEMICOL_MISSING, exception.code)
176
+ # assert_equal("ENTITYREF_SEMICOL_MISSING",exception.code_to_s)
177
+ # end
178
+ end
@@ -2,13 +2,6 @@
2
2
 
3
3
  # To make testing/debugging easier, test within this source tree versus an installed gem
4
4
 
5
- dir = File.dirname(__FILE__)
6
- root = File.expand_path(File.join(dir, '..'))
7
- lib = File.expand_path(File.join(root, 'lib'))
8
- ext = File.expand_path(File.join(root, 'ext', 'libxml'))
9
-
10
- $LOAD_PATH << lib
11
- $LOAD_PATH << ext
12
-
13
- require 'xml'
14
-
5
+ require 'bundler/setup'
6
+ require 'minitest/autorun'
7
+ require 'libxml-ruby'
@@ -0,0 +1,162 @@
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+ require 'stringio'
5
+
6
+ class HTMLParserTest < Minitest::Test
7
+ def html_file
8
+ File.expand_path(File.join(File.dirname(__FILE__), 'model/ruby-lang.html'))
9
+ end
10
+
11
+ # ----- Sources ------
12
+ def test_file
13
+ xp = LibXML::XML::HTMLParser.file(html_file)
14
+ assert_instance_of(LibXML::XML::HTMLParser, xp)
15
+ doc = xp.parse
16
+ refute_nil(doc)
17
+ end
18
+
19
+ def test_noexistent_file
20
+ error = assert_raises(LibXML::XML::Error) do
21
+ LibXML::XML::HTMLParser.file('i_dont_exist.xml')
22
+ end
23
+
24
+ assert_equal('Warning: failed to load external entity "i_dont_exist.xml".', error.to_s)
25
+ end
26
+
27
+ def test_nil_file
28
+ error = assert_raises(TypeError) do
29
+ LibXML::XML::HTMLParser.file(nil)
30
+ end
31
+
32
+ assert_match(/nil into String/, error.to_s)
33
+ end
34
+
35
+ def test_io
36
+ File.open(html_file) do |io|
37
+ xp = LibXML::XML::HTMLParser.io(io)
38
+ assert_instance_of(LibXML::XML::HTMLParser, xp)
39
+
40
+ doc = xp.parse
41
+ assert_instance_of(LibXML::XML::Document, doc)
42
+ end
43
+ end
44
+
45
+ def test_io_gc
46
+ # Test that the reader keeps a reference
47
+ # to the io object
48
+ file = File.open(html_file)
49
+ parser = LibXML::XML::HTMLParser.io(file)
50
+ file = nil
51
+ GC.start
52
+ assert(parser.parse)
53
+ end
54
+
55
+ def test_nil_io
56
+ error = assert_raises(TypeError) do
57
+ LibXML::XML::HTMLParser.io(nil)
58
+ end
59
+
60
+ assert_equal("Must pass in an IO object", error.to_s)
61
+ end
62
+
63
+ def test_string_io
64
+ data = File.read(html_file)
65
+ io = StringIO.new(data)
66
+ xp = LibXML::XML::HTMLParser.io(io)
67
+ assert_instance_of(LibXML::XML::HTMLParser, xp)
68
+
69
+ doc = xp.parse
70
+ assert_instance_of(LibXML::XML::Document, doc)
71
+ end
72
+
73
+ def test_string
74
+ str = '<html><body><p>hi</p></body></html>'
75
+ xp = LibXML::XML::HTMLParser.string(str)
76
+
77
+ assert_instance_of(LibXML::XML::HTMLParser, xp)
78
+ assert_instance_of(LibXML::XML::HTMLParser, xp)
79
+
80
+ doc = xp.parse
81
+ assert_instance_of(LibXML::XML::Document, doc)
82
+ end
83
+
84
+ def test_nil_string
85
+ error = assert_raises(TypeError) do
86
+ LibXML::XML::HTMLParser.string(nil)
87
+ end
88
+
89
+ assert_equal("wrong argument type nil (expected String)", error.to_s)
90
+ end
91
+
92
+ def test_parse
93
+ html = <<-EOS
94
+ <html>
95
+ <head>
96
+ <meta name=keywords content=nasty>
97
+ </head>
98
+ <body>Hello<br>World</html>
99
+ EOS
100
+
101
+ parser = LibXML::XML::HTMLParser.string(html, :options => LibXML::XML::HTMLParser::Options::NOBLANKS)
102
+ doc = parser.parse
103
+ assert_instance_of LibXML::XML::Document, doc
104
+
105
+ root = doc.root
106
+ assert_instance_of LibXML::XML::Node, root
107
+ assert_equal 'html', root.name
108
+
109
+ head = root.child
110
+ assert_instance_of LibXML::XML::Node, head
111
+ assert_equal 'head', head.name
112
+
113
+ meta = head.child
114
+ assert_instance_of LibXML::XML::Node, meta
115
+ assert_equal 'meta', meta.name
116
+ assert_equal 'keywords', meta[:name]
117
+ assert_equal 'nasty', meta[:content]
118
+
119
+ body = head.next
120
+ assert_instance_of LibXML::XML::Node, body
121
+ assert_equal 'body', body.name
122
+
123
+ hello = body.child
124
+ # It appears that some versions of libxml2 add a layer of <p>
125
+ # cant figure our why or how, so this skips it if there
126
+ hello = hello.child if hello.name == "p"
127
+
128
+ assert_instance_of LibXML::XML::Node, hello
129
+ assert_equal 'Hello', hello.content
130
+
131
+ br = hello.next
132
+ assert_instance_of LibXML::XML::Node, br
133
+ assert_equal 'br', br.name
134
+
135
+ world = br.next
136
+ assert_instance_of LibXML::XML::Node, world
137
+ assert_equal 'World', world.content
138
+ end
139
+
140
+ def test_no_implied
141
+ html = "hello world"
142
+ parser = LibXML::XML::HTMLParser.string(html, :options => LibXML::XML::HTMLParser::Options::NOIMPLIED)
143
+ doc = parser.parse
144
+ assert_equal("<p>#{html}</p>", doc.root.to_s)
145
+ end
146
+
147
+ def test_comment
148
+ doc = LibXML::XML::HTMLParser.string('<!-- stuff -->', :options => LibXML::XML::HTMLParser::Options::NOIMPLIED |
149
+ LibXML::XML::HTMLParser::Options::NOERROR |
150
+ LibXML::XML::HTMLParser::Options::NOWARNING |
151
+ LibXML::XML::HTMLParser::Options::RECOVER |
152
+ LibXML::XML::HTMLParser::Options::NONET)
153
+ assert(doc)
154
+ end
155
+
156
+ def test_open_many_files
157
+ file = File.expand_path(File.join(File.dirname(__FILE__), 'model/ruby-lang.html'))
158
+ 1000.times do
159
+ LibXML::XML::HTMLParser.file(file).parse
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,23 @@
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+
5
+
6
+ class TestHtmlParserContext < Minitest::Test
7
+ def test_default_options
8
+ context = LibXML::XML::HTMLParser::Context.new
9
+ assert_equal(0, context.options)
10
+ end
11
+
12
+ def test_no_options
13
+ context = LibXML::XML::HTMLParser::Context.new
14
+ context.options = 0
15
+ assert_equal(0, context.options)
16
+ end
17
+
18
+ def test_options
19
+ context = LibXML::XML::HTMLParser::Context.new
20
+ context.options = LibXML::XML::HTMLParser::Options::NOERROR
21
+ assert_equal(LibXML::XML::HTMLParser::Options::NOERROR, context.options)
22
+ end
23
+ end
@@ -0,0 +1,60 @@
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+
5
+
6
+ class TestNS < Minitest::Test
7
+ def setup
8
+ file = File.join(File.dirname(__FILE__), 'model/soap.xml')
9
+ @doc = LibXML::XML::Document.file(file)
10
+ end
11
+
12
+ def teardown
13
+ @doc = nil
14
+ end
15
+
16
+ def test_create_ns
17
+ node = LibXML::XML::Node.new('foo')
18
+ ns = LibXML::XML::Namespace.new(node, 'my_namepace', 'http://www.mynamespace.com')
19
+ assert_equal(ns.prefix, 'my_namepace')
20
+ assert_equal(ns.href, 'http://www.mynamespace.com')
21
+ end
22
+
23
+ def test_create_default_ns
24
+ node = LibXML::XML::Node.new('foo')
25
+ ns = LibXML::XML::Namespace.new(node, nil, 'http://www.mynamespace.com')
26
+ assert_nil(ns.prefix)
27
+ assert_equal(ns.href, 'http://www.mynamespace.com')
28
+ end
29
+
30
+ def test_create_unbound_ns
31
+ error = assert_raises(TypeError) do
32
+ LibXML::XML::Namespace.new(nil, 'my_namepace', 'http://www.mynamespace.com')
33
+ end
34
+ assert_equal('wrong argument type nil (expected Data)', error.to_s)
35
+ end
36
+
37
+ def test_duplicate_ns
38
+ node = LibXML::XML::Node.new('foo')
39
+ LibXML::XML::Namespace.new(node, 'myname', 'http://www.mynamespace.com')
40
+ assert_raises(LibXML::XML::Error) do
41
+ LibXML::XML::Namespace.new(node, 'myname', 'http://www.mynamespace.com')
42
+ end
43
+ end
44
+
45
+ def test_eql
46
+ node = LibXML::XML::Node.new('Envelope')
47
+
48
+ assert(node.namespaces.namespace.eql?(node.namespaces.namespace))
49
+ end
50
+
51
+ def test_equal
52
+ node1 = LibXML::XML::Node.new('Envelope')
53
+ ns1 = LibXML::XML::Namespace.new(node1, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
54
+
55
+ node2 = LibXML::XML::Node.new('Envelope')
56
+ ns2 = LibXML::XML::Namespace.new(node2, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
57
+
58
+ assert(ns1 == ns2)
59
+ end
60
+ end