blob: eb06a0be84dafb880a242e77e15526215f5ef4a0 [file] [log] [blame]
// Copyright 2017 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 "components/language/core/common/locale_util.h"
#include "base/command_line.h"
#include "build/build_config.h"
#include "testing/gtest/include/gtest/gtest.h"
typedef testing::Test LocaleUtilTest;
TEST_F(LocaleUtilTest, SplitIntoMainAndTail) {
std::string locale;
std::string main;
std::string tail;
locale = "";
language::SplitIntoMainAndTail(locale, &main, &tail);
EXPECT_TRUE(main.empty());
EXPECT_TRUE(tail.empty());
locale = "en";
main.clear();
tail.clear();
language::SplitIntoMainAndTail(locale, &main, &tail);
EXPECT_EQ("en", main);
EXPECT_TRUE(tail.empty());
locale = "ogard543i";
main.clear();
tail.clear();
language::SplitIntoMainAndTail(locale, &main, &tail);
EXPECT_EQ("ogard543i", main);
EXPECT_TRUE(tail.empty());
locale = "en-AU";
main.clear();
tail.clear();
language::SplitIntoMainAndTail(locale, &main, &tail);
EXPECT_EQ("en", main);
EXPECT_EQ("-AU", tail);
locale = "es-419";
main.clear();
tail.clear();
language::SplitIntoMainAndTail(locale, &main, &tail);
EXPECT_EQ("es", main);
EXPECT_EQ("-419", tail);
locale = "en-AU-2009";
main.clear();
tail.clear();
language::SplitIntoMainAndTail(locale, &main, &tail);
EXPECT_EQ("en", main);
EXPECT_EQ("-AU-2009", tail);
}
TEST_F(LocaleUtilTest, ContainsSameBaseLanguage) {
std::vector<std::string> list;
// Empty input.
EXPECT_EQ(false, language::ContainsSameBaseLanguage(list, ""));
// Empty list.
EXPECT_EQ(false, language::ContainsSameBaseLanguage(list, "fr-FR"));
// Empty language.
list = {"en-US"};
EXPECT_EQ(false, language::ContainsSameBaseLanguage(list, ""));
// One element, no match.
list = {"en-US"};
EXPECT_EQ(false, language::ContainsSameBaseLanguage(list, "fr-FR"));
// One element, with match.
list = {"fr-CA"};
EXPECT_EQ(true, language::ContainsSameBaseLanguage(list, "fr-FR"));
// Multiple elements, no match.
list = {"en-US", "es-AR", "en-UK"};
EXPECT_EQ(false, language::ContainsSameBaseLanguage(list, "fr-FR"));
// Multiple elements, with match.
list = {"en-US", "fr-CA", "es-AR"};
EXPECT_EQ(true, language::ContainsSameBaseLanguage(list, "fr-FR"));
// Multiple elements matching.
list = {"en-US", "fr-CA", "es-AR", "fr-FR"};
EXPECT_EQ(true, language::ContainsSameBaseLanguage(list, "fr-FR"));
// List includes base language.
list = {"en-US", "fr", "es-AR", "fr-FR"};
EXPECT_EQ(true, language::ContainsSameBaseLanguage(list, "fr-FR"));
}
TEST_F(LocaleUtilTest, ConvertToActualUILocale) {
std::string locale;
//---------------------------------------------------------------------------
// Languages that are enabled as display UI.
//---------------------------------------------------------------------------
locale = "en-US";
bool is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("en-US", locale);
locale = "it";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("it", locale);
locale = "fr-FR";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("fr-FR", locale);
//---------------------------------------------------------------------------
// Languages that are converted to their fallback version.
//---------------------------------------------------------------------------
// All Latin American Spanish languages fall back to "es-419".
locale = "es-AR";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("es-419", locale);
locale = "es-CL";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("es-419", locale);
locale = "es-CO";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("es-419", locale);
locale = "es-CR";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("es-419", locale);
locale = "es-HN";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("es-419", locale);
locale = "es-MX";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("es-419", locale);
locale = "es-PE";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("es-419", locale);
locale = "es-US";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("es-419", locale);
locale = "es-UY";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("es-419", locale);
locale = "es-VE";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("es-419", locale);
// English falls back to US.
locale = "en";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("en-US", locale);
// All other regional English languages fall back to UK.
locale = "en-AU";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("en-GB", locale);
locale = "en-CA";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("en-GB", locale);
locale = "en-IN";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("en-GB", locale);
locale = "en-NZ";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("en-GB", locale);
locale = "en-ZA";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("en-GB", locale);
locale = "pt";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("pt-PT", locale);
locale = "it-CH";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("it", locale);
locale = "nn";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("nb", locale);
locale = "no";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("nb", locale);
//---------------------------------------------------------------------------
// Languages that have their base language is a UI language.
//---------------------------------------------------------------------------
locale = "it-IT";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("it", locale);
locale = "de-DE";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("de", locale);
//---------------------------------------------------------------------------
// Languages that cannot be used as display UI.
//---------------------------------------------------------------------------
// This only matters for ChromeOS and Windows, as they are the only systems
// where users can set the display UI.
#if defined(OS_CHROMEOS) || defined(OS_WIN)
locale = "sd"; // Sindhi
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_FALSE(is_ui);
locale = "af"; // Afrikaans
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_FALSE(is_ui);
locale = "ga"; // Irish
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_FALSE(is_ui);
locale = "ky"; // Kyrgyz
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_FALSE(is_ui);
locale = "zu"; // Zulu
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_FALSE(is_ui);
#endif
}