1 // Copyright (c) 2012 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.
8 #include "chrome/installer/util/language_selector.h"
9 #include "testing/gtest/include/gtest/gtest.h"
13 const wchar_t* const kExactMatchCandidates
[] = {
14 L
"am", L
"ar", L
"bg", L
"bn", L
"ca", L
"cs", L
"da", L
"de", L
"el", L
"en-gb",
15 L
"en-us", L
"es", L
"es-419", L
"et", L
"fa", L
"fi", L
"fil", L
"fr", L
"gu", L
"hi",
16 L
"hr", L
"hu", L
"id", L
"it", L
"iw", L
"ja", L
"kn", L
"ko", L
"lt", L
"lv", L
"ml",
17 L
"mr", L
"nl", L
"no", L
"pl", L
"pt-br", L
"pt-pt", L
"ro", L
"ru", L
"sk", L
"sl",
18 L
"sr", L
"sv", L
"sw", L
"ta", L
"te", L
"th", L
"tr", L
"uk", L
"vi", L
"zh-cn",
22 const wchar_t* const kAliasMatchCandidates
[] = {
23 L
"he", L
"nb", L
"tl", L
"zh-chs", L
"zh-cht", L
"zh-hans", L
"zh-hant", L
"zh-hk",
27 const wchar_t* const kWildcardMatchCandidates
[] = {
29 L
"es-CO", L
"pt-AB", L
"zh-SG"
34 // Test that a language is selected from the system.
35 TEST(LanguageSelectorTest
, DefaultSelection
) {
36 installer::LanguageSelector instance
;
37 EXPECT_FALSE(instance
.matched_candidate().empty());
40 // Test some hypothetical candidate sets.
41 TEST(LanguageSelectorTest
, AssortedSelections
) {
43 std::wstring candidates
[] = {
44 L
"fr-BE", L
"fr", L
"en"
46 installer::LanguageSelector
instance(
47 std::vector
<std::wstring
>(&candidates
[0],
48 &candidates
[arraysize(candidates
)]));
49 // Expect the exact match to win.
50 EXPECT_EQ(L
"fr", instance
.matched_candidate());
53 std::wstring candidates
[] = {
54 L
"xx-YY", L
"cc-Ssss-RR"
56 installer::LanguageSelector
instance(
57 std::vector
<std::wstring
>(&candidates
[0],
58 &candidates
[arraysize(candidates
)]));
59 // Expect the fallback to win.
60 EXPECT_EQ(L
"en-us", instance
.matched_candidate());
63 std::wstring candidates
[] = {
66 installer::LanguageSelector
instance(
67 std::vector
<std::wstring
>(&candidates
[0],
68 &candidates
[arraysize(candidates
)]));
69 // Expect the alias match to win.
70 EXPECT_EQ(L
"zh-SG", instance
.matched_candidate());
74 // A fixture for testing sets of single-candidate selections.
75 class LanguageSelectorMatchCandidateTest
76 : public ::testing::TestWithParam
<const wchar_t*> {
79 TEST_P(LanguageSelectorMatchCandidateTest
, TestMatchCandidate
) {
80 installer::LanguageSelector
instance(
81 std::vector
<std::wstring
>(1, std::wstring(GetParam())));
82 EXPECT_EQ(GetParam(), instance
.matched_candidate());
85 // Test that all existing translations can be found by exact match.
86 INSTANTIATE_TEST_CASE_P(
88 LanguageSelectorMatchCandidateTest
,
90 &kExactMatchCandidates
[0],
91 &kExactMatchCandidates
[arraysize(kExactMatchCandidates
)]));
93 // Test the alias matches.
94 INSTANTIATE_TEST_CASE_P(
96 LanguageSelectorMatchCandidateTest
,
98 &kAliasMatchCandidates
[0],
99 &kAliasMatchCandidates
[arraysize(kAliasMatchCandidates
)]));
101 // Test a few wildcard matches.
102 INSTANTIATE_TEST_CASE_P(
104 LanguageSelectorMatchCandidateTest
,
106 &kWildcardMatchCandidates
[0],
107 &kWildcardMatchCandidates
[arraysize(kWildcardMatchCandidates
)]));
109 // A fixture for testing aliases that match to an expected translation. The
110 // first member of the tuple is the expected translation, the second is a
111 // candidate that should be aliased to the expectation.
112 class LanguageSelectorAliasTest
113 : public ::testing::TestWithParam
< std::tr1::tuple
<const wchar_t*,
117 // Test that the candidate language maps to the aliased translation.
118 TEST_P(LanguageSelectorAliasTest
, AliasesMatch
) {
119 installer::LanguageSelector
instance(
120 std::vector
<std::wstring
>(1, std::tr1::get
<1>(GetParam())));
121 EXPECT_EQ(std::tr1::get
<0>(GetParam()), instance
.selected_translation());
124 INSTANTIATE_TEST_CASE_P(
126 LanguageSelectorAliasTest
,
128 ::testing::Values(L
"en-gb"),
129 ::testing::Values(L
"en-au", L
"en-ca", L
"en-nz", L
"en-za")));
131 INSTANTIATE_TEST_CASE_P(
133 LanguageSelectorAliasTest
,
135 ::testing::Values(L
"iw"),
136 ::testing::Values(L
"he")));
138 INSTANTIATE_TEST_CASE_P(
140 LanguageSelectorAliasTest
,
142 ::testing::Values(L
"no"),
143 ::testing::Values(L
"nb")));
145 INSTANTIATE_TEST_CASE_P(
147 LanguageSelectorAliasTest
,
149 ::testing::Values(L
"fil"),
150 ::testing::Values(L
"tl")));
152 INSTANTIATE_TEST_CASE_P(
154 LanguageSelectorAliasTest
,
156 ::testing::Values(L
"zh-cn"),
157 ::testing::Values(L
"zh-chs", L
"zh-hans", L
"zh-sg")));
159 INSTANTIATE_TEST_CASE_P(
161 LanguageSelectorAliasTest
,
163 ::testing::Values(L
"zh-tw"),
164 ::testing::Values(L
"zh-cht", L
"zh-hant", L
"zh-hk", L
"zh-mo")));
166 // Test that we can get the name of the default language.
167 TEST(LanguageSelectorTest
, DefaultLanguageName
) {
168 installer::LanguageSelector instance
;
169 EXPECT_FALSE(instance
.GetLanguageName(instance
.offset()).empty());