nokogiri 1.5.10 → 1.13.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of nokogiri might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/Gemfile +5 -0
- data/LICENSE-DEPENDENCIES.md +1903 -0
- data/LICENSE.md +9 -0
- data/README.md +280 -0
- data/bin/nokogiri +84 -31
- data/dependencies.yml +73 -0
- data/ext/nokogiri/depend +38 -358
- data/ext/nokogiri/extconf.rb +956 -100
- data/ext/nokogiri/gumbo.c +584 -0
- data/ext/nokogiri/html4_document.c +166 -0
- data/ext/nokogiri/html4_element_description.c +294 -0
- data/ext/nokogiri/html4_entity_lookup.c +37 -0
- data/ext/nokogiri/html4_sax_parser_context.c +120 -0
- data/ext/nokogiri/html4_sax_push_parser.c +95 -0
- data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
- data/ext/nokogiri/nokogiri.c +232 -87
- data/ext/nokogiri/nokogiri.h +188 -129
- data/ext/nokogiri/test_global_handlers.c +40 -0
- data/ext/nokogiri/xml_attr.c +49 -40
- data/ext/nokogiri/xml_attribute_decl.c +18 -18
- data/ext/nokogiri/xml_cdata.c +24 -23
- data/ext/nokogiri/xml_comment.c +29 -21
- data/ext/nokogiri/xml_document.c +327 -223
- data/ext/nokogiri/xml_document_fragment.c +12 -16
- data/ext/nokogiri/xml_dtd.c +56 -50
- data/ext/nokogiri/xml_element_content.c +31 -26
- data/ext/nokogiri/xml_element_decl.c +22 -22
- data/ext/nokogiri/xml_encoding_handler.c +45 -20
- data/ext/nokogiri/xml_entity_decl.c +32 -30
- data/ext/nokogiri/xml_entity_reference.c +16 -18
- data/ext/nokogiri/xml_namespace.c +74 -32
- data/ext/nokogiri/xml_node.c +1290 -680
- data/ext/nokogiri/xml_node_set.c +239 -208
- data/ext/nokogiri/xml_processing_instruction.c +17 -19
- data/ext/nokogiri/xml_reader.c +227 -189
- data/ext/nokogiri/xml_relax_ng.c +52 -28
- data/ext/nokogiri/xml_sax_parser.c +123 -125
- data/ext/nokogiri/xml_sax_parser_context.c +138 -79
- data/ext/nokogiri/xml_sax_push_parser.c +88 -35
- data/ext/nokogiri/xml_schema.c +112 -33
- data/ext/nokogiri/xml_syntax_error.c +50 -23
- data/ext/nokogiri/xml_text.c +14 -18
- data/ext/nokogiri/xml_xpath_context.c +227 -140
- data/ext/nokogiri/xslt_stylesheet.c +162 -168
- data/gumbo-parser/CHANGES.md +63 -0
- data/gumbo-parser/Makefile +101 -0
- data/gumbo-parser/THANKS +27 -0
- data/gumbo-parser/src/Makefile +34 -0
- data/gumbo-parser/src/README.md +41 -0
- data/gumbo-parser/src/ascii.c +75 -0
- data/gumbo-parser/src/ascii.h +115 -0
- data/gumbo-parser/src/attribute.c +42 -0
- data/gumbo-parser/src/attribute.h +17 -0
- data/gumbo-parser/src/char_ref.c +22225 -0
- data/gumbo-parser/src/char_ref.h +29 -0
- data/gumbo-parser/src/char_ref.rl +2154 -0
- data/gumbo-parser/src/error.c +626 -0
- data/gumbo-parser/src/error.h +148 -0
- data/gumbo-parser/src/foreign_attrs.c +104 -0
- data/gumbo-parser/src/foreign_attrs.gperf +27 -0
- data/gumbo-parser/src/gumbo.h +943 -0
- data/gumbo-parser/src/insertion_mode.h +33 -0
- data/gumbo-parser/src/macros.h +91 -0
- data/gumbo-parser/src/parser.c +4875 -0
- data/gumbo-parser/src/parser.h +41 -0
- data/gumbo-parser/src/replacement.h +33 -0
- data/gumbo-parser/src/string_buffer.c +103 -0
- data/gumbo-parser/src/string_buffer.h +68 -0
- data/gumbo-parser/src/string_piece.c +48 -0
- data/gumbo-parser/src/svg_attrs.c +174 -0
- data/gumbo-parser/src/svg_attrs.gperf +77 -0
- data/gumbo-parser/src/svg_tags.c +137 -0
- data/gumbo-parser/src/svg_tags.gperf +55 -0
- data/gumbo-parser/src/tag.c +222 -0
- data/gumbo-parser/src/tag_lookup.c +382 -0
- data/gumbo-parser/src/tag_lookup.gperf +169 -0
- data/gumbo-parser/src/tag_lookup.h +13 -0
- data/gumbo-parser/src/token_buffer.c +79 -0
- data/gumbo-parser/src/token_buffer.h +71 -0
- data/gumbo-parser/src/token_type.h +17 -0
- data/gumbo-parser/src/tokenizer.c +3463 -0
- data/gumbo-parser/src/tokenizer.h +112 -0
- data/gumbo-parser/src/tokenizer_states.h +339 -0
- data/gumbo-parser/src/utf8.c +245 -0
- data/gumbo-parser/src/utf8.h +164 -0
- data/gumbo-parser/src/util.c +68 -0
- data/gumbo-parser/src/util.h +30 -0
- data/gumbo-parser/src/vector.c +111 -0
- data/gumbo-parser/src/vector.h +45 -0
- data/lib/nokogiri/class_resolver.rb +67 -0
- data/lib/nokogiri/css/node.rb +10 -58
- data/lib/nokogiri/css/parser.rb +327 -288
- data/lib/nokogiri/css/parser.y +67 -45
- data/lib/nokogiri/css/parser_extras.rb +52 -49
- data/lib/nokogiri/css/syntax_error.rb +3 -1
- data/lib/nokogiri/css/tokenizer.rb +107 -104
- data/lib/nokogiri/css/tokenizer.rex +7 -6
- data/lib/nokogiri/css/xpath_visitor.rb +263 -75
- data/lib/nokogiri/css.rb +50 -17
- data/lib/nokogiri/decorators/slop.rb +17 -8
- data/lib/nokogiri/extension.rb +31 -0
- data/lib/nokogiri/gumbo.rb +15 -0
- data/lib/nokogiri/html.rb +38 -27
- data/lib/nokogiri/{html → html4}/builder.rb +4 -2
- data/lib/nokogiri/html4/document.rb +331 -0
- data/lib/nokogiri/html4/document_fragment.rb +54 -0
- data/lib/nokogiri/{html → html4}/element_description.rb +3 -1
- data/lib/nokogiri/html4/element_description_defaults.rb +578 -0
- data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
- data/lib/nokogiri/{html → html4}/sax/parser.rb +24 -15
- data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
- data/lib/nokogiri/html4/sax/push_parser.rb +37 -0
- data/lib/nokogiri/html4.rb +46 -0
- data/lib/nokogiri/html5/document.rb +88 -0
- data/lib/nokogiri/html5/document_fragment.rb +83 -0
- data/lib/nokogiri/html5/node.rb +96 -0
- data/lib/nokogiri/html5.rb +477 -0
- data/lib/nokogiri/jruby/dependencies.rb +21 -0
- data/lib/nokogiri/syntax_error.rb +2 -0
- data/lib/nokogiri/version/constant.rb +6 -0
- data/lib/nokogiri/version/info.rb +221 -0
- data/lib/nokogiri/version.rb +3 -90
- data/lib/nokogiri/xml/attr.rb +6 -3
- data/lib/nokogiri/xml/attribute_decl.rb +3 -1
- data/lib/nokogiri/xml/builder.rb +96 -54
- data/lib/nokogiri/xml/cdata.rb +3 -1
- data/lib/nokogiri/xml/character_data.rb +2 -0
- data/lib/nokogiri/xml/document.rb +234 -95
- data/lib/nokogiri/xml/document_fragment.rb +86 -36
- data/lib/nokogiri/xml/dtd.rb +16 -4
- data/lib/nokogiri/xml/element_content.rb +2 -0
- data/lib/nokogiri/xml/element_decl.rb +3 -1
- data/lib/nokogiri/xml/entity_decl.rb +4 -2
- data/lib/nokogiri/xml/entity_reference.rb +20 -0
- data/lib/nokogiri/xml/namespace.rb +3 -0
- data/lib/nokogiri/xml/node/save_options.rb +8 -4
- data/lib/nokogiri/xml/node.rb +947 -502
- data/lib/nokogiri/xml/node_set.rb +168 -159
- data/lib/nokogiri/xml/notation.rb +13 -0
- data/lib/nokogiri/xml/parse_options.rb +40 -5
- data/lib/nokogiri/xml/pp/character_data.rb +9 -6
- data/lib/nokogiri/xml/pp/node.rb +25 -26
- data/lib/nokogiri/xml/pp.rb +4 -2
- data/lib/nokogiri/xml/processing_instruction.rb +3 -1
- data/lib/nokogiri/xml/reader.rb +23 -28
- data/lib/nokogiri/xml/relax_ng.rb +8 -2
- data/lib/nokogiri/xml/sax/document.rb +45 -49
- data/lib/nokogiri/xml/sax/parser.rb +43 -41
- data/lib/nokogiri/xml/sax/parser_context.rb +8 -3
- data/lib/nokogiri/xml/sax/push_parser.rb +6 -5
- data/lib/nokogiri/xml/sax.rb +6 -4
- data/lib/nokogiri/xml/schema.rb +19 -9
- data/lib/nokogiri/xml/searchable.rb +259 -0
- data/lib/nokogiri/xml/syntax_error.rb +25 -1
- data/lib/nokogiri/xml/text.rb +2 -0
- data/lib/nokogiri/xml/xpath/syntax_error.rb +4 -2
- data/lib/nokogiri/xml/xpath.rb +15 -4
- data/lib/nokogiri/xml/xpath_context.rb +3 -3
- data/lib/nokogiri/xml.rb +38 -36
- data/lib/nokogiri/xslt/stylesheet.rb +3 -1
- data/lib/nokogiri/xslt.rb +18 -16
- data/lib/nokogiri.rb +69 -69
- data/lib/xsd/xmlparser/nokogiri.rb +26 -24
- data/patches/libxml2/0001-Remove-script-macro-support.patch +40 -0
- data/patches/libxml2/0002-Update-entities-to-remove-handling-of-ssi.patch +44 -0
- data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
- data/patches/libxml2/0004-use-glibc-strlen.patch +53 -0
- data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
- data/patches/libxml2/0006-update-automake-files-for-arm64.patch +2511 -0
- data/patches/libxml2/0007-Fix-XPath-recursion-limit.patch +31 -0
- data/patches/libxml2/0008-htmlParseComment-handle-abruptly-closed-comments.patch +61 -0
- data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
- data/patches/libxslt/0001-update-automake-files-for-arm64.patch +2511 -0
- data/patches/libxslt/0002-Fix-xml2-config-check-in-configure-script.patch +19 -0
- data/ports/archives/libxml2-2.9.12.tar.gz +0 -0
- data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
- metadata +382 -460
- data/.autotest +0 -26
- data/.gemtest +0 -0
- data/CHANGELOG.ja.rdoc +0 -785
- data/CHANGELOG.rdoc +0 -783
- data/C_CODING_STYLE.rdoc +0 -33
- data/Manifest.txt +0 -303
- data/README.ja.rdoc +0 -106
- data/README.rdoc +0 -175
- data/ROADMAP.md +0 -90
- data/Rakefile +0 -228
- data/STANDARD_RESPONSES.md +0 -47
- data/Y_U_NO_GEMSPEC.md +0 -155
- data/build_all +0 -105
- data/ext/nokogiri/html_document.c +0 -170
- data/ext/nokogiri/html_document.h +0 -10
- data/ext/nokogiri/html_element_description.c +0 -279
- data/ext/nokogiri/html_element_description.h +0 -10
- data/ext/nokogiri/html_entity_lookup.c +0 -32
- data/ext/nokogiri/html_entity_lookup.h +0 -8
- data/ext/nokogiri/html_sax_parser_context.c +0 -116
- data/ext/nokogiri/html_sax_parser_context.h +0 -11
- data/ext/nokogiri/html_sax_push_parser.c +0 -87
- data/ext/nokogiri/html_sax_push_parser.h +0 -9
- data/ext/nokogiri/xml_attr.h +0 -9
- data/ext/nokogiri/xml_attribute_decl.h +0 -9
- data/ext/nokogiri/xml_cdata.h +0 -9
- data/ext/nokogiri/xml_comment.h +0 -9
- data/ext/nokogiri/xml_document.h +0 -23
- data/ext/nokogiri/xml_document_fragment.h +0 -10
- data/ext/nokogiri/xml_dtd.h +0 -10
- data/ext/nokogiri/xml_element_content.h +0 -10
- data/ext/nokogiri/xml_element_decl.h +0 -9
- data/ext/nokogiri/xml_encoding_handler.h +0 -8
- data/ext/nokogiri/xml_entity_decl.h +0 -10
- data/ext/nokogiri/xml_entity_reference.h +0 -9
- data/ext/nokogiri/xml_io.c +0 -56
- data/ext/nokogiri/xml_io.h +0 -11
- data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
- data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
- data/ext/nokogiri/xml_namespace.h +0 -13
- data/ext/nokogiri/xml_node.h +0 -13
- data/ext/nokogiri/xml_node_set.h +0 -14
- data/ext/nokogiri/xml_processing_instruction.h +0 -9
- data/ext/nokogiri/xml_reader.h +0 -10
- data/ext/nokogiri/xml_relax_ng.h +0 -9
- data/ext/nokogiri/xml_sax_parser.h +0 -39
- data/ext/nokogiri/xml_sax_parser_context.h +0 -10
- data/ext/nokogiri/xml_sax_push_parser.h +0 -9
- data/ext/nokogiri/xml_schema.h +0 -9
- data/ext/nokogiri/xml_syntax_error.h +0 -13
- data/ext/nokogiri/xml_text.h +0 -9
- data/ext/nokogiri/xml_xpath_context.h +0 -10
- data/ext/nokogiri/xslt_stylesheet.h +0 -14
- data/lib/nokogiri/html/document.rb +0 -254
- data/lib/nokogiri/html/document_fragment.rb +0 -41
- data/lib/nokogiri/html/element_description_defaults.rb +0 -671
- data/lib/nokogiri/html/sax/parser_context.rb +0 -16
- data/lib/nokogiri/html/sax/push_parser.rb +0 -16
- data/tasks/cross_compile.rb +0 -150
- data/tasks/nokogiri.org.rb +0 -24
- data/tasks/test.rb +0 -95
- data/test/css/test_nthiness.rb +0 -159
- data/test/css/test_parser.rb +0 -341
- data/test/css/test_tokenizer.rb +0 -198
- data/test/css/test_xpath_visitor.rb +0 -91
- data/test/decorators/test_slop.rb +0 -16
- data/test/files/2ch.html +0 -108
- data/test/files/address_book.rlx +0 -12
- data/test/files/address_book.xml +0 -10
- data/test/files/bar/bar.xsd +0 -4
- 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/noencoding.html +0 -47
- data/test/files/po.xml +0 -32
- data/test/files/po.xsd +0 -66
- data/test/files/shift_jis.html +0 -10
- data/test/files/shift_jis.xml +0 -5
- 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 -850
- 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 -154
- data/test/html/sax/test_parser.rb +0 -141
- data/test/html/sax/test_parser_context.rb +0 -46
- data/test/html/test_builder.rb +0 -164
- data/test/html/test_document.rb +0 -552
- data/test/html/test_document_encoding.rb +0 -138
- data/test/html/test_document_fragment.rb +0 -261
- 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 -196
- data/test/html/test_node_encoding.rb +0 -27
- data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
- data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
- data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
- data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -66
- data/test/test_convert_xpath.rb +0 -135
- data/test/test_css_cache.rb +0 -45
- data/test/test_encoding_handler.rb +0 -46
- data/test/test_memory_leak.rb +0 -156
- data/test/test_nokogiri.rb +0 -132
- data/test/test_reader.rb +0 -555
- data/test/test_soap4r_sax.rb +0 -52
- data/test/test_xslt_transforms.rb +0 -254
- 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 -366
- data/test/xml/sax/test_parser_context.rb +0 -106
- data/test/xml/sax/test_push_parser.rb +0 -157
- data/test/xml/test_attr.rb +0 -64
- data/test/xml/test_attribute_decl.rb +0 -86
- data/test/xml/test_builder.rb +0 -306
- data/test/xml/test_c14n.rb +0 -151
- data/test/xml/test_cdata.rb +0 -48
- data/test/xml/test_comment.rb +0 -29
- data/test/xml/test_document.rb +0 -828
- data/test/xml/test_document_encoding.rb +0 -28
- data/test/xml/test_document_fragment.rb +0 -223
- data/test/xml/test_dtd.rb +0 -103
- data/test/xml/test_dtd_encoding.rb +0 -33
- 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 -245
- data/test/xml/test_namespace.rb +0 -95
- data/test/xml/test_node.rb +0 -1137
- data/test/xml/test_node_attributes.rb +0 -96
- data/test/xml/test_node_encoding.rb +0 -107
- data/test/xml/test_node_inheritance.rb +0 -32
- data/test/xml/test_node_reparenting.rb +0 -374
- data/test/xml/test_node_set.rb +0 -755
- data/test/xml/test_parse_options.rb +0 -64
- data/test/xml/test_processing_instruction.rb +0 -30
- data/test/xml/test_reader_encoding.rb +0 -142
- data/test/xml/test_relax_ng.rb +0 -60
- data/test/xml/test_schema.rb +0 -103
- data/test/xml/test_syntax_error.rb +0 -12
- data/test/xml/test_text.rb +0 -45
- data/test/xml/test_unparented_node.rb +0 -422
- data/test/xml/test_xinclude.rb +0 -83
- data/test/xml/test_xpath.rb +0 -295
- data/test/xslt/test_custom_functions.rb +0 -133
- data/test/xslt/test_exception_handling.rb +0 -37
- data/test_all +0 -81
data/test/xml/test_xpath.rb
DELETED
@@ -1,295 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XML
|
5
|
-
class TestXPath < Nokogiri::TestCase
|
6
|
-
|
7
|
-
# ** WHY ALL THOSE _if Nokogiri.uses_libxml?_ **
|
8
|
-
# Hi, my dear readers,
|
9
|
-
#
|
10
|
-
# After reading these tests you may be wondering why all those ugly
|
11
|
-
# if Nokogiri.uses_libxml? sparsed over the whole document. Well, let
|
12
|
-
# me explain it. While using XPath in Java, you need the extension
|
13
|
-
# functions to be in a namespace. This is not required by XPath, afaik,
|
14
|
-
# but it is an usual convention though.
|
15
|
-
#
|
16
|
-
# Furthermore, CSS does not support extension functions but it does in
|
17
|
-
# Nokogiri. Result: you cannot use them in JRuby impl. At least, until
|
18
|
-
# the CSS to XPath parser is patched, and let me say that there are more
|
19
|
-
# important features to add before that happens. I hope you will forgive
|
20
|
-
# me.
|
21
|
-
#
|
22
|
-
# Yours truly,
|
23
|
-
#
|
24
|
-
# The guy whose headaches belong to Nokogiri JRuby impl.
|
25
|
-
|
26
|
-
|
27
|
-
def setup
|
28
|
-
super
|
29
|
-
|
30
|
-
@xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
|
31
|
-
|
32
|
-
@ns = @xml.root.namespaces
|
33
|
-
|
34
|
-
# TODO: Maybe I should move this to the original code.
|
35
|
-
@ns["nokogiri"] = "http://www.nokogiri.org/default_ns/ruby/extensions_functions"
|
36
|
-
|
37
|
-
@handler = Class.new {
|
38
|
-
attr_reader :things
|
39
|
-
|
40
|
-
def initialize
|
41
|
-
@things = []
|
42
|
-
end
|
43
|
-
|
44
|
-
def thing thing
|
45
|
-
@things << thing
|
46
|
-
thing
|
47
|
-
end
|
48
|
-
|
49
|
-
def returns_array node_set
|
50
|
-
@things << node_set.to_a
|
51
|
-
node_set.to_a
|
52
|
-
end
|
53
|
-
|
54
|
-
def my_filter set, attribute, value
|
55
|
-
set.find_all { |x| x[attribute] == value }
|
56
|
-
end
|
57
|
-
|
58
|
-
def saves_node_set node_set
|
59
|
-
@things = node_set
|
60
|
-
end
|
61
|
-
|
62
|
-
def value
|
63
|
-
123.456
|
64
|
-
end
|
65
|
-
}.new
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_variable_binding
|
69
|
-
assert_equal 4, @xml.xpath('//address[@domestic=$value]', nil, :value => 'Yes').length
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_unknown_attribute
|
73
|
-
assert_equal 0, @xml.xpath('//employee[@id="asdfasdf"]/@fooo').length
|
74
|
-
assert_nil @xml.xpath('//employee[@id="asdfasdf"]/@fooo')[0]
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_boolean
|
78
|
-
assert_equal false, @xml.xpath('1 = 2')
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_number
|
82
|
-
assert_equal 2, @xml.xpath('1 + 1')
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_string
|
86
|
-
assert_equal 'foo', @xml.xpath('concat("fo", "o")')
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_css_search_uses_custom_selectors_with_arguments
|
90
|
-
set = if Nokogiri.uses_libxml?
|
91
|
-
@xml.css('employee > address:my_filter("domestic", "Yes")', @handler)
|
92
|
-
else
|
93
|
-
@xml.xpath("//employee/address[nokogiri:my_filter(., \"domestic\", \"Yes\")]", @ns, @handler)
|
94
|
-
end
|
95
|
-
assert set.length > 0
|
96
|
-
set.each do |node|
|
97
|
-
assert_equal 'Yes', node['domestic']
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_css_search_uses_custom_selectors
|
102
|
-
set = @xml.xpath('//employee')
|
103
|
-
if Nokogiri.uses_libxml?
|
104
|
-
@xml.css('employee:thing()', @handler)
|
105
|
-
else
|
106
|
-
@xml.xpath("//employee[nokogiri:thing(.)]", @ns, @handler)
|
107
|
-
end
|
108
|
-
assert_equal(set.length, @handler.things.length)
|
109
|
-
assert_equal(set.to_a, @handler.things.flatten)
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_pass_self_to_function
|
113
|
-
set = if Nokogiri.uses_libxml?
|
114
|
-
@xml.xpath('//employee/address[my_filter(., "domestic", "Yes")]', @handler)
|
115
|
-
else
|
116
|
-
@xml.xpath('//employee/address[nokogiri:my_filter(., "domestic", "Yes")]', @ns, @handler)
|
117
|
-
end
|
118
|
-
assert set.length > 0
|
119
|
-
set.each do |node|
|
120
|
-
assert_equal 'Yes', node['domestic']
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def test_custom_xpath_function_gets_strings
|
125
|
-
set = @xml.xpath('//employee')
|
126
|
-
if Nokogiri.uses_libxml?
|
127
|
-
@xml.xpath('//employee[thing("asdf")]', @handler)
|
128
|
-
else
|
129
|
-
@xml.xpath('//employee[nokogiri:thing("asdf")]', @ns, @handler)
|
130
|
-
end
|
131
|
-
assert_equal(set.length, @handler.things.length)
|
132
|
-
assert_equal(['asdf'] * set.length, @handler.things)
|
133
|
-
end
|
134
|
-
|
135
|
-
def test_custom_xpath_function_returns_string
|
136
|
-
if Nokogiri.uses_libxml?
|
137
|
-
result = @xml.xpath('thing("asdf")', @handler)
|
138
|
-
else
|
139
|
-
result = @xml.xpath('nokogiri:thing("asdf")', @ns, @handler)
|
140
|
-
end
|
141
|
-
assert_equal 'asdf', result
|
142
|
-
end
|
143
|
-
|
144
|
-
def test_custom_xpath_gets_true_booleans
|
145
|
-
set = @xml.xpath('//employee')
|
146
|
-
if Nokogiri.uses_libxml?
|
147
|
-
@xml.xpath('//employee[thing(true())]', @handler)
|
148
|
-
else
|
149
|
-
@xml.xpath("//employee[nokogiri:thing(true())]", @ns, @handler)
|
150
|
-
end
|
151
|
-
assert_equal(set.length, @handler.things.length)
|
152
|
-
assert_equal([true] * set.length, @handler.things)
|
153
|
-
end
|
154
|
-
|
155
|
-
def test_custom_xpath_gets_false_booleans
|
156
|
-
set = @xml.xpath('//employee')
|
157
|
-
if Nokogiri.uses_libxml?
|
158
|
-
@xml.xpath('//employee[thing(false())]', @handler)
|
159
|
-
else
|
160
|
-
@xml.xpath("//employee[nokogiri:thing(false())]", @ns, @handler)
|
161
|
-
end
|
162
|
-
assert_equal(set.length, @handler.things.length)
|
163
|
-
assert_equal([false] * set.length, @handler.things)
|
164
|
-
end
|
165
|
-
|
166
|
-
def test_custom_xpath_gets_numbers
|
167
|
-
set = @xml.xpath('//employee')
|
168
|
-
if Nokogiri.uses_libxml?
|
169
|
-
@xml.xpath('//employee[thing(10)]', @handler)
|
170
|
-
else
|
171
|
-
@xml.xpath('//employee[nokogiri:thing(10)]', @ns, @handler)
|
172
|
-
end
|
173
|
-
assert_equal(set.length, @handler.things.length)
|
174
|
-
assert_equal([10] * set.length, @handler.things)
|
175
|
-
end
|
176
|
-
|
177
|
-
def test_custom_xpath_gets_node_sets
|
178
|
-
set = @xml.xpath('//employee/name')
|
179
|
-
if Nokogiri.uses_libxml?
|
180
|
-
@xml.xpath('//employee[thing(name)]', @handler)
|
181
|
-
else
|
182
|
-
@xml.xpath('//employee[nokogiri:thing(name)]', @ns, @handler)
|
183
|
-
end
|
184
|
-
assert_equal(set.length, @handler.things.length)
|
185
|
-
assert_equal(set.to_a, @handler.things.flatten)
|
186
|
-
end
|
187
|
-
|
188
|
-
def test_custom_xpath_gets_node_sets_and_returns_array
|
189
|
-
set = @xml.xpath('//employee/name')
|
190
|
-
if Nokogiri.uses_libxml?
|
191
|
-
@xml.xpath('//employee[returns_array(name)]', @handler)
|
192
|
-
else
|
193
|
-
@xml.xpath('//employee[nokogiri:returns_array(name)]', @ns, @handler)
|
194
|
-
end
|
195
|
-
assert_equal(set.length, @handler.things.length)
|
196
|
-
assert_equal(set.to_a, @handler.things.flatten)
|
197
|
-
end
|
198
|
-
|
199
|
-
def test_custom_xpath_handler_is_passed_a_decorated_node_set
|
200
|
-
x = Module.new do
|
201
|
-
def awesome! ; end
|
202
|
-
end
|
203
|
-
util_decorate(@xml, x)
|
204
|
-
|
205
|
-
assert @xml.xpath('//employee/name')
|
206
|
-
|
207
|
-
@xml.xpath('//employee[saves_node_set(name)]', @handler)
|
208
|
-
assert_equal @xml, @handler.things.document
|
209
|
-
assert @handler.things.respond_to?(:awesome!)
|
210
|
-
end
|
211
|
-
|
212
|
-
def test_code_that_invokes_OP_RESET_inside_libxml2
|
213
|
-
doc = "<html><body id='foo'><foo>hi</foo></body></html>"
|
214
|
-
xpath = 'id("foo")//foo'
|
215
|
-
nokogiri = Nokogiri::HTML.parse(doc)
|
216
|
-
assert nokogiri.xpath(xpath)
|
217
|
-
end
|
218
|
-
|
219
|
-
def test_custom_xpath_handler_with_args_under_gc_pressure
|
220
|
-
# see http://github.com/sparklemotion/nokogiri/issues/#issue/345
|
221
|
-
tool_inspector = Class.new do
|
222
|
-
def name_equals(nodeset, name, *args)
|
223
|
-
nodeset.all? do |node|
|
224
|
-
args.each { |thing| thing.inspect }
|
225
|
-
node["name"] == name
|
226
|
-
end
|
227
|
-
end
|
228
|
-
end.new
|
229
|
-
|
230
|
-
xml = <<-EOXML
|
231
|
-
<toolbox>
|
232
|
-
#{"<tool name='hammer'/><tool name='wrench'/>" * 10}
|
233
|
-
</toolbox>
|
234
|
-
EOXML
|
235
|
-
doc = Nokogiri::XML xml
|
236
|
-
|
237
|
-
# long list of long arguments, to apply GC pressure during
|
238
|
-
# ruby_funcall argument marshalling
|
239
|
-
xpath = ["//tool[name_equals(.,'hammer'"]
|
240
|
-
1000.times { xpath << "'unused argument #{'x' * 1000}'" }
|
241
|
-
xpath << "'unused argument')]"
|
242
|
-
xpath = xpath.join(',')
|
243
|
-
|
244
|
-
assert_equal doc.xpath("//tool[@name='hammer']"), doc.xpath(xpath, tool_inspector)
|
245
|
-
end
|
246
|
-
|
247
|
-
def test_custom_xpath_without_arguments
|
248
|
-
if Nokogiri.uses_libxml?
|
249
|
-
value = @xml.xpath('value()', @handler)
|
250
|
-
else
|
251
|
-
value = @xml.xpath('nokogiri:value()', @ns, @handler)
|
252
|
-
end
|
253
|
-
assert_equal 123.456, value
|
254
|
-
end
|
255
|
-
|
256
|
-
def test_custom_xpath_with_bullshit_arguments
|
257
|
-
xml = %q{<foo> </foo>}
|
258
|
-
doc = Nokogiri::XML.parse(xml)
|
259
|
-
foo = doc.xpath('//foo[bool_function(bar/baz)]', Class.new {
|
260
|
-
def bool_function(value)
|
261
|
-
true
|
262
|
-
end
|
263
|
-
}.new)
|
264
|
-
assert_equal foo, doc.xpath("//foo")
|
265
|
-
end
|
266
|
-
|
267
|
-
def test_node_set_should_be_decorated
|
268
|
-
# "called decorate on nill" exception in JRuby issue#514
|
269
|
-
process_output= <<END
|
270
|
-
<test>
|
271
|
-
<track type="Image">
|
272
|
-
<Format>LZ77</Format>
|
273
|
-
</test>
|
274
|
-
END
|
275
|
-
doc = Nokogiri::XML.parse(process_output)
|
276
|
-
node = doc.xpath(%{//track[@type='Video']})
|
277
|
-
assert_equal "[]", node.xpath("Format").inspect
|
278
|
-
end
|
279
|
-
|
280
|
-
def test_very_specific_xml_xpath_making_problems_in_jruby
|
281
|
-
# manually merges pull request #681
|
282
|
-
xml_string = %q{<?xml version="1.0" encoding="UTF-8"?>
|
283
|
-
<ONIXMessage xmlns:elibri="http://elibri.com.pl/ns/extensions" release="3.0" xmlns="http://www.editeur.org/onix/3.0/reference">
|
284
|
-
<Product>
|
285
|
-
<RecordReference>a</RecordReference>
|
286
|
-
</Product>
|
287
|
-
</ONIXMessage>}
|
288
|
-
|
289
|
-
xml_doc = Nokogiri::XML(xml_string)
|
290
|
-
onix = xml_doc.children.first
|
291
|
-
assert_equal 'a', onix.at_xpath('xmlns:Product').at_xpath('xmlns:RecordReference').text
|
292
|
-
end
|
293
|
-
end
|
294
|
-
end
|
295
|
-
end
|
@@ -1,133 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
require "helper"
|
4
|
-
|
5
|
-
module Nokogiri
|
6
|
-
module XSLT
|
7
|
-
class TestCustomFunctions < Nokogiri::TestCase
|
8
|
-
def setup
|
9
|
-
super
|
10
|
-
@xml = Nokogiri.XML(<<-EOXML)
|
11
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
12
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN"
|
13
|
-
"http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd">
|
14
|
-
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
15
|
-
<head>
|
16
|
-
<meta http-equiv="Content-type" content="application/xhtml+xml"/>
|
17
|
-
<title>Foo</title>
|
18
|
-
</head>
|
19
|
-
<body>
|
20
|
-
<h1>Foo</h1>
|
21
|
-
<p>Lorem ipsum.</p>
|
22
|
-
</body>
|
23
|
-
</html>
|
24
|
-
EOXML
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_function
|
28
|
-
skip("Pure Java version doesn't support this feature.") if !Nokogiri.uses_libxml?
|
29
|
-
foo = Class.new do
|
30
|
-
def capitalize nodes
|
31
|
-
nodes.first.content.upcase
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
XSLT.register "http://e.org/functions", foo
|
36
|
-
|
37
|
-
xsl = Nokogiri.XSLT(<<-EOXSL)
|
38
|
-
<?xml version="1.0"?>
|
39
|
-
<xsl:stylesheet version="1.0"
|
40
|
-
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
41
|
-
xmlns:f="http://e.org/functions"
|
42
|
-
extension-element-prefixes="f">
|
43
|
-
|
44
|
-
<xsl:template match="text()">
|
45
|
-
<xsl:copy-of select="f:capitalize(.)"/>
|
46
|
-
</xsl:template>
|
47
|
-
|
48
|
-
<xsl:template match="@*|node()">
|
49
|
-
<xsl:copy>
|
50
|
-
<xsl:apply-templates select="@*|node()"/>
|
51
|
-
<xsl:apply-imports/>
|
52
|
-
</xsl:copy>
|
53
|
-
</xsl:template>
|
54
|
-
|
55
|
-
</xsl:stylesheet>
|
56
|
-
EOXSL
|
57
|
-
result = xsl.transform @xml
|
58
|
-
assert_equal 'FOO', result.css('title').first.text
|
59
|
-
end
|
60
|
-
|
61
|
-
|
62
|
-
def test_function_arguments
|
63
|
-
skip("Pure Java version doesn't support this feature.") if !Nokogiri.uses_libxml?
|
64
|
-
foo = Class.new do
|
65
|
-
include MiniTest::Assertions
|
66
|
-
# Minitest 5 uses `self.assertions` in `assert()` which is not
|
67
|
-
# defined in the Minitest::Assertions module :-(
|
68
|
-
attr_writer :assertions
|
69
|
-
def assertions; @assertions ||= 0; end
|
70
|
-
|
71
|
-
def multiarg *args
|
72
|
-
assert_equal ["abc", "xyz"], args
|
73
|
-
args.first
|
74
|
-
end
|
75
|
-
|
76
|
-
def numericarg arg
|
77
|
-
assert_equal 42, arg
|
78
|
-
arg
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
xsl = Nokogiri.XSLT(<<-EOXSL, "http://e.org/functions" => foo)
|
83
|
-
<?xml version="1.0"?>
|
84
|
-
<xsl:stylesheet version="1.0"
|
85
|
-
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
86
|
-
xmlns:f="http://e.org/functions"
|
87
|
-
extension-element-prefixes="f">
|
88
|
-
|
89
|
-
<xsl:template match="text()">
|
90
|
-
<xsl:copy-of select="f:multiarg('abc', 'xyz')"/>
|
91
|
-
<xsl:copy-of select="f:numericarg(42)"/>
|
92
|
-
</xsl:template>
|
93
|
-
</xsl:stylesheet>
|
94
|
-
EOXSL
|
95
|
-
|
96
|
-
xsl.transform @xml
|
97
|
-
end
|
98
|
-
|
99
|
-
|
100
|
-
def test_function_XSLT
|
101
|
-
skip("Pure Java version doesn't support this feature.") if !Nokogiri.uses_libxml?
|
102
|
-
foo = Class.new do
|
103
|
-
def america nodes
|
104
|
-
nodes.first.content.upcase
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
xsl = Nokogiri.XSLT(<<-EOXSL, "http://e.org/functions" => foo)
|
109
|
-
<?xml version="1.0"?>
|
110
|
-
<xsl:stylesheet version="1.0"
|
111
|
-
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
112
|
-
xmlns:f="http://e.org/functions"
|
113
|
-
extension-element-prefixes="f">
|
114
|
-
|
115
|
-
<xsl:template match="text()">
|
116
|
-
<xsl:copy-of select="f:america(.)"/>
|
117
|
-
</xsl:template>
|
118
|
-
|
119
|
-
<xsl:template match="@*|node()">
|
120
|
-
<xsl:copy>
|
121
|
-
<xsl:apply-templates select="@*|node()"/>
|
122
|
-
<xsl:apply-imports/>
|
123
|
-
</xsl:copy>
|
124
|
-
</xsl:template>
|
125
|
-
|
126
|
-
</xsl:stylesheet>
|
127
|
-
EOXSL
|
128
|
-
result = xsl.transform @xml
|
129
|
-
assert_equal 'FOO', result.css('title').first.text
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
module Nokogiri
|
4
|
-
module XSLT
|
5
|
-
class TestExceptionHandling < Nokogiri::TestCase
|
6
|
-
def test_java_exception_handling
|
7
|
-
skip('This test is for Java only') if Nokogiri.uses_libxml?
|
8
|
-
|
9
|
-
xml = Nokogiri.XML(<<-EOXML)
|
10
|
-
<foo>
|
11
|
-
<bar/>
|
12
|
-
</foo>
|
13
|
-
EOXML
|
14
|
-
|
15
|
-
xsl = Nokogiri.XSLT(<<-EOXSL)
|
16
|
-
<?xml version="1.0"?>
|
17
|
-
<xsl:stylesheet version="1.0"
|
18
|
-
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
19
|
-
|
20
|
-
<xsl:template match="/">
|
21
|
-
<a/>
|
22
|
-
<b/>
|
23
|
-
</xsl:template>
|
24
|
-
</xsl:stylesheet>
|
25
|
-
EOXSL
|
26
|
-
|
27
|
-
begin
|
28
|
-
xsl.transform xml
|
29
|
-
fail('It should not get here')
|
30
|
-
rescue RuntimeError => e
|
31
|
-
assert_match(/HIERARCHY_REQUEST_ERR/, e.to_s, 'The exception message does not contain the expected information')
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
data/test_all
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
#! /usr/bin/env bash
|
2
|
-
#
|
3
|
-
# script to run tests on all relevant rubies, and valgrind on supported rubies.
|
4
|
-
# outputs tests to `test.log` and valgrind output to `valgrind.log`.
|
5
|
-
#
|
6
|
-
# requires `rvm` to be installed. sorry about that, multiruby dudes.
|
7
|
-
#
|
8
|
-
# it's worth periodically using hoe-debugger's ability to generate
|
9
|
-
# valgrind suppression files to remove spurious valgrind messages
|
10
|
-
# (e.g., 1.9.3's glob_helper). ["rake test:valgrind:suppression"]
|
11
|
-
#
|
12
|
-
|
13
|
-
RUBIES="ruby-1.9.3-p327 jruby-1.7.3 jruby-1.6.5.1 jruby-1.6.7.2 ree-1.8.7-2011.12 ruby-1.9.2-p320 ruby-1.8.7-p370"
|
14
|
-
TEST_LOG=test.log
|
15
|
-
VALGRIND_LOG=valgrind.log
|
16
|
-
|
17
|
-
# Load RVM into a shell session *as a function*
|
18
|
-
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
|
19
|
-
source "$HOME/.rvm/scripts/rvm"
|
20
|
-
elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
|
21
|
-
source "/usr/local/rvm/scripts/rvm"
|
22
|
-
else
|
23
|
-
echo "ERROR: An RVM installation was not found.\n"
|
24
|
-
fi
|
25
|
-
|
26
|
-
> $TEST_LOG
|
27
|
-
> $VALGRIND_LOG
|
28
|
-
set -o errexit
|
29
|
-
|
30
|
-
function rvm_use {
|
31
|
-
current_ruby=$1
|
32
|
-
rvm use "${1}@nokogiri" --create || rvm -v
|
33
|
-
}
|
34
|
-
|
35
|
-
function generate_parser_and_tokenizer {
|
36
|
-
old_ruby=$current_ruby
|
37
|
-
rvm_use ruby-1.8.7-p357
|
38
|
-
bundle exec rake generate 2>&1 > /dev/null
|
39
|
-
rvm_use $old_ruby
|
40
|
-
}
|
41
|
-
|
42
|
-
function clean {
|
43
|
-
bundle exec rake clean clobber 2>&1 > /dev/null
|
44
|
-
}
|
45
|
-
|
46
|
-
function compile {
|
47
|
-
echo "** compiling ..."
|
48
|
-
# generate_parser_and_tokenizer
|
49
|
-
bundle exec rake compile 2>&1 > /dev/null
|
50
|
-
}
|
51
|
-
|
52
|
-
for ruby in $RUBIES ; do
|
53
|
-
rvm_use ${ruby}
|
54
|
-
if ! which bundle ; then
|
55
|
-
gem install bundler
|
56
|
-
fi
|
57
|
-
bundle install --quiet --local || bundle install
|
58
|
-
clean
|
59
|
-
done
|
60
|
-
|
61
|
-
for ruby in $RUBIES ; do
|
62
|
-
rvm_use ${ruby}
|
63
|
-
echo -e "**\n** testing nokogiri on ${ruby}\n**" | tee -a $TEST_LOG
|
64
|
-
clean
|
65
|
-
compile
|
66
|
-
echo "** running tests ..."
|
67
|
-
bundle exec rake test 2>&1 | tee -a $TEST_LOG
|
68
|
-
clean
|
69
|
-
done
|
70
|
-
|
71
|
-
for ruby in $RUBIES ; do
|
72
|
-
if [[ ! $ruby =~ "jruby" ]] ; then
|
73
|
-
rvm_use ${ruby}
|
74
|
-
echo -e "**\n** nokogiri prerelease: ${ruby}\n**" | tee -a $VALGRIND_LOG
|
75
|
-
clean
|
76
|
-
compile
|
77
|
-
echo "** running valgrind on tests ..."
|
78
|
-
bundle exec rake test:valgrind 2>&1 | tee -a $VALGRIND_LOG
|
79
|
-
clean
|
80
|
-
fi
|
81
|
-
done
|