libxml-ruby 2.0.0-x86-mingw32
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.
- data/HISTORY +516 -0
- data/LICENSE +23 -0
- data/MANIFEST +165 -0
- data/README.rdoc +161 -0
- data/Rakefile +82 -0
- data/ext/libxml/extconf.rb +122 -0
- data/ext/libxml/libxml.c +93 -0
- data/ext/libxml/ruby_libxml.h +101 -0
- data/ext/libxml/ruby_xml.c +893 -0
- data/ext/libxml/ruby_xml.h +10 -0
- data/ext/libxml/ruby_xml_attr.c +352 -0
- data/ext/libxml/ruby_xml_attr.h +14 -0
- data/ext/libxml/ruby_xml_attr_decl.c +171 -0
- data/ext/libxml/ruby_xml_attr_decl.h +13 -0
- data/ext/libxml/ruby_xml_attributes.c +277 -0
- data/ext/libxml/ruby_xml_attributes.h +17 -0
- data/ext/libxml/ruby_xml_cbg.c +85 -0
- data/ext/libxml/ruby_xml_document.c +958 -0
- data/ext/libxml/ruby_xml_document.h +17 -0
- data/ext/libxml/ruby_xml_dtd.c +257 -0
- data/ext/libxml/ruby_xml_dtd.h +9 -0
- data/ext/libxml/ruby_xml_encoding.c +221 -0
- data/ext/libxml/ruby_xml_encoding.h +16 -0
- data/ext/libxml/ruby_xml_error.c +1004 -0
- data/ext/libxml/ruby_xml_error.h +14 -0
- data/ext/libxml/ruby_xml_html_parser.c +92 -0
- data/ext/libxml/ruby_xml_html_parser.h +12 -0
- data/ext/libxml/ruby_xml_html_parser_context.c +308 -0
- data/ext/libxml/ruby_xml_html_parser_context.h +12 -0
- data/ext/libxml/ruby_xml_html_parser_options.c +40 -0
- data/ext/libxml/ruby_xml_html_parser_options.h +12 -0
- data/ext/libxml/ruby_xml_input_cbg.c +191 -0
- data/ext/libxml/ruby_xml_input_cbg.h +20 -0
- data/ext/libxml/ruby_xml_io.c +30 -0
- data/ext/libxml/ruby_xml_io.h +9 -0
- data/ext/libxml/ruby_xml_namespace.c +170 -0
- data/ext/libxml/ruby_xml_namespace.h +12 -0
- data/ext/libxml/ruby_xml_namespaces.c +295 -0
- data/ext/libxml/ruby_xml_namespaces.h +11 -0
- data/ext/libxml/ruby_xml_node.c +1386 -0
- data/ext/libxml/ruby_xml_node.h +13 -0
- data/ext/libxml/ruby_xml_parser.c +94 -0
- data/ext/libxml/ruby_xml_parser.h +14 -0
- data/ext/libxml/ruby_xml_parser_context.c +982 -0
- data/ext/libxml/ruby_xml_parser_context.h +12 -0
- data/ext/libxml/ruby_xml_parser_options.c +68 -0
- data/ext/libxml/ruby_xml_parser_options.h +14 -0
- data/ext/libxml/ruby_xml_reader.c +1057 -0
- data/ext/libxml/ruby_xml_reader.h +14 -0
- data/ext/libxml/ruby_xml_relaxng.c +111 -0
- data/ext/libxml/ruby_xml_relaxng.h +10 -0
- data/ext/libxml/ruby_xml_sax2_handler.c +334 -0
- data/ext/libxml/ruby_xml_sax2_handler.h +12 -0
- data/ext/libxml/ruby_xml_sax_parser.c +136 -0
- data/ext/libxml/ruby_xml_sax_parser.h +12 -0
- data/ext/libxml/ruby_xml_schema.c +159 -0
- data/ext/libxml/ruby_xml_schema.h +11 -0
- data/ext/libxml/ruby_xml_version.h +9 -0
- data/ext/libxml/ruby_xml_xinclude.c +18 -0
- data/ext/libxml/ruby_xml_xinclude.h +13 -0
- data/ext/libxml/ruby_xml_xpath.c +107 -0
- data/ext/libxml/ruby_xml_xpath.h +12 -0
- data/ext/libxml/ruby_xml_xpath_context.c +390 -0
- data/ext/libxml/ruby_xml_xpath_context.h +11 -0
- data/ext/libxml/ruby_xml_xpath_expression.c +83 -0
- data/ext/libxml/ruby_xml_xpath_expression.h +12 -0
- data/ext/libxml/ruby_xml_xpath_object.c +336 -0
- data/ext/libxml/ruby_xml_xpath_object.h +19 -0
- data/ext/libxml/ruby_xml_xpointer.c +101 -0
- data/ext/libxml/ruby_xml_xpointer.h +13 -0
- data/ext/mingw/Rakefile +34 -0
- data/ext/mingw/build.rake +41 -0
- data/ext/vc/libxml_ruby.sln +26 -0
- data/lib/1.8/libxml_ruby.so +0 -0
- data/lib/1.9/libxml_ruby.so +0 -0
- data/lib/libxml.rb +30 -0
- data/lib/libxml/attr.rb +113 -0
- data/lib/libxml/attr_decl.rb +80 -0
- data/lib/libxml/attributes.rb +14 -0
- data/lib/libxml/document.rb +192 -0
- data/lib/libxml/error.rb +90 -0
- data/lib/libxml/hpricot.rb +78 -0
- data/lib/libxml/html_parser.rb +96 -0
- data/lib/libxml/namespace.rb +62 -0
- data/lib/libxml/namespaces.rb +38 -0
- data/lib/libxml/node.rb +399 -0
- data/lib/libxml/ns.rb +22 -0
- data/lib/libxml/parser.rb +367 -0
- data/lib/libxml/properties.rb +23 -0
- data/lib/libxml/reader.rb +29 -0
- data/lib/libxml/sax_callbacks.rb +180 -0
- data/lib/libxml/sax_parser.rb +58 -0
- data/lib/libxml/tree.rb +29 -0
- data/lib/libxml/xpath_object.rb +16 -0
- data/lib/xml.rb +16 -0
- data/lib/xml/libxml.rb +10 -0
- data/libxml-ruby.gemspec +50 -0
- data/script/benchmark/depixelate +634 -0
- data/script/benchmark/hamlet.xml +9055 -0
- data/script/benchmark/parsecount +170 -0
- data/script/benchmark/sock_entries.xml +507 -0
- data/script/benchmark/throughput +41 -0
- data/script/test +6 -0
- data/setup.rb +1585 -0
- data/test/etc_doc_to_s.rb +21 -0
- data/test/ets_doc_file.rb +17 -0
- data/test/ets_doc_to_s.rb +23 -0
- data/test/ets_gpx.rb +28 -0
- data/test/ets_node_gc.rb +23 -0
- data/test/ets_test.xml +2 -0
- data/test/ets_tsr.rb +11 -0
- data/test/model/atom.xml +13 -0
- data/test/model/bands.iso-8859-1.xml +5 -0
- data/test/model/bands.utf-8.xml +5 -0
- data/test/model/bands.xml +5 -0
- data/test/model/books.xml +146 -0
- data/test/model/merge_bug_data.xml +58 -0
- data/test/model/ruby-lang.html +238 -0
- data/test/model/rubynet.xml +79 -0
- data/test/model/rubynet_project +1 -0
- data/test/model/shiporder.rnc +28 -0
- data/test/model/shiporder.rng +86 -0
- data/test/model/shiporder.xml +23 -0
- data/test/model/shiporder.xsd +31 -0
- data/test/model/soap.xml +27 -0
- data/test/model/xinclude.xml +5 -0
- data/test/rb-magic-comment.rb +33 -0
- data/test/tc_attr.rb +181 -0
- data/test/tc_attr_decl.rb +133 -0
- data/test/tc_attributes.rb +135 -0
- data/test/tc_deprecated_require.rb +13 -0
- data/test/tc_document.rb +119 -0
- data/test/tc_document_write.rb +187 -0
- data/test/tc_dtd.rb +125 -0
- data/test/tc_error.rb +138 -0
- data/test/tc_html_parser.rb +140 -0
- data/test/tc_namespace.rb +62 -0
- data/test/tc_namespaces.rb +177 -0
- data/test/tc_node.rb +258 -0
- data/test/tc_node_cdata.rb +51 -0
- data/test/tc_node_comment.rb +33 -0
- data/test/tc_node_copy.rb +42 -0
- data/test/tc_node_edit.rb +160 -0
- data/test/tc_node_text.rb +71 -0
- data/test/tc_node_write.rb +108 -0
- data/test/tc_node_xlink.rb +29 -0
- data/test/tc_parser.rb +336 -0
- data/test/tc_parser_context.rb +189 -0
- data/test/tc_properties.rb +39 -0
- data/test/tc_reader.rb +298 -0
- data/test/tc_relaxng.rb +54 -0
- data/test/tc_sax_parser.rb +276 -0
- data/test/tc_schema.rb +53 -0
- data/test/tc_traversal.rb +222 -0
- data/test/tc_xinclude.rb +21 -0
- data/test/tc_xml.rb +226 -0
- data/test/tc_xpath.rb +195 -0
- data/test/tc_xpath_context.rb +80 -0
- data/test/tc_xpath_expression.rb +38 -0
- data/test/tc_xpointer.rb +74 -0
- data/test/test_helper.rb +14 -0
- data/test/test_suite.rb +39 -0
- metadata +254 -0
@@ -0,0 +1,177 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require './test_helper'
|
4
|
+
|
5
|
+
require 'test/unit'
|
6
|
+
|
7
|
+
class TestNamespaces < Test::Unit::TestCase
|
8
|
+
def setup
|
9
|
+
file = File.join(File.dirname(__FILE__), 'model/soap.xml')
|
10
|
+
@doc = XML::Document.file(file)
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
@doc = nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_namespace
|
18
|
+
node = @doc.root
|
19
|
+
ns = node.namespaces.namespace
|
20
|
+
assert_equal('soap', ns.prefix)
|
21
|
+
assert_equal('http://schemas.xmlsoap.org/soap/envelope/', ns.href)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_set_namespace
|
25
|
+
node = XML::Node.new('Envelope')
|
26
|
+
assert_equal('<Envelope/>', node.to_s)
|
27
|
+
|
28
|
+
ns = XML::Namespace.new(node, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
|
29
|
+
assert_equal("<Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s)
|
30
|
+
assert_nil(node.namespaces.namespace)
|
31
|
+
|
32
|
+
# Now put the node in the soap namespace
|
33
|
+
node.namespaces.namespace = ns
|
34
|
+
assert_not_nil(node.namespaces.namespace)
|
35
|
+
assert_equal("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_define_namespace
|
39
|
+
node = XML::Node.new('Envelope')
|
40
|
+
assert_equal('<Envelope/>', node.to_s)
|
41
|
+
|
42
|
+
XML::Namespace.new(node, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/')
|
43
|
+
assert_equal("<Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s)
|
44
|
+
assert_nil(node.namespaces.namespace)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_define_default_namespace
|
48
|
+
node = XML::Node.new('Envelope')
|
49
|
+
assert_equal('<Envelope/>', node.to_s)
|
50
|
+
|
51
|
+
XML::Namespace.new(node, nil, 'http://schemas.xmlsoap.org/soap/envelope/')
|
52
|
+
assert_equal("<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s)
|
53
|
+
# This seems wrong, but appears to be the way libxml works
|
54
|
+
assert_nil(node.namespaces.namespace)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_namespaces
|
58
|
+
node = @doc.find_first('//ns1:IdAndName',
|
59
|
+
:ns1 => 'http://domain.somewhere.com')
|
60
|
+
|
61
|
+
namespaces = node.namespaces.sort
|
62
|
+
assert_equal(5, namespaces.length)
|
63
|
+
|
64
|
+
namespace = namespaces[0]
|
65
|
+
assert_instance_of(XML::Namespace, namespace)
|
66
|
+
assert_equal(nil, namespace.prefix)
|
67
|
+
assert_equal('http://services.somewhere.com', namespace.href)
|
68
|
+
|
69
|
+
namespace = namespaces[1]
|
70
|
+
assert_instance_of(XML::Namespace, namespace)
|
71
|
+
assert_equal('ns1', namespace.prefix)
|
72
|
+
assert_equal('http://domain.somewhere.com', namespace.href)
|
73
|
+
|
74
|
+
namespace = namespaces[2]
|
75
|
+
assert_instance_of(XML::Namespace, namespace)
|
76
|
+
assert_equal('soap', namespace.prefix)
|
77
|
+
assert_equal('http://schemas.xmlsoap.org/soap/envelope/', namespace.href)
|
78
|
+
|
79
|
+
namespace = namespaces[3]
|
80
|
+
assert_instance_of(XML::Namespace, namespace)
|
81
|
+
assert_equal('xsd', namespace.prefix)
|
82
|
+
assert_equal('http://www.w3.org/2001/XMLSchema', namespace.href)
|
83
|
+
|
84
|
+
namespace = namespaces[4]
|
85
|
+
assert_instance_of(XML::Namespace, namespace)
|
86
|
+
assert_equal('xsi', namespace.prefix)
|
87
|
+
assert_equal('http://www.w3.org/2001/XMLSchema-instance', namespace.href)
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_namespaces
|
91
|
+
node = @doc.find_first('//ns1:IdAndName',
|
92
|
+
:ns1 => 'http://domain.somewhere.com')
|
93
|
+
|
94
|
+
namespaces = node.namespaces.each do |namespace|
|
95
|
+
assert_instance_of(XML::Namespace, namespace)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_namespace_definitions
|
100
|
+
ns_defs = @doc.root.namespaces.definitions
|
101
|
+
assert_equal(3, ns_defs.size)
|
102
|
+
|
103
|
+
namespace = ns_defs[0]
|
104
|
+
assert_instance_of(XML::Namespace, namespace)
|
105
|
+
assert_equal('soap', namespace.prefix)
|
106
|
+
assert_equal('http://schemas.xmlsoap.org/soap/envelope/', namespace.href)
|
107
|
+
|
108
|
+
namespace = ns_defs[1]
|
109
|
+
assert_instance_of(XML::Namespace, namespace)
|
110
|
+
assert_equal('xsd', namespace.prefix)
|
111
|
+
assert_equal('http://www.w3.org/2001/XMLSchema', namespace.href)
|
112
|
+
|
113
|
+
namespace = ns_defs[2]
|
114
|
+
assert_instance_of(XML::Namespace, namespace)
|
115
|
+
assert_equal('xsi', namespace.prefix)
|
116
|
+
assert_equal('http://www.w3.org/2001/XMLSchema-instance', namespace.href)
|
117
|
+
|
118
|
+
node = @doc.root.find_first('//ns:getManufacturerNamesResponse',
|
119
|
+
:ns => 'http://services.somewhere.com')
|
120
|
+
ns_defs = node.namespaces.definitions
|
121
|
+
assert_equal(1, ns_defs.size)
|
122
|
+
|
123
|
+
namespace = ns_defs[0]
|
124
|
+
assert_instance_of(XML::Namespace, namespace)
|
125
|
+
assert_equal(nil, namespace.prefix)
|
126
|
+
assert_equal('http://services.somewhere.com', namespace.href)
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_find_by_prefix
|
130
|
+
node = @doc.find_first('//ns1:getManufacturerNamesResponse',
|
131
|
+
:ns1 => 'http://services.somewhere.com')
|
132
|
+
|
133
|
+
namespace = @doc.root.namespaces.find_by_prefix('soap')
|
134
|
+
|
135
|
+
assert_instance_of(XML::Namespace, namespace)
|
136
|
+
assert_equal('soap', namespace.prefix)
|
137
|
+
assert_equal('http://schemas.xmlsoap.org/soap/envelope/', namespace.href)
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_find_default_ns
|
141
|
+
namespace = @doc.root.namespaces.find_by_prefix(nil)
|
142
|
+
assert_nil(namespace)
|
143
|
+
|
144
|
+
node = @doc.find_first('//ns1:getManufacturerNamesResponse',
|
145
|
+
:ns1 => 'http://services.somewhere.com')
|
146
|
+
namespace = node.namespaces.find_by_prefix(nil)
|
147
|
+
|
148
|
+
assert_instance_of(XML::Namespace, namespace)
|
149
|
+
assert_equal(nil, namespace.prefix)
|
150
|
+
assert_equal('http://services.somewhere.com', namespace.href)
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_find_ns_by_href
|
154
|
+
node = @doc.find_first('//ns1:getManufacturerNamesResponse',
|
155
|
+
:ns1 => 'http://services.somewhere.com')
|
156
|
+
|
157
|
+
namespace = node.namespaces.find_by_href('http://schemas.xmlsoap.org/soap/envelope/')
|
158
|
+
|
159
|
+
assert_instance_of(XML::Namespace, namespace)
|
160
|
+
assert_equal('soap', namespace.prefix)
|
161
|
+
assert_equal('http://schemas.xmlsoap.org/soap/envelope/', namespace.href)
|
162
|
+
end
|
163
|
+
|
164
|
+
def test_default_namespace
|
165
|
+
doc = XML::Document.string('<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"/>')
|
166
|
+
ns = doc.root.namespaces.default
|
167
|
+
assert_equal(ns.href, 'http://schemas.xmlsoap.org/soap/envelope/')
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_default_prefix
|
171
|
+
doc = XML::Document.string('<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"/>')
|
172
|
+
doc.root.namespaces.default_prefix = 'soap'
|
173
|
+
|
174
|
+
node = doc.root.find_first('/soap:Envelope')
|
175
|
+
assert_not_nil(node)
|
176
|
+
end
|
177
|
+
end
|
data/test/tc_node.rb
ADDED
@@ -0,0 +1,258 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require './test_helper'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
class TestNode < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
load_encoding("utf-8")
|
9
|
+
end
|
10
|
+
|
11
|
+
def teardown
|
12
|
+
XML.default_keep_blanks = true
|
13
|
+
@doc = nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def load_encoding(name)
|
17
|
+
@encoding = Encoding.find(name) if defined?(Encoding)
|
18
|
+
@file_name = "model/bands.#{name.downcase}.xml"
|
19
|
+
|
20
|
+
# Strip spaces to make testing easier
|
21
|
+
XML.default_keep_blanks = false
|
22
|
+
file = File.join(File.dirname(__FILE__), @file_name)
|
23
|
+
@doc = XML::Document.file(file)
|
24
|
+
end
|
25
|
+
|
26
|
+
def nodes
|
27
|
+
# Find all nodes with a country attributes
|
28
|
+
@doc.find('*[@country]')
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_doc_class
|
32
|
+
assert_instance_of(XML::Document, @doc)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_doc_node_type
|
36
|
+
assert_equal XML::Node::DOCUMENT_NODE, @doc.node_type
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_root_class
|
40
|
+
assert_instance_of(XML::Node, @doc.root)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_root_node_type
|
44
|
+
assert_equal XML::Node::ELEMENT_NODE, @doc.root.node_type
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_node_class
|
48
|
+
for n in nodes
|
49
|
+
assert_instance_of(XML::Node, n)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_context
|
54
|
+
node = @doc.root
|
55
|
+
context = node.context
|
56
|
+
assert_instance_of(XML::XPath::Context, context)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_find
|
60
|
+
assert_instance_of(XML::XPath::Object, self.nodes)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_node_child_get
|
64
|
+
assert_instance_of(TrueClass, @doc.root.child?)
|
65
|
+
assert_instance_of(XML::Node, @doc.root.child)
|
66
|
+
|
67
|
+
if defined?(Encoding)
|
68
|
+
assert_equal(@encoding, @doc.root.child.name.encoding)
|
69
|
+
assert_equal("m\u00F6tley_cr\u00FCe", @doc.root.child.name)
|
70
|
+
else
|
71
|
+
assert_equal("m\303\266tley_cr\303\274e", @doc.root.child.name)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_node_doc
|
76
|
+
for n in nodes
|
77
|
+
assert_instance_of(XML::Document, n.doc) if n.document?
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_name
|
82
|
+
if defined?(Encoding)
|
83
|
+
assert_equal(@encoding, nodes[0].name.encoding)
|
84
|
+
assert_equal("m\u00F6tley_cr\u00FCe", nodes[0].name)
|
85
|
+
else
|
86
|
+
assert_equal("m\303\266tley_cr\303\274e", nodes[0].name)
|
87
|
+
end
|
88
|
+
assert_equal("iron_maiden", nodes[1].name)
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_name_iso_8859_1
|
92
|
+
load_encoding("iso-8859-1")
|
93
|
+
|
94
|
+
if defined?(Encoding)
|
95
|
+
assert_equal(@encoding, nodes[0].name.encoding)
|
96
|
+
assert_equal("m\303\266tley_cr\303\274e".force_encoding(@encoding), nodes[0].name)
|
97
|
+
else
|
98
|
+
assert_equal("m\303\266tley_cr\303\274e", nodes[0].name)
|
99
|
+
end
|
100
|
+
assert_equal("iron_maiden", nodes[1].name)
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_node_find
|
104
|
+
nodes = @doc.root.find('./fixnum')
|
105
|
+
for node in nodes
|
106
|
+
assert_instance_of(XML::Node, node)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_equality
|
111
|
+
node_a = @doc.find_first('*[@country]')
|
112
|
+
node_b = @doc.root.child
|
113
|
+
|
114
|
+
assert(node_a == node_b)
|
115
|
+
assert(node_a.eql?(node_b))
|
116
|
+
assert(node_a.equal?(node_b))
|
117
|
+
|
118
|
+
file = File.join(File.dirname(__FILE__), @file_name)
|
119
|
+
doc2 = XML::Document.file(file)
|
120
|
+
|
121
|
+
node_a2 = doc2.find_first('*[@country]')
|
122
|
+
|
123
|
+
assert_equal(node_a.to_s, node_a2.to_s)
|
124
|
+
assert_equal(node_a, node_a2)
|
125
|
+
assert(node_a.eql?(node_a2))
|
126
|
+
assert(!node_a.equal?(node_a2))
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_equality_nil
|
130
|
+
node = @doc.root
|
131
|
+
assert(node != nil)
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_equality_wrong_type
|
135
|
+
node = @doc.root
|
136
|
+
|
137
|
+
assert_raise(TypeError) do
|
138
|
+
assert(node != 'abc')
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_content
|
143
|
+
if defined?(Encoding)
|
144
|
+
assert_equal(@encoding, @doc.root.content.encoding)
|
145
|
+
assert_equal("M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.Iron Maiden is a British heavy metal band formed in 1975.",
|
146
|
+
@doc.root.content)
|
147
|
+
|
148
|
+
first = @doc.root.child
|
149
|
+
assert_equal("M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.",
|
150
|
+
first.content)
|
151
|
+
assert_equal("Iron Maiden is a British heavy metal band formed in 1975.", first.next.content)
|
152
|
+
else
|
153
|
+
assert_equal("M\303\266tley Cr\303\274e is an American heavy metal band formed in Los Angeles, California in 1981.Iron Maiden is a British heavy metal band formed in 1975.",
|
154
|
+
@doc.root.content)
|
155
|
+
|
156
|
+
first = @doc.root.child
|
157
|
+
assert_equal("M\303\266tley Cr\303\274e is an American heavy metal band formed in Los Angeles, California in 1981.",
|
158
|
+
first.content)
|
159
|
+
assert_equal("Iron Maiden is a British heavy metal band formed in 1975.",
|
160
|
+
first.next.content)
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def test_content_iso_8859_1
|
165
|
+
load_encoding("iso-8859-1")
|
166
|
+
if defined?(Encoding)
|
167
|
+
assert_equal(@encoding, @doc.root.content.encoding)
|
168
|
+
assert_equal("M\xC3\xB6tley Cr\xC3\xBCe is an American heavy metal band formed in Los Angeles, California in 1981.Iron Maiden is a British heavy metal band formed in 1975.".force_encoding(@encoding),
|
169
|
+
@doc.root.content)
|
170
|
+
|
171
|
+
first = @doc.root.child
|
172
|
+
assert_equal("M\xC3\xB6tley Cr\xC3\xBCe is an American heavy metal band formed in Los Angeles, California in 1981.".force_encoding(@encoding),
|
173
|
+
first.content)
|
174
|
+
assert_equal("Iron Maiden is a British heavy metal band formed in 1975.", first.next.content)
|
175
|
+
else
|
176
|
+
assert_equal("M\303\266tley Cr\303\274e is an American heavy metal band formed in Los Angeles, California in 1981.Iron Maiden is a British heavy metal band formed in 1975.",
|
177
|
+
@doc.root.content)
|
178
|
+
|
179
|
+
first = @doc.root.child
|
180
|
+
assert_equal("M\303\266tley Cr\303\274e is an American heavy metal band formed in Los Angeles, California in 1981.",
|
181
|
+
first.content)
|
182
|
+
assert_equal("Iron Maiden is a British heavy metal band formed in 1975.", first.next.content)
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
def test_base
|
187
|
+
doc = XML::Parser.string('<person />').parse
|
188
|
+
assert_nil(doc.root.base_uri)
|
189
|
+
end
|
190
|
+
|
191
|
+
# We use the same facility that libXSLT does here to disable output escaping.
|
192
|
+
# This lets you specify that the node's content should be rendered unaltered
|
193
|
+
# whenever it is being output. This is useful for things like <script> and
|
194
|
+
# <style> nodes in HTML documents if you don't want to be forced to wrap them
|
195
|
+
# in CDATA nodes. Or if you are sanitizing existing HTML documents and want
|
196
|
+
# to preserve the content of any of the text nodes.
|
197
|
+
#
|
198
|
+
def test_output_escaping
|
199
|
+
text = '<bad-script>if (a < b || b > c) { return "text"; }<stop/>return ">>>snip<<<";</bad-script>'
|
200
|
+
node = XML::Parser.string(text).parse.root
|
201
|
+
assert_equal text, node.to_s
|
202
|
+
|
203
|
+
text_noenc = '<bad-script>if (a < b || b > c) { return "text"; }<stop/>return ">>>snip<<<";</bad-script>'
|
204
|
+
node.output_escaping = false
|
205
|
+
assert_equal text_noenc, node.to_s
|
206
|
+
|
207
|
+
node.output_escaping = true
|
208
|
+
assert_equal text, node.to_s
|
209
|
+
|
210
|
+
node.output_escaping = nil
|
211
|
+
assert_equal text_noenc, node.to_s
|
212
|
+
|
213
|
+
node.output_escaping = true
|
214
|
+
assert_equal text, node.to_s
|
215
|
+
end
|
216
|
+
|
217
|
+
# Just a sanity check for output escaping.
|
218
|
+
def test_output_escaping_sanity
|
219
|
+
text = '<bad-script>if (a < b || b > c) { return "text"; }<stop/>return ">>>snip<<<";</bad-script>'
|
220
|
+
node = XML::Parser.string(text).parse.root
|
221
|
+
affected = node.find('//text()')
|
222
|
+
|
223
|
+
check_escaping = lambda do |flag|
|
224
|
+
assert_equal('bad-script', node.name)
|
225
|
+
assert_equal(flag, node.output_escaping?)
|
226
|
+
affected.each do |x|
|
227
|
+
assert_equal(flag ? 'text' : 'textnoenc', x.name)
|
228
|
+
assert_equal(flag, x.output_escaping?)
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
node.output_escaping = false
|
233
|
+
check_escaping[false]
|
234
|
+
|
235
|
+
node.output_escaping = true
|
236
|
+
check_escaping[true]
|
237
|
+
|
238
|
+
node.output_escaping = nil
|
239
|
+
check_escaping[false]
|
240
|
+
|
241
|
+
node.output_escaping = true
|
242
|
+
check_escaping[true]
|
243
|
+
|
244
|
+
affected.first.output_escaping = true
|
245
|
+
affected.last.output_escaping = false
|
246
|
+
assert node.output_escaping?.nil?
|
247
|
+
end
|
248
|
+
|
249
|
+
def test_space_preserve
|
250
|
+
node = @doc.root
|
251
|
+
|
252
|
+
node.space_preserve = false
|
253
|
+
assert_equal XML::Node::SPACE_DEFAULT, node.space_preserve
|
254
|
+
|
255
|
+
node.space_preserve = true
|
256
|
+
assert_equal XML::Node::SPACE_PRESERVE, node.space_preserve
|
257
|
+
end
|
258
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require './test_helper'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
class CDataCommentTest < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
xp = XML::Parser.string('<root></root>')
|
9
|
+
@doc = xp.parse
|
10
|
+
assert_instance_of(XML::Document, @doc)
|
11
|
+
@root = @doc.root
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_node_type
|
15
|
+
cnode = XML::Node.new_cdata('test cdata')
|
16
|
+
assert_equal(XML::Node::CDATA_SECTION_NODE, cnode.node_type)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_add_cdata
|
20
|
+
@root << XML::Node.new_cdata('mycdata')
|
21
|
+
assert_equal '<root><![CDATA[mycdata]]></root>',
|
22
|
+
@root.to_s.gsub(/\n\s*/,'')
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_add_cdata_2
|
26
|
+
@root << XML::Node.new_cdata('mycdata')
|
27
|
+
assert_equal 'cdata',
|
28
|
+
@root.child.node_type_name
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_add_cdata_3
|
32
|
+
@root << el = XML::Node.new_cdata('mycdata')
|
33
|
+
el << "_this_is_added"
|
34
|
+
assert_equal '<root><![CDATA[mycdata_this_is_added]]></root>',
|
35
|
+
@root.to_s.gsub(/\n\s*/,'')
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_attributes
|
39
|
+
cnode = XML::Node.new_cdata('test cdata')
|
40
|
+
assert_equal(0, cnode.attributes.length)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_set_cdata_attribute
|
44
|
+
cnode = XML::Node.new_cdata('test cdata')
|
45
|
+
|
46
|
+
# Can't create attributes on non-element nodes
|
47
|
+
assert_raise(ArgumentError) do
|
48
|
+
cnode['attr'] = '123'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|