nokogiri 1.9.0.rc1-x64-mingw32 → 1.9.0-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.

Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/lib/nokogiri/2.2/nokogiri.so +0 -0
  3. data/lib/nokogiri/2.3/nokogiri.so +0 -0
  4. data/lib/nokogiri/2.4/nokogiri.so +0 -0
  5. data/lib/nokogiri/2.5/nokogiri.so +0 -0
  6. data/lib/nokogiri/css/parser.rb +61 -61
  7. data/lib/nokogiri/version.rb +1 -1
  8. metadata +4 -146
  9. data/.autotest +0 -22
  10. data/.cross_rubies +0 -8
  11. data/.editorconfig +0 -17
  12. data/.gemtest +0 -0
  13. data/.travis.yml +0 -63
  14. data/CHANGELOG.md +0 -1402
  15. data/CONTRIBUTING.md +0 -42
  16. data/C_CODING_STYLE.rdoc +0 -33
  17. data/Gemfile +0 -23
  18. data/Gemfile-libxml-ruby +0 -3
  19. data/Manifest.txt +0 -371
  20. data/ROADMAP.md +0 -111
  21. data/Rakefile +0 -358
  22. data/SECURITY.md +0 -19
  23. data/STANDARD_RESPONSES.md +0 -47
  24. data/Y_U_NO_GEMSPEC.md +0 -155
  25. data/appveyor.yml +0 -29
  26. data/build_all +0 -48
  27. data/patches/sort-patches-by-date +0 -25
  28. data/suppressions/README.txt +0 -1
  29. data/suppressions/nokogiri_ruby-2.supp +0 -10
  30. data/tasks/test.rb +0 -100
  31. data/test/css/test_nthiness.rb +0 -226
  32. data/test/css/test_parser.rb +0 -386
  33. data/test/css/test_tokenizer.rb +0 -215
  34. data/test/css/test_xpath_visitor.rb +0 -96
  35. data/test/decorators/test_slop.rb +0 -23
  36. data/test/files/2ch.html +0 -108
  37. data/test/files/GH_1042.html +0 -18
  38. data/test/files/address_book.rlx +0 -12
  39. data/test/files/address_book.xml +0 -10
  40. data/test/files/atom.xml +0 -344
  41. data/test/files/bar/bar.xsd +0 -4
  42. data/test/files/bogus.xml +0 -0
  43. data/test/files/dont_hurt_em_why.xml +0 -422
  44. data/test/files/encoding.html +0 -82
  45. data/test/files/encoding.xhtml +0 -84
  46. data/test/files/exslt.xml +0 -8
  47. data/test/files/exslt.xslt +0 -35
  48. data/test/files/foo/foo.xsd +0 -4
  49. data/test/files/metacharset.html +0 -10
  50. data/test/files/namespace_pressure_test.xml +0 -1684
  51. data/test/files/noencoding.html +0 -47
  52. data/test/files/po.xml +0 -32
  53. data/test/files/po.xsd +0 -66
  54. data/test/files/saml/saml20assertion_schema.xsd +0 -283
  55. data/test/files/saml/saml20protocol_schema.xsd +0 -302
  56. data/test/files/saml/xenc_schema.xsd +0 -146
  57. data/test/files/saml/xmldsig_schema.xsd +0 -318
  58. data/test/files/shift_jis.html +0 -10
  59. data/test/files/shift_jis.xml +0 -5
  60. data/test/files/shift_jis_no_charset.html +0 -9
  61. data/test/files/slow-xpath.xml +0 -25509
  62. data/test/files/snuggles.xml +0 -3
  63. data/test/files/staff.dtd +0 -10
  64. data/test/files/staff.xml +0 -59
  65. data/test/files/staff.xslt +0 -32
  66. data/test/files/test_document_url/bar.xml +0 -2
  67. data/test/files/test_document_url/document.dtd +0 -4
  68. data/test/files/test_document_url/document.xml +0 -6
  69. data/test/files/tlm.html +0 -851
  70. data/test/files/to_be_xincluded.xml +0 -2
  71. data/test/files/valid_bar.xml +0 -2
  72. data/test/files/xinclude.xml +0 -4
  73. data/test/helper.rb +0 -271
  74. data/test/html/sax/test_parser.rb +0 -168
  75. data/test/html/sax/test_parser_context.rb +0 -46
  76. data/test/html/sax/test_parser_text.rb +0 -163
  77. data/test/html/sax/test_push_parser.rb +0 -87
  78. data/test/html/test_attributes.rb +0 -85
  79. data/test/html/test_builder.rb +0 -164
  80. data/test/html/test_document.rb +0 -722
  81. data/test/html/test_document_encoding.rb +0 -143
  82. data/test/html/test_document_fragment.rb +0 -310
  83. data/test/html/test_element_description.rb +0 -105
  84. data/test/html/test_named_characters.rb +0 -14
  85. data/test/html/test_node.rb +0 -212
  86. data/test/html/test_node_encoding.rb +0 -91
  87. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
  88. data/test/namespaces/test_namespaces_aliased_default.rb +0 -24
  89. data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
  90. data/test/namespaces/test_namespaces_in_cloned_doc.rb +0 -31
  91. data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
  92. data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -80
  93. data/test/namespaces/test_namespaces_preservation.rb +0 -31
  94. data/test/test_convert_xpath.rb +0 -135
  95. data/test/test_css_cache.rb +0 -47
  96. data/test/test_encoding_handler.rb +0 -48
  97. data/test/test_memory_leak.rb +0 -226
  98. data/test/test_nokogiri.rb +0 -138
  99. data/test/test_soap4r_sax.rb +0 -52
  100. data/test/test_xslt_transforms.rb +0 -314
  101. data/test/xml/node/test_save_options.rb +0 -28
  102. data/test/xml/node/test_subclass.rb +0 -44
  103. data/test/xml/sax/test_parser.rb +0 -402
  104. data/test/xml/sax/test_parser_context.rb +0 -115
  105. data/test/xml/sax/test_parser_text.rb +0 -202
  106. data/test/xml/sax/test_push_parser.rb +0 -265
  107. data/test/xml/test_attr.rb +0 -96
  108. data/test/xml/test_attribute_decl.rb +0 -86
  109. data/test/xml/test_builder.rb +0 -353
  110. data/test/xml/test_c14n.rb +0 -180
  111. data/test/xml/test_cdata.rb +0 -54
  112. data/test/xml/test_comment.rb +0 -40
  113. data/test/xml/test_document.rb +0 -982
  114. data/test/xml/test_document_encoding.rb +0 -31
  115. data/test/xml/test_document_fragment.rb +0 -312
  116. data/test/xml/test_dtd.rb +0 -187
  117. data/test/xml/test_dtd_encoding.rb +0 -31
  118. data/test/xml/test_element_content.rb +0 -56
  119. data/test/xml/test_element_decl.rb +0 -73
  120. data/test/xml/test_entity_decl.rb +0 -122
  121. data/test/xml/test_entity_reference.rb +0 -262
  122. data/test/xml/test_namespace.rb +0 -96
  123. data/test/xml/test_node.rb +0 -1379
  124. data/test/xml/test_node_attributes.rb +0 -115
  125. data/test/xml/test_node_encoding.rb +0 -75
  126. data/test/xml/test_node_inheritance.rb +0 -32
  127. data/test/xml/test_node_reparenting.rb +0 -661
  128. data/test/xml/test_node_set.rb +0 -828
  129. data/test/xml/test_parse_options.rb +0 -64
  130. data/test/xml/test_processing_instruction.rb +0 -30
  131. data/test/xml/test_reader.rb +0 -620
  132. data/test/xml/test_reader_encoding.rb +0 -134
  133. data/test/xml/test_relax_ng.rb +0 -60
  134. data/test/xml/test_schema.rb +0 -142
  135. data/test/xml/test_syntax_error.rb +0 -36
  136. data/test/xml/test_text.rb +0 -69
  137. data/test/xml/test_unparented_node.rb +0 -483
  138. data/test/xml/test_xinclude.rb +0 -83
  139. data/test/xml/test_xpath.rb +0 -470
  140. data/test/xslt/test_custom_functions.rb +0 -133
  141. data/test/xslt/test_exception_handling.rb +0 -37
@@ -1,83 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestXInclude < Nokogiri::TestCase
6
- def setup
7
- super
8
- @xml = Nokogiri::XML.parse(File.read(XML_XINCLUDE_FILE), XML_XINCLUDE_FILE)
9
- @included = "this snippet is to be included from xinclude.xml"
10
- end
11
-
12
- def test_xinclude_on_document_parse
13
- skip("Pure Java version XInlcude has a conflict with NekoDTD setting. This will be fixed later.") if Nokogiri.jruby?
14
- # first test that xinclude works when requested
15
- xml_doc = nil
16
-
17
- File.open(XML_XINCLUDE_FILE) do |fp|
18
- xml_doc = Nokogiri::XML(fp) do |conf|
19
- conf.strict.dtdload.noent.nocdata.xinclude
20
- end
21
- end
22
-
23
- assert_not_nil xml_doc
24
- assert_not_nil included = xml_doc.at_xpath('//included')
25
- assert_equal @included, included.content
26
-
27
- # no xinclude should happen when not requested
28
- xml_doc = nil
29
-
30
- File.open(XML_XINCLUDE_FILE) do |fp|
31
- xml_doc = Nokogiri::XML(fp) do |conf|
32
- conf.strict.dtdload.noent.nocdata
33
- end
34
- end
35
-
36
- assert_not_nil xml_doc
37
- assert_nil xml_doc.at_xpath('//included')
38
- end
39
-
40
- def test_xinclude_on_document_node
41
- skip("Pure Java version turns XInlcude on against a parser.") if Nokogiri.jruby?
42
- assert_nil @xml.at_xpath('//included')
43
- @xml.do_xinclude
44
- assert_not_nil included = @xml.at_xpath('//included')
45
- assert_equal @included, included.content
46
- end
47
-
48
- def test_xinclude_on_element_subtree
49
- skip("Pure Java version turns XInlcude on against a parser.") if Nokogiri.jruby?
50
- assert_nil @xml.at_xpath('//included')
51
- @xml.root.do_xinclude
52
- assert_not_nil included = @xml.at_xpath('//included')
53
- assert_equal @included, included.content
54
- end
55
-
56
- def test_do_xinclude_accepts_block
57
- non_default_options = Nokogiri::XML::ParseOptions::NOBLANKS | \
58
- Nokogiri::XML::ParseOptions::XINCLUDE
59
-
60
- @xml.do_xinclude(non_default_options) do |options|
61
- assert_equal non_default_options, options.to_i
62
- end
63
- end
64
-
65
- def test_include_nonexistent_throws_exception
66
- skip("Pure Java version behaves differently") if Nokogiri.jruby?
67
- # break inclusion deliberately
68
- @xml.at_xpath('//xi:include')['href'] = "nonexistent.xml"
69
-
70
- exception_raised = false
71
- begin
72
- @xml.do_xinclude { |opts| opts.nowarning }
73
- rescue Exception => e
74
- assert_equal Nokogiri::XML::SyntaxError, e.class
75
- exception_raised = true
76
- end
77
-
78
- assert exception_raised
79
- end
80
-
81
- end
82
- end
83
- end
@@ -1,470 +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
- # Yours truly,
17
- #
18
- # The guy whose headaches belong to Nokogiri JRuby impl.
19
-
20
-
21
- def setup
22
- super
23
-
24
- @xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
25
-
26
- @ns = @xml.root.namespaces
27
-
28
- # TODO: Maybe I should move this to the original code.
29
- @ns["nokogiri"] = "http://www.nokogiri.org/default_ns/ruby/extensions_functions"
30
-
31
- @handler = Class.new {
32
- attr_reader :things
33
-
34
- def initialize
35
- @things = []
36
- end
37
-
38
- def thing thing
39
- @things << thing
40
- thing
41
- end
42
-
43
- def returns_array node_set
44
- @things << node_set.to_a
45
- node_set.to_a
46
- end
47
-
48
- def my_filter set, attribute, value
49
- set.find_all { |x| x[attribute] == value }
50
- end
51
-
52
- def saves_node_set node_set
53
- @things = node_set
54
- end
55
-
56
- def value
57
- 123.456
58
- end
59
-
60
- def anint
61
- 1230456
62
- end
63
- }.new
64
- end
65
-
66
- def test_variable_binding
67
- assert_equal 4, @xml.xpath('//address[@domestic=$value]', nil, :value => 'Yes').length
68
- end
69
-
70
- def test_variable_binding_with_search
71
- assert_equal 4, @xml.search('//address[@domestic=$value]', nil, :value => 'Yes').length
72
- end
73
-
74
- def test_unknown_attribute
75
- assert_equal 0, @xml.xpath('//employee[@id="asdfasdf"]/@fooo').length
76
- assert_nil @xml.xpath('//employee[@id="asdfasdf"]/@fooo')[0]
77
- end
78
-
79
- def test_boolean
80
- assert_equal false, @xml.xpath('1 = 2')
81
- end
82
-
83
- def test_number
84
- assert_equal 2, @xml.xpath('1 + 1')
85
- end
86
-
87
- def test_string
88
- assert_equal 'foo', @xml.xpath('concat("fo", "o")')
89
- end
90
-
91
- def test_node_search_with_multiple_queries
92
- xml = '<document>
93
- <thing>
94
- <div class="title">important thing</div>
95
- </thing>
96
- <thing>
97
- <div class="content">stuff</div>
98
- </thing>
99
- <thing>
100
- <p class="blah">more stuff</div>
101
- </thing>
102
- </document>'
103
- node = Nokogiri::XML(xml).root
104
- assert_kind_of Nokogiri::XML::Node, node
105
-
106
- assert_equal 3, node.xpath('.//div', './/p').length
107
- assert_equal 3, node.css('.title', '.content', 'p').length
108
- assert_equal 3, node.search('.//div', 'p.blah').length
109
- end
110
-
111
- def test_css_search_with_ambiguous_integer_or_string_attributes
112
- # https://github.com/sparklemotion/nokogiri/issues/711
113
- html = "<body><div><img width=200>"
114
- doc = Nokogiri::HTML(html)
115
- assert_not_nil doc.at_css("img[width='200']")
116
- assert_not_nil doc.at_css("img[width=200]")
117
- end
118
-
119
- def test_css_search_uses_custom_selectors_with_arguments
120
- set = @xml.css('employee > address:my_filter("domestic", "Yes")', @handler)
121
- assert set.length > 0
122
- set.each do |node|
123
- assert_equal 'Yes', node['domestic']
124
- end
125
- end
126
-
127
- def test_css_search_uses_custom_selectors
128
- set = @xml.xpath('//employee')
129
- @xml.css('employee:thing()', @handler)
130
- assert_equal(set.length, @handler.things.length)
131
- assert_equal(set.to_a, @handler.things.flatten)
132
- end
133
-
134
- def test_search_with_css_query_uses_custom_selectors_with_arguments
135
- set = @xml.search('employee > address:my_filter("domestic", "Yes")', @handler)
136
- assert set.length > 0
137
- set.each do |node|
138
- assert_equal 'Yes', node['domestic']
139
- end
140
- end
141
-
142
- def test_search_with_xpath_query_uses_custom_selectors_with_arguments
143
- set = if Nokogiri.uses_libxml?
144
- @xml.search('//employee/address[my_filter(., "domestic", "Yes")]', @handler)
145
- else
146
- @xml.search('//employee/address[nokogiri:my_filter(., "domestic", "Yes")]', @ns, @handler)
147
- end
148
- assert set.length > 0
149
- set.each do |node|
150
- assert_equal 'Yes', node['domestic']
151
- end
152
- end
153
-
154
- def test_pass_self_to_function
155
- set = if Nokogiri.uses_libxml?
156
- @xml.xpath('//employee/address[my_filter(., "domestic", "Yes")]', @handler)
157
- else
158
- @xml.xpath('//employee/address[nokogiri:my_filter(., "domestic", "Yes")]', @ns, @handler)
159
- end
160
- assert set.length > 0
161
- set.each do |node|
162
- assert_equal 'Yes', node['domestic']
163
- end
164
- end
165
-
166
- def test_custom_xpath_function_gets_strings
167
- set = @xml.xpath('//employee')
168
- if Nokogiri.uses_libxml?
169
- @xml.xpath('//employee[thing("asdf")]', @handler)
170
- else
171
- @xml.xpath('//employee[nokogiri:thing("asdf")]', @ns, @handler)
172
- end
173
- assert_equal(set.length, @handler.things.length)
174
- assert_equal(['asdf'] * set.length, @handler.things)
175
- end
176
-
177
- def parse_params node
178
- params={}
179
- node.xpath('./param').each do |p|
180
- subparams = parse_params p
181
- if(subparams.length > 0)
182
- if(not params.has_key? p.attributes['name'].value)
183
- params[p.attributes['name'].value] = subparams
184
- else
185
- if(params[p.attributes['name'].value].is_a? Array)
186
- params[p.attributes['name'].value] << subparams
187
- else
188
- value = params[p.attributes['name'].value]
189
- params[p.attributes['name'].value] = [value,subparams]
190
- end
191
- end
192
- else
193
- params[p.attributes['name'].value]=p.text
194
- end
195
- end
196
- params
197
- end
198
-
199
- # issue #741 (xpath() around 10x slower in JRuby)
200
- def test_slow_jruby_xpath
201
- skip("testing against an absolute time is brittle. help make this better! see https://github.com/sparklemotion/nokogiri/issues/741")
202
-
203
- doc = Nokogiri::XML(File.open(XPATH_FILE))
204
- start = Time.now
205
-
206
- doc.xpath('.//category').each do |c|
207
- c.xpath('programformats/programformat').each do |p|
208
- p.xpath('./modules/module').each do |m|
209
- parse_params m
210
- end
211
- end
212
- end
213
- stop = Time.now
214
- elapsed_time = stop - start
215
- time_limit = 20
216
- assert_send [elapsed_time, :<, time_limit], "XPath is taking too long"
217
- end
218
-
219
- # issue #1109 (jruby impl's xpath() cache not being cleared on attr removal)
220
- def test_xpath_results_cache_should_get_cleared_on_attr_removal
221
- doc = Nokogiri::HTML('<html><div name="foo"></div></html>')
222
- element = doc.at_xpath('//div[@name="foo"]')
223
- element.remove_attribute('name')
224
- assert_nil doc.at_xpath('//div[@name="foo"]')
225
- end
226
-
227
- # issue #1109 (jruby impl's xpath() cache not being cleared on attr update )
228
- def test_xpath_results_cache_should_get_cleared_on_attr_update
229
- doc = Nokogiri::HTML('<html><div name="foo"></div></html>')
230
- element = doc.at_xpath('//div[@name="foo"]')
231
- element['name'] = 'bar'
232
- assert_nil doc.at_xpath('//div[@name="foo"]')
233
- end
234
-
235
- def test_custom_xpath_function_returns_string
236
- if Nokogiri.uses_libxml?
237
- result = @xml.xpath('thing("asdf")', @handler)
238
- else
239
- result = @xml.xpath('nokogiri:thing("asdf")', @ns, @handler)
240
- end
241
- assert_equal 'asdf', result
242
- end
243
-
244
- def test_custom_xpath_gets_true_booleans
245
- set = @xml.xpath('//employee')
246
- if Nokogiri.uses_libxml?
247
- @xml.xpath('//employee[thing(true())]', @handler)
248
- else
249
- @xml.xpath("//employee[nokogiri:thing(true())]", @ns, @handler)
250
- end
251
- assert_equal(set.length, @handler.things.length)
252
- assert_equal([true] * set.length, @handler.things)
253
- end
254
-
255
- def test_custom_xpath_gets_false_booleans
256
- set = @xml.xpath('//employee')
257
- if Nokogiri.uses_libxml?
258
- @xml.xpath('//employee[thing(false())]', @handler)
259
- else
260
- @xml.xpath("//employee[nokogiri:thing(false())]", @ns, @handler)
261
- end
262
- assert_equal(set.length, @handler.things.length)
263
- assert_equal([false] * set.length, @handler.things)
264
- end
265
-
266
- def test_custom_xpath_gets_numbers
267
- set = @xml.xpath('//employee')
268
- if Nokogiri.uses_libxml?
269
- @xml.xpath('//employee[thing(10)]', @handler)
270
- else
271
- @xml.xpath('//employee[nokogiri:thing(10)]', @ns, @handler)
272
- end
273
- assert_equal(set.length, @handler.things.length)
274
- assert_equal([10] * set.length, @handler.things)
275
- end
276
-
277
- def test_custom_xpath_gets_node_sets
278
- set = @xml.xpath('//employee/name')
279
- if Nokogiri.uses_libxml?
280
- @xml.xpath('//employee[thing(name)]', @handler)
281
- else
282
- @xml.xpath('//employee[nokogiri:thing(name)]', @ns, @handler)
283
- end
284
- assert_equal(set.length, @handler.things.length)
285
- assert_equal(set.to_a, @handler.things.flatten)
286
- end
287
-
288
- def test_custom_xpath_gets_node_sets_and_returns_array
289
- set = @xml.xpath('//employee/name')
290
- if Nokogiri.uses_libxml?
291
- @xml.xpath('//employee[returns_array(name)]', @handler)
292
- else
293
- @xml.xpath('//employee[nokogiri:returns_array(name)]', @ns, @handler)
294
- end
295
- assert_equal(set.length, @handler.things.length)
296
- assert_equal(set.to_a, @handler.things.flatten)
297
- end
298
-
299
- def test_custom_xpath_handler_is_passed_a_decorated_node_set
300
- x = Module.new do
301
- def awesome! ; end
302
- end
303
- util_decorate(@xml, x)
304
-
305
- assert @xml.xpath('//employee/name')
306
-
307
- @xml.xpath('//employee[saves_node_set(name)]', @handler)
308
- assert_equal @xml, @handler.things.document
309
- assert @handler.things.respond_to?(:awesome!)
310
- end
311
-
312
- def test_code_that_invokes_OP_RESET_inside_libxml2
313
- doc = "<html><body id='foo'><foo>hi</foo></body></html>"
314
- xpath = 'id("foo")//foo'
315
- nokogiri = Nokogiri::HTML.parse(doc)
316
- assert nokogiri.xpath(xpath)
317
- end
318
-
319
- def test_custom_xpath_handler_with_args_under_gc_pressure
320
- # see http://github.com/sparklemotion/nokogiri/issues/#issue/345
321
- tool_inspector = Class.new do
322
- def name_equals(nodeset, name, *args)
323
- nodeset.all? do |node|
324
- args.each { |thing| thing.inspect }
325
- node["name"] == name
326
- end
327
- end
328
- end.new
329
-
330
- xml = <<-EOXML
331
- <toolbox>
332
- #{"<tool name='hammer'/><tool name='wrench'/>" * 10}
333
- </toolbox>
334
- EOXML
335
- doc = Nokogiri::XML xml
336
-
337
- # long list of long arguments, to apply GC pressure during
338
- # ruby_funcall argument marshalling
339
- xpath = ["//tool[name_equals(.,'hammer'"]
340
- 1000.times { xpath << "'unused argument #{'x' * 1000}'" }
341
- xpath << "'unused argument')]"
342
- xpath = xpath.join(',')
343
-
344
- assert_equal doc.xpath("//tool[@name='hammer']"), doc.xpath(xpath, tool_inspector)
345
- end
346
-
347
- def test_custom_xpath_without_arguments
348
- if Nokogiri.uses_libxml?
349
- value = @xml.xpath('value()', @handler)
350
- else
351
- value = @xml.xpath('nokogiri:value()', @ns, @handler)
352
- end
353
- assert_equal 123.456, value
354
- end
355
-
356
- def test_custom_xpath_without_arguments_returning_int
357
- if Nokogiri.uses_libxml?
358
- value = @xml.xpath('anint()', @handler)
359
- else
360
- value = @xml.xpath('nokogiri:anint()', @ns, @handler)
361
- end
362
- assert_equal 1230456, value
363
- end
364
-
365
- def test_custom_xpath_with_bullshit_arguments
366
- xml = %q{<foo> </foo>}
367
- doc = Nokogiri::XML.parse(xml)
368
- foo = doc.xpath('//foo[bool_function(bar/baz)]', Class.new {
369
- def bool_function(value)
370
- true
371
- end
372
- }.new)
373
- assert_equal foo, doc.xpath("//foo")
374
- end
375
-
376
- def test_node_set_should_be_decorated
377
- # "called decorate on nill" exception in JRuby issue#514
378
- process_output= <<END
379
- <test>
380
- <track type="Image">
381
- <Format>LZ77</Format>
382
- </test>
383
- END
384
- doc = Nokogiri::XML.parse(process_output)
385
- node = doc.xpath(%{//track[@type='Video']})
386
- assert_equal "[]", node.xpath("Format").inspect
387
- end
388
-
389
- def test_very_specific_xml_xpath_making_problems_in_jruby
390
- # manually merges pull request #681
391
- xml_string = %q{<?xml version="1.0" encoding="UTF-8"?>
392
- <ONIXMessage xmlns:elibri="http://elibri.com.pl/ns/extensions" release="3.0" xmlns="http://www.editeur.org/onix/3.0/reference">
393
- <Product>
394
- <RecordReference>a</RecordReference>
395
- </Product>
396
- </ONIXMessage>}
397
-
398
- xml_doc = Nokogiri::XML(xml_string)
399
- onix = xml_doc.children.first
400
- assert_equal 'a', onix.at_xpath('xmlns:Product').at_xpath('xmlns:RecordReference').text
401
- end
402
-
403
- def test_xpath_after_attribute_change
404
- xml_string = %q{<?xml version="1.0" encoding="UTF-8"?>
405
- <mods version="3.0" xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-0.xsd" xmlns="http://www.loc.gov/mods/v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
406
- <titleInfo>
407
- <nonSort>THE</nonSort>
408
- <title xml:lang="eng">ARTICLE TITLE HYDRANGEA ARTICLE 1</title>
409
- <subTitle>SUBTITLE</subTitle>
410
- </titleInfo>
411
- <titleInfo lang="finnish">
412
- <title>Artikkelin otsikko Hydrangea artiklan 1</title>
413
- </titleInfo>
414
- </mods>}
415
-
416
- xml_doc = Nokogiri::XML(xml_string)
417
- ns_hash = {'mods'=>'http://www.loc.gov/mods/v3'}
418
- node = xml_doc.at_xpath('//mods:titleInfo[1]',ns_hash)
419
- node['lang'] = 'english'
420
- assert_equal 1, xml_doc.xpath('//mods:titleInfo[1]/@lang',ns_hash).length
421
- assert_equal 'english', xml_doc.xpath('//mods:titleInfo[1]/@lang',ns_hash).first.value
422
- end
423
-
424
- def test_xpath_after_element_removal
425
- xml_string = %q{<?xml version="1.0" encoding="UTF-8"?>
426
- <mods version="3.0" xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-0.xsd" xmlns="http://www.loc.gov/mods/v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
427
- <titleInfo>
428
- <nonSort>THE</nonSort>
429
- <title xml:lang="eng">ARTICLE TITLE HYDRANGEA ARTICLE 1</title>
430
- <subTitle>SUBTITLE</subTitle>
431
- </titleInfo>
432
- <titleInfo lang="finnish">
433
- <title>Artikkelin otsikko Hydrangea artiklan 1</title>
434
- </titleInfo>
435
- </mods>}
436
-
437
- xml_doc = Nokogiri::XML(xml_string)
438
- ns_hash = {'mods'=>'http://www.loc.gov/mods/v3'}
439
- node = xml_doc.at_xpath('//mods:titleInfo[1]',ns_hash)
440
- node.remove
441
- assert_equal 1, xml_doc.xpath('//mods:titleInfo',ns_hash).length
442
- assert_equal 'finnish', xml_doc.xpath('//mods:titleInfo[1]/@lang',ns_hash).first.value
443
- end
444
-
445
- def test_xpath_after_reset_doc_via_innerhtml
446
- xml = <<XML
447
- <?xml version="1.0" encoding="UTF-8"?>
448
- <document xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0">
449
- <text:section name="Section1">[TEXT_INSIDE_SECTION]</text:section>
450
- </document>
451
- XML
452
-
453
- doc = Nokogiri::XML(xml)
454
- doc.inner_html = doc.inner_html
455
- sections = doc.xpath(".//text:section[@name='Section1']")
456
- assert_equal 1, sections.size
457
- assert_equal "[TEXT_INSIDE_SECTION]", sections.first.text
458
- end
459
-
460
- def test_xpath_syntax_error
461
- doc = Nokogiri::XML('<ns1:Root></ns1:Root>')
462
- begin
463
- doc.xpath('//ns1:Root')
464
- rescue => e
465
- assert_equal false, e.message.include?('0:0')
466
- end
467
- end
468
- end
469
- end
470
- end