1*834a2baaSAndroid Build Coastguard Worker /*
2*834a2baaSAndroid Build Coastguard Worker * Copyright (C) 2017 The Android Open Source Project
3*834a2baaSAndroid Build Coastguard Worker *
4*834a2baaSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*834a2baaSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*834a2baaSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*834a2baaSAndroid Build Coastguard Worker *
8*834a2baaSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*834a2baaSAndroid Build Coastguard Worker *
10*834a2baaSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*834a2baaSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*834a2baaSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*834a2baaSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*834a2baaSAndroid Build Coastguard Worker * limitations under the License.
15*834a2baaSAndroid Build Coastguard Worker */
16*834a2baaSAndroid Build Coastguard Worker
17*834a2baaSAndroid Build Coastguard Worker #include "HyphenatorMap.h"
18*834a2baaSAndroid Build Coastguard Worker
19*834a2baaSAndroid Build Coastguard Worker #include <gtest/gtest.h>
20*834a2baaSAndroid Build Coastguard Worker
21*834a2baaSAndroid Build Coastguard Worker #include "LocaleListCache.h"
22*834a2baaSAndroid Build Coastguard Worker #include "MinikinInternal.h"
23*834a2baaSAndroid Build Coastguard Worker
24*834a2baaSAndroid Build Coastguard Worker namespace minikin {
25*834a2baaSAndroid Build Coastguard Worker namespace {
26*834a2baaSAndroid Build Coastguard Worker
27*834a2baaSAndroid Build Coastguard Worker // Constants used for testing. The address does not need a valid one.
28*834a2baaSAndroid Build Coastguard Worker const Hyphenator* FAKE_ADDRESS = reinterpret_cast<const Hyphenator*>(1);
29*834a2baaSAndroid Build Coastguard Worker const Hyphenator* AS_HYPHENATOR = FAKE_ADDRESS++;
30*834a2baaSAndroid Build Coastguard Worker const Hyphenator* BG_HYPHENATOR = FAKE_ADDRESS++;
31*834a2baaSAndroid Build Coastguard Worker const Hyphenator* BN_HYPHENATOR = FAKE_ADDRESS++;
32*834a2baaSAndroid Build Coastguard Worker const Hyphenator* CU_HYPHENATOR = FAKE_ADDRESS++;
33*834a2baaSAndroid Build Coastguard Worker const Hyphenator* CY_HYPHENATOR = FAKE_ADDRESS++;
34*834a2baaSAndroid Build Coastguard Worker const Hyphenator* DA_HYPHENATOR = FAKE_ADDRESS++;
35*834a2baaSAndroid Build Coastguard Worker const Hyphenator* DE_1901_HYPHENATOR = FAKE_ADDRESS++;
36*834a2baaSAndroid Build Coastguard Worker const Hyphenator* DE_1996_HYPHENATOR = FAKE_ADDRESS++;
37*834a2baaSAndroid Build Coastguard Worker const Hyphenator* DE_CH_1901_HYPHENATOR = FAKE_ADDRESS++;
38*834a2baaSAndroid Build Coastguard Worker const Hyphenator* EN_GB_HYPHENATOR = FAKE_ADDRESS++;
39*834a2baaSAndroid Build Coastguard Worker const Hyphenator* EN_US_HYPHENATOR = FAKE_ADDRESS++;
40*834a2baaSAndroid Build Coastguard Worker const Hyphenator* ES_HYPHENATOR = FAKE_ADDRESS++;
41*834a2baaSAndroid Build Coastguard Worker const Hyphenator* ET_HYPHENATOR = FAKE_ADDRESS++;
42*834a2baaSAndroid Build Coastguard Worker const Hyphenator* EU_HYPHENATOR = FAKE_ADDRESS++;
43*834a2baaSAndroid Build Coastguard Worker const Hyphenator* FR_HYPHENATOR = FAKE_ADDRESS++;
44*834a2baaSAndroid Build Coastguard Worker const Hyphenator* GA_HYPHENATOR = FAKE_ADDRESS++;
45*834a2baaSAndroid Build Coastguard Worker const Hyphenator* GU_HYPHENATOR = FAKE_ADDRESS++;
46*834a2baaSAndroid Build Coastguard Worker const Hyphenator* HI_HYPHENATOR = FAKE_ADDRESS++;
47*834a2baaSAndroid Build Coastguard Worker const Hyphenator* HR_HYPHENATOR = FAKE_ADDRESS++;
48*834a2baaSAndroid Build Coastguard Worker const Hyphenator* HU_HYPHENATOR = FAKE_ADDRESS++;
49*834a2baaSAndroid Build Coastguard Worker const Hyphenator* HY_HYPHENATOR = FAKE_ADDRESS++;
50*834a2baaSAndroid Build Coastguard Worker const Hyphenator* KN_HYPHENATOR = FAKE_ADDRESS++;
51*834a2baaSAndroid Build Coastguard Worker const Hyphenator* ML_HYPHENATOR = FAKE_ADDRESS++;
52*834a2baaSAndroid Build Coastguard Worker const Hyphenator* MN_CYRL_HYPHENATOR = FAKE_ADDRESS++;
53*834a2baaSAndroid Build Coastguard Worker const Hyphenator* MR_HYPHENATOR = FAKE_ADDRESS++;
54*834a2baaSAndroid Build Coastguard Worker const Hyphenator* NB_HYPHENATOR = FAKE_ADDRESS++;
55*834a2baaSAndroid Build Coastguard Worker const Hyphenator* NN_HYPHENATOR = FAKE_ADDRESS++;
56*834a2baaSAndroid Build Coastguard Worker const Hyphenator* OR_HYPHENATOR = FAKE_ADDRESS++;
57*834a2baaSAndroid Build Coastguard Worker const Hyphenator* PA_HYPHENATOR = FAKE_ADDRESS++;
58*834a2baaSAndroid Build Coastguard Worker const Hyphenator* PT_HYPHENATOR = FAKE_ADDRESS++;
59*834a2baaSAndroid Build Coastguard Worker const Hyphenator* SL_HYPHENATOR = FAKE_ADDRESS++;
60*834a2baaSAndroid Build Coastguard Worker const Hyphenator* TA_HYPHENATOR = FAKE_ADDRESS++;
61*834a2baaSAndroid Build Coastguard Worker const Hyphenator* TE_HYPHENATOR = FAKE_ADDRESS++;
62*834a2baaSAndroid Build Coastguard Worker const Hyphenator* TK_HYPHENATOR = FAKE_ADDRESS++;
63*834a2baaSAndroid Build Coastguard Worker const Hyphenator* UND_ETHI_HYPHENATOR = FAKE_ADDRESS++;
64*834a2baaSAndroid Build Coastguard Worker
65*834a2baaSAndroid Build Coastguard Worker class TestableHyphenatorMap : public HyphenatorMap {
66*834a2baaSAndroid Build Coastguard Worker public:
TestableHyphenatorMap()67*834a2baaSAndroid Build Coastguard Worker TestableHyphenatorMap() : HyphenatorMap() {}
68*834a2baaSAndroid Build Coastguard Worker
69*834a2baaSAndroid Build Coastguard Worker using HyphenatorMap::addAliasInternal;
70*834a2baaSAndroid Build Coastguard Worker using HyphenatorMap::addInternal;
71*834a2baaSAndroid Build Coastguard Worker using HyphenatorMap::lookupInternal;
72*834a2baaSAndroid Build Coastguard Worker };
73*834a2baaSAndroid Build Coastguard Worker
74*834a2baaSAndroid Build Coastguard Worker class HyphenatorMapTest : public testing::Test {
75*834a2baaSAndroid Build Coastguard Worker protected:
SetUp()76*834a2baaSAndroid Build Coastguard Worker virtual void SetUp() override {
77*834a2baaSAndroid Build Coastguard Worker // Following settings are copied from Hyphenator.java.
78*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("as", AS_HYPHENATOR);
79*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("bg", BG_HYPHENATOR);
80*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("bn", BN_HYPHENATOR);
81*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("cu", CU_HYPHENATOR);
82*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("cy", CY_HYPHENATOR);
83*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("da", DA_HYPHENATOR);
84*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("de-1901", DE_1901_HYPHENATOR);
85*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("de-1996", DE_1996_HYPHENATOR);
86*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("de-CH-1901", DE_CH_1901_HYPHENATOR);
87*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("en-GB", EN_GB_HYPHENATOR);
88*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("en-US", EN_US_HYPHENATOR);
89*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("es", ES_HYPHENATOR);
90*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("et", ET_HYPHENATOR);
91*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("eu", EU_HYPHENATOR);
92*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("fr", FR_HYPHENATOR);
93*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("ga", GA_HYPHENATOR);
94*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("gu", GU_HYPHENATOR);
95*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("hi", HI_HYPHENATOR);
96*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("hr", HR_HYPHENATOR);
97*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("hu", HU_HYPHENATOR);
98*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("hy", HY_HYPHENATOR);
99*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("kn", KN_HYPHENATOR);
100*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("ml", ML_HYPHENATOR);
101*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("mn-Cyrl", MN_CYRL_HYPHENATOR);
102*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("mr", MR_HYPHENATOR);
103*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("nb", NB_HYPHENATOR);
104*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("nn", NN_HYPHENATOR);
105*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("or", OR_HYPHENATOR);
106*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("pa", PA_HYPHENATOR);
107*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("pt", PT_HYPHENATOR);
108*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("sl", SL_HYPHENATOR);
109*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("ta", TA_HYPHENATOR);
110*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("te", TE_HYPHENATOR);
111*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("tk", TK_HYPHENATOR);
112*834a2baaSAndroid Build Coastguard Worker mMap.addInternal("und-Ethi", UND_ETHI_HYPHENATOR);
113*834a2baaSAndroid Build Coastguard Worker
114*834a2baaSAndroid Build Coastguard Worker mMap.addAliasInternal("en", "en-GB");
115*834a2baaSAndroid Build Coastguard Worker mMap.addAliasInternal("en-AS", "en-US");
116*834a2baaSAndroid Build Coastguard Worker mMap.addAliasInternal("en-GU", "en-US");
117*834a2baaSAndroid Build Coastguard Worker mMap.addAliasInternal("en-MH", "en-US");
118*834a2baaSAndroid Build Coastguard Worker mMap.addAliasInternal("en-MP", "en-US");
119*834a2baaSAndroid Build Coastguard Worker mMap.addAliasInternal("en-PR", "en-US");
120*834a2baaSAndroid Build Coastguard Worker mMap.addAliasInternal("en-UM", "en-US");
121*834a2baaSAndroid Build Coastguard Worker mMap.addAliasInternal("en-VI", "en-US");
122*834a2baaSAndroid Build Coastguard Worker mMap.addAliasInternal("de-LI-1901", "de-CH-1901");
123*834a2baaSAndroid Build Coastguard Worker mMap.addAliasInternal("de", "de-1996");
124*834a2baaSAndroid Build Coastguard Worker mMap.addAliasInternal("no", "nb");
125*834a2baaSAndroid Build Coastguard Worker mMap.addAliasInternal("mn", "mn-Cyrl");
126*834a2baaSAndroid Build Coastguard Worker // am for und-Ethi is removed for testing purposes.
127*834a2baaSAndroid Build Coastguard Worker mMap.addAliasInternal("byn", "und-Ethi");
128*834a2baaSAndroid Build Coastguard Worker mMap.addAliasInternal("gez", "und-Ethi");
129*834a2baaSAndroid Build Coastguard Worker mMap.addAliasInternal("ti", "und-Ethi");
130*834a2baaSAndroid Build Coastguard Worker mMap.addAliasInternal("wal", "und-Ethi");
131*834a2baaSAndroid Build Coastguard Worker }
132*834a2baaSAndroid Build Coastguard Worker
getLocale(const std::string & localeStr)133*834a2baaSAndroid Build Coastguard Worker const Locale& getLocale(const std::string& localeStr) {
134*834a2baaSAndroid Build Coastguard Worker // In production, we reconstruct the LocaleList from the locale list ID.
135*834a2baaSAndroid Build Coastguard Worker // So, do it here too.
136*834a2baaSAndroid Build Coastguard Worker const uint32_t id = LocaleListCache::getId(localeStr);
137*834a2baaSAndroid Build Coastguard Worker const LocaleList& locales = LocaleListCache::getById(id);
138*834a2baaSAndroid Build Coastguard Worker MINIKIN_ASSERT(locales.size() == 1, "The input must be a single locale");
139*834a2baaSAndroid Build Coastguard Worker return locales[0];
140*834a2baaSAndroid Build Coastguard Worker }
141*834a2baaSAndroid Build Coastguard Worker
lookup(const std::string & localeStr)142*834a2baaSAndroid Build Coastguard Worker const Hyphenator* lookup(const std::string& localeStr) {
143*834a2baaSAndroid Build Coastguard Worker return mMap.lookupInternal(getLocale(localeStr));
144*834a2baaSAndroid Build Coastguard Worker }
145*834a2baaSAndroid Build Coastguard Worker
146*834a2baaSAndroid Build Coastguard Worker private:
147*834a2baaSAndroid Build Coastguard Worker TestableHyphenatorMap mMap;
148*834a2baaSAndroid Build Coastguard Worker };
149*834a2baaSAndroid Build Coastguard Worker
TEST_F(HyphenatorMapTest,exactMatch)150*834a2baaSAndroid Build Coastguard Worker TEST_F(HyphenatorMapTest, exactMatch) {
151*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(AS_HYPHENATOR, lookup("as"));
152*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(BG_HYPHENATOR, lookup("bg"));
153*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(BN_HYPHENATOR, lookup("bn"));
154*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(CU_HYPHENATOR, lookup("cu"));
155*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(CY_HYPHENATOR, lookup("cy"));
156*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DA_HYPHENATOR, lookup("da"));
157*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1901_HYPHENATOR, lookup("de-1901"));
158*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-1996"));
159*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_CH_1901_HYPHENATOR, lookup("de-CH-1901"));
160*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_GB_HYPHENATOR, lookup("en-GB"));
161*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_US_HYPHENATOR, lookup("en-US"));
162*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(ES_HYPHENATOR, lookup("es"));
163*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(ET_HYPHENATOR, lookup("et"));
164*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EU_HYPHENATOR, lookup("eu"));
165*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(FR_HYPHENATOR, lookup("fr"));
166*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(GA_HYPHENATOR, lookup("ga"));
167*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(GU_HYPHENATOR, lookup("gu"));
168*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(HI_HYPHENATOR, lookup("hi"));
169*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(HR_HYPHENATOR, lookup("hr"));
170*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(HU_HYPHENATOR, lookup("hu"));
171*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(HY_HYPHENATOR, lookup("hy"));
172*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(KN_HYPHENATOR, lookup("kn"));
173*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(ML_HYPHENATOR, lookup("ml"));
174*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(MN_CYRL_HYPHENATOR, lookup("mn-Cyrl"));
175*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(MR_HYPHENATOR, lookup("mr"));
176*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(NB_HYPHENATOR, lookup("nb"));
177*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(NN_HYPHENATOR, lookup("nn"));
178*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(OR_HYPHENATOR, lookup("or"));
179*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(PA_HYPHENATOR, lookup("pa"));
180*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(PT_HYPHENATOR, lookup("pt"));
181*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(SL_HYPHENATOR, lookup("sl"));
182*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(TA_HYPHENATOR, lookup("ta"));
183*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(TE_HYPHENATOR, lookup("te"));
184*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(TK_HYPHENATOR, lookup("tk"));
185*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(UND_ETHI_HYPHENATOR, lookup("und-Ethi"));
186*834a2baaSAndroid Build Coastguard Worker }
187*834a2baaSAndroid Build Coastguard Worker
TEST_F(HyphenatorMapTest,aliasMatch)188*834a2baaSAndroid Build Coastguard Worker TEST_F(HyphenatorMapTest, aliasMatch) {
189*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_US_HYPHENATOR, lookup("en-AS"));
190*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_US_HYPHENATOR, lookup("en-GU"));
191*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_US_HYPHENATOR, lookup("en-MH"));
192*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_US_HYPHENATOR, lookup("en-MP"));
193*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_US_HYPHENATOR, lookup("en-PR"));
194*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_US_HYPHENATOR, lookup("en-UM"));
195*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_US_HYPHENATOR, lookup("en-VI"));
196*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de"));
197*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_CH_1901_HYPHENATOR, lookup("de-LI-1901"));
198*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(NB_HYPHENATOR, lookup("no"));
199*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(MN_CYRL_HYPHENATOR, lookup("mn"));
200*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(UND_ETHI_HYPHENATOR, lookup("byn"));
201*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(UND_ETHI_HYPHENATOR, lookup("gez"));
202*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(UND_ETHI_HYPHENATOR, lookup("ti"));
203*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(UND_ETHI_HYPHENATOR, lookup("wal"));
204*834a2baaSAndroid Build Coastguard Worker // Amharic is tested in fallbackTest_scriptFallback
205*834a2baaSAndroid Build Coastguard Worker }
206*834a2baaSAndroid Build Coastguard Worker
TEST_F(HyphenatorMapTest,IgnoreScript)207*834a2baaSAndroid Build Coastguard Worker TEST_F(HyphenatorMapTest, IgnoreScript) {
208*834a2baaSAndroid Build Coastguard Worker // Script should be ignored until the final script-only matching rule.
209*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_US_HYPHENATOR, lookup("en-Latn-US"));
210*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_US_HYPHENATOR, lookup("en-Zsye-US"));
211*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_US_HYPHENATOR, lookup("en-Zsym-US"));
212*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_US_HYPHENATOR, lookup("en-Jpan-US"));
213*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_US_HYPHENATOR, lookup("en-Hans-US"));
214*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_US_HYPHENATOR, lookup("en-Ethi-US"));
215*834a2baaSAndroid Build Coastguard Worker
216*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_GB_HYPHENATOR, lookup("en-Zsye-AU"));
217*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_GB_HYPHENATOR, lookup("en-Zsye-GB"));
218*834a2baaSAndroid Build Coastguard Worker }
219*834a2baaSAndroid Build Coastguard Worker
TEST_F(HyphenatorMapTest,languageFallback)220*834a2baaSAndroid Build Coastguard Worker TEST_F(HyphenatorMapTest, languageFallback) {
221*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_GB_HYPHENATOR, lookup("en-AU"));
222*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_GB_HYPHENATOR, lookup("en-NZ"));
223*834a2baaSAndroid Build Coastguard Worker
224*834a2baaSAndroid Build Coastguard Worker // "en" is expanded to en-Latn-US. So this is equivalent to "en-Latn-US" test case.
225*834a2baaSAndroid Build Coastguard Worker // This expansion also happens in production.
226*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(EN_US_HYPHENATOR, lookup("en"));
227*834a2baaSAndroid Build Coastguard Worker }
228*834a2baaSAndroid Build Coastguard Worker
TEST_F(HyphenatorMapTest,GermanFallback)229*834a2baaSAndroid Build Coastguard Worker TEST_F(HyphenatorMapTest, GermanFallback) {
230*834a2baaSAndroid Build Coastguard Worker // German in general
231*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de"));
232*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1901_HYPHENATOR, lookup("de-1901"));
233*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-1996"));
234*834a2baaSAndroid Build Coastguard Worker
235*834a2baaSAndroid Build Coastguard Worker // German in Germany
236*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-DE"));
237*834a2baaSAndroid Build Coastguard Worker
238*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1901_HYPHENATOR, lookup("de-DE-1901"));
239*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1901_HYPHENATOR, lookup("de-Latn-DE-1901"));
240*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1901_HYPHENATOR, lookup("de-Latn-DE-1901-u-em-emoji"));
241*834a2baaSAndroid Build Coastguard Worker
242*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-DE-1996"));
243*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-Latn-DE-1996"));
244*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-Latn-DE-1996-u-em-emoji"));
245*834a2baaSAndroid Build Coastguard Worker
246*834a2baaSAndroid Build Coastguard Worker // German in Austria
247*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-AT"));
248*834a2baaSAndroid Build Coastguard Worker
249*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1901_HYPHENATOR, lookup("de-AT-1901"));
250*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1901_HYPHENATOR, lookup("de-Latn-AT-1901"));
251*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1901_HYPHENATOR, lookup("de-Latn-AT-1901-u-em-emoji"));
252*834a2baaSAndroid Build Coastguard Worker
253*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-AT-1996"));
254*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-Latn-AT-1996"));
255*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-Latn-AT-1996-u-em-emoji"));
256*834a2baaSAndroid Build Coastguard Worker
257*834a2baaSAndroid Build Coastguard Worker // German in Switzerland
258*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-CH"));
259*834a2baaSAndroid Build Coastguard Worker
260*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_CH_1901_HYPHENATOR, lookup("de-CH-1901"));
261*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_CH_1901_HYPHENATOR, lookup("de-Latn-CH-1901"));
262*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_CH_1901_HYPHENATOR, lookup("de-Latn-CH-1901-u-em-emoji"));
263*834a2baaSAndroid Build Coastguard Worker
264*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-CH-1996"));
265*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-Latn-CH-1996"));
266*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-Latn-CH-1996-u-em-emoji"));
267*834a2baaSAndroid Build Coastguard Worker
268*834a2baaSAndroid Build Coastguard Worker // German in Liechtenstein
269*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-LI"));
270*834a2baaSAndroid Build Coastguard Worker
271*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_CH_1901_HYPHENATOR, lookup("de-LI-1901"));
272*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_CH_1901_HYPHENATOR, lookup("de-Latn-LI-1901"));
273*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_CH_1901_HYPHENATOR, lookup("de-Latn-LI-1901-u-em-emoji"));
274*834a2baaSAndroid Build Coastguard Worker
275*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-LI-1996"));
276*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-Latn-LI-1996"));
277*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(DE_1996_HYPHENATOR, lookup("de-Latn-LI-1996-u-em-emoji"));
278*834a2baaSAndroid Build Coastguard Worker }
279*834a2baaSAndroid Build Coastguard Worker
TEST_F(HyphenatorMapTest,fallbackTest_LanguageFallback)280*834a2baaSAndroid Build Coastguard Worker TEST_F(HyphenatorMapTest, fallbackTest_LanguageFallback) {
281*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(ES_HYPHENATOR, lookup("es-ES"));
282*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(ES_HYPHENATOR, lookup("es-AR"));
283*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(ES_HYPHENATOR, lookup("es-BO"));
284*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(ES_HYPHENATOR, lookup("es-CL"));
285*834a2baaSAndroid Build Coastguard Worker
286*834a2baaSAndroid Build Coastguard Worker // Spanish in Great Britain
287*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(ES_HYPHENATOR, lookup("es-GB"));
288*834a2baaSAndroid Build Coastguard Worker }
289*834a2baaSAndroid Build Coastguard Worker
TEST_F(HyphenatorMapTest,fallbackTest_ScriptFallback)290*834a2baaSAndroid Build Coastguard Worker TEST_F(HyphenatorMapTest, fallbackTest_ScriptFallback) {
291*834a2baaSAndroid Build Coastguard Worker EXPECT_EQ(UND_ETHI_HYPHENATOR, lookup("am"));
292*834a2baaSAndroid Build Coastguard Worker }
293*834a2baaSAndroid Build Coastguard Worker
TEST_F(HyphenatorMapTest,neverReturnNullptrTest)294*834a2baaSAndroid Build Coastguard Worker TEST_F(HyphenatorMapTest, neverReturnNullptrTest) {
295*834a2baaSAndroid Build Coastguard Worker EXPECT_NE(nullptr, lookup("und"));
296*834a2baaSAndroid Build Coastguard Worker EXPECT_NE(nullptr, lookup("ja"));
297*834a2baaSAndroid Build Coastguard Worker EXPECT_NE(nullptr, lookup("ja-JP"));
298*834a2baaSAndroid Build Coastguard Worker }
299*834a2baaSAndroid Build Coastguard Worker
TEST_F(HyphenatorMapTest,CyrlScriptFallback)300*834a2baaSAndroid Build Coastguard Worker TEST_F(HyphenatorMapTest, CyrlScriptFallback) {
301*834a2baaSAndroid Build Coastguard Worker // mn-Cryl should not match with ru-Cyrl and und-Cyrl
302*834a2baaSAndroid Build Coastguard Worker EXPECT_NE(MN_CYRL_HYPHENATOR, lookup("ru-Cyrl"));
303*834a2baaSAndroid Build Coastguard Worker EXPECT_NE(MN_CYRL_HYPHENATOR, lookup("und-Cyrl"));
304*834a2baaSAndroid Build Coastguard Worker }
305*834a2baaSAndroid Build Coastguard Worker
306*834a2baaSAndroid Build Coastguard Worker } // namespace
307*834a2baaSAndroid Build Coastguard Worker } // namespace minikin
308