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.

Files changed (160) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +0 -1
  3. data/ext/java/nokogiri/XmlAttr.java +3 -1
  4. data/ext/java/nokogiri/XmlDtd.java +20 -16
  5. data/ext/java/nokogiri/XmlElement.java +6 -6
  6. data/ext/java/nokogiri/XmlNode.java +29 -9
  7. data/ext/java/nokogiri/XmlNodeSet.java +258 -77
  8. data/ext/java/nokogiri/XmlXpathContext.java +10 -12
  9. data/ext/java/nokogiri/internals/NokogiriHelpers.java +25 -23
  10. data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +5 -5
  11. data/ext/java/nokogiri/internals/XalanDTMManagerPatch.java +11 -10
  12. data/ext/java/{org/apache/xml/dtm/ref/dom2dtm/DOM2DTMExt.java → nokogiri/internals/dom2dtm/DOM2DTM.java} +3 -7
  13. data/ext/java/nokogiri/internals/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.java +685 -0
  14. data/ext/nokogiri/extconf.rb +10 -6
  15. data/ext/nokogiri/xml_attr.c +26 -21
  16. data/ext/nokogiri/xml_document.c +4 -1
  17. data/ext/nokogiri/xml_namespace.c +3 -3
  18. data/ext/nokogiri/xml_namespace.h +1 -2
  19. data/ext/nokogiri/xml_node.c +55 -15
  20. data/lib/nokogiri/css/parser.rb +61 -61
  21. data/lib/nokogiri/nokogiri.jar +0 -0
  22. data/lib/nokogiri/version.rb +1 -1
  23. data/lib/nokogiri/xml/document_fragment.rb +11 -0
  24. data/lib/nokogiri/xml/node.rb +12 -0
  25. data/lib/nokogiri/xml/node_set.rb +4 -8
  26. data/lib/xercesImpl.jar +0 -0
  27. metadata +17 -152
  28. data/.autotest +0 -22
  29. data/.cross_rubies +0 -8
  30. data/.editorconfig +0 -17
  31. data/.gemtest +0 -0
  32. data/.travis.yml +0 -63
  33. data/CHANGELOG.md +0 -1368
  34. data/CONTRIBUTING.md +0 -42
  35. data/C_CODING_STYLE.rdoc +0 -33
  36. data/Gemfile +0 -23
  37. data/Gemfile-libxml-ruby +0 -3
  38. data/Manifest.txt +0 -370
  39. data/ROADMAP.md +0 -111
  40. data/Rakefile +0 -348
  41. data/SECURITY.md +0 -19
  42. data/STANDARD_RESPONSES.md +0 -47
  43. data/Y_U_NO_GEMSPEC.md +0 -155
  44. data/appveyor.yml +0 -29
  45. data/build_all +0 -44
  46. data/patches/sort-patches-by-date +0 -25
  47. data/suppressions/README.txt +0 -1
  48. data/suppressions/nokogiri_ruby-2.supp +0 -10
  49. data/tasks/test.rb +0 -100
  50. data/test/css/test_nthiness.rb +0 -226
  51. data/test/css/test_parser.rb +0 -386
  52. data/test/css/test_tokenizer.rb +0 -215
  53. data/test/css/test_xpath_visitor.rb +0 -96
  54. data/test/decorators/test_slop.rb +0 -23
  55. data/test/files/2ch.html +0 -108
  56. data/test/files/GH_1042.html +0 -18
  57. data/test/files/address_book.rlx +0 -12
  58. data/test/files/address_book.xml +0 -10
  59. data/test/files/atom.xml +0 -344
  60. data/test/files/bar/bar.xsd +0 -4
  61. data/test/files/bogus.xml +0 -0
  62. data/test/files/dont_hurt_em_why.xml +0 -422
  63. data/test/files/encoding.html +0 -82
  64. data/test/files/encoding.xhtml +0 -84
  65. data/test/files/exslt.xml +0 -8
  66. data/test/files/exslt.xslt +0 -35
  67. data/test/files/foo/foo.xsd +0 -4
  68. data/test/files/metacharset.html +0 -10
  69. data/test/files/namespace_pressure_test.xml +0 -1684
  70. data/test/files/noencoding.html +0 -47
  71. data/test/files/po.xml +0 -32
  72. data/test/files/po.xsd +0 -66
  73. data/test/files/saml/saml20assertion_schema.xsd +0 -283
  74. data/test/files/saml/saml20protocol_schema.xsd +0 -302
  75. data/test/files/saml/xenc_schema.xsd +0 -146
  76. data/test/files/saml/xmldsig_schema.xsd +0 -318
  77. data/test/files/shift_jis.html +0 -10
  78. data/test/files/shift_jis.xml +0 -5
  79. data/test/files/shift_jis_no_charset.html +0 -9
  80. data/test/files/slow-xpath.xml +0 -25509
  81. data/test/files/snuggles.xml +0 -3
  82. data/test/files/staff.dtd +0 -10
  83. data/test/files/staff.xml +0 -59
  84. data/test/files/staff.xslt +0 -32
  85. data/test/files/test_document_url/bar.xml +0 -2
  86. data/test/files/test_document_url/document.dtd +0 -4
  87. data/test/files/test_document_url/document.xml +0 -6
  88. data/test/files/tlm.html +0 -851
  89. data/test/files/to_be_xincluded.xml +0 -2
  90. data/test/files/valid_bar.xml +0 -2
  91. data/test/files/xinclude.xml +0 -4
  92. data/test/helper.rb +0 -271
  93. data/test/html/sax/test_parser.rb +0 -168
  94. data/test/html/sax/test_parser_context.rb +0 -46
  95. data/test/html/sax/test_parser_text.rb +0 -163
  96. data/test/html/sax/test_push_parser.rb +0 -87
  97. data/test/html/test_attributes.rb +0 -85
  98. data/test/html/test_builder.rb +0 -164
  99. data/test/html/test_document.rb +0 -712
  100. data/test/html/test_document_encoding.rb +0 -143
  101. data/test/html/test_document_fragment.rb +0 -310
  102. data/test/html/test_element_description.rb +0 -105
  103. data/test/html/test_named_characters.rb +0 -14
  104. data/test/html/test_node.rb +0 -212
  105. data/test/html/test_node_encoding.rb +0 -91
  106. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
  107. data/test/namespaces/test_namespaces_aliased_default.rb +0 -24
  108. data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
  109. data/test/namespaces/test_namespaces_in_cloned_doc.rb +0 -31
  110. data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
  111. data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -80
  112. data/test/namespaces/test_namespaces_preservation.rb +0 -31
  113. data/test/test_convert_xpath.rb +0 -135
  114. data/test/test_css_cache.rb +0 -47
  115. data/test/test_encoding_handler.rb +0 -48
  116. data/test/test_memory_leak.rb +0 -156
  117. data/test/test_nokogiri.rb +0 -138
  118. data/test/test_soap4r_sax.rb +0 -52
  119. data/test/test_xslt_transforms.rb +0 -314
  120. data/test/xml/node/test_save_options.rb +0 -28
  121. data/test/xml/node/test_subclass.rb +0 -44
  122. data/test/xml/sax/test_parser.rb +0 -402
  123. data/test/xml/sax/test_parser_context.rb +0 -115
  124. data/test/xml/sax/test_parser_text.rb +0 -202
  125. data/test/xml/sax/test_push_parser.rb +0 -265
  126. data/test/xml/test_attr.rb +0 -74
  127. data/test/xml/test_attribute_decl.rb +0 -86
  128. data/test/xml/test_builder.rb +0 -341
  129. data/test/xml/test_c14n.rb +0 -180
  130. data/test/xml/test_cdata.rb +0 -54
  131. data/test/xml/test_comment.rb +0 -40
  132. data/test/xml/test_document.rb +0 -982
  133. data/test/xml/test_document_encoding.rb +0 -31
  134. data/test/xml/test_document_fragment.rb +0 -298
  135. data/test/xml/test_dtd.rb +0 -187
  136. data/test/xml/test_dtd_encoding.rb +0 -31
  137. data/test/xml/test_element_content.rb +0 -56
  138. data/test/xml/test_element_decl.rb +0 -73
  139. data/test/xml/test_entity_decl.rb +0 -122
  140. data/test/xml/test_entity_reference.rb +0 -262
  141. data/test/xml/test_namespace.rb +0 -96
  142. data/test/xml/test_node.rb +0 -1325
  143. data/test/xml/test_node_attributes.rb +0 -115
  144. data/test/xml/test_node_encoding.rb +0 -75
  145. data/test/xml/test_node_inheritance.rb +0 -32
  146. data/test/xml/test_node_reparenting.rb +0 -592
  147. data/test/xml/test_node_set.rb +0 -809
  148. data/test/xml/test_parse_options.rb +0 -64
  149. data/test/xml/test_processing_instruction.rb +0 -30
  150. data/test/xml/test_reader.rb +0 -620
  151. data/test/xml/test_reader_encoding.rb +0 -134
  152. data/test/xml/test_relax_ng.rb +0 -60
  153. data/test/xml/test_schema.rb +0 -142
  154. data/test/xml/test_syntax_error.rb +0 -36
  155. data/test/xml/test_text.rb +0 -60
  156. data/test/xml/test_unparented_node.rb +0 -483
  157. data/test/xml/test_xinclude.rb +0 -83
  158. data/test/xml/test_xpath.rb +0 -470
  159. data/test/xslt/test_custom_functions.rb +0 -133
  160. 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
@@ -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
@@ -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
@@ -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