- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / installer / util / language_selector_unittest.cc
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.
4
5 #include <string>
6 #include <vector>
7
8 #include "chrome/installer/util/language_selector.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace {
12
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",
19   L"zh-tw"
20 };
21
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",
24   L"zh-mo"
25 };
26
27 const wchar_t* const kWildcardMatchCandidates[] = {
28   L"en-AU",
29   L"es-CO", L"pt-AB", L"zh-SG"
30 };
31
32 }  // namespace
33
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());
38 }
39
40 // Test some hypothetical candidate sets.
41 TEST(LanguageSelectorTest, AssortedSelections) {
42   {
43     std::wstring candidates[] = {
44       L"fr-BE", L"fr", L"en"
45     };
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());
51   }
52   {
53     std::wstring candidates[] = {
54       L"xx-YY", L"cc-Ssss-RR"
55     };
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());
61   }
62   {
63     std::wstring candidates[] = {
64       L"zh-SG", L"en-GB"
65     };
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());
71   }
72 }
73
74 // A fixture for testing sets of single-candidate selections.
75 class LanguageSelectorMatchCandidateTest
76     : public ::testing::TestWithParam<const wchar_t*> {
77 };
78
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());
83 }
84
85 // Test that all existing translations can be found by exact match.
86 INSTANTIATE_TEST_CASE_P(
87     TestExactMatches,
88     LanguageSelectorMatchCandidateTest,
89     ::testing::ValuesIn(
90         &kExactMatchCandidates[0],
91         &kExactMatchCandidates[arraysize(kExactMatchCandidates)]));
92
93 // Test the alias matches.
94 INSTANTIATE_TEST_CASE_P(
95     TestAliasMatches,
96     LanguageSelectorMatchCandidateTest,
97     ::testing::ValuesIn(
98         &kAliasMatchCandidates[0],
99         &kAliasMatchCandidates[arraysize(kAliasMatchCandidates)]));
100
101 // Test a few wildcard matches.
102 INSTANTIATE_TEST_CASE_P(
103     TestWildcardMatches,
104     LanguageSelectorMatchCandidateTest,
105     ::testing::ValuesIn(
106         &kWildcardMatchCandidates[0],
107         &kWildcardMatchCandidates[arraysize(kWildcardMatchCandidates)]));
108
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*,
114                                                        const wchar_t*> > {
115 };
116
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());
122 }
123
124 INSTANTIATE_TEST_CASE_P(
125     EnGbAliases,
126     LanguageSelectorAliasTest,
127     ::testing::Combine(
128         ::testing::Values(L"en-gb"),
129         ::testing::Values(L"en-au", L"en-ca", L"en-nz", L"en-za")));
130
131 INSTANTIATE_TEST_CASE_P(
132     IwAliases,
133     LanguageSelectorAliasTest,
134     ::testing::Combine(
135         ::testing::Values(L"iw"),
136         ::testing::Values(L"he")));
137
138 INSTANTIATE_TEST_CASE_P(
139     NoAliases,
140     LanguageSelectorAliasTest,
141     ::testing::Combine(
142         ::testing::Values(L"no"),
143         ::testing::Values(L"nb")));
144
145 INSTANTIATE_TEST_CASE_P(
146     FilAliases,
147     LanguageSelectorAliasTest,
148     ::testing::Combine(
149         ::testing::Values(L"fil"),
150         ::testing::Values(L"tl")));
151
152 INSTANTIATE_TEST_CASE_P(
153     ZhCnAliases,
154     LanguageSelectorAliasTest,
155     ::testing::Combine(
156         ::testing::Values(L"zh-cn"),
157         ::testing::Values(L"zh-chs", L"zh-hans", L"zh-sg")));
158
159 INSTANTIATE_TEST_CASE_P(
160     ZhTwAliases,
161     LanguageSelectorAliasTest,
162     ::testing::Combine(
163         ::testing::Values(L"zh-tw"),
164         ::testing::Values(L"zh-cht", L"zh-hant", L"zh-hk", L"zh-mo")));
165
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());
170 }
171