OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/chromeos/locale_change_guard.h" | |
6 | |
7 #include <string.h> | |
8 | |
9 #include "base/macros.h" | |
10 #include "testing/gtest/include/gtest/gtest.h" | |
11 #include "ui/base/l10n/l10n_util.h" | |
12 | |
13 namespace { | |
14 | |
15 // These languages require user notification when locale is automatically | |
16 // switched between different regions within the same language. | |
17 const char* const kShowNotificationLanguages[] = { | |
18 "af", // Afrikaans | |
19 "am", // Amharic | |
20 "ar", // Arabic | |
21 "az", // Azerbaijani | |
22 "be", // Belarusian | |
23 "bg", // Bulgarian | |
24 "bh", // Bihari | |
25 "bn", // Bengali | |
26 "br", // Breton | |
27 "bs", // Bosnian | |
28 "ca", // Catalan | |
29 "co", // Corsican | |
30 "cs", // Czech | |
31 "cy", // Welsh | |
32 "da", // Danish | |
33 "el", // Greek | |
34 "eo", // Esperanto | |
35 "es", // Spanish | |
36 "et", // Estonian | |
37 "eu", // Basque | |
38 "fa", // Persian | |
39 "fi", // Finnish | |
40 "fil", // Filipino | |
41 "fo", // Faroese | |
42 "fy", // Frisian | |
43 "ga", // Irish | |
44 "gd", // Scots Gaelic | |
45 "gl", // Galician | |
46 "gn", // Guarani | |
47 "gu", // Gujarati | |
48 "ha", // Hausa | |
49 "haw", // Hawaiian | |
50 "he", // Hebrew | |
51 "hi", // Hindi | |
52 "hr", // Croatian | |
53 "hu", // Hungarian | |
54 "hy", // Armenian | |
55 "ia", // Interlingua | |
56 "id", // Indonesian | |
57 "is", // Icelandic | |
58 "ja", // Japanese | |
59 "jw", // Javanese | |
60 "ka", // Georgian | |
61 "kk", // Kazakh | |
62 "km", // Cambodian | |
63 "kn", // Kannada | |
64 "ko", // Korean | |
65 "ku", // Kurdish | |
66 "ky", // Kyrgyz | |
67 "la", // Latin | |
68 "ln", // Lingala | |
69 "lo", // Laothian | |
70 "lt", // Lithuanian | |
71 "lv", // Latvian | |
72 "mk", // Macedonian | |
73 "ml", // Malayalam | |
74 "mn", // Mongolian | |
75 "mo", // Moldavian | |
76 "mr", // Marathi | |
77 "ms", // Malay | |
78 "mt", // Maltese | |
79 "nb", // Norwegian (Bokmal) | |
80 "ne", // Nepali | |
81 "nl", // Dutch | |
82 "nn", // Norwegian (Nynorsk) | |
83 "no", // Norwegian | |
84 "oc", // Occitan | |
85 "om", // Oromo | |
86 "or", // Oriya | |
87 "pa", // Punjabi | |
88 "pl", // Polish | |
89 "ps", // Pashto | |
90 "pt", // Portuguese | |
91 "qu", // Quechua | |
92 "rm", // Romansh | |
93 "ro", // Romanian | |
94 "ru", // Russian | |
95 "sd", // Sindhi | |
96 "sh", // Serbo-Croatian | |
97 "si", // Sinhalese | |
98 "sk", // Slovak | |
99 "sl", // Slovenian | |
100 "sn", // Shona | |
101 "so", // Somali | |
102 "sq", // Albanian | |
103 "sr", // Serbian | |
104 "st", // Sesotho | |
105 "su", // Sundanese | |
106 "sv", // Swedish | |
107 "sw", // Swahili | |
108 "ta", // Tamil | |
109 "te", // Telugu | |
110 "tg", // Tajik | |
111 "th", // Thai | |
112 "ti", // Tigrinya | |
113 "tk", // Turkmen | |
114 "to", // Tonga | |
115 "tr", // Turkish | |
116 "tt", // Tatar | |
117 "tw", // Twi | |
118 "ug", // Uighur | |
119 "uk", // Ukrainian | |
120 "ur", // Urdu | |
121 "uz", // Uzbek | |
122 "vi", // Vietnamese | |
123 "xh", // Xhosa | |
124 "yi", // Yiddish | |
125 "yo", // Yoruba | |
126 "zh", // Chinese | |
127 "zu", // Zulu | |
128 }; | |
129 | |
130 } // anonymous namespace | |
131 | |
132 namespace chromeos { | |
133 | |
134 TEST(LocaleChangeGuardTest, ShowNotificationLocaleChanged) { | |
135 // "en" is used as "global default" in many places. | |
136 EXPECT_TRUE( | |
137 LocaleChangeGuard::ShouldShowLocaleChangeNotification("en", "it")); | |
138 EXPECT_TRUE( | |
139 LocaleChangeGuard::ShouldShowLocaleChangeNotification("it", "en")); | |
140 | |
141 // Between two latin locales. | |
142 EXPECT_TRUE( | |
143 LocaleChangeGuard::ShouldShowLocaleChangeNotification("fr", "it")); | |
144 EXPECT_TRUE( | |
145 LocaleChangeGuard::ShouldShowLocaleChangeNotification("it", "fr")); | |
146 | |
147 // en <-> non-latin locale | |
148 EXPECT_TRUE( | |
149 LocaleChangeGuard::ShouldShowLocaleChangeNotification("en", "zh")); | |
150 EXPECT_TRUE( | |
151 LocaleChangeGuard::ShouldShowLocaleChangeNotification("zh", "en")); | |
152 | |
153 // latin <-> non-latin locale | |
154 EXPECT_TRUE( | |
155 LocaleChangeGuard::ShouldShowLocaleChangeNotification("fr", "zh")); | |
156 EXPECT_TRUE( | |
157 LocaleChangeGuard::ShouldShowLocaleChangeNotification("zh", "fr")); | |
158 | |
159 // same language | |
160 EXPECT_FALSE( | |
161 LocaleChangeGuard::ShouldShowLocaleChangeNotification("en", "en")); | |
162 EXPECT_FALSE( | |
163 LocaleChangeGuard::ShouldShowLocaleChangeNotification("fr", "fr")); | |
164 EXPECT_FALSE( | |
165 LocaleChangeGuard::ShouldShowLocaleChangeNotification("zh", "zh")); | |
166 | |
167 // Different regions within the same language | |
168 EXPECT_FALSE( | |
169 LocaleChangeGuard::ShouldShowLocaleChangeNotification("en", "en-au")); | |
170 EXPECT_FALSE( | |
171 LocaleChangeGuard::ShouldShowLocaleChangeNotification("en-AU", "en")); | |
172 EXPECT_FALSE( | |
173 LocaleChangeGuard::ShouldShowLocaleChangeNotification("en-AU", "en-GB")); | |
jungshik at Google
2014/07/16 23:29:04
Please, add test for pairs of 'es-419' and 'es-ES'
Alexander Alekseev
2014/08/15 16:44:15
Done.
| |
174 | |
175 EXPECT_TRUE( | |
176 LocaleChangeGuard::ShouldShowLocaleChangeNotification("zh", "zh-CN")); | |
177 EXPECT_TRUE( | |
178 LocaleChangeGuard::ShouldShowLocaleChangeNotification("zh-CN", "zh-TW")); | |
179 } | |
180 | |
181 TEST(LocaleChangeGuardTest, ShowNotificationLocaleChangedList) { | |
182 for (size_t i = 0; i < l10n_util::GetAcceptLanguageListSizeForTesting(); | |
183 ++i) { | |
184 const char* const locale = l10n_util::GetAcceptLanguageListForTesting()[i]; | |
185 const char* const dash = strchr(locale, '-'); | |
186 const std::string language = | |
187 (dash ? std::string(locale, dash - locale) : std::string(locale)); | |
188 | |
189 const char* const* allowed_begin = kShowNotificationLanguages; | |
190 const char* const* allowed_end = | |
191 kShowNotificationLanguages + arraysize(kShowNotificationLanguages); | |
192 const bool notification_allowed = | |
193 (std::find(allowed_begin, allowed_end, language) != allowed_end); | |
194 | |
195 const char* const* skipped_begin = | |
196 LocaleChangeGuard::GetSkipShowNotificationLanguagesForTesting(); | |
197 const char* const* skipped_end = | |
198 skipped_begin + | |
199 LocaleChangeGuard::GetSkipShowNotificationLanguagesSizeForTesting(); | |
200 const bool notification_skipped = | |
201 (std::find(skipped_begin, skipped_end, language) != skipped_end); | |
202 | |
203 EXPECT_TRUE(notification_allowed ^ notification_skipped) | |
204 << "Language '" << language << "' (from locale '" << locale | |
205 << "') must be in exactly one list: either " | |
206 "kSkipShowNotificationLanguages (found=" << notification_skipped | |
207 << ") or kShowNotificationLanguages (found=" << notification_allowed | |
208 << ")."; | |
209 } | |
210 } | |
211 | |
212 } // namespace chromeos | |
OLD | NEW |