Skip to content

Commit e38d3b0

Browse files
committed
Fix #211.
1 parent f82dfd2 commit e38d3b0

2 files changed

Lines changed: 142 additions & 134 deletions

File tree

lib/libxml/document.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ def self.file(path, encoding: nil, options: nil)
5151
# options - Parser options. Valid values are the constants defined on
5252
# XML::Parser::Options. Mutliple options can be combined
5353
# by using Bitwise OR (|).
54-
def self.io(value, options = {})
55-
Parser.io(value, options).parse
54+
def self.io(io, base_uri: nil, encoding: nil, options: nil)
55+
Parser.io(io, base_uri: base_uri, encoding: encoding, options: options).parse
5656
end
5757

5858
# call-seq:

test/test_document.rb

Lines changed: 140 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -1,132 +1,140 @@
1-
# encoding: UTF-8
2-
require_relative './test_helper'
3-
4-
class TestDocument < Minitest::Test
5-
def setup
6-
xp = LibXML::XML::Parser.string('<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>')
7-
assert_instance_of(LibXML::XML::Parser, xp)
8-
@doc = xp.parse
9-
assert_instance_of(LibXML::XML::Document, @doc)
10-
end
11-
12-
def teardown
13-
@doc = nil
14-
end
15-
16-
def test_klass
17-
assert_instance_of(LibXML::XML::Document, @doc)
18-
end
19-
20-
def test_context
21-
context = @doc.context
22-
assert_instance_of(LibXML::XML::XPath::Context, context)
23-
end
24-
25-
def test_find
26-
set = @doc.find('/ruby_array/fixnum')
27-
assert_instance_of(LibXML::XML::XPath::Object, set)
28-
assert_raises(NoMethodError) {
29-
set.xpath
30-
}
31-
end
32-
33-
def test_compression
34-
if LibXML::XML.enabled_zlib?
35-
0.upto(9) do |i|
36-
assert_equal(i, @doc.compression = i)
37-
assert_equal(i, @doc.compression)
38-
end
39-
40-
9.downto(0) do |i|
41-
assert_equal(i, @doc.compression = i)
42-
assert_equal(i, @doc.compression)
43-
end
44-
45-
10.upto(20) do |i|
46-
# assert_equal(9, @doc.compression = i)
47-
assert_equal(i, @doc.compression = i) # This works around a bug in Ruby 1.8
48-
assert_equal(9, @doc.compression)
49-
end
50-
51-
-1.downto(-10) do |i|
52-
# assert_equal(0, @doc.compression = i)
53-
assert_equal(i, @doc.compression = i) # FIXME This bug should get fixed ASAP
54-
assert_equal(0, @doc.compression)
55-
end
56-
end
57-
end
58-
59-
def test_version
60-
assert_equal('1.0', @doc.version)
61-
62-
doc = LibXML::XML::Document.new('6.9')
63-
assert_equal('6.9', doc.version)
64-
end
65-
66-
def test_write_root
67-
@doc.root = LibXML::XML::Node.new('rubynet')
68-
assert_instance_of(LibXML::XML::Node, @doc.root)
69-
assert_instance_of(LibXML::XML::Document, @doc.root.doc)
70-
assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rubynet/>\n",
71-
@doc.to_s(:indent => false))
72-
end
73-
74-
def test_doc_node_type
75-
assert_equal(LibXML::XML::Node::DOCUMENT_NODE, LibXML::XML::Document.new.node_type)
76-
end
77-
78-
def test_doc_node_type_name
79-
assert_equal('document_xml', LibXML::XML::Document.new.node_type_name)
80-
end
81-
82-
def test_xhtml
83-
doc = LibXML::XML::Document.new
84-
assert(!doc.xhtml?)
85-
LibXML::XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil, doc, true
86-
assert(doc.xhtml?)
87-
end
88-
89-
def test_document_root
90-
doc1 = LibXML::XML::Document.string("<one/>")
91-
doc2 = LibXML::XML::Document.string("<two/>")
92-
93-
error = assert_raises(LibXML::XML::Error) do
94-
doc1.root = doc2.root
95-
end
96-
assert_equal(" Nodes belong to different documents. You must first import the node by calling LibXML::XML::Document.import.",
97-
error.to_s)
98-
99-
doc2.root << doc2.import(doc1.root)
100-
assert_equal('<one/>', doc1.root.to_s)
101-
assert_equal('<two><one/></two>', doc2.root.to_s(:indent => false))
102-
103-
assert(!doc1.root.equal?(doc2.root))
104-
assert(doc1.root.doc != doc2.root.doc)
105-
end
106-
107-
def test_import_node
108-
doc1 = LibXML::XML::Parser.string('<nums><one></one></nums>').parse
109-
doc2 = LibXML::XML::Parser.string('<nums><two></two></nums>').parse
110-
111-
node = doc1.root.child
112-
113-
error = assert_raises(LibXML::XML::Error) do
114-
doc2.root << node
115-
end
116-
117-
assert_equal(" Nodes belong to different documents. You must first import the node by calling LibXML::XML::Document.import.",
118-
error.to_s)
119-
120-
doc2.root << doc2.import(node)
121-
122-
assert_equal("<nums><two/><one/></nums>",
123-
doc2.root.to_s(:indent => false))
124-
end
125-
126-
def test_nonet
127-
xml_string = '<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>'
128-
xml = LibXML::XML::Document.string(xml_string, options: LibXML::XML::Parser::Options::NONET)
129-
file = File.join(File.dirname(__FILE__), 'model/atom.xml')
130-
schema_document = LibXML::XML::Document.file(file, options: LibXML::XML::Parser::Options::NONET)
131-
end
132-
end
1+
# encoding: UTF-8
2+
require_relative './test_helper'
3+
4+
class TestDocument < Minitest::Test
5+
def setup
6+
xp = LibXML::XML::Parser.string('<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>')
7+
assert_instance_of(LibXML::XML::Parser, xp)
8+
@doc = xp.parse
9+
assert_instance_of(LibXML::XML::Document, @doc)
10+
end
11+
12+
def teardown
13+
@doc = nil
14+
end
15+
16+
def test_klass
17+
assert_instance_of(LibXML::XML::Document, @doc)
18+
end
19+
20+
def test_context
21+
context = @doc.context
22+
assert_instance_of(LibXML::XML::XPath::Context, context)
23+
end
24+
25+
def test_find
26+
set = @doc.find('/ruby_array/fixnum')
27+
assert_instance_of(LibXML::XML::XPath::Object, set)
28+
assert_raises(NoMethodError) {
29+
set.xpath
30+
}
31+
end
32+
33+
def test_compression
34+
if LibXML::XML.enabled_zlib?
35+
0.upto(9) do |i|
36+
assert_equal(i, @doc.compression = i)
37+
assert_equal(i, @doc.compression)
38+
end
39+
40+
9.downto(0) do |i|
41+
assert_equal(i, @doc.compression = i)
42+
assert_equal(i, @doc.compression)
43+
end
44+
45+
10.upto(20) do |i|
46+
# assert_equal(9, @doc.compression = i)
47+
assert_equal(i, @doc.compression = i) # This works around a bug in Ruby 1.8
48+
assert_equal(9, @doc.compression)
49+
end
50+
51+
-1.downto(-10) do |i|
52+
# assert_equal(0, @doc.compression = i)
53+
assert_equal(i, @doc.compression = i) # FIXME This bug should get fixed ASAP
54+
assert_equal(0, @doc.compression)
55+
end
56+
end
57+
end
58+
59+
def test_version
60+
assert_equal('1.0', @doc.version)
61+
62+
doc = LibXML::XML::Document.new('6.9')
63+
assert_equal('6.9', doc.version)
64+
end
65+
66+
def test_write_root
67+
@doc.root = LibXML::XML::Node.new('rubynet')
68+
assert_instance_of(LibXML::XML::Node, @doc.root)
69+
assert_instance_of(LibXML::XML::Document, @doc.root.doc)
70+
assert_equal("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rubynet/>\n",
71+
@doc.to_s(:indent => false))
72+
end
73+
74+
def test_doc_node_type
75+
assert_equal(LibXML::XML::Node::DOCUMENT_NODE, LibXML::XML::Document.new.node_type)
76+
end
77+
78+
def test_doc_node_type_name
79+
assert_equal('document_xml', LibXML::XML::Document.new.node_type_name)
80+
end
81+
82+
def test_xhtml
83+
doc = LibXML::XML::Document.new
84+
assert(!doc.xhtml?)
85+
LibXML::XML::Dtd.new "-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil, doc, true
86+
assert(doc.xhtml?)
87+
end
88+
89+
def test_document_root
90+
doc1 = LibXML::XML::Document.string("<one/>")
91+
doc2 = LibXML::XML::Document.string("<two/>")
92+
93+
error = assert_raises(LibXML::XML::Error) do
94+
doc1.root = doc2.root
95+
end
96+
assert_equal(" Nodes belong to different documents. You must first import the node by calling LibXML::XML::Document.import.",
97+
error.to_s)
98+
99+
doc2.root << doc2.import(doc1.root)
100+
assert_equal('<one/>', doc1.root.to_s)
101+
assert_equal('<two><one/></two>', doc2.root.to_s(:indent => false))
102+
103+
assert(!doc1.root.equal?(doc2.root))
104+
assert(doc1.root.doc != doc2.root.doc)
105+
end
106+
107+
def test_import_node
108+
doc1 = LibXML::XML::Parser.string('<nums><one></one></nums>').parse
109+
doc2 = LibXML::XML::Parser.string('<nums><two></two></nums>').parse
110+
111+
node = doc1.root.child
112+
113+
error = assert_raises(LibXML::XML::Error) do
114+
doc2.root << node
115+
end
116+
117+
assert_equal(" Nodes belong to different documents. You must first import the node by calling LibXML::XML::Document.import.",
118+
error.to_s)
119+
120+
doc2.root << doc2.import(node)
121+
122+
assert_equal("<nums><two/><one/></nums>",
123+
doc2.root.to_s(:indent => false))
124+
end
125+
126+
def test_nonet
127+
xml_string = '<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>'
128+
xml = LibXML::XML::Document.string(xml_string, options: LibXML::XML::Parser::Options::NONET)
129+
file = File.join(File.dirname(__FILE__), 'model/atom.xml')
130+
schema_document = LibXML::XML::Document.file(file, options: LibXML::XML::Parser::Options::NONET)
131+
end
132+
133+
def test_io
134+
File.open(File.join(File.dirname(__FILE__), 'model/rubynet.xml')) do |io|
135+
doc = LibXML::XML::Document.io(io)
136+
assert_instance_of(LibXML::XML::Document, doc)
137+
end
138+
end
139+
140+
end

0 commit comments

Comments
 (0)