libxml-ruby 2.8.0 → 2.9.0
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 +4 -4
- data/HISTORY +15 -0
- data/README.rdoc +7 -7
- data/Rakefile +80 -78
- data/ext/libxml/extconf.h +4 -0
- data/ext/libxml/extconf.rb +57 -116
- data/ext/libxml/libxml.c +4 -0
- data/ext/libxml/ruby_xml.c +977 -893
- data/ext/libxml/ruby_xml.h +20 -10
- data/ext/libxml/ruby_xml_attr.c +333 -333
- data/ext/libxml/ruby_xml_attr_decl.c +2 -2
- data/ext/libxml/ruby_xml_cbg.c +85 -85
- data/ext/libxml/ruby_xml_document.c +1133 -1147
- data/ext/libxml/ruby_xml_dtd.c +261 -268
- data/ext/libxml/ruby_xml_encoding.c +262 -260
- data/ext/libxml/ruby_xml_encoding.h +19 -19
- data/ext/libxml/ruby_xml_html_parser_context.c +337 -338
- data/ext/libxml/ruby_xml_input_cbg.c +191 -191
- data/ext/libxml/ruby_xml_io.c +52 -50
- data/ext/libxml/ruby_xml_namespace.c +2 -2
- data/ext/libxml/ruby_xml_node.c +1446 -1452
- data/ext/libxml/ruby_xml_parser_context.c +999 -1001
- data/ext/libxml/ruby_xml_reader.c +1226 -1228
- data/ext/libxml/ruby_xml_relaxng.c +110 -111
- data/ext/libxml/ruby_xml_sax2_handler.c +326 -328
- data/ext/libxml/ruby_xml_schema.c +300 -301
- data/ext/libxml/ruby_xml_version.h +3 -3
- data/ext/libxml/ruby_xml_writer.c +14 -15
- data/ext/libxml/ruby_xml_xpath.c +188 -188
- data/ext/libxml/ruby_xml_xpath_context.c +360 -361
- data/ext/libxml/ruby_xml_xpath_object.c +335 -335
- data/libxml-ruby.gemspec +47 -44
- data/test/tc_attr.rb +5 -7
- data/test/tc_attr_decl.rb +5 -6
- data/test/tc_attributes.rb +1 -2
- data/test/tc_canonicalize.rb +1 -2
- data/test/tc_deprecated_require.rb +1 -2
- data/test/tc_document.rb +4 -5
- data/test/tc_document_write.rb +2 -3
- data/test/tc_dtd.rb +4 -5
- data/test/tc_encoding.rb +126 -126
- data/test/tc_encoding_sax.rb +4 -3
- data/test/tc_error.rb +14 -15
- data/test/tc_html_parser.rb +15 -7
- data/test/tc_html_parser_context.rb +1 -2
- data/test/tc_namespace.rb +2 -3
- data/test/tc_namespaces.rb +5 -6
- data/test/tc_node.rb +2 -3
- data/test/tc_node_cdata.rb +2 -3
- data/test/tc_node_comment.rb +1 -2
- data/test/tc_node_copy.rb +1 -2
- data/test/tc_node_edit.rb +5 -7
- data/test/tc_node_pi.rb +1 -2
- data/test/tc_node_text.rb +2 -3
- data/test/tc_node_write.rb +2 -3
- data/test/tc_node_xlink.rb +1 -2
- data/test/tc_parser.rb +18 -24
- data/test/tc_parser_context.rb +6 -7
- data/test/tc_properties.rb +1 -2
- data/test/tc_reader.rb +9 -10
- data/test/tc_relaxng.rb +4 -5
- data/test/tc_sax_parser.rb +9 -10
- data/test/tc_schema.rb +4 -5
- data/test/tc_traversal.rb +1 -2
- data/test/tc_writer.rb +1 -2
- data/test/tc_xinclude.rb +1 -2
- data/test/tc_xml.rb +1 -2
- data/test/tc_xpath.rb +8 -9
- data/test/tc_xpath_context.rb +3 -4
- data/test/tc_xpath_expression.rb +3 -4
- data/test/tc_xpointer.rb +1 -3
- data/test/test_helper.rb +3 -1
- data/test/test_suite.rb +0 -1
- metadata +47 -11
- data/test/etc_doc_to_s.rb +0 -21
- data/test/ets_doc_file.rb +0 -17
- data/test/ets_doc_to_s.rb +0 -23
- data/test/ets_gpx.rb +0 -28
- data/test/ets_node_gc.rb +0 -23
- data/test/ets_test.xml +0 -2
- data/test/ets_tsr.rb +0 -11
data/libxml-ruby.gemspec
CHANGED
@@ -1,44 +1,47 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
# Determine the current version of the software
|
4
|
-
version = File.read('ext/libxml/ruby_xml_version.h').match(/\s*RUBY_LIBXML_VERSION\s*['"](\d.+)['"]/)[1]
|
5
|
-
|
6
|
-
Gem::Specification.new do |spec|
|
7
|
-
spec.name = 'libxml-ruby'
|
8
|
-
spec.version = version
|
9
|
-
spec.homepage = 'http://xml4r.github.com/libxml-ruby'
|
10
|
-
spec.summary = 'Ruby Bindings for LibXML2'
|
11
|
-
spec.description = <<-EOS
|
12
|
-
The Libxml-Ruby project provides Ruby language bindings for the GNOME
|
13
|
-
Libxml2 XML toolkit. It is free software, released under the MIT License.
|
14
|
-
Libxml-ruby's primary advantage over REXML is performance - if speed
|
15
|
-
is your need, these are good libraries to consider, as demonstrated
|
16
|
-
by the informal benchmark below.
|
17
|
-
EOS
|
18
|
-
spec.authors = ['Ross Bamform', 'Wai-Sun Chia', 'Sean Chittenden',
|
19
|
-
'Dan Janwoski', 'Anurag Priyam', 'Charlie Savage',
|
20
|
-
'Ryan Johnson']
|
21
|
-
spec.platform = Gem::Platform::RUBY
|
22
|
-
spec.bindir =
|
23
|
-
spec.extensions = [
|
24
|
-
spec.files = Dir.glob(['HISTORY',
|
25
|
-
'LICENSE',
|
26
|
-
'libxml-ruby.gemspec',
|
27
|
-
'MANIFEST',
|
28
|
-
'Rakefile',
|
29
|
-
'README.rdoc',
|
30
|
-
'setup.rb',
|
31
|
-
'ext/libxml/*.def',
|
32
|
-
'ext/libxml/*.h',
|
33
|
-
'ext/libxml/*.c',
|
34
|
-
'ext/libxml/*.rb',
|
35
|
-
'ext/vc/*.sln',
|
36
|
-
'ext/vc/*.vcprojx',
|
37
|
-
'lib/**/*.rb',
|
38
|
-
'script/**/*',
|
39
|
-
'test/**/*'])
|
40
|
-
spec.test_files = Dir.glob(
|
41
|
-
spec.required_ruby_version = '>= 1.8.6'
|
42
|
-
spec.date = DateTime.now
|
43
|
-
spec.
|
44
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Determine the current version of the software
|
4
|
+
version = File.read('ext/libxml/ruby_xml_version.h').match(/\s*RUBY_LIBXML_VERSION\s*['"](\d.+)['"]/)[1]
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'libxml-ruby'
|
8
|
+
spec.version = version
|
9
|
+
spec.homepage = 'http://xml4r.github.com/libxml-ruby'
|
10
|
+
spec.summary = 'Ruby Bindings for LibXML2'
|
11
|
+
spec.description = <<-EOS
|
12
|
+
The Libxml-Ruby project provides Ruby language bindings for the GNOME
|
13
|
+
Libxml2 XML toolkit. It is free software, released under the MIT License.
|
14
|
+
Libxml-ruby's primary advantage over REXML is performance - if speed
|
15
|
+
is your need, these are good libraries to consider, as demonstrated
|
16
|
+
by the informal benchmark below.
|
17
|
+
EOS
|
18
|
+
spec.authors = ['Ross Bamform', 'Wai-Sun Chia', 'Sean Chittenden',
|
19
|
+
'Dan Janwoski', 'Anurag Priyam', 'Charlie Savage',
|
20
|
+
'Ryan Johnson']
|
21
|
+
spec.platform = Gem::Platform::RUBY
|
22
|
+
spec.bindir = 'bin'
|
23
|
+
spec.extensions = ['ext/libxml/extconf.rb']
|
24
|
+
spec.files = Dir.glob(['HISTORY',
|
25
|
+
'LICENSE',
|
26
|
+
'libxml-ruby.gemspec',
|
27
|
+
'MANIFEST',
|
28
|
+
'Rakefile',
|
29
|
+
'README.rdoc',
|
30
|
+
'setup.rb',
|
31
|
+
'ext/libxml/*.def',
|
32
|
+
'ext/libxml/*.h',
|
33
|
+
'ext/libxml/*.c',
|
34
|
+
'ext/libxml/*.rb',
|
35
|
+
'ext/vc/*.sln',
|
36
|
+
'ext/vc/*.vcprojx',
|
37
|
+
'lib/**/*.rb',
|
38
|
+
'script/**/*',
|
39
|
+
'test/**/*'])
|
40
|
+
spec.test_files = Dir.glob('test/tc_*.rb')
|
41
|
+
spec.required_ruby_version = '>= 1.8.6'
|
42
|
+
spec.date = DateTime.now
|
43
|
+
spec.add_development_dependency('hanna_guado')
|
44
|
+
spec.add_development_dependency('rake-compiler')
|
45
|
+
spec.add_development_dependency('minitest')
|
46
|
+
spec.license = 'MIT'
|
47
|
+
end
|
data/test/tc_attr.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
3
|
require './test_helper'
|
4
|
-
require 'test/unit'
|
5
4
|
|
6
|
-
class AttrNodeTest < Test
|
5
|
+
class AttrNodeTest < Minitest::Test
|
7
6
|
def setup
|
8
7
|
xp = XML::Parser.string(<<-EOS)
|
9
8
|
<CityModel
|
@@ -27,7 +26,6 @@ class AttrNodeTest < Test::Unit::TestCase
|
|
27
26
|
|
28
27
|
def teardown
|
29
28
|
@doc = nil
|
30
|
-
GC.start
|
31
29
|
end
|
32
30
|
|
33
31
|
def city_member
|
@@ -35,7 +33,7 @@ class AttrNodeTest < Test::Unit::TestCase
|
|
35
33
|
end
|
36
34
|
|
37
35
|
def test_doc
|
38
|
-
|
36
|
+
refute_nil(@doc)
|
39
37
|
assert_equal(XML::Encoding::NONE, @doc.encoding)
|
40
38
|
end
|
41
39
|
|
@@ -84,7 +82,7 @@ class AttrNodeTest < Test::Unit::TestCase
|
|
84
82
|
|
85
83
|
def test_set_nil
|
86
84
|
attribute = city_member.attributes.get_attribute('name')
|
87
|
-
|
85
|
+
assert_raises(TypeError) do
|
88
86
|
attribute.value = nil
|
89
87
|
end
|
90
88
|
end
|
@@ -134,7 +132,7 @@ class AttrNodeTest < Test::Unit::TestCase
|
|
134
132
|
assert_equal(5, attributes.length)
|
135
133
|
|
136
134
|
attribute = attributes.get_attribute('name')
|
137
|
-
|
135
|
+
refute_nil(attribute.parent)
|
138
136
|
assert(attribute.parent?)
|
139
137
|
|
140
138
|
attribute.remove!
|
@@ -177,7 +175,7 @@ class AttrNodeTest < Test::Unit::TestCase
|
|
177
175
|
def test_no_attributes
|
178
176
|
element = @doc.find('/city:CityModel/city:type').first
|
179
177
|
|
180
|
-
|
178
|
+
refute_nil(element.attributes)
|
181
179
|
assert_equal(0, element.attributes.length)
|
182
180
|
end
|
183
181
|
end
|
data/test/tc_attr_decl.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
3
|
require './test_helper'
|
4
|
-
require 'test/unit'
|
5
4
|
|
6
|
-
class AttrDeclTest < Test
|
5
|
+
class AttrDeclTest < Minitest::Test
|
7
6
|
def setup
|
8
7
|
xp = XML::Parser.string(<<-EOS)
|
9
8
|
<!DOCTYPE test [
|
@@ -28,7 +27,7 @@ class AttrDeclTest < Test::Unit::TestCase
|
|
28
27
|
# Get a element with an access attribute
|
29
28
|
elem = @doc.find_first('/root/property[@name="readonly"]')
|
30
29
|
assert_equal(2, elem.attributes.length)
|
31
|
-
|
30
|
+
refute_nil(elem['access'])
|
32
31
|
|
33
32
|
# Get a element node without a access attribute
|
34
33
|
elem = @doc.find_first('/root/property[@name="readwrite"]')
|
@@ -42,7 +41,7 @@ class AttrDeclTest < Test::Unit::TestCase
|
|
42
41
|
|
43
42
|
# Get the attr_decl
|
44
43
|
attr = elem.attributes.get_attribute('access')
|
45
|
-
|
44
|
+
refute_nil(attr)
|
46
45
|
assert_equal(XML::Node::ATTRIBUTE_NODE, attr.node_type)
|
47
46
|
assert_equal('attribute', attr.node_type_name)
|
48
47
|
|
@@ -56,7 +55,7 @@ class AttrDeclTest < Test::Unit::TestCase
|
|
56
55
|
|
57
56
|
# Get the attr_decl
|
58
57
|
attr_decl = elem.attributes.get_attribute('access')
|
59
|
-
|
58
|
+
refute_nil(attr_decl)
|
60
59
|
assert_equal(XML::Node::ATTRIBUTE_DECL, attr_decl.node_type)
|
61
60
|
assert_equal('attribute declaration', attr_decl.node_type_name)
|
62
61
|
|
@@ -69,7 +68,7 @@ class AttrDeclTest < Test::Unit::TestCase
|
|
69
68
|
elem = @doc.find_first('/root/property[@name="readwrite"]')
|
70
69
|
attr_decl = elem.attributes.get_attribute('access')
|
71
70
|
|
72
|
-
|
71
|
+
refute_nil(attr_decl)
|
73
72
|
assert_equal(XML::Node::ATTRIBUTE_DECL, attr_decl.node_type)
|
74
73
|
assert_equal('attribute declaration', attr_decl.node_type_name)
|
75
74
|
end
|
data/test/tc_attributes.rb
CHANGED
data/test/tc_canonicalize.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
require './test_helper'
|
3
|
-
require 'test/unit'
|
4
3
|
|
5
|
-
class TestCanonicalize < Test
|
4
|
+
class TestCanonicalize < Minitest::Test
|
6
5
|
# (www.w3.org) 3.1 PIs, Comments, and Outside of Document Element
|
7
6
|
# http://www.w3.org/TR/xml-c14n#Example-OutsideDoc
|
8
7
|
def test_canonicalize_with_w3c_c14n_3_1
|
@@ -1,9 +1,8 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
3
|
require 'xml/libxml'
|
4
|
-
require 'test/unit'
|
5
4
|
|
6
|
-
class TestDeprecatedRequire < Test
|
5
|
+
class TestDeprecatedRequire < Minitest::Test
|
7
6
|
def test_basic
|
8
7
|
xp = XML::Parser.string('<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>')
|
9
8
|
assert_instance_of(XML::Parser, xp)
|
data/test/tc_document.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
require './test_helper'
|
3
|
-
require 'test/unit'
|
4
3
|
|
5
|
-
class TestDocument < Test
|
4
|
+
class TestDocument < Minitest::Test
|
6
5
|
def setup
|
7
6
|
xp = XML::Parser.string('<ruby_array uga="booga" foo="bar"><fixnum>one</fixnum><fixnum>two</fixnum></ruby_array>')
|
8
7
|
assert_instance_of(XML::Parser, xp)
|
@@ -26,7 +25,7 @@ class TestDocument < Test::Unit::TestCase
|
|
26
25
|
def test_find
|
27
26
|
set = @doc.find('/ruby_array/fixnum')
|
28
27
|
assert_instance_of(XML::XPath::Object, set)
|
29
|
-
|
28
|
+
assert_raises(NoMethodError) {
|
30
29
|
xpt = set.xpath
|
31
30
|
}
|
32
31
|
end
|
@@ -91,7 +90,7 @@ class TestDocument < Test::Unit::TestCase
|
|
91
90
|
doc1 = LibXML::XML::Document.string("<one/>")
|
92
91
|
doc2 = LibXML::XML::Document.string("<two/>")
|
93
92
|
|
94
|
-
error =
|
93
|
+
error = assert_raises(XML::Error) do
|
95
94
|
doc1.root = doc2.root
|
96
95
|
end
|
97
96
|
assert_equal(" Nodes belong to different documents. You must first import the node by calling XML::Document.import.",
|
@@ -111,7 +110,7 @@ class TestDocument < Test::Unit::TestCase
|
|
111
110
|
|
112
111
|
node = doc1.root.child
|
113
112
|
|
114
|
-
error =
|
113
|
+
error = assert_raises(XML::Error) do
|
115
114
|
doc2.root << node
|
116
115
|
end
|
117
116
|
|
data/test/tc_document_write.rb
CHANGED
@@ -2,9 +2,8 @@
|
|
2
2
|
|
3
3
|
require './test_helper'
|
4
4
|
require 'tmpdir'
|
5
|
-
require 'test/unit'
|
6
5
|
|
7
|
-
class TestDocumentWrite < Test
|
6
|
+
class TestDocumentWrite < Minitest::Test
|
8
7
|
def setup
|
9
8
|
@file_name = "model/bands.utf-8.xml"
|
10
9
|
|
@@ -91,7 +90,7 @@ class TestDocumentWrite < Test::Unit::TestCase
|
|
91
90
|
end
|
92
91
|
|
93
92
|
# Invalid encoding
|
94
|
-
error =
|
93
|
+
error = assert_raises(ArgumentError) do
|
95
94
|
@doc.to_s(:encoding => -9999)
|
96
95
|
end
|
97
96
|
assert_equal('Unknown encoding value: -9999', error.to_s)
|
data/test/tc_dtd.rb
CHANGED
@@ -2,9 +2,8 @@
|
|
2
2
|
|
3
3
|
require './test_helper'
|
4
4
|
|
5
|
-
require 'test/unit'
|
6
5
|
|
7
|
-
class TestDtd < Test
|
6
|
+
class TestDtd < Minitest::Test
|
8
7
|
def setup
|
9
8
|
xp = XML::Parser.string(<<-EOS)
|
10
9
|
<root>
|
@@ -71,12 +70,12 @@ class TestDtd < Test::Unit::TestCase
|
|
71
70
|
new_node = XML::Node.new('invalid', 'this will mess up validation')
|
72
71
|
@doc.root << new_node
|
73
72
|
|
74
|
-
error =
|
73
|
+
error = assert_raises(XML::Error) do
|
75
74
|
@doc.validate(dtd)
|
76
75
|
end
|
77
76
|
|
78
77
|
# Check the error worked
|
79
|
-
|
78
|
+
refute_nil(error)
|
80
79
|
assert_kind_of(XML::Error, error)
|
81
80
|
assert_equal("Error: No declaration for element invalid.", error.message)
|
82
81
|
assert_equal(XML::Error::VALID, error.domain)
|
@@ -89,7 +88,7 @@ class TestDtd < Test::Unit::TestCase
|
|
89
88
|
assert_nil(error.str3)
|
90
89
|
assert_equal(0, error.int1)
|
91
90
|
assert_equal(0, error.int2)
|
92
|
-
|
91
|
+
refute_nil(error.node)
|
93
92
|
assert_equal('invalid', error.node.name)
|
94
93
|
end
|
95
94
|
|
data/test/tc_encoding.rb
CHANGED
@@ -1,126 +1,126 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require './test_helper'
|
4
|
-
|
5
|
-
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
|
18
|
-
|
19
|
-
#
|
20
|
-
# http://en.wikipedia.org/wiki/
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_encoding
|
43
|
-
doc = XML::Document.new
|
44
|
-
assert_equal(XML::Encoding::NONE, doc.encoding)
|
45
|
-
assert_equal(Encoding::ASCII_8BIT, doc.rb_encoding) if defined?(Encoding)
|
46
|
-
|
47
|
-
file = File.expand_path(File.join(File.dirname(__FILE__), 'model/bands.xml'))
|
48
|
-
doc = XML::Document.file(file)
|
49
|
-
assert_equal(XML::Encoding::UTF_8, doc.encoding)
|
50
|
-
assert_equal(Encoding::UTF_8, doc.rb_encoding) if defined?(Encoding)
|
51
|
-
|
52
|
-
doc.encoding = XML::Encoding::ISO_8859_1
|
53
|
-
assert_equal(XML::Encoding::ISO_8859_1, doc.encoding)
|
54
|
-
assert_equal(Encoding::ISO8859_1, doc.rb_encoding) if defined?(Encoding)
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_no_internal_encoding_iso_8859_1
|
58
|
-
Encoding.default_internal = nil
|
59
|
-
load_encoding(Encoding::ISO_8859_1)
|
60
|
-
node = @doc.root.children.first
|
61
|
-
|
62
|
-
name = node.name
|
63
|
-
assert_equal(Encoding::UTF_8, name.encoding)
|
64
|
-
assert_equal("m\u00F6tley_cr\u00FCe", name)
|
65
|
-
assert_equal("109 195 182 116 108 101 121 95 99 114 195 188 101",
|
66
|
-
name.bytes.to_a.join(" "))
|
67
|
-
assert_equal("M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.",
|
68
|
-
node.content)
|
69
|
-
|
70
|
-
name = name.encode(Encoding::ISO_8859_1)
|
71
|
-
assert_equal(Encoding::ISO_8859_1, name.encoding)
|
72
|
-
assert_equal("m\xF6tley_cr\xFCe".force_encoding(Encoding::ISO_8859_1), name)
|
73
|
-
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
74
|
-
name.bytes.to_a.join(" "))
|
75
|
-
assert_equal("M\xF6tley Cr\xFCe is an American heavy metal band formed in Los Angeles, California in 1981.".force_encoding(Encoding::ISO_8859_1),
|
76
|
-
node.content.encode(Encoding::ISO_8859_1))
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_internal_encoding_iso_8859_1
|
80
|
-
Encoding.default_internal = Encoding::ISO_8859_1
|
81
|
-
load_encoding(Encoding::ISO_8859_1)
|
82
|
-
node = @doc.root.children.first
|
83
|
-
|
84
|
-
name = node.name
|
85
|
-
assert_equal(Encoding::ISO_8859_1, name.encoding)
|
86
|
-
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
87
|
-
name.bytes.to_a.join(" "))
|
88
|
-
assert_equal("m\xF6tley_cr\xFCe".force_encoding(Encoding::ISO_8859_1), name)
|
89
|
-
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
90
|
-
name.bytes.to_a.join(" "))
|
91
|
-
assert_equal("M\xF6tley Cr\xFCe is an American heavy metal band formed in Los Angeles, California in 1981.".force_encoding(Encoding::ISO_8859_1),
|
92
|
-
node.content.encode(Encoding::ISO_8859_1))
|
93
|
-
end
|
94
|
-
|
95
|
-
def test_no_internal_encoding_utf_8
|
96
|
-
Encoding.default_internal = nil
|
97
|
-
load_encoding(Encoding::UTF_8)
|
98
|
-
node = @doc.root.children.first
|
99
|
-
|
100
|
-
name = node.name
|
101
|
-
assert_equal(@encoding, name.encoding)
|
102
|
-
assert_equal("109 195 182 116 108 101 121 95 99 114 195 188 101",
|
103
|
-
name.bytes.to_a.join(" "))
|
104
|
-
|
105
|
-
name = name.encode(Encoding::ISO_8859_1)
|
106
|
-
assert_equal(Encoding::ISO_8859_1, name.encoding)
|
107
|
-
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
108
|
-
name.bytes.to_a.join(" "))
|
109
|
-
end
|
110
|
-
|
111
|
-
def test_internal_encoding_utf_8
|
112
|
-
Encoding.default_internal = Encoding::ISO_8859_1
|
113
|
-
load_encoding(Encoding::UTF_8)
|
114
|
-
node = @doc.root.children.first
|
115
|
-
|
116
|
-
name = node.name
|
117
|
-
assert_equal(Encoding::ISO_8859_1, name.encoding)
|
118
|
-
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
119
|
-
name.bytes.to_a.join(" "))
|
120
|
-
end
|
121
|
-
|
122
|
-
def test_encoding_conversions
|
123
|
-
assert_equal("UTF-8", XML::Encoding.to_s(XML::Encoding::UTF_8))
|
124
|
-
assert_equal(XML::Encoding::UTF_8, XML::Encoding.from_s("UTF-8"))
|
125
|
-
end
|
126
|
-
end
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require './test_helper'
|
4
|
+
|
5
|
+
# Code UTF8 Latin1 Hex
|
6
|
+
# m 109 109 6D
|
7
|
+
# ö 195 182 246 C3 B6 / F6
|
8
|
+
# t 116 116 74
|
9
|
+
# l 108 108 6C
|
10
|
+
# e 101 101 65
|
11
|
+
# y 121 121 79
|
12
|
+
# _ 95 95 5F
|
13
|
+
# c 99 99 63
|
14
|
+
# r 114 114 72
|
15
|
+
# ü 195 188 252 C3 BC / FC
|
16
|
+
# e 101 101 65
|
17
|
+
|
18
|
+
# See:
|
19
|
+
# http://en.wikipedia.org/wiki/ISO/IEC_8859-1
|
20
|
+
# http://en.wikipedia.org/wiki/List_of_Unicode_characters
|
21
|
+
|
22
|
+
class TestEncoding < Minitest::Test
|
23
|
+
def setup
|
24
|
+
Encoding.default_internal = nil
|
25
|
+
end
|
26
|
+
|
27
|
+
def file_for_encoding(encoding)
|
28
|
+
file_name = "model/bands.#{encoding.name.downcase}.xml"
|
29
|
+
File.join(File.dirname(__FILE__), file_name)
|
30
|
+
end
|
31
|
+
|
32
|
+
def load_encoding(encoding)
|
33
|
+
@encoding = encoding
|
34
|
+
file = file_for_encoding(encoding)
|
35
|
+
|
36
|
+
# Strip spaces to make testing easier
|
37
|
+
XML.default_keep_blanks = false
|
38
|
+
@doc = XML::Document.file(file)
|
39
|
+
XML.default_keep_blanks = true
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_encoding
|
43
|
+
doc = XML::Document.new
|
44
|
+
assert_equal(XML::Encoding::NONE, doc.encoding)
|
45
|
+
assert_equal(Encoding::ASCII_8BIT, doc.rb_encoding) if defined?(Encoding)
|
46
|
+
|
47
|
+
file = File.expand_path(File.join(File.dirname(__FILE__), 'model/bands.xml'))
|
48
|
+
doc = XML::Document.file(file)
|
49
|
+
assert_equal(XML::Encoding::UTF_8, doc.encoding)
|
50
|
+
assert_equal(Encoding::UTF_8, doc.rb_encoding) if defined?(Encoding)
|
51
|
+
|
52
|
+
doc.encoding = XML::Encoding::ISO_8859_1
|
53
|
+
assert_equal(XML::Encoding::ISO_8859_1, doc.encoding)
|
54
|
+
assert_equal(Encoding::ISO8859_1, doc.rb_encoding) if defined?(Encoding)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_no_internal_encoding_iso_8859_1
|
58
|
+
Encoding.default_internal = nil
|
59
|
+
load_encoding(Encoding::ISO_8859_1)
|
60
|
+
node = @doc.root.children.first
|
61
|
+
|
62
|
+
name = node.name
|
63
|
+
assert_equal(Encoding::UTF_8, name.encoding)
|
64
|
+
assert_equal("m\u00F6tley_cr\u00FCe", name)
|
65
|
+
assert_equal("109 195 182 116 108 101 121 95 99 114 195 188 101",
|
66
|
+
name.bytes.to_a.join(" "))
|
67
|
+
assert_equal("M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.",
|
68
|
+
node.content)
|
69
|
+
|
70
|
+
name = name.encode(Encoding::ISO_8859_1)
|
71
|
+
assert_equal(Encoding::ISO_8859_1, name.encoding)
|
72
|
+
assert_equal("m\xF6tley_cr\xFCe".force_encoding(Encoding::ISO_8859_1), name)
|
73
|
+
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
74
|
+
name.bytes.to_a.join(" "))
|
75
|
+
assert_equal("M\xF6tley Cr\xFCe is an American heavy metal band formed in Los Angeles, California in 1981.".force_encoding(Encoding::ISO_8859_1),
|
76
|
+
node.content.encode(Encoding::ISO_8859_1))
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_internal_encoding_iso_8859_1
|
80
|
+
Encoding.default_internal = Encoding::ISO_8859_1
|
81
|
+
load_encoding(Encoding::ISO_8859_1)
|
82
|
+
node = @doc.root.children.first
|
83
|
+
|
84
|
+
name = node.name
|
85
|
+
assert_equal(Encoding::ISO_8859_1, name.encoding)
|
86
|
+
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
87
|
+
name.bytes.to_a.join(" "))
|
88
|
+
assert_equal("m\xF6tley_cr\xFCe".force_encoding(Encoding::ISO_8859_1), name)
|
89
|
+
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
90
|
+
name.bytes.to_a.join(" "))
|
91
|
+
assert_equal("M\xF6tley Cr\xFCe is an American heavy metal band formed in Los Angeles, California in 1981.".force_encoding(Encoding::ISO_8859_1),
|
92
|
+
node.content.encode(Encoding::ISO_8859_1))
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_no_internal_encoding_utf_8
|
96
|
+
Encoding.default_internal = nil
|
97
|
+
load_encoding(Encoding::UTF_8)
|
98
|
+
node = @doc.root.children.first
|
99
|
+
|
100
|
+
name = node.name
|
101
|
+
assert_equal(@encoding, name.encoding)
|
102
|
+
assert_equal("109 195 182 116 108 101 121 95 99 114 195 188 101",
|
103
|
+
name.bytes.to_a.join(" "))
|
104
|
+
|
105
|
+
name = name.encode(Encoding::ISO_8859_1)
|
106
|
+
assert_equal(Encoding::ISO_8859_1, name.encoding)
|
107
|
+
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
108
|
+
name.bytes.to_a.join(" "))
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_internal_encoding_utf_8
|
112
|
+
Encoding.default_internal = Encoding::ISO_8859_1
|
113
|
+
load_encoding(Encoding::UTF_8)
|
114
|
+
node = @doc.root.children.first
|
115
|
+
|
116
|
+
name = node.name
|
117
|
+
assert_equal(Encoding::ISO_8859_1, name.encoding)
|
118
|
+
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
119
|
+
name.bytes.to_a.join(" "))
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_encoding_conversions
|
123
|
+
assert_equal("UTF-8", XML::Encoding.to_s(XML::Encoding::UTF_8))
|
124
|
+
assert_equal(XML::Encoding::UTF_8, XML::Encoding.from_s("UTF-8"))
|
125
|
+
end
|
126
|
+
end
|