Chromium Code Reviews| Index: chrome/browser/chromeos/locale_change_guard_unittest.cc |
| diff --git a/chrome/browser/chromeos/locale_change_guard_unittest.cc b/chrome/browser/chromeos/locale_change_guard_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..503a9786d59b60f3944c31dc91e982ed8597947a |
| --- /dev/null |
| +++ b/chrome/browser/chromeos/locale_change_guard_unittest.cc |
| @@ -0,0 +1,212 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/chromeos/locale_change_guard.h" |
| + |
| +#include <string.h> |
| + |
| +#include "base/macros.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| +#include "ui/base/l10n/l10n_util.h" |
| + |
| +namespace { |
| + |
| +// These languages require user notification when locale is automatically |
| +// switched between different regions within the same language. |
| +const char* const kShowNotificationLanguages[] = { |
| + "af", // Afrikaans |
| + "am", // Amharic |
| + "ar", // Arabic |
| + "az", // Azerbaijani |
| + "be", // Belarusian |
| + "bg", // Bulgarian |
| + "bh", // Bihari |
| + "bn", // Bengali |
| + "br", // Breton |
| + "bs", // Bosnian |
| + "ca", // Catalan |
| + "co", // Corsican |
| + "cs", // Czech |
| + "cy", // Welsh |
| + "da", // Danish |
| + "el", // Greek |
| + "eo", // Esperanto |
| + "es", // Spanish |
| + "et", // Estonian |
| + "eu", // Basque |
| + "fa", // Persian |
| + "fi", // Finnish |
| + "fil", // Filipino |
| + "fo", // Faroese |
| + "fy", // Frisian |
| + "ga", // Irish |
| + "gd", // Scots Gaelic |
| + "gl", // Galician |
| + "gn", // Guarani |
| + "gu", // Gujarati |
| + "ha", // Hausa |
| + "haw", // Hawaiian |
| + "he", // Hebrew |
| + "hi", // Hindi |
| + "hr", // Croatian |
| + "hu", // Hungarian |
| + "hy", // Armenian |
| + "ia", // Interlingua |
| + "id", // Indonesian |
| + "is", // Icelandic |
| + "ja", // Japanese |
| + "jw", // Javanese |
| + "ka", // Georgian |
| + "kk", // Kazakh |
| + "km", // Cambodian |
| + "kn", // Kannada |
| + "ko", // Korean |
| + "ku", // Kurdish |
| + "ky", // Kyrgyz |
| + "la", // Latin |
| + "ln", // Lingala |
| + "lo", // Laothian |
| + "lt", // Lithuanian |
| + "lv", // Latvian |
| + "mk", // Macedonian |
| + "ml", // Malayalam |
| + "mn", // Mongolian |
| + "mo", // Moldavian |
| + "mr", // Marathi |
| + "ms", // Malay |
| + "mt", // Maltese |
| + "nb", // Norwegian (Bokmal) |
| + "ne", // Nepali |
| + "nl", // Dutch |
| + "nn", // Norwegian (Nynorsk) |
| + "no", // Norwegian |
| + "oc", // Occitan |
| + "om", // Oromo |
| + "or", // Oriya |
| + "pa", // Punjabi |
| + "pl", // Polish |
| + "ps", // Pashto |
| + "pt", // Portuguese |
| + "qu", // Quechua |
| + "rm", // Romansh |
| + "ro", // Romanian |
| + "ru", // Russian |
| + "sd", // Sindhi |
| + "sh", // Serbo-Croatian |
| + "si", // Sinhalese |
| + "sk", // Slovak |
| + "sl", // Slovenian |
| + "sn", // Shona |
| + "so", // Somali |
| + "sq", // Albanian |
| + "sr", // Serbian |
| + "st", // Sesotho |
| + "su", // Sundanese |
| + "sv", // Swedish |
| + "sw", // Swahili |
| + "ta", // Tamil |
| + "te", // Telugu |
| + "tg", // Tajik |
| + "th", // Thai |
| + "ti", // Tigrinya |
| + "tk", // Turkmen |
| + "to", // Tonga |
| + "tr", // Turkish |
| + "tt", // Tatar |
| + "tw", // Twi |
| + "ug", // Uighur |
| + "uk", // Ukrainian |
| + "ur", // Urdu |
| + "uz", // Uzbek |
| + "vi", // Vietnamese |
| + "xh", // Xhosa |
| + "yi", // Yiddish |
| + "yo", // Yoruba |
| + "zh", // Chinese |
| + "zu", // Zulu |
| +}; |
| + |
| +} // anonymous namespace |
| + |
| +namespace chromeos { |
| + |
| +TEST(LocaleChangeGuardTest, ShowNotificationLocaleChanged) { |
| + // "en" is used as "global default" in many places. |
| + EXPECT_TRUE( |
| + LocaleChangeGuard::ShouldShowLocaleChangeNotification("en", "it")); |
| + EXPECT_TRUE( |
| + LocaleChangeGuard::ShouldShowLocaleChangeNotification("it", "en")); |
| + |
| + // Between two latin locales. |
| + EXPECT_TRUE( |
| + LocaleChangeGuard::ShouldShowLocaleChangeNotification("fr", "it")); |
| + EXPECT_TRUE( |
| + LocaleChangeGuard::ShouldShowLocaleChangeNotification("it", "fr")); |
| + |
| + // en <-> non-latin locale |
| + EXPECT_TRUE( |
| + LocaleChangeGuard::ShouldShowLocaleChangeNotification("en", "zh")); |
| + EXPECT_TRUE( |
| + LocaleChangeGuard::ShouldShowLocaleChangeNotification("zh", "en")); |
| + |
| + // latin <-> non-latin locale |
| + EXPECT_TRUE( |
| + LocaleChangeGuard::ShouldShowLocaleChangeNotification("fr", "zh")); |
| + EXPECT_TRUE( |
| + LocaleChangeGuard::ShouldShowLocaleChangeNotification("zh", "fr")); |
| + |
| + // same language |
| + EXPECT_FALSE( |
| + LocaleChangeGuard::ShouldShowLocaleChangeNotification("en", "en")); |
| + EXPECT_FALSE( |
| + LocaleChangeGuard::ShouldShowLocaleChangeNotification("fr", "fr")); |
| + EXPECT_FALSE( |
| + LocaleChangeGuard::ShouldShowLocaleChangeNotification("zh", "zh")); |
| + |
| + // Different regions within the same language |
| + EXPECT_FALSE( |
| + LocaleChangeGuard::ShouldShowLocaleChangeNotification("en", "en-au")); |
| + EXPECT_FALSE( |
| + LocaleChangeGuard::ShouldShowLocaleChangeNotification("en-AU", "en")); |
| + EXPECT_FALSE( |
| + 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.
|
| + |
| + EXPECT_TRUE( |
| + LocaleChangeGuard::ShouldShowLocaleChangeNotification("zh", "zh-CN")); |
| + EXPECT_TRUE( |
| + LocaleChangeGuard::ShouldShowLocaleChangeNotification("zh-CN", "zh-TW")); |
| +} |
| + |
| +TEST(LocaleChangeGuardTest, ShowNotificationLocaleChangedList) { |
| + for (size_t i = 0; i < l10n_util::GetAcceptLanguageListSizeForTesting(); |
| + ++i) { |
| + const char* const locale = l10n_util::GetAcceptLanguageListForTesting()[i]; |
| + const char* const dash = strchr(locale, '-'); |
| + const std::string language = |
| + (dash ? std::string(locale, dash - locale) : std::string(locale)); |
| + |
| + const char* const* allowed_begin = kShowNotificationLanguages; |
| + const char* const* allowed_end = |
| + kShowNotificationLanguages + arraysize(kShowNotificationLanguages); |
| + const bool notification_allowed = |
| + (std::find(allowed_begin, allowed_end, language) != allowed_end); |
| + |
| + const char* const* skipped_begin = |
| + LocaleChangeGuard::GetSkipShowNotificationLanguagesForTesting(); |
| + const char* const* skipped_end = |
| + skipped_begin + |
| + LocaleChangeGuard::GetSkipShowNotificationLanguagesSizeForTesting(); |
| + const bool notification_skipped = |
| + (std::find(skipped_begin, skipped_end, language) != skipped_end); |
| + |
| + EXPECT_TRUE(notification_allowed ^ notification_skipped) |
| + << "Language '" << language << "' (from locale '" << locale |
| + << "') must be in exactly one list: either " |
| + "kSkipShowNotificationLanguages (found=" << notification_skipped |
| + << ") or kShowNotificationLanguages (found=" << notification_allowed |
| + << ")."; |
| + } |
| +} |
| + |
| +} // namespace chromeos |