1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/autofill/core/browser/geo/country_names.h"
#include <string>
#include <utility>
#include "base/strings/utf_string_conversions.h"
#include "testing/gtest/include/gtest/gtest.h"
using base::ASCIIToUTF16;
namespace autofill {
namespace {
class TestCountryNames : public CountryNames {
public:
explicit TestCountryNames(const std::string& locale_name)
: CountryNames(locale_name) {}
~TestCountryNames() = default;
};
// Test mapping of localized country names to country codes.
TEST(CountryNamesTest, GetCountryCode_BasicMapping) {
TestCountryNames en_us_names("en_US");
EXPECT_EQ("US", en_us_names.GetCountryCode(u"United States"));
EXPECT_EQ("CA", en_us_names.GetCountryCode(u"Canada"));
EXPECT_EQ("CZ", en_us_names.GetCountryCode(u"Czech Republic"));
}
TEST(CountryNamesTest, GetCountryCode_CaseInsensitiveMapping) {
EXPECT_EQ("US", TestCountryNames("en_US").GetCountryCode(u"united states"));
}
TEST(CountryNamesTest, GetCountryCode_CodesMapToThemselves) {
TestCountryNames en_us_names("en_US");
TestCountryNames fr_ca_names("fr_CA");
EXPECT_EQ("US", en_us_names.GetCountryCode(u"US"));
EXPECT_EQ("HU", en_us_names.GetCountryCode(u"hu"));
EXPECT_EQ("CA", fr_ca_names.GetCountryCode(u"CA"));
EXPECT_EQ("MX", fr_ca_names.GetCountryCode(u"mx"));
}
TEST(CountryNamesTest, GetCountryCode_BasicSynonyms) {
TestCountryNames en_us_names("en_US");
EXPECT_EQ("US", en_us_names.GetCountryCode(u"United States of America"));
EXPECT_EQ("US", en_us_names.GetCountryCode(u"USA"));
}
TEST(CountryNamesTest, GetCountryCode_OtherLocales) {
EXPECT_EQ("US", TestCountryNames("es").GetCountryCode(u"Estados Unidos"));
EXPECT_EQ("IT", TestCountryNames("it").GetCountryCode(u"Italia"));
EXPECT_EQ("DE", TestCountryNames("nl").GetCountryCode(u"duitsland"));
}
TEST(CountryNamesTest, GetCountryCode_EnUsFallback) {
TestCountryNames es_names("es");
EXPECT_EQ("US", es_names.GetCountryCode(u"United States"));
EXPECT_EQ("US", es_names.GetCountryCode(u"united states"));
EXPECT_EQ("US", es_names.GetCountryCode(u"USA"));
}
TEST(CountryNamesTest, GetCountryCodeForLocalizedCountryName) {
// Initialize with the default locale.
TestCountryNames names("en_US");
EXPECT_EQ("AM",
names.GetCountryCodeForLocalizedCountryName(u"Armenien", "de"));
// Check that there is no cache by requesting the same result twice.
EXPECT_EQ("AM",
names.GetCountryCodeForLocalizedCountryName(u"Armenien", "de"));
EXPECT_EQ("AZ",
names.GetCountryCodeForLocalizedCountryName(u"Azerbeidzjan", "nl"));
}
TEST(CountryNamesTest, GetCachedCountryCodeForLocalizedCountryName) {
// Initialize with the default locale.
TestCountryNames names("en_US");
// Verify that the entry is not cached.
EXPECT_FALSE(names.IsCountryNamesForLocaleCachedForTesting("de"));
// Make a lookup of the entry that should result in a cache write.
EXPECT_EQ("AM",
names.GetCountryCodeForLocalizedCountryName(u"Armenien", "de"));
// Verify that the entry is cached.
EXPECT_TRUE(names.IsCountryNamesForLocaleCachedForTesting("de"));
}
TEST(CountryNamesTest, GetCountryCode_EmptyString) {
TestCountryNames en_us_names("en_US");
EXPECT_EQ("", en_us_names.GetCountryCode(u""));
}
// Tests that native names of countries are mapped to their country codes
// even if the locale does not match (e.g. "Deutschland" is not the en_US
// representation of "Germany").
TEST(CountryNamesTest, GetCountryCode_NativeNames_Uppercase) {
TestCountryNames en_us_names("en_US");
// German, uppercase
EXPECT_EQ("DE", en_us_names.GetCountryCode(u"DEUTSCHLAND"));
// Greek, uppercase
EXPECT_EQ("GR", en_us_names.GetCountryCode(u"ΕΛΛΆΔΑ"));
// Russian, uppercase
EXPECT_EQ("RU", en_us_names.GetCountryCode(u"РОССИЯ"));
// Japanese, no case, should still work.
EXPECT_EQ("JP", en_us_names.GetCountryCode(u"日本"));
}
// Tests that country native names are correctly mapped even in lowercase.
// The native names are stored in uppercase so this test ensures that the
// international uppercasing works as expected.
TEST(CountryNamesTest, GetCountryCode_NativeNames_Lowercase) {
TestCountryNames en_us_names("en_US");
EXPECT_EQ("DE", en_us_names.GetCountryCode(u"Deutschland"));
EXPECT_EQ("ES", en_us_names.GetCountryCode(u"España"));
EXPECT_EQ("FR", en_us_names.GetCountryCode(u"France"));
EXPECT_EQ("GR", en_us_names.GetCountryCode(u"ελλάδα"));
EXPECT_EQ("RU", en_us_names.GetCountryCode(u"россия"));
// Japanese, no case, should still work.
EXPECT_EQ("JP", en_us_names.GetCountryCode(u"日本"));
}
// Test mapping of an empty country name to an country code.
TEST(CountryNamesTest, EmptyCountryNameHasEmptyCountryCode) {
std::string country_code =
TestCountryNames("en").GetCountryCode(std::u16string());
EXPECT_TRUE(country_code.empty()) << country_code;
}
} // namespace
} // namespace autofill
|