4 require_relative "helper"
7 class LocaleTestCase < TestCase
8 def test_initialize_with_en
9 locale = IRB::Locale.new("en_US.UTF-8")
11 assert_equal("en", locale.lang)
12 assert_equal("US", locale.territory)
13 assert_equal("UTF-8", locale.encoding.name)
14 assert_equal(nil, locale.modifier)
17 def test_initialize_with_ja
18 locale = IRB::Locale.new("ja_JP.UTF-8")
20 assert_equal("ja", locale.lang)
21 assert_equal("JP", locale.territory)
22 assert_equal("UTF-8", locale.encoding.name)
23 assert_equal(nil, locale.modifier)
26 def test_initialize_with_legacy_ja_encoding_ujis
27 original_stderr = $stderr
28 $stderr = StringIO.new
30 locale = IRB::Locale.new("ja_JP.ujis")
32 assert_equal("ja", locale.lang)
33 assert_equal("JP", locale.territory)
34 assert_equal(Encoding::EUC_JP, locale.encoding)
35 assert_equal(nil, locale.modifier)
37 assert_include $stderr.string, "ja_JP.ujis is obsolete. use ja_JP.EUC-JP"
39 $stderr = original_stderr
42 def test_initialize_with_legacy_ja_encoding_euc
43 original_stderr = $stderr
44 $stderr = StringIO.new
46 locale = IRB::Locale.new("ja_JP.euc")
48 assert_equal("ja", locale.lang)
49 assert_equal("JP", locale.territory)
50 assert_equal(Encoding::EUC_JP, locale.encoding)
51 assert_equal(nil, locale.modifier)
53 assert_include $stderr.string, "ja_JP.euc is obsolete. use ja_JP.EUC-JP"
55 $stderr = original_stderr
58 %w(IRB_LANG LC_MESSAGES LC_ALL LANG).each do |env_var|
59 define_method "test_initialize_with_#{env_var.downcase}" do
61 "IRB_LANG" => ENV["IRB_LANG"],
62 "LC_MESSAGES" => ENV["LC_MESSAGES"],
63 "LC_ALL" => ENV["LC_ALL"],
64 "LANG" => ENV["LANG"],
67 ENV["IRB_LANG"] = ENV["LC_MESSAGES"] = ENV["LC_ALL"] = ENV["LANG"] = nil
68 ENV[env_var] = "zh_TW.UTF-8"
70 locale = IRB::Locale.new
72 assert_equal("zh", locale.lang)
73 assert_equal("TW", locale.territory)
74 assert_equal("UTF-8", locale.encoding.name)
75 assert_equal(nil, locale.modifier)
77 original_values.each do |key, value|
84 # reset Locale's internal cache
85 IRB::Locale.class_variable_set(:@@loaded, [])
86 # Because error.rb files define the same class, loading them causes method redefinition warnings.
87 original_verbose = $VERBOSE
90 jp_local = IRB::Locale.new("ja_JP.UTF-8")
91 jp_local.load("irb/error.rb")
92 msg = IRB::CantReturnToNormalMode.new.message
93 assert_equal("Normalモードに戻れません.", msg)
95 # reset Locale's internal cache
96 IRB::Locale.class_variable_set(:@@loaded, [])
98 en_local = IRB::Locale.new("en_US.UTF-8")
99 en_local.load("irb/error.rb")
100 msg = IRB::CantReturnToNormalMode.new.message
101 assert_equal("Can't return to normal mode.", msg)
103 # before turning warnings back on, load the error.rb file again to avoid warnings in other tests
104 IRB::Locale.new.load("irb/error.rb")
105 $VERBOSE = original_verbose
109 jp_local = IRB::Locale.new("ja_JP.UTF-8")
110 path = jp_local.find("irb/error.rb")
111 assert_include(path, "/lib/irb/lc/ja/error.rb")
113 en_local = IRB::Locale.new("en_US.UTF-8")
114 path = en_local.find("irb/error.rb")
115 assert_include(path, "/lib/irb/lc/error.rb")