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,28 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class Node
6
- class TestSaveOptions < Nokogiri::TestCase
7
- SaveOptions.constants.each do |constant|
8
- class_eval <<-EOEVAL
9
- def test_predicate_#{constant.downcase}
10
- options = SaveOptions.new(SaveOptions::#{constant})
11
- assert options.#{constant.downcase}?
12
-
13
- assert SaveOptions.new.#{constant.downcase}.#{constant.downcase}?
14
- end
15
- EOEVAL
16
- end
17
-
18
- def test_default_xml_save_options
19
- if Nokogiri.jruby?
20
- assert_equal 0, (SaveOptions::DEFAULT_XML & SaveOptions::FORMAT)
21
- else
22
- assert_equal SaveOptions::FORMAT, (SaveOptions::DEFAULT_XML & SaveOptions::FORMAT)
23
- end
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,44 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class Node
6
- class TestSubclass < Nokogiri::TestCase
7
- {
8
- Nokogiri::XML::CDATA => 'doc, "foo"',
9
- Nokogiri::XML::Attr => 'doc, "foo"',
10
- Nokogiri::XML::Comment => 'doc, "foo"',
11
- Nokogiri::XML::EntityReference => 'doc, "foo"',
12
- Nokogiri::XML::ProcessingInstruction => 'doc, "foo", "bar"',
13
- Nokogiri::XML::DocumentFragment => 'doc',
14
- Nokogiri::XML::Node => '"foo", doc',
15
- Nokogiri::XML::Text => '"foo", doc',
16
- }.each do |klass, constructor|
17
- class_eval %{
18
- def test_subclass_#{klass.name.gsub('::', '_')}
19
- doc = Nokogiri::XML::Document.new
20
- klass = Class.new(#{klass.name})
21
- node = klass.new(#{constructor})
22
- assert_instance_of klass, node
23
- end
24
- }
25
-
26
- class_eval <<-eocode, __FILE__, __LINE__ + 1
27
- def test_subclass_initialize_#{klass.name.gsub('::', '_')}
28
- doc = Nokogiri::XML::Document.new
29
- klass = Class.new(#{klass.name}) do
30
- attr_accessor :initialized_with
31
-
32
- def initialize *args
33
- @initialized_with = args
34
- end
35
- end
36
- node = klass.new(#{constructor}, 1)
37
- assert_equal [#{constructor}, 1], node.initialized_with
38
- end
39
- eocode
40
- end
41
- end
42
- end
43
- end
44
- end
@@ -1,402 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require "helper"
4
-
5
- module Nokogiri
6
- module XML
7
- module SAX
8
- class TestParser < Nokogiri::SAX::TestCase
9
- def setup
10
- super
11
- @parser = XML::SAX::Parser.new(Doc.new)
12
- end
13
-
14
- def test_parser_context_yielded_io
15
- doc = Doc.new
16
- parser = XML::SAX::Parser.new doc
17
- xml = "<foo a='&amp;b'/>"
18
-
19
- block_called = false
20
- parser.parse(StringIO.new(xml)) { |ctx|
21
- block_called = true
22
- ctx.replace_entities = true
23
- }
24
-
25
- assert block_called
26
-
27
- assert_equal [['foo', [['a', '&b']]]], doc.start_elements
28
- end
29
-
30
- def test_parser_context_yielded_in_memory
31
- doc = Doc.new
32
- parser = XML::SAX::Parser.new doc
33
- xml = "<foo a='&amp;b'/>"
34
-
35
- block_called = false
36
- parser.parse(xml) { |ctx|
37
- block_called = true
38
- ctx.replace_entities = true
39
- }
40
-
41
- assert block_called
42
-
43
- assert_equal [['foo', [['a', '&b']]]], doc.start_elements
44
- end
45
-
46
- def test_empty_decl
47
- parser = XML::SAX::Parser.new(Doc.new)
48
-
49
- xml = "<root />"
50
- parser.parse xml
51
- assert parser.document.start_document_called, xml
52
- assert_nil parser.document.xmldecls, xml
53
- end
54
-
55
- def test_xml_decl
56
- [
57
- ['<?xml version="1.0" ?>',
58
- ['1.0']],
59
- ['<?xml version="1.0" encoding="UTF-8" ?>',
60
- ['1.0', 'UTF-8']],
61
- ['<?xml version="1.0" standalone="yes"?>',
62
- ['1.0', 'yes']],
63
- ['<?xml version="1.0" standalone="no"?>',
64
- ['1.0', 'no']],
65
- ['<?xml version="1.0" encoding="UTF-8" standalone="no"?>',
66
- ['1.0', "UTF-8", 'no']],
67
- ['<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>',
68
- ['1.0', "ISO-8859-1", 'yes']]
69
- ].each do |decl, value|
70
- parser = XML::SAX::Parser.new(Doc.new)
71
-
72
- xml = "#{decl}\n<root />"
73
- parser.parse xml
74
- assert parser.document.start_document_called, xml
75
- assert_equal value, parser.document.xmldecls, xml
76
- end
77
- end
78
-
79
- def test_parse_empty
80
- assert_raises RuntimeError do
81
- @parser.parse('')
82
- end
83
- end
84
-
85
- def test_namespace_declaration_order_is_saved
86
- @parser.parse <<-eoxml
87
- <root xmlns:foo='http://foo.example.com/' xmlns='http://example.com/'>
88
- <a foo:bar='hello' />
89
- </root>
90
- eoxml
91
- assert_equal 2, @parser.document.start_elements_namespace.length
92
- el = @parser.document.start_elements_namespace.first
93
- namespaces = el.last
94
- assert_equal ['foo', 'http://foo.example.com/'], namespaces.first
95
- assert_equal [nil, 'http://example.com/'], namespaces.last
96
- end
97
-
98
- def test_bad_document_calls_error_handler
99
- @parser.parse('<foo><bar></foo>')
100
- assert @parser.document.errors
101
- assert @parser.document.errors.length > 0
102
- end
103
-
104
- def test_namespace_are_super_fun_to_parse
105
- @parser.parse <<-eoxml
106
- <root xmlns:foo='http://foo.example.com/'>
107
- <a foo:bar='hello' />
108
- <b xmlns:foo='http://bar.example.com/'>
109
- <a foo:bar='hello' />
110
- </b>
111
- <foo:bar>hello world</foo:bar>
112
- </root>
113
- eoxml
114
-
115
- assert @parser.document.start_elements_namespace.length > 0
116
- el = @parser.document.start_elements_namespace[1]
117
- assert_equal 'a', el.first
118
- assert_equal 1, el[1].length
119
-
120
- attribute = el[1].first
121
- assert_equal 'bar', attribute.localname
122
- assert_equal 'foo', attribute.prefix
123
- assert_equal 'hello', attribute.value
124
- assert_equal 'http://foo.example.com/', attribute.uri
125
- end
126
-
127
- def test_sax_v1_namespace_attribute_declarations
128
- @parser.parse <<-eoxml
129
- <root xmlns:foo='http://foo.example.com/' xmlns='http://example.com/'>
130
- <a foo:bar='hello' />
131
- <b xmlns:foo='http://bar.example.com/'>
132
- <a foo:bar='hello' />
133
- </b>
134
- <foo:bar>hello world</foo:bar>
135
- </root>
136
- eoxml
137
- assert @parser.document.start_elements.length > 0
138
- elm = @parser.document.start_elements.first
139
- assert_equal 'root', elm.first
140
- assert elm[1].include?(['xmlns:foo', 'http://foo.example.com/'])
141
- assert elm[1].include?(['xmlns', 'http://example.com/'])
142
- end
143
-
144
- def test_sax_v1_namespace_nodes
145
- @parser.parse <<-eoxml
146
- <root xmlns:foo='http://foo.example.com/' xmlns='http://example.com/'>
147
- <a foo:bar='hello' />
148
- <b xmlns:foo='http://bar.example.com/'>
149
- <a foo:bar='hello' />
150
- </b>
151
- <foo:bar>hello world</foo:bar>
152
- </root>
153
- eoxml
154
- assert_equal 5, @parser.document.start_elements.length
155
- assert @parser.document.start_elements.map(&:first).include?('foo:bar')
156
- assert @parser.document.end_elements.map(&:first).include?('foo:bar')
157
- end
158
-
159
- def test_start_is_called_without_namespace
160
- @parser.parse(<<-eoxml)
161
- <root xmlns:foo='http://foo.example.com/' xmlns='http://example.com/'>
162
- <foo:f><bar></foo:f>
163
- </root>
164
- eoxml
165
- assert_equal ['root', 'foo:f', 'bar'],
166
- @parser.document.start_elements.map(&:first)
167
- end
168
-
169
- def test_parser_sets_encoding
170
- parser = XML::SAX::Parser.new(Doc.new, 'UTF-8')
171
- assert_equal 'UTF-8', parser.encoding
172
- end
173
-
174
- def test_errors_set_after_parsing_bad_dom
175
- doc = Nokogiri::XML('<foo><bar></foo>')
176
- assert doc.errors
177
-
178
- @parser.parse('<foo><bar></foo>')
179
- assert @parser.document.errors
180
- assert @parser.document.errors.length > 0
181
-
182
- doc.errors.each do |error|
183
- assert_equal 'UTF-8', error.message.encoding.name
184
- end
185
-
186
- # when using JRuby Nokogiri, more errors will be generated as the DOM
187
- # parser continue to parse an ill formed document, while the sax parser
188
- # will stop at the first error
189
- unless Nokogiri.jruby?
190
- assert_equal doc.errors.length, @parser.document.errors.length
191
- end
192
- end
193
-
194
- def test_parse_with_memory_argument
195
- @parser.parse(File.read(XML_FILE))
196
- assert(@parser.document.cdata_blocks.length > 0)
197
- end
198
-
199
- def test_parse_with_io_argument
200
- File.open(XML_FILE, 'rb') { |f|
201
- @parser.parse(f)
202
- }
203
- assert(@parser.document.cdata_blocks.length > 0)
204
- end
205
-
206
- def test_parse_io
207
- call_parse_io_with_encoding 'UTF-8'
208
- end
209
-
210
- # issue #828
211
- def test_parse_io_lower_case_encoding
212
- call_parse_io_with_encoding 'utf-8'
213
- end
214
-
215
- def call_parse_io_with_encoding encoding
216
- File.open(XML_FILE, 'rb') { |f|
217
- @parser.parse_io(f, encoding)
218
- }
219
- assert(@parser.document.cdata_blocks.length > 0)
220
-
221
- called = false
222
- @parser.document.start_elements.flatten.each do |thing|
223
- assert_equal 'UTF-8', thing.encoding.name
224
- called = true
225
- end
226
- assert called
227
-
228
- called = false
229
- @parser.document.end_elements.flatten.each do |thing|
230
- assert_equal 'UTF-8', thing.encoding.name
231
- called = true
232
- end
233
- assert called
234
-
235
- called = false
236
- @parser.document.data.each do |thing|
237
- assert_equal 'UTF-8', thing.encoding.name
238
- called = true
239
- end
240
- assert called
241
-
242
- called = false
243
- @parser.document.comments.flatten.each do |thing|
244
- assert_equal 'UTF-8', thing.encoding.name
245
- called = true
246
- end
247
- assert called
248
-
249
- called = false
250
- @parser.document.cdata_blocks.flatten.each do |thing|
251
- assert_equal 'UTF-8', thing.encoding.name
252
- called = true
253
- end
254
- assert called
255
- end
256
-
257
- def test_parse_file
258
- @parser.parse_file(XML_FILE)
259
-
260
- assert_raises(ArgumentError) {
261
- @parser.parse_file(nil)
262
- }
263
-
264
- assert_raises(Errno::ENOENT) {
265
- @parser.parse_file('')
266
- }
267
- assert_raises(Errno::EISDIR) {
268
- @parser.parse_file(File.expand_path(File.dirname(__FILE__)))
269
- }
270
- end
271
-
272
- def test_render_parse_nil_param
273
- assert_raises(ArgumentError) { @parser.parse_memory(nil) }
274
- end
275
-
276
- def test_bad_encoding_args
277
- assert_raises(ArgumentError) { XML::SAX::Parser.new(Doc.new, 'not an encoding') }
278
- assert_raises(ArgumentError) { @parser.parse_io(StringIO.new('<root/>'), 'not an encoding')}
279
- end
280
-
281
- def test_ctag
282
- @parser.parse_memory(<<-eoxml)
283
- <p id="asdfasdf">
284
- <![CDATA[ This is a comment ]]>
285
- Paragraph 1
286
- </p>
287
- eoxml
288
- assert_equal [' This is a comment '], @parser.document.cdata_blocks
289
- end
290
-
291
- def test_comment
292
- @parser.parse_memory(<<-eoxml)
293
- <p id="asdfasdf">
294
- <!-- This is a comment -->
295
- Paragraph 1
296
- </p>
297
- eoxml
298
- assert_equal [' This is a comment '], @parser.document.comments
299
- end
300
-
301
- def test_characters
302
- @parser.parse_memory(<<-eoxml)
303
- <p id="asdfasdf">Paragraph 1</p>
304
- eoxml
305
- assert_equal ['Paragraph 1'], @parser.document.data
306
- end
307
-
308
- def test_end_document
309
- @parser.parse_memory(<<-eoxml)
310
- <p id="asdfasdf">Paragraph 1</p>
311
- eoxml
312
- assert @parser.document.end_document_called
313
- end
314
-
315
- def test_end_element
316
- @parser.parse_memory(<<-eoxml)
317
- <p id="asdfasdf">Paragraph 1</p>
318
- eoxml
319
- assert_equal [["p"]],
320
- @parser.document.end_elements
321
- end
322
-
323
- def test_start_element_attrs
324
- @parser.parse_memory(<<-eoxml)
325
- <p id="asdfasdf">Paragraph 1</p>
326
- eoxml
327
- assert_equal [["p", [["id", "asdfasdf"]]]],
328
- @parser.document.start_elements
329
- end
330
-
331
- def test_start_element_attrs_include_namespaces
332
- @parser.parse_memory(<<-eoxml)
333
- <p xmlns:foo='http://foo.example.com/'>Paragraph 1</p>
334
- eoxml
335
- assert_equal [["p", [['xmlns:foo', 'http://foo.example.com/']]]],
336
- @parser.document.start_elements
337
- end
338
-
339
- def test_processing_instruction
340
- @parser.parse_memory(<<-eoxml)
341
- <?xml-stylesheet href="a.xsl" type="text/xsl"?>
342
- <?xml version="1.0"?>
343
- eoxml
344
- assert_equal [['xml-stylesheet', 'href="a.xsl" type="text/xsl"']],
345
- @parser.document.processing_instructions
346
- end
347
-
348
- if Nokogiri.uses_libxml? # JRuby SAXParser only parses well-formed XML documents
349
- def test_parse_document
350
- @parser.parse_memory(<<-eoxml)
351
- <p>Paragraph 1</p>
352
- <p>Paragraph 2</p>
353
- eoxml
354
- end
355
- end
356
-
357
- def test_parser_attributes
358
- xml = <<-eoxml
359
- <?xml version="1.0" ?><root><foo a="&amp;b" c="&gt;d" /></root>
360
- eoxml
361
-
362
- block_called = false
363
- @parser.parse(xml) { |ctx|
364
- block_called = true
365
- ctx.replace_entities = true
366
- }
367
-
368
- assert block_called
369
-
370
- assert_equal [['root', []], ['foo', [['a', '&b'], ['c', '>d']]]], @parser.document.start_elements
371
- end
372
-
373
- def test_recovery_from_incorrect_xml
374
- xml = <<-eoxml
375
- <?xml version="1.0" ?><Root><Data><?xml version='1.0'?><Item>hey</Item></Data><Data><Item>hey yourself</Item></Data></Root>
376
- eoxml
377
-
378
- block_called = false
379
- @parser.parse(xml) { |ctx|
380
- block_called = true
381
- ctx.recovery = true
382
- }
383
-
384
- assert block_called
385
-
386
- assert_equal [['Root', []], ['Data', []], ['Item', []], ['Data', []], ['Item', []]], @parser.document.start_elements
387
- end
388
-
389
- def test_square_bracket_in_text # issue 1261
390
- xml = <<-eoxml
391
- <tu tuid="87dea04cf60af103ff09d1dba36ae820" segtype="block">
392
- <prop type="x-smartling-string-variant">en:#:home_page:#:stories:#:[6]:#:name</prop>
393
- <tuv xml:lang="en-US"><seg>Sandy S.</seg></tuv>
394
- </tu>
395
- eoxml
396
- @parser.parse(xml)
397
- assert @parser.document.data.must_include "en:#:home_page:#:stories:#:[6]:#:name"
398
- end
399
- end
400
- end
401
- end
402
- end