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,74 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestAttr < Nokogiri::TestCase
6
- def test_new
7
- 100.times {
8
- doc = Nokogiri::XML::Document.new
9
- assert doc
10
- assert Nokogiri::XML::Attr.new(doc, 'foo')
11
- }
12
- end
13
-
14
- def test_new_raises_argerror_on_nondocument
15
- document = Nokogiri::XML "<root><foo/></root>"
16
- assert_raises ArgumentError do
17
- Nokogiri::XML::Attr.new document.at_css("foo"), "bar"
18
- end
19
- end
20
-
21
- def test_content=
22
- xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
23
- address = xml.xpath('//address')[3]
24
- street = address.attributes['street']
25
- street.content = "Y&ent1;"
26
- assert_equal "Y&ent1;", street.value
27
- end
28
-
29
- def test_value=
30
- xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
31
- address = xml.xpath('//address')[3]
32
- street = address.attributes['street']
33
- street.value = "Y&ent1;"
34
- assert_equal "Y&ent1;", street.value
35
- end
36
-
37
- def test_unlink # aliased as :remove
38
- xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)
39
- address = xml.xpath('/staff/employee/address').first
40
- assert_equal 'Yes', address['domestic']
41
-
42
- attr = address.attribute_nodes.first
43
- return_val = attr.unlink
44
- assert_nil address['domestic']
45
- assert_equal attr, return_val
46
- end
47
-
48
- def test_parsing_attribute_namespace
49
- doc = Nokogiri::XML <<-EOXML
50
- <root xmlns='http://google.com/' xmlns:f='http://flavorjon.es/'>
51
- <div f:myattr='foo'></div>
52
- </root>
53
- EOXML
54
-
55
- node = doc.at_css "div"
56
- attr = node.attributes["myattr"]
57
- assert_equal "http://flavorjon.es/", attr.namespace.href
58
- end
59
-
60
- def test_setting_attribute_namespace
61
- doc = Nokogiri::XML <<-EOXML
62
- <root xmlns='http://google.com/' xmlns:f='http://flavorjon.es/'>
63
- <div f:myattr='foo'></div>
64
- </root>
65
- EOXML
66
-
67
- node = doc.at_css "div"
68
- attr = node.attributes["myattr"]
69
- attr.add_namespace("fizzle", "http://fizzle.com/")
70
- assert_equal "http://fizzle.com/", attr.namespace.href
71
- end
72
- end
73
- end
74
- end
@@ -1,86 +0,0 @@
1
- require "helper"
2
-
3
- module Nokogiri
4
- module XML
5
- class TestAttributeDecl < Nokogiri::TestCase
6
- def setup
7
- super
8
- @xml = Nokogiri::XML(<<-eoxml)
9
- <?xml version="1.0"?><?TEST-STYLE PIDATA?>
10
- <!DOCTYPE staff SYSTEM "staff.dtd" [
11
- <!ATTLIST br width CDATA "0">
12
- <!ATTLIST a width CDATA "0">
13
- <!ATTLIST payment type (check|cash) "cash">
14
- ]>
15
- <root />
16
- eoxml
17
- @attrs = @xml.internal_subset.children
18
- @attr_decl = @attrs.first
19
- end
20
-
21
- def test_inspect
22
- assert_equal(
23
- "#<#{@attr_decl.class.name}:#{sprintf("0x%x", @attr_decl.object_id)} #{@attr_decl.to_s.inspect}>",
24
- @attr_decl.inspect
25
- )
26
- end
27
-
28
- def test_type
29
- assert_equal 16, @attr_decl.type
30
- end
31
-
32
- def test_class
33
- assert_instance_of Nokogiri::XML::AttributeDecl, @attr_decl
34
- end
35
-
36
- def test_content
37
- assert_raise NoMethodError do
38
- @attr_decl.content
39
- end
40
- end
41
-
42
- def test_attributes
43
- assert_raise NoMethodError do
44
- @attr_decl.attributes
45
- end
46
- end
47
-
48
- def test_namespace
49
- assert_raise NoMethodError do
50
- @attr_decl.namespace
51
- end
52
- end
53
-
54
- def test_namespace_definitions
55
- assert_raise NoMethodError do
56
- @attr_decl.namespace_definitions
57
- end
58
- end
59
-
60
- def test_line
61
- assert_raise NoMethodError do
62
- @attr_decl.line
63
- end
64
- end
65
-
66
- def test_attribute_type
67
- if Nokogiri.uses_libxml?
68
- assert_equal 1, @attr_decl.attribute_type
69
- else
70
- assert_equal 'CDATA', @attr_decl.attribute_type
71
- end
72
- end
73
-
74
- def test_default
75
- assert_equal '0', @attr_decl.default
76
- assert_equal '0', @attrs[1].default
77
- end
78
-
79
- def test_enumeration
80
- assert_equal [], @attr_decl.enumeration
81
- assert_equal ['check', 'cash'], @attrs[2].enumeration
82
- end
83
- end
84
- end
85
- end
86
-
@@ -1,341 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require "helper"
4
-
5
- module Nokogiri
6
- module XML
7
- class TestBuilder < Nokogiri::TestCase
8
- def test_attribute_sensitivity
9
- xml = Nokogiri::XML::Builder.new { |x|
10
- x.tag "hello", "abcDef" => "world"
11
- }.to_xml
12
- doc = Nokogiri.XML xml
13
- assert_equal 'world', doc.root['abcDef']
14
- end
15
-
16
- def test_builder_multiple_nodes
17
- Nokogiri::XML::Builder.new do |xml|
18
- 0.upto(10) do
19
- xml.text "test"
20
- end
21
- end
22
- end
23
-
24
-
25
- def test_builder_with_utf8_text
26
- text = "test ﺵ "
27
- doc = Nokogiri::XML::Builder.new(:encoding => "UTF-8") { |xml| xml.test text }.doc
28
- assert_equal text, doc.content
29
- end
30
-
31
- def test_builder_escape
32
- xml = Nokogiri::XML::Builder.new { |x|
33
- x.condition "value < 1", :attr => "value < 1"
34
- }.to_xml
35
- doc = Nokogiri.XML xml
36
- assert_equal 'value < 1', doc.root['attr']
37
- assert_equal 'value < 1', doc.root.content
38
- end
39
-
40
- def test_builder_namespace
41
- doc = Nokogiri::XML::Builder.new { |xml|
42
- xml.a("xmlns:a" => "x") do
43
- xml.b("xmlns:a" => "x", "xmlns:b" => "y")
44
- end
45
- }.doc
46
-
47
- b = doc.at('b')
48
- assert b
49
- assert_equal({"xmlns:a"=>"x", "xmlns:b"=>"y"}, b.namespaces)
50
- assert_equal({"xmlns:b"=>"y"}, namespaces_defined_on(b))
51
- end
52
-
53
- def test_builder_namespace_part_deux
54
- doc = Nokogiri::XML::Builder.new { |xml|
55
- xml.a("xmlns:b" => "y") do
56
- xml.b("xmlns:a" => "x", "xmlns:b" => "y", "xmlns:c" => "z")
57
- end
58
- }.doc
59
-
60
- b = doc.at('b')
61
- assert b
62
- assert_equal({"xmlns:a"=>"x", "xmlns:b"=>"y", "xmlns:c"=>"z"}, b.namespaces)
63
- assert_equal({"xmlns:a"=>"x", "xmlns:c"=>"z"}, namespaces_defined_on(b))
64
- end
65
-
66
- def test_builder_with_unlink
67
- b = Nokogiri::XML::Builder.new do |xml|
68
- xml.foo do
69
- xml.bar { xml.parent.unlink }
70
- xml.bar2
71
- end
72
- end
73
- assert b
74
- end
75
-
76
- def test_with_root
77
- doc = Nokogiri::XML(File.read(XML_FILE))
78
- Nokogiri::XML::Builder.with(doc.at('employee')) do |xml|
79
- xml.foo
80
- end
81
- assert_equal 1, doc.xpath('//employee/foo').length
82
- end
83
-
84
- def test_root_namespace_default_decl
85
- b = Nokogiri::XML::Builder.new { |xml| xml.root(:xmlns => 'one:two') }
86
- doc = b.doc
87
- assert_equal 'one:two', doc.root.namespace.href
88
- assert_equal({ 'xmlns' => 'one:two' }, doc.root.namespaces)
89
- end
90
-
91
- def test_root_namespace_multi_decl
92
- b = Nokogiri::XML::Builder.new { |xml|
93
- xml.root(:xmlns => 'one:two', 'xmlns:foo' => 'bar') do
94
- xml.hello
95
- end
96
- }
97
- doc = b.doc
98
- assert_equal 'one:two', doc.root.namespace.href
99
- assert_equal({ 'xmlns' => 'one:two', 'xmlns:foo' => 'bar' }, doc.root.namespaces)
100
-
101
- assert_equal 'one:two', doc.at('hello').namespace.href
102
- end
103
-
104
- def test_non_root_namespace
105
- b = Nokogiri::XML::Builder.new { |xml|
106
- xml.root { xml.hello(:xmlns => 'one') }
107
- }
108
- assert_equal 'one', b.doc.at('hello', 'xmlns' => 'one').namespace.href
109
- end
110
-
111
- def test_specify_namespace
112
- b = Nokogiri::XML::Builder.new { |xml|
113
- xml.root('xmlns:foo' => 'bar') do
114
- xml[:foo].bar
115
- xml['foo'].baz
116
- end
117
- }
118
- doc = b.doc
119
- assert_equal 'bar', doc.at('foo|bar', 'foo' => 'bar').namespace.href
120
- assert_equal 'bar', doc.at('foo|baz', 'foo' => 'bar').namespace.href
121
- end
122
-
123
- def test_dtd_in_builder_output
124
- builder = Nokogiri::XML::Builder.new do |xml|
125
- xml.doc.create_internal_subset(
126
- 'html',
127
- "-//W3C//DTD HTML 4.01 Transitional//EN",
128
- "http://www.w3.org/TR/html4/loose.dtd"
129
- )
130
- xml.root do
131
- xml.foo
132
- end
133
- end
134
- assert_match(/<!DOCTYPE html PUBLIC "-\/\/W3C\/\/DTD HTML 4.01 Transitional\/\/EN" "http:\/\/www.w3.org\/TR\/html4\/loose.dtd">/,
135
- builder.to_xml)
136
- end
137
-
138
- def test_specify_namespace_nested
139
- b = Nokogiri::XML::Builder.new { |xml|
140
- xml.root('xmlns:foo' => 'bar') do
141
- xml.yay do
142
- xml[:foo].bar
143
-
144
- xml.yikes do
145
- xml['foo'].baz
146
- end
147
- end
148
- end
149
- }
150
- doc = b.doc
151
- assert_equal 'bar', doc.at('foo|bar', 'foo' => 'bar').namespace.href
152
- assert_equal 'bar', doc.at('foo|baz', 'foo' => 'bar').namespace.href
153
- end
154
-
155
- def test_specified_namespace_postdeclared
156
- doc = Nokogiri::XML::Builder.new { |xml|
157
- xml.a do
158
- xml[:foo].b("xmlns:foo" => "bar")
159
- end
160
- }.doc
161
- a = doc.at('a')
162
- assert_equal({}, a.namespaces)
163
-
164
- b = doc.at_xpath('//foo:b', {:foo=>'bar'})
165
- assert b
166
- assert_equal({"xmlns:foo"=>"bar"}, b.namespaces)
167
- assert_equal("b", b.name)
168
- assert_equal("bar", b.namespace.href)
169
- end
170
-
171
- def test_specified_namespace_undeclared
172
- Nokogiri::XML::Builder.new { |xml|
173
- xml.root do
174
- assert_raises(ArgumentError) do
175
- xml[:foo].bar
176
- end
177
- end
178
- }
179
- end
180
-
181
- def test_set_encoding
182
- builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
183
- xml.root do
184
- xml.bar 'blah'
185
- end
186
- end
187
- assert_match 'UTF-8', builder.to_xml
188
- end
189
-
190
- def test_bang_and_underscore_is_escaped
191
- builder = Nokogiri::XML::Builder.new do |xml|
192
- xml.root do
193
- xml.p_('adsfadsf')
194
- xml.p!('adsfadsf')
195
- end
196
- end
197
- assert_equal 2, builder.doc.xpath('//p').length
198
- end
199
-
200
- def test_square_brackets_set_attributes
201
- builder = Nokogiri::XML::Builder.new do |xml|
202
- xml.root do
203
- foo = xml.foo
204
- foo['id'] = 'hello'
205
- assert_equal 'hello', foo['id']
206
- end
207
- end
208
- assert_equal 1, builder.doc.xpath('//foo[@id = "hello"]').length
209
- end
210
-
211
- def test_nested_local_variable
212
- @ivar = 'hello'
213
- local_var = 'hello world'
214
- builder = Nokogiri::XML::Builder.new do |xml|
215
- xml.root do
216
- xml.foo local_var
217
- xml.bar @ivar
218
- xml.baz {
219
- xml.text @ivar
220
- }
221
- end
222
- end
223
-
224
- assert_equal 'hello world', builder.doc.at('//root/foo').content
225
- assert_equal 'hello', builder.doc.at('//root/bar').content
226
- assert_equal 'hello', builder.doc.at('baz').content
227
- end
228
-
229
- def test_raw_append
230
- builder = Nokogiri::XML::Builder.new do |xml|
231
- xml.root do
232
- xml << 'hello'
233
- end
234
- end
235
-
236
- assert_equal 'hello', builder.doc.at('/root').content
237
- end
238
-
239
- def test_raw_append_with_instance_eval
240
- builder = Nokogiri::XML::Builder.new do
241
- root do
242
- self << 'hello'
243
- end
244
- end
245
-
246
- assert_equal 'hello', builder.doc.at('/root').content
247
- end
248
-
249
- def test_raw_xml_append
250
- builder = Nokogiri::XML::Builder.new do |xml|
251
- xml.root do
252
- xml << '<aaa><bbb/><ccc/></aaa>'
253
- end
254
- end
255
-
256
- assert_equal ["aaa"], builder.doc.at_css("root").children.collect(&:name)
257
- assert_equal ["bbb","ccc"], builder.doc.at_css("aaa").children.collect(&:name)
258
- end
259
-
260
- def test_raw_xml_append_with_namespaces
261
- doc = Nokogiri::XML::Builder.new do |xml|
262
- xml.root("xmlns:foo" => "x", "xmlns" => "y") do
263
- xml << '<Element foo:bar="bazz"/>'
264
- end
265
- end.doc
266
-
267
- el = doc.at 'Element'
268
- assert_not_nil el
269
-
270
- assert_equal 'y', el.namespace.href
271
- assert_nil el.namespace.prefix
272
-
273
- attr = el.attributes["bar"]
274
- assert_not_nil attr
275
- assert_not_nil attr.namespace
276
- assert_equal "foo", attr.namespace.prefix
277
- end
278
-
279
- def test_cdata
280
- builder = Nokogiri::XML::Builder.new do
281
- root {
282
- cdata "hello world"
283
- }
284
- end
285
- assert_equal("<?xml version=\"1.0\"?><root><![CDATA[hello world]]></root>",
286
- builder.to_xml.gsub(/\n/, ""))
287
- end
288
-
289
- def test_comment
290
- builder = Nokogiri::XML::Builder.new do
291
- root {
292
- comment "this is a comment"
293
- }
294
- end
295
- assert builder.doc.root.children.first.comment?
296
- end
297
-
298
- def test_builder_no_block
299
- string = "hello world"
300
- builder = Nokogiri::XML::Builder.new
301
- builder.root {
302
- cdata string
303
- }
304
- assert_equal("<?xml version=\"1.0\"?><root><![CDATA[hello world]]></root>",
305
- builder.to_xml.gsub(/\n/, ''))
306
- end
307
-
308
- def test_builder_can_inherit_parent_namespace
309
- builder = Nokogiri::XML::Builder.new
310
- builder.products {
311
- builder.parent.default_namespace = "foo"
312
- builder.product {
313
- builder.parent.default_namespace = nil
314
- }
315
- }
316
- doc = builder.doc
317
- ['product', 'products'].each do |n|
318
- assert_equal doc.at_xpath("//*[local-name() = '#{n}']").namespace.href, 'foo'
319
- end
320
- end
321
-
322
- def test_builder_can_handle_namespace_override
323
- builder = Nokogiri::XML::Builder.new
324
- builder.products('xmlns:foo' => 'bar') {
325
- builder.product('xmlns:foo' => 'baz')
326
- }
327
-
328
- doc = builder.doc
329
- assert_equal doc.at_xpath("//*[local-name() = 'product']").namespaces['xmlns:foo'], 'baz'
330
- assert_equal doc.at_xpath("//*[local-name() = 'products']").namespaces['xmlns:foo'], 'bar'
331
- assert_nil doc.at_xpath("//*[local-name() = 'products']").namespace
332
- end
333
-
334
- private
335
-
336
- def namespaces_defined_on(node)
337
- Hash[*node.namespace_definitions.collect{|n| ["xmlns:" + n.prefix, n.href]}.flatten]
338
- end
339
- end
340
- end
341
- end