diff options
Diffstat (limited to 'test/ruby/test_encoding.rb')
| -rw-r--r-- | test/ruby/test_encoding.rb | 99 |
1 files changed, 81 insertions, 18 deletions
diff --git a/test/ruby/test_encoding.rb b/test/ruby/test_encoding.rb index ef2dc39c4d..0cd5bf49dc 100644 --- a/test/ruby/test_encoding.rb +++ b/test/ruby/test_encoding.rb @@ -1,5 +1,5 @@ +# frozen_string_literal: false require 'test/unit' -require_relative 'envutil' class TestEncoding < Test::Unit::TestCase @@ -22,7 +22,7 @@ class TestEncoding < Test::Unit::TestCase aliases.each do |a, en| e = Encoding.find(a) assert_equal(e.name, en) - assert(e.names.include?(a)) + assert_include(e.names, a) end end @@ -33,7 +33,7 @@ class TestEncoding < Test::Unit::TestCase 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) + assert_same(e, Marshal.load(Marshal.dump(e))) end end @@ -55,14 +55,6 @@ class TestEncoding < Test::Unit::TestCase assert_raise(TypeError, bug5150) {Encoding.find(1)} end - def test_replicate - assert_instance_of(Encoding, Encoding::UTF_8.replicate('UTF-8-ANOTHER')) - assert_instance_of(Encoding, Encoding::ISO_2022_JP.replicate('ISO-2022-JP-ANOTHER')) - bug3127 = '[ruby-dev:40954]' - assert_raise(TypeError, bug3127) {Encoding::UTF_8.replicate(0)} - assert_raise(ArgumentError, bug3127) {Encoding::UTF_8.replicate("\0")} - end - def test_dummy_p assert_equal(true, Encoding::ISO_2022_JP.dummy?) assert_equal(false, Encoding::UTF_8.dummy?) @@ -85,8 +77,8 @@ class TestEncoding < Test::Unit::TestCase 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_include(Encoding.name_list, k) + assert_include(Encoding.name_list, v) assert_instance_of(String, k) assert_instance_of(String, v) end @@ -100,11 +92,6 @@ class TestEncoding < Test::Unit::TestCase assert_equal(str, str2, '[ruby-dev:38596]') end - def test_unsafe - bug5279 = '[ruby-dev:44469]' - assert_ruby_status([], '$SAFE=4; "a".encode("utf-16be")', bug5279) - end - def test_compatible_p ua = "abc".force_encoding(Encoding::UTF_8) assert_equal(Encoding::UTF_8, Encoding.compatible?(ua, :abc)) @@ -112,5 +99,81 @@ class TestEncoding < Test::Unit::TestCase bin = "a".force_encoding(Encoding::ASCII_8BIT) asc = "b".force_encoding(Encoding::US_ASCII) assert_equal(Encoding::ASCII_8BIT, Encoding.compatible?(bin, asc)) + bin = "\xff".force_encoding(Encoding::ASCII_8BIT).to_sym + asc = "b".force_encoding(Encoding::ASCII_8BIT) + assert_equal(Encoding::ASCII_8BIT, Encoding.compatible?(bin, asc)) + assert_equal(Encoding::UTF_8, Encoding.compatible?("\u{3042}".to_sym, ua.to_sym)) + end + + def test_errinfo_after_autoload + assert_separately([], "#{<<~"begin;"}\n#{<<~'end;'}") + bug9038 = '[ruby-core:57949] [Bug #9038]' + begin; + e = assert_raise_with_message(SyntaxError, /unknown regexp option - Q/, bug9038) { + eval("/regexp/sQ") + } + assert_include(e.message, "/regexp/sQ\n") + end; + end + + def test_nonascii_library_path + assert_separately([], "#{<<~"begin;"}\n#{<<~'end;'}".force_encoding("US-ASCII")) + begin; + assert_equal(Encoding::US_ASCII, __ENCODING__) + $:.unshift("/\x80") + assert_raise_with_message(LoadError, /\[Bug #16382\]/) do + require "[Bug #16382]" + end + end; + end + + def test_ractor_load_encoding + assert_ractor("#{<<~"begin;"}\n#{<<~'end;'}") + begin; + Ractor.new{}.join + $-w = nil + Encoding.default_external = Encoding::ISO8859_2 + assert "[Bug #19562]" + end; + end + + def test_ractor_lazy_load_encoding_concurrently + assert_ractor("#{<<~"begin;"}\n#{<<~'end;'}") + begin; + rs = [] + autoload_encodings = Encoding.list.select { |e| e.inspect.include?("(autoload)") }.freeze + 7.times do + rs << Ractor.new(autoload_encodings) do |encodings| + str = "abc".dup + encodings.each do |enc| + str.force_encoding(enc) + end + end + end + while rs.any? + r, _obj = Ractor.select(*rs) + rs.delete(r) + end + assert_empty rs + end; + end + + def test_ractor_set_default_external_string + assert_ractor("#{<<~"begin;"}\n#{<<~'end;'}") + begin; + $-w = nil + rs = [] + 7.times do |i| + rs << Ractor.new(i) do |i| + Encoding.default_external = "us-ascii" + end + end + + while rs.any? + r, _obj = Ractor.select(*rs) + rs.delete(r) + end + assert_empty rs + end; end end |
