libxml-ruby 4.1.2 → 6.0.0

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 (172) hide show
  1. checksums.yaml +4 -4
  2. data/{HISTORY → CHANGELOG.md} +875 -887
  3. data/LICENSE +20 -20
  4. data/README.md +67 -0
  5. data/Rakefile +77 -98
  6. data/ext/libxml/extconf.rb +39 -20
  7. data/ext/libxml/libxml.c +67 -79
  8. data/ext/libxml/ruby_libxml.h +43 -44
  9. data/ext/libxml/ruby_xml.c +556 -899
  10. data/ext/libxml/ruby_xml.h +9 -10
  11. data/ext/libxml/ruby_xml_attr.c +338 -333
  12. data/ext/libxml/ruby_xml_attr.h +13 -12
  13. data/ext/libxml/ruby_xml_attr_decl.c +19 -12
  14. data/ext/libxml/ruby_xml_attr_decl.h +11 -11
  15. data/ext/libxml/ruby_xml_attributes.c +18 -9
  16. data/ext/libxml/ruby_xml_attributes.h +17 -15
  17. data/ext/libxml/ruby_xml_document.c +1142 -1129
  18. data/ext/libxml/ruby_xml_document.h +12 -11
  19. data/ext/libxml/ruby_xml_dtd.c +287 -248
  20. data/ext/libxml/ruby_xml_dtd.h +10 -9
  21. data/ext/libxml/ruby_xml_encoding.c +250 -250
  22. data/ext/libxml/ruby_xml_encoding.h +20 -18
  23. data/ext/libxml/ruby_xml_error.c +1003 -996
  24. data/ext/libxml/ruby_xml_error.h +14 -14
  25. data/ext/libxml/ruby_xml_html_parser.c +91 -91
  26. data/ext/libxml/ruby_xml_html_parser.h +10 -10
  27. data/ext/libxml/ruby_xml_html_parser_context.c +364 -337
  28. data/ext/libxml/ruby_xml_html_parser_context.h +11 -10
  29. data/ext/libxml/ruby_xml_html_parser_options.c +48 -48
  30. data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
  31. data/ext/libxml/ruby_xml_input_cbg.c +216 -188
  32. data/ext/libxml/ruby_xml_input_cbg.h +20 -20
  33. data/ext/libxml/ruby_xml_io.c +49 -47
  34. data/ext/libxml/ruby_xml_io.h +10 -10
  35. data/ext/libxml/ruby_xml_namespace.c +159 -154
  36. data/ext/libxml/ruby_xml_namespace.h +11 -10
  37. data/ext/libxml/ruby_xml_namespaces.c +313 -293
  38. data/ext/libxml/ruby_xml_namespaces.h +9 -9
  39. data/ext/libxml/ruby_xml_node.c +1433 -1398
  40. data/ext/libxml/ruby_xml_node.h +15 -13
  41. data/ext/libxml/ruby_xml_parser.c +91 -91
  42. data/ext/libxml/ruby_xml_parser.h +10 -10
  43. data/ext/libxml/ruby_xml_parser_context.c +1016 -1001
  44. data/ext/libxml/ruby_xml_parser_context.h +11 -10
  45. data/ext/libxml/ruby_xml_parser_options.c +74 -66
  46. data/ext/libxml/ruby_xml_parser_options.h +10 -10
  47. data/ext/libxml/ruby_xml_reader.c +40 -31
  48. data/ext/libxml/ruby_xml_reader.h +14 -14
  49. data/ext/libxml/ruby_xml_registry.c +31 -0
  50. data/ext/libxml/ruby_xml_registry.h +22 -0
  51. data/ext/libxml/ruby_xml_relaxng.c +21 -5
  52. data/ext/libxml/ruby_xml_relaxng.h +9 -8
  53. data/ext/libxml/ruby_xml_sax2_handler.c +326 -326
  54. data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
  55. data/ext/libxml/ruby_xml_sax_parser.c +108 -116
  56. data/ext/libxml/ruby_xml_sax_parser.h +10 -10
  57. data/ext/libxml/ruby_xml_schema.c +22 -15
  58. data/ext/libxml/ruby_xml_schema.h +26 -25
  59. data/ext/libxml/ruby_xml_schema_attribute.c +7 -7
  60. data/ext/libxml/ruby_xml_schema_attribute.h +37 -37
  61. data/ext/libxml/ruby_xml_schema_element.c +8 -8
  62. data/ext/libxml/ruby_xml_schema_element.h +11 -11
  63. data/ext/libxml/ruby_xml_schema_facet.c +50 -50
  64. data/ext/libxml/ruby_xml_schema_facet.h +9 -9
  65. data/ext/libxml/ruby_xml_schema_type.c +12 -19
  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 +183 -185
  69. data/ext/libxml/ruby_xml_writer.h +6 -6
  70. data/ext/libxml/ruby_xml_xinclude.c +20 -20
  71. data/ext/libxml/ruby_xml_xinclude.h +11 -11
  72. data/ext/libxml/ruby_xml_xpath.c +195 -195
  73. data/ext/libxml/ruby_xml_xpath.h +15 -15
  74. data/ext/libxml/ruby_xml_xpath_context.c +408 -362
  75. data/ext/libxml/ruby_xml_xpath_context.h +9 -9
  76. data/ext/libxml/ruby_xml_xpath_expression.c +12 -6
  77. data/ext/libxml/ruby_xml_xpath_expression.h +11 -10
  78. data/ext/libxml/ruby_xml_xpath_object.c +69 -54
  79. data/ext/libxml/ruby_xml_xpath_object.h +19 -17
  80. data/ext/vc/libxml_ruby/libxml_ruby.vcxproj +271 -0
  81. data/ext/xcode/libxml-ruby.xcodeproj/project.pbxproj +633 -0
  82. data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  83. data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  84. data/ext/xcode/libxml-ruby.xcodeproj/xcshareddata/xcschemes/libxml-ruby.xcscheme +80 -0
  85. data/lib/libxml/attr.rb +122 -122
  86. data/lib/libxml/attr_decl.rb +80 -80
  87. data/lib/libxml/attributes.rb +13 -13
  88. data/lib/libxml/document.rb +165 -194
  89. data/lib/libxml/error.rb +122 -95
  90. data/lib/libxml/html_parser.rb +80 -96
  91. data/lib/libxml/namespace.rb +61 -61
  92. data/lib/libxml/namespaces.rb +37 -37
  93. data/lib/libxml/node.rb +321 -323
  94. data/lib/libxml/parser.rb +94 -100
  95. data/lib/libxml/sax_callbacks.rb +179 -179
  96. data/lib/libxml/sax_parser.rb +40 -40
  97. data/lib/libxml/schema/attribute.rb +27 -19
  98. data/lib/libxml/schema/element.rb +20 -0
  99. data/lib/libxml/schema/type.rb +44 -21
  100. data/lib/libxml/schema.rb +47 -47
  101. data/lib/libxml/tree.rb +28 -28
  102. data/lib/libxml-ruby.rb +30 -30
  103. data/libxml-ruby.gemspec +46 -48
  104. data/test/c14n/result/1-1-without-comments/example-1 +3 -3
  105. data/test/c14n/result/1-1-without-comments/example-2 +10 -10
  106. data/test/c14n/result/1-1-without-comments/example-3 +13 -13
  107. data/test/c14n/result/1-1-without-comments/example-4 +8 -8
  108. data/test/c14n/result/1-1-without-comments/example-5 +2 -2
  109. data/test/c14n/result/with-comments/example-1 +5 -5
  110. data/test/c14n/result/with-comments/example-2 +10 -10
  111. data/test/c14n/result/with-comments/example-3 +13 -13
  112. data/test/c14n/result/with-comments/example-4 +8 -8
  113. data/test/c14n/result/with-comments/example-5 +3 -3
  114. data/test/c14n/result/without-comments/example-1 +3 -3
  115. data/test/c14n/result/without-comments/example-2 +10 -10
  116. data/test/c14n/result/without-comments/example-3 +13 -13
  117. data/test/c14n/result/without-comments/example-4 +8 -8
  118. data/test/c14n/result/without-comments/example-5 +2 -2
  119. data/test/test_attr.rb +179 -180
  120. data/test/test_attr_decl.rb +131 -131
  121. data/test/test_attributes.rb +135 -135
  122. data/test/test_canonicalize.rb +122 -120
  123. data/test/test_document.rb +138 -132
  124. data/test/test_document_write.rb +142 -145
  125. data/test/test_dtd.rb +134 -129
  126. data/test/test_encoding.rb +126 -129
  127. data/test/test_encoding_sax.rb +114 -114
  128. data/test/test_error.rb +197 -194
  129. data/test/test_helper.rb +21 -13
  130. data/test/test_html_parser.rb +166 -162
  131. data/test/test_html_parser_context.rb +22 -22
  132. data/test/test_input_callbacks.rb +36 -0
  133. data/test/test_namespace.rb +58 -60
  134. data/test/test_namespaces.rb +200 -200
  135. data/test/test_node.rb +251 -237
  136. data/test/test_node_cdata.rb +50 -50
  137. data/test/test_node_comment.rb +32 -32
  138. data/test/test_node_copy.rb +40 -40
  139. data/test/test_node_edit.rb +176 -158
  140. data/test/test_node_pi.rb +37 -37
  141. data/test/test_node_text.rb +69 -69
  142. data/test/test_node_write.rb +93 -96
  143. data/test/test_node_xlink.rb +28 -28
  144. data/test/test_parser.rb +297 -324
  145. data/test/test_parser_context.rb +198 -198
  146. data/test/test_properties.rb +38 -38
  147. data/test/test_reader.rb +413 -364
  148. data/test/test_relaxng.rb +59 -53
  149. data/test/test_sax_parser.rb +345 -326
  150. data/test/test_schema.rb +28 -0
  151. data/test/test_traversal.rb +152 -152
  152. data/test/test_writer.rb +469 -468
  153. data/test/test_xinclude.rb +20 -20
  154. data/test/test_xml.rb +164 -267
  155. data/test/test_xpath.rb +244 -244
  156. data/test/test_xpath_context.rb +87 -87
  157. data/test/test_xpath_expression.rb +37 -37
  158. metadata +49 -31
  159. data/README.rdoc +0 -217
  160. data/ext/libxml/extconf.h +0 -3
  161. data/ext/libxml/ruby_xml_cbg.c +0 -85
  162. data/lib/libxml/hpricot.rb +0 -78
  163. data/lib/libxml.rb +0 -5
  164. data/lib/xml/libxml.rb +0 -10
  165. data/lib/xml.rb +0 -14
  166. data/script/benchmark/depixelate +0 -634
  167. data/script/benchmark/hamlet.xml +0 -9055
  168. data/script/benchmark/parsecount +0 -170
  169. data/script/benchmark/sock_entries.xml +0 -507
  170. data/script/benchmark/throughput +0 -41
  171. data/script/test +0 -6
  172. data/test/test_deprecated_require.rb +0 -12
@@ -1,162 +1,166 @@
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
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_match(/Warning: failed to load.*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
+ if Gem::Version.new(LibXML::XML::LIBXML_VERSION) >= Gem::Version.new("2.14")
145
+ assert_nil(doc.root)
146
+ else
147
+ assert_equal("<p>#{html}</p>", doc.root.to_s)
148
+ end
149
+ end
150
+
151
+ def test_comment
152
+ doc = LibXML::XML::HTMLParser.string('<!-- stuff -->', :options => LibXML::XML::HTMLParser::Options::NOIMPLIED |
153
+ LibXML::XML::HTMLParser::Options::NOERROR |
154
+ LibXML::XML::HTMLParser::Options::NOWARNING |
155
+ LibXML::XML::HTMLParser::Options::RECOVER |
156
+ LibXML::XML::HTMLParser::Options::NONET)
157
+ assert(doc)
158
+ end
159
+
160
+ def test_open_many_files
161
+ file = File.expand_path(File.join(File.dirname(__FILE__), 'model/ruby-lang.html'))
162
+ 1000.times do
163
+ LibXML::XML::HTMLParser.file(file).parse
164
+ end
165
+ end
166
+ end
@@ -1,23 +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
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
23
  end
@@ -0,0 +1,36 @@
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+
5
+ class InputCallbacksGCStressRepro
6
+ def run
7
+ scheme_name = 'input-callback-gc://'
8
+
9
+ callback_class = Class.new do
10
+ def self.document_query(_uri)
11
+ '<root/>'
12
+ end
13
+ end
14
+ LibXML::XML::InputCallbacks.add_scheme(scheme_name, callback_class)
15
+ callback_class = nil
16
+
17
+ document = LibXML::XML::Document.file("#{scheme_name}fixture.xml")
18
+ document.root.name
19
+ ensure
20
+ LibXML::XML::InputCallbacks.remove_scheme(scheme_name)
21
+ end
22
+ end
23
+
24
+ class TestInputCallbacks < Minitest::Test
25
+ def setup
26
+ GC.stress = true
27
+ end
28
+
29
+ def teardown
30
+ GC.stress = false
31
+ end
32
+
33
+ def test_add_scheme_auto_registers_and_survives_gc_stress
34
+ assert_equal('root', InputCallbacksGCStressRepro.new.run)
35
+ end
36
+ end
@@ -1,60 +1,58 @@
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
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_match(/wrong argument type nil/, 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
+ LibXML::XML::Namespace.new(node, 'myname', 'http://www.mynamespace.com')
41
+ end
42
+
43
+ def test_eql
44
+ node = LibXML::XML::Node.new('Envelope')
45
+
46
+ assert(node.namespaces.namespace.eql?(node.namespaces.namespace))
47
+ end
48
+
49
+ def test_equal
50
+ node1 = LibXML::XML::Node.new('Envelope')
51
+ ns1 = LibXML::XML::Namespace.new(node1, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
52
+
53
+ node2 = LibXML::XML::Node.new('Envelope')
54
+ ns2 = LibXML::XML::Namespace.new(node2, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
55
+
56
+ assert(ns1 == ns2)
57
+ end
58
+ end