2007-10-14 08:31:51 +00:00
|
|
|
require 'test/unit'
|
2009-11-18 03:38:20 +00:00
|
|
|
require_relative 'envutil'
|
2007-10-14 08:31:51 +00:00
|
|
|
|
|
|
|
class TestEncoding < Test::Unit::TestCase
|
|
|
|
|
|
|
|
# Test basic encoding methods: list, find, name
|
|
|
|
def test_encoding
|
|
|
|
encodings = Encoding.list
|
|
|
|
assert_equal(encodings.empty?, false)
|
|
|
|
|
|
|
|
encodings.each do |e|
|
|
|
|
assert_equal(e, Encoding.find(e.name))
|
|
|
|
assert_equal(e, Encoding.find(e.name.upcase))
|
|
|
|
assert_equal(e, Encoding.find(e.name.capitalize))
|
|
|
|
assert_equal(e, Encoding.find(e.name.downcase))
|
2011-04-26 16:30:27 +00:00
|
|
|
assert_equal(e, Encoding.find(e))
|
2007-10-14 08:31:51 +00:00
|
|
|
end
|
|
|
|
end
|
2009-03-06 03:56:38 +00:00
|
|
|
|
2008-10-09 07:33:55 +00:00
|
|
|
def test_enc_names
|
|
|
|
aliases = Encoding.aliases
|
|
|
|
aliases.each do |a, en|
|
|
|
|
e = Encoding.find(a)
|
|
|
|
assert_equal(e.name, en)
|
|
|
|
assert(e.names.include?(a))
|
|
|
|
end
|
|
|
|
end
|
2007-10-14 08:31:51 +00:00
|
|
|
|
|
|
|
# Test that Encoding objects can't be copied
|
|
|
|
# And that they can be compared by object_id
|
|
|
|
def test_singleton
|
|
|
|
encodings = Encoding.list
|
|
|
|
encodings.each do |e|
|
|
|
|
assert_raise(TypeError) { e.dup }
|
|
|
|
assert_raise(TypeError) { e.clone }
|
|
|
|
assert_equal(e.object_id, Marshal.load(Marshal.dump(e)).object_id)
|
2009-03-06 03:56:38 +00:00
|
|
|
end
|
2007-10-14 08:31:51 +00:00
|
|
|
end
|
2008-06-03 13:34:48 +00:00
|
|
|
|
|
|
|
def test_find
|
|
|
|
assert_raise(ArgumentError) { Encoding.find("foobarbazqux") }
|
2009-10-28 07:34:24 +00:00
|
|
|
assert_nothing_raised{Encoding.find("locale")}
|
|
|
|
assert_nothing_raised{Encoding.find("filesystem")}
|
2009-11-18 03:38:20 +00:00
|
|
|
|
2011-09-03 04:49:43 +00:00
|
|
|
if /(?:ms|dar)win|mingw/ !~ RUBY_PLATFORM
|
2009-11-18 03:38:20 +00:00
|
|
|
# Unix's filesystem encoding is default_external
|
|
|
|
assert_ruby_status(%w[-EUTF-8:EUC-JP], <<-'EOS')
|
|
|
|
exit Encoding.find("filesystem") == Encoding::UTF_8
|
|
|
|
Encoding.default_external = Encoding::EUC_JP
|
|
|
|
exit Encoding.find("filesystem") == Encoding::EUC_JP
|
|
|
|
EOS
|
|
|
|
end
|
2011-08-02 22:46:34 +00:00
|
|
|
|
|
|
|
bug5150 = '[ruby-dev:44327]'
|
|
|
|
assert_raise(TypeError, bug5150) {Encoding.find(1)}
|
2008-06-03 13:34:48 +00:00
|
|
|
end
|
|
|
|
|
2009-12-12 16:35:10 +00:00
|
|
|
def test_replicate
|
2010-04-29 05:46:04 +00:00
|
|
|
assert_instance_of(Encoding, Encoding::UTF_8.replicate('UTF-8-ANOTHER'))
|
|
|
|
assert_instance_of(Encoding, Encoding::ISO_2022_JP.replicate('ISO-2022-JP-ANOTHER'))
|
2010-04-11 03:21:47 +00:00
|
|
|
bug3127 = '[ruby-dev:40954]'
|
|
|
|
assert_raise(TypeError, bug3127) {Encoding::UTF_8.replicate(0)}
|
|
|
|
assert_raise(ArgumentError, bug3127) {Encoding::UTF_8.replicate("\0")}
|
2009-12-12 16:35:10 +00:00
|
|
|
end
|
|
|
|
|
2008-06-03 13:34:48 +00:00
|
|
|
def test_dummy_p
|
|
|
|
assert_equal(true, Encoding::ISO_2022_JP.dummy?)
|
|
|
|
assert_equal(false, Encoding::UTF_8.dummy?)
|
|
|
|
end
|
|
|
|
|
2009-08-08 23:25:32 +00:00
|
|
|
def test_ascii_compatible_p
|
|
|
|
assert_equal(true, Encoding::ASCII_8BIT.ascii_compatible?)
|
|
|
|
assert_equal(true, Encoding::UTF_8.ascii_compatible?)
|
|
|
|
assert_equal(false, Encoding::UTF_16BE.ascii_compatible?)
|
|
|
|
assert_equal(false, Encoding::ISO_2022_JP.ascii_compatible?)
|
|
|
|
end
|
|
|
|
|
2008-06-03 13:34:48 +00:00
|
|
|
def test_name_list
|
|
|
|
assert_instance_of(Array, Encoding.name_list)
|
|
|
|
Encoding.name_list.each do |x|
|
|
|
|
assert_instance_of(String, x)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_aliases
|
|
|
|
assert_instance_of(Hash, Encoding.aliases)
|
|
|
|
Encoding.aliases.each do |k, v|
|
|
|
|
assert(Encoding.name_list.include?(k))
|
|
|
|
assert(Encoding.name_list.include?(v))
|
|
|
|
assert_instance_of(String, k)
|
|
|
|
assert_instance_of(String, v)
|
|
|
|
end
|
|
|
|
end
|
2009-06-13 00:58:30 +00:00
|
|
|
|
|
|
|
def test_marshal
|
|
|
|
str = "".force_encoding("EUC-JP")
|
|
|
|
str2 = Marshal.load(Marshal.dump(str))
|
|
|
|
assert_equal(str, str2)
|
|
|
|
str2 = Marshal.load(Marshal.dump(str2))
|
|
|
|
assert_equal(str, str2, '[ruby-dev:38596]')
|
|
|
|
end
|
2011-09-06 04:15:49 +00:00
|
|
|
|
|
|
|
def test_unsafe
|
|
|
|
bug5279 = '[ruby-dev:44469]'
|
2011-09-25 07:54:35 +00:00
|
|
|
assert_ruby_status([], '$SAFE=4; "a".encode("utf-16be")', bug5279)
|
2011-09-06 04:15:49 +00:00
|
|
|
end
|
2007-10-14 08:31:51 +00:00
|
|
|
end
|