nokogiri 1.2.3-x86-mswin32-60 → 1.4.5-x86-mswin32-60
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 +18 -7
- data/.gemtest +0 -0
- data/CHANGELOG.ja.rdoc +297 -3
- data/CHANGELOG.rdoc +289 -0
- data/Manifest.txt +148 -37
- data/README.ja.rdoc +20 -20
- data/README.rdoc +53 -22
- data/Rakefile +127 -211
- data/bin/nokogiri +54 -0
- data/ext/nokogiri/depend +358 -0
- data/ext/nokogiri/extconf.rb +89 -54
- data/ext/nokogiri/html_document.c +34 -27
- data/ext/nokogiri/html_document.h +1 -1
- data/ext/nokogiri/html_element_description.c +276 -0
- data/ext/nokogiri/html_element_description.h +10 -0
- data/ext/nokogiri/html_entity_lookup.c +7 -5
- data/ext/nokogiri/html_entity_lookup.h +1 -1
- data/ext/nokogiri/html_sax_parser_context.c +94 -0
- data/ext/nokogiri/html_sax_parser_context.h +11 -0
- data/ext/nokogiri/{native.c → nokogiri.c} +31 -7
- data/ext/nokogiri/{native.h → nokogiri.h} +68 -41
- data/ext/nokogiri/xml_attr.c +20 -9
- data/ext/nokogiri/xml_attr.h +1 -1
- data/ext/nokogiri/xml_attribute_decl.c +70 -0
- data/ext/nokogiri/xml_attribute_decl.h +9 -0
- data/ext/nokogiri/xml_cdata.c +21 -9
- data/ext/nokogiri/xml_cdata.h +1 -1
- data/ext/nokogiri/xml_comment.c +18 -6
- data/ext/nokogiri/xml_comment.h +1 -1
- data/ext/nokogiri/xml_document.c +247 -68
- data/ext/nokogiri/xml_document.h +5 -3
- data/ext/nokogiri/xml_document_fragment.c +15 -7
- data/ext/nokogiri/xml_document_fragment.h +1 -1
- data/ext/nokogiri/xml_dtd.c +110 -10
- data/ext/nokogiri/xml_dtd.h +3 -1
- data/ext/nokogiri/xml_element_content.c +123 -0
- data/ext/nokogiri/xml_element_content.h +10 -0
- data/ext/nokogiri/xml_element_decl.c +69 -0
- data/ext/nokogiri/xml_element_decl.h +9 -0
- data/ext/nokogiri/xml_encoding_handler.c +79 -0
- data/ext/nokogiri/xml_encoding_handler.h +8 -0
- data/ext/nokogiri/xml_entity_decl.c +110 -0
- data/ext/nokogiri/xml_entity_decl.h +10 -0
- data/ext/nokogiri/xml_entity_reference.c +16 -5
- data/ext/nokogiri/xml_entity_reference.h +1 -1
- data/ext/nokogiri/xml_io.c +40 -8
- data/ext/nokogiri/xml_io.h +2 -1
- data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
- data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
- data/ext/nokogiri/xml_namespace.c +84 -0
- data/ext/nokogiri/xml_namespace.h +13 -0
- data/ext/nokogiri/xml_node.c +782 -225
- data/ext/nokogiri/xml_node.h +2 -4
- data/ext/nokogiri/xml_node_set.c +253 -34
- data/ext/nokogiri/xml_node_set.h +2 -2
- data/ext/nokogiri/xml_processing_instruction.c +17 -5
- data/ext/nokogiri/xml_processing_instruction.h +1 -1
- data/ext/nokogiri/xml_reader.c +277 -85
- data/ext/nokogiri/xml_reader.h +1 -1
- data/ext/nokogiri/xml_relax_ng.c +168 -0
- data/ext/nokogiri/xml_relax_ng.h +9 -0
- data/ext/nokogiri/xml_sax_parser.c +183 -111
- data/ext/nokogiri/xml_sax_parser.h +30 -1
- data/ext/nokogiri/xml_sax_parser_context.c +199 -0
- data/ext/nokogiri/xml_sax_parser_context.h +10 -0
- data/ext/nokogiri/xml_sax_push_parser.c +42 -12
- data/ext/nokogiri/xml_sax_push_parser.h +1 -1
- data/ext/nokogiri/xml_schema.c +205 -0
- data/ext/nokogiri/xml_schema.h +9 -0
- data/ext/nokogiri/xml_syntax_error.c +28 -173
- data/ext/nokogiri/xml_syntax_error.h +2 -1
- data/ext/nokogiri/xml_text.c +16 -6
- data/ext/nokogiri/xml_text.h +1 -1
- data/ext/nokogiri/xml_xpath_context.c +104 -47
- data/ext/nokogiri/xml_xpath_context.h +1 -1
- data/ext/nokogiri/xslt_stylesheet.c +161 -19
- data/ext/nokogiri/xslt_stylesheet.h +1 -1
- data/lib/nokogiri.rb +47 -8
- data/lib/nokogiri/1.8/nokogiri.so +0 -0
- data/lib/nokogiri/1.9/nokogiri.so +0 -0
- data/lib/nokogiri/css.rb +6 -3
- data/lib/nokogiri/css/node.rb +14 -12
- data/lib/nokogiri/css/parser.rb +665 -62
- data/lib/nokogiri/css/parser.y +20 -10
- data/lib/nokogiri/css/parser_extras.rb +91 -0
- data/lib/nokogiri/css/tokenizer.rb +148 -5
- data/lib/nokogiri/css/tokenizer.rex +10 -9
- data/lib/nokogiri/css/xpath_visitor.rb +47 -44
- data/lib/nokogiri/decorators/slop.rb +8 -4
- data/lib/nokogiri/ffi/encoding_handler.rb +42 -0
- data/lib/nokogiri/ffi/html/document.rb +28 -0
- data/lib/nokogiri/ffi/html/element_description.rb +81 -0
- data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
- data/lib/nokogiri/ffi/html/sax/parser_context.rb +38 -0
- data/lib/nokogiri/ffi/io_callbacks.rb +42 -0
- data/lib/nokogiri/ffi/libxml.rb +420 -0
- data/lib/nokogiri/ffi/structs/common_node.rb +38 -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 +20 -0
- data/lib/nokogiri/ffi/structs/xml_attribute.rb +27 -0
- data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
- data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +11 -0
- data/lib/nokogiri/ffi/structs/xml_document.rb +117 -0
- data/lib/nokogiri/ffi/structs/xml_dtd.rb +28 -0
- data/lib/nokogiri/ffi/structs/xml_element.rb +26 -0
- data/lib/nokogiri/ffi/structs/xml_element_content.rb +17 -0
- data/lib/nokogiri/ffi/structs/xml_entity.rb +32 -0
- data/lib/nokogiri/ffi/structs/xml_enumeration.rb +12 -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_parser_context.rb +20 -0
- data/lib/nokogiri/ffi/structs/xml_parser_input.rb +19 -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 +124 -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 +38 -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/weak_bucket.rb +40 -0
- data/lib/nokogiri/ffi/xml/attr.rb +41 -0
- data/lib/nokogiri/ffi/xml/attribute_decl.rb +27 -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 +174 -0
- data/lib/nokogiri/ffi/xml/document_fragment.rb +21 -0
- data/lib/nokogiri/ffi/xml/dtd.rb +67 -0
- data/lib/nokogiri/ffi/xml/element_content.rb +43 -0
- data/lib/nokogiri/ffi/xml/element_decl.rb +19 -0
- data/lib/nokogiri/ffi/xml/entity_decl.rb +36 -0
- data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
- data/lib/nokogiri/ffi/xml/namespace.rb +44 -0
- data/lib/nokogiri/ffi/xml/node.rb +559 -0
- data/lib/nokogiri/ffi/xml/node_set.rb +150 -0
- data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
- data/lib/nokogiri/ffi/xml/reader.rb +236 -0
- data/lib/nokogiri/ffi/xml/relax_ng.rb +85 -0
- data/lib/nokogiri/ffi/xml/sax/parser.rb +143 -0
- data/lib/nokogiri/ffi/xml/sax/parser_context.rb +79 -0
- data/lib/nokogiri/ffi/xml/sax/push_parser.rb +51 -0
- data/lib/nokogiri/ffi/xml/schema.rb +109 -0
- data/lib/nokogiri/ffi/xml/syntax_error.rb +98 -0
- data/lib/nokogiri/ffi/xml/text.rb +18 -0
- data/lib/nokogiri/ffi/xml/xpath.rb +9 -0
- data/lib/nokogiri/ffi/xml/xpath_context.rb +153 -0
- data/lib/nokogiri/ffi/xslt/stylesheet.rb +77 -0
- data/lib/nokogiri/html.rb +13 -47
- data/lib/nokogiri/html/builder.rb +27 -1
- data/lib/nokogiri/html/document.rb +201 -7
- data/lib/nokogiri/html/document_fragment.rb +41 -0
- data/lib/nokogiri/html/element_description.rb +23 -0
- data/lib/nokogiri/html/entity_lookup.rb +2 -0
- data/lib/nokogiri/html/sax/parser.rb +34 -3
- data/lib/nokogiri/html/sax/parser_context.rb +16 -0
- data/lib/nokogiri/nokogiri.rb +1 -0
- data/lib/nokogiri/version.rb +40 -1
- data/lib/nokogiri/version_warning.rb +14 -0
- data/lib/nokogiri/xml.rb +32 -53
- data/lib/nokogiri/xml/attr.rb +5 -0
- data/lib/nokogiri/xml/attribute_decl.rb +18 -0
- data/lib/nokogiri/xml/builder.rb +349 -29
- data/lib/nokogiri/xml/cdata.rb +3 -1
- data/lib/nokogiri/xml/character_data.rb +7 -0
- data/lib/nokogiri/xml/document.rb +166 -14
- data/lib/nokogiri/xml/document_fragment.rb +76 -1
- data/lib/nokogiri/xml/dtd.rb +16 -3
- data/lib/nokogiri/xml/element_content.rb +36 -0
- data/lib/nokogiri/xml/element_decl.rb +13 -0
- data/lib/nokogiri/xml/entity_decl.rb +19 -0
- data/lib/nokogiri/xml/namespace.rb +13 -0
- data/lib/nokogiri/xml/node.rb +561 -166
- data/lib/nokogiri/xml/node/save_options.rb +22 -2
- data/lib/nokogiri/xml/node_set.rb +202 -40
- data/lib/nokogiri/xml/parse_options.rb +93 -0
- data/lib/nokogiri/xml/pp.rb +2 -0
- data/lib/nokogiri/xml/pp/character_data.rb +18 -0
- data/lib/nokogiri/xml/pp/node.rb +56 -0
- data/lib/nokogiri/xml/processing_instruction.rb +2 -0
- data/lib/nokogiri/xml/reader.rb +93 -8
- data/lib/nokogiri/xml/relax_ng.rb +32 -0
- data/lib/nokogiri/xml/sax.rb +1 -7
- data/lib/nokogiri/xml/sax/document.rb +107 -2
- data/lib/nokogiri/xml/sax/parser.rb +57 -7
- data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
- data/lib/nokogiri/xml/sax/push_parser.rb +13 -1
- data/lib/nokogiri/xml/schema.rb +63 -0
- data/lib/nokogiri/xml/syntax_error.rb +25 -1
- data/lib/nokogiri/xml/text.rb +4 -1
- data/lib/nokogiri/xml/xpath.rb +1 -1
- data/lib/nokogiri/xml/xpath/syntax_error.rb +3 -0
- data/lib/nokogiri/xml/xpath_context.rb +2 -0
- data/lib/nokogiri/xslt.rb +26 -2
- data/lib/nokogiri/xslt/stylesheet.rb +19 -0
- data/lib/xsd/xmlparser/nokogiri.rb +45 -9
- data/tasks/cross_compile.rb +173 -0
- data/tasks/test.rb +25 -69
- data/test/css/test_nthiness.rb +3 -4
- data/test/css/test_parser.rb +75 -20
- data/test/css/test_tokenizer.rb +23 -1
- data/test/css/test_xpath_visitor.rb +10 -1
- data/test/decorators/test_slop.rb +16 -0
- data/test/ffi/test_document.rb +35 -0
- data/test/files/2ch.html +108 -0
- data/test/files/address_book.rlx +12 -0
- data/test/files/address_book.xml +10 -0
- data/test/files/bar/bar.xsd +4 -0
- data/test/files/encoding.html +82 -0
- data/test/files/encoding.xhtml +84 -0
- data/test/files/foo/foo.xsd +4 -0
- data/test/files/po.xml +32 -0
- data/test/files/po.xsd +66 -0
- data/test/files/shift_jis.html +10 -0
- data/test/files/shift_jis.xml +5 -0
- data/test/files/snuggles.xml +3 -0
- data/test/files/staff.dtd +10 -0
- data/test/files/valid_bar.xml +2 -0
- data/test/helper.rb +101 -23
- data/test/html/sax/test_parser.rb +81 -2
- data/test/html/sax/test_parser_context.rb +48 -0
- data/test/html/test_builder.rb +39 -8
- data/test/html/test_document.rb +186 -23
- data/test/html/test_document_encoding.rb +78 -1
- data/test/html/test_document_fragment.rb +253 -0
- data/test/html/test_element_description.rb +98 -0
- data/test/html/test_named_characters.rb +1 -1
- data/test/html/test_node.rb +124 -36
- data/test/html/test_node_encoding.rb +27 -0
- data/test/test_convert_xpath.rb +1 -52
- data/test/test_css_cache.rb +2 -13
- data/test/test_encoding_handler.rb +46 -0
- data/test/test_memory_leak.rb +88 -19
- data/test/test_nokogiri.rb +38 -5
- data/test/test_reader.rb +188 -6
- data/test/test_soap4r_sax.rb +52 -0
- data/test/test_xslt_transforms.rb +183 -83
- data/test/xml/node/test_save_options.rb +1 -1
- data/test/xml/node/test_subclass.rb +44 -0
- data/test/xml/sax/test_parser.rb +175 -4
- data/test/xml/sax/test_parser_context.rb +113 -0
- data/test/xml/sax/test_push_parser.rb +90 -2
- data/test/xml/test_attr.rb +35 -1
- data/test/xml/test_attribute_decl.rb +82 -0
- data/test/xml/test_builder.rb +186 -1
- data/test/xml/test_cdata.rb +32 -1
- data/test/xml/test_comment.rb +13 -1
- data/test/xml/test_document.rb +415 -43
- data/test/xml/test_document_encoding.rb +1 -1
- data/test/xml/test_document_fragment.rb +173 -5
- data/test/xml/test_dtd.rb +61 -6
- data/test/xml/test_dtd_encoding.rb +3 -1
- data/test/xml/test_element_content.rb +56 -0
- data/test/xml/test_element_decl.rb +73 -0
- data/test/xml/test_entity_decl.rb +120 -0
- data/test/xml/test_entity_reference.rb +5 -1
- data/test/xml/test_namespace.rb +68 -0
- data/test/xml/test_node.rb +546 -201
- data/test/xml/test_node_attributes.rb +34 -0
- data/test/xml/test_node_encoding.rb +33 -3
- data/test/xml/test_node_reparenting.rb +321 -0
- data/test/xml/test_node_set.rb +538 -2
- data/test/xml/test_parse_options.rb +52 -0
- data/test/xml/test_processing_instruction.rb +6 -1
- data/test/xml/test_reader_encoding.rb +1 -1
- data/test/xml/test_relax_ng.rb +60 -0
- data/test/xml/test_schema.rb +94 -0
- data/test/xml/test_syntax_error.rb +12 -0
- data/test/xml/test_text.rb +35 -1
- data/test/xml/test_unparented_node.rb +5 -5
- data/test/xml/test_xpath.rb +142 -11
- data/test/xslt/test_custom_functions.rb +94 -0
- metadata +328 -92
- data/ext/nokogiri/html_sax_parser.c +0 -57
- data/ext/nokogiri/html_sax_parser.h +0 -11
- 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/native.so +0 -0
- data/ext/nokogiri/xml_xpath.c +0 -53
- data/ext/nokogiri/xml_xpath.h +0 -11
- data/ext/nokogiri/zlib1.dll +0 -0
- data/lib/action-nokogiri.rb +0 -30
- data/lib/nokogiri/css/generated_parser.rb +0 -713
- data/lib/nokogiri/css/generated_tokenizer.rb +0 -144
- data/lib/nokogiri/decorators.rb +0 -2
- data/lib/nokogiri/decorators/hpricot.rb +0 -3
- data/lib/nokogiri/decorators/hpricot/node.rb +0 -56
- data/lib/nokogiri/decorators/hpricot/node_set.rb +0 -54
- data/lib/nokogiri/decorators/hpricot/xpath_visitor.rb +0 -28
- data/lib/nokogiri/hpricot.rb +0 -51
- data/lib/nokogiri/xml/comment.rb +0 -6
- data/lib/nokogiri/xml/element.rb +0 -6
- data/lib/nokogiri/xml/entity_declaration.rb +0 -9
- data/lib/nokogiri/xml/fragment_handler.rb +0 -34
- data/test/hpricot/files/basic.xhtml +0 -17
- data/test/hpricot/files/boingboing.html +0 -2266
- data/test/hpricot/files/cy0.html +0 -3653
- data/test/hpricot/files/immob.html +0 -400
- data/test/hpricot/files/pace_application.html +0 -1320
- data/test/hpricot/files/tenderlove.html +0 -16
- data/test/hpricot/files/uswebgen.html +0 -220
- data/test/hpricot/files/utf8.html +0 -1054
- data/test/hpricot/files/week9.html +0 -1723
- data/test/hpricot/files/why.xml +0 -19
- data/test/hpricot/load_files.rb +0 -11
- data/test/hpricot/test_alter.rb +0 -68
- data/test/hpricot/test_builder.rb +0 -20
- data/test/hpricot/test_parser.rb +0 -426
- data/test/hpricot/test_paths.rb +0 -15
- data/test/hpricot/test_preserved.rb +0 -77
- data/test/hpricot/test_xml.rb +0 -30
- data/test/test_gc.rb +0 -15
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require "helper"
|
2
3
|
|
3
4
|
module Nokogiri
|
4
5
|
module HTML
|
@@ -9,14 +10,32 @@ module Nokogiri
|
|
9
10
|
@parser = HTML::SAX::Parser.new(Doc.new)
|
10
11
|
end
|
11
12
|
|
13
|
+
def test_parse_empty_document
|
14
|
+
# This caused a segfault in libxml 2.6.x
|
15
|
+
assert_nothing_raised { @parser.parse '' }
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_parse_empty_file
|
19
|
+
# Make sure empty files don't break stuff
|
20
|
+
empty_file_name = File.join(Dir.tmpdir, 'bogus.xml')
|
21
|
+
FileUtils.touch empty_file_name
|
22
|
+
assert_nothing_raised { @parser.parse_file empty_file_name }
|
23
|
+
end
|
24
|
+
|
12
25
|
def test_parse_file
|
13
26
|
@parser.parse_file(HTML_FILE)
|
14
27
|
assert_equal 1110, @parser.document.end_elements.length
|
15
28
|
end
|
16
29
|
|
30
|
+
def test_parse_file_nil_argument
|
31
|
+
assert_raises(ArgumentError) {
|
32
|
+
@parser.parse_file(nil)
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
17
36
|
def test_parse_file_non_existant
|
18
37
|
assert_raise Errno::ENOENT do
|
19
|
-
@parser.parse_file('
|
38
|
+
@parser.parse_file('there_is_no_reasonable_way_this_file_exists')
|
20
39
|
end
|
21
40
|
end
|
22
41
|
|
@@ -26,6 +45,21 @@ module Nokogiri
|
|
26
45
|
end
|
27
46
|
end
|
28
47
|
|
48
|
+
def test_parse_memory_nil
|
49
|
+
assert_raise ArgumentError do
|
50
|
+
@parser.parse_memory(nil)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_parse_force_encoding
|
55
|
+
@parser.parse_memory(<<-HTML, 'UTF-8')
|
56
|
+
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
57
|
+
Информация
|
58
|
+
HTML
|
59
|
+
assert_equal("Информация",
|
60
|
+
@parser.document.data.join.strip)
|
61
|
+
end
|
62
|
+
|
29
63
|
def test_parse_document
|
30
64
|
@parser.parse_memory(<<-eoxml)
|
31
65
|
<p>Paragraph 1</p>
|
@@ -34,6 +68,51 @@ module Nokogiri
|
|
34
68
|
assert_equal([["html", []], ["body", []], ["p", []], ["p", []]],
|
35
69
|
@parser.document.start_elements)
|
36
70
|
end
|
71
|
+
|
72
|
+
def test_parser_attributes
|
73
|
+
html = <<-eohtml
|
74
|
+
<html>
|
75
|
+
<head>
|
76
|
+
<title>hello</title>
|
77
|
+
</head>
|
78
|
+
<body>
|
79
|
+
<img src="face.jpg" title="daddy & me">
|
80
|
+
<hr noshade size="2">
|
81
|
+
</body>
|
82
|
+
</html>
|
83
|
+
eohtml
|
84
|
+
|
85
|
+
block_called = false
|
86
|
+
@parser.parse(html) { |ctx|
|
87
|
+
block_called = true
|
88
|
+
ctx.replace_entities = true
|
89
|
+
}
|
90
|
+
|
91
|
+
assert block_called
|
92
|
+
|
93
|
+
noshade_value = if Nokogiri.uses_libxml? && Nokogiri::VERSION_INFO['libxml']['loaded'] < '2.7.7'
|
94
|
+
['noshade', 'noshade']
|
95
|
+
elsif Nokogiri.jruby?
|
96
|
+
['noshade', '']
|
97
|
+
else
|
98
|
+
['noshade', nil]
|
99
|
+
end
|
100
|
+
|
101
|
+
assert_equal [
|
102
|
+
['html', []],
|
103
|
+
['head', []],
|
104
|
+
['title', []],
|
105
|
+
['body', []],
|
106
|
+
['img', [
|
107
|
+
['src', 'face.jpg'],
|
108
|
+
['title', 'daddy & me']
|
109
|
+
]],
|
110
|
+
['hr', [
|
111
|
+
noshade_value,
|
112
|
+
['size', '2']
|
113
|
+
]]
|
114
|
+
], @parser.document.start_elements
|
115
|
+
end
|
37
116
|
end
|
38
117
|
end
|
39
118
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require "helper"
|
4
|
+
|
5
|
+
module Nokogiri
|
6
|
+
module HTML
|
7
|
+
module SAX
|
8
|
+
class TestParserContext < Nokogiri::SAX::TestCase
|
9
|
+
def test_from_io
|
10
|
+
assert_nothing_raised do
|
11
|
+
ParserContext.new StringIO.new('fo'), 'UTF-8'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_from_string
|
16
|
+
assert_nothing_raised do
|
17
|
+
ParserContext.new 'blah blah'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_parse_with
|
22
|
+
ctx = ParserContext.new 'blah'
|
23
|
+
assert_raises ArgumentError do
|
24
|
+
ctx.parse_with nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_parse_with_sax_parser
|
29
|
+
assert_nothing_raised do
|
30
|
+
xml = "<root />"
|
31
|
+
ctx = ParserContext.new xml
|
32
|
+
parser = Parser.new Doc.new
|
33
|
+
ctx.parse_with parser
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_from_file
|
38
|
+
assert_nothing_raised do
|
39
|
+
ctx = ParserContext.file HTML_FILE, 'UTF-8'
|
40
|
+
parser = Parser.new Doc.new
|
41
|
+
ctx.parse_with parser
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
data/test/html/test_builder.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
|
-
require
|
1
|
+
require "helper"
|
2
2
|
|
3
3
|
module Nokogiri
|
4
4
|
module HTML
|
5
5
|
class TestBuilder < Nokogiri::TestCase
|
6
|
+
def test_top_level_function_builds
|
7
|
+
foo = nil
|
8
|
+
Nokogiri() { |xml| foo = xml }
|
9
|
+
assert_instance_of Nokogiri::HTML::Builder, foo
|
10
|
+
end
|
11
|
+
|
6
12
|
def test_builder_with_explicit_tags
|
7
13
|
html_doc = Nokogiri::HTML::Builder.new {
|
8
14
|
div.slide(:class => 'another_class') {
|
@@ -16,7 +22,7 @@ module Nokogiri
|
|
16
22
|
end
|
17
23
|
|
18
24
|
def test_hash_as_attributes_for_attribute_method
|
19
|
-
html = Nokogiri::HTML::Builder.new {
|
25
|
+
html = Nokogiri::HTML::Builder.new { ||
|
20
26
|
div.slide(:class => 'another_class') {
|
21
27
|
span 'Slide 1'
|
22
28
|
}
|
@@ -36,7 +42,7 @@ module Nokogiri
|
|
36
42
|
|
37
43
|
def test_href_with_attributes
|
38
44
|
uri = 'http://tenderlovemaking.com/'
|
39
|
-
built = Nokogiri::XML::Builder.new {
|
45
|
+
built = Nokogiri::XML::Builder.new {
|
40
46
|
div {
|
41
47
|
a('King Khan & The Shrines', :href => uri)
|
42
48
|
}
|
@@ -47,11 +53,13 @@ module Nokogiri
|
|
47
53
|
|
48
54
|
def test_tag_nesting
|
49
55
|
builder = Nokogiri::HTML::Builder.new do
|
50
|
-
|
51
|
-
|
52
|
-
|
56
|
+
body {
|
57
|
+
span.left ''
|
58
|
+
span.middle {
|
59
|
+
div.icon ''
|
60
|
+
}
|
61
|
+
span.right ''
|
53
62
|
}
|
54
|
-
span.right ''
|
55
63
|
end
|
56
64
|
assert node = builder.doc.css('span.right').first
|
57
65
|
assert_equal 'middle', node.previous_sibling['class']
|
@@ -117,7 +125,7 @@ module Nokogiri
|
|
117
125
|
assert_equal('<html><body><b>bold tag</b></body></html>',
|
118
126
|
builder.doc.root.to_html.chomp.gsub(/>\s*</, '><'))
|
119
127
|
end
|
120
|
-
|
128
|
+
|
121
129
|
def test_instance_eval_with_delegation_to_block_context
|
122
130
|
class << self
|
123
131
|
def foo
|
@@ -128,6 +136,29 @@ module Nokogiri
|
|
128
136
|
builder = Nokogiri::HTML::Builder.new { text foo }
|
129
137
|
assert builder.to_html.include?("foo!")
|
130
138
|
end
|
139
|
+
|
140
|
+
def test_builder_with_param
|
141
|
+
doc = Nokogiri::HTML::Builder.new { |html|
|
142
|
+
html.body {
|
143
|
+
html.p "hello world"
|
144
|
+
}
|
145
|
+
}.doc
|
146
|
+
|
147
|
+
assert node = doc.xpath('//body/p').first
|
148
|
+
assert_equal 'hello world', node.content
|
149
|
+
end
|
150
|
+
|
151
|
+
def test_builder_with_id
|
152
|
+
text = "hello world"
|
153
|
+
doc = Nokogiri::HTML::Builder.new { |html|
|
154
|
+
html.body {
|
155
|
+
html.id_ text
|
156
|
+
}
|
157
|
+
}.doc
|
158
|
+
|
159
|
+
assert node = doc.xpath('//body/id').first
|
160
|
+
assert_equal text, node.content
|
161
|
+
end
|
131
162
|
end
|
132
163
|
end
|
133
164
|
end
|
data/test/html/test_document.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "helper"
|
2
2
|
|
3
3
|
module Nokogiri
|
4
4
|
module HTML
|
@@ -8,8 +8,101 @@ module Nokogiri
|
|
8
8
|
@html = Nokogiri::HTML.parse(File.read(HTML_FILE))
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
11
|
+
def test_exceptions_remove_newlines
|
12
|
+
errors = @html.errors
|
13
|
+
assert errors.length > 0, 'has errors'
|
14
|
+
errors.each do |error|
|
15
|
+
assert_equal(error.to_s.chomp, error.to_s)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_fragment
|
20
|
+
fragment = @html.fragment
|
21
|
+
assert_equal 0, fragment.children.length
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_document_takes_config_block
|
25
|
+
options = nil
|
26
|
+
Nokogiri::HTML(File.read(HTML_FILE), HTML_FILE) do |cfg|
|
27
|
+
options = cfg
|
28
|
+
options.nonet.nowarning.dtdattr
|
29
|
+
end
|
30
|
+
assert options.nonet?
|
31
|
+
assert options.nowarning?
|
32
|
+
assert options.dtdattr?
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_parse_takes_config_block
|
36
|
+
options = nil
|
37
|
+
Nokogiri::HTML.parse(File.read(HTML_FILE), HTML_FILE) do |cfg|
|
38
|
+
options = cfg
|
39
|
+
options.nonet.nowarning.dtdattr
|
40
|
+
end
|
41
|
+
assert options.nonet?
|
42
|
+
assert options.nowarning?
|
43
|
+
assert options.dtdattr?
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_subclass
|
47
|
+
klass = Class.new(Nokogiri::HTML::Document)
|
48
|
+
doc = klass.new
|
49
|
+
assert_instance_of klass, doc
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_subclass_initialize
|
53
|
+
klass = Class.new(Nokogiri::HTML::Document) do
|
54
|
+
attr_accessor :initialized_with
|
55
|
+
|
56
|
+
def initialize(*args)
|
57
|
+
@initialized_with = args
|
58
|
+
end
|
59
|
+
end
|
60
|
+
doc = klass.new("uri", "external_id", 1)
|
61
|
+
assert_equal ["uri", "external_id", 1], doc.initialized_with
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_subclass_dup
|
65
|
+
klass = Class.new(Nokogiri::HTML::Document)
|
66
|
+
doc = klass.new.dup
|
67
|
+
assert_instance_of klass, doc
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_subclass_parse
|
71
|
+
klass = Class.new(Nokogiri::HTML::Document)
|
72
|
+
doc = klass.parse(File.read(HTML_FILE))
|
73
|
+
assert_equal @html.to_s, doc.to_s
|
74
|
+
assert_instance_of klass, doc
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_document_parse_method
|
78
|
+
html = Nokogiri::HTML::Document.parse(File.read(HTML_FILE))
|
79
|
+
assert_equal @html.to_s, html.to_s
|
80
|
+
end
|
81
|
+
|
82
|
+
###
|
83
|
+
# Nokogiri::HTML returns an empty Document when given a blank string GH#11
|
84
|
+
def test_empty_string_returns_empty_doc
|
12
85
|
doc = Nokogiri::HTML('')
|
86
|
+
assert_instance_of Nokogiri::HTML::Document, doc
|
87
|
+
assert_nil doc.root
|
88
|
+
end
|
89
|
+
|
90
|
+
unless %w[2 6] === LIBXML_VERSION.split('.')[0..1]
|
91
|
+
# FIXME: this is a hack around broken libxml versions
|
92
|
+
def test_to_xhtml_with_indent
|
93
|
+
doc = Nokogiri::HTML('<html><body><a>foo</a></body></html>')
|
94
|
+
doc = Nokogiri::HTML(doc.to_xhtml(:indent => 2))
|
95
|
+
assert_indent 2, doc
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_write_to_xhtml_with_indent
|
99
|
+
io = StringIO.new
|
100
|
+
doc = Nokogiri::HTML('<html><body><a>foo</a></body></html>')
|
101
|
+
doc.write_xhtml_to io, :indent => 5
|
102
|
+
io.rewind
|
103
|
+
doc = Nokogiri::HTML(io.read)
|
104
|
+
assert_indent 5, doc
|
105
|
+
end
|
13
106
|
end
|
14
107
|
|
15
108
|
def test_swap_should_not_exist
|
@@ -24,12 +117,91 @@ module Nokogiri
|
|
24
117
|
}
|
25
118
|
end
|
26
119
|
|
120
|
+
def test_meta_encoding
|
121
|
+
assert_equal 'UTF-8', @html.meta_encoding
|
122
|
+
|
123
|
+
html = Nokogiri::HTML(<<-eohtml)
|
124
|
+
<html>
|
125
|
+
<head>
|
126
|
+
<meta http-equiv="X-Content-Type" content="text/html; charset=Shift_JIS">
|
127
|
+
</head>
|
128
|
+
<body>
|
129
|
+
foo
|
130
|
+
</body>
|
131
|
+
</html>
|
132
|
+
eohtml
|
133
|
+
assert_nil html.meta_encoding
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_meta_encoding=
|
137
|
+
@html.meta_encoding = 'EUC-JP'
|
138
|
+
assert_equal 'EUC-JP', @html.meta_encoding
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_title
|
142
|
+
assert_equal 'Tender Lovemaking ', @html.title
|
143
|
+
doc = Nokogiri::HTML('<html><body>foo</body></html>')
|
144
|
+
assert_nil doc.title
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_title=()
|
148
|
+
doc = Nokogiri::HTML(<<eohtml)
|
149
|
+
<html>
|
150
|
+
<head>
|
151
|
+
<title>old</title>
|
152
|
+
</head>
|
153
|
+
<body>
|
154
|
+
foo
|
155
|
+
</body>
|
156
|
+
</html>
|
157
|
+
eohtml
|
158
|
+
doc.title = 'new'
|
159
|
+
assert_equal 'new', doc.title
|
160
|
+
|
161
|
+
doc = Nokogiri::HTML(<<eohtml)
|
162
|
+
<html>
|
163
|
+
<head>
|
164
|
+
</head>
|
165
|
+
<body>
|
166
|
+
foo
|
167
|
+
</body>
|
168
|
+
</html>
|
169
|
+
eohtml
|
170
|
+
doc.title = 'new'
|
171
|
+
assert_equal 'new', doc.title
|
172
|
+
|
173
|
+
doc = Nokogiri::HTML(<<eohtml)
|
174
|
+
<html>
|
175
|
+
<body>
|
176
|
+
foo
|
177
|
+
</body>
|
178
|
+
</html>
|
179
|
+
eohtml
|
180
|
+
doc.title = 'new'
|
181
|
+
assert_nil doc.title
|
182
|
+
end
|
183
|
+
|
184
|
+
def test_meta_encoding_without_head
|
185
|
+
html = Nokogiri::HTML('<html><body>foo</body></html>')
|
186
|
+
assert_nil html.meta_encoding
|
187
|
+
|
188
|
+
html.meta_encoding = 'EUC-JP'
|
189
|
+
assert_nil html.meta_encoding
|
190
|
+
end
|
191
|
+
|
27
192
|
def test_root_node_parent_is_document
|
28
193
|
parent = @html.root.parent
|
29
194
|
assert_equal @html, parent
|
30
195
|
assert_instance_of Nokogiri::HTML::Document, parent
|
31
196
|
end
|
32
197
|
|
198
|
+
def test_parse_handles_nil_gracefully
|
199
|
+
assert_nothing_raised do
|
200
|
+
@doc = Nokogiri::HTML::Document.parse(nil)
|
201
|
+
end
|
202
|
+
assert_instance_of Nokogiri::HTML::Document, @doc
|
203
|
+
end
|
204
|
+
|
33
205
|
def test_parse_empty_document
|
34
206
|
doc = Nokogiri::HTML("\n")
|
35
207
|
assert_equal 0, doc.css('a').length
|
@@ -43,15 +215,17 @@ module Nokogiri
|
|
43
215
|
end
|
44
216
|
|
45
217
|
def test_parse_io
|
46
|
-
assert
|
47
|
-
Document.read_io(f, nil, 'UTF-8',
|
218
|
+
assert File.open(HTML_FILE, 'rb') { |f|
|
219
|
+
Document.read_io(f, nil, 'UTF-8',
|
220
|
+
XML::ParseOptions::NOERROR | XML::ParseOptions::NOWARNING
|
221
|
+
)
|
48
222
|
}
|
49
223
|
end
|
50
224
|
|
51
225
|
def test_to_xhtml
|
52
226
|
assert_match 'XHTML', @html.to_xhtml
|
53
|
-
assert_match 'XHTML', @html.to_xhtml('UTF-8')
|
54
|
-
assert_match 'UTF-8', @html.to_xhtml('UTF-8')
|
227
|
+
assert_match 'XHTML', @html.to_xhtml(:encoding => 'UTF-8')
|
228
|
+
assert_match 'UTF-8', @html.to_xhtml(:encoding => 'UTF-8')
|
55
229
|
end
|
56
230
|
|
57
231
|
def test_no_xml_header
|
@@ -142,7 +316,7 @@ module Nokogiri
|
|
142
316
|
end
|
143
317
|
|
144
318
|
def test_find_with_function
|
145
|
-
|
319
|
+
assert @html.css("div:awesome() h1", Class.new {
|
146
320
|
def awesome divs
|
147
321
|
[divs.first]
|
148
322
|
end
|
@@ -201,6 +375,11 @@ module Nokogiri
|
|
201
375
|
assert_equal('<p>Helloworld!</p>', node.inner_html.gsub(/\s/, ''))
|
202
376
|
end
|
203
377
|
|
378
|
+
def test_round_trip
|
379
|
+
doc = Nokogiri::HTML(@html.inner_html)
|
380
|
+
assert_equal @html.root.to_html, doc.root.to_html
|
381
|
+
end
|
382
|
+
|
204
383
|
def test_fragment_contains_text_node
|
205
384
|
fragment = Nokogiri::HTML.fragment('fooo')
|
206
385
|
assert_equal 1, fragment.children.length
|
@@ -211,22 +390,6 @@ module Nokogiri
|
|
211
390
|
assert_equal 2, Nokogiri::HTML.fragment("<br/><hr/>").children.length
|
212
391
|
end
|
213
392
|
|
214
|
-
def test_fragment
|
215
|
-
fragment = Nokogiri::HTML.fragment(<<-eohtml)
|
216
|
-
<div>
|
217
|
-
<b>Hello World</b>
|
218
|
-
</div>
|
219
|
-
eohtml
|
220
|
-
assert_equal 1, fragment.children.length
|
221
|
-
assert_equal 'div', fragment.children.first.name
|
222
|
-
assert_match(/Hello World/, fragment.to_html)
|
223
|
-
|
224
|
-
# libxml2 is broken in 2.6.16 and 2.6.17
|
225
|
-
unless [16, 17].include?(Nokogiri::LIBXML_VERSION.split('.').last.to_i)
|
226
|
-
assert_equal 1, fragment.css('div').length
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
393
|
def test_relative_css_finder
|
231
394
|
doc = Nokogiri::HTML(<<-eohtml)
|
232
395
|
<html>
|