nokogiri 1.8.5 → 1.9.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of nokogiri might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +0 -1
- data/ext/nokogiri/extconf.rb +10 -6
- data/ext/nokogiri/xml_attr.c +26 -21
- data/ext/nokogiri/xml_document.c +4 -1
- data/ext/nokogiri/xml_namespace.c +3 -3
- data/ext/nokogiri/xml_namespace.h +1 -2
- data/ext/nokogiri/xml_node.c +55 -15
- data/lib/nokogiri/css/parser.rb +61 -61
- data/lib/nokogiri/version.rb +1 -1
- data/lib/nokogiri/xml/document_fragment.rb +11 -0
- data/lib/nokogiri/xml/node.rb +12 -0
- data/lib/nokogiri/xml/node_set.rb +4 -8
- metadata +17 -153
- data/.autotest +0 -22
- data/.cross_rubies +0 -8
- data/.editorconfig +0 -17
- data/.gemtest +0 -0
- data/.travis.yml +0 -63
- data/CHANGELOG.md +0 -1368
- data/CONTRIBUTING.md +0 -42
- data/C_CODING_STYLE.rdoc +0 -33
- data/Gemfile +0 -23
- data/Gemfile-libxml-ruby +0 -3
- data/Manifest.txt +0 -370
- data/ROADMAP.md +0 -111
- data/Rakefile +0 -348
- data/SECURITY.md +0 -19
- data/STANDARD_RESPONSES.md +0 -47
- data/Y_U_NO_GEMSPEC.md +0 -155
- data/appveyor.yml +0 -29
- data/build_all +0 -44
- data/patches/sort-patches-by-date +0 -25
- data/suppressions/README.txt +0 -1
- data/suppressions/nokogiri_ruby-2.supp +0 -10
- data/tasks/test.rb +0 -100
- data/test/css/test_nthiness.rb +0 -226
- data/test/css/test_parser.rb +0 -386
- data/test/css/test_tokenizer.rb +0 -215
- data/test/css/test_xpath_visitor.rb +0 -96
- data/test/decorators/test_slop.rb +0 -23
- data/test/files/2ch.html +0 -108
- data/test/files/GH_1042.html +0 -18
- data/test/files/address_book.rlx +0 -12
- data/test/files/address_book.xml +0 -10
- data/test/files/atom.xml +0 -344
- data/test/files/bar/bar.xsd +0 -4
- data/test/files/bogus.xml +0 -0
- data/test/files/dont_hurt_em_why.xml +0 -422
- data/test/files/encoding.html +0 -82
- data/test/files/encoding.xhtml +0 -84
- data/test/files/exslt.xml +0 -8
- data/test/files/exslt.xslt +0 -35
- data/test/files/foo/foo.xsd +0 -4
- data/test/files/metacharset.html +0 -10
- data/test/files/namespace_pressure_test.xml +0 -1684
- data/test/files/noencoding.html +0 -47
- data/test/files/po.xml +0 -32
- data/test/files/po.xsd +0 -66
- data/test/files/saml/saml20assertion_schema.xsd +0 -283
- data/test/files/saml/saml20protocol_schema.xsd +0 -302
- data/test/files/saml/xenc_schema.xsd +0 -146
- data/test/files/saml/xmldsig_schema.xsd +0 -318
- data/test/files/shift_jis.html +0 -10
- data/test/files/shift_jis.xml +0 -5
- data/test/files/shift_jis_no_charset.html +0 -9
- data/test/files/slow-xpath.xml +0 -25509
- data/test/files/snuggles.xml +0 -3
- data/test/files/staff.dtd +0 -10
- data/test/files/staff.xml +0 -59
- data/test/files/staff.xslt +0 -32
- data/test/files/test_document_url/bar.xml +0 -2
- data/test/files/test_document_url/document.dtd +0 -4
- data/test/files/test_document_url/document.xml +0 -6
- data/test/files/tlm.html +0 -851
- data/test/files/to_be_xincluded.xml +0 -2
- data/test/files/valid_bar.xml +0 -2
- data/test/files/xinclude.xml +0 -4
- data/test/helper.rb +0 -271
- data/test/html/sax/test_parser.rb +0 -168
- data/test/html/sax/test_parser_context.rb +0 -46
- data/test/html/sax/test_parser_text.rb +0 -163
- data/test/html/sax/test_push_parser.rb +0 -87
- data/test/html/test_attributes.rb +0 -85
- data/test/html/test_builder.rb +0 -164
- data/test/html/test_document.rb +0 -712
- data/test/html/test_document_encoding.rb +0 -143
- data/test/html/test_document_fragment.rb +0 -310
- data/test/html/test_element_description.rb +0 -105
- data/test/html/test_named_characters.rb +0 -14
- data/test/html/test_node.rb +0 -212
- data/test/html/test_node_encoding.rb +0 -91
- data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
- data/test/namespaces/test_namespaces_aliased_default.rb +0 -24
- data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
- data/test/namespaces/test_namespaces_in_cloned_doc.rb +0 -31
- data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
- data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -80
- data/test/namespaces/test_namespaces_preservation.rb +0 -31
- data/test/test_convert_xpath.rb +0 -135
- data/test/test_css_cache.rb +0 -47
- data/test/test_encoding_handler.rb +0 -48
- data/test/test_memory_leak.rb +0 -156
- data/test/test_nokogiri.rb +0 -138
- data/test/test_soap4r_sax.rb +0 -52
- data/test/test_xslt_transforms.rb +0 -314
- data/test/xml/node/test_save_options.rb +0 -28
- data/test/xml/node/test_subclass.rb +0 -44
- data/test/xml/sax/test_parser.rb +0 -402
- data/test/xml/sax/test_parser_context.rb +0 -115
- data/test/xml/sax/test_parser_text.rb +0 -202
- data/test/xml/sax/test_push_parser.rb +0 -265
- data/test/xml/test_attr.rb +0 -74
- data/test/xml/test_attribute_decl.rb +0 -86
- data/test/xml/test_builder.rb +0 -341
- data/test/xml/test_c14n.rb +0 -180
- data/test/xml/test_cdata.rb +0 -54
- data/test/xml/test_comment.rb +0 -40
- data/test/xml/test_document.rb +0 -982
- data/test/xml/test_document_encoding.rb +0 -31
- data/test/xml/test_document_fragment.rb +0 -298
- data/test/xml/test_dtd.rb +0 -187
- data/test/xml/test_dtd_encoding.rb +0 -31
- data/test/xml/test_element_content.rb +0 -56
- data/test/xml/test_element_decl.rb +0 -73
- data/test/xml/test_entity_decl.rb +0 -122
- data/test/xml/test_entity_reference.rb +0 -262
- data/test/xml/test_namespace.rb +0 -96
- data/test/xml/test_node.rb +0 -1325
- data/test/xml/test_node_attributes.rb +0 -115
- data/test/xml/test_node_encoding.rb +0 -75
- data/test/xml/test_node_inheritance.rb +0 -32
- data/test/xml/test_node_reparenting.rb +0 -592
- data/test/xml/test_node_set.rb +0 -809
- data/test/xml/test_parse_options.rb +0 -64
- data/test/xml/test_processing_instruction.rb +0 -30
- data/test/xml/test_reader.rb +0 -620
- data/test/xml/test_reader_encoding.rb +0 -134
- data/test/xml/test_relax_ng.rb +0 -60
- data/test/xml/test_schema.rb +0 -142
- data/test/xml/test_syntax_error.rb +0 -36
- data/test/xml/test_text.rb +0 -60
- data/test/xml/test_unparented_node.rb +0 -483
- data/test/xml/test_xinclude.rb +0 -83
- data/test/xml/test_xpath.rb +0 -470
- data/test/xslt/test_custom_functions.rb +0 -133
- data/test/xslt/test_exception_handling.rb +0 -37
data/test/xml/test_builder.rb
DELETED
@@ -1,341 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require "helper"
|
4
|
-
|
5
|
-
module Nokogiri
|
6
|
-
module XML
|
7
|
-
class TestBuilder < Nokogiri::TestCase
|
8
|
-
def test_attribute_sensitivity
|
9
|
-
xml = Nokogiri::XML::Builder.new { |x|
|
10
|
-
x.tag "hello", "abcDef" => "world"
|
11
|
-
}.to_xml
|
12
|
-
doc = Nokogiri.XML xml
|
13
|
-
assert_equal 'world', doc.root['abcDef']
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_builder_multiple_nodes
|
17
|
-
Nokogiri::XML::Builder.new do |xml|
|
18
|
-
0.upto(10) do
|
19
|
-
xml.text "test"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
def test_builder_with_utf8_text
|
26
|
-
text = "test ﺵ "
|
27
|
-
doc = Nokogiri::XML::Builder.new(:encoding => "UTF-8") { |xml| xml.test text }.doc
|
28
|
-
assert_equal text, doc.content
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_builder_escape
|
32
|
-
xml = Nokogiri::XML::Builder.new { |x|
|
33
|
-
x.condition "value < 1", :attr => "value < 1"
|
34
|
-
}.to_xml
|
35
|
-
doc = Nokogiri.XML xml
|
36
|
-
assert_equal 'value < 1', doc.root['attr']
|
37
|
-
assert_equal 'value < 1', doc.root.content
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_builder_namespace
|
41
|
-
doc = Nokogiri::XML::Builder.new { |xml|
|
42
|
-
xml.a("xmlns:a" => "x") do
|
43
|
-
xml.b("xmlns:a" => "x", "xmlns:b" => "y")
|
44
|
-
end
|
45
|
-
}.doc
|
46
|
-
|
47
|
-
b = doc.at('b')
|
48
|
-
assert b
|
49
|
-
assert_equal({"xmlns:a"=>"x", "xmlns:b"=>"y"}, b.namespaces)
|
50
|
-
assert_equal({"xmlns:b"=>"y"}, namespaces_defined_on(b))
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_builder_namespace_part_deux
|
54
|
-
doc = Nokogiri::XML::Builder.new { |xml|
|
55
|
-
xml.a("xmlns:b" => "y") do
|
56
|
-
xml.b("xmlns:a" => "x", "xmlns:b" => "y", "xmlns:c" => "z")
|
57
|
-
end
|
58
|
-
}.doc
|
59
|
-
|
60
|
-
b = doc.at('b')
|
61
|
-
assert b
|
62
|
-
assert_equal({"xmlns:a"=>"x", "xmlns:b"=>"y", "xmlns:c"=>"z"}, b.namespaces)
|
63
|
-
assert_equal({"xmlns:a"=>"x", "xmlns:c"=>"z"}, namespaces_defined_on(b))
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_builder_with_unlink
|
67
|
-
b = Nokogiri::XML::Builder.new do |xml|
|
68
|
-
xml.foo do
|
69
|
-
xml.bar { xml.parent.unlink }
|
70
|
-
xml.bar2
|
71
|
-
end
|
72
|
-
end
|
73
|
-
assert b
|
74
|
-
end
|
75
|
-
|
76
|
-
def test_with_root
|
77
|
-
doc = Nokogiri::XML(File.read(XML_FILE))
|
78
|
-
Nokogiri::XML::Builder.with(doc.at('employee')) do |xml|
|
79
|
-
xml.foo
|
80
|
-
end
|
81
|
-
assert_equal 1, doc.xpath('//employee/foo').length
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_root_namespace_default_decl
|
85
|
-
b = Nokogiri::XML::Builder.new { |xml| xml.root(:xmlns => 'one:two') }
|
86
|
-
doc = b.doc
|
87
|
-
assert_equal 'one:two', doc.root.namespace.href
|
88
|
-
assert_equal({ 'xmlns' => 'one:two' }, doc.root.namespaces)
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_root_namespace_multi_decl
|
92
|
-
b = Nokogiri::XML::Builder.new { |xml|
|
93
|
-
xml.root(:xmlns => 'one:two', 'xmlns:foo' => 'bar') do
|
94
|
-
xml.hello
|
95
|
-
end
|
96
|
-
}
|
97
|
-
doc = b.doc
|
98
|
-
assert_equal 'one:two', doc.root.namespace.href
|
99
|
-
assert_equal({ 'xmlns' => 'one:two', 'xmlns:foo' => 'bar' }, doc.root.namespaces)
|
100
|
-
|
101
|
-
assert_equal 'one:two', doc.at('hello').namespace.href
|
102
|
-
end
|
103
|
-
|
104
|
-
def test_non_root_namespace
|
105
|
-
b = Nokogiri::XML::Builder.new { |xml|
|
106
|
-
xml.root { xml.hello(:xmlns => 'one') }
|
107
|
-
}
|
108
|
-
assert_equal 'one', b.doc.at('hello', 'xmlns' => 'one').namespace.href
|
109
|
-
end
|
110
|
-
|
111
|
-
def test_specify_namespace
|
112
|
-
b = Nokogiri::XML::Builder.new { |xml|
|
113
|
-
xml.root('xmlns:foo' => 'bar') do
|
114
|
-
xml[:foo].bar
|
115
|
-
xml['foo'].baz
|
116
|
-
end
|
117
|
-
}
|
118
|
-
doc = b.doc
|
119
|
-
assert_equal 'bar', doc.at('foo|bar', 'foo' => 'bar').namespace.href
|
120
|
-
assert_equal 'bar', doc.at('foo|baz', 'foo' => 'bar').namespace.href
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_dtd_in_builder_output
|
124
|
-
builder = Nokogiri::XML::Builder.new do |xml|
|
125
|
-
xml.doc.create_internal_subset(
|
126
|
-
'html',
|
127
|
-
"-//W3C//DTD HTML 4.01 Transitional//EN",
|
128
|
-
"http://www.w3.org/TR/html4/loose.dtd"
|
129
|
-
)
|
130
|
-
xml.root do
|
131
|
-
xml.foo
|
132
|
-
end
|
133
|
-
end
|
134
|
-
assert_match(/<!DOCTYPE html PUBLIC "-\/\/W3C\/\/DTD HTML 4.01 Transitional\/\/EN" "http:\/\/www.w3.org\/TR\/html4\/loose.dtd">/,
|
135
|
-
builder.to_xml)
|
136
|
-
end
|
137
|
-
|
138
|
-
def test_specify_namespace_nested
|
139
|
-
b = Nokogiri::XML::Builder.new { |xml|
|
140
|
-
xml.root('xmlns:foo' => 'bar') do
|
141
|
-
xml.yay do
|
142
|
-
xml[:foo].bar
|
143
|
-
|
144
|
-
xml.yikes do
|
145
|
-
xml['foo'].baz
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
|
-
}
|
150
|
-
doc = b.doc
|
151
|
-
assert_equal 'bar', doc.at('foo|bar', 'foo' => 'bar').namespace.href
|
152
|
-
assert_equal 'bar', doc.at('foo|baz', 'foo' => 'bar').namespace.href
|
153
|
-
end
|
154
|
-
|
155
|
-
def test_specified_namespace_postdeclared
|
156
|
-
doc = Nokogiri::XML::Builder.new { |xml|
|
157
|
-
xml.a do
|
158
|
-
xml[:foo].b("xmlns:foo" => "bar")
|
159
|
-
end
|
160
|
-
}.doc
|
161
|
-
a = doc.at('a')
|
162
|
-
assert_equal({}, a.namespaces)
|
163
|
-
|
164
|
-
b = doc.at_xpath('//foo:b', {:foo=>'bar'})
|
165
|
-
assert b
|
166
|
-
assert_equal({"xmlns:foo"=>"bar"}, b.namespaces)
|
167
|
-
assert_equal("b", b.name)
|
168
|
-
assert_equal("bar", b.namespace.href)
|
169
|
-
end
|
170
|
-
|
171
|
-
def test_specified_namespace_undeclared
|
172
|
-
Nokogiri::XML::Builder.new { |xml|
|
173
|
-
xml.root do
|
174
|
-
assert_raises(ArgumentError) do
|
175
|
-
xml[:foo].bar
|
176
|
-
end
|
177
|
-
end
|
178
|
-
}
|
179
|
-
end
|
180
|
-
|
181
|
-
def test_set_encoding
|
182
|
-
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
183
|
-
xml.root do
|
184
|
-
xml.bar 'blah'
|
185
|
-
end
|
186
|
-
end
|
187
|
-
assert_match 'UTF-8', builder.to_xml
|
188
|
-
end
|
189
|
-
|
190
|
-
def test_bang_and_underscore_is_escaped
|
191
|
-
builder = Nokogiri::XML::Builder.new do |xml|
|
192
|
-
xml.root do
|
193
|
-
xml.p_('adsfadsf')
|
194
|
-
xml.p!('adsfadsf')
|
195
|
-
end
|
196
|
-
end
|
197
|
-
assert_equal 2, builder.doc.xpath('//p').length
|
198
|
-
end
|
199
|
-
|
200
|
-
def test_square_brackets_set_attributes
|
201
|
-
builder = Nokogiri::XML::Builder.new do |xml|
|
202
|
-
xml.root do
|
203
|
-
foo = xml.foo
|
204
|
-
foo['id'] = 'hello'
|
205
|
-
assert_equal 'hello', foo['id']
|
206
|
-
end
|
207
|
-
end
|
208
|
-
assert_equal 1, builder.doc.xpath('//foo[@id = "hello"]').length
|
209
|
-
end
|
210
|
-
|
211
|
-
def test_nested_local_variable
|
212
|
-
@ivar = 'hello'
|
213
|
-
local_var = 'hello world'
|
214
|
-
builder = Nokogiri::XML::Builder.new do |xml|
|
215
|
-
xml.root do
|
216
|
-
xml.foo local_var
|
217
|
-
xml.bar @ivar
|
218
|
-
xml.baz {
|
219
|
-
xml.text @ivar
|
220
|
-
}
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
assert_equal 'hello world', builder.doc.at('//root/foo').content
|
225
|
-
assert_equal 'hello', builder.doc.at('//root/bar').content
|
226
|
-
assert_equal 'hello', builder.doc.at('baz').content
|
227
|
-
end
|
228
|
-
|
229
|
-
def test_raw_append
|
230
|
-
builder = Nokogiri::XML::Builder.new do |xml|
|
231
|
-
xml.root do
|
232
|
-
xml << 'hello'
|
233
|
-
end
|
234
|
-
end
|
235
|
-
|
236
|
-
assert_equal 'hello', builder.doc.at('/root').content
|
237
|
-
end
|
238
|
-
|
239
|
-
def test_raw_append_with_instance_eval
|
240
|
-
builder = Nokogiri::XML::Builder.new do
|
241
|
-
root do
|
242
|
-
self << 'hello'
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
assert_equal 'hello', builder.doc.at('/root').content
|
247
|
-
end
|
248
|
-
|
249
|
-
def test_raw_xml_append
|
250
|
-
builder = Nokogiri::XML::Builder.new do |xml|
|
251
|
-
xml.root do
|
252
|
-
xml << '<aaa><bbb/><ccc/></aaa>'
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
assert_equal ["aaa"], builder.doc.at_css("root").children.collect(&:name)
|
257
|
-
assert_equal ["bbb","ccc"], builder.doc.at_css("aaa").children.collect(&:name)
|
258
|
-
end
|
259
|
-
|
260
|
-
def test_raw_xml_append_with_namespaces
|
261
|
-
doc = Nokogiri::XML::Builder.new do |xml|
|
262
|
-
xml.root("xmlns:foo" => "x", "xmlns" => "y") do
|
263
|
-
xml << '<Element foo:bar="bazz"/>'
|
264
|
-
end
|
265
|
-
end.doc
|
266
|
-
|
267
|
-
el = doc.at 'Element'
|
268
|
-
assert_not_nil el
|
269
|
-
|
270
|
-
assert_equal 'y', el.namespace.href
|
271
|
-
assert_nil el.namespace.prefix
|
272
|
-
|
273
|
-
attr = el.attributes["bar"]
|
274
|
-
assert_not_nil attr
|
275
|
-
assert_not_nil attr.namespace
|
276
|
-
assert_equal "foo", attr.namespace.prefix
|
277
|
-
end
|
278
|
-
|
279
|
-
def test_cdata
|
280
|
-
builder = Nokogiri::XML::Builder.new do
|
281
|
-
root {
|
282
|
-
cdata "hello world"
|
283
|
-
}
|
284
|
-
end
|
285
|
-
assert_equal("<?xml version=\"1.0\"?><root><![CDATA[hello world]]></root>",
|
286
|
-
builder.to_xml.gsub(/\n/, ""))
|
287
|
-
end
|
288
|
-
|
289
|
-
def test_comment
|
290
|
-
builder = Nokogiri::XML::Builder.new do
|
291
|
-
root {
|
292
|
-
comment "this is a comment"
|
293
|
-
}
|
294
|
-
end
|
295
|
-
assert builder.doc.root.children.first.comment?
|
296
|
-
end
|
297
|
-
|
298
|
-
def test_builder_no_block
|
299
|
-
string = "hello world"
|
300
|
-
builder = Nokogiri::XML::Builder.new
|
301
|
-
builder.root {
|
302
|
-
cdata string
|
303
|
-
}
|
304
|
-
assert_equal("<?xml version=\"1.0\"?><root><![CDATA[hello world]]></root>",
|
305
|
-
builder.to_xml.gsub(/\n/, ''))
|
306
|
-
end
|
307
|
-
|
308
|
-
def test_builder_can_inherit_parent_namespace
|
309
|
-
builder = Nokogiri::XML::Builder.new
|
310
|
-
builder.products {
|
311
|
-
builder.parent.default_namespace = "foo"
|
312
|
-
builder.product {
|
313
|
-
builder.parent.default_namespace = nil
|
314
|
-
}
|
315
|
-
}
|
316
|
-
doc = builder.doc
|
317
|
-
['product', 'products'].each do |n|
|
318
|
-
assert_equal doc.at_xpath("//*[local-name() = '#{n}']").namespace.href, 'foo'
|
319
|
-
end
|
320
|
-
end
|
321
|
-
|
322
|
-
def test_builder_can_handle_namespace_override
|
323
|
-
builder = Nokogiri::XML::Builder.new
|
324
|
-
builder.products('xmlns:foo' => 'bar') {
|
325
|
-
builder.product('xmlns:foo' => 'baz')
|
326
|
-
}
|
327
|
-
|
328
|
-
doc = builder.doc
|
329
|
-
assert_equal doc.at_xpath("//*[local-name() = 'product']").namespaces['xmlns:foo'], 'baz'
|
330
|
-
assert_equal doc.at_xpath("//*[local-name() = 'products']").namespaces['xmlns:foo'], 'bar'
|
331
|
-
assert_nil doc.at_xpath("//*[local-name() = 'products']").namespace
|
332
|
-
end
|
333
|
-
|
334
|
-
private
|
335
|
-
|
336
|
-
def namespaces_defined_on(node)
|
337
|
-
Hash[*node.namespace_definitions.collect{|n| ["xmlns:" + n.prefix, n.href]}.flatten]
|
338
|
-
end
|
339
|
-
end
|
340
|
-
end
|
341
|
-
end
|
data/test/xml/test_c14n.rb
DELETED
@@ -1,180 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestC14N < Nokogiri::TestCase
|
6
|
-
# http://www.w3.org/TR/xml-c14n#Example-OutsideDoc
|
7
|
-
def test_3_1
|
8
|
-
doc = Nokogiri.XML <<-eoxml
|
9
|
-
<?xml version="1.0"?>
|
10
|
-
|
11
|
-
<?xml-stylesheet href="doc.xsl"
|
12
|
-
type="text/xsl" ?>
|
13
|
-
|
14
|
-
<!DOCTYPE doc SYSTEM "doc.dtd">
|
15
|
-
|
16
|
-
<doc>Hello, world!<!-- Comment 1 --></doc>
|
17
|
-
|
18
|
-
<?pi-without-data ?>
|
19
|
-
|
20
|
-
<!-- Comment 2 -->
|
21
|
-
|
22
|
-
<!-- Comment 3 -->
|
23
|
-
eoxml
|
24
|
-
|
25
|
-
c14n = doc.canonicalize
|
26
|
-
assert_no_match(/version=/, c14n)
|
27
|
-
assert_match(/Hello, world/, c14n)
|
28
|
-
assert_no_match(/Comment/, c14n)
|
29
|
-
c14n = doc.canonicalize(nil, nil, true)
|
30
|
-
assert_match(/Comment/, c14n)
|
31
|
-
c14n = doc.canonicalize(nil, nil, false)
|
32
|
-
assert_no_match(/Comment/, c14n)
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_exclude_block_params
|
36
|
-
xml = '<a><b></b></a>'
|
37
|
-
doc = Nokogiri.XML xml
|
38
|
-
|
39
|
-
list = []
|
40
|
-
doc.canonicalize do |node, parent|
|
41
|
-
list << [node, parent]
|
42
|
-
true
|
43
|
-
end
|
44
|
-
if Nokogiri.jruby?
|
45
|
-
assert_equal(
|
46
|
-
['a', 'document', 'document', nil, 'b', 'a'],
|
47
|
-
list.flatten.map { |x| x ? x.name : x }
|
48
|
-
)
|
49
|
-
else
|
50
|
-
assert_equal(
|
51
|
-
['a', 'document', 'document', nil, 'b', 'a', 'a', 'document'],
|
52
|
-
list.flatten.map { |x| x ? x.name : x }
|
53
|
-
)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_exclude_block_true
|
58
|
-
xml = '<a><b></b></a>'
|
59
|
-
doc = Nokogiri.XML xml
|
60
|
-
|
61
|
-
c14n = doc.canonicalize do |node, parent|
|
62
|
-
true
|
63
|
-
end
|
64
|
-
assert_equal xml, c14n
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_exclude_block_false
|
68
|
-
xml = '<a><b></b></a>'
|
69
|
-
doc = Nokogiri.XML xml
|
70
|
-
|
71
|
-
c14n = doc.canonicalize do |node, parent|
|
72
|
-
false
|
73
|
-
end
|
74
|
-
assert_equal '', c14n
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_exclude_block_nil
|
78
|
-
xml = '<a><b></b></a>'
|
79
|
-
doc = Nokogiri.XML xml
|
80
|
-
|
81
|
-
c14n = doc.canonicalize do |node, parent|
|
82
|
-
nil
|
83
|
-
end
|
84
|
-
assert_equal '', c14n
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_exclude_block_object
|
88
|
-
xml = '<a><b></b></a>'
|
89
|
-
doc = Nokogiri.XML xml
|
90
|
-
|
91
|
-
c14n = doc.canonicalize do |node, parent|
|
92
|
-
Object.new
|
93
|
-
end
|
94
|
-
assert_equal xml, c14n
|
95
|
-
end
|
96
|
-
|
97
|
-
def test_c14n_node
|
98
|
-
xml = '<a><b><c></c></b></a>'
|
99
|
-
doc = Nokogiri.XML xml
|
100
|
-
c14n = doc.at_xpath('//b').canonicalize
|
101
|
-
assert_equal '<b><c></c></b>', c14n
|
102
|
-
end
|
103
|
-
|
104
|
-
def test_c14n_modes
|
105
|
-
# http://www.w3.org/TR/xml-exc-c14n/#sec-Enveloping
|
106
|
-
|
107
|
-
doc1 = Nokogiri.XML <<-EOXML
|
108
|
-
<n0:local xmlns:n0="http://foobar.org" xmlns:n3="ftp://example.org">
|
109
|
-
<n1:elem2 xmlns:n1="http://example.net" xml:lang="en">
|
110
|
-
<n3:stuff xmlns:n3="ftp://example.org"/>
|
111
|
-
</n1:elem2>
|
112
|
-
</n0:local>
|
113
|
-
EOXML
|
114
|
-
|
115
|
-
doc2 = Nokogiri.XML <<-EOXML
|
116
|
-
<n2:pdu xmlns:n1="http://example.com"
|
117
|
-
xmlns:n2="http://foo.example"
|
118
|
-
xmlns:n4="http://foo.example"
|
119
|
-
xml:lang="fr"
|
120
|
-
xml:space="retain">
|
121
|
-
<n1:elem2 xmlns:n1="http://example.net" xml:lang="en">
|
122
|
-
<n3:stuff xmlns:n3="ftp://example.org"/>
|
123
|
-
<n4:stuff />
|
124
|
-
</n1:elem2>
|
125
|
-
</n2:pdu>
|
126
|
-
EOXML
|
127
|
-
|
128
|
-
c14n = doc1.at_xpath('//n1:elem2', {'n1' => 'http://example.net'}).canonicalize
|
129
|
-
assert_equal '<n1:elem2 xmlns:n0="http://foobar.org" xmlns:n1="http://example.net" xmlns:n3="ftp://example.org" xml:lang="en">
|
130
|
-
<n3:stuff></n3:stuff>
|
131
|
-
</n1:elem2>', c14n
|
132
|
-
|
133
|
-
expected = '<n1:elem2 xmlns:n1="http://example.net" xmlns:n2="http://foo.example" xmlns:n4="http://foo.example" xml:lang="en" xml:space="retain">
|
134
|
-
<n3:stuff xmlns:n3="ftp://example.org"></n3:stuff>
|
135
|
-
<n4:stuff></n4:stuff>
|
136
|
-
</n1:elem2>'
|
137
|
-
c14n = doc2.at_xpath('//n1:elem2', {'n1' => 'http://example.net'}).canonicalize
|
138
|
-
assert_equal expected, c14n
|
139
|
-
|
140
|
-
expected = '<n1:elem2 xmlns:n1="http://example.net" xml:lang="en">
|
141
|
-
<n3:stuff xmlns:n3="ftp://example.org"></n3:stuff>
|
142
|
-
</n1:elem2>'
|
143
|
-
c14n = doc1.at_xpath('//n1:elem2', {'n1' => 'http://example.net'}).canonicalize(XML::XML_C14N_EXCLUSIVE_1_0)
|
144
|
-
assert_equal expected, c14n
|
145
|
-
|
146
|
-
expected = '<n1:elem2 xmlns:n1="http://example.net" xml:lang="en">
|
147
|
-
<n3:stuff xmlns:n3="ftp://example.org"></n3:stuff>
|
148
|
-
<n4:stuff xmlns:n4="http://foo.example"></n4:stuff>
|
149
|
-
</n1:elem2>'
|
150
|
-
c14n = doc2.at_xpath('//n1:elem2', {'n1' => 'http://example.net'}).canonicalize(XML::XML_C14N_EXCLUSIVE_1_0)
|
151
|
-
assert_equal expected, c14n
|
152
|
-
|
153
|
-
expected = '<n1:elem2 xmlns:n1="http://example.net" xmlns:n2="http://foo.example" xml:lang="en">
|
154
|
-
<n3:stuff xmlns:n3="ftp://example.org"></n3:stuff>
|
155
|
-
<n4:stuff xmlns:n4="http://foo.example"></n4:stuff>
|
156
|
-
</n1:elem2>'
|
157
|
-
c14n = doc2.at_xpath('//n1:elem2', {'n1' => 'http://example.net'}).canonicalize(XML::XML_C14N_EXCLUSIVE_1_0, ['n2'])
|
158
|
-
assert_equal expected, c14n
|
159
|
-
|
160
|
-
expected = '<n1:elem2 xmlns:n1="http://example.net" xmlns:n2="http://foo.example" xmlns:n4="http://foo.example" xml:lang="en">
|
161
|
-
<n3:stuff xmlns:n3="ftp://example.org"></n3:stuff>
|
162
|
-
<n4:stuff></n4:stuff>
|
163
|
-
</n1:elem2>'
|
164
|
-
c14n = doc2.at_xpath('//n1:elem2', {'n1' => 'http://example.net'}).canonicalize(XML::XML_C14N_EXCLUSIVE_1_0, ['n2', 'n4'])
|
165
|
-
assert_equal expected, c14n
|
166
|
-
end
|
167
|
-
|
168
|
-
def test_wrong_params
|
169
|
-
xml = '<a><b></b></a>'
|
170
|
-
doc = Nokogiri.XML xml
|
171
|
-
|
172
|
-
assert_raise(TypeError){ doc.canonicalize :wrong_type }
|
173
|
-
assert_raise(TypeError){ doc.canonicalize nil, :wrong_type }
|
174
|
-
doc.canonicalize nil, nil, :wrong_type
|
175
|
-
end
|
176
|
-
|
177
|
-
|
178
|
-
end
|
179
|
-
end
|
180
|
-
end
|
data/test/xml/test_cdata.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestCDATA < Nokogiri::TestCase
|
6
|
-
def setup
|
7
|
-
super
|
8
|
-
@xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_cdata_node
|
12
|
-
name = @xml.xpath('//employee[2]/name').first
|
13
|
-
assert cdata = name.children[1]
|
14
|
-
assert cdata.cdata?
|
15
|
-
assert_equal '#cdata-section', cdata.name
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_new
|
19
|
-
node = CDATA.new(@xml, "foo")
|
20
|
-
assert_equal "foo", node.content
|
21
|
-
|
22
|
-
node = CDATA.new(@xml.root, "foo")
|
23
|
-
assert_equal "foo", node.content
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_new_with_nil
|
27
|
-
node = CDATA.new(@xml, nil)
|
28
|
-
assert_nil node.content
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_new_with_non_string
|
32
|
-
assert_raises(TypeError) do
|
33
|
-
CDATA.new(@xml, 1.234)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_lots_of_new_cdata
|
38
|
-
assert 100.times { CDATA.new(@xml, "asdfasdf") }
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_content=
|
42
|
-
node = CDATA.new(@xml, 'foo')
|
43
|
-
assert_equal('foo', node.content)
|
44
|
-
|
45
|
-
node.content = '& <foo> &'
|
46
|
-
assert_equal('& <foo> &', node.content)
|
47
|
-
assert_equal('<![CDATA[& <foo> &]]>', node.to_xml)
|
48
|
-
|
49
|
-
node.content = 'foo ]]> bar'
|
50
|
-
assert_equal('foo ]]> bar', node.content)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
data/test/xml/test_comment.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestComment < Nokogiri::TestCase
|
6
|
-
def setup
|
7
|
-
super
|
8
|
-
@xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_new
|
12
|
-
comment = Nokogiri::XML::Comment.new(@xml, 'hello world')
|
13
|
-
assert_equal('<!--hello world-->', comment.to_s)
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_comment?
|
17
|
-
comment = Nokogiri::XML::Comment.new(@xml, 'hello world')
|
18
|
-
assert(comment.comment?)
|
19
|
-
assert(!@xml.root.comment?)
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_passing_a_node_uses_the_node_document
|
23
|
-
comment = Nokogiri::XML::Comment.new(@xml.at_css("employee"), 'hello world')
|
24
|
-
assert_equal @xml, comment.document
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_passing_anything_else
|
28
|
-
assert_raises ArgumentError do
|
29
|
-
Nokogiri::XML::Comment.new("NOT A NOKOGIRI CLASS", 'hello world')
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_many_comments
|
34
|
-
100.times {
|
35
|
-
Nokogiri::XML::Comment.new(@xml, 'hello world')
|
36
|
-
}
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|