summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Lo <stan001212@gmail.com>2023-04-25 12:00:05 +0100
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2023-04-26 13:13:25 +0900
commit299d17a2f1ebda4efba7e634b9a5f7196f5274a8 (patch)
treeaa36e2fb0eae56e3c35f176068f1dd06b8248c07
parent5154d6beededf9d018c85316b982deb2babf40bb (diff)
downloadruby-299d17a2f1ebda4efba7e634b9a5f7196f5274a8.tar.gz
[ruby/irb] Fix Locale's encoding lookup for Japanese encodings
(https://github.com/ruby/irb/pull/568) In https://github.com/ruby/irb/commit/3ee79e89adb8e21b63d796e53bcc86281685076d, `encoding_aliases.rb` was introduced to return the correct encoding object for `ujis` and `euc` encodings. However, the return value of `@@legacy_encoding_alias_map[@encoding_name]` is always overridden by a second look up with `Encoding.find(@encoding_name)`. So the logic didn't work as expected. This commit fixes the problem.
-rw-r--r--lib/irb/locale.rb3
-rw-r--r--test/irb/test_locale.rb4
2 files changed, 4 insertions, 3 deletions
diff --git a/lib/irb/locale.rb b/lib/irb/locale.rb
index eb3028616d..d7019039ea 100644
--- a/lib/irb/locale.rb
+++ b/lib/irb/locale.rb
@@ -29,8 +29,9 @@ module IRB # :nodoc:
begin load 'irb/encoding_aliases.rb'; rescue LoadError; end
if @encoding = @@legacy_encoding_alias_map[@encoding_name]
warn(("%s is obsolete. use %s" % ["#{@lang}_#{@territory}.#{@encoding_name}", "#{@lang}_#{@territory}.#{@encoding.name}"]), uplevel: 1)
+ else
+ @encoding = Encoding.find(@encoding_name) rescue nil
end
- @encoding = Encoding.find(@encoding_name) rescue nil
end
end
@encoding ||= (Encoding.find('locale') rescue Encoding::ASCII_8BIT)
diff --git a/test/irb/test_locale.rb b/test/irb/test_locale.rb
index 89c43699cb..053cd234b9 100644
--- a/test/irb/test_locale.rb
+++ b/test/irb/test_locale.rb
@@ -31,7 +31,7 @@ module TestIRB
assert_equal("ja", locale.lang)
assert_equal("JP", locale.territory)
- assert_equal("UTF-8", locale.encoding.name)
+ assert_equal(Encoding::EUC_JP, locale.encoding)
assert_equal(nil, locale.modifier)
assert_include $stderr.string, "ja_JP.ujis is obsolete. use ja_JP.EUC-JP"
@@ -47,7 +47,7 @@ module TestIRB
assert_equal("ja", locale.lang)
assert_equal("JP", locale.territory)
- assert_equal("UTF-8", locale.encoding.name)
+ assert_equal(Encoding::EUC_JP, locale.encoding)
assert_equal(nil, locale.modifier)
assert_include $stderr.string, "ja_JP.euc is obsolete. use ja_JP.EUC-JP"