diff options
Diffstat (limited to 'test/irb/test_locale.rb')
-rw-r--r-- | test/irb/test_locale.rb | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/test/irb/test_locale.rb b/test/irb/test_locale.rb new file mode 100644 index 0000000000..930a38834c --- /dev/null +++ b/test/irb/test_locale.rb @@ -0,0 +1,118 @@ +require "irb" +require "stringio" + +require_relative "helper" + +module TestIRB + class LocaleTestCase < TestCase + def test_initialize_with_en + locale = IRB::Locale.new("en_US.UTF-8") + + assert_equal("en", locale.lang) + assert_equal("US", locale.territory) + assert_equal("UTF-8", locale.encoding.name) + assert_equal(nil, locale.modifier) + end + + def test_initialize_with_ja + locale = IRB::Locale.new("ja_JP.UTF-8") + + assert_equal("ja", locale.lang) + assert_equal("JP", locale.territory) + assert_equal("UTF-8", locale.encoding.name) + assert_equal(nil, locale.modifier) + end + + def test_initialize_with_legacy_ja_encoding_ujis + original_stderr = $stderr + $stderr = StringIO.new + + locale = IRB::Locale.new("ja_JP.ujis") + + assert_equal("ja", locale.lang) + assert_equal("JP", locale.territory) + 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" + ensure + $stderr = original_stderr + end + + def test_initialize_with_legacy_ja_encoding_euc + original_stderr = $stderr + $stderr = StringIO.new + + locale = IRB::Locale.new("ja_JP.euc") + + assert_equal("ja", locale.lang) + assert_equal("JP", locale.territory) + 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" + ensure + $stderr = original_stderr + end + + %w(IRB_LANG LC_MESSAGES LC_ALL LANG).each do |env_var| + define_method "test_initialize_with_#{env_var.downcase}" do + original_values = { + "IRB_LANG" => ENV["IRB_LANG"], + "LC_MESSAGES" => ENV["LC_MESSAGES"], + "LC_ALL" => ENV["LC_ALL"], + "LANG" => ENV["LANG"], + } + + ENV["IRB_LANG"] = ENV["LC_MESSAGES"] = ENV["LC_ALL"] = ENV["LANG"] = nil + ENV[env_var] = "zh_TW.UTF-8" + + locale = IRB::Locale.new + + assert_equal("zh", locale.lang) + assert_equal("TW", locale.territory) + assert_equal("UTF-8", locale.encoding.name) + assert_equal(nil, locale.modifier) + ensure + original_values.each do |key, value| + ENV[key] = value + end + end + end + + def test_load + # reset Locale's internal cache + IRB::Locale.class_variable_set(:@@loaded, []) + # Because error.rb files define the same class, loading them causes method redefinition warnings. + original_verbose = $VERBOSE + $VERBOSE = nil + + jp_local = IRB::Locale.new("ja_JP.UTF-8") + jp_local.load("irb/error.rb") + msg = IRB::CantReturnToNormalMode.new.message + assert_equal("Normalモードに戻れません.", msg) + + # reset Locale's internal cache + IRB::Locale.class_variable_set(:@@loaded, []) + + en_local = IRB::Locale.new("en_US.UTF-8") + en_local.load("irb/error.rb") + msg = IRB::CantReturnToNormalMode.new.message + assert_equal("Can't return to normal mode.", msg) + ensure + # before turning warnings back on, load the error.rb file again to avoid warnings in other tests + IRB::Locale.new.load("irb/error.rb") + $VERBOSE = original_verbose + end + + def test_find + jp_local = IRB::Locale.new("ja_JP.UTF-8") + path = jp_local.find("irb/error.rb") + assert_include(path, "/lib/irb/lc/ja/error.rb") + + en_local = IRB::Locale.new("en_US.UTF-8") + path = en_local.find("irb/error.rb") + assert_include(path, "/lib/irb/lc/error.rb") + end + end +end |