libxml-ruby 5.0.4 → 5.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/HISTORY +10 -6
  3. data/README.rdoc +1 -1
  4. data/ext/libxml/extconf.rb +5 -0
  5. data/ext/libxml/ruby_xml.c +556 -556
  6. data/ext/libxml/ruby_xml_attributes.h +17 -17
  7. data/ext/libxml/ruby_xml_document.c +1129 -1129
  8. data/ext/libxml/ruby_xml_dtd.c +257 -257
  9. data/ext/libxml/ruby_xml_encoding.c +250 -250
  10. data/ext/libxml/ruby_xml_error.c +1003 -1003
  11. data/ext/libxml/ruby_xml_error.h +14 -14
  12. data/ext/libxml/ruby_xml_html_parser_context.c +351 -351
  13. data/ext/libxml/ruby_xml_input_cbg.c +188 -188
  14. data/ext/libxml/ruby_xml_namespace.c +151 -151
  15. data/ext/libxml/ruby_xml_parser.h +10 -10
  16. data/ext/libxml/ruby_xml_parser_context.c +1009 -1009
  17. data/ext/libxml/ruby_xml_parser_options.c +74 -74
  18. data/ext/libxml/ruby_xml_parser_options.h +10 -10
  19. data/ext/libxml/ruby_xml_sax2_handler.c +326 -326
  20. data/ext/libxml/ruby_xml_sax_parser.c +108 -108
  21. data/ext/libxml/ruby_xml_version.h +9 -9
  22. data/lib/libxml/attr.rb +122 -122
  23. data/lib/libxml/attr_decl.rb +80 -80
  24. data/lib/libxml/attributes.rb +13 -13
  25. data/lib/libxml/document.rb +194 -194
  26. data/lib/libxml/error.rb +95 -95
  27. data/lib/libxml/hpricot.rb +77 -77
  28. data/lib/libxml/html_parser.rb +96 -96
  29. data/lib/libxml/namespace.rb +61 -61
  30. data/lib/libxml/namespaces.rb +37 -37
  31. data/lib/libxml/node.rb +323 -323
  32. data/lib/libxml/parser.rb +102 -102
  33. data/lib/libxml/sax_callbacks.rb +179 -179
  34. data/lib/libxml/sax_parser.rb +40 -40
  35. data/lib/libxml/tree.rb +28 -28
  36. data/lib/libxml.rb +4 -4
  37. data/lib/xml/libxml.rb +10 -10
  38. data/lib/xml.rb +13 -13
  39. data/libxml-ruby.gemspec +50 -49
  40. data/test/test_document.rb +140 -140
  41. data/test/test_document_write.rb +142 -142
  42. data/test/test_dtd.rb +126 -126
  43. data/test/test_encoding.rb +126 -126
  44. data/test/test_error.rb +194 -194
  45. data/test/test_helper.rb +20 -20
  46. data/test/test_namespace.rb +58 -58
  47. data/test/test_node.rb +235 -235
  48. data/test/test_node_write.rb +93 -93
  49. data/test/test_parser.rb +333 -333
  50. data/test/test_reader.rb +364 -364
  51. data/test/test_xml.rb +168 -168
  52. metadata +5 -4
data/test/test_helper.rb CHANGED
@@ -1,20 +1,20 @@
1
- # encoding: UTF-8
2
-
3
- # To make testing/debugging easier, test within this source tree versus an installed gem
4
- require 'bundler/setup'
5
-
6
- # Add ext directory to load path to make it easier to test locally built extensions
7
- ext_path = File.expand_path(File.join(__dir__, '..', 'ext', 'libxml'))
8
- $LOAD_PATH.unshift(File.expand_path(ext_path))
9
-
10
- # Now load code
11
- require 'libxml-ruby'
12
-
13
- def windows?
14
- !(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/).nil?
15
- end
16
-
17
- STDOUT.write "\nlibxml2: #{LibXML::XML::LIBXML_VERSION}\n#{RUBY_DESCRIPTION}\n\n"
18
-
19
- require 'minitest/autorun'
20
-
1
+ # encoding: UTF-8
2
+
3
+ # To make testing/debugging easier, test within this source tree versus an installed gem
4
+ require 'bundler/setup'
5
+
6
+ # Add ext directory to load path to make it easier to test locally built extensions
7
+ ext_path = File.expand_path(File.join(__dir__, '..', 'ext', 'libxml'))
8
+ $LOAD_PATH.unshift(File.expand_path(ext_path))
9
+
10
+ # Now load code
11
+ require 'libxml-ruby'
12
+
13
+ def windows?
14
+ !(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/).nil?
15
+ end
16
+
17
+ STDOUT.write "\nlibxml2: #{LibXML::XML::LIBXML_VERSION}\n#{RUBY_DESCRIPTION}\n\n"
18
+
19
+ require 'minitest/autorun'
20
+
@@ -1,58 +1,58 @@
1
- # encoding: UTF-8
2
-
3
- require_relative './test_helper'
4
-
5
-
6
- class TestNS < Minitest::Test
7
- def setup
8
- file = File.join(File.dirname(__FILE__), 'model/soap.xml')
9
- @doc = LibXML::XML::Document.file(file)
10
- end
11
-
12
- def teardown
13
- @doc = nil
14
- end
15
-
16
- def test_create_ns
17
- node = LibXML::XML::Node.new('foo')
18
- ns = LibXML::XML::Namespace.new(node, 'my_namepace', 'http://www.mynamespace.com')
19
- assert_equal(ns.prefix, 'my_namepace')
20
- assert_equal(ns.href, 'http://www.mynamespace.com')
21
- end
22
-
23
- def test_create_default_ns
24
- node = LibXML::XML::Node.new('foo')
25
- ns = LibXML::XML::Namespace.new(node, nil, 'http://www.mynamespace.com')
26
- assert_nil(ns.prefix)
27
- assert_equal(ns.href, 'http://www.mynamespace.com')
28
- end
29
-
30
- def test_create_unbound_ns
31
- error = assert_raises(TypeError) do
32
- LibXML::XML::Namespace.new(nil, 'my_namepace', 'http://www.mynamespace.com')
33
- end
34
- assert_equal('wrong argument type nil (expected Data)', error.to_s)
35
- end
36
-
37
- def test_duplicate_ns
38
- node = LibXML::XML::Node.new('foo')
39
- LibXML::XML::Namespace.new(node, 'myname', 'http://www.mynamespace.com')
40
- LibXML::XML::Namespace.new(node, 'myname', 'http://www.mynamespace.com')
41
- end
42
-
43
- def test_eql
44
- node = LibXML::XML::Node.new('Envelope')
45
-
46
- assert(node.namespaces.namespace.eql?(node.namespaces.namespace))
47
- end
48
-
49
- def test_equal
50
- node1 = LibXML::XML::Node.new('Envelope')
51
- ns1 = LibXML::XML::Namespace.new(node1, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
52
-
53
- node2 = LibXML::XML::Node.new('Envelope')
54
- ns2 = LibXML::XML::Namespace.new(node2, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
55
-
56
- assert(ns1 == ns2)
57
- end
58
- end
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+
5
+
6
+ class TestNS < Minitest::Test
7
+ def setup
8
+ file = File.join(File.dirname(__FILE__), 'model/soap.xml')
9
+ @doc = LibXML::XML::Document.file(file)
10
+ end
11
+
12
+ def teardown
13
+ @doc = nil
14
+ end
15
+
16
+ def test_create_ns
17
+ node = LibXML::XML::Node.new('foo')
18
+ ns = LibXML::XML::Namespace.new(node, 'my_namepace', 'http://www.mynamespace.com')
19
+ assert_equal(ns.prefix, 'my_namepace')
20
+ assert_equal(ns.href, 'http://www.mynamespace.com')
21
+ end
22
+
23
+ def test_create_default_ns
24
+ node = LibXML::XML::Node.new('foo')
25
+ ns = LibXML::XML::Namespace.new(node, nil, 'http://www.mynamespace.com')
26
+ assert_nil(ns.prefix)
27
+ assert_equal(ns.href, 'http://www.mynamespace.com')
28
+ end
29
+
30
+ def test_create_unbound_ns
31
+ error = assert_raises(TypeError) do
32
+ LibXML::XML::Namespace.new(nil, 'my_namepace', 'http://www.mynamespace.com')
33
+ end
34
+ assert_equal('wrong argument type nil (expected Data)', error.to_s)
35
+ end
36
+
37
+ def test_duplicate_ns
38
+ node = LibXML::XML::Node.new('foo')
39
+ LibXML::XML::Namespace.new(node, 'myname', 'http://www.mynamespace.com')
40
+ LibXML::XML::Namespace.new(node, 'myname', 'http://www.mynamespace.com')
41
+ end
42
+
43
+ def test_eql
44
+ node = LibXML::XML::Node.new('Envelope')
45
+
46
+ assert(node.namespaces.namespace.eql?(node.namespaces.namespace))
47
+ end
48
+
49
+ def test_equal
50
+ node1 = LibXML::XML::Node.new('Envelope')
51
+ ns1 = LibXML::XML::Namespace.new(node1, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
52
+
53
+ node2 = LibXML::XML::Node.new('Envelope')
54
+ ns2 = LibXML::XML::Namespace.new(node2, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
55
+
56
+ assert(ns1 == ns2)
57
+ end
58
+ end
data/test/test_node.rb CHANGED
@@ -1,235 +1,235 @@
1
- # encoding: UTF-8
2
-
3
- require_relative './test_helper'
4
-
5
- class TestNode < Minitest::Test
6
- def setup
7
- @file_name = "model/bands.utf-8.xml"
8
-
9
- # Strip spaces to make testing easier
10
- file = File.join(File.dirname(__FILE__), @file_name)
11
- @doc = LibXML::XML::Document.file(file, options: LibXML::XML::Parser::Options::NOBLANKS)
12
- end
13
-
14
- def teardown
15
- @doc = nil
16
- end
17
-
18
- def nodes
19
- # Find all nodes with a country attributes
20
- @doc.find('*[@country]')
21
- end
22
-
23
- def test_doc_class
24
- assert_instance_of(LibXML::XML::Document, @doc)
25
- end
26
-
27
- def test_doc_node_type
28
- assert_equal LibXML::XML::Node::DOCUMENT_NODE, @doc.node_type
29
- end
30
-
31
- def test_root_class
32
- assert_instance_of(LibXML::XML::Node, @doc.root)
33
- end
34
-
35
- def test_root_node_type
36
- assert_equal LibXML::XML::Node::ELEMENT_NODE, @doc.root.node_type
37
- end
38
-
39
- def test_node_class
40
- for n in nodes
41
- assert_instance_of(LibXML::XML::Node, n)
42
- end
43
- end
44
-
45
- def test_context
46
- node = @doc.root
47
- context = node.context
48
- assert_instance_of(LibXML::XML::XPath::Context, context)
49
- end
50
-
51
- def test_find
52
- assert_instance_of(LibXML::XML::XPath::Object, self.nodes)
53
- end
54
-
55
- def test_node_child_get
56
- assert_instance_of(TrueClass, @doc.root.child?)
57
- assert_instance_of(LibXML::XML::Node, @doc.root.child)
58
-
59
- assert_equal(Encoding::UTF_8, @doc.root.child.name.encoding)
60
- assert_equal("m\u00F6tley_cr\u00FCe", @doc.root.child.name)
61
- end
62
-
63
- def test_node_doc
64
- for n in nodes
65
- assert_instance_of(LibXML::XML::Document, n.doc) if n.document?
66
- end
67
- end
68
-
69
- def test_name
70
- node = @doc.root.children.last
71
- assert_equal("iron_maiden", node.name)
72
- end
73
-
74
- def test_node_find
75
- nodes = @doc.root.find('./fixnum')
76
- for node in nodes
77
- assert_instance_of(LibXML::XML::Node, node)
78
- end
79
- end
80
-
81
- def test_equality
82
- node_a = @doc.find_first('*[@country]')
83
- node_b = @doc.root.child
84
-
85
- # On the ruby side these are different objects
86
- refute(node_a.equal?(node_b))
87
-
88
- # But they are the same underlying libxml node so specify they are equal
89
- assert(node_a == node_b)
90
- assert(node_a.eql?(node_b))
91
-
92
- file = File.join(File.dirname(__FILE__), @file_name)
93
- doc2 = LibXML::XML::Document.file(file)
94
-
95
- node_a2 = doc2.find_first('*[@country]')
96
-
97
- refute(node_a == node_a2)
98
- refute(node_a.eql?(node_a2))
99
- assert_equal(node_a.to_s, node_a2.to_s)
100
- refute(node_a.equal?(node_a2))
101
- end
102
-
103
- def test_equality_2
104
- parent = LibXML::XML::Node.new('parent')
105
- child = LibXML::XML::Node.new('child')
106
- parent << child
107
-
108
- node_a = child.parent
109
- node_b = child.parent
110
- # In this case the nodes are equal - the parent being the root
111
- assert(node_a.equal?(node_b))
112
- assert(node_a == node_b)
113
- assert(node_a.eql?(node_b))
114
- end
115
-
116
- def test_equality_nil
117
- node = @doc.root
118
- assert(node != nil)
119
- end
120
-
121
- def test_equality_wrong_type
122
- node = @doc.root
123
-
124
- assert_raises(TypeError) do
125
- assert(node != 'abc')
126
- end
127
- end
128
-
129
- def test_content
130
- node = @doc.root.last
131
- assert_equal("Iron Maiden is a British heavy metal band formed in 1975.",
132
- node.content)
133
- end
134
-
135
- def test_base
136
- doc = LibXML::XML::Parser.string('<person />').parse
137
- assert_nil(doc.root.base_uri)
138
- end
139
-
140
- # We use the same facility that libXSLT does here to disable output escaping.
141
- # This lets you specify that the node's content should be rendered unaltered
142
- # whenever it is being output. This is useful for things like <script> and
143
- # <style> nodes in HTML documents if you don't want to be forced to wrap them
144
- # in CDATA nodes. Or if you are sanitizing existing HTML documents and want
145
- # to preserve the content of any of the text nodes.
146
- #
147
- def test_output_escaping
148
- text = '<bad-script>if (a &lt; b || b &gt; c) { return "text"; }<stop/>return "&gt;&gt;&gt;snip&lt;&lt;&lt;";</bad-script>'
149
- node = LibXML::XML::Parser.string(text).parse.root
150
- assert_equal text, node.to_s
151
-
152
- text_noenc = '<bad-script>if (a < b || b > c) { return "text"; }<stop/>return ">>>snip<<<";</bad-script>'
153
- node.output_escaping = false
154
- assert_equal text_noenc, node.to_s
155
-
156
- node.output_escaping = true
157
- assert_equal text, node.to_s
158
-
159
- node.output_escaping = nil
160
- assert_equal text_noenc, node.to_s
161
-
162
- node.output_escaping = true
163
- assert_equal text, node.to_s
164
- end
165
-
166
- # Just a sanity check for output escaping.
167
- def test_output_escaping_sanity
168
- text = '<bad-script>if (a &lt; b || b &gt; c) { return "text"; }<stop/>return "&gt;&gt;&gt;snip&lt;&lt;&lt;";</bad-script>'
169
- node = LibXML::XML::Parser.string(text).parse.root
170
- affected = node.find('//text()')
171
-
172
- check_escaping = lambda do |flag|
173
- assert_equal('bad-script', node.name)
174
- assert_equal(flag, node.output_escaping?)
175
- affected.each do |x|
176
- assert_equal(flag ? 'text' : 'textnoenc', x.name)
177
- assert_equal(flag, x.output_escaping?)
178
- end
179
- end
180
-
181
- node.output_escaping = false
182
- check_escaping[false]
183
-
184
- node.output_escaping = true
185
- check_escaping[true]
186
-
187
- node.output_escaping = nil
188
- check_escaping[false]
189
-
190
- node.output_escaping = true
191
- check_escaping[true]
192
-
193
- affected.first.output_escaping = true
194
- affected.last.output_escaping = false
195
- assert node.output_escaping?.nil?
196
- end
197
-
198
- def test_space_preserve
199
- node = @doc.root
200
-
201
- node.space_preserve = false
202
- assert_equal LibXML::XML::Node::SPACE_DEFAULT, node.space_preserve
203
-
204
- node.space_preserve = true
205
- assert_equal LibXML::XML::Node::SPACE_PRESERVE, node.space_preserve
206
- end
207
-
208
- def test_empty
209
- text = '<name> </name>'
210
- doc = LibXML::XML::Parser.string(text).parse
211
-
212
- node = doc.root
213
- assert(!node.empty?)
214
-
215
- text_node = node.first
216
- assert(text_node.empty?)
217
- end
218
-
219
- def test_save_no_empty_tags
220
- node = LibXML::XML::Node.new('test')
221
- assert_equal '<test/>', node.to_s
222
-
223
- LibXML::XML.default_save_no_empty_tags = true
224
- assert_equal '<test></test>', node.to_s
225
-
226
- LibXML::XML.default_save_no_empty_tags = false
227
- end
228
-
229
- def test_set_content
230
- node = LibXML::XML::Node.new('test')
231
- node.content = "unescaped & string"
232
- assert_equal("unescaped & string", node.content)
233
- assert_equal("<test>unescaped &amp; string</test>", node.to_s)
234
- end
235
- end
1
+ # encoding: UTF-8
2
+
3
+ require_relative './test_helper'
4
+
5
+ class TestNode < Minitest::Test
6
+ def setup
7
+ @file_name = "model/bands.utf-8.xml"
8
+
9
+ # Strip spaces to make testing easier
10
+ file = File.join(File.dirname(__FILE__), @file_name)
11
+ @doc = LibXML::XML::Document.file(file, options: LibXML::XML::Parser::Options::NOBLANKS)
12
+ end
13
+
14
+ def teardown
15
+ @doc = nil
16
+ end
17
+
18
+ def nodes
19
+ # Find all nodes with a country attributes
20
+ @doc.find('*[@country]')
21
+ end
22
+
23
+ def test_doc_class
24
+ assert_instance_of(LibXML::XML::Document, @doc)
25
+ end
26
+
27
+ def test_doc_node_type
28
+ assert_equal LibXML::XML::Node::DOCUMENT_NODE, @doc.node_type
29
+ end
30
+
31
+ def test_root_class
32
+ assert_instance_of(LibXML::XML::Node, @doc.root)
33
+ end
34
+
35
+ def test_root_node_type
36
+ assert_equal LibXML::XML::Node::ELEMENT_NODE, @doc.root.node_type
37
+ end
38
+
39
+ def test_node_class
40
+ for n in nodes
41
+ assert_instance_of(LibXML::XML::Node, n)
42
+ end
43
+ end
44
+
45
+ def test_context
46
+ node = @doc.root
47
+ context = node.context
48
+ assert_instance_of(LibXML::XML::XPath::Context, context)
49
+ end
50
+
51
+ def test_find
52
+ assert_instance_of(LibXML::XML::XPath::Object, self.nodes)
53
+ end
54
+
55
+ def test_node_child_get
56
+ assert_instance_of(TrueClass, @doc.root.child?)
57
+ assert_instance_of(LibXML::XML::Node, @doc.root.child)
58
+
59
+ assert_equal(Encoding::UTF_8, @doc.root.child.name.encoding)
60
+ assert_equal("m\u00F6tley_cr\u00FCe", @doc.root.child.name)
61
+ end
62
+
63
+ def test_node_doc
64
+ for n in nodes
65
+ assert_instance_of(LibXML::XML::Document, n.doc) if n.document?
66
+ end
67
+ end
68
+
69
+ def test_name
70
+ node = @doc.root.children.last
71
+ assert_equal("iron_maiden", node.name)
72
+ end
73
+
74
+ def test_node_find
75
+ nodes = @doc.root.find('./fixnum')
76
+ for node in nodes
77
+ assert_instance_of(LibXML::XML::Node, node)
78
+ end
79
+ end
80
+
81
+ def test_equality
82
+ node_a = @doc.find_first('*[@country]')
83
+ node_b = @doc.root.child
84
+
85
+ # On the ruby side these are different objects
86
+ refute(node_a.equal?(node_b))
87
+
88
+ # But they are the same underlying libxml node so specify they are equal
89
+ assert(node_a == node_b)
90
+ assert(node_a.eql?(node_b))
91
+
92
+ file = File.join(File.dirname(__FILE__), @file_name)
93
+ doc2 = LibXML::XML::Document.file(file)
94
+
95
+ node_a2 = doc2.find_first('*[@country]')
96
+
97
+ refute(node_a == node_a2)
98
+ refute(node_a.eql?(node_a2))
99
+ assert_equal(node_a.to_s, node_a2.to_s)
100
+ refute(node_a.equal?(node_a2))
101
+ end
102
+
103
+ def test_equality_2
104
+ parent = LibXML::XML::Node.new('parent')
105
+ child = LibXML::XML::Node.new('child')
106
+ parent << child
107
+
108
+ node_a = child.parent
109
+ node_b = child.parent
110
+ # In this case the nodes are equal - the parent being the root
111
+ assert(node_a.equal?(node_b))
112
+ assert(node_a == node_b)
113
+ assert(node_a.eql?(node_b))
114
+ end
115
+
116
+ def test_equality_nil
117
+ node = @doc.root
118
+ assert(node != nil)
119
+ end
120
+
121
+ def test_equality_wrong_type
122
+ node = @doc.root
123
+
124
+ assert_raises(TypeError) do
125
+ assert(node != 'abc')
126
+ end
127
+ end
128
+
129
+ def test_content
130
+ node = @doc.root.last
131
+ assert_equal("Iron Maiden is a British heavy metal band formed in 1975.",
132
+ node.content)
133
+ end
134
+
135
+ def test_base
136
+ doc = LibXML::XML::Parser.string('<person />').parse
137
+ assert_nil(doc.root.base_uri)
138
+ end
139
+
140
+ # We use the same facility that libXSLT does here to disable output escaping.
141
+ # This lets you specify that the node's content should be rendered unaltered
142
+ # whenever it is being output. This is useful for things like <script> and
143
+ # <style> nodes in HTML documents if you don't want to be forced to wrap them
144
+ # in CDATA nodes. Or if you are sanitizing existing HTML documents and want
145
+ # to preserve the content of any of the text nodes.
146
+ #
147
+ def test_output_escaping
148
+ text = '<bad-script>if (a &lt; b || b &gt; c) { return "text"; }<stop/>return "&gt;&gt;&gt;snip&lt;&lt;&lt;";</bad-script>'
149
+ node = LibXML::XML::Parser.string(text).parse.root
150
+ assert_equal text, node.to_s
151
+
152
+ text_noenc = '<bad-script>if (a < b || b > c) { return "text"; }<stop/>return ">>>snip<<<";</bad-script>'
153
+ node.output_escaping = false
154
+ assert_equal text_noenc, node.to_s
155
+
156
+ node.output_escaping = true
157
+ assert_equal text, node.to_s
158
+
159
+ node.output_escaping = nil
160
+ assert_equal text_noenc, node.to_s
161
+
162
+ node.output_escaping = true
163
+ assert_equal text, node.to_s
164
+ end
165
+
166
+ # Just a sanity check for output escaping.
167
+ def test_output_escaping_sanity
168
+ text = '<bad-script>if (a &lt; b || b &gt; c) { return "text"; }<stop/>return "&gt;&gt;&gt;snip&lt;&lt;&lt;";</bad-script>'
169
+ node = LibXML::XML::Parser.string(text).parse.root
170
+ affected = node.find('//text()')
171
+
172
+ check_escaping = lambda do |flag|
173
+ assert_equal('bad-script', node.name)
174
+ assert_equal(flag, node.output_escaping?)
175
+ affected.each do |x|
176
+ assert_equal(flag ? 'text' : 'textnoenc', x.name)
177
+ assert_equal(flag, x.output_escaping?)
178
+ end
179
+ end
180
+
181
+ node.output_escaping = false
182
+ check_escaping[false]
183
+
184
+ node.output_escaping = true
185
+ check_escaping[true]
186
+
187
+ node.output_escaping = nil
188
+ check_escaping[false]
189
+
190
+ node.output_escaping = true
191
+ check_escaping[true]
192
+
193
+ affected.first.output_escaping = true
194
+ affected.last.output_escaping = false
195
+ assert node.output_escaping?.nil?
196
+ end
197
+
198
+ def test_space_preserve
199
+ node = @doc.root
200
+
201
+ node.space_preserve = false
202
+ assert_equal LibXML::XML::Node::SPACE_DEFAULT, node.space_preserve
203
+
204
+ node.space_preserve = true
205
+ assert_equal LibXML::XML::Node::SPACE_PRESERVE, node.space_preserve
206
+ end
207
+
208
+ def test_empty
209
+ text = '<name> </name>'
210
+ doc = LibXML::XML::Parser.string(text).parse
211
+
212
+ node = doc.root
213
+ assert(!node.empty?)
214
+
215
+ text_node = node.first
216
+ assert(text_node.empty?)
217
+ end
218
+
219
+ def test_save_no_empty_tags
220
+ node = LibXML::XML::Node.new('test')
221
+ assert_equal '<test/>', node.to_s
222
+
223
+ LibXML::XML.default_save_no_empty_tags = true
224
+ assert_equal '<test></test>', node.to_s
225
+
226
+ LibXML::XML.default_save_no_empty_tags = false
227
+ end
228
+
229
+ def test_set_content
230
+ node = LibXML::XML::Node.new('test')
231
+ node.content = "unescaped & string"
232
+ assert_equal("unescaped & string", node.content)
233
+ assert_equal("<test>unescaped &amp; string</test>", node.to_s)
234
+ end
235
+ end