[rubygems/rubygems] Use a constant empty tar header to avoid extra allocations
[ruby.git] / test / irb / test_locale.rb
blob930a38834c1ab6f9102d7a525e61be6950c11c20
1 require "irb"
2 require "stringio"
4 require_relative "helper"
6 module TestIRB
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)
15     end
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)
24     end
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"
38     ensure
39       $stderr = original_stderr
40     end
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"
54     ensure
55       $stderr = original_stderr
56     end
58     %w(IRB_LANG LC_MESSAGES LC_ALL LANG).each do |env_var|
59       define_method "test_initialize_with_#{env_var.downcase}" do
60         original_values = {
61           "IRB_LANG" => ENV["IRB_LANG"],
62           "LC_MESSAGES" => ENV["LC_MESSAGES"],
63           "LC_ALL" => ENV["LC_ALL"],
64           "LANG" => ENV["LANG"],
65         }
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)
76       ensure
77         original_values.each do |key, value|
78           ENV[key] = value
79         end
80       end
81     end
83     def test_load
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
88       $VERBOSE = nil
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)
102     ensure
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
106     end
108     def test_find
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")
116     end
117   end