nokogiri 1.6.2.rc1-x64-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.
- checksums.yaml +7 -0
- data/.autotest +26 -0
- data/.editorconfig +17 -0
- data/.gemtest +0 -0
- data/.travis.yml +25 -0
- data/CHANGELOG.ja.rdoc +857 -0
- data/CHANGELOG.rdoc +880 -0
- data/C_CODING_STYLE.rdoc +33 -0
- data/Gemfile +21 -0
- data/Manifest.txt +371 -0
- data/README.ja.rdoc +112 -0
- data/README.rdoc +180 -0
- data/ROADMAP.md +89 -0
- data/Rakefile +351 -0
- data/STANDARD_RESPONSES.md +47 -0
- data/Y_U_NO_GEMSPEC.md +155 -0
- data/bin/nokogiri +78 -0
- data/build_all +130 -0
- data/dependencies.yml +4 -0
- data/ext/nokogiri/depend +358 -0
- data/ext/nokogiri/extconf.rb +453 -0
- data/ext/nokogiri/html_document.c +170 -0
- data/ext/nokogiri/html_document.h +10 -0
- data/ext/nokogiri/html_element_description.c +279 -0
- data/ext/nokogiri/html_element_description.h +10 -0
- data/ext/nokogiri/html_entity_lookup.c +32 -0
- data/ext/nokogiri/html_entity_lookup.h +8 -0
- data/ext/nokogiri/html_sax_parser_context.c +116 -0
- data/ext/nokogiri/html_sax_parser_context.h +11 -0
- data/ext/nokogiri/html_sax_push_parser.c +87 -0
- data/ext/nokogiri/html_sax_push_parser.h +9 -0
- data/ext/nokogiri/nokogiri.c +148 -0
- data/ext/nokogiri/nokogiri.h +164 -0
- data/ext/nokogiri/xml_attr.c +94 -0
- data/ext/nokogiri/xml_attr.h +9 -0
- data/ext/nokogiri/xml_attribute_decl.c +70 -0
- data/ext/nokogiri/xml_attribute_decl.h +9 -0
- data/ext/nokogiri/xml_cdata.c +56 -0
- data/ext/nokogiri/xml_cdata.h +9 -0
- data/ext/nokogiri/xml_comment.c +54 -0
- data/ext/nokogiri/xml_comment.h +9 -0
- data/ext/nokogiri/xml_document.c +577 -0
- data/ext/nokogiri/xml_document.h +23 -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 +202 -0
- data/ext/nokogiri/xml_dtd.h +10 -0
- 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 +52 -0
- data/ext/nokogiri/xml_entity_reference.h +9 -0
- data/ext/nokogiri/xml_io.c +56 -0
- data/ext/nokogiri/xml_io.h +11 -0
- data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
- data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
- data/ext/nokogiri/xml_namespace.c +78 -0
- data/ext/nokogiri/xml_namespace.h +13 -0
- data/ext/nokogiri/xml_node.c +1541 -0
- data/ext/nokogiri/xml_node.h +13 -0
- data/ext/nokogiri/xml_node_set.c +467 -0
- data/ext/nokogiri/xml_node_set.h +14 -0
- data/ext/nokogiri/xml_processing_instruction.c +56 -0
- data/ext/nokogiri/xml_processing_instruction.h +9 -0
- data/ext/nokogiri/xml_reader.c +681 -0
- data/ext/nokogiri/xml_reader.h +10 -0
- data/ext/nokogiri/xml_relax_ng.c +161 -0
- data/ext/nokogiri/xml_relax_ng.h +9 -0
- data/ext/nokogiri/xml_sax_parser.c +312 -0
- data/ext/nokogiri/xml_sax_parser.h +39 -0
- data/ext/nokogiri/xml_sax_parser_context.c +262 -0
- data/ext/nokogiri/xml_sax_parser_context.h +10 -0
- data/ext/nokogiri/xml_sax_push_parser.c +115 -0
- data/ext/nokogiri/xml_sax_push_parser.h +9 -0
- data/ext/nokogiri/xml_schema.c +205 -0
- data/ext/nokogiri/xml_schema.h +9 -0
- data/ext/nokogiri/xml_syntax_error.c +63 -0
- data/ext/nokogiri/xml_syntax_error.h +13 -0
- data/ext/nokogiri/xml_text.c +52 -0
- data/ext/nokogiri/xml_text.h +9 -0
- data/ext/nokogiri/xml_xpath_context.c +307 -0
- data/ext/nokogiri/xml_xpath_context.h +10 -0
- data/ext/nokogiri/xslt_stylesheet.c +270 -0
- data/ext/nokogiri/xslt_stylesheet.h +14 -0
- data/lib/nokogiri.rb +137 -0
- data/lib/nokogiri/2.0/nokogiri.so +0 -0
- data/lib/nokogiri/2.1/nokogiri.so +0 -0
- data/lib/nokogiri/css.rb +27 -0
- data/lib/nokogiri/css/node.rb +52 -0
- data/lib/nokogiri/css/parser.rb +715 -0
- data/lib/nokogiri/css/parser.y +249 -0
- data/lib/nokogiri/css/parser_extras.rb +91 -0
- data/lib/nokogiri/css/syntax_error.rb +7 -0
- data/lib/nokogiri/css/tokenizer.rb +152 -0
- data/lib/nokogiri/css/tokenizer.rex +55 -0
- data/lib/nokogiri/css/xpath_visitor.rb +219 -0
- data/lib/nokogiri/decorators/slop.rb +35 -0
- data/lib/nokogiri/html.rb +37 -0
- data/lib/nokogiri/html/builder.rb +35 -0
- data/lib/nokogiri/html/document.rb +333 -0
- data/lib/nokogiri/html/document_fragment.rb +41 -0
- data/lib/nokogiri/html/element_description.rb +23 -0
- data/lib/nokogiri/html/element_description_defaults.rb +671 -0
- data/lib/nokogiri/html/entity_lookup.rb +13 -0
- data/lib/nokogiri/html/sax/parser.rb +52 -0
- data/lib/nokogiri/html/sax/parser_context.rb +16 -0
- data/lib/nokogiri/html/sax/push_parser.rb +16 -0
- data/lib/nokogiri/syntax_error.rb +4 -0
- data/lib/nokogiri/version.rb +106 -0
- data/lib/nokogiri/xml.rb +73 -0
- data/lib/nokogiri/xml/attr.rb +14 -0
- data/lib/nokogiri/xml/attribute_decl.rb +18 -0
- data/lib/nokogiri/xml/builder.rb +443 -0
- data/lib/nokogiri/xml/cdata.rb +11 -0
- data/lib/nokogiri/xml/character_data.rb +7 -0
- data/lib/nokogiri/xml/document.rb +279 -0
- data/lib/nokogiri/xml/document_fragment.rb +112 -0
- data/lib/nokogiri/xml/dtd.rb +32 -0
- 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 +982 -0
- data/lib/nokogiri/xml/node/save_options.rb +61 -0
- data/lib/nokogiri/xml/node_set.rb +355 -0
- data/lib/nokogiri/xml/notation.rb +6 -0
- data/lib/nokogiri/xml/parse_options.rb +98 -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 +8 -0
- data/lib/nokogiri/xml/reader.rb +112 -0
- data/lib/nokogiri/xml/relax_ng.rb +32 -0
- data/lib/nokogiri/xml/sax.rb +4 -0
- data/lib/nokogiri/xml/sax/document.rb +171 -0
- data/lib/nokogiri/xml/sax/parser.rb +123 -0
- data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
- data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
- data/lib/nokogiri/xml/schema.rb +63 -0
- data/lib/nokogiri/xml/syntax_error.rb +47 -0
- data/lib/nokogiri/xml/text.rb +9 -0
- data/lib/nokogiri/xml/xpath.rb +10 -0
- data/lib/nokogiri/xml/xpath/syntax_error.rb +11 -0
- data/lib/nokogiri/xml/xpath_context.rb +16 -0
- data/lib/nokogiri/xslt.rb +56 -0
- data/lib/nokogiri/xslt/stylesheet.rb +25 -0
- data/lib/xsd/xmlparser/nokogiri.rb +102 -0
- data/suppressions/README.txt +1 -0
- data/suppressions/nokogiri_ree-1.8.7.358.supp +61 -0
- data/suppressions/nokogiri_ruby-1.8.7.370.supp +0 -0
- data/suppressions/nokogiri_ruby-1.9.2.320.supp +28 -0
- data/suppressions/nokogiri_ruby-1.9.3.327.supp +28 -0
- data/tasks/nokogiri.org.rb +24 -0
- data/tasks/test.rb +95 -0
- data/test/css/test_nthiness.rb +222 -0
- data/test/css/test_parser.rb +358 -0
- data/test/css/test_tokenizer.rb +198 -0
- data/test/css/test_xpath_visitor.rb +96 -0
- data/test/decorators/test_slop.rb +16 -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/atom.xml +344 -0
- data/test/files/bar/bar.xsd +4 -0
- data/test/files/bogus.xml +0 -0
- data/test/files/dont_hurt_em_why.xml +422 -0
- data/test/files/encoding.html +82 -0
- data/test/files/encoding.xhtml +84 -0
- data/test/files/exslt.xml +8 -0
- data/test/files/exslt.xslt +35 -0
- data/test/files/foo/foo.xsd +4 -0
- data/test/files/metacharset.html +10 -0
- data/test/files/noencoding.html +47 -0
- data/test/files/po.xml +32 -0
- data/test/files/po.xsd +66 -0
- data/test/files/saml/saml20assertion_schema.xsd +283 -0
- data/test/files/saml/saml20protocol_schema.xsd +302 -0
- data/test/files/saml/xenc_schema.xsd +146 -0
- data/test/files/saml/xmldsig_schema.xsd +318 -0
- data/test/files/shift_jis.html +10 -0
- data/test/files/shift_jis.xml +5 -0
- data/test/files/shift_jis_no_charset.html +9 -0
- data/test/files/snuggles.xml +3 -0
- data/test/files/staff.dtd +10 -0
- data/test/files/staff.xml +59 -0
- data/test/files/staff.xslt +32 -0
- data/test/files/test_document_url/bar.xml +2 -0
- data/test/files/test_document_url/document.dtd +4 -0
- data/test/files/test_document_url/document.xml +6 -0
- data/test/files/tlm.html +850 -0
- data/test/files/to_be_xincluded.xml +2 -0
- data/test/files/valid_bar.xml +2 -0
- data/test/files/xinclude.xml +4 -0
- data/test/helper.rb +164 -0
- data/test/html/sax/test_parser.rb +141 -0
- data/test/html/sax/test_parser_context.rb +46 -0
- data/test/html/test_builder.rb +164 -0
- data/test/html/test_document.rb +619 -0
- data/test/html/test_document_encoding.rb +148 -0
- data/test/html/test_document_fragment.rb +261 -0
- data/test/html/test_element_description.rb +105 -0
- data/test/html/test_named_characters.rb +14 -0
- data/test/html/test_node.rb +196 -0
- data/test/html/test_node_encoding.rb +27 -0
- data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +14 -0
- data/test/namespaces/test_namespaces_in_builder_doc.rb +75 -0
- data/test/namespaces/test_namespaces_in_cloned_doc.rb +31 -0
- data/test/namespaces/test_namespaces_in_created_doc.rb +75 -0
- data/test/namespaces/test_namespaces_in_parsed_doc.rb +66 -0
- data/test/test_convert_xpath.rb +135 -0
- data/test/test_css_cache.rb +45 -0
- data/test/test_encoding_handler.rb +46 -0
- data/test/test_memory_leak.rb +156 -0
- data/test/test_nokogiri.rb +138 -0
- data/test/test_reader.rb +558 -0
- data/test/test_soap4r_sax.rb +52 -0
- data/test/test_xslt_transforms.rb +279 -0
- data/test/xml/node/test_save_options.rb +28 -0
- data/test/xml/node/test_subclass.rb +44 -0
- data/test/xml/sax/test_parser.rb +382 -0
- data/test/xml/sax/test_parser_context.rb +115 -0
- data/test/xml/sax/test_push_parser.rb +157 -0
- data/test/xml/test_attr.rb +64 -0
- data/test/xml/test_attribute_decl.rb +86 -0
- data/test/xml/test_builder.rb +315 -0
- data/test/xml/test_c14n.rb +161 -0
- data/test/xml/test_cdata.rb +48 -0
- data/test/xml/test_comment.rb +29 -0
- data/test/xml/test_document.rb +934 -0
- data/test/xml/test_document_encoding.rb +28 -0
- data/test/xml/test_document_fragment.rb +228 -0
- data/test/xml/test_dtd.rb +187 -0
- data/test/xml/test_dtd_encoding.rb +33 -0
- 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 +122 -0
- data/test/xml/test_entity_reference.rb +245 -0
- data/test/xml/test_namespace.rb +95 -0
- data/test/xml/test_node.rb +1155 -0
- data/test/xml/test_node_attributes.rb +113 -0
- data/test/xml/test_node_encoding.rb +107 -0
- data/test/xml/test_node_inheritance.rb +32 -0
- data/test/xml/test_node_reparenting.rb +374 -0
- data/test/xml/test_node_set.rb +755 -0
- data/test/xml/test_parse_options.rb +64 -0
- data/test/xml/test_processing_instruction.rb +30 -0
- data/test/xml/test_reader_encoding.rb +142 -0
- data/test/xml/test_relax_ng.rb +60 -0
- data/test/xml/test_schema.rb +129 -0
- data/test/xml/test_syntax_error.rb +12 -0
- data/test/xml/test_text.rb +45 -0
- data/test/xml/test_unparented_node.rb +422 -0
- data/test/xml/test_xinclude.rb +83 -0
- data/test/xml/test_xpath.rb +376 -0
- data/test/xslt/test_custom_functions.rb +133 -0
- data/test/xslt/test_exception_handling.rb +37 -0
- data/test_all +81 -0
- metadata +601 -0
data/test/helper.rb
ADDED
@@ -0,0 +1,164 @@
|
|
1
|
+
#Process.setrlimit(Process::RLIMIT_CORE, Process::RLIM_INFINITY) unless RUBY_PLATFORM =~ /(java|mswin|mingw)/i
|
2
|
+
$VERBOSE = true
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'minitest/pride'
|
5
|
+
require 'fileutils'
|
6
|
+
require 'tempfile'
|
7
|
+
require 'pp'
|
8
|
+
|
9
|
+
require 'nokogiri'
|
10
|
+
|
11
|
+
warn "#{__FILE__}:#{__LINE__}: version info: #{Nokogiri::VERSION_INFO.inspect}"
|
12
|
+
|
13
|
+
module Nokogiri
|
14
|
+
class TestCase < MiniTest::Spec
|
15
|
+
ASSETS_DIR = File.expand_path File.join(File.dirname(__FILE__), 'files')
|
16
|
+
ADDRESS_SCHEMA_FILE = File.join(ASSETS_DIR, 'address_book.rlx')
|
17
|
+
ADDRESS_XML_FILE = File.join(ASSETS_DIR, 'address_book.xml')
|
18
|
+
ENCODING_HTML_FILE = File.join(ASSETS_DIR, 'encoding.html')
|
19
|
+
ENCODING_XHTML_FILE = File.join(ASSETS_DIR, 'encoding.xhtml')
|
20
|
+
EXML_FILE = File.join(ASSETS_DIR, 'exslt.xml')
|
21
|
+
EXSLT_FILE = File.join(ASSETS_DIR, 'exslt.xslt')
|
22
|
+
HTML_FILE = File.join(ASSETS_DIR, 'tlm.html')
|
23
|
+
METACHARSET_FILE = File.join(ASSETS_DIR, 'metacharset.html')
|
24
|
+
NICH_FILE = File.join(ASSETS_DIR, '2ch.html')
|
25
|
+
NOENCODING_FILE = File.join(ASSETS_DIR, 'noencoding.html')
|
26
|
+
PO_SCHEMA_FILE = File.join(ASSETS_DIR, 'po.xsd')
|
27
|
+
PO_XML_FILE = File.join(ASSETS_DIR, 'po.xml')
|
28
|
+
SHIFT_JIS_HTML = File.join(ASSETS_DIR, 'shift_jis.html')
|
29
|
+
SHIFT_JIS_NO_CHARSET= File.join(ASSETS_DIR, 'shift_jis_no_charset.html')
|
30
|
+
SHIFT_JIS_XML = File.join(ASSETS_DIR, 'shift_jis.xml')
|
31
|
+
SNUGGLES_FILE = File.join(ASSETS_DIR, 'snuggles.xml')
|
32
|
+
XML_FILE = File.join(ASSETS_DIR, 'staff.xml')
|
33
|
+
XML_XINCLUDE_FILE = File.join(ASSETS_DIR, 'xinclude.xml')
|
34
|
+
XML_ATOM_FILE = File.join(ASSETS_DIR, 'atom.xml')
|
35
|
+
XSLT_FILE = File.join(ASSETS_DIR, 'staff.xslt')
|
36
|
+
XPATH_FILE = File.join(ASSETS_DIR, 'slow-xpath.xml')
|
37
|
+
|
38
|
+
def teardown
|
39
|
+
if ENV['NOKOGIRI_GC']
|
40
|
+
STDOUT.putc '!'
|
41
|
+
if RUBY_PLATFORM =~ /java/
|
42
|
+
require 'java'
|
43
|
+
java.lang.System.gc
|
44
|
+
else
|
45
|
+
GC.start
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def assert_indent amount, doc, message = nil
|
51
|
+
nodes = []
|
52
|
+
doc.traverse do |node|
|
53
|
+
nodes << node if node.text? && node.blank?
|
54
|
+
end
|
55
|
+
assert nodes.length > 0
|
56
|
+
nodes.each do |node|
|
57
|
+
len = node.content.gsub(/[\r\n]/, '').length
|
58
|
+
assert_equal(0, len % amount, message)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def util_decorate(document, decorator_module)
|
63
|
+
document.decorators(XML::Node) << decorator_module
|
64
|
+
document.decorators(XML::NodeSet) << decorator_module
|
65
|
+
document.decorate!
|
66
|
+
end
|
67
|
+
|
68
|
+
#
|
69
|
+
# Test::Unit backwards compatibility section
|
70
|
+
#
|
71
|
+
alias :assert_no_match :refute_match
|
72
|
+
alias :assert_not_nil :refute_nil
|
73
|
+
alias :assert_raise :assert_raises
|
74
|
+
alias :assert_not_equal :refute_equal
|
75
|
+
|
76
|
+
def assert_not_send send_ary, m = nil
|
77
|
+
recv, msg, *args = send_ary
|
78
|
+
m = message(m) {
|
79
|
+
"Expected #{mu_pp(recv)}.#{msg}(*#{mu_pp(args)}) to return false" }
|
80
|
+
assert !recv.__send__(msg, *args), m
|
81
|
+
end unless method_defined?(:assert_not_send)
|
82
|
+
end
|
83
|
+
|
84
|
+
module SAX
|
85
|
+
class TestCase < Nokogiri::TestCase
|
86
|
+
class Doc < XML::SAX::Document
|
87
|
+
attr_reader :start_elements, :start_document_called
|
88
|
+
attr_reader :end_elements, :end_document_called
|
89
|
+
attr_reader :data, :comments, :cdata_blocks, :start_elements_namespace
|
90
|
+
attr_reader :errors, :warnings, :end_elements_namespace
|
91
|
+
attr_reader :xmldecls
|
92
|
+
attr_reader :processing_instructions
|
93
|
+
|
94
|
+
def xmldecl version, encoding, standalone
|
95
|
+
@xmldecls = [version, encoding, standalone].compact
|
96
|
+
super
|
97
|
+
end
|
98
|
+
|
99
|
+
def start_document
|
100
|
+
@start_document_called = true
|
101
|
+
super
|
102
|
+
end
|
103
|
+
|
104
|
+
def end_document
|
105
|
+
@end_document_called = true
|
106
|
+
super
|
107
|
+
end
|
108
|
+
|
109
|
+
def error error
|
110
|
+
(@errors ||= []) << error
|
111
|
+
super
|
112
|
+
end
|
113
|
+
|
114
|
+
def warning warning
|
115
|
+
(@warning ||= []) << warning
|
116
|
+
super
|
117
|
+
end
|
118
|
+
|
119
|
+
def start_element *args
|
120
|
+
(@start_elements ||= []) << args
|
121
|
+
super
|
122
|
+
end
|
123
|
+
|
124
|
+
def start_element_namespace *args
|
125
|
+
(@start_elements_namespace ||= []) << args
|
126
|
+
super
|
127
|
+
end
|
128
|
+
|
129
|
+
def end_element *args
|
130
|
+
(@end_elements ||= []) << args
|
131
|
+
super
|
132
|
+
end
|
133
|
+
|
134
|
+
def end_element_namespace *args
|
135
|
+
(@end_elements_namespace ||= []) << args
|
136
|
+
super
|
137
|
+
end
|
138
|
+
|
139
|
+
def characters string
|
140
|
+
@data ||= []
|
141
|
+
@data += [string]
|
142
|
+
super
|
143
|
+
end
|
144
|
+
|
145
|
+
def comment string
|
146
|
+
@comments ||= []
|
147
|
+
@comments += [string]
|
148
|
+
super
|
149
|
+
end
|
150
|
+
|
151
|
+
def cdata_block string
|
152
|
+
@cdata_blocks ||= []
|
153
|
+
@cdata_blocks += [string]
|
154
|
+
super
|
155
|
+
end
|
156
|
+
|
157
|
+
def processing_instruction name, content
|
158
|
+
@processing_instructions ||= []
|
159
|
+
@processing_instructions << [name, content]
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
@@ -0,0 +1,141 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require "helper"
|
3
|
+
|
4
|
+
module Nokogiri
|
5
|
+
module HTML
|
6
|
+
module SAX
|
7
|
+
class TestParser < Nokogiri::SAX::TestCase
|
8
|
+
def setup
|
9
|
+
super
|
10
|
+
@parser = HTML::SAX::Parser.new(Doc.new)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_parse_empty_document
|
14
|
+
# This caused a segfault in libxml 2.6.x
|
15
|
+
assert_nil @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(ASSETS_DIR, 'bogus.xml')
|
21
|
+
# assert_nothing_raised do
|
22
|
+
@parser.parse_file empty_file_name
|
23
|
+
# end
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_parse_file
|
27
|
+
@parser.parse_file(HTML_FILE)
|
28
|
+
|
29
|
+
# Take a look at the comment in test_parse_document to know
|
30
|
+
# a possible reason to this difference.
|
31
|
+
if Nokogiri.uses_libxml?
|
32
|
+
assert_equal 1110, @parser.document.end_elements.length
|
33
|
+
else
|
34
|
+
assert_equal 1119, @parser.document.end_elements.length
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_parse_file_nil_argument
|
39
|
+
assert_raises(ArgumentError) {
|
40
|
+
@parser.parse_file(nil)
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_parse_file_non_existant
|
45
|
+
assert_raise Errno::ENOENT do
|
46
|
+
@parser.parse_file('there_is_no_reasonable_way_this_file_exists')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_parse_file_with_dir
|
51
|
+
assert_raise Errno::EISDIR do
|
52
|
+
@parser.parse_file(File.dirname(__FILE__))
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_parse_memory_nil
|
57
|
+
assert_raise ArgumentError do
|
58
|
+
@parser.parse_memory(nil)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_parse_force_encoding
|
63
|
+
@parser.parse_memory(<<-HTML, 'UTF-8')
|
64
|
+
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
65
|
+
Информация
|
66
|
+
HTML
|
67
|
+
assert_equal("Информация",
|
68
|
+
@parser.document.data.join.strip)
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_parse_document
|
72
|
+
@parser.parse_memory(<<-eoxml)
|
73
|
+
<p>Paragraph 1</p>
|
74
|
+
<p>Paragraph 2</p>
|
75
|
+
eoxml
|
76
|
+
|
77
|
+
# JRuby version is different because of the internal implementation
|
78
|
+
# JRuby version uses NekoHTML which inserts empty "head" elements.
|
79
|
+
#
|
80
|
+
# Currently following features are set:
|
81
|
+
# "http://cyberneko.org/html/properties/names/elems" => "lower"
|
82
|
+
# "http://cyberneko.org/html/properties/names/attrs" => "lower"
|
83
|
+
if Nokogiri.uses_libxml?
|
84
|
+
assert_equal([["html", []], ["body", []], ["p", []], ["p", []]],
|
85
|
+
@parser.document.start_elements)
|
86
|
+
else
|
87
|
+
assert_equal([["html", []], ["head", []], ["body", []], ["p", []], ["p", []]],
|
88
|
+
@parser.document.start_elements)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_parser_attributes
|
93
|
+
html = <<-eohtml
|
94
|
+
<html>
|
95
|
+
<head>
|
96
|
+
<title>hello</title>
|
97
|
+
</head>
|
98
|
+
<body>
|
99
|
+
<img src="face.jpg" title="daddy & me">
|
100
|
+
<hr noshade size="2">
|
101
|
+
</body>
|
102
|
+
</html>
|
103
|
+
eohtml
|
104
|
+
|
105
|
+
block_called = false
|
106
|
+
@parser.parse(html) { |ctx|
|
107
|
+
block_called = true
|
108
|
+
ctx.replace_entities = true
|
109
|
+
}
|
110
|
+
|
111
|
+
assert block_called
|
112
|
+
|
113
|
+
noshade_value = if Nokogiri.uses_libxml? && Nokogiri::VERSION_INFO['libxml']['loaded'] < '2.7.7'
|
114
|
+
['noshade', 'noshade']
|
115
|
+
else
|
116
|
+
['noshade', nil]
|
117
|
+
end
|
118
|
+
|
119
|
+
assert_equal [
|
120
|
+
['html', []],
|
121
|
+
['head', []],
|
122
|
+
['title', []],
|
123
|
+
['body', []],
|
124
|
+
['img', [
|
125
|
+
['src', 'face.jpg'],
|
126
|
+
['title', 'daddy & me']
|
127
|
+
]],
|
128
|
+
['hr', [
|
129
|
+
noshade_value,
|
130
|
+
['size', '2']
|
131
|
+
]]
|
132
|
+
], @parser.document.start_elements
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_empty_processing_instruction
|
136
|
+
@parser.parse_memory("<strong>this will segfault<?strong>")
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
@@ -0,0 +1,46 @@
|
|
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
|
+
ctx = ParserContext.new StringIO.new('fo'), 'UTF-8'
|
11
|
+
assert ctx
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_from_string
|
15
|
+
ctx = ParserContext.new 'blah blah'
|
16
|
+
assert ctx
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_parse_with
|
20
|
+
ctx = ParserContext.new 'blah'
|
21
|
+
assert_raises ArgumentError do
|
22
|
+
ctx.parse_with nil
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_parse_with_sax_parser
|
27
|
+
# assert_nothing_raised do
|
28
|
+
xml = "<root />"
|
29
|
+
ctx = ParserContext.new xml
|
30
|
+
parser = Parser.new Doc.new
|
31
|
+
ctx.parse_with parser
|
32
|
+
# end
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_from_file
|
36
|
+
# assert_nothing_raised do
|
37
|
+
ctx = ParserContext.file HTML_FILE, 'UTF-8'
|
38
|
+
parser = Parser.new Doc.new
|
39
|
+
ctx.parse_with parser
|
40
|
+
# end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
@@ -0,0 +1,164 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
module Nokogiri
|
4
|
+
module HTML
|
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
|
+
|
12
|
+
def test_builder_with_explicit_tags
|
13
|
+
html_doc = Nokogiri::HTML::Builder.new {
|
14
|
+
div.slide(:class => 'another_class') {
|
15
|
+
node = Nokogiri::XML::Node.new("id", doc)
|
16
|
+
node.content = "hello"
|
17
|
+
insert(node)
|
18
|
+
}
|
19
|
+
}.doc
|
20
|
+
assert_equal 1, html_doc.css('div.slide > id').length
|
21
|
+
assert_equal 'hello', html_doc.at('div.slide > id').content
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_hash_as_attributes_for_attribute_method
|
25
|
+
html = Nokogiri::HTML::Builder.new { ||
|
26
|
+
div.slide(:class => 'another_class') {
|
27
|
+
span 'Slide 1'
|
28
|
+
}
|
29
|
+
}.to_html
|
30
|
+
assert_match 'class="slide another_class"', html
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_hash_as_attributes
|
34
|
+
builder = Nokogiri::HTML::Builder.new do
|
35
|
+
div(:id => 'awesome') {
|
36
|
+
h1 "america"
|
37
|
+
}
|
38
|
+
end
|
39
|
+
assert_equal('<div id="awesome"><h1>america</h1></div>',
|
40
|
+
builder.doc.root.to_html.gsub(/\n/, '').gsub(/>\s*</, '><'))
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_href_with_attributes
|
44
|
+
uri = 'http://tenderlovemaking.com/'
|
45
|
+
built = Nokogiri::XML::Builder.new {
|
46
|
+
div {
|
47
|
+
a('King Khan & The Shrines', :href => uri)
|
48
|
+
}
|
49
|
+
}
|
50
|
+
assert_equal 'http://tenderlovemaking.com/',
|
51
|
+
built.doc.at('a')[:href]
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_tag_nesting
|
55
|
+
builder = Nokogiri::HTML::Builder.new do
|
56
|
+
body {
|
57
|
+
span.left ''
|
58
|
+
span.middle {
|
59
|
+
div.icon ''
|
60
|
+
}
|
61
|
+
span.right ''
|
62
|
+
}
|
63
|
+
end
|
64
|
+
assert node = builder.doc.css('span.right').first
|
65
|
+
assert_equal 'middle', node.previous_sibling['class']
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_has_ampersand
|
69
|
+
builder = Nokogiri::HTML::Builder.new do
|
70
|
+
div.rad.thing! {
|
71
|
+
text "<awe&some>"
|
72
|
+
b "hello & world"
|
73
|
+
}
|
74
|
+
end
|
75
|
+
assert_equal(
|
76
|
+
'<div class="rad" id="thing"><awe&some><b>hello & world</b></div>',
|
77
|
+
builder.doc.root.to_html.gsub(/\n/, ''))
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_multi_tags
|
81
|
+
builder = Nokogiri::HTML::Builder.new do
|
82
|
+
div.rad.thing! {
|
83
|
+
text "<awesome>"
|
84
|
+
b "hello"
|
85
|
+
}
|
86
|
+
end
|
87
|
+
assert_equal(
|
88
|
+
'<div class="rad" id="thing"><awesome><b>hello</b></div>',
|
89
|
+
builder.doc.root.to_html.gsub(/\n/, ''))
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_attributes_plus_block
|
93
|
+
builder = Nokogiri::HTML::Builder.new do
|
94
|
+
div.rad.thing! {
|
95
|
+
text "<awesome>"
|
96
|
+
}
|
97
|
+
end
|
98
|
+
assert_equal('<div class="rad" id="thing"><awesome></div>',
|
99
|
+
builder.doc.root.to_html.chomp)
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_builder_adds_attributes
|
103
|
+
builder = Nokogiri::HTML::Builder.new do
|
104
|
+
div.rad.thing! "tender div"
|
105
|
+
end
|
106
|
+
assert_equal('<div class="rad" id="thing">tender div</div>',
|
107
|
+
builder.doc.root.to_html.chomp)
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_bold_tag
|
111
|
+
builder = Nokogiri::HTML::Builder.new do
|
112
|
+
b "bold tag"
|
113
|
+
end
|
114
|
+
assert_equal('<b>bold tag</b>', builder.doc.root.to_html.chomp)
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_html_then_body_tag
|
118
|
+
builder = Nokogiri::HTML::Builder.new do
|
119
|
+
html {
|
120
|
+
body {
|
121
|
+
b "bold tag"
|
122
|
+
}
|
123
|
+
}
|
124
|
+
end
|
125
|
+
assert_equal('<html><body><b>bold tag</b></body></html>',
|
126
|
+
builder.doc.root.to_html.chomp.gsub(/>\s*</, '><'))
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_instance_eval_with_delegation_to_block_context
|
130
|
+
class << self
|
131
|
+
def foo
|
132
|
+
"foo!"
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
builder = Nokogiri::HTML::Builder.new { text foo }
|
137
|
+
assert builder.to_html.include?("foo!")
|
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
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|