nokogiri 1.8.5-java → 1.9.0-java
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 +5 -5
- data/README.md +0 -1
- data/ext/java/nokogiri/XmlAttr.java +3 -1
- data/ext/java/nokogiri/XmlDtd.java +20 -16
- data/ext/java/nokogiri/XmlElement.java +6 -6
- data/ext/java/nokogiri/XmlNode.java +29 -9
- data/ext/java/nokogiri/XmlNodeSet.java +258 -77
- data/ext/java/nokogiri/XmlXpathContext.java +10 -12
- data/ext/java/nokogiri/internals/NokogiriHelpers.java +25 -23
- data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +5 -5
- data/ext/java/nokogiri/internals/XalanDTMManagerPatch.java +11 -10
- data/ext/java/{org/apache/xml/dtm/ref/dom2dtm/DOM2DTMExt.java → nokogiri/internals/dom2dtm/DOM2DTM.java} +3 -7
- data/ext/java/nokogiri/internals/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.java +685 -0
- data/ext/nokogiri/extconf.rb +10 -6
- data/ext/nokogiri/xml_attr.c +26 -21
- data/ext/nokogiri/xml_document.c +4 -1
- data/ext/nokogiri/xml_namespace.c +3 -3
- data/ext/nokogiri/xml_namespace.h +1 -2
- data/ext/nokogiri/xml_node.c +55 -15
- data/lib/nokogiri/css/parser.rb +61 -61
- data/lib/nokogiri/nokogiri.jar +0 -0
- data/lib/nokogiri/version.rb +1 -1
- data/lib/nokogiri/xml/document_fragment.rb +11 -0
- data/lib/nokogiri/xml/node.rb +12 -0
- data/lib/nokogiri/xml/node_set.rb +4 -8
- data/lib/xercesImpl.jar +0 -0
- metadata +17 -152
- data/.autotest +0 -22
- data/.cross_rubies +0 -8
- data/.editorconfig +0 -17
- data/.gemtest +0 -0
- data/.travis.yml +0 -63
- data/CHANGELOG.md +0 -1368
- data/CONTRIBUTING.md +0 -42
- data/C_CODING_STYLE.rdoc +0 -33
- data/Gemfile +0 -23
- data/Gemfile-libxml-ruby +0 -3
- data/Manifest.txt +0 -370
- data/ROADMAP.md +0 -111
- data/Rakefile +0 -348
- data/SECURITY.md +0 -19
- data/STANDARD_RESPONSES.md +0 -47
- data/Y_U_NO_GEMSPEC.md +0 -155
- data/appveyor.yml +0 -29
- data/build_all +0 -44
- data/patches/sort-patches-by-date +0 -25
- data/suppressions/README.txt +0 -1
- data/suppressions/nokogiri_ruby-2.supp +0 -10
- data/tasks/test.rb +0 -100
- data/test/css/test_nthiness.rb +0 -226
- data/test/css/test_parser.rb +0 -386
- data/test/css/test_tokenizer.rb +0 -215
- data/test/css/test_xpath_visitor.rb +0 -96
- data/test/decorators/test_slop.rb +0 -23
- data/test/files/2ch.html +0 -108
- data/test/files/GH_1042.html +0 -18
- data/test/files/address_book.rlx +0 -12
- data/test/files/address_book.xml +0 -10
- data/test/files/atom.xml +0 -344
- data/test/files/bar/bar.xsd +0 -4
- data/test/files/bogus.xml +0 -0
- data/test/files/dont_hurt_em_why.xml +0 -422
- data/test/files/encoding.html +0 -82
- data/test/files/encoding.xhtml +0 -84
- data/test/files/exslt.xml +0 -8
- data/test/files/exslt.xslt +0 -35
- data/test/files/foo/foo.xsd +0 -4
- data/test/files/metacharset.html +0 -10
- data/test/files/namespace_pressure_test.xml +0 -1684
- data/test/files/noencoding.html +0 -47
- data/test/files/po.xml +0 -32
- data/test/files/po.xsd +0 -66
- data/test/files/saml/saml20assertion_schema.xsd +0 -283
- data/test/files/saml/saml20protocol_schema.xsd +0 -302
- data/test/files/saml/xenc_schema.xsd +0 -146
- data/test/files/saml/xmldsig_schema.xsd +0 -318
- data/test/files/shift_jis.html +0 -10
- data/test/files/shift_jis.xml +0 -5
- data/test/files/shift_jis_no_charset.html +0 -9
- data/test/files/slow-xpath.xml +0 -25509
- data/test/files/snuggles.xml +0 -3
- data/test/files/staff.dtd +0 -10
- data/test/files/staff.xml +0 -59
- data/test/files/staff.xslt +0 -32
- data/test/files/test_document_url/bar.xml +0 -2
- data/test/files/test_document_url/document.dtd +0 -4
- data/test/files/test_document_url/document.xml +0 -6
- data/test/files/tlm.html +0 -851
- data/test/files/to_be_xincluded.xml +0 -2
- data/test/files/valid_bar.xml +0 -2
- data/test/files/xinclude.xml +0 -4
- data/test/helper.rb +0 -271
- data/test/html/sax/test_parser.rb +0 -168
- data/test/html/sax/test_parser_context.rb +0 -46
- data/test/html/sax/test_parser_text.rb +0 -163
- data/test/html/sax/test_push_parser.rb +0 -87
- data/test/html/test_attributes.rb +0 -85
- data/test/html/test_builder.rb +0 -164
- data/test/html/test_document.rb +0 -712
- data/test/html/test_document_encoding.rb +0 -143
- data/test/html/test_document_fragment.rb +0 -310
- data/test/html/test_element_description.rb +0 -105
- data/test/html/test_named_characters.rb +0 -14
- data/test/html/test_node.rb +0 -212
- data/test/html/test_node_encoding.rb +0 -91
- data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
- data/test/namespaces/test_namespaces_aliased_default.rb +0 -24
- data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
- data/test/namespaces/test_namespaces_in_cloned_doc.rb +0 -31
- data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
- data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -80
- data/test/namespaces/test_namespaces_preservation.rb +0 -31
- data/test/test_convert_xpath.rb +0 -135
- data/test/test_css_cache.rb +0 -47
- data/test/test_encoding_handler.rb +0 -48
- data/test/test_memory_leak.rb +0 -156
- data/test/test_nokogiri.rb +0 -138
- data/test/test_soap4r_sax.rb +0 -52
- data/test/test_xslt_transforms.rb +0 -314
- data/test/xml/node/test_save_options.rb +0 -28
- data/test/xml/node/test_subclass.rb +0 -44
- data/test/xml/sax/test_parser.rb +0 -402
- data/test/xml/sax/test_parser_context.rb +0 -115
- data/test/xml/sax/test_parser_text.rb +0 -202
- data/test/xml/sax/test_push_parser.rb +0 -265
- data/test/xml/test_attr.rb +0 -74
- data/test/xml/test_attribute_decl.rb +0 -86
- data/test/xml/test_builder.rb +0 -341
- data/test/xml/test_c14n.rb +0 -180
- data/test/xml/test_cdata.rb +0 -54
- data/test/xml/test_comment.rb +0 -40
- data/test/xml/test_document.rb +0 -982
- data/test/xml/test_document_encoding.rb +0 -31
- data/test/xml/test_document_fragment.rb +0 -298
- data/test/xml/test_dtd.rb +0 -187
- data/test/xml/test_dtd_encoding.rb +0 -31
- data/test/xml/test_element_content.rb +0 -56
- data/test/xml/test_element_decl.rb +0 -73
- data/test/xml/test_entity_decl.rb +0 -122
- data/test/xml/test_entity_reference.rb +0 -262
- data/test/xml/test_namespace.rb +0 -96
- data/test/xml/test_node.rb +0 -1325
- data/test/xml/test_node_attributes.rb +0 -115
- data/test/xml/test_node_encoding.rb +0 -75
- data/test/xml/test_node_inheritance.rb +0 -32
- data/test/xml/test_node_reparenting.rb +0 -592
- data/test/xml/test_node_set.rb +0 -809
- data/test/xml/test_parse_options.rb +0 -64
- data/test/xml/test_processing_instruction.rb +0 -30
- data/test/xml/test_reader.rb +0 -620
- data/test/xml/test_reader_encoding.rb +0 -134
- data/test/xml/test_relax_ng.rb +0 -60
- data/test/xml/test_schema.rb +0 -142
- data/test/xml/test_syntax_error.rb +0 -36
- data/test/xml/test_text.rb +0 -60
- data/test/xml/test_unparented_node.rb +0 -483
- data/test/xml/test_xinclude.rb +0 -83
- data/test/xml/test_xpath.rb +0 -470
- data/test/xslt/test_custom_functions.rb +0 -133
- data/test/xslt/test_exception_handling.rb +0 -37
@@ -1,48 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require "helper"
|
4
|
-
|
5
|
-
class TestEncodingHandler < Nokogiri::TestCase
|
6
|
-
def teardown
|
7
|
-
Nokogiri::EncodingHandler.clear_aliases!
|
8
|
-
#Replace default aliases removed by clear_aliases!
|
9
|
-
Nokogiri.install_default_aliases
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_get
|
13
|
-
assert_not_nil Nokogiri::EncodingHandler['UTF-8']
|
14
|
-
assert_nil Nokogiri::EncodingHandler['alsdkjfhaldskjfh']
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_name
|
18
|
-
eh = Nokogiri::EncodingHandler['UTF-8']
|
19
|
-
assert_equal "UTF-8", eh.name
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_alias
|
23
|
-
Nokogiri::EncodingHandler.alias('UTF-8', 'UTF-18')
|
24
|
-
assert_equal 'UTF-8', Nokogiri::EncodingHandler['UTF-18'].name
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_cleanup_aliases
|
28
|
-
assert_nil Nokogiri::EncodingHandler['UTF-9']
|
29
|
-
Nokogiri::EncodingHandler.alias('UTF-8', 'UTF-9')
|
30
|
-
assert_not_nil Nokogiri::EncodingHandler['UTF-9']
|
31
|
-
|
32
|
-
Nokogiri::EncodingHandler.clear_aliases!
|
33
|
-
assert_nil Nokogiri::EncodingHandler['UTF-9']
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_delete
|
37
|
-
assert_nil Nokogiri::EncodingHandler['UTF-9']
|
38
|
-
Nokogiri::EncodingHandler.alias('UTF-8', 'UTF-9')
|
39
|
-
assert_not_nil Nokogiri::EncodingHandler['UTF-9']
|
40
|
-
|
41
|
-
Nokogiri::EncodingHandler.delete 'UTF-9'
|
42
|
-
assert_nil Nokogiri::EncodingHandler['UTF-9']
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_delete_non_existent
|
46
|
-
assert_nil Nokogiri::EncodingHandler.delete('UTF-9')
|
47
|
-
end
|
48
|
-
end
|
data/test/test_memory_leak.rb
DELETED
@@ -1,156 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
class TestMemoryLeak < Nokogiri::TestCase
|
4
|
-
def setup
|
5
|
-
super
|
6
|
-
@str = <<EOF
|
7
|
-
<!DOCTYPE HTML>
|
8
|
-
<html>
|
9
|
-
<body>
|
10
|
-
<br />
|
11
|
-
</body>
|
12
|
-
</html>
|
13
|
-
EOF
|
14
|
-
end
|
15
|
-
|
16
|
-
if ENV['NOKOGIRI_GC'] # turning these off by default for now
|
17
|
-
def test_dont_hurt_em_why
|
18
|
-
content = File.open("#{File.dirname(__FILE__)}/files/dont_hurt_em_why.xml").read
|
19
|
-
ndoc = Nokogiri::XML(content)
|
20
|
-
2.times do
|
21
|
-
ndoc.search('status text').first.inner_text
|
22
|
-
ndoc.search('user name').first.inner_text
|
23
|
-
GC.start
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class BadIO
|
28
|
-
def read(*args)
|
29
|
-
raise 'hell'
|
30
|
-
end
|
31
|
-
|
32
|
-
def write(*args)
|
33
|
-
raise 'chickens'
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_for_mem_leak_on_io_callbacks
|
38
|
-
io = File.open SNUGGLES_FILE
|
39
|
-
Nokogiri::XML.parse(io)
|
40
|
-
|
41
|
-
loop do
|
42
|
-
Nokogiri::XML.parse(BadIO.new) rescue nil
|
43
|
-
doc.write BadIO.new rescue nil
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_for_memory_leak
|
48
|
-
begin
|
49
|
-
# we don't use Dike in any tests, but requiring it has side effects
|
50
|
-
# that can create memory leaks, and that's what we're testing for.
|
51
|
-
require 'rubygems'
|
52
|
-
require 'dike' # do not remove!
|
53
|
-
|
54
|
-
count_start = count_object_space_documents
|
55
|
-
xml_data = <<-EOS
|
56
|
-
<test>
|
57
|
-
<items>
|
58
|
-
<item>abc</item>
|
59
|
-
<item>1234</item>
|
60
|
-
<item>Zzz</item>
|
61
|
-
<items>
|
62
|
-
</test>
|
63
|
-
EOS
|
64
|
-
20.times do
|
65
|
-
doc = Nokogiri::XML(xml_data)
|
66
|
-
doc.xpath("//item")
|
67
|
-
end
|
68
|
-
2.times { GC.start }
|
69
|
-
count_end = count_object_space_documents
|
70
|
-
assert((count_end - count_start) <= 2, "memory leak detected")
|
71
|
-
rescue LoadError
|
72
|
-
puts "\ndike is not installed, skipping memory leak test"
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def test_node_set_namespace_mem_leak
|
77
|
-
xml = Nokogiri::XML "<foo></foo>"
|
78
|
-
ctx = Nokogiri::XML::XPathContext.new(xml)
|
79
|
-
loop do
|
80
|
-
ctx.evaluate("//namespace::*")
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_leak_on_node_replace
|
85
|
-
loop do
|
86
|
-
doc = Nokogiri.XML("<root><foo /></root>")
|
87
|
-
n = Nokogiri::XML::CDATA.new(doc, "bar")
|
88
|
-
pivot = doc.root.children[0]
|
89
|
-
pivot.replace(n)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_sax_parser_context
|
94
|
-
io = StringIO.new(@str)
|
95
|
-
|
96
|
-
loop do
|
97
|
-
Nokogiri::XML::SAX::ParserContext.new(@str)
|
98
|
-
Nokogiri::XML::SAX::ParserContext.new(io)
|
99
|
-
io.rewind
|
100
|
-
|
101
|
-
Nokogiri::HTML::SAX::ParserContext.new(@str)
|
102
|
-
Nokogiri::HTML::SAX::ParserContext.new(io)
|
103
|
-
io.rewind
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
class JumpingSaxHandler < Nokogiri::XML::SAX::Document
|
108
|
-
def initialize(jumptag)
|
109
|
-
@jumptag = jumptag
|
110
|
-
super()
|
111
|
-
end
|
112
|
-
|
113
|
-
def start_element(name, attrs = [])
|
114
|
-
throw @jumptag
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_jumping_sax_handler
|
119
|
-
doc = JumpingSaxHandler.new(:foo)
|
120
|
-
|
121
|
-
loop do
|
122
|
-
catch(:foo) do
|
123
|
-
Nokogiri::HTML::SAX::Parser.new(doc).parse(@str)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
def test_in_context_parser_leak
|
129
|
-
loop do
|
130
|
-
doc = Nokogiri::XML::Document.new
|
131
|
-
fragment1 = Nokogiri::XML::DocumentFragment.new(doc, '<foo/>')
|
132
|
-
node = fragment1.children[0]
|
133
|
-
node.parse('<bar></bar>')
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
def test_in_context_parser_leak_ii
|
138
|
-
loop { Nokogiri::XML('<a/>').root.parse('<b/>') }
|
139
|
-
end
|
140
|
-
|
141
|
-
def test_leak_on_xpath_string_function
|
142
|
-
doc = Nokogiri::XML(@str)
|
143
|
-
loop do
|
144
|
-
doc.xpath('name(//node())')
|
145
|
-
end
|
146
|
-
end
|
147
|
-
end # if NOKOGIRI_GC
|
148
|
-
|
149
|
-
private
|
150
|
-
|
151
|
-
def count_object_space_documents
|
152
|
-
count = 0
|
153
|
-
ObjectSpace.each_object {|j| count += 1 if j.is_a?(Nokogiri::XML::Document) }
|
154
|
-
count
|
155
|
-
end
|
156
|
-
end
|
data/test/test_nokogiri.rb
DELETED
@@ -1,138 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
class TestNokogiri < Nokogiri::TestCase
|
4
|
-
def test_versions
|
5
|
-
version_match = /\d+\.\d+\.\d+/
|
6
|
-
assert_match version_match, Nokogiri::VERSION
|
7
|
-
|
8
|
-
assert_equal Nokogiri::VERSION_INFO['ruby']['version'], ::RUBY_VERSION
|
9
|
-
assert_equal Nokogiri::VERSION_INFO['ruby']['platform'], ::RUBY_PLATFORM
|
10
|
-
|
11
|
-
if Nokogiri.uses_libxml?
|
12
|
-
assert_match version_match, Nokogiri::LIBXML_VERSION
|
13
|
-
assert_equal 'extension', Nokogiri::VERSION_INFO['libxml']['binding']
|
14
|
-
|
15
|
-
assert_match version_match, Nokogiri::VERSION_INFO['libxml']['compiled']
|
16
|
-
assert_equal Nokogiri::LIBXML_VERSION, Nokogiri::VERSION_INFO['libxml']['compiled']
|
17
|
-
|
18
|
-
assert_match version_match, Nokogiri::VERSION_INFO['libxml']['loaded']
|
19
|
-
Nokogiri::LIBXML_PARSER_VERSION =~ /(\d)(\d{2})(\d{2})/
|
20
|
-
major = $1.to_i
|
21
|
-
minor = $2.to_i
|
22
|
-
bug = $3.to_i
|
23
|
-
assert_equal "#{major}.#{minor}.#{bug}", Nokogiri::VERSION_INFO['libxml']['loaded']
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_libxml_iconv
|
28
|
-
assert Nokogiri.const_defined?(:LIBXML_ICONV_ENABLED) if Nokogiri.uses_libxml?
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_parse_with_io
|
32
|
-
doc = Nokogiri.parse(
|
33
|
-
StringIO.new("<html><head><title></title><body></body></html>")
|
34
|
-
)
|
35
|
-
assert_instance_of Nokogiri::HTML::Document, doc
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_xml?
|
39
|
-
doc = Nokogiri.parse(File.read(XML_FILE))
|
40
|
-
assert doc.xml?
|
41
|
-
assert !doc.html?
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_atom_is_xml?
|
45
|
-
doc = Nokogiri.parse(File.read(XML_ATOM_FILE))
|
46
|
-
assert doc.xml?
|
47
|
-
assert !doc.html?
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_html?
|
51
|
-
doc = Nokogiri.parse(File.read(HTML_FILE))
|
52
|
-
assert !doc.xml?
|
53
|
-
assert doc.html?
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_nokogiri_method_with_html
|
57
|
-
doc1 = Nokogiri(File.read(HTML_FILE))
|
58
|
-
doc2 = Nokogiri.parse(File.read(HTML_FILE))
|
59
|
-
assert_equal doc1.serialize, doc2.serialize
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_nokogiri_method_with_block
|
63
|
-
doc = Nokogiri { b "bold tag" }
|
64
|
-
assert_equal('<b>bold tag</b>', doc.to_html.chomp)
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_make_with_html
|
68
|
-
doc = Nokogiri.make("<b>bold tag</b>")
|
69
|
-
assert_equal('<b>bold tag</b>', doc.to_html.chomp)
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_make_with_block
|
73
|
-
doc = Nokogiri.make { b "bold tag" }
|
74
|
-
assert_equal('<b>bold tag</b>', doc.to_html.chomp)
|
75
|
-
end
|
76
|
-
|
77
|
-
SLOP_HTML = <<-END
|
78
|
-
<html>
|
79
|
-
<body>
|
80
|
-
<ul>
|
81
|
-
<li class='red'>one</li>
|
82
|
-
<li class='blue'>two</li>
|
83
|
-
</ul>
|
84
|
-
<div>
|
85
|
-
one
|
86
|
-
<div>div two</div>
|
87
|
-
</div>
|
88
|
-
</body>
|
89
|
-
</html>
|
90
|
-
END
|
91
|
-
|
92
|
-
def test_slop_css
|
93
|
-
doc = Nokogiri::Slop(<<-eohtml)
|
94
|
-
<html>
|
95
|
-
<body>
|
96
|
-
<div>
|
97
|
-
one
|
98
|
-
<div class='foo'>
|
99
|
-
div two
|
100
|
-
<div class='foo'>
|
101
|
-
div three
|
102
|
-
</div>
|
103
|
-
</div>
|
104
|
-
</div>
|
105
|
-
</body>
|
106
|
-
</html>
|
107
|
-
eohtml
|
108
|
-
assert_equal "div", doc.html.body.div.div('.foo').name
|
109
|
-
end
|
110
|
-
|
111
|
-
def test_slop
|
112
|
-
doc = Nokogiri::Slop(SLOP_HTML)
|
113
|
-
|
114
|
-
assert_equal "one", doc.html.body.ul.li.first.text
|
115
|
-
assert_equal "two", doc.html.body.ul.li(".blue").text
|
116
|
-
assert_equal "div two", doc.html.body.div.div.text
|
117
|
-
|
118
|
-
assert_equal "two", doc.html.body.ul.li(:css => ".blue").text
|
119
|
-
|
120
|
-
assert_equal "two", doc.html.body.ul.li(:xpath => "position()=2").text
|
121
|
-
assert_equal "one", doc.html.body.ul.li(:xpath => ["contains(text(),'o')"]).first.text
|
122
|
-
assert_equal "two", doc.html.body.ul.li(:xpath => ["contains(text(),'o')","contains(text(),'t')"]).text
|
123
|
-
|
124
|
-
assert_raise(NoMethodError) { doc.nonexistent }
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_slop_decorator
|
128
|
-
doc = Nokogiri(SLOP_HTML)
|
129
|
-
assert !doc.decorators(Nokogiri::XML::Node).include?(Nokogiri::Decorators::Slop)
|
130
|
-
|
131
|
-
doc.slop!
|
132
|
-
assert doc.decorators(Nokogiri::XML::Node).include?(Nokogiri::Decorators::Slop)
|
133
|
-
|
134
|
-
doc.slop!
|
135
|
-
assert_equal 1, doc.decorators(Nokogiri::XML::Node).select { |d| d == Nokogiri::Decorators::Slop }.size
|
136
|
-
end
|
137
|
-
|
138
|
-
end
|
data/test/test_soap4r_sax.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module XSD
|
4
|
-
module XMLParser
|
5
|
-
class Parser
|
6
|
-
@factory_added = nil
|
7
|
-
|
8
|
-
class << self; attr_reader :factory_added; end
|
9
|
-
|
10
|
-
def self.add_factory o
|
11
|
-
@factory_added = o
|
12
|
-
end
|
13
|
-
|
14
|
-
def initialize *args
|
15
|
-
@charset = nil
|
16
|
-
end
|
17
|
-
|
18
|
-
def characters foo
|
19
|
-
end
|
20
|
-
|
21
|
-
def start_element *args
|
22
|
-
end
|
23
|
-
|
24
|
-
def end_element *args
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
require 'xsd/xmlparser/nokogiri'
|
31
|
-
|
32
|
-
class TestSoap4rSax < Nokogiri::TestCase
|
33
|
-
def test_factory_added
|
34
|
-
assert_equal XSD::XMLParser::Nokogiri, XSD::XMLParser::Nokogiri.factory_added
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_parse
|
38
|
-
o = Class.new(::XSD::XMLParser::Nokogiri) do
|
39
|
-
attr_accessor :element_started
|
40
|
-
def initialize *args
|
41
|
-
super
|
42
|
-
@element_started = false
|
43
|
-
end
|
44
|
-
|
45
|
-
def start_element *args
|
46
|
-
@element_started = true
|
47
|
-
end
|
48
|
-
end.new 'foo'
|
49
|
-
o.do_parse '<?xml version="1.0" ?><root xmlns="http://example.com/"/>'
|
50
|
-
assert o.element_started, 'element started'
|
51
|
-
end
|
52
|
-
end
|
@@ -1,314 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
class TestXsltTransforms < Nokogiri::TestCase
|
4
|
-
def setup
|
5
|
-
@doc = Nokogiri::XML(File.open(XML_FILE))
|
6
|
-
end
|
7
|
-
|
8
|
-
def test_class_methods
|
9
|
-
style = Nokogiri::XSLT(File.read(XSLT_FILE))
|
10
|
-
|
11
|
-
assert result = style.apply_to(@doc, ['title', '"Grandma"'])
|
12
|
-
assert_match %r{<h1>Grandma</h1>}, result
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_transform
|
16
|
-
assert style = Nokogiri::XSLT.parse(File.read(XSLT_FILE))
|
17
|
-
|
18
|
-
assert result = style.apply_to(@doc, ['title', '"Booyah"'])
|
19
|
-
assert_match %r{<h1>Booyah</h1>}, result
|
20
|
-
assert_match %r{<th.*Employee ID</th>}, result
|
21
|
-
assert_match %r{<th.*Name</th>}, result
|
22
|
-
assert_match %r{<th.*Position</th>}, result
|
23
|
-
assert_match %r{<th.*Salary</th>}, result
|
24
|
-
assert_match %r{<td>EMP0003</td>}, result
|
25
|
-
assert_match %r{<td>Margaret Martin</td>}, result
|
26
|
-
assert_match %r{<td>Computer Specialist</td>}, result
|
27
|
-
assert_match %r{<td>100,000</td>}, result
|
28
|
-
assert_no_match %r{Dallas|Texas}, result
|
29
|
-
assert_no_match %r{Female}, result
|
30
|
-
|
31
|
-
assert result = style.apply_to(@doc, ['title', '"Grandma"'])
|
32
|
-
assert_match %r{<h1>Grandma</h1>}, result
|
33
|
-
|
34
|
-
assert result = style.apply_to(@doc)
|
35
|
-
assert_match %r{<h1></h1>|<h1/>}, result
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_xml_declaration
|
39
|
-
input_xml = <<-EOS
|
40
|
-
<?xml version="1.0" encoding="utf-8"?>
|
41
|
-
<report>
|
42
|
-
<title>My Report</title>
|
43
|
-
</report>
|
44
|
-
EOS
|
45
|
-
|
46
|
-
input_xsl = <<-EOS
|
47
|
-
<?xml version="1.0" encoding="utf-8"?>
|
48
|
-
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
49
|
-
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
|
50
|
-
<xsl:template match="/">
|
51
|
-
<html>
|
52
|
-
<head>
|
53
|
-
<title><xsl:value-of select="report/title"/></title>
|
54
|
-
</head>
|
55
|
-
<body>
|
56
|
-
<h1><xsl:value-of select="report/title"/></h1>
|
57
|
-
</body>
|
58
|
-
</html>
|
59
|
-
</xsl:template>
|
60
|
-
</xsl:stylesheet>
|
61
|
-
EOS
|
62
|
-
|
63
|
-
require 'nokogiri'
|
64
|
-
|
65
|
-
xml = ::Nokogiri::XML(input_xml)
|
66
|
-
xsl = ::Nokogiri::XSLT(input_xsl)
|
67
|
-
|
68
|
-
assert_includes xsl.apply_to(xml), '<?xml version="1.0" encoding="utf-8"?>'
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_transform_with_output_style
|
72
|
-
xslt = ""
|
73
|
-
if Nokogiri.jruby?
|
74
|
-
xslt = Nokogiri::XSLT(<<-eoxslt)
|
75
|
-
<?xml version="1.0" encoding="ISO-8859-1"?>
|
76
|
-
|
77
|
-
<xsl:stylesheet version="1.0"
|
78
|
-
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
79
|
-
<xsl:output method="text" version="1.0"
|
80
|
-
encoding="iso-8859-1" indent="yes"/>
|
81
|
-
|
82
|
-
<xsl:param name="title"/>
|
83
|
-
|
84
|
-
<xsl:template match="/">
|
85
|
-
<html>
|
86
|
-
<body>
|
87
|
-
<xsl:for-each select="staff/employee">
|
88
|
-
<tr>
|
89
|
-
<td><xsl:value-of select="employeeId"/></td>
|
90
|
-
<td><xsl:value-of select="name"/></td>
|
91
|
-
<td><xsl:value-of select="position"/></td>
|
92
|
-
<td><xsl:value-of select="salary"/></td>
|
93
|
-
</tr>
|
94
|
-
</xsl:for-each>
|
95
|
-
</body>
|
96
|
-
</html>
|
97
|
-
</xsl:template>
|
98
|
-
|
99
|
-
</xsl:stylesheet>
|
100
|
-
eoxslt
|
101
|
-
else
|
102
|
-
xslt = Nokogiri::XSLT(<<-eoxslt)
|
103
|
-
<?xml version="1.0" encoding="ISO-8859-1"?>
|
104
|
-
|
105
|
-
<xsl:stylesheet version="1.0"
|
106
|
-
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
107
|
-
<xsl:output method="text" version="1.0"
|
108
|
-
encoding="iso-8859-1" indent="yes"/>
|
109
|
-
|
110
|
-
<xsl:param name="title"/>
|
111
|
-
|
112
|
-
<xsl:template match="/">
|
113
|
-
<html>
|
114
|
-
<body>
|
115
|
-
<xsl:for-each select="staff/employee">
|
116
|
-
<tr>
|
117
|
-
<td><xsl:value-of select="employeeId"/></td>
|
118
|
-
<td><xsl:value-of select="name"/></td>
|
119
|
-
<td><xsl:value-of select="position"/></td>
|
120
|
-
<td><xsl:value-of select="salary"/></td>
|
121
|
-
</tr>
|
122
|
-
</xsl:for-each>
|
123
|
-
</table>
|
124
|
-
</body>
|
125
|
-
</html>
|
126
|
-
</xsl:template>
|
127
|
-
|
128
|
-
</xsl:stylesheet>
|
129
|
-
eoxslt
|
130
|
-
end
|
131
|
-
result = xslt.apply_to(@doc, ['title', 'foo'])
|
132
|
-
assert_no_match(/<td>/, result)
|
133
|
-
assert_match(/This is an adjacent/, result)
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_transform_arg_error
|
137
|
-
assert style = Nokogiri::XSLT(File.read(XSLT_FILE))
|
138
|
-
assert_raises(TypeError) do
|
139
|
-
style.transform(@doc, :foo)
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
def test_transform_with_hash
|
144
|
-
assert style = Nokogiri::XSLT(File.read(XSLT_FILE))
|
145
|
-
result = style.transform(@doc, {'title' => '"Booyah"'})
|
146
|
-
assert result.html?
|
147
|
-
assert_equal "Booyah", result.at_css("h1").content
|
148
|
-
end
|
149
|
-
|
150
|
-
def test_transform2
|
151
|
-
assert style = Nokogiri::XSLT(File.open(XSLT_FILE))
|
152
|
-
assert result_doc = style.transform(@doc)
|
153
|
-
assert result_doc.html?
|
154
|
-
assert_equal "", result_doc.at_css("h1").content
|
155
|
-
|
156
|
-
assert style = Nokogiri::XSLT(File.read(XSLT_FILE))
|
157
|
-
assert result_doc = style.transform(@doc, ['title', '"Booyah"'])
|
158
|
-
assert result_doc.html?
|
159
|
-
assert_equal "Booyah", result_doc.at_css("h1").content
|
160
|
-
|
161
|
-
assert result_string = style.apply_to(@doc, ['title', '"Booyah"'])
|
162
|
-
assert_equal result_string, style.serialize(result_doc)
|
163
|
-
end
|
164
|
-
|
165
|
-
def test_transform_with_quote_params
|
166
|
-
assert style = Nokogiri::XSLT(File.open(XSLT_FILE))
|
167
|
-
assert result_doc = style.transform(@doc, Nokogiri::XSLT.quote_params(['title', 'Booyah']))
|
168
|
-
assert result_doc.html?
|
169
|
-
assert_equal "Booyah", result_doc.at_css("h1").content
|
170
|
-
|
171
|
-
assert style = Nokogiri::XSLT.parse(File.read(XSLT_FILE))
|
172
|
-
assert result_doc = style.transform(@doc, Nokogiri::XSLT.quote_params({'title' => 'Booyah'}))
|
173
|
-
assert result_doc.html?
|
174
|
-
assert_equal "Booyah", result_doc.at_css("h1").content
|
175
|
-
end
|
176
|
-
|
177
|
-
def test_quote_params
|
178
|
-
h = {
|
179
|
-
:sym => %{xxx},
|
180
|
-
'str' => %{"xxx"},
|
181
|
-
:sym2 => %{'xxx'},
|
182
|
-
'str2' => %{x'x'x},
|
183
|
-
:sym3 => %{x"x"x},
|
184
|
-
}
|
185
|
-
hh=h.dup
|
186
|
-
result_hash = Nokogiri::XSLT.quote_params(h)
|
187
|
-
assert_equal hh, h # non-destructive
|
188
|
-
|
189
|
-
a=h.to_a.flatten
|
190
|
-
result_array = Nokogiri::XSLT.quote_params(a)
|
191
|
-
assert_equal h.to_a.flatten, a #non-destructive
|
192
|
-
|
193
|
-
assert_equal result_array, result_hash
|
194
|
-
end
|
195
|
-
|
196
|
-
if Nokogiri.uses_libxml?
|
197
|
-
# By now, cannot get it working on JRuby, see:
|
198
|
-
# http://yokolet.blogspot.com/2010/10/pure-java-nokogiri-xslt-extension.html
|
199
|
-
def test_exslt
|
200
|
-
assert doc = Nokogiri::XML.parse(File.read(EXML_FILE))
|
201
|
-
assert doc.xml?
|
202
|
-
|
203
|
-
assert style = Nokogiri::XSLT.parse(File.read(EXSLT_FILE))
|
204
|
-
params = {
|
205
|
-
:p1 => 'xxx',
|
206
|
-
:p2 => "x'x'x",
|
207
|
-
:p3 => 'x"x"x',
|
208
|
-
:p4 => '"xxx"'
|
209
|
-
}
|
210
|
-
result_doc = Nokogiri::XML.parse(style.apply_to(doc,
|
211
|
-
Nokogiri::XSLT.quote_params(params)))
|
212
|
-
|
213
|
-
assert_equal 'func-result', result_doc.at('/root/function').content
|
214
|
-
assert_equal 3, result_doc.at('/root/max').content.to_i
|
215
|
-
assert_match(
|
216
|
-
/\d{4}-\d\d-\d\d([-|+]\d\d:\d\d)?/,
|
217
|
-
result_doc.at('/root/date').content
|
218
|
-
)
|
219
|
-
result_doc.xpath('/root/params/*').each do |p|
|
220
|
-
assert_equal p.content, params[p.name.intern]
|
221
|
-
end
|
222
|
-
check_params result_doc, params
|
223
|
-
result_doc = Nokogiri::XML.parse(style.apply_to(doc,
|
224
|
-
Nokogiri::XSLT.quote_params(params.to_a.flatten)))
|
225
|
-
check_params result_doc, params
|
226
|
-
end
|
227
|
-
|
228
|
-
def test_xslt_paramaters
|
229
|
-
xslt_str = <<-EOX
|
230
|
-
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
|
231
|
-
<xsl:template match="/">
|
232
|
-
<xsl:value-of select="$foo" />
|
233
|
-
</xsl:template>
|
234
|
-
</xsl:stylesheet>
|
235
|
-
EOX
|
236
|
-
|
237
|
-
xslt = Nokogiri::XSLT(xslt_str)
|
238
|
-
doc = Nokogiri::XML("<root />")
|
239
|
-
assert_match %r{bar}, xslt.transform(doc, Nokogiri::XSLT.quote_params('foo' => 'bar')).to_s
|
240
|
-
end
|
241
|
-
|
242
|
-
def test_xslt_transform_error
|
243
|
-
xslt_str = <<-EOX
|
244
|
-
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
|
245
|
-
<xsl:template match="/">
|
246
|
-
<xsl:value-of select="$foo" />
|
247
|
-
</xsl:template>
|
248
|
-
</xsl:stylesheet>
|
249
|
-
EOX
|
250
|
-
|
251
|
-
xslt = Nokogiri::XSLT(xslt_str)
|
252
|
-
doc = Nokogiri::XML("<root />")
|
253
|
-
assert_raises(RuntimeError) { xslt.transform(doc) }
|
254
|
-
end
|
255
|
-
end
|
256
|
-
|
257
|
-
|
258
|
-
def test_xslt_parse_error
|
259
|
-
xslt_str = <<-EOX
|
260
|
-
<xsl:stylesheet version="1.0"
|
261
|
-
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
262
|
-
<!-- Not well-formed: -->
|
263
|
-
<xsl:template match="/"/>
|
264
|
-
<values>
|
265
|
-
<xsl:for-each select="//*">
|
266
|
-
<value>
|
267
|
-
<xsl:value-of select="@id"/>
|
268
|
-
</value>
|
269
|
-
</xsl:for-each>
|
270
|
-
</values>
|
271
|
-
</xsl:template>
|
272
|
-
</xsl:stylesheet>}
|
273
|
-
EOX
|
274
|
-
assert_raises(RuntimeError) { Nokogiri::XSLT.parse(xslt_str) }
|
275
|
-
end
|
276
|
-
|
277
|
-
|
278
|
-
def test_passing_a_non_document_to_transform
|
279
|
-
xsl = Nokogiri::XSLT('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"></xsl:stylesheet>')
|
280
|
-
assert_raises(ArgumentError) { xsl.transform("<div></div>") }
|
281
|
-
assert_raises(ArgumentError) { xsl.transform(Nokogiri::HTML("").css("body")) }
|
282
|
-
end
|
283
|
-
|
284
|
-
def check_params result_doc, params
|
285
|
-
result_doc.xpath('/root/params/*').each do |p|
|
286
|
-
assert_equal p.content, params[p.name.intern]
|
287
|
-
end
|
288
|
-
end
|
289
|
-
|
290
|
-
def test_non_html_xslt_transform
|
291
|
-
xml = Nokogiri.XML(<<-EOXML)
|
292
|
-
<a>
|
293
|
-
<b>
|
294
|
-
<c>123</c>
|
295
|
-
</b>
|
296
|
-
</a>
|
297
|
-
EOXML
|
298
|
-
|
299
|
-
xsl = Nokogiri.XSLT(<<-EOXSL)
|
300
|
-
<xsl:stylesheet version="1.0"
|
301
|
-
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
302
|
-
|
303
|
-
<xsl:output encoding="UTF-8" indent="yes" method="xml" />
|
304
|
-
|
305
|
-
<xsl:template match="/">
|
306
|
-
<a><xsl:value-of select="/a" /></a>
|
307
|
-
</xsl:template>
|
308
|
-
</xsl:stylesheet>
|
309
|
-
EOXSL
|
310
|
-
|
311
|
-
result = xsl.transform xml
|
312
|
-
assert !result.html?
|
313
|
-
end
|
314
|
-
end
|