libxml-ruby 0.9.5 → 0.9.6
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +28 -0
- data/README +8 -12
- data/ext/libxml/cbg.c +86 -86
- data/ext/libxml/libxml.c +875 -899
- data/ext/libxml/ruby_libxml.h +91 -65
- data/ext/libxml/ruby_xml_attr.c +485 -485
- data/ext/libxml/ruby_xml_attr.h +3 -3
- data/ext/libxml/ruby_xml_attributes.h +2 -2
- data/ext/libxml/ruby_xml_document.c +124 -307
- data/ext/libxml/ruby_xml_document.h +3 -3
- data/ext/libxml/ruby_xml_dtd.c +119 -119
- data/ext/libxml/ruby_xml_dtd.h +2 -2
- data/ext/libxml/ruby_xml_error.c +1 -1
- data/ext/libxml/ruby_xml_error.h +2 -2
- data/ext/libxml/ruby_xml_html_parser.c +119 -119
- data/ext/libxml/ruby_xml_html_parser.h +3 -3
- data/ext/libxml/ruby_xml_input.c +13 -11
- data/ext/libxml/ruby_xml_input.h +3 -3
- data/ext/libxml/ruby_xml_input_cbg.c +197 -197
- data/ext/libxml/ruby_xml_namespace.c +158 -0
- data/ext/libxml/ruby_xml_namespace.h +12 -0
- data/ext/libxml/ruby_xml_namespaces.c +303 -0
- data/ext/libxml/{ruby_xml_ns.h → ruby_xml_namespaces.h} +4 -5
- data/ext/libxml/ruby_xml_node.c +88 -293
- data/ext/libxml/ruby_xml_node.h +4 -4
- data/ext/libxml/ruby_xml_parser.c +152 -152
- data/ext/libxml/ruby_xml_parser.h +3 -3
- data/ext/libxml/ruby_xml_parser_context.c +630 -657
- data/ext/libxml/ruby_xml_parser_context.h +3 -3
- data/ext/libxml/ruby_xml_reader.c +899 -904
- data/ext/libxml/ruby_xml_reader.h +2 -2
- data/ext/libxml/ruby_xml_relaxng.h +2 -2
- data/ext/libxml/ruby_xml_sax_parser.c +175 -175
- data/ext/libxml/ruby_xml_sax_parser.h +3 -3
- data/ext/libxml/ruby_xml_schema.c +165 -165
- data/ext/libxml/ruby_xml_schema.h +2 -2
- data/ext/libxml/ruby_xml_state.h +2 -2
- data/ext/libxml/ruby_xml_xinclude.c +24 -24
- data/ext/libxml/ruby_xml_xinclude.h +3 -3
- data/ext/libxml/ruby_xml_xpath.c +108 -108
- data/ext/libxml/ruby_xml_xpath.h +3 -3
- data/ext/libxml/ruby_xml_xpath_context.c +84 -35
- data/ext/libxml/ruby_xml_xpath_context.h +3 -3
- data/ext/libxml/ruby_xml_xpath_expression.c +5 -7
- data/ext/libxml/ruby_xml_xpath_expression.h +2 -2
- data/ext/libxml/ruby_xml_xpath_object.c +7 -7
- data/ext/libxml/ruby_xml_xpath_object.h +2 -2
- data/ext/libxml/ruby_xml_xpointer.c +107 -107
- data/ext/libxml/ruby_xml_xpointer.h +3 -3
- data/ext/libxml/version.h +2 -2
- data/ext/vc/libxml_ruby.vcproj +13 -5
- data/lib/libxml.rb +4 -1
- data/lib/libxml/document.rb +40 -6
- data/lib/libxml/hpricot.rb +76 -76
- data/lib/libxml/namespace.rb +60 -0
- data/lib/libxml/namespaces.rb +36 -0
- data/lib/libxml/node.rb +90 -26
- data/lib/libxml/ns.rb +20 -0
- data/test/model/bands.xml +5 -0
- data/test/tc_attributes.rb +1 -1
- data/test/tc_document.rb +24 -41
- data/test/tc_document_write.rb +87 -115
- data/test/tc_namespace.rb +59 -0
- data/test/tc_namespaces.rb +174 -0
- data/test/tc_node.rb +41 -33
- data/test/tc_node_copy.rb +1 -1
- data/test/tc_node_edit.rb +6 -0
- data/test/tc_node_write.rb +76 -0
- data/test/tc_xinclude.rb +2 -9
- data/test/tc_xpath.rb +38 -11
- data/test/test_suite.rb +3 -1
- metadata +16 -9
- data/ext/libxml/ruby_xml_ns.c +0 -150
- data/test/ets_copy_bug.rb +0 -21
- data/test/ets_copy_bug3.rb +0 -38
- data/test/model/default_validation_bug.rb +0 -0
- data/test/tc_ns.rb +0 -18
data/lib/libxml/hpricot.rb
CHANGED
@@ -1,76 +1,76 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
class String
|
5
|
-
def to_libxml_doc
|
6
|
-
xp = XML::Parser.new
|
7
|
-
xp.string = self
|
8
|
-
xp.parse
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
module LibXML
|
13
|
-
module XML
|
14
|
-
class Document
|
15
|
-
alias :search :find
|
16
|
-
end
|
17
|
-
|
18
|
-
class Node
|
19
|
-
# find the child node with the given xpath
|
20
|
-
def at(xpath)
|
21
|
-
self.find_first(xpath)
|
22
|
-
end
|
23
|
-
|
24
|
-
# find the array of child nodes matching the given xpath
|
25
|
-
def search(xpath)
|
26
|
-
results = self.find(xpath).to_a
|
27
|
-
if block_given?
|
28
|
-
results.each do |result|
|
29
|
-
yield result
|
30
|
-
end
|
31
|
-
end
|
32
|
-
return results
|
33
|
-
end
|
34
|
-
|
35
|
-
def /(xpath)
|
36
|
-
search(xpath)
|
37
|
-
end
|
38
|
-
|
39
|
-
# return the inner contents of this node as a string
|
40
|
-
def inner_xml
|
41
|
-
child.to_s
|
42
|
-
end
|
43
|
-
|
44
|
-
# alias for inner_xml
|
45
|
-
def inner_html
|
46
|
-
inner_xml
|
47
|
-
end
|
48
|
-
|
49
|
-
# return this node and its contents as an xml string
|
50
|
-
def to_xml
|
51
|
-
self.to_s
|
52
|
-
end
|
53
|
-
|
54
|
-
# alias for path
|
55
|
-
def xpath
|
56
|
-
self.path
|
57
|
-
end
|
58
|
-
|
59
|
-
def find_with_default_ns(xpath_expr, namespace=nil)
|
60
|
-
find_base(xpath_expr, namespace || default_namespaces)
|
61
|
-
end
|
62
|
-
|
63
|
-
def find_first_with_default_ns(xpath_expr, namespace=nil)
|
64
|
-
find_first_base(xpath_expr, namespace || default_namespaces)
|
65
|
-
end
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
1
|
+
## Provide hpricot API for libxml. Provided by Michael Guterl,
|
2
|
+
## inspired by http://thebogles.com/blog/an-hpricot-style-interface-to-libxml
|
3
|
+
#
|
4
|
+
#class String
|
5
|
+
# def to_libxml_doc
|
6
|
+
# xp = XML::Parser.new
|
7
|
+
# xp.string = self
|
8
|
+
# xp.parse
|
9
|
+
# end
|
10
|
+
#end
|
11
|
+
#
|
12
|
+
#module LibXML
|
13
|
+
# module XML
|
14
|
+
# class Document
|
15
|
+
# alias :search :find
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# class Node
|
19
|
+
# # find the child node with the given xpath
|
20
|
+
# def at(xpath)
|
21
|
+
# self.find_first(xpath)
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# # find the array of child nodes matching the given xpath
|
25
|
+
# def search(xpath)
|
26
|
+
# results = self.find(xpath).to_a
|
27
|
+
# if block_given?
|
28
|
+
# results.each do |result|
|
29
|
+
# yield result
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
# return results
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
# def /(xpath)
|
36
|
+
# search(xpath)
|
37
|
+
# end
|
38
|
+
#
|
39
|
+
# # return the inner contents of this node as a string
|
40
|
+
# def inner_xml
|
41
|
+
# child.to_s
|
42
|
+
# end
|
43
|
+
#
|
44
|
+
# # alias for inner_xml
|
45
|
+
# def inner_html
|
46
|
+
# inner_xml
|
47
|
+
# end
|
48
|
+
#
|
49
|
+
# # return this node and its contents as an xml string
|
50
|
+
# def to_xml
|
51
|
+
# self.to_s
|
52
|
+
# end
|
53
|
+
#
|
54
|
+
# # alias for path
|
55
|
+
# def xpath
|
56
|
+
# self.path
|
57
|
+
# end
|
58
|
+
#
|
59
|
+
# def find_with_default_ns(xpath_expr, namespace=nil)
|
60
|
+
# find_base(xpath_expr, namespace || default_namespaces)
|
61
|
+
# end
|
62
|
+
#
|
63
|
+
# def find_first_with_default_ns(xpath_expr, namespace=nil)
|
64
|
+
# find_first_base(xpath_expr, namespace || default_namespaces)
|
65
|
+
# end
|
66
|
+
#
|
67
|
+
## alias_method :find_base, :find unless method_defined?(:find_base)
|
68
|
+
## alias_method :find, :find_with_default_ns
|
69
|
+
## alias_method :find_first_base, :find_first unless method_defined?(:find_first_base)
|
70
|
+
## alias_method :find_first, :find_first_with_default_ns
|
71
|
+
## alias :child? :first?
|
72
|
+
## alias :children? :first?
|
73
|
+
## alias :child :first
|
74
|
+
# end
|
75
|
+
# end
|
76
|
+
#end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module LibXML
|
2
|
+
module XML
|
3
|
+
class Namespace
|
4
|
+
include Comparable
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
# call-seq:
|
8
|
+
# namespace1 <=> namespace2
|
9
|
+
#
|
10
|
+
# Compares two namespace objects. Namespace objects are
|
11
|
+
# considered equal if their prefixes and hrefs are the same.
|
12
|
+
def <=>(other)
|
13
|
+
if self.prefix.nil? and other.prefix.nil?
|
14
|
+
self.href <=> other.href
|
15
|
+
elsif self.prefix.nil?
|
16
|
+
-1
|
17
|
+
elsif other.prefix.nil?
|
18
|
+
1
|
19
|
+
else
|
20
|
+
self.prefix <=> other.prefix
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# call-seq:
|
25
|
+
# namespace.each {|ns| .. }
|
26
|
+
#
|
27
|
+
# libxml stores namespaces in memory as a linked list.
|
28
|
+
# Use the each method to iterate over the list. Note
|
29
|
+
# the first namespace in the loop is the current namespace.
|
30
|
+
#
|
31
|
+
# Usage:
|
32
|
+
# namespace.each do |ns|
|
33
|
+
# ..
|
34
|
+
# end
|
35
|
+
def each
|
36
|
+
ns = self
|
37
|
+
|
38
|
+
while ns
|
39
|
+
yield ns
|
40
|
+
ns = ns.next
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# call-seq:
|
45
|
+
# namespace.to_s -> "string"
|
46
|
+
#
|
47
|
+
# Returns the string represenation of a namespace.
|
48
|
+
#
|
49
|
+
# Usage:
|
50
|
+
# namespace.to_s
|
51
|
+
def to_s
|
52
|
+
if self.prefix
|
53
|
+
"#{self.prefix}:#{self.href}"
|
54
|
+
else
|
55
|
+
self.href
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module LibXML
|
2
|
+
module XML
|
3
|
+
class Namespaces
|
4
|
+
# call-seq:
|
5
|
+
# namespace.default -> XML::Namespace
|
6
|
+
#
|
7
|
+
# Returns the default namespace for this node or nil.
|
8
|
+
#
|
9
|
+
# Usage:
|
10
|
+
# doc = XML::Document.string('<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"/>')
|
11
|
+
# ns = doc.root.namespaces.default_namespace
|
12
|
+
# assert_equal(ns.href, 'http://schemas.xmlsoap.org/soap/envelope/')
|
13
|
+
def default
|
14
|
+
find_by_prefix(nil)
|
15
|
+
end
|
16
|
+
|
17
|
+
# call-seq:
|
18
|
+
# namespace.default_prefix = "string"
|
19
|
+
#
|
20
|
+
# Assigns a name (prefix) to the default namespace.
|
21
|
+
# This makes it much easier to perform XML::XPath
|
22
|
+
# searches.
|
23
|
+
#
|
24
|
+
# Usage:
|
25
|
+
# doc = XML::Document.string('<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"/>')
|
26
|
+
# doc.root.namespaces.default_prefix = 'soap'
|
27
|
+
# node = doc.root.find_first('soap:Envelope')
|
28
|
+
def default_prefix=(prefix)
|
29
|
+
# Find default prefix
|
30
|
+
ns = find_by_prefix(nil)
|
31
|
+
raise(ArgumentError, "No default namespace was found") unless ns
|
32
|
+
Namespace.new(self.node, prefix, ns.href)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/libxml/node.rb
CHANGED
@@ -1,20 +1,6 @@
|
|
1
1
|
module LibXML
|
2
2
|
module XML
|
3
3
|
class Node
|
4
|
-
# Register the prefix (i.e., name) of the default namespace to
|
5
|
-
# make xpath searches easier
|
6
|
-
def register_default_namespace(prefix)
|
7
|
-
ns = self.namespace.find do |ns|
|
8
|
-
ns.prefix.nil?
|
9
|
-
end
|
10
|
-
|
11
|
-
if ns
|
12
|
-
NS.new(self, ns.href, prefix)
|
13
|
-
else
|
14
|
-
raise(ArgumentError, "No default namespace was found")
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
4
|
# Determines whether this node has attributes
|
19
5
|
def attributes?
|
20
6
|
attributes.length > 0
|
@@ -26,37 +12,66 @@ module LibXML
|
|
26
12
|
copy(false)
|
27
13
|
end
|
28
14
|
|
15
|
+
# :call-seq:
|
16
|
+
# node.dup -> XML::Node
|
17
|
+
#
|
29
18
|
# Create a shallow copy of the node. To create
|
30
19
|
# a deep copy call Node#copy(true)
|
31
20
|
def dup
|
32
21
|
copy(false)
|
33
22
|
end
|
34
23
|
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
38
|
-
|
24
|
+
# call-seq:
|
25
|
+
# node.context(namespaces=nil) -> XPath::Context
|
26
|
+
#
|
27
|
+
# Returns a new XML::XPathContext for the current node.
|
28
|
+
#
|
29
|
+
# Namespaces is an optional array of XML::NS objects
|
30
|
+
def context(nslist = nil)
|
39
31
|
if not self.doc
|
40
|
-
raise(TypeError, "A node must belong to a document before "
|
41
|
-
"it can be searched with XPath.")
|
32
|
+
raise(TypeError, "A node must belong to a document before a xpath context can be created")
|
42
33
|
end
|
43
|
-
|
34
|
+
|
44
35
|
context = XPath::Context.new(self)
|
45
|
-
context.node = self
|
36
|
+
context.node = self
|
46
37
|
context.register_namespaces_from_node(self)
|
47
38
|
context.register_namespaces_from_node(self.doc.root)
|
48
39
|
context.register_namespaces(nslist) if nslist
|
40
|
+
context
|
41
|
+
end
|
49
42
|
|
50
|
-
|
43
|
+
# call-seq:
|
44
|
+
# node.find(namespaces=nil) -> XPath::XPathObject
|
45
|
+
#
|
46
|
+
# Return nodes matching the specified xpath expression.
|
47
|
+
# For more information, please refer to the documentation
|
48
|
+
# for XML::Document#find.
|
49
|
+
#
|
50
|
+
# Namespaces is an optional array of XML::NS objects
|
51
|
+
def find(xpath, nslist = nil)
|
52
|
+
self.context(nslist).find(xpath)
|
51
53
|
end
|
52
54
|
|
55
|
+
# call-seq:
|
56
|
+
# node.find_first(namespaces=nil) -> XML::Node
|
57
|
+
#
|
53
58
|
# Return the first node matching the specified xpath expression.
|
54
59
|
# For more information, please refer to the documentation
|
55
|
-
# for
|
60
|
+
# for the #find method.
|
56
61
|
def find_first(xpath, nslist = nil)
|
57
62
|
find(xpath, nslist).first
|
58
63
|
end
|
59
|
-
|
64
|
+
|
65
|
+
# call-seq:
|
66
|
+
# node.namespacess -> XML::Namespaces
|
67
|
+
#
|
68
|
+
# Returns this node's XML::Namespaces object,
|
69
|
+
# which is used to access the namespaces
|
70
|
+
# associated with this node.
|
71
|
+
def namespaces
|
72
|
+
@namespaces ||= XML::Namespaces.new(self)
|
73
|
+
end
|
74
|
+
|
60
75
|
# ------- Traversal ----------------
|
61
76
|
# Iterates over this node's attributes.
|
62
77
|
#
|
@@ -270,6 +285,55 @@ module LibXML
|
|
270
285
|
alias :children? :first?
|
271
286
|
alias :child :first
|
272
287
|
alias :each_child :each
|
288
|
+
|
289
|
+
# --- Deprecated Output ---
|
290
|
+
# :stopdoc:
|
291
|
+
def dump
|
292
|
+
warn('Node#dump is deprecated. Use Node#to_s instead.')
|
293
|
+
self.to_s
|
294
|
+
end
|
295
|
+
|
296
|
+
# --- Deprecated Namespaces ---
|
297
|
+
def namespace
|
298
|
+
warn('Node#namespace is deprecated. Use Node#namespaces.namespace instead.')
|
299
|
+
self.namespaces.namespace
|
300
|
+
end
|
301
|
+
|
302
|
+
def namespace=(value)
|
303
|
+
warn('Node#namespace= is deprecated. Use Node#namespaces.namespace= instead.')
|
304
|
+
self.namespaces.namespace = value
|
305
|
+
end
|
306
|
+
|
307
|
+
def ns
|
308
|
+
warn('Node#ns is deprecated. Use Node#namespaces.namespace instead.')
|
309
|
+
self.namespaces.namespace
|
310
|
+
end
|
311
|
+
|
312
|
+
def ns?
|
313
|
+
warn('Node#ns? is deprecated. Use !Node#namespaces.namespace.nil? instead.')
|
314
|
+
!self.namespaces.namespace.nil?
|
315
|
+
end
|
316
|
+
|
317
|
+
def ns_def
|
318
|
+
warn('Node#ns_def is deprecated. Use Node#namespaces.definitions instead.')
|
319
|
+
self.namespaces.definitions
|
320
|
+
end
|
321
|
+
|
322
|
+
def ns_def?
|
323
|
+
warn('Node#ns_def? is deprecated. Use !Node#namespaces.definitions.nil? instead.')
|
324
|
+
!self.namespaces.definitions.nil?
|
325
|
+
end
|
326
|
+
|
327
|
+
def search_ns(prefix)
|
328
|
+
warn('Node#search_ns is deprecated. Use Node#namespaces.find_by_prefix instead.')
|
329
|
+
self.namespaces.find_by_prefix(prefix)
|
330
|
+
end
|
331
|
+
|
332
|
+
def search_href(href)
|
333
|
+
warn('Node#search_href is deprecated. Use Node#namespaces.find_by_href instead.')
|
334
|
+
self.namespaces.find_by_href(href)
|
335
|
+
end
|
336
|
+
# :startdoc:
|
273
337
|
end
|
274
338
|
end
|
275
|
-
end
|
339
|
+
end
|
data/lib/libxml/ns.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module LibXML
|
2
|
+
module XML
|
3
|
+
class NS < Namespace # :nodoc:
|
4
|
+
def initialize(node, prefix, href)
|
5
|
+
warn('The XML::NS class is deprecated. Use XML::Namespace instead.')
|
6
|
+
super(node, href, prefix)
|
7
|
+
end
|
8
|
+
|
9
|
+
def href?
|
10
|
+
warn('XML::NS#href? is deprecated. Use !XML::NS#href.nil? instead.')
|
11
|
+
not self.href.nil?
|
12
|
+
end
|
13
|
+
|
14
|
+
def prefix?
|
15
|
+
warn('XML::NS#prefix? is deprecated. Use !XML::NS#prefix?.nil? instead.')
|
16
|
+
not self.previx.nil?
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/test/tc_attributes.rb
CHANGED
@@ -59,7 +59,7 @@ class AttributesTest < Test::Unit::TestCase
|
|
59
59
|
|
60
60
|
attr = attributes.get_attribute('href')
|
61
61
|
assert_instance_of(XML::Attr, attr)
|
62
|
-
assert_instance_of(XML::
|
62
|
+
assert_instance_of(XML::Namespace, attr.ns)
|
63
63
|
assert_equal('xlink', attr.ns.prefix)
|
64
64
|
assert_equal('http://www.w3.org/1999/xlink', attr.ns.href)
|
65
65
|
|
data/test/tc_document.rb
CHANGED
@@ -2,7 +2,7 @@ require "xml"
|
|
2
2
|
require 'test/unit'
|
3
3
|
|
4
4
|
|
5
|
-
class
|
5
|
+
class TestDocument < Test::Unit::TestCase
|
6
6
|
def setup
|
7
7
|
xp = XML::Parser.new
|
8
8
|
assert_instance_of(XML::Parser, xp)
|
@@ -16,7 +16,16 @@ class TC_XML_Document < Test::Unit::TestCase
|
|
16
16
|
@doc = nil
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
19
|
+
def test_klass
|
20
|
+
assert_instance_of(XML::Document, @doc)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_context
|
24
|
+
context = @doc.context
|
25
|
+
assert_instance_of(XML::XPath::Context, context)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_find
|
20
29
|
set = @doc.find('/ruby_array/fixnum')
|
21
30
|
assert_instance_of(XML::XPath::Object, set)
|
22
31
|
assert_raise(NoMethodError) {
|
@@ -49,45 +58,19 @@ class TC_XML_Document < Test::Unit::TestCase
|
|
49
58
|
end
|
50
59
|
end
|
51
60
|
end
|
52
|
-
|
53
|
-
def
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
expected =<<-EOS
|
60
|
-
<?xml version="1.0"?>
|
61
|
-
<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>
|
62
|
-
EOS
|
63
|
-
assert_equal(expected, contents)
|
64
|
-
ensure
|
65
|
-
File.delete(filename)
|
61
|
+
|
62
|
+
def test_version
|
63
|
+
assert_equal('1.0', @doc.version)
|
64
|
+
|
65
|
+
doc = XML::Document.new('6.9')
|
66
|
+
assert_equal('6.9', doc.version)
|
66
67
|
end
|
67
|
-
|
68
|
-
def
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
expected =<<-EOS
|
75
|
-
<?xml version="1.0"?>
|
76
|
-
<ruby_array uga="booga" foo="bar">
|
77
|
-
<fixnum>one</fixnum>
|
78
|
-
<fixnum>two</fixnum>
|
79
|
-
</ruby_array>
|
80
|
-
EOS
|
81
|
-
assert_equal(expected, contents)
|
82
|
-
ensure
|
83
|
-
File.delete(filename)
|
68
|
+
|
69
|
+
def test_write_root
|
70
|
+
@doc.root = XML::Node.new('rubynet')
|
71
|
+
assert_instance_of(XML::Node, @doc.root)
|
72
|
+
assert_instance_of(XML::Document, @doc.root.doc)
|
73
|
+
assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rubynet/>\n",
|
74
|
+
@doc.to_s(:indent => false))
|
84
75
|
end
|
85
|
-
|
86
|
-
def test_save_formatted_invalid
|
87
|
-
filename = 'test_write'
|
88
|
-
|
89
|
-
assert_raise(ArgumentError) do
|
90
|
-
@doc.save(filename, 1)
|
91
|
-
end
|
92
|
-
end
|
93
76
|
end
|