nokogiri 1.3.0-x86-mingw32
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.
- data/.autotest +27 -0
- data/CHANGELOG.ja.rdoc +233 -0
- data/CHANGELOG.rdoc +222 -0
- data/Manifest.txt +247 -0
- data/README.ja.rdoc +103 -0
- data/README.rdoc +117 -0
- data/Rakefile +205 -0
- data/bin/nokogiri +47 -0
- data/ext/nokogiri/extconf.rb +89 -0
- data/ext/nokogiri/html_document.c +183 -0
- data/ext/nokogiri/html_document.h +10 -0
- data/ext/nokogiri/html_element_description.c +272 -0
- data/ext/nokogiri/html_element_description.h +10 -0
- data/ext/nokogiri/html_entity_lookup.c +30 -0
- data/ext/nokogiri/html_entity_lookup.h +8 -0
- data/ext/nokogiri/html_sax_parser.c +57 -0
- data/ext/nokogiri/html_sax_parser.h +11 -0
- data/ext/nokogiri/iconv.dll +0 -0
- data/ext/nokogiri/libexslt.dll +0 -0
- data/ext/nokogiri/libxml2.dll +0 -0
- data/ext/nokogiri/libxslt.dll +0 -0
- data/ext/nokogiri/nokogiri.c +81 -0
- data/ext/nokogiri/nokogiri.h +149 -0
- data/ext/nokogiri/xml_attr.c +92 -0
- data/ext/nokogiri/xml_attr.h +9 -0
- data/ext/nokogiri/xml_cdata.c +53 -0
- data/ext/nokogiri/xml_cdata.h +9 -0
- data/ext/nokogiri/xml_comment.c +51 -0
- data/ext/nokogiri/xml_comment.h +9 -0
- data/ext/nokogiri/xml_document.c +308 -0
- data/ext/nokogiri/xml_document.h +21 -0
- data/ext/nokogiri/xml_document_fragment.c +48 -0
- data/ext/nokogiri/xml_document_fragment.h +10 -0
- data/ext/nokogiri/xml_dtd.c +102 -0
- data/ext/nokogiri/xml_dtd.h +8 -0
- data/ext/nokogiri/xml_entity_reference.c +50 -0
- data/ext/nokogiri/xml_entity_reference.h +9 -0
- data/ext/nokogiri/xml_io.c +24 -0
- data/ext/nokogiri/xml_io.h +10 -0
- data/ext/nokogiri/xml_namespace.c +69 -0
- data/ext/nokogiri/xml_namespace.h +12 -0
- data/ext/nokogiri/xml_node.c +928 -0
- data/ext/nokogiri/xml_node.h +14 -0
- data/ext/nokogiri/xml_node_set.c +386 -0
- data/ext/nokogiri/xml_node_set.h +9 -0
- data/ext/nokogiri/xml_processing_instruction.c +54 -0
- data/ext/nokogiri/xml_processing_instruction.h +9 -0
- data/ext/nokogiri/xml_reader.c +572 -0
- data/ext/nokogiri/xml_reader.h +10 -0
- data/ext/nokogiri/xml_relax_ng.c +106 -0
- data/ext/nokogiri/xml_relax_ng.h +9 -0
- data/ext/nokogiri/xml_sax_parser.c +336 -0
- data/ext/nokogiri/xml_sax_parser.h +10 -0
- data/ext/nokogiri/xml_sax_push_parser.c +86 -0
- data/ext/nokogiri/xml_sax_push_parser.h +9 -0
- data/ext/nokogiri/xml_schema.c +107 -0
- data/ext/nokogiri/xml_schema.h +9 -0
- data/ext/nokogiri/xml_syntax_error.c +203 -0
- data/ext/nokogiri/xml_syntax_error.h +12 -0
- data/ext/nokogiri/xml_text.c +47 -0
- data/ext/nokogiri/xml_text.h +9 -0
- data/ext/nokogiri/xml_xpath.c +53 -0
- data/ext/nokogiri/xml_xpath.h +11 -0
- data/ext/nokogiri/xml_xpath_context.c +252 -0
- data/ext/nokogiri/xml_xpath_context.h +9 -0
- data/ext/nokogiri/xslt_stylesheet.c +131 -0
- data/ext/nokogiri/xslt_stylesheet.h +9 -0
- data/ext/nokogiri/zlib1.dll +0 -0
- data/lib/action-nokogiri.rb +36 -0
- data/lib/nokogiri.rb +110 -0
- data/lib/nokogiri/1.8/nokogiri.so +0 -0
- data/lib/nokogiri/1.9/nokogiri.so +0 -0
- data/lib/nokogiri/css.rb +25 -0
- data/lib/nokogiri/css/generated_parser.rb +748 -0
- data/lib/nokogiri/css/generated_tokenizer.rb +144 -0
- data/lib/nokogiri/css/node.rb +107 -0
- data/lib/nokogiri/css/parser.rb +82 -0
- data/lib/nokogiri/css/parser.y +227 -0
- data/lib/nokogiri/css/syntax_error.rb +7 -0
- data/lib/nokogiri/css/tokenizer.rb +11 -0
- data/lib/nokogiri/css/tokenizer.rex +54 -0
- data/lib/nokogiri/css/xpath_visitor.rb +172 -0
- data/lib/nokogiri/decorators.rb +2 -0
- data/lib/nokogiri/decorators/hpricot.rb +3 -0
- data/lib/nokogiri/decorators/hpricot/node.rb +56 -0
- data/lib/nokogiri/decorators/hpricot/node_set.rb +54 -0
- data/lib/nokogiri/decorators/hpricot/xpath_visitor.rb +30 -0
- data/lib/nokogiri/decorators/slop.rb +33 -0
- data/lib/nokogiri/ffi/html/document.rb +37 -0
- data/lib/nokogiri/ffi/html/element_description.rb +85 -0
- data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
- data/lib/nokogiri/ffi/html/sax/parser.rb +21 -0
- data/lib/nokogiri/ffi/io_callbacks.rb +32 -0
- data/lib/nokogiri/ffi/libxml.rb +314 -0
- data/lib/nokogiri/ffi/structs/common_node.rb +26 -0
- data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
- data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
- data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
- data/lib/nokogiri/ffi/structs/xml_attr.rb +19 -0
- data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
- data/lib/nokogiri/ffi/structs/xml_document.rb +108 -0
- data/lib/nokogiri/ffi/structs/xml_dtd.rb +26 -0
- data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
- data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
- data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
- data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
- data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
- data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
- data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +14 -0
- data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
- data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
- data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
- data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +37 -0
- data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
- data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
- data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
- data/lib/nokogiri/ffi/xml/attr.rb +41 -0
- data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
- data/lib/nokogiri/ffi/xml/comment.rb +18 -0
- data/lib/nokogiri/ffi/xml/document.rb +107 -0
- data/lib/nokogiri/ffi/xml/document_fragment.rb +26 -0
- data/lib/nokogiri/ffi/xml/dtd.rb +42 -0
- data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
- data/lib/nokogiri/ffi/xml/namespace.rb +38 -0
- data/lib/nokogiri/ffi/xml/node.rb +380 -0
- data/lib/nokogiri/ffi/xml/node_set.rb +130 -0
- data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
- data/lib/nokogiri/ffi/xml/reader.rb +217 -0
- data/lib/nokogiri/ffi/xml/relax_ng.rb +51 -0
- data/lib/nokogiri/ffi/xml/sax/parser.rb +148 -0
- data/lib/nokogiri/ffi/xml/sax/push_parser.rb +38 -0
- data/lib/nokogiri/ffi/xml/schema.rb +55 -0
- data/lib/nokogiri/ffi/xml/syntax_error.rb +76 -0
- data/lib/nokogiri/ffi/xml/text.rb +18 -0
- data/lib/nokogiri/ffi/xml/xpath.rb +19 -0
- data/lib/nokogiri/ffi/xml/xpath_context.rb +135 -0
- data/lib/nokogiri/ffi/xslt/stylesheet.rb +47 -0
- data/lib/nokogiri/hpricot.rb +62 -0
- data/lib/nokogiri/html.rb +34 -0
- data/lib/nokogiri/html/builder.rb +35 -0
- data/lib/nokogiri/html/document.rb +71 -0
- data/lib/nokogiri/html/document_fragment.rb +15 -0
- data/lib/nokogiri/html/element_description.rb +23 -0
- data/lib/nokogiri/html/entity_lookup.rb +13 -0
- data/lib/nokogiri/html/sax/parser.rb +47 -0
- data/lib/nokogiri/nokogiri.rb +1 -0
- data/lib/nokogiri/syntax_error.rb +4 -0
- data/lib/nokogiri/version.rb +29 -0
- data/lib/nokogiri/version_warning.rb +11 -0
- data/lib/nokogiri/xml.rb +62 -0
- data/lib/nokogiri/xml/attr.rb +9 -0
- data/lib/nokogiri/xml/builder.rb +254 -0
- data/lib/nokogiri/xml/cdata.rb +11 -0
- data/lib/nokogiri/xml/document.rb +100 -0
- data/lib/nokogiri/xml/document_fragment.rb +49 -0
- data/lib/nokogiri/xml/dtd.rb +11 -0
- data/lib/nokogiri/xml/entity_declaration.rb +11 -0
- data/lib/nokogiri/xml/fragment_handler.rb +55 -0
- data/lib/nokogiri/xml/namespace.rb +7 -0
- data/lib/nokogiri/xml/node.rb +745 -0
- data/lib/nokogiri/xml/node/save_options.rb +42 -0
- data/lib/nokogiri/xml/node_set.rb +238 -0
- data/lib/nokogiri/xml/notation.rb +6 -0
- data/lib/nokogiri/xml/parse_options.rb +80 -0
- data/lib/nokogiri/xml/processing_instruction.rb +8 -0
- data/lib/nokogiri/xml/reader.rb +66 -0
- data/lib/nokogiri/xml/relax_ng.rb +32 -0
- data/lib/nokogiri/xml/sax.rb +3 -0
- data/lib/nokogiri/xml/sax/document.rb +143 -0
- data/lib/nokogiri/xml/sax/parser.rb +101 -0
- data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
- data/lib/nokogiri/xml/schema.rb +65 -0
- data/lib/nokogiri/xml/syntax_error.rb +34 -0
- data/lib/nokogiri/xml/xpath.rb +10 -0
- data/lib/nokogiri/xml/xpath/syntax_error.rb +8 -0
- data/lib/nokogiri/xml/xpath_context.rb +16 -0
- data/lib/nokogiri/xslt.rb +48 -0
- data/lib/nokogiri/xslt/stylesheet.rb +25 -0
- data/lib/xsd/xmlparser/nokogiri.rb +64 -0
- data/tasks/test.rb +161 -0
- data/test/css/test_nthiness.rb +160 -0
- data/test/css/test_parser.rb +277 -0
- data/test/css/test_tokenizer.rb +176 -0
- data/test/css/test_xpath_visitor.rb +76 -0
- data/test/ffi/test_document.rb +35 -0
- data/test/files/address_book.rlx +12 -0
- data/test/files/address_book.xml +10 -0
- data/test/files/dont_hurt_em_why.xml +422 -0
- data/test/files/exslt.xml +8 -0
- data/test/files/exslt.xslt +35 -0
- data/test/files/po.xml +32 -0
- data/test/files/po.xsd +66 -0
- data/test/files/staff.xml +59 -0
- data/test/files/staff.xslt +32 -0
- data/test/files/tlm.html +850 -0
- data/test/helper.rb +123 -0
- data/test/hpricot/files/basic.xhtml +17 -0
- data/test/hpricot/files/boingboing.html +2266 -0
- data/test/hpricot/files/cy0.html +3653 -0
- data/test/hpricot/files/immob.html +400 -0
- data/test/hpricot/files/pace_application.html +1320 -0
- data/test/hpricot/files/tenderlove.html +16 -0
- data/test/hpricot/files/uswebgen.html +220 -0
- data/test/hpricot/files/utf8.html +1054 -0
- data/test/hpricot/files/week9.html +1723 -0
- data/test/hpricot/files/why.xml +19 -0
- data/test/hpricot/load_files.rb +11 -0
- data/test/hpricot/test_alter.rb +68 -0
- data/test/hpricot/test_builder.rb +20 -0
- data/test/hpricot/test_parser.rb +426 -0
- data/test/hpricot/test_paths.rb +15 -0
- data/test/hpricot/test_preserved.rb +77 -0
- data/test/hpricot/test_xml.rb +30 -0
- data/test/html/sax/test_parser.rb +52 -0
- data/test/html/test_builder.rb +156 -0
- data/test/html/test_document.rb +361 -0
- data/test/html/test_document_encoding.rb +46 -0
- data/test/html/test_document_fragment.rb +97 -0
- data/test/html/test_element_description.rb +95 -0
- data/test/html/test_named_characters.rb +14 -0
- data/test/html/test_node.rb +165 -0
- data/test/test_convert_xpath.rb +186 -0
- data/test/test_css_cache.rb +56 -0
- data/test/test_gc.rb +15 -0
- data/test/test_memory_leak.rb +77 -0
- data/test/test_nokogiri.rb +127 -0
- data/test/test_reader.rb +316 -0
- data/test/test_xslt_transforms.rb +131 -0
- data/test/xml/node/test_save_options.rb +20 -0
- data/test/xml/node/test_subclass.rb +44 -0
- data/test/xml/sax/test_parser.rb +169 -0
- data/test/xml/sax/test_push_parser.rb +92 -0
- data/test/xml/test_attr.rb +38 -0
- data/test/xml/test_builder.rb +73 -0
- data/test/xml/test_cdata.rb +38 -0
- data/test/xml/test_comment.rb +23 -0
- data/test/xml/test_document.rb +397 -0
- data/test/xml/test_document_encoding.rb +26 -0
- data/test/xml/test_document_fragment.rb +76 -0
- data/test/xml/test_dtd.rb +42 -0
- data/test/xml/test_dtd_encoding.rb +31 -0
- data/test/xml/test_entity_reference.rb +21 -0
- data/test/xml/test_namespace.rb +43 -0
- data/test/xml/test_node.rb +808 -0
- data/test/xml/test_node_attributes.rb +34 -0
- data/test/xml/test_node_encoding.rb +84 -0
- data/test/xml/test_node_set.rb +368 -0
- data/test/xml/test_parse_options.rb +52 -0
- data/test/xml/test_processing_instruction.rb +30 -0
- data/test/xml/test_reader_encoding.rb +126 -0
- data/test/xml/test_relax_ng.rb +60 -0
- data/test/xml/test_schema.rb +65 -0
- data/test/xml/test_text.rb +18 -0
- data/test/xml/test_unparented_node.rb +381 -0
- data/test/xml/test_xpath.rb +106 -0
- metadata +409 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', "helper"))
|
2
|
+
|
3
|
+
module Nokogiri
|
4
|
+
module XML
|
5
|
+
class TestNodeAttributes < Nokogiri::TestCase
|
6
|
+
def test_attribute_with_ns
|
7
|
+
doc = Nokogiri::XML <<-eoxml
|
8
|
+
<root xmlns:tlm='http://tenderlovemaking.com/'>
|
9
|
+
<node tlm:foo='bar' foo='baz' />
|
10
|
+
</root>
|
11
|
+
eoxml
|
12
|
+
|
13
|
+
node = doc.at('node')
|
14
|
+
|
15
|
+
assert_equal 'bar',
|
16
|
+
node.attribute_with_ns('foo', 'http://tenderlovemaking.com/').value
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_namespace_key?
|
20
|
+
doc = Nokogiri::XML <<-eoxml
|
21
|
+
<root xmlns:tlm='http://tenderlovemaking.com/'>
|
22
|
+
<node tlm:foo='bar' foo='baz' />
|
23
|
+
</root>
|
24
|
+
eoxml
|
25
|
+
|
26
|
+
node = doc.at('node')
|
27
|
+
|
28
|
+
assert node.namespaced_key?('foo', 'http://tenderlovemaking.com/')
|
29
|
+
assert node.namespaced_key?('foo', nil)
|
30
|
+
assert !node.namespaced_key?('foo', 'foo')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', "helper"))
|
2
|
+
|
3
|
+
module Nokogiri
|
4
|
+
module XML
|
5
|
+
if RUBY_VERSION =~ /^1\.9/
|
6
|
+
class TestNodeEncoding < Nokogiri::TestCase
|
7
|
+
def setup
|
8
|
+
super
|
9
|
+
@html = Nokogiri::HTML(File.read(HTML_FILE), HTML_FILE)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_get_attribute
|
13
|
+
node = @html.css('a').first
|
14
|
+
assert_equal @html.encoding, node['href'].encoding.name
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_encode_special_chars
|
18
|
+
foo = @html.css('a').first.encode_special_chars('foo')
|
19
|
+
assert_equal @html.encoding, foo.encoding.name
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_content
|
23
|
+
node = @html.css('a').first
|
24
|
+
assert_equal @html.encoding, node.content.encoding.name
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_name
|
28
|
+
node = @html.css('a').first
|
29
|
+
assert_equal @html.encoding, node.name.encoding.name
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_path
|
33
|
+
node = @html.css('a').first
|
34
|
+
assert_equal @html.encoding, node.path.encoding.name
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_namespace
|
38
|
+
xml = <<-eoxml
|
39
|
+
<root>
|
40
|
+
<car xmlns:part="http://general-motors.com/">
|
41
|
+
<part:tire>Michelin Model XGV</part:tire>
|
42
|
+
</car>
|
43
|
+
<bicycle xmlns:part="http://schwinn.com/">
|
44
|
+
<part:tire>I'm a bicycle tire!</part:tire>
|
45
|
+
</bicycle>
|
46
|
+
</root>
|
47
|
+
eoxml
|
48
|
+
doc = Nokogiri::XML(xml, nil, 'UTF-8')
|
49
|
+
assert_equal 'UTF-8', doc.encoding
|
50
|
+
n = doc.xpath('//part:tire', { 'part' => 'http://schwinn.com/' }).first
|
51
|
+
assert n
|
52
|
+
assert_equal doc.encoding, n.namespace.href.encoding.name
|
53
|
+
assert_equal doc.encoding, n.namespace.prefix.encoding.name
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_namespace_as_hash
|
57
|
+
xml = <<-eoxml
|
58
|
+
<root>
|
59
|
+
<car xmlns:part="http://general-motors.com/">
|
60
|
+
<part:tire>Michelin Model XGV</part:tire>
|
61
|
+
</car>
|
62
|
+
<bicycle xmlns:part="http://schwinn.com/">
|
63
|
+
<part:tire>I'm a bicycle tire!</part:tire>
|
64
|
+
</bicycle>
|
65
|
+
</root>
|
66
|
+
eoxml
|
67
|
+
doc = Nokogiri::XML(xml, nil, 'UTF-8')
|
68
|
+
assert_equal 'UTF-8', doc.encoding
|
69
|
+
assert n = doc.xpath('//car').first
|
70
|
+
|
71
|
+
n.namespace_definitions.each do |nd|
|
72
|
+
assert_equal doc.encoding, nd.href.encoding.name
|
73
|
+
assert_equal doc.encoding, nd.prefix.encoding.name
|
74
|
+
end
|
75
|
+
|
76
|
+
n.namespaces.each do |k,v|
|
77
|
+
assert_equal doc.encoding, k.encoding.name
|
78
|
+
assert_equal doc.encoding, v.encoding.name
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,368 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', "helper"))
|
2
|
+
|
3
|
+
module Nokogiri
|
4
|
+
module XML
|
5
|
+
class TestNodeSet < Nokogiri::TestCase
|
6
|
+
def setup
|
7
|
+
super
|
8
|
+
@xml = Nokogiri::XML(File.read(XML_FILE), XML_FILE)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_double_equal
|
12
|
+
assert node_set_one = @xml.xpath('//employee')
|
13
|
+
assert node_set_two = @xml.xpath('//employee')
|
14
|
+
|
15
|
+
assert_not_equal node_set_one.object_id, node_set_two.object_id
|
16
|
+
|
17
|
+
assert_equal node_set_one, node_set_two
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_node_set_not_equal_to_string
|
21
|
+
node_set_one = @xml.xpath('//employee')
|
22
|
+
assert_not_equal node_set_one, "asdfadsf"
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_out_of_order_not_equal
|
26
|
+
one = @xml.xpath('//employee')
|
27
|
+
two = @xml.xpath('//employee')
|
28
|
+
two.push two.shift
|
29
|
+
assert_not_equal one, two
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_shorter_is_not_equal
|
33
|
+
node_set_one = @xml.xpath('//employee')
|
34
|
+
node_set_two = @xml.xpath('//employee')
|
35
|
+
node_set_two.delete(node_set_two.first)
|
36
|
+
|
37
|
+
assert_not_equal node_set_one, node_set_two
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_pop
|
41
|
+
set = @xml.xpath('//employee')
|
42
|
+
last = set.last
|
43
|
+
assert_equal last, set.pop
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_shift
|
47
|
+
set = @xml.xpath('//employee')
|
48
|
+
first = set.first
|
49
|
+
assert_equal first, set.shift
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_shift_empty
|
53
|
+
set = Nokogiri::XML::NodeSet.new(@xml)
|
54
|
+
assert_nil set.shift
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_pop_empty
|
58
|
+
set = Nokogiri::XML::NodeSet.new(@xml)
|
59
|
+
assert_nil set.pop
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_first_takes_arguments
|
63
|
+
assert node_set = @xml.xpath('//employee')
|
64
|
+
assert_equal 2, node_set.first(2).length
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_dup
|
68
|
+
assert node_set = @xml.xpath('//employee')
|
69
|
+
dup = node_set.dup
|
70
|
+
assert_equal node_set.length, dup.length
|
71
|
+
node_set.zip(dup).each do |a,b|
|
72
|
+
assert_equal a, b
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_xmlns_is_automatically_registered
|
77
|
+
doc = Nokogiri::XML(<<-eoxml)
|
78
|
+
<root xmlns="http://tenderlovemaking.com/">
|
79
|
+
<foo>
|
80
|
+
<bar/>
|
81
|
+
</foo>
|
82
|
+
</root>
|
83
|
+
eoxml
|
84
|
+
set = doc.css('foo')
|
85
|
+
assert_equal 1, set.css('xmlns|bar').length
|
86
|
+
assert_equal 0, set.css('|bar').length
|
87
|
+
assert_equal 1, set.xpath('//xmlns:bar').length
|
88
|
+
assert_equal 1, set.search('xmlns|bar').length
|
89
|
+
assert_equal 1, set.search('//xmlns:bar').length
|
90
|
+
assert set.at('//xmlns:bar')
|
91
|
+
assert set.at('xmlns|bar')
|
92
|
+
assert set.at('bar')
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_children_has_document
|
96
|
+
set = @xml.root.children
|
97
|
+
assert_instance_of(NodeSet, set)
|
98
|
+
assert_equal @xml, set.document
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_length_size
|
102
|
+
assert node_set = @xml.search('//employee')
|
103
|
+
assert_equal node_set.length, node_set.size
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_to_xml
|
107
|
+
assert node_set = @xml.search('//employee')
|
108
|
+
assert node_set.to_xml
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_inner_html
|
112
|
+
doc = Nokogiri::HTML(<<-eohtml)
|
113
|
+
<html>
|
114
|
+
<body>
|
115
|
+
<div>
|
116
|
+
<a>one</a>
|
117
|
+
</div>
|
118
|
+
<div>
|
119
|
+
<a>two</a>
|
120
|
+
</div>
|
121
|
+
</body>
|
122
|
+
</html>
|
123
|
+
eohtml
|
124
|
+
assert html = doc.css('div').inner_html
|
125
|
+
assert_match '<a>', html
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_at
|
129
|
+
assert node_set = @xml.search('//employee')
|
130
|
+
assert_equal node_set.first, node_set.at(0)
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_percent
|
134
|
+
assert node_set = @xml.search('//employee')
|
135
|
+
assert_equal node_set.first, node_set % 0
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_to_ary
|
139
|
+
assert node_set = @xml.search('//employee')
|
140
|
+
foo = []
|
141
|
+
foo += node_set
|
142
|
+
assert_equal node_set.length, foo.length
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_push
|
146
|
+
node = Nokogiri::XML::Node.new('foo', @xml)
|
147
|
+
node.content = 'bar'
|
148
|
+
|
149
|
+
assert node_set = @xml.search('//employee')
|
150
|
+
node_set.push(node)
|
151
|
+
|
152
|
+
assert node_set.include?(node)
|
153
|
+
end
|
154
|
+
|
155
|
+
def test_delete_with_invalid_argument
|
156
|
+
employees = @xml.search("//employee")
|
157
|
+
positions = @xml.search("//position")
|
158
|
+
|
159
|
+
assert_raises(ArgumentError) { employees.delete(positions) }
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_delete_when_present
|
163
|
+
employees = @xml.search("//employee")
|
164
|
+
wally = employees.first
|
165
|
+
assert employees.include?(wally) # testing setup
|
166
|
+
length = employees.length
|
167
|
+
|
168
|
+
result = employees.delete(wally)
|
169
|
+
assert_equal result, wally
|
170
|
+
assert ! employees.include?(wally)
|
171
|
+
assert length-1, employees.length
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_delete_when_not_present
|
175
|
+
employees = @xml.search("//employee")
|
176
|
+
phb = @xml.search("//position").first
|
177
|
+
assert ! employees.include?(phb) # testing setup
|
178
|
+
length = employees.length
|
179
|
+
|
180
|
+
result = employees.delete(phb)
|
181
|
+
assert_nil result
|
182
|
+
assert length, employees.length
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_unlink
|
186
|
+
xml = Nokogiri::XML.parse(<<-eoxml)
|
187
|
+
<root>
|
188
|
+
<a class='foo bar'>Bar</a>
|
189
|
+
<a class='bar foo'>Bar</a>
|
190
|
+
<a class='bar'>Bar</a>
|
191
|
+
<a>Hello world</a>
|
192
|
+
<a class='baz bar foo'>Bar</a>
|
193
|
+
<a class='bazbarfoo'>Awesome</a>
|
194
|
+
<a class='bazbar'>Awesome</a>
|
195
|
+
</root>
|
196
|
+
eoxml
|
197
|
+
set = xml.xpath('//a')
|
198
|
+
set.unlink
|
199
|
+
set.each do |node|
|
200
|
+
assert !node.parent
|
201
|
+
#assert !node.document
|
202
|
+
assert !node.previous_sibling
|
203
|
+
assert !node.next_sibling
|
204
|
+
end
|
205
|
+
assert_no_match(/Hello world/, xml.to_s)
|
206
|
+
end
|
207
|
+
|
208
|
+
def test_nodeset_search_takes_namespace
|
209
|
+
@xml = Nokogiri::XML.parse(<<-eoxml)
|
210
|
+
<root>
|
211
|
+
<car xmlns:part="http://general-motors.com/">
|
212
|
+
<part:tire>Michelin Model XGV</part:tire>
|
213
|
+
</car>
|
214
|
+
<bicycle xmlns:part="http://schwinn.com/">
|
215
|
+
<part:tire>I'm a bicycle tire!</part:tire>
|
216
|
+
</bicycle>
|
217
|
+
</root>
|
218
|
+
eoxml
|
219
|
+
set = @xml/'root'
|
220
|
+
assert_equal 1, set.length
|
221
|
+
bike_tire = set.search('//bike:tire', 'bike' => "http://schwinn.com/")
|
222
|
+
assert_equal 1, bike_tire.length
|
223
|
+
end
|
224
|
+
|
225
|
+
def test_new_nodeset
|
226
|
+
node_set = Nokogiri::XML::NodeSet.new(@xml)
|
227
|
+
assert_equal(0, node_set.length)
|
228
|
+
node = Nokogiri::XML::Node.new('form', @xml)
|
229
|
+
node_set << node
|
230
|
+
assert_equal(1, node_set.length)
|
231
|
+
assert_equal(node, node_set.last)
|
232
|
+
end
|
233
|
+
|
234
|
+
def test_search_on_nodeset
|
235
|
+
assert node_set = @xml.search('//employee')
|
236
|
+
assert sub_set = node_set.search('.//name')
|
237
|
+
assert_equal(node_set.length, sub_set.length)
|
238
|
+
end
|
239
|
+
|
240
|
+
def test_negative_index_works
|
241
|
+
assert node_set = @xml.search('//employee')
|
242
|
+
assert_equal node_set.last, node_set[-1]
|
243
|
+
end
|
244
|
+
|
245
|
+
def test_large_negative_index_returns_nil
|
246
|
+
assert node_set = @xml.search('//employee')
|
247
|
+
assert_nil(node_set[-1 * (node_set.length + 1)])
|
248
|
+
end
|
249
|
+
|
250
|
+
def test_node_set_fetches_private_data
|
251
|
+
assert node_set = @xml.search('//employee')
|
252
|
+
|
253
|
+
set = node_set
|
254
|
+
assert_equal(set[0], set[0])
|
255
|
+
end
|
256
|
+
|
257
|
+
def test_node_set_returns_0
|
258
|
+
assert node_set = @xml.search('//asdkfjhasdlkfjhaldskfh')
|
259
|
+
assert_equal(0, node_set.length)
|
260
|
+
end
|
261
|
+
|
262
|
+
def test_wrap
|
263
|
+
employees = (@xml/"//employee").wrap("<wrapper/>")
|
264
|
+
assert_equal 'wrapper', employees[0].parent.name
|
265
|
+
assert_equal 'employee', @xml.search("//wrapper").first.children[0].name
|
266
|
+
end
|
267
|
+
|
268
|
+
def test_plus_operator
|
269
|
+
names = @xml.search("name")
|
270
|
+
positions = @xml.search("position")
|
271
|
+
|
272
|
+
names_len = names.length
|
273
|
+
positions_len = positions.length
|
274
|
+
|
275
|
+
assert_raises(ArgumentError) { result = names + positions.first }
|
276
|
+
|
277
|
+
result = names + positions
|
278
|
+
assert_equal names_len, names.length
|
279
|
+
assert_equal positions_len, positions.length
|
280
|
+
assert_equal names.length + positions.length, result.length
|
281
|
+
|
282
|
+
names += positions
|
283
|
+
assert_equal result.length, names.length
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_minus_operator
|
287
|
+
employees = @xml.search("//employee")
|
288
|
+
females = @xml.search("//employee[gender[text()='Female']]")
|
289
|
+
|
290
|
+
employees_len = employees.length
|
291
|
+
females_len = females.length
|
292
|
+
|
293
|
+
assert_raises(ArgumentError) { result = employees - females.first }
|
294
|
+
|
295
|
+
result = employees - females
|
296
|
+
assert_equal employees_len, employees.length
|
297
|
+
assert_equal females_len, females.length
|
298
|
+
assert_equal employees.length - females.length, result.length
|
299
|
+
|
300
|
+
employees -= females
|
301
|
+
assert_equal result.length, employees.length
|
302
|
+
end
|
303
|
+
|
304
|
+
def test_array_index
|
305
|
+
employees = @xml.search("//employee")
|
306
|
+
other = @xml.search("//position").first
|
307
|
+
|
308
|
+
assert_equal 3, employees.index(employees[3])
|
309
|
+
assert_nil employees.index(other)
|
310
|
+
end
|
311
|
+
|
312
|
+
def test_array_slice_with_start_and_end
|
313
|
+
employees = @xml.search("//employee")
|
314
|
+
assert_equal [employees[1], employees[2], employees[3]], employees[1,3].to_a
|
315
|
+
end
|
316
|
+
|
317
|
+
def test_array_index_bracket_equivalence
|
318
|
+
employees = @xml.search("//employee")
|
319
|
+
assert_equal [employees[1], employees[2], employees[3]], employees[1,3].to_a
|
320
|
+
assert_equal [employees[1], employees[2], employees[3]], employees.slice(1,3).to_a
|
321
|
+
end
|
322
|
+
|
323
|
+
def test_array_slice_with_negative_start
|
324
|
+
employees = @xml.search("//employee")
|
325
|
+
assert_equal [employees[2]], employees[-3,1].to_a
|
326
|
+
assert_equal [employees[2], employees[3]], employees[-3,2].to_a
|
327
|
+
end
|
328
|
+
|
329
|
+
def test_array_slice_with_invalid_args
|
330
|
+
employees = @xml.search("//employee")
|
331
|
+
assert_nil employees[99, 1] # large start
|
332
|
+
assert_nil employees[1, -1] # negative len
|
333
|
+
assert_equal [], employees[1, 0].to_a # zero len
|
334
|
+
end
|
335
|
+
|
336
|
+
def test_array_slice_with_range
|
337
|
+
employees = @xml.search("//employee")
|
338
|
+
assert_equal [employees[1], employees[2], employees[3]], employees[1..3].to_a
|
339
|
+
assert_equal [employees[0], employees[1], employees[2], employees[3]], employees[0..3].to_a
|
340
|
+
end
|
341
|
+
|
342
|
+
def test_intersection_with_no_overlap
|
343
|
+
employees = @xml.search("//employee")
|
344
|
+
positions = @xml.search("//position")
|
345
|
+
|
346
|
+
assert_equal [], (employees & positions).to_a
|
347
|
+
end
|
348
|
+
|
349
|
+
def test_intersection
|
350
|
+
employees = @xml.search("//employee")
|
351
|
+
first_set = employees[0..2]
|
352
|
+
second_set = employees[2..4]
|
353
|
+
|
354
|
+
assert_equal [employees[2]], (first_set & second_set).to_a
|
355
|
+
end
|
356
|
+
|
357
|
+
def test_include?
|
358
|
+
employees = @xml.search("//employee")
|
359
|
+
yes = employees.first
|
360
|
+
no = @xml.search("//position").first
|
361
|
+
|
362
|
+
assert employees.include?(yes)
|
363
|
+
assert ! employees.include?(no)
|
364
|
+
end
|
365
|
+
|
366
|
+
end
|
367
|
+
end
|
368
|
+
end
|