File: country_names_unittest.cc

package info (click to toggle)
chromium 140.0.7339.127-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 6,201,772 kB
  • sloc: cpp: 35,093,800; ansic: 7,161,670; javascript: 4,199,694; python: 1,441,798; asm: 949,904; xml: 747,503; pascal: 187,748; perl: 88,691; sh: 88,248; objc: 79,953; sql: 52,714; cs: 44,599; fortran: 24,137; makefile: 22,119; tcl: 15,277; php: 13,980; yacc: 9,000; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (135 lines) | stat: -rw-r--r-- 5,083 bytes parent folder | download | duplicates (3)
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