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.
- checksums.yaml +4 -4
- data/{HISTORY → CHANGELOG.md} +875 -887
- data/LICENSE +20 -20
- data/README.md +67 -0
- data/Rakefile +77 -98
- data/ext/libxml/extconf.rb +39 -20
- data/ext/libxml/libxml.c +67 -79
- data/ext/libxml/ruby_libxml.h +43 -44
- data/ext/libxml/ruby_xml.c +556 -899
- data/ext/libxml/ruby_xml.h +9 -10
- data/ext/libxml/ruby_xml_attr.c +338 -333
- data/ext/libxml/ruby_xml_attr.h +13 -12
- data/ext/libxml/ruby_xml_attr_decl.c +19 -12
- data/ext/libxml/ruby_xml_attr_decl.h +11 -11
- data/ext/libxml/ruby_xml_attributes.c +18 -9
- data/ext/libxml/ruby_xml_attributes.h +17 -15
- data/ext/libxml/ruby_xml_document.c +1142 -1129
- data/ext/libxml/ruby_xml_document.h +12 -11
- data/ext/libxml/ruby_xml_dtd.c +287 -248
- data/ext/libxml/ruby_xml_dtd.h +10 -9
- data/ext/libxml/ruby_xml_encoding.c +250 -250
- data/ext/libxml/ruby_xml_encoding.h +20 -18
- data/ext/libxml/ruby_xml_error.c +1003 -996
- data/ext/libxml/ruby_xml_error.h +14 -14
- data/ext/libxml/ruby_xml_html_parser.c +91 -91
- data/ext/libxml/ruby_xml_html_parser.h +10 -10
- data/ext/libxml/ruby_xml_html_parser_context.c +364 -337
- data/ext/libxml/ruby_xml_html_parser_context.h +11 -10
- data/ext/libxml/ruby_xml_html_parser_options.c +48 -48
- data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
- data/ext/libxml/ruby_xml_input_cbg.c +216 -188
- data/ext/libxml/ruby_xml_input_cbg.h +20 -20
- data/ext/libxml/ruby_xml_io.c +49 -47
- data/ext/libxml/ruby_xml_io.h +10 -10
- data/ext/libxml/ruby_xml_namespace.c +159 -154
- data/ext/libxml/ruby_xml_namespace.h +11 -10
- data/ext/libxml/ruby_xml_namespaces.c +313 -293
- data/ext/libxml/ruby_xml_namespaces.h +9 -9
- data/ext/libxml/ruby_xml_node.c +1433 -1398
- data/ext/libxml/ruby_xml_node.h +15 -13
- data/ext/libxml/ruby_xml_parser.c +91 -91
- data/ext/libxml/ruby_xml_parser.h +10 -10
- data/ext/libxml/ruby_xml_parser_context.c +1016 -1001
- data/ext/libxml/ruby_xml_parser_context.h +11 -10
- data/ext/libxml/ruby_xml_parser_options.c +74 -66
- data/ext/libxml/ruby_xml_parser_options.h +10 -10
- data/ext/libxml/ruby_xml_reader.c +40 -31
- data/ext/libxml/ruby_xml_reader.h +14 -14
- data/ext/libxml/ruby_xml_registry.c +31 -0
- data/ext/libxml/ruby_xml_registry.h +22 -0
- data/ext/libxml/ruby_xml_relaxng.c +21 -5
- data/ext/libxml/ruby_xml_relaxng.h +9 -8
- data/ext/libxml/ruby_xml_sax2_handler.c +326 -326
- data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
- data/ext/libxml/ruby_xml_sax_parser.c +108 -116
- data/ext/libxml/ruby_xml_sax_parser.h +10 -10
- data/ext/libxml/ruby_xml_schema.c +22 -15
- data/ext/libxml/ruby_xml_schema.h +26 -25
- data/ext/libxml/ruby_xml_schema_attribute.c +7 -7
- data/ext/libxml/ruby_xml_schema_attribute.h +37 -37
- data/ext/libxml/ruby_xml_schema_element.c +8 -8
- data/ext/libxml/ruby_xml_schema_element.h +11 -11
- data/ext/libxml/ruby_xml_schema_facet.c +50 -50
- data/ext/libxml/ruby_xml_schema_facet.h +9 -9
- data/ext/libxml/ruby_xml_schema_type.c +12 -19
- data/ext/libxml/ruby_xml_schema_type.h +9 -9
- data/ext/libxml/ruby_xml_version.h +9 -9
- data/ext/libxml/ruby_xml_writer.c +183 -185
- data/ext/libxml/ruby_xml_writer.h +6 -6
- data/ext/libxml/ruby_xml_xinclude.c +20 -20
- data/ext/libxml/ruby_xml_xinclude.h +11 -11
- data/ext/libxml/ruby_xml_xpath.c +195 -195
- data/ext/libxml/ruby_xml_xpath.h +15 -15
- data/ext/libxml/ruby_xml_xpath_context.c +408 -362
- data/ext/libxml/ruby_xml_xpath_context.h +9 -9
- data/ext/libxml/ruby_xml_xpath_expression.c +12 -6
- data/ext/libxml/ruby_xml_xpath_expression.h +11 -10
- data/ext/libxml/ruby_xml_xpath_object.c +69 -54
- data/ext/libxml/ruby_xml_xpath_object.h +19 -17
- data/ext/vc/libxml_ruby/libxml_ruby.vcxproj +271 -0
- data/ext/xcode/libxml-ruby.xcodeproj/project.pbxproj +633 -0
- data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- data/ext/xcode/libxml-ruby.xcodeproj/xcshareddata/xcschemes/libxml-ruby.xcscheme +80 -0
- data/lib/libxml/attr.rb +122 -122
- data/lib/libxml/attr_decl.rb +80 -80
- data/lib/libxml/attributes.rb +13 -13
- data/lib/libxml/document.rb +165 -194
- data/lib/libxml/error.rb +122 -95
- data/lib/libxml/html_parser.rb +80 -96
- data/lib/libxml/namespace.rb +61 -61
- data/lib/libxml/namespaces.rb +37 -37
- data/lib/libxml/node.rb +321 -323
- data/lib/libxml/parser.rb +94 -100
- data/lib/libxml/sax_callbacks.rb +179 -179
- data/lib/libxml/sax_parser.rb +40 -40
- data/lib/libxml/schema/attribute.rb +27 -19
- data/lib/libxml/schema/element.rb +20 -0
- data/lib/libxml/schema/type.rb +44 -21
- data/lib/libxml/schema.rb +47 -47
- data/lib/libxml/tree.rb +28 -28
- data/lib/libxml-ruby.rb +30 -30
- data/libxml-ruby.gemspec +46 -48
- data/test/c14n/result/1-1-without-comments/example-1 +3 -3
- data/test/c14n/result/1-1-without-comments/example-2 +10 -10
- data/test/c14n/result/1-1-without-comments/example-3 +13 -13
- data/test/c14n/result/1-1-without-comments/example-4 +8 -8
- data/test/c14n/result/1-1-without-comments/example-5 +2 -2
- data/test/c14n/result/with-comments/example-1 +5 -5
- data/test/c14n/result/with-comments/example-2 +10 -10
- data/test/c14n/result/with-comments/example-3 +13 -13
- data/test/c14n/result/with-comments/example-4 +8 -8
- data/test/c14n/result/with-comments/example-5 +3 -3
- data/test/c14n/result/without-comments/example-1 +3 -3
- data/test/c14n/result/without-comments/example-2 +10 -10
- data/test/c14n/result/without-comments/example-3 +13 -13
- data/test/c14n/result/without-comments/example-4 +8 -8
- data/test/c14n/result/without-comments/example-5 +2 -2
- data/test/test_attr.rb +179 -180
- data/test/test_attr_decl.rb +131 -131
- data/test/test_attributes.rb +135 -135
- data/test/test_canonicalize.rb +122 -120
- data/test/test_document.rb +138 -132
- data/test/test_document_write.rb +142 -145
- data/test/test_dtd.rb +134 -129
- data/test/test_encoding.rb +126 -129
- data/test/test_encoding_sax.rb +114 -114
- data/test/test_error.rb +197 -194
- data/test/test_helper.rb +21 -13
- data/test/test_html_parser.rb +166 -162
- data/test/test_html_parser_context.rb +22 -22
- data/test/test_input_callbacks.rb +36 -0
- data/test/test_namespace.rb +58 -60
- data/test/test_namespaces.rb +200 -200
- data/test/test_node.rb +251 -237
- data/test/test_node_cdata.rb +50 -50
- data/test/test_node_comment.rb +32 -32
- data/test/test_node_copy.rb +40 -40
- data/test/test_node_edit.rb +176 -158
- data/test/test_node_pi.rb +37 -37
- data/test/test_node_text.rb +69 -69
- data/test/test_node_write.rb +93 -96
- data/test/test_node_xlink.rb +28 -28
- data/test/test_parser.rb +297 -324
- data/test/test_parser_context.rb +198 -198
- data/test/test_properties.rb +38 -38
- data/test/test_reader.rb +413 -364
- data/test/test_relaxng.rb +59 -53
- data/test/test_sax_parser.rb +345 -326
- data/test/test_schema.rb +28 -0
- data/test/test_traversal.rb +152 -152
- data/test/test_writer.rb +469 -468
- data/test/test_xinclude.rb +20 -20
- data/test/test_xml.rb +164 -267
- data/test/test_xpath.rb +244 -244
- data/test/test_xpath_context.rb +87 -87
- data/test/test_xpath_expression.rb +37 -37
- metadata +49 -31
- data/README.rdoc +0 -217
- data/ext/libxml/extconf.h +0 -3
- data/ext/libxml/ruby_xml_cbg.c +0 -85
- data/lib/libxml/hpricot.rb +0 -78
- data/lib/libxml.rb +0 -5
- data/lib/xml/libxml.rb +0 -10
- data/lib/xml.rb +0 -14
- data/script/benchmark/depixelate +0 -634
- data/script/benchmark/hamlet.xml +0 -9055
- data/script/benchmark/parsecount +0 -170
- data/script/benchmark/sock_entries.xml +0 -507
- data/script/benchmark/throughput +0 -41
- data/script/test +0 -6
- 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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
refute(node_a.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
parent
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
node_b
|
|
112
|
-
|
|
113
|
-
assert(node_a.
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
#
|
|
143
|
-
#
|
|
144
|
-
#
|
|
145
|
-
#
|
|
146
|
-
#
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
text_noenc
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
node =
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
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 < b || b > c) { return "text"; }<stop/>return ">>>snip<<<";</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 < b || b > c) { return "text"; }<stop/>return ">>>snip<<<";</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 & 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
|
data/test/test_node_cdata.rb
CHANGED
|
@@ -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
|
data/test/test_node_comment.rb
CHANGED
|
@@ -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
|