libxml-ruby 2.9.0-x64-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.
- checksums.yaml +7 -0
- data/HISTORY +790 -0
- data/LICENSE +21 -0
- data/MANIFEST +166 -0
- data/README.rdoc +184 -0
- data/Rakefile +81 -0
- data/ext/libxml/extconf.h +4 -0
- data/ext/libxml/extconf.rb +57 -0
- data/ext/libxml/libxml.c +80 -0
- data/ext/libxml/libxml_ruby.def +35 -0
- data/ext/libxml/ruby_libxml.h +75 -0
- data/ext/libxml/ruby_xml.c +977 -0
- data/ext/libxml/ruby_xml.h +20 -0
- data/ext/libxml/ruby_xml_attr.c +333 -0
- data/ext/libxml/ruby_xml_attr.h +12 -0
- data/ext/libxml/ruby_xml_attr_decl.c +153 -0
- data/ext/libxml/ruby_xml_attr_decl.h +11 -0
- data/ext/libxml/ruby_xml_attributes.c +275 -0
- data/ext/libxml/ruby_xml_attributes.h +15 -0
- data/ext/libxml/ruby_xml_cbg.c +85 -0
- data/ext/libxml/ruby_xml_document.c +1133 -0
- data/ext/libxml/ruby_xml_document.h +11 -0
- data/ext/libxml/ruby_xml_dtd.c +261 -0
- data/ext/libxml/ruby_xml_dtd.h +9 -0
- data/ext/libxml/ruby_xml_encoding.c +262 -0
- data/ext/libxml/ruby_xml_encoding.h +19 -0
- data/ext/libxml/ruby_xml_error.c +996 -0
- data/ext/libxml/ruby_xml_error.h +12 -0
- data/ext/libxml/ruby_xml_html_parser.c +92 -0
- data/ext/libxml/ruby_xml_html_parser.h +10 -0
- data/ext/libxml/ruby_xml_html_parser_context.c +337 -0
- data/ext/libxml/ruby_xml_html_parser_context.h +10 -0
- data/ext/libxml/ruby_xml_html_parser_options.c +46 -0
- data/ext/libxml/ruby_xml_html_parser_options.h +10 -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 +52 -0
- data/ext/libxml/ruby_xml_io.h +10 -0
- data/ext/libxml/ruby_xml_namespace.c +153 -0
- data/ext/libxml/ruby_xml_namespace.h +10 -0
- data/ext/libxml/ruby_xml_namespaces.c +293 -0
- data/ext/libxml/ruby_xml_namespaces.h +9 -0
- data/ext/libxml/ruby_xml_node.c +1446 -0
- data/ext/libxml/ruby_xml_node.h +11 -0
- data/ext/libxml/ruby_xml_parser.c +94 -0
- data/ext/libxml/ruby_xml_parser.h +12 -0
- data/ext/libxml/ruby_xml_parser_context.c +999 -0
- data/ext/libxml/ruby_xml_parser_context.h +10 -0
- data/ext/libxml/ruby_xml_parser_options.c +66 -0
- data/ext/libxml/ruby_xml_parser_options.h +12 -0
- data/ext/libxml/ruby_xml_reader.c +1226 -0
- data/ext/libxml/ruby_xml_reader.h +17 -0
- data/ext/libxml/ruby_xml_relaxng.c +110 -0
- data/ext/libxml/ruby_xml_relaxng.h +10 -0
- data/ext/libxml/ruby_xml_sax2_handler.c +326 -0
- data/ext/libxml/ruby_xml_sax2_handler.h +10 -0
- data/ext/libxml/ruby_xml_sax_parser.c +120 -0
- data/ext/libxml/ruby_xml_sax_parser.h +10 -0
- data/ext/libxml/ruby_xml_schema.c +300 -0
- data/ext/libxml/ruby_xml_schema.h +809 -0
- data/ext/libxml/ruby_xml_schema_attribute.c +109 -0
- data/ext/libxml/ruby_xml_schema_attribute.h +15 -0
- data/ext/libxml/ruby_xml_schema_element.c +94 -0
- data/ext/libxml/ruby_xml_schema_element.h +14 -0
- data/ext/libxml/ruby_xml_schema_facet.c +52 -0
- data/ext/libxml/ruby_xml_schema_facet.h +13 -0
- data/ext/libxml/ruby_xml_schema_type.c +259 -0
- data/ext/libxml/ruby_xml_schema_type.h +9 -0
- data/ext/libxml/ruby_xml_version.h +9 -0
- data/ext/libxml/ruby_xml_writer.c +1136 -0
- data/ext/libxml/ruby_xml_writer.h +10 -0
- data/ext/libxml/ruby_xml_xinclude.c +16 -0
- data/ext/libxml/ruby_xml_xinclude.h +11 -0
- data/ext/libxml/ruby_xml_xpath.c +188 -0
- data/ext/libxml/ruby_xml_xpath.h +13 -0
- data/ext/libxml/ruby_xml_xpath_context.c +360 -0
- data/ext/libxml/ruby_xml_xpath_context.h +9 -0
- data/ext/libxml/ruby_xml_xpath_expression.c +81 -0
- data/ext/libxml/ruby_xml_xpath_expression.h +10 -0
- data/ext/libxml/ruby_xml_xpath_object.c +335 -0
- data/ext/libxml/ruby_xml_xpath_object.h +17 -0
- data/ext/libxml/ruby_xml_xpointer.c +99 -0
- data/ext/libxml/ruby_xml_xpointer.h +11 -0
- data/ext/vc/libxml_ruby.sln +26 -0
- data/lib/2.3/libxml_ruby.so +0 -0
- data/lib/libs/libiconv-2.dll +0 -0
- data/lib/libs/libxml2-2.dll +0 -0
- data/lib/libs/zlib1.dll +0 -0
- data/lib/libxml.rb +35 -0
- data/lib/libxml/attr.rb +123 -0
- data/lib/libxml/attr_decl.rb +80 -0
- data/lib/libxml/attributes.rb +14 -0
- data/lib/libxml/document.rb +194 -0
- data/lib/libxml/error.rb +95 -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/schema.rb +67 -0
- data/lib/libxml/schema/attribute.rb +19 -0
- data/lib/libxml/schema/element.rb +27 -0
- data/lib/libxml/schema/type.rb +29 -0
- data/lib/libxml/tree.rb +29 -0
- data/lib/libxml/xpath_object.rb +16 -0
- data/lib/xml.rb +14 -0
- data/lib/xml/libxml.rb +10 -0
- data/libxml-ruby.gemspec +47 -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/c14n/given/doc.dtd +1 -0
- data/test/c14n/given/example-1.xml +14 -0
- data/test/c14n/given/example-2.xml +11 -0
- data/test/c14n/given/example-3.xml +18 -0
- data/test/c14n/given/example-4.xml +9 -0
- data/test/c14n/given/example-5.xml +12 -0
- data/test/c14n/given/example-6.xml +2 -0
- data/test/c14n/given/example-7.xml +11 -0
- data/test/c14n/given/example-8.xml +11 -0
- data/test/c14n/given/example-8.xpath +10 -0
- data/test/c14n/given/world.txt +1 -0
- data/test/c14n/result/1-1-without-comments/example-1 +4 -0
- data/test/c14n/result/1-1-without-comments/example-2 +11 -0
- data/test/c14n/result/1-1-without-comments/example-3 +14 -0
- data/test/c14n/result/1-1-without-comments/example-4 +9 -0
- data/test/c14n/result/1-1-without-comments/example-5 +3 -0
- data/test/c14n/result/1-1-without-comments/example-6 +1 -0
- data/test/c14n/result/1-1-without-comments/example-7 +1 -0
- data/test/c14n/result/1-1-without-comments/example-8 +1 -0
- data/test/c14n/result/with-comments/example-1 +6 -0
- data/test/c14n/result/with-comments/example-2 +11 -0
- data/test/c14n/result/with-comments/example-3 +14 -0
- data/test/c14n/result/with-comments/example-4 +9 -0
- data/test/c14n/result/with-comments/example-5 +4 -0
- data/test/c14n/result/with-comments/example-6 +1 -0
- data/test/c14n/result/with-comments/example-7 +1 -0
- data/test/c14n/result/without-comments/example-1 +4 -0
- data/test/c14n/result/without-comments/example-2 +11 -0
- data/test/c14n/result/without-comments/example-3 +14 -0
- data/test/c14n/result/without-comments/example-4 +9 -0
- data/test/c14n/result/without-comments/example-5 +3 -0
- data/test/c14n/result/without-comments/example-6 +1 -0
- data/test/c14n/result/without-comments/example-7 +1 -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 +154 -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 +40 -0
- data/test/model/soap.xml +27 -0
- data/test/model/xinclude.xml +5 -0
- data/test/tc_attr.rb +181 -0
- data/test/tc_attr_decl.rb +132 -0
- data/test/tc_attributes.rb +142 -0
- data/test/tc_canonicalize.rb +124 -0
- data/test/tc_deprecated_require.rb +12 -0
- data/test/tc_document.rb +125 -0
- data/test/tc_document_write.rb +195 -0
- data/test/tc_dtd.rb +128 -0
- data/test/tc_encoding.rb +126 -0
- data/test/tc_encoding_sax.rb +115 -0
- data/test/tc_error.rb +179 -0
- data/test/tc_html_parser.rb +161 -0
- data/test/tc_html_parser_context.rb +23 -0
- data/test/tc_namespace.rb +61 -0
- data/test/tc_namespaces.rb +209 -0
- data/test/tc_node.rb +215 -0
- data/test/tc_node_cdata.rb +50 -0
- data/test/tc_node_comment.rb +32 -0
- data/test/tc_node_copy.rb +41 -0
- data/test/tc_node_edit.rb +174 -0
- data/test/tc_node_pi.rb +39 -0
- data/test/tc_node_text.rb +70 -0
- data/test/tc_node_write.rb +107 -0
- data/test/tc_node_xlink.rb +28 -0
- data/test/tc_parser.rb +375 -0
- data/test/tc_parser_context.rb +204 -0
- data/test/tc_properties.rb +38 -0
- data/test/tc_reader.rb +399 -0
- data/test/tc_relaxng.rb +53 -0
- data/test/tc_sax_parser.rb +319 -0
- data/test/tc_schema.rb +161 -0
- data/test/tc_traversal.rb +152 -0
- data/test/tc_writer.rb +447 -0
- data/test/tc_xinclude.rb +20 -0
- data/test/tc_xml.rb +225 -0
- data/test/tc_xpath.rb +244 -0
- data/test/tc_xpath_context.rb +88 -0
- data/test/tc_xpath_expression.rb +37 -0
- data/test/tc_xpointer.rb +72 -0
- data/test/test_helper.rb +16 -0
- data/test/test_suite.rb +49 -0
- metadata +344 -0
@@ -0,0 +1,152 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require './test_helper'
|
4
|
+
|
5
|
+
class TestTranversal < Minitest::Test
|
6
|
+
ROOT_NODES_LENGTH = 27
|
7
|
+
ROOT_ELEMENTS_LENGTH = 13
|
8
|
+
|
9
|
+
def setup
|
10
|
+
filename = File.join(File.dirname(__FILE__), 'model/books.xml')
|
11
|
+
@doc = XML::Document.file(filename)
|
12
|
+
end
|
13
|
+
|
14
|
+
def teardown
|
15
|
+
@doc = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_children
|
19
|
+
# Includes text nodes and such
|
20
|
+
assert_equal(ROOT_NODES_LENGTH, @doc.root.children.length)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_children_iteration
|
24
|
+
# Includes text nodes and such
|
25
|
+
nodes = @doc.root.children.inject([]) do |arr, node|
|
26
|
+
arr << node
|
27
|
+
arr
|
28
|
+
end
|
29
|
+
|
30
|
+
assert_equal(ROOT_NODES_LENGTH, nodes.length)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_no_children
|
34
|
+
# Get a node with no children
|
35
|
+
node = @doc.find_first('/catalog/book[@id="bk113"]/price')
|
36
|
+
assert_equal(0, node.children.length)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_no_children_inner_xml
|
40
|
+
# Get a node with no children
|
41
|
+
node = @doc.find_first('/catalog/book[@id="bk113"]/price')
|
42
|
+
assert_nil(node.inner_xml)
|
43
|
+
end
|
44
|
+
def test_each
|
45
|
+
# Includes text nodes and such
|
46
|
+
nodes = @doc.root.inject([]) do |arr, node|
|
47
|
+
arr << node
|
48
|
+
arr
|
49
|
+
end
|
50
|
+
|
51
|
+
assert_equal(ROOT_NODES_LENGTH, nodes.length)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_each_element
|
55
|
+
# Includes text nodes and such
|
56
|
+
nodes = []
|
57
|
+
@doc.root.each_element do |node|
|
58
|
+
nodes << node
|
59
|
+
end
|
60
|
+
|
61
|
+
assert_equal(ROOT_ELEMENTS_LENGTH, nodes.length)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_next
|
65
|
+
nodes = []
|
66
|
+
|
67
|
+
node = @doc.root.first
|
68
|
+
|
69
|
+
while node
|
70
|
+
nodes << node
|
71
|
+
node = node.next
|
72
|
+
end
|
73
|
+
assert_equal(ROOT_NODES_LENGTH, nodes.length)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_next?
|
77
|
+
first_node = @doc.root.first
|
78
|
+
assert(first_node.next?)
|
79
|
+
|
80
|
+
last_node = @doc.root.last
|
81
|
+
assert(!last_node.next?)
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_prev
|
85
|
+
nodes = []
|
86
|
+
|
87
|
+
node = @doc.root.last
|
88
|
+
|
89
|
+
while node
|
90
|
+
nodes << node
|
91
|
+
node = node.prev
|
92
|
+
end
|
93
|
+
assert_equal(ROOT_NODES_LENGTH, nodes.length)
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_prev?
|
97
|
+
first_node = @doc.root.first
|
98
|
+
assert(!first_node.prev?)
|
99
|
+
|
100
|
+
last_node = @doc.root.last
|
101
|
+
assert(last_node.prev?)
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_parent?
|
105
|
+
assert(!@doc.parent?)
|
106
|
+
assert(@doc.root.parent?)
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_child?
|
110
|
+
assert(@doc.child?)
|
111
|
+
assert(!@doc.root.first.child?)
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_next_prev_equivalence
|
115
|
+
next_nodes = []
|
116
|
+
last_nodes = []
|
117
|
+
|
118
|
+
node = @doc.root.first
|
119
|
+
while node
|
120
|
+
next_nodes << node
|
121
|
+
node = node.next
|
122
|
+
end
|
123
|
+
|
124
|
+
node = @doc.root.last
|
125
|
+
while node
|
126
|
+
last_nodes << node
|
127
|
+
node = node.prev
|
128
|
+
end
|
129
|
+
|
130
|
+
assert_equal(next_nodes, last_nodes.reverse)
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_next_children_equivalence
|
134
|
+
next_nodes = []
|
135
|
+
|
136
|
+
node = @doc.root.first
|
137
|
+
while node
|
138
|
+
next_nodes << node
|
139
|
+
node = node.next
|
140
|
+
end
|
141
|
+
|
142
|
+
assert_equal(@doc.root.children, next_nodes)
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_doc_class
|
146
|
+
assert_instance_of(XML::Document, @doc)
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_root_class
|
150
|
+
assert_instance_of(XML::Node, @doc.root)
|
151
|
+
end
|
152
|
+
end
|
data/test/tc_writer.rb
ADDED
@@ -0,0 +1,447 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require './test_helper'
|
4
|
+
require 'stringio'
|
5
|
+
|
6
|
+
class TestWriter < Minitest::Test
|
7
|
+
XSL_PREFIX = 'xsl'
|
8
|
+
XSL_URI = 'http://www.w3.org/1999/XSL/Transform'
|
9
|
+
|
10
|
+
def test_generic_failure
|
11
|
+
writer = XML::Writer.string
|
12
|
+
writer.start_document
|
13
|
+
assert(!writer.end_element)
|
14
|
+
writer.end_document
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_empty_doc
|
18
|
+
writer = XML::Writer.string
|
19
|
+
document writer
|
20
|
+
assert_equal(writer.result.strip!, '<?xml version="1.0"?>')
|
21
|
+
|
22
|
+
writer = XML::Writer.string
|
23
|
+
document writer, { :encoding => XML::Encoding::ISO_8859_1 }
|
24
|
+
assert_equal(writer.result.strip!, '<?xml version="1.0" encoding="ISO-8859-1"?>')
|
25
|
+
|
26
|
+
writer = XML::Writer.string
|
27
|
+
document writer, { :standalone => 1 }
|
28
|
+
assert_equal(writer.result.strip!, '<?xml version="1.0" standalone="yes"?>')
|
29
|
+
|
30
|
+
writer = XML::Writer.string
|
31
|
+
document writer, { :standalone => 1, :encoding => XML::Encoding::ISO_8859_1, :foo => :bar }
|
32
|
+
assert_equal(writer.result.strip!, '<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>')
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_single_root
|
36
|
+
writer = XML::Writer.string
|
37
|
+
document writer do
|
38
|
+
element writer, 'root'
|
39
|
+
end
|
40
|
+
|
41
|
+
assert_equal(writer.result.strip!, "<?xml version=\"1.0\"?>\n<root/>")
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_pi
|
45
|
+
expected = "<?xml version=\"1.0\"?>\n<?php echo \"foo\";?>"
|
46
|
+
|
47
|
+
writer = XML::Writer.string
|
48
|
+
document writer do
|
49
|
+
assert(writer.start_pi('php'))
|
50
|
+
assert(writer.write_string('echo "foo";'))
|
51
|
+
assert(writer.end_pi)
|
52
|
+
end
|
53
|
+
assert_equal(writer.result.strip!, expected)
|
54
|
+
|
55
|
+
writer = XML::Writer.string
|
56
|
+
document writer do
|
57
|
+
assert(writer.write_pi('php', 'echo "foo";'))
|
58
|
+
end
|
59
|
+
assert_equal(writer.result.strip!, expected)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_comment
|
63
|
+
expected = "<?xml version=\"1.0\"?>\n<!--foo-->"
|
64
|
+
|
65
|
+
writer = XML::Writer.string
|
66
|
+
document writer do
|
67
|
+
assert(writer.start_comment)
|
68
|
+
assert(writer.write_string 'foo')
|
69
|
+
assert(writer.end_comment)
|
70
|
+
end
|
71
|
+
assert_equal(writer.result.strip!, expected)
|
72
|
+
|
73
|
+
writer = XML::Writer.string
|
74
|
+
document writer do
|
75
|
+
assert(writer.write_comment 'foo')
|
76
|
+
end
|
77
|
+
assert_equal(writer.result.strip!, expected)
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_cdata
|
81
|
+
expected = "<?xml version=\"1.0\"?>\n<root><![CDATA[<?php echo $foo; ?>]]></root>"
|
82
|
+
|
83
|
+
writer = XML::Writer.string
|
84
|
+
document writer do
|
85
|
+
element writer, 'root' do
|
86
|
+
assert(writer.start_cdata)
|
87
|
+
assert(writer.write_string '<?php echo $foo; ?>')
|
88
|
+
assert(writer.end_cdata)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
assert_equal(writer.result.strip!, expected)
|
92
|
+
|
93
|
+
writer = XML::Writer.string
|
94
|
+
document writer do
|
95
|
+
element writer, 'root' do
|
96
|
+
assert(writer.write_cdata '<?php echo $foo; ?>')
|
97
|
+
end
|
98
|
+
end
|
99
|
+
assert_equal(writer.result.strip!, expected)
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_write_empty_elements
|
103
|
+
writer = XML::Writer.string
|
104
|
+
document writer do
|
105
|
+
assert(writer.write_element 'foo')
|
106
|
+
end
|
107
|
+
assert_equal(writer.result.strip!, "<?xml version=\"1.0\"?>\n<foo/>")
|
108
|
+
|
109
|
+
writer = XML::Writer.string
|
110
|
+
document writer do
|
111
|
+
assert(writer.write_element_ns XSL_PREFIX, 'stylesheet', XSL_URI)
|
112
|
+
end
|
113
|
+
assert_equal(writer.result.strip!, "<?xml version=\"1.0\"?>\n<" + XSL_PREFIX + ":stylesheet xmlns:xsl=\"" + XSL_URI + "\"/>")
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_valued_element
|
117
|
+
expected = "<?xml version=\"1.0\"?>\n<abc>123<def>456<ghi>789</ghi>cueillir des cerises</def>nous irons au bois</abc>"
|
118
|
+
|
119
|
+
writer = XML::Writer.string
|
120
|
+
document writer do
|
121
|
+
assert(writer.start_element 'abc')
|
122
|
+
assert(writer.write_string '123')
|
123
|
+
assert(writer.start_element 'def')
|
124
|
+
assert(writer.write_string '456')
|
125
|
+
assert(writer.start_element 'ghi')
|
126
|
+
assert(writer.write_string '789')
|
127
|
+
assert(writer.end_element)
|
128
|
+
assert(writer.write_string 'cueillir des cerises')
|
129
|
+
assert(writer.end_element)
|
130
|
+
assert(writer.write_string 'nous irons au bois')
|
131
|
+
assert(writer.end_element)
|
132
|
+
end
|
133
|
+
assert_equal(writer.result.strip!, expected)
|
134
|
+
|
135
|
+
writer = XML::Writer.string
|
136
|
+
document writer do
|
137
|
+
assert(writer.start_element 'abc')
|
138
|
+
assert(writer.write_string '123')
|
139
|
+
assert(writer.start_element 'def')
|
140
|
+
assert(writer.write_string '456')
|
141
|
+
assert(writer.write_element 'ghi', '789')
|
142
|
+
assert(writer.write_string 'cueillir des cerises')
|
143
|
+
assert(writer.end_element)
|
144
|
+
assert(writer.write_string 'nous irons au bois')
|
145
|
+
assert(writer.end_element)
|
146
|
+
end
|
147
|
+
assert_equal(writer.result.strip!, expected)
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_valued_element_ns
|
151
|
+
expected = "<?xml version=\"1.0\"?>\n" +
|
152
|
+
"<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">" +
|
153
|
+
"<xsl:attribute-set>" +
|
154
|
+
"<xsl:attribute>20px</xsl:attribute>" +
|
155
|
+
"<xsl:attribute>solid</xsl:attribute>" +
|
156
|
+
"</xsl:attribute-set>" +
|
157
|
+
"</xsl:stylesheet>"
|
158
|
+
|
159
|
+
writer = XML::Writer.string
|
160
|
+
document writer do
|
161
|
+
assert(writer.start_element_ns XSL_PREFIX, 'stylesheet', XSL_URI)
|
162
|
+
assert(writer.start_element_ns XSL_PREFIX, 'attribute-set')
|
163
|
+
assert(writer.start_element_ns XSL_PREFIX, 'attribute')
|
164
|
+
assert(writer.write_string '20px')
|
165
|
+
assert(writer.end_element)
|
166
|
+
assert(writer.start_element_ns XSL_PREFIX, 'attribute')
|
167
|
+
assert(writer.write_string 'solid')
|
168
|
+
assert(writer.end_element)
|
169
|
+
assert(writer.end_element)
|
170
|
+
assert(writer.end_element)
|
171
|
+
end
|
172
|
+
assert_equal(writer.result.strip!, expected)
|
173
|
+
|
174
|
+
writer = XML::Writer.string
|
175
|
+
document writer do
|
176
|
+
assert(writer.start_element_ns XSL_PREFIX, 'stylesheet', XSL_URI)
|
177
|
+
assert(writer.start_element_ns XSL_PREFIX, 'attribute-set')
|
178
|
+
assert(writer.write_element_ns XSL_PREFIX, 'attribute', nil, '20px')
|
179
|
+
assert(writer.write_element_ns XSL_PREFIX, 'attribute', nil, 'solid')
|
180
|
+
assert(writer.end_element)
|
181
|
+
assert(writer.end_element)
|
182
|
+
end
|
183
|
+
assert_equal(writer.result.strip!, expected)
|
184
|
+
end
|
185
|
+
|
186
|
+
def test_attribute
|
187
|
+
writer = XML::Writer.string
|
188
|
+
document writer do
|
189
|
+
element writer, 'root' do
|
190
|
+
element writer, 'child' do
|
191
|
+
assert(writer.start_attribute 'foo')
|
192
|
+
assert(writer.write_string 'bar')
|
193
|
+
assert(writer.end_attribute)
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
assert_equal(writer.result.strip!, "<?xml version=\"1.0\"?>\n<root><child foo=\"bar\"/></root>")
|
198
|
+
|
199
|
+
writer = XML::Writer.string
|
200
|
+
document writer do
|
201
|
+
element writer, 'root' do
|
202
|
+
element writer, 'child' do
|
203
|
+
assert(writer.write_attribute 'abc', 'def')
|
204
|
+
assert(writer.write_string 'ghi') # must be done after attributes
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
assert_equal(writer.result.strip!, "<?xml version=\"1.0\"?>\n<root><child abc=\"def\">ghi</child></root>")
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_attribute_ns
|
212
|
+
expected = "<?xml version=\"1.0\"?>\n<root><link xlink:href=\"abc\" xhtml:class=\"def\"/></root>"
|
213
|
+
|
214
|
+
writer = XML::Writer.string
|
215
|
+
document writer do
|
216
|
+
element writer, 'root' do
|
217
|
+
element writer, 'link' do
|
218
|
+
assert(writer.write_attribute_ns 'xlink', 'href', nil, 'abc')
|
219
|
+
assert(writer.write_attribute_ns 'xhtml', 'class', nil, 'def')
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
assert_equal(writer.result.strip!, expected)
|
224
|
+
|
225
|
+
writer = XML::Writer.string
|
226
|
+
document writer do
|
227
|
+
element writer, 'root' do
|
228
|
+
element writer, 'link' do
|
229
|
+
assert(writer.start_attribute_ns 'xlink', 'href')
|
230
|
+
assert(writer.write_string 'abc')
|
231
|
+
assert(writer.end_attribute)
|
232
|
+
assert(writer.start_attribute_ns 'xhtml', 'class')
|
233
|
+
assert(writer.write_string 'def')
|
234
|
+
assert(writer.end_attribute)
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
assert_equal(writer.result.strip!, expected)
|
239
|
+
end
|
240
|
+
|
241
|
+
def test_quote_char
|
242
|
+
if XML::Writer.method_defined? :set_quote_char
|
243
|
+
writer = XML::Writer.string
|
244
|
+
writer.set_quote_char "'"
|
245
|
+
document writer do
|
246
|
+
element writer, 'root' do
|
247
|
+
assert(writer.start_attribute 'abc')
|
248
|
+
assert(writer.write_string 'def')
|
249
|
+
assert(writer.end_attribute)
|
250
|
+
end
|
251
|
+
end
|
252
|
+
assert(writer.result.strip!.end_with? "<root abc='def'/>")
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
def test_indentation_on
|
257
|
+
if XML::Writer.method_defined? :set_indent
|
258
|
+
writer = XML::Writer.string
|
259
|
+
assert(writer.set_indent true)
|
260
|
+
document writer do
|
261
|
+
element writer, 'root' do
|
262
|
+
element writer, 'child' do
|
263
|
+
assert(writer.start_attribute 'abc')
|
264
|
+
assert(writer.write_string 'def')
|
265
|
+
assert(writer.end_attribute)
|
266
|
+
end
|
267
|
+
end
|
268
|
+
end
|
269
|
+
assert_equal(writer.result.strip!, "<?xml version=\"1.0\"?>\n<root>\n <child abc=\"def\"/>\n</root>")
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
def test_indentation_string
|
274
|
+
if XML::Writer.method_defined? :set_indent_string
|
275
|
+
writer = XML::Writer.string
|
276
|
+
assert(writer.set_indent true)
|
277
|
+
assert(writer.set_indent_string ' ' * 4)
|
278
|
+
document writer do
|
279
|
+
element writer, 'root' do
|
280
|
+
element writer, 'child' do
|
281
|
+
assert(writer.start_attribute 'abc')
|
282
|
+
assert(writer.write_string 'def')
|
283
|
+
assert(writer.end_attribute)
|
284
|
+
end
|
285
|
+
end
|
286
|
+
end
|
287
|
+
assert_equal(writer.result.strip!, "<?xml version=\"1.0\"?>\n<root>\n <child abc=\"def\"/>\n</root>")
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
def test_dtd_declaration
|
292
|
+
writer = XML::Writer.string
|
293
|
+
dtd writer, 'html'
|
294
|
+
assert_equal(writer.result, '<!DOCTYPE html>')
|
295
|
+
|
296
|
+
writer = XML::Writer.string
|
297
|
+
dtd writer, 'html', '-//W3C//DTD XHTML 1.0 Strict//EN', 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'
|
298
|
+
assert_equal(writer.result, '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">')
|
299
|
+
end
|
300
|
+
|
301
|
+
def test_dtd_attlist
|
302
|
+
expected = '<!DOCTYPE http [<!ATTLIST method (get|post) "get">]>'
|
303
|
+
|
304
|
+
writer = XML::Writer.string
|
305
|
+
dtd writer, 'http' do
|
306
|
+
assert(writer.start_dtd_attlist 'method')
|
307
|
+
assert(writer.write_string '(get|post) "get"')
|
308
|
+
assert(writer.end_dtd_attlist)
|
309
|
+
end
|
310
|
+
assert_equal(writer.result, expected)
|
311
|
+
|
312
|
+
writer = XML::Writer.string
|
313
|
+
dtd writer, 'http' do
|
314
|
+
assert(writer.write_dtd_attlist 'method', '(get|post) "get"')
|
315
|
+
end
|
316
|
+
assert_equal(writer.result, expected)
|
317
|
+
end
|
318
|
+
|
319
|
+
def test_dtd_element
|
320
|
+
expected = '<!DOCTYPE html [<!ELEMENT dl (dt|dd)+>]>'
|
321
|
+
|
322
|
+
writer = XML::Writer.string
|
323
|
+
dtd writer, 'html' do
|
324
|
+
assert(writer.start_dtd_element 'dl')
|
325
|
+
assert(writer.write_string '(dt|dd)+')
|
326
|
+
assert(writer.end_dtd_element)
|
327
|
+
end
|
328
|
+
assert_equal(writer.result, expected)
|
329
|
+
|
330
|
+
writer = XML::Writer.string
|
331
|
+
dtd writer, 'html' do
|
332
|
+
assert(writer.write_dtd_element 'dl', '(dt|dd)+')
|
333
|
+
end
|
334
|
+
assert_equal(writer.result, expected)
|
335
|
+
end
|
336
|
+
|
337
|
+
def test_dtd_entity
|
338
|
+
# parameterized entity
|
339
|
+
expected = '<!DOCTYPE html [<!ENTITY % special.pre "br | span | bdo | map"><!ENTITY % special "%special.pre; | object | img">]>'
|
340
|
+
|
341
|
+
writer = XML::Writer.string
|
342
|
+
dtd writer, 'html' do
|
343
|
+
assert(writer.start_dtd_entity 'special.pre', true)
|
344
|
+
assert(writer.write_string 'br | span | bdo | map')
|
345
|
+
assert(writer.end_dtd_entity)
|
346
|
+
assert(writer.start_dtd_entity 'special', true)
|
347
|
+
assert(writer.write_string '%special.pre; | object | img')
|
348
|
+
assert(writer.end_dtd_entity)
|
349
|
+
end
|
350
|
+
assert_equal(writer.result, expected)
|
351
|
+
|
352
|
+
writer = XML::Writer.string
|
353
|
+
dtd writer, 'html' do
|
354
|
+
assert(writer.write_dtd_internal_entity 'special.pre', 'br | span | bdo | map', true)
|
355
|
+
assert(writer.write_dtd_internal_entity 'special', '%special.pre; | object | img', true)
|
356
|
+
end
|
357
|
+
assert_equal(writer.result, expected)
|
358
|
+
|
359
|
+
# non parameterized entity
|
360
|
+
expected = '<!DOCTYPE html [<!ENTITY Alpha "Α">]>'
|
361
|
+
|
362
|
+
writer = XML::Writer.string
|
363
|
+
dtd writer, 'html' do
|
364
|
+
assert(writer.start_dtd_entity 'Alpha')
|
365
|
+
assert(writer.write_string 'Α')
|
366
|
+
assert(writer.end_dtd_entity)
|
367
|
+
end
|
368
|
+
assert_equal(writer.result, expected)
|
369
|
+
|
370
|
+
writer = XML::Writer.string
|
371
|
+
dtd writer, 'html' do
|
372
|
+
assert(writer.start_dtd_entity 'Alpha', false)
|
373
|
+
assert(writer.write_string 'Α')
|
374
|
+
assert(writer.end_dtd_entity)
|
375
|
+
end
|
376
|
+
assert_equal(writer.result, expected)
|
377
|
+
|
378
|
+
writer = XML::Writer.string
|
379
|
+
dtd writer, 'html' do
|
380
|
+
assert(writer.write_dtd_internal_entity 'Alpha', 'Α', false)
|
381
|
+
end
|
382
|
+
assert_equal(writer.result, expected)
|
383
|
+
end
|
384
|
+
|
385
|
+
def test_dtd_notation
|
386
|
+
writer = XML::Writer.string
|
387
|
+
dtd writer, 'pictures' do
|
388
|
+
assert(writer.write_dtd_notation 'GIF89a', '-//Compuserve//NOTATION Graphics Interchange Format 89a//EN', nil)
|
389
|
+
assert(writer.write_dtd_external_entity 'pictures', nil, 'images/plage.gif', 'GIF89a', false)
|
390
|
+
end
|
391
|
+
assert_equal(writer.result, '<!DOCTYPE pictures [<!NOTATION GIF89a PUBLIC "-//Compuserve//NOTATION Graphics Interchange Format 89a//EN"><!ENTITY pictures SYSTEM "images/plage.gif" NDATA GIF89a>]>')
|
392
|
+
end
|
393
|
+
|
394
|
+
def test_encoding
|
395
|
+
if defined?(Encoding)
|
396
|
+
iso = 'éloïse'.encode 'ISO-8859-1'
|
397
|
+
|
398
|
+
writer = XML::Writer.string
|
399
|
+
document writer do
|
400
|
+
assert(writer.write_element iso)
|
401
|
+
end
|
402
|
+
assert_equal(writer.result.strip!, "<?xml version=\"1.0\"?>\n<éloïse/>")
|
403
|
+
end
|
404
|
+
end
|
405
|
+
|
406
|
+
def test_flush
|
407
|
+
writer = XML::Writer.string
|
408
|
+
assert(writer.start_document)
|
409
|
+
assert_equal(writer.flush.strip!, '<?xml version="1.0"?>')
|
410
|
+
assert(writer.start_element 'foo')
|
411
|
+
assert(writer.end_element)
|
412
|
+
assert(writer.end_document)
|
413
|
+
writer.flush false
|
414
|
+
assert_equal(writer.result.strip, '<foo/>')
|
415
|
+
end
|
416
|
+
|
417
|
+
def test_nil_pe_issue
|
418
|
+
expected = '<!DOCTYPE html [<!ENTITY special.pre "br | span | bdo | map"><!ENTITY special "%special.pre; | object | img">]>'
|
419
|
+
|
420
|
+
writer = XML::Writer.string
|
421
|
+
dtd writer, 'html' do
|
422
|
+
assert(writer.write_dtd_internal_entity 'special.pre', 'br | span | bdo | map', nil)
|
423
|
+
assert(writer.write_dtd_internal_entity 'special', '%special.pre; | object | img', nil)
|
424
|
+
end
|
425
|
+
assert_equal(writer.result, expected)
|
426
|
+
end
|
427
|
+
|
428
|
+
private
|
429
|
+
|
430
|
+
def document(writer, options = {})
|
431
|
+
assert(writer.start_document options)
|
432
|
+
yield if block_given?
|
433
|
+
assert(writer.end_document)
|
434
|
+
end
|
435
|
+
|
436
|
+
def dtd(writer, name, pubid = nil, sysid = nil)
|
437
|
+
assert(writer.start_dtd name, pubid, sysid)
|
438
|
+
yield if block_given?
|
439
|
+
assert(writer.end_dtd)
|
440
|
+
end
|
441
|
+
|
442
|
+
def element(writer, localname)
|
443
|
+
assert(writer.start_element localname)
|
444
|
+
yield if block_given?
|
445
|
+
assert(writer.end_element)
|
446
|
+
end
|
447
|
+
end
|