nokogiri 1.9.0.rc1 → 1.9.0
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/lib/nokogiri/css/parser.rb +61 -61
- data/lib/nokogiri/version.rb +1 -1
- metadata +4 -146
- 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 -1402
- 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 -371
- data/ROADMAP.md +0 -111
- data/Rakefile +0 -358
- 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 -48
- 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 -722
- 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 -226
- 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 -96
- data/test/xml/test_attribute_decl.rb +0 -86
- data/test/xml/test_builder.rb +0 -353
- 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 -312
- 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 -1379
- 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 -661
- data/test/xml/test_node_set.rb +0 -828
- 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 -69
- 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
@@ -1,134 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require "helper"
|
3
|
-
|
4
|
-
module Nokogiri
|
5
|
-
module XML
|
6
|
-
class TestReaderEncoding < Nokogiri::TestCase
|
7
|
-
def setup
|
8
|
-
super
|
9
|
-
@reader = Nokogiri::XML::Reader(
|
10
|
-
File.read(XML_FILE),
|
11
|
-
XML_FILE,
|
12
|
-
'UTF-8'
|
13
|
-
)
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_attribute_at
|
17
|
-
@reader.each do |node|
|
18
|
-
next unless attribute = node.attribute_at(0)
|
19
|
-
assert_equal @reader.encoding, attribute.encoding.name
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_attributes
|
24
|
-
@reader.each do |node|
|
25
|
-
node.attributes.each do |k,v|
|
26
|
-
assert_equal @reader.encoding, k.encoding.name
|
27
|
-
assert_equal @reader.encoding, v.encoding.name
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_attribute
|
33
|
-
xml = <<-eoxml
|
34
|
-
<x xmlns:tenderlove='http://tenderlovemaking.com/'>
|
35
|
-
<tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
|
36
|
-
</x>
|
37
|
-
eoxml
|
38
|
-
reader = Nokogiri::XML::Reader(xml, nil, 'UTF-8')
|
39
|
-
reader.each do |node|
|
40
|
-
next unless attribute = node.attribute('awesome')
|
41
|
-
assert_equal reader.encoding, attribute.encoding.name
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_xml_version
|
46
|
-
@reader.each do |node|
|
47
|
-
next unless version = node.xml_version
|
48
|
-
assert_equal @reader.encoding, version.encoding.name
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_lang
|
53
|
-
xml = <<-eoxml
|
54
|
-
<awesome>
|
55
|
-
<p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
|
56
|
-
<p xml:lang="ja">日本語が上手です</p>
|
57
|
-
</awesome>
|
58
|
-
eoxml
|
59
|
-
|
60
|
-
reader = Nokogiri::XML::Reader(xml, nil, 'UTF-8')
|
61
|
-
reader.each do |node|
|
62
|
-
next unless lang = node.lang
|
63
|
-
assert_equal reader.encoding, lang.encoding.name
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_value
|
68
|
-
called = false
|
69
|
-
@reader.each do |node|
|
70
|
-
next unless value = node.value
|
71
|
-
assert_equal @reader.encoding, value.encoding.name
|
72
|
-
called = true
|
73
|
-
end
|
74
|
-
assert called
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_prefix
|
78
|
-
xml = <<-eoxml
|
79
|
-
<x xmlns:edi='http://ecommerce.example.org/schema'>
|
80
|
-
<edi:foo>hello</edi:foo>
|
81
|
-
</x>
|
82
|
-
eoxml
|
83
|
-
reader = Nokogiri::XML::Reader(xml, nil, 'UTF-8')
|
84
|
-
reader.each do |node|
|
85
|
-
next unless prefix = node.prefix
|
86
|
-
assert_equal reader.encoding, prefix.encoding.name
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_ns_uri
|
91
|
-
xml = <<-eoxml
|
92
|
-
<x xmlns:edi='http://ecommerce.example.org/schema'>
|
93
|
-
<edi:foo>hello</edi:foo>
|
94
|
-
</x>
|
95
|
-
eoxml
|
96
|
-
reader = Nokogiri::XML::Reader(xml, nil, 'UTF-8')
|
97
|
-
reader.each do |node|
|
98
|
-
next unless uri = node.namespace_uri
|
99
|
-
assert_equal reader.encoding, uri.encoding.name
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_local_name
|
104
|
-
xml = <<-eoxml
|
105
|
-
<x xmlns:edi='http://ecommerce.example.org/schema'>
|
106
|
-
<edi:foo>hello</edi:foo>
|
107
|
-
</x>
|
108
|
-
eoxml
|
109
|
-
reader = Nokogiri::XML::Reader(xml, nil, 'UTF-8')
|
110
|
-
reader.each do |node|
|
111
|
-
next unless lname = node.local_name
|
112
|
-
assert_equal reader.encoding, lname.encoding.name
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_name
|
117
|
-
@reader.each do |node|
|
118
|
-
next unless name = node.name
|
119
|
-
assert_equal @reader.encoding, name.encoding.name
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_value_lookup_segfault
|
124
|
-
skip("JRuby doesn't do GC.") if Nokogiri.jruby?
|
125
|
-
stress_memory_while do
|
126
|
-
while node = @reader.read
|
127
|
-
nodes = node.send(:attr_nodes)
|
128
|
-
nodes.first.name if nodes.first
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
data/test/xml/test_relax_ng.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestRelaxNG < Nokogiri::TestCase
|
6
|
-
def setup
|
7
|
-
assert @schema = Nokogiri::XML::RelaxNG(File.read(ADDRESS_SCHEMA_FILE))
|
8
|
-
end
|
9
|
-
|
10
|
-
def test_parse_with_memory
|
11
|
-
assert_instance_of Nokogiri::XML::RelaxNG, @schema
|
12
|
-
assert_equal 0, @schema.errors.length
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_new
|
16
|
-
assert schema = Nokogiri::XML::RelaxNG.new(
|
17
|
-
File.read(ADDRESS_SCHEMA_FILE))
|
18
|
-
assert_instance_of Nokogiri::XML::RelaxNG, schema
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_parse_with_io
|
22
|
-
xsd = nil
|
23
|
-
File.open(ADDRESS_SCHEMA_FILE, 'rb') { |f|
|
24
|
-
assert xsd = Nokogiri::XML::RelaxNG(f)
|
25
|
-
}
|
26
|
-
assert_equal 0, xsd.errors.length
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_parse_with_errors
|
30
|
-
xml = File.read(ADDRESS_SCHEMA_FILE).sub(/name="/, 'name=')
|
31
|
-
assert_raises(Nokogiri::XML::SyntaxError) {
|
32
|
-
Nokogiri::XML::RelaxNG(xml)
|
33
|
-
}
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_validate_document
|
37
|
-
doc = Nokogiri::XML(File.read(ADDRESS_XML_FILE))
|
38
|
-
assert errors = @schema.validate(doc)
|
39
|
-
assert_equal 0, errors.length
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_validate_invalid_document
|
43
|
-
# Empty address book is not allowed
|
44
|
-
read_doc = '<addressBook></addressBook>'
|
45
|
-
|
46
|
-
assert errors = @schema.validate(Nokogiri::XML(read_doc))
|
47
|
-
assert_equal 1, errors.length
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_valid?
|
51
|
-
valid_doc = Nokogiri::XML(File.read(ADDRESS_XML_FILE))
|
52
|
-
|
53
|
-
invalid_doc = Nokogiri::XML('<addressBook></addressBook>')
|
54
|
-
|
55
|
-
assert(@schema.valid?(valid_doc))
|
56
|
-
assert(!@schema.valid?(invalid_doc))
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
data/test/xml/test_schema.rb
DELETED
@@ -1,142 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestSchema < Nokogiri::TestCase
|
6
|
-
def setup
|
7
|
-
assert @xsd = Nokogiri::XML::Schema(File.read(PO_SCHEMA_FILE))
|
8
|
-
end
|
9
|
-
|
10
|
-
def test_schema_from_document
|
11
|
-
doc = Nokogiri::XML(File.open(PO_SCHEMA_FILE))
|
12
|
-
assert doc
|
13
|
-
xsd = Nokogiri::XML::Schema.from_document doc
|
14
|
-
assert_instance_of Nokogiri::XML::Schema, xsd
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_invalid_schema_do_not_raise_exceptions
|
18
|
-
xsd = Nokogiri::XML::Schema.new <<EOF
|
19
|
-
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
20
|
-
<xs:group name="foo1">
|
21
|
-
<xs:sequence>
|
22
|
-
<xs:element name="bar" type="xs:boolean" />
|
23
|
-
</xs:sequence>
|
24
|
-
</xs:group>
|
25
|
-
<xs:group name="foo2">
|
26
|
-
<xs:sequence>
|
27
|
-
<xs:element name="bar" type="xs:string" />
|
28
|
-
</xs:sequence>
|
29
|
-
</xs:group>
|
30
|
-
<xs:element name="foo">
|
31
|
-
<xs:complexType>
|
32
|
-
<xs:choice>
|
33
|
-
<xs:group ref="foo1"/>
|
34
|
-
<xs:group ref="foo2"/>
|
35
|
-
</xs:choice>
|
36
|
-
</xs:complexType>
|
37
|
-
</xs:element>
|
38
|
-
</xs:schema>
|
39
|
-
EOF
|
40
|
-
assert_instance_of Nokogiri::XML::Schema, xsd
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_schema_from_document_node
|
44
|
-
doc = Nokogiri::XML(File.open(PO_SCHEMA_FILE))
|
45
|
-
assert doc
|
46
|
-
xsd = Nokogiri::XML::Schema.from_document doc.root
|
47
|
-
assert_instance_of Nokogiri::XML::Schema, xsd
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_schema_validates_with_relative_paths
|
51
|
-
xsd = File.join(ASSETS_DIR, 'foo', 'foo.xsd')
|
52
|
-
xml = File.join(ASSETS_DIR, 'valid_bar.xml')
|
53
|
-
doc = Nokogiri::XML(File.open(xsd))
|
54
|
-
xsd = Nokogiri::XML::Schema.from_document doc
|
55
|
-
|
56
|
-
doc = Nokogiri::XML(File.open(xml))
|
57
|
-
assert xsd.valid?(doc)
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_parse_with_memory
|
61
|
-
assert_instance_of Nokogiri::XML::Schema, @xsd
|
62
|
-
assert_equal 0, @xsd.errors.length
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_new
|
66
|
-
assert xsd = Nokogiri::XML::Schema.new(File.read(PO_SCHEMA_FILE))
|
67
|
-
assert_instance_of Nokogiri::XML::Schema, xsd
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_parse_with_io
|
71
|
-
xsd = nil
|
72
|
-
File.open(PO_SCHEMA_FILE, 'rb') { |f|
|
73
|
-
assert xsd = Nokogiri::XML::Schema(f)
|
74
|
-
}
|
75
|
-
assert_equal 0, xsd.errors.length
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_parse_with_errors
|
79
|
-
xml = File.read(PO_SCHEMA_FILE).sub(/name="/, 'name=')
|
80
|
-
assert_raises(Nokogiri::XML::SyntaxError) {
|
81
|
-
Nokogiri::XML::Schema(xml)
|
82
|
-
}
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_validate_document
|
86
|
-
doc = Nokogiri::XML(File.read(PO_XML_FILE))
|
87
|
-
assert errors = @xsd.validate(doc)
|
88
|
-
assert_equal 0, errors.length
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_validate_file
|
92
|
-
assert errors = @xsd.validate(PO_XML_FILE)
|
93
|
-
assert_equal 0, errors.length
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_validate_invalid_document
|
97
|
-
doc = Nokogiri::XML File.read(PO_XML_FILE)
|
98
|
-
doc.css("city").unlink
|
99
|
-
|
100
|
-
assert errors = @xsd.validate(doc)
|
101
|
-
assert_equal 2, errors.length
|
102
|
-
end
|
103
|
-
|
104
|
-
def test_validate_invalid_file
|
105
|
-
tempfile = Tempfile.new("xml")
|
106
|
-
|
107
|
-
doc = Nokogiri::XML File.read(PO_XML_FILE)
|
108
|
-
doc.css("city").unlink
|
109
|
-
tempfile.write doc.to_xml
|
110
|
-
tempfile.close
|
111
|
-
|
112
|
-
assert errors = @xsd.validate(tempfile.path)
|
113
|
-
assert_equal 2, errors.length
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_validate_non_document
|
117
|
-
string = File.read(PO_XML_FILE)
|
118
|
-
assert_raise(ArgumentError) {@xsd.validate(string)}
|
119
|
-
end
|
120
|
-
|
121
|
-
def test_valid?
|
122
|
-
valid_doc = Nokogiri::XML(File.read(PO_XML_FILE))
|
123
|
-
|
124
|
-
invalid_doc = Nokogiri::XML(
|
125
|
-
File.read(PO_XML_FILE).gsub(/<city>[^<]*<\/city>/, '')
|
126
|
-
)
|
127
|
-
|
128
|
-
assert(@xsd.valid?(valid_doc))
|
129
|
-
assert(!@xsd.valid?(invalid_doc))
|
130
|
-
end
|
131
|
-
|
132
|
-
def test_xsd_with_dtd
|
133
|
-
Dir.chdir(File.join(ASSETS_DIR, 'saml')) do
|
134
|
-
# works
|
135
|
-
Nokogiri::XML::Schema(IO.read('xmldsig_schema.xsd'))
|
136
|
-
# was not working
|
137
|
-
Nokogiri::XML::Schema(IO.read('saml20protocol_schema.xsd'))
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestSyntaxError < Nokogiri::TestCase
|
6
|
-
def test_new
|
7
|
-
error = Nokogiri::XML::SyntaxError.new 'hello'
|
8
|
-
assert_equal 'hello', error.message
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_line_column_level_libxml
|
12
|
-
skip unless Nokogiri.uses_libxml?
|
13
|
-
|
14
|
-
bad_doc = Nokogiri::XML('test')
|
15
|
-
error = bad_doc.errors.first
|
16
|
-
|
17
|
-
assert_equal "1:1: FATAL: Start tag expected, '<' not found", error.message
|
18
|
-
assert_equal 1, error.line
|
19
|
-
assert_equal 1, error.column
|
20
|
-
assert_equal 3, error.level
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_line_column_level_jruby
|
24
|
-
skip unless Nokogiri.jruby?
|
25
|
-
|
26
|
-
bad_doc = Nokogiri::XML('<root>test</bar>')
|
27
|
-
error = bad_doc.errors.first
|
28
|
-
|
29
|
-
assert_equal "The element type \"root\" must be terminated by the matching end-tag \"</root>\".", error.message
|
30
|
-
assert_nil error.line
|
31
|
-
assert_nil error.column
|
32
|
-
assert_nil error.level
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
data/test/xml/test_text.rb
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestText < Nokogiri::TestCase
|
6
|
-
def test_css_path
|
7
|
-
doc = Nokogiri.XML "<root> foo <a>something</a> bar bazz </root>"
|
8
|
-
node = doc.root.children[2]
|
9
|
-
assert_instance_of Nokogiri::XML::Text, node
|
10
|
-
assert_equal node, doc.at_css(node.css_path)
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_inspect
|
14
|
-
node = Text.new('hello world', Document.new)
|
15
|
-
assert_equal "#<#{node.class.name}:#{sprintf("0x%x",node.object_id)} #{node.text.inspect}>", node.inspect
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_new
|
19
|
-
node = Text.new('hello world', Document.new)
|
20
|
-
assert node
|
21
|
-
assert_equal('hello world', node.content)
|
22
|
-
assert_instance_of Nokogiri::XML::Text, node
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_lots_of_text
|
26
|
-
100.times { Text.new('hello world', Document.new) }
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_new_without_document
|
30
|
-
doc = Document.new
|
31
|
-
node = Nokogiri::XML::Element.new('foo', doc)
|
32
|
-
|
33
|
-
assert Text.new('hello world', node)
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_content=
|
37
|
-
node = Text.new('foo', Document.new)
|
38
|
-
assert_equal('foo', node.content)
|
39
|
-
node.content = '& <foo> &'
|
40
|
-
assert_equal('& <foo> &', node.content)
|
41
|
-
assert_equal('& <foo> &amp;', node.to_xml)
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_add_child
|
45
|
-
node = Text.new('foo', Document.new)
|
46
|
-
if Nokogiri.jruby?
|
47
|
-
exc = RuntimeError
|
48
|
-
else
|
49
|
-
exc = ArgumentError
|
50
|
-
end
|
51
|
-
assert_raises(exc) {
|
52
|
-
node.add_child Text.new('bar', Document.new)
|
53
|
-
}
|
54
|
-
assert_raises(exc) {
|
55
|
-
node << Text.new('bar', Document.new)
|
56
|
-
}
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_wrap
|
60
|
-
xml = '<root><thing><div class="title">important thing</div></thing></root>'
|
61
|
-
doc = Nokogiri::XML(xml)
|
62
|
-
text = doc.at_css("div").children.first
|
63
|
-
text.wrap("<wrapper/>")
|
64
|
-
assert_equal 'wrapper', text.parent.name
|
65
|
-
assert_equal 'wrapper', doc.at_css("div").children.first.name
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
@@ -1,483 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
require 'stringio'
|
4
|
-
|
5
|
-
module Nokogiri
|
6
|
-
module XML
|
7
|
-
class TestUnparentedNode < Nokogiri::TestCase
|
8
|
-
def setup
|
9
|
-
begin
|
10
|
-
xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
|
11
|
-
@node = xml.at('staff')
|
12
|
-
@node.unlink
|
13
|
-
end
|
14
|
-
GC.start # try to GC the document
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_node_still_has_document
|
18
|
-
assert @node.document
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_add_namespace
|
22
|
-
node = @node.at('address')
|
23
|
-
node.unlink
|
24
|
-
node.add_namespace('foo', 'http://tenderlovemaking.com')
|
25
|
-
assert_equal 'http://tenderlovemaking.com', node.namespaces['xmlns:foo']
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_write_to
|
29
|
-
io = StringIO.new
|
30
|
-
@node.write_to io
|
31
|
-
io.rewind
|
32
|
-
assert_equal @node.to_xml, io.read
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_attribute_with_symbol
|
36
|
-
assert_equal 'Yes', @node.css('address').first[:domestic]
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_write_to_with_block
|
40
|
-
called = false
|
41
|
-
io = StringIO.new
|
42
|
-
conf = nil
|
43
|
-
@node.write_to io do |config|
|
44
|
-
called = true
|
45
|
-
conf = config
|
46
|
-
config.format.as_html.no_empty_tags
|
47
|
-
end
|
48
|
-
io.rewind
|
49
|
-
assert called
|
50
|
-
assert_equal @node.serialize(:save_with => conf.options), io.read
|
51
|
-
end
|
52
|
-
|
53
|
-
%w{ xml html xhtml }.each do |type|
|
54
|
-
define_method(:"test_write_#{type}_to") do
|
55
|
-
io = StringIO.new
|
56
|
-
assert @node.send(:"write_#{type}_to", io)
|
57
|
-
io.rewind
|
58
|
-
assert_match @node.send(:"to_#{type}"), io.read
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_serialize_with_block
|
63
|
-
called = false
|
64
|
-
conf = nil
|
65
|
-
string = @node.serialize do |config|
|
66
|
-
called = true
|
67
|
-
conf = config
|
68
|
-
config.format.as_html.no_empty_tags
|
69
|
-
end
|
70
|
-
assert called
|
71
|
-
assert_equal @node.serialize(nil, conf.options), string
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_values
|
75
|
-
assert_equal %w{ Yes Yes }, @node.xpath('.//address')[1].values
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_keys
|
79
|
-
assert_equal %w{ domestic street }, @node.xpath('.//address')[1].keys
|
80
|
-
end
|
81
|
-
|
82
|
-
def test_each
|
83
|
-
attributes = []
|
84
|
-
@node.xpath('.//address')[1].each do |key, value|
|
85
|
-
attributes << [key, value]
|
86
|
-
end
|
87
|
-
assert_equal [['domestic', 'Yes'], ['street', 'Yes']], attributes
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_new
|
91
|
-
assert node = Nokogiri::XML::Node.new('input', @node)
|
92
|
-
assert_equal 1, node.node_type
|
93
|
-
end
|
94
|
-
|
95
|
-
def test_to_str
|
96
|
-
assert name = @node.xpath('.//name').first
|
97
|
-
assert_match(/Margaret/, '' + name)
|
98
|
-
assert_equal('Margaret Martin', '' + name.children.first)
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_ancestors
|
102
|
-
assert(address = @node.xpath('.//address').first)
|
103
|
-
assert_equal 2, address.ancestors.length
|
104
|
-
assert_equal ['employee', 'staff'],
|
105
|
-
address.ancestors.map { |x| x ? x.name : x }
|
106
|
-
end
|
107
|
-
|
108
|
-
def test_read_only?
|
109
|
-
assert entity_decl = @node.internal_subset.children.find { |x|
|
110
|
-
x.type == Node::ENTITY_DECL
|
111
|
-
}
|
112
|
-
assert entity_decl.read_only?
|
113
|
-
end
|
114
|
-
|
115
|
-
def test_remove_attribute
|
116
|
-
address = @node.xpath('./employee/address').first
|
117
|
-
assert_equal 'Yes', address['domestic']
|
118
|
-
address.remove_attribute 'domestic'
|
119
|
-
assert_nil address['domestic']
|
120
|
-
end
|
121
|
-
|
122
|
-
def test_delete
|
123
|
-
address = @node.xpath('./employee/address').first
|
124
|
-
assert_equal 'Yes', address['domestic']
|
125
|
-
address.delete 'domestic'
|
126
|
-
assert_nil address['domestic']
|
127
|
-
end
|
128
|
-
|
129
|
-
def test_add_child_in_same_document
|
130
|
-
child = @node.css('employee').first
|
131
|
-
|
132
|
-
assert child.children.last
|
133
|
-
assert new_child = child.children.first
|
134
|
-
|
135
|
-
last = child.children.last
|
136
|
-
|
137
|
-
child.add_child(new_child)
|
138
|
-
assert_equal new_child, child.children.last
|
139
|
-
assert_equal last, child.children.last
|
140
|
-
end
|
141
|
-
|
142
|
-
def test_add_child_from_other_document
|
143
|
-
d1 = Nokogiri::XML("<root><item>1</item><item>2</item></root>")
|
144
|
-
d2 = Nokogiri::XML("<root><item>3</item><item>4</item></root>")
|
145
|
-
|
146
|
-
d2.at('root').search('item').each do |i|
|
147
|
-
d1.at('root').add_child i
|
148
|
-
end
|
149
|
-
|
150
|
-
assert_equal 0, d2.search('item').size
|
151
|
-
assert_equal 4, d1.search('item').size
|
152
|
-
end
|
153
|
-
|
154
|
-
def test_add_child
|
155
|
-
xml = Nokogiri::XML(<<-eoxml)
|
156
|
-
<root>
|
157
|
-
<a>Hello world</a>
|
158
|
-
</root>
|
159
|
-
eoxml
|
160
|
-
text_node = Nokogiri::XML::Text.new('hello', xml)
|
161
|
-
assert_equal Nokogiri::XML::Node::TEXT_NODE, text_node.type
|
162
|
-
xml.root.add_child text_node
|
163
|
-
assert_match 'hello', xml.to_s
|
164
|
-
end
|
165
|
-
|
166
|
-
def test_chevron_works_as_add_child
|
167
|
-
xml = Nokogiri::XML(<<-eoxml)
|
168
|
-
<root>
|
169
|
-
<a>Hello world</a>
|
170
|
-
</root>
|
171
|
-
eoxml
|
172
|
-
text_node = Nokogiri::XML::Text.new('hello', xml)
|
173
|
-
xml.root << text_node
|
174
|
-
assert_match 'hello', xml.to_s
|
175
|
-
end
|
176
|
-
|
177
|
-
def test_add_previous_sibling
|
178
|
-
xml = Nokogiri::XML(<<-eoxml)
|
179
|
-
<root>
|
180
|
-
<a>Hello world</a>
|
181
|
-
</root>
|
182
|
-
eoxml
|
183
|
-
b_node = Nokogiri::XML::Node.new('a', xml)
|
184
|
-
assert_equal Nokogiri::XML::Node::ELEMENT_NODE, b_node.type
|
185
|
-
b_node.content = 'first'
|
186
|
-
a_node = xml.xpath('.//a').first
|
187
|
-
a_node.add_previous_sibling(b_node)
|
188
|
-
assert_equal('first', xml.xpath('.//a').first.text)
|
189
|
-
end
|
190
|
-
|
191
|
-
def test_add_previous_sibling_merge
|
192
|
-
xml = Nokogiri::XML(<<-eoxml)
|
193
|
-
<root>
|
194
|
-
<a>Hello world</a>
|
195
|
-
</root>
|
196
|
-
eoxml
|
197
|
-
|
198
|
-
assert a_tag = xml.css('a').first
|
199
|
-
|
200
|
-
left_space = a_tag.previous
|
201
|
-
right_space = a_tag.next
|
202
|
-
assert left_space.text?
|
203
|
-
assert right_space.text?
|
204
|
-
|
205
|
-
left_space.add_previous_sibling(right_space)
|
206
|
-
assert_equal left_space, right_space
|
207
|
-
end
|
208
|
-
|
209
|
-
def test_add_next_sibling_merge
|
210
|
-
xml = Nokogiri::XML(<<-eoxml)
|
211
|
-
<root>
|
212
|
-
<a>Hello world</a>
|
213
|
-
</root>
|
214
|
-
eoxml
|
215
|
-
|
216
|
-
assert a_tag = xml.css('a').first
|
217
|
-
|
218
|
-
left_space = a_tag.previous
|
219
|
-
right_space = a_tag.next
|
220
|
-
assert left_space.text?
|
221
|
-
assert right_space.text?
|
222
|
-
|
223
|
-
right_space.add_next_sibling(left_space)
|
224
|
-
assert_equal left_space, right_space
|
225
|
-
end
|
226
|
-
|
227
|
-
def test_add_next_sibling_to_root_raises_exception
|
228
|
-
xml = Nokogiri::XML(<<-eoxml)
|
229
|
-
<root />
|
230
|
-
eoxml
|
231
|
-
|
232
|
-
node = Nokogiri::XML::Node.new 'child', xml
|
233
|
-
|
234
|
-
assert_raise(ArgumentError) do
|
235
|
-
xml.root.add_next_sibling(node)
|
236
|
-
end
|
237
|
-
end
|
238
|
-
|
239
|
-
def test_add_previous_sibling_to_root_raises_exception
|
240
|
-
xml = Nokogiri::XML(<<-eoxml)
|
241
|
-
<root />
|
242
|
-
eoxml
|
243
|
-
|
244
|
-
node = Nokogiri::XML::Node.new 'child', xml
|
245
|
-
|
246
|
-
assert_raise(ArgumentError) do
|
247
|
-
xml.root.add_previous_sibling(node)
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
def test_document_root_can_have_a_comment_sibling_via_add_child
|
252
|
-
doc = Nokogiri::XML "<root>foo</root>"
|
253
|
-
comment = Nokogiri::XML::Comment.new(doc, "this is a comment")
|
254
|
-
doc.add_child comment
|
255
|
-
assert_equal [doc.root, comment], doc.children.to_a
|
256
|
-
end
|
257
|
-
|
258
|
-
def test_document_root_can_have_a_comment_sibling_via_prepend_child
|
259
|
-
doc = Nokogiri::XML "<root>foo</root>"
|
260
|
-
comment = Nokogiri::XML::Comment.new(doc, "this is a comment")
|
261
|
-
doc.prepend_child comment
|
262
|
-
assert_equal [comment, doc.root], doc.children.to_a
|
263
|
-
end
|
264
|
-
|
265
|
-
def test_document_root_can_have_a_comment_sibling_via_add_next_sibling
|
266
|
-
doc = Nokogiri::XML "<root>foo</root>"
|
267
|
-
comment = Nokogiri::XML::Comment.new(doc, "this is a comment")
|
268
|
-
doc.root.add_next_sibling comment
|
269
|
-
assert_equal [doc.root, comment], doc.children.to_a
|
270
|
-
end
|
271
|
-
|
272
|
-
def test_document_root_can_have_a_comment_sibling_via_add_previous_sibling
|
273
|
-
doc = Nokogiri::XML "<root>foo</root>"
|
274
|
-
comment = Nokogiri::XML::Comment.new(doc, "this is a comment")
|
275
|
-
doc.root.add_previous_sibling comment
|
276
|
-
assert_equal [comment, doc.root], doc.children.to_a
|
277
|
-
end
|
278
|
-
|
279
|
-
def test_document_root_can_have_a_processing_instruction_sibling_via_add_child
|
280
|
-
doc = Nokogiri::XML "<root>foo</root>"
|
281
|
-
pi = Nokogiri::XML::ProcessingInstruction.new(doc, "xml-stylesheet", %q{type="text/xsl" href="foo.xsl"})
|
282
|
-
doc.add_child pi
|
283
|
-
assert_equal [doc.root, pi], doc.children.to_a
|
284
|
-
end
|
285
|
-
|
286
|
-
def test_document_root_can_have_a_processing_instruction_sibling_via_prepend_child
|
287
|
-
doc = Nokogiri::XML "<root>foo</root>"
|
288
|
-
pi = Nokogiri::XML::ProcessingInstruction.new(doc, "xml-stylesheet", %q{type="text/xsl" href="foo.xsl"})
|
289
|
-
doc.prepend_child pi
|
290
|
-
assert_equal [pi, doc.root], doc.children.to_a
|
291
|
-
end
|
292
|
-
|
293
|
-
def test_document_root_can_have_a_processing_instruction_sibling_via_add_next_sibling
|
294
|
-
doc = Nokogiri::XML "<root>foo</root>"
|
295
|
-
pi = Nokogiri::XML::ProcessingInstruction.new(doc, "xml-stylesheet", %q{type="text/xsl" href="foo.xsl"})
|
296
|
-
doc.root.add_next_sibling pi
|
297
|
-
assert_equal [doc.root, pi], doc.children.to_a
|
298
|
-
end
|
299
|
-
|
300
|
-
def test_document_root_can_have_a_processing_instruction_sibling_via_add_previous_sibling
|
301
|
-
doc = Nokogiri::XML "<root>foo</root>"
|
302
|
-
pi = Nokogiri::XML::ProcessingInstruction.new(doc, "xml-stylesheet", %q{type="text/xsl" href="foo.xsl"})
|
303
|
-
doc.root.add_previous_sibling pi
|
304
|
-
assert_equal [pi, doc.root], doc.children.to_a
|
305
|
-
end
|
306
|
-
|
307
|
-
def test_find_by_css_with_tilde_eql
|
308
|
-
xml = Nokogiri::XML.parse(<<-eoxml)
|
309
|
-
<root>
|
310
|
-
<a>Hello world</a>
|
311
|
-
<a class='foo bar'>Bar</a>
|
312
|
-
<a class='bar foo'>Bar</a>
|
313
|
-
<a class='bar'>Bar</a>
|
314
|
-
<a class='baz bar foo'>Bar</a>
|
315
|
-
<a class='bazbarfoo'>Awesome</a>
|
316
|
-
<a class='bazbar'>Awesome</a>
|
317
|
-
</root>
|
318
|
-
eoxml
|
319
|
-
set = xml.css('a[@class~="bar"]')
|
320
|
-
assert_equal 4, set.length
|
321
|
-
assert_equal ['Bar'], set.map { |node| node.content }.uniq
|
322
|
-
end
|
323
|
-
|
324
|
-
def test_unlink
|
325
|
-
xml = Nokogiri::XML.parse(<<-eoxml)
|
326
|
-
<root>
|
327
|
-
<a class='foo bar'>Bar</a>
|
328
|
-
<a class='bar foo'>Bar</a>
|
329
|
-
<a class='bar'>Bar</a>
|
330
|
-
<a>Hello world</a>
|
331
|
-
<a class='baz bar foo'>Bar</a>
|
332
|
-
<a class='bazbarfoo'>Awesome</a>
|
333
|
-
<a class='bazbar'>Awesome</a>
|
334
|
-
</root>
|
335
|
-
eoxml
|
336
|
-
node = xml.xpath('.//a')[3]
|
337
|
-
assert_equal('Hello world', node.text)
|
338
|
-
assert_match(/Hello world/, xml.to_s)
|
339
|
-
assert node.parent
|
340
|
-
assert node.document
|
341
|
-
assert node.previous_sibling
|
342
|
-
assert node.next_sibling
|
343
|
-
node.unlink
|
344
|
-
assert !node.parent
|
345
|
-
# assert !node.document
|
346
|
-
assert !node.previous_sibling
|
347
|
-
assert !node.next_sibling
|
348
|
-
assert_no_match(/Hello world/, xml.to_s)
|
349
|
-
end
|
350
|
-
|
351
|
-
def test_next_sibling
|
352
|
-
assert sibling = @node.child.next_sibling
|
353
|
-
assert_equal('employee', sibling.name)
|
354
|
-
end
|
355
|
-
|
356
|
-
def test_previous_sibling
|
357
|
-
assert sibling = @node.child.next_sibling
|
358
|
-
assert_equal('employee', sibling.name)
|
359
|
-
assert_equal(sibling.previous_sibling, @node.child)
|
360
|
-
end
|
361
|
-
|
362
|
-
def test_name=
|
363
|
-
@node.name = 'awesome'
|
364
|
-
assert_equal('awesome', @node.name)
|
365
|
-
end
|
366
|
-
|
367
|
-
def test_child
|
368
|
-
assert child = @node.child
|
369
|
-
assert_equal('text', child.name)
|
370
|
-
end
|
371
|
-
|
372
|
-
def test_key?
|
373
|
-
assert node = @node.search('.//address').first
|
374
|
-
assert(!node.key?('asdfasdf'))
|
375
|
-
end
|
376
|
-
|
377
|
-
def test_set_property
|
378
|
-
assert node = @node.search('.//address').first
|
379
|
-
node['foo'] = 'bar'
|
380
|
-
assert_equal('bar', node['foo'])
|
381
|
-
end
|
382
|
-
|
383
|
-
def test_attributes
|
384
|
-
assert node = @node.search('.//address').first
|
385
|
-
assert_nil(node['asdfasdfasdf'])
|
386
|
-
assert_equal('Yes', node['domestic'])
|
387
|
-
|
388
|
-
assert node = @node.search('.//address')[2]
|
389
|
-
attr = node.attributes
|
390
|
-
assert_equal 2, attr.size
|
391
|
-
assert_equal 'Yes', attr['domestic'].value
|
392
|
-
assert_equal 'Yes', attr['domestic'].to_s
|
393
|
-
assert_equal 'No', attr['street'].value
|
394
|
-
end
|
395
|
-
|
396
|
-
def test_path
|
397
|
-
assert set = @node.search('.//employee')
|
398
|
-
assert node = set.first
|
399
|
-
assert_equal('/staff/employee[1]', node.path)
|
400
|
-
end
|
401
|
-
|
402
|
-
def test_search_by_symbol
|
403
|
-
assert set = @node.search(:employee)
|
404
|
-
assert 5, set.length
|
405
|
-
|
406
|
-
assert node = @node.at(:employee)
|
407
|
-
assert node.text =~ /EMP0001/
|
408
|
-
end
|
409
|
-
|
410
|
-
def test_new_node
|
411
|
-
node = Nokogiri::XML::Node.new('form', @node.document)
|
412
|
-
assert_equal('form', node.name)
|
413
|
-
assert(node.document)
|
414
|
-
end
|
415
|
-
|
416
|
-
def test_encode_special_chars
|
417
|
-
foo = @node.css('employee').first.encode_special_chars('&')
|
418
|
-
assert_equal '&', foo
|
419
|
-
end
|
420
|
-
|
421
|
-
def test_content
|
422
|
-
node = Nokogiri::XML::Node.new('form', @node)
|
423
|
-
assert_equal('', node.content)
|
424
|
-
|
425
|
-
node.content = 'hello world!'
|
426
|
-
assert_equal('hello world!', node.content)
|
427
|
-
end
|
428
|
-
|
429
|
-
def test_whitespace_nodes
|
430
|
-
doc = Nokogiri::XML.parse("<root><b>Foo</b>\n<i>Bar</i> <p>Bazz</p></root>")
|
431
|
-
children = doc.at('.//root').children.collect(&:to_s)
|
432
|
-
assert_equal "\n", children[1]
|
433
|
-
assert_equal " ", children[3]
|
434
|
-
end
|
435
|
-
|
436
|
-
def test_replace
|
437
|
-
set = @node.search('.//employee')
|
438
|
-
assert 5, set.length
|
439
|
-
assert 0, @node.search('.//form').length
|
440
|
-
|
441
|
-
first = set[0]
|
442
|
-
second = set[1]
|
443
|
-
|
444
|
-
node = Nokogiri::XML::Node.new('form', @node)
|
445
|
-
first.replace(node)
|
446
|
-
|
447
|
-
assert set = @node.search('.//employee')
|
448
|
-
assert_equal 4, set.length
|
449
|
-
assert 1, @node.search('.//form').length
|
450
|
-
|
451
|
-
assert_equal set[0].to_xml, second.to_xml
|
452
|
-
end
|
453
|
-
|
454
|
-
def test_replace_on_unparented_node
|
455
|
-
foo = Node.new('foo', @node.document)
|
456
|
-
if Nokogiri.jruby? # JRuby Nokogiri doesn't raise an exception
|
457
|
-
@node.replace(foo)
|
458
|
-
else
|
459
|
-
assert_raises(RuntimeError){ @node.replace(foo) }
|
460
|
-
end
|
461
|
-
end
|
462
|
-
|
463
|
-
def test_illegal_replace_of_node_with_doc
|
464
|
-
new_node = Nokogiri::XML.parse('<foo>bar</foo>')
|
465
|
-
old_node = @node.at('.//employee')
|
466
|
-
assert_raises(ArgumentError){ old_node.replace new_node }
|
467
|
-
end
|
468
|
-
|
469
|
-
def test_unlink_on_unlinked_node_1
|
470
|
-
node = Nokogiri::XML::Node.new 'div', Nokogiri::XML::Document.new
|
471
|
-
node.unlink # must_not_raise
|
472
|
-
assert_nil node.parent
|
473
|
-
end
|
474
|
-
|
475
|
-
def test_unlink_on_unlinked_node_2
|
476
|
-
node = Nokogiri::XML('<div>foo</div>').at_css("div")
|
477
|
-
node.unlink
|
478
|
-
node.unlink # must_not_raise
|
479
|
-
assert_nil node.parent
|
480
|
-
end
|
481
|
-
end
|
482
|
-
end
|
483
|
-
end
|