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
data/test/test_node.rb CHANGED
@@ -1,237 +1,251 @@
1
- # encoding: UTF-8
2
-
3
- require_relative './test_helper'
4
-
5
- class TestNode < Minitest::Test
6
- def setup
7
- @file_name = "model/bands.utf-8.xml"
8
-
9
- # Strip spaces to make testing easier
10
- LibXML::XML.default_keep_blanks = false
11
- file = File.join(File.dirname(__FILE__), @file_name)
12
- @doc = LibXML::XML::Document.file(file)
13
- end
14
-
15
- def teardown
16
- LibXML::XML.default_keep_blanks = true
17
- @doc = nil
18
- end
19
-
20
- def nodes
21
- # Find all nodes with a country attributes
22
- @doc.find('*[@country]')
23
- end
24
-
25
- def test_doc_class
26
- assert_instance_of(LibXML::XML::Document, @doc)
27
- end
28
-
29
- def test_doc_node_type
30
- assert_equal LibXML::XML::Node::DOCUMENT_NODE, @doc.node_type
31
- end
32
-
33
- def test_root_class
34
- assert_instance_of(LibXML::XML::Node, @doc.root)
35
- end
36
-
37
- def test_root_node_type
38
- assert_equal LibXML::XML::Node::ELEMENT_NODE, @doc.root.node_type
39
- end
40
-
41
- def test_node_class
42
- for n in nodes
43
- assert_instance_of(LibXML::XML::Node, n)
44
- end
45
- end
46
-
47
- def test_context
48
- node = @doc.root
49
- context = node.context
50
- assert_instance_of(LibXML::XML::XPath::Context, context)
51
- end
52
-
53
- def test_find
54
- assert_instance_of(LibXML::XML::XPath::Object, self.nodes)
55
- end
56
-
57
- def test_node_child_get
58
- assert_instance_of(TrueClass, @doc.root.child?)
59
- assert_instance_of(LibXML::XML::Node, @doc.root.child)
60
-
61
- assert_equal(Encoding::UTF_8, @doc.root.child.name.encoding)
62
- assert_equal("m\u00F6tley_cr\u00FCe", @doc.root.child.name)
63
- end
64
-
65
- def test_node_doc
66
- for n in nodes
67
- assert_instance_of(LibXML::XML::Document, n.doc) if n.document?
68
- end
69
- end
70
-
71
- def test_name
72
- node = @doc.root.children.last
73
- assert_equal("iron_maiden", node.name)
74
- end
75
-
76
- def test_node_find
77
- nodes = @doc.root.find('./fixnum')
78
- for node in nodes
79
- assert_instance_of(LibXML::XML::Node, node)
80
- end
81
- end
82
-
83
- def test_equality
84
- node_a = @doc.find_first('*[@country]')
85
- node_b = @doc.root.child
86
-
87
- # On the ruby side these are different objects
88
- refute(node_a.equal?(node_b))
89
-
90
- # But they are the same underlying libxml node so specify they are equal
91
- assert(node_a == node_b)
92
- assert(node_a.eql?(node_b))
93
-
94
- file = File.join(File.dirname(__FILE__), @file_name)
95
- doc2 = LibXML::XML::Document.file(file)
96
-
97
- node_a2 = doc2.find_first('*[@country]')
98
-
99
- refute(node_a == node_a2)
100
- refute(node_a.eql?(node_a2))
101
- assert_equal(node_a.to_s, node_a2.to_s)
102
- refute(node_a.equal?(node_a2))
103
- end
104
-
105
- def test_equality_2
106
- parent = LibXML::XML::Node.new('parent')
107
- child = LibXML::XML::Node.new('child')
108
- parent << child
109
-
110
- node_a = child.parent
111
- node_b = child.parent
112
- # In this case the nodes are equal - the parent being the root
113
- assert(node_a.equal?(node_b))
114
- assert(node_a == node_b)
115
- assert(node_a.eql?(node_b))
116
- end
117
-
118
- def test_equality_nil
119
- node = @doc.root
120
- assert(node != nil)
121
- end
122
-
123
- def test_equality_wrong_type
124
- node = @doc.root
125
-
126
- assert_raises(TypeError) do
127
- assert(node != 'abc')
128
- end
129
- end
130
-
131
- def test_content
132
- node = @doc.root.last
133
- assert_equal("Iron Maiden is a British heavy metal band formed in 1975.",
134
- node.content)
135
- end
136
-
137
- def test_base
138
- doc = LibXML::XML::Parser.string('<person />').parse
139
- assert_nil(doc.root.base_uri)
140
- end
141
-
142
- # We use the same facility that libXSLT does here to disable output escaping.
143
- # This lets you specify that the node's content should be rendered unaltered
144
- # whenever it is being output. This is useful for things like <script> and
145
- # <style> nodes in HTML documents if you don't want to be forced to wrap them
146
- # in CDATA nodes. Or if you are sanitizing existing HTML documents and want
147
- # to preserve the content of any of the text nodes.
148
- #
149
- def test_output_escaping
150
- text = '<bad-script>if (a &lt; b || b &gt; c) { return "text"; }<stop/>return "&gt;&gt;&gt;snip&lt;&lt;&lt;";</bad-script>'
151
- node = LibXML::XML::Parser.string(text).parse.root
152
- assert_equal text, node.to_s
153
-
154
- text_noenc = '<bad-script>if (a < b || b > c) { return "text"; }<stop/>return ">>>snip<<<";</bad-script>'
155
- node.output_escaping = false
156
- assert_equal text_noenc, node.to_s
157
-
158
- node.output_escaping = true
159
- assert_equal text, node.to_s
160
-
161
- node.output_escaping = nil
162
- assert_equal text_noenc, node.to_s
163
-
164
- node.output_escaping = true
165
- assert_equal text, node.to_s
166
- end
167
-
168
- # Just a sanity check for output escaping.
169
- def test_output_escaping_sanity
170
- text = '<bad-script>if (a &lt; b || b &gt; c) { return "text"; }<stop/>return "&gt;&gt;&gt;snip&lt;&lt;&lt;";</bad-script>'
171
- node = LibXML::XML::Parser.string(text).parse.root
172
- affected = node.find('//text()')
173
-
174
- check_escaping = lambda do |flag|
175
- assert_equal('bad-script', node.name)
176
- assert_equal(flag, node.output_escaping?)
177
- affected.each do |x|
178
- assert_equal(flag ? 'text' : 'textnoenc', x.name)
179
- assert_equal(flag, x.output_escaping?)
180
- end
181
- end
182
-
183
- node.output_escaping = false
184
- check_escaping[false]
185
-
186
- node.output_escaping = true
187
- check_escaping[true]
188
-
189
- node.output_escaping = nil
190
- check_escaping[false]
191
-
192
- node.output_escaping = true
193
- check_escaping[true]
194
-
195
- affected.first.output_escaping = true
196
- affected.last.output_escaping = false
197
- assert node.output_escaping?.nil?
198
- end
199
-
200
- def test_space_preserve
201
- node = @doc.root
202
-
203
- node.space_preserve = false
204
- assert_equal LibXML::XML::Node::SPACE_DEFAULT, node.space_preserve
205
-
206
- node.space_preserve = true
207
- assert_equal LibXML::XML::Node::SPACE_PRESERVE, node.space_preserve
208
- end
209
-
210
- def test_empty
211
- text = '<name> </name>'
212
- doc = LibXML::XML::Parser.string(text).parse
213
-
214
- node = doc.root
215
- assert(!node.empty?)
216
-
217
- text_node = node.first
218
- assert(text_node.empty?)
219
- end
220
-
221
- def test_save_no_empty_tags
222
- node = LibXML::XML::Node.new('test')
223
- assert_equal '<test/>', node.to_s
224
-
225
- LibXML::XML.default_save_no_empty_tags = true
226
- assert_equal '<test></test>', node.to_s
227
-
228
- LibXML::XML.default_save_no_empty_tags = false
229
- end
230
-
231
- def test_set_content
232
- node = LibXML::XML::Node.new('test')
233
- node.content = "unescaped & string"
234
- assert_equal("unescaped & string", node.content)
235
- assert_equal("<test>unescaped &amp; string</test>", node.to_s)
236
- end
237
- end
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+
5
+ class TestNode < Minitest::Test
6
+ def setup
7
+ @file_name = "model/bands.utf-8.xml"
8
+
9
+ # Strip spaces to make testing easier
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
+ def nodes
19
+ # Find all nodes with a country attributes
20
+ @doc.find('*[@country]')
21
+ end
22
+
23
+ def test_doc_class
24
+ assert_instance_of(LibXML::XML::Document, @doc)
25
+ end
26
+
27
+ def test_doc_node_type
28
+ assert_equal LibXML::XML::Node::DOCUMENT_NODE, @doc.node_type
29
+ end
30
+
31
+ def test_root_class
32
+ assert_instance_of(LibXML::XML::Node, @doc.root)
33
+ end
34
+
35
+ def test_root_node_type
36
+ assert_equal LibXML::XML::Node::ELEMENT_NODE, @doc.root.node_type
37
+ end
38
+
39
+ def test_node_class
40
+ for n in nodes
41
+ assert_instance_of(LibXML::XML::Node, n)
42
+ end
43
+ end
44
+
45
+ def test_context
46
+ node = @doc.root
47
+ context = node.context
48
+ assert_instance_of(LibXML::XML::XPath::Context, context)
49
+ end
50
+
51
+ def test_find
52
+ assert_instance_of(LibXML::XML::XPath::Object, self.nodes)
53
+ end
54
+
55
+ def test_node_child_get
56
+ assert_instance_of(TrueClass, @doc.root.child?)
57
+ assert_instance_of(LibXML::XML::Node, @doc.root.child)
58
+
59
+ assert_equal(Encoding::UTF_8, @doc.root.child.name.encoding)
60
+ assert_equal("m\u00F6tley_cr\u00FCe", @doc.root.child.name)
61
+ end
62
+
63
+ def test_node_doc
64
+ for n in nodes
65
+ assert_instance_of(LibXML::XML::Document, n.doc) if n.document?
66
+ end
67
+ end
68
+
69
+ def test_name
70
+ node = @doc.root.children.last
71
+ assert_equal("iron_maiden", node.name)
72
+ end
73
+
74
+ def test_node_find
75
+ nodes = @doc.root.find('./fixnum')
76
+ for node in nodes
77
+ assert_instance_of(LibXML::XML::Node, node)
78
+ end
79
+ end
80
+
81
+ def test_equality
82
+ node_a = @doc.find_first('*[@country]')
83
+ node_b = @doc.root.child
84
+
85
+ # On the ruby side these are different objects
86
+ refute(node_a.equal?(node_b))
87
+
88
+ # But they are the same underlying libxml node so specify they are equal
89
+ assert(node_a == node_b)
90
+ assert(node_a.eql?(node_b))
91
+
92
+ file = File.join(File.dirname(__FILE__), @file_name)
93
+ doc2 = LibXML::XML::Document.file(file)
94
+
95
+ node_a2 = doc2.find_first('*[@country]')
96
+
97
+ refute(node_a == node_a2)
98
+ refute(node_a.eql?(node_a2))
99
+ assert_equal(node_a.to_s, node_a2.to_s)
100
+ refute(node_a.equal?(node_a2))
101
+ end
102
+
103
+ def test_equality_2
104
+ parent = LibXML::XML::Node.new('parent')
105
+ child = LibXML::XML::Node.new('child')
106
+ parent << child
107
+
108
+ node_a = child.parent
109
+ node_b = child.parent
110
+ # In this case the nodes are equal - the parent being the root
111
+ assert(node_a.equal?(node_b))
112
+ assert(node_a == node_b)
113
+ assert(node_a.eql?(node_b))
114
+ end
115
+
116
+ def test_equality_nil
117
+ node = @doc.root
118
+ assert(node != nil)
119
+ end
120
+
121
+ def test_equality_wrong_type
122
+ node = @doc.root
123
+
124
+ assert_raises(TypeError) do
125
+ assert(node != 'abc')
126
+ end
127
+ end
128
+
129
+ def test_content
130
+ node = @doc.root.last
131
+ assert_equal("Iron Maiden is a British heavy metal band formed in 1975.",
132
+ node.content)
133
+ end
134
+
135
+ def test_base
136
+ doc = LibXML::XML::Parser.string('<person />').parse
137
+ assert_nil(doc.root.base_uri)
138
+ end
139
+
140
+ # We use the same facility that libXSLT does here to disable output escaping.
141
+ # This lets you specify that the node's content should be rendered unaltered
142
+ # whenever it is being output. This is useful for things like <script> and
143
+ # <style> nodes in HTML documents if you don't want to be forced to wrap them
144
+ # in CDATA nodes. Or if you are sanitizing existing HTML documents and want
145
+ # to preserve the content of any of the text nodes.
146
+ #
147
+ def test_output_escaping
148
+ text = '<bad-script>if (a &lt; b || b &gt; c) { return "text"; }<stop/>return "&gt;&gt;&gt;snip&lt;&lt;&lt;";</bad-script>'
149
+ node = LibXML::XML::Parser.string(text).parse.root
150
+ assert_equal text, node.to_s
151
+
152
+ text_noenc = '<bad-script>if (a < b || b > c) { return "text"; }<stop/>return ">>>snip<<<";</bad-script>'
153
+ node.output_escaping = false
154
+ assert_equal text_noenc, node.to_s
155
+
156
+ node.output_escaping = true
157
+ assert_equal text, node.to_s
158
+
159
+ node.output_escaping = nil
160
+ assert_equal text_noenc, node.to_s
161
+
162
+ node.output_escaping = true
163
+ assert_equal text, node.to_s
164
+ end
165
+
166
+ # Just a sanity check for output escaping.
167
+ def test_output_escaping_sanity
168
+ text = '<bad-script>if (a &lt; b || b &gt; c) { return "text"; }<stop/>return "&gt;&gt;&gt;snip&lt;&lt;&lt;";</bad-script>'
169
+ node = LibXML::XML::Parser.string(text).parse.root
170
+ affected = node.find('//text()')
171
+
172
+ check_escaping = lambda do |flag|
173
+ assert_equal('bad-script', node.name)
174
+ assert_equal(flag, node.output_escaping?)
175
+ affected.each do |x|
176
+ assert_equal(flag ? 'text' : 'textnoenc', x.name)
177
+ assert_equal(flag, x.output_escaping?)
178
+ end
179
+ end
180
+
181
+ node.output_escaping = false
182
+ check_escaping[false]
183
+
184
+ node.output_escaping = true
185
+ check_escaping[true]
186
+
187
+ node.output_escaping = nil
188
+ check_escaping[false]
189
+
190
+ node.output_escaping = true
191
+ check_escaping[true]
192
+
193
+ affected.first.output_escaping = true
194
+ affected.last.output_escaping = false
195
+ assert node.output_escaping?.nil?
196
+ end
197
+
198
+ def test_space_preserve
199
+ node = @doc.root
200
+
201
+ node.space_preserve = false
202
+ assert_equal LibXML::XML::Node::SPACE_DEFAULT, node.space_preserve
203
+
204
+ node.space_preserve = true
205
+ assert_equal LibXML::XML::Node::SPACE_PRESERVE, node.space_preserve
206
+ end
207
+
208
+ def test_empty
209
+ text = '<name> </name>'
210
+ doc = LibXML::XML::Parser.string(text).parse
211
+
212
+ node = doc.root
213
+ assert(!node.empty?)
214
+
215
+ text_node = node.first
216
+ assert(text_node.empty?)
217
+ end
218
+
219
+ def test_save_no_empty_tags
220
+ node = LibXML::XML::Node.new('test')
221
+ assert_equal '<test/>', node.to_s
222
+
223
+ LibXML::XML.default_save_no_empty_tags = true
224
+ assert_equal '<test></test>', node.to_s
225
+
226
+ LibXML::XML.default_save_no_empty_tags = false
227
+ end
228
+
229
+ def test_set_content
230
+ node = LibXML::XML::Node.new('test')
231
+ node.content = "unescaped & string"
232
+ assert_equal("unescaped & string", node.content)
233
+ assert_equal("<test>unescaped &amp; string</test>", node.to_s)
234
+ end
235
+
236
+ def test_document_node_marks_document
237
+ GC.stress = true
238
+ node = create_document_child
239
+ assert_equal("child", node.name)
240
+ refute_nil(node.doc)
241
+ ensure
242
+ GC.stress = false
243
+ end
244
+
245
+ private
246
+
247
+ def create_document_child
248
+ doc = LibXML::XML::Document.string("<root><child/></root>")
249
+ doc.root.children.first
250
+ end
251
+ end
@@ -1,50 +1,50 @@
1
- # encoding: UTF-8
2
-
3
- require_relative './test_helper'
4
-
5
- class CDataCommentTest < Minitest::Test
6
- def setup
7
- xp = LibXML::XML::Parser.string('<root></root>')
8
- @doc = xp.parse
9
- assert_instance_of(LibXML::XML::Document, @doc)
10
- @root = @doc.root
11
- end
12
-
13
- def test_node_type
14
- cnode = LibXML::XML::Node.new_cdata('test cdata')
15
- assert_equal(LibXML::XML::Node::CDATA_SECTION_NODE, cnode.node_type)
16
- end
17
-
18
- def test_add_cdata
19
- @root << LibXML::XML::Node.new_cdata('mycdata')
20
- assert_equal '<root><![CDATA[mycdata]]></root>',
21
- @root.to_s.gsub(/\n\s*/,'')
22
- end
23
-
24
- def test_add_cdata_2
25
- @root << LibXML::XML::Node.new_cdata('mycdata')
26
- assert_equal 'cdata',
27
- @root.child.node_type_name
28
- end
29
-
30
- def test_add_cdata_3
31
- @root << el = LibXML::XML::Node.new_cdata('mycdata')
32
- el << "_this_is_added"
33
- assert_equal '<root><![CDATA[mycdata_this_is_added]]></root>',
34
- @root.to_s.gsub(/\n\s*/,'')
35
- end
36
-
37
- def test_attributes
38
- cnode = LibXML::XML::Node.new_cdata('test cdata')
39
- assert_equal(0, cnode.attributes.length)
40
- end
41
-
42
- def test_set_cdata_attribute
43
- cnode = LibXML::XML::Node.new_cdata('test cdata')
44
-
45
- # Can't create attributes on non-element nodes
46
- assert_raises(ArgumentError) do
47
- cnode['attr'] = '123'
48
- end
49
- end
50
- end
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+
5
+ class CDataCommentTest < Minitest::Test
6
+ def setup
7
+ xp = LibXML::XML::Parser.string('<root></root>')
8
+ @doc = xp.parse
9
+ assert_instance_of(LibXML::XML::Document, @doc)
10
+ @root = @doc.root
11
+ end
12
+
13
+ def test_node_type
14
+ cnode = LibXML::XML::Node.new_cdata('test cdata')
15
+ assert_equal(LibXML::XML::Node::CDATA_SECTION_NODE, cnode.node_type)
16
+ end
17
+
18
+ def test_add_cdata
19
+ @root << LibXML::XML::Node.new_cdata('mycdata')
20
+ assert_equal '<root><![CDATA[mycdata]]></root>',
21
+ @root.to_s.gsub(/\n\s*/,'')
22
+ end
23
+
24
+ def test_add_cdata_2
25
+ @root << LibXML::XML::Node.new_cdata('mycdata')
26
+ assert_equal 'cdata',
27
+ @root.child.node_type_name
28
+ end
29
+
30
+ def test_add_cdata_3
31
+ @root << el = LibXML::XML::Node.new_cdata('mycdata')
32
+ el << "_this_is_added"
33
+ assert_equal '<root><![CDATA[mycdata_this_is_added]]></root>',
34
+ @root.to_s.gsub(/\n\s*/,'')
35
+ end
36
+
37
+ def test_attributes
38
+ cnode = LibXML::XML::Node.new_cdata('test cdata')
39
+ assert_equal(0, cnode.attributes.length)
40
+ end
41
+
42
+ def test_set_cdata_attribute
43
+ cnode = LibXML::XML::Node.new_cdata('test cdata')
44
+
45
+ # Can't create attributes on non-element nodes
46
+ assert_raises(ArgumentError) do
47
+ cnode['attr'] = '123'
48
+ end
49
+ end
50
+ end
@@ -1,32 +1,32 @@
1
- # encoding: UTF-8
2
-
3
- require_relative './test_helper'
4
-
5
-
6
- class NodeCommentTest < Minitest::Test
7
- def setup
8
- xp = LibXML::XML::Parser.string('<root></root>')
9
- @doc = xp.parse
10
- assert_instance_of(LibXML::XML::Document, @doc)
11
- @root = @doc.root
12
- end
13
-
14
- def test_libxml_node_add_comment_01
15
- @root << LibXML::XML::Node.new_comment('mycomment')
16
- assert_equal '<root><!--mycomment--></root>',
17
- @root.to_s.gsub(/\n\s*/,'')
18
- end
19
-
20
- def test_libxml_node_add_comment_02
21
- @root << LibXML::XML::Node.new_comment('mycomment')
22
- assert_equal 'comment',
23
- @root.child.node_type_name
24
- end
25
-
26
- def test_libxml_node_add_comment_03
27
- @root << el = LibXML::XML::Node.new_comment('mycomment')
28
- el << "_this_is_added"
29
- assert_equal '<root><!--mycomment_this_is_added--></root>',
30
- @root.to_s.gsub(/\n\s*/,'')
31
- end
32
- end
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+
5
+
6
+ class NodeCommentTest < Minitest::Test
7
+ def setup
8
+ xp = LibXML::XML::Parser.string('<root></root>')
9
+ @doc = xp.parse
10
+ assert_instance_of(LibXML::XML::Document, @doc)
11
+ @root = @doc.root
12
+ end
13
+
14
+ def test_libxml_node_add_comment_01
15
+ @root << LibXML::XML::Node.new_comment('mycomment')
16
+ assert_equal '<root><!--mycomment--></root>',
17
+ @root.to_s.gsub(/\n\s*/,'')
18
+ end
19
+
20
+ def test_libxml_node_add_comment_02
21
+ @root << LibXML::XML::Node.new_comment('mycomment')
22
+ assert_equal 'comment',
23
+ @root.child.node_type_name
24
+ end
25
+
26
+ def test_libxml_node_add_comment_03
27
+ @root << el = LibXML::XML::Node.new_comment('mycomment')
28
+ el << "_this_is_added"
29
+ assert_equal '<root><!--mycomment_this_is_added--></root>',
30
+ @root.to_s.gsub(/\n\s*/,'')
31
+ end
32
+ end