• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "locale_config_test.h"
17 #include <gtest/gtest.h>
18 #include "locale_config.h"
19 #include "unicode/locid.h"
20 #include "parameter.h"
21 
22 using namespace OHOS::Global::I18n;
23 using testing::ext::TestSize;
24 using namespace std;
25 
26 namespace OHOS {
27 namespace Global {
28 namespace I18n {
29 class LocaleConfigTest : public testing::Test {
30 public:
31     static string originalLanguage;
32     static string originalRegion;
33     static string originalLocale;
34     static void SetUpTestCase(void);
35     static void TearDownTestCase(void);
36     void SetUp();
37     void TearDown();
38 
39     static std::vector<std::pair<std::string, std::string>> languageAndRegion;
40     static std::vector<std::string> simplifiedLanguage;
41 };
42 
43 string LocaleConfigTest::originalLanguage;
44 string LocaleConfigTest::originalRegion;
45 string LocaleConfigTest::originalLocale;
46 
47 std::vector<std::pair<std::string, std::string>> LocaleConfigTest::languageAndRegion {
48     { "zh-Hans", "CN" }, { "zh-Hant", "HK" }, { "zh-Hant", "TW" }, { "en-Latn-US", "US" }, { "en-Latn-US", "GB" },
49     { "bo", "CN" }, { "ug", "CN" }, { "am", "CN" }, { "ar", "CN" }, { "as", "CN" }, { "az-Latn", "IR" },
50     { "be", "CN" }, { "bg", "CN" }, { "bn", "CN" }, { "bs-Latn", "CN" }, { "ca", "CN" }, { "cs", "CN" },
51     { "da", "CN" }, { "de", "CN" }, { "el", "CN" }, { "es-ES", "US" }, { "es-US", "ES" }, { "et", "CN" },
52     { "eu", "CN" }, { "fa", "IR" }, { "fi", "CN" }, { "tl", "CN" }, { "fr", "CN" },  { "jv-Latn", "CN" },
53     { "mai", "CN" }, { "mn-Cyrl", "CN" }, { "uz-Latn", "CN" }
54 };
55 
56 std::vector<std::string> LocaleConfigTest::simplifiedLanguage {
57     "zh-Hans", "zh-Hant-HK", "zh-Hant", "en", "en-GB", "bo", "ug", "am", "ar", "as", "az-Latn", "be", "bg", "bn",
58     "bs-Latn", "ca", "cs", "da", "de", "el", "es", "es-US", "et", "eu", "fa", "fi", "tl", "fr", "jv-Latn", "mai",
59     "mn-Cyrl", "uz-Latn"
60 };
61 
SetUpTestCase(void)62 void LocaleConfigTest::SetUpTestCase(void)
63 {
64     originalLanguage = LocaleConfig::GetSystemLanguage();
65     originalRegion = LocaleConfig::GetSystemRegion();
66     originalLocale = LocaleConfig::GetSystemLocale();
67     LocaleConfig::SetSystemLanguage("zh-Hans");
68     LocaleConfig::SetSystemRegion("CN");
69     LocaleConfig::SetSystemLocale("zh-Hans-CN");
70 }
71 
TearDownTestCase(void)72 void LocaleConfigTest::TearDownTestCase(void)
73 {
74     LocaleConfig::SetSystemLanguage(originalLanguage);
75     LocaleConfig::SetSystemRegion(originalRegion);
76     LocaleConfig::SetSystemLocale(originalLocale);
77 }
78 
SetUp(void)79 void LocaleConfigTest::SetUp(void)
80 {}
81 
TearDown(void)82 void LocaleConfigTest::TearDown(void)
83 {}
84 
85 /**
86  * @tc.name: LocaleConfigFuncTest001
87  * @tc.desc: Test LocaleConfig GetSystemLanguage default
88  * @tc.type: FUNC
89  */
90 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest001, TestSize.Level1)
91 {
92     int ret = SetParameter("hm.sys.language", "");
93     if (!ret) {
94         EXPECT_EQ(LocaleConfig::GetSystemLanguage(), "zh-Hans");
95     }
96 }
97 
98 /**
99  * @tc.name: LocaleConfigFuncTest002
100  * @tc.desc: Test LocaleConfig GetSystemRegion default.
101  * @tc.type: FUNC
102  */
103 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest002, TestSize.Level1)
104 {
105     int ret = SetParameter("hm.sys.locale", "");
106     if (!ret) {
107         EXPECT_EQ(LocaleConfig::GetSystemRegion(), "CN");
108     }
109 }
110 
111 /**
112  * @tc.name: LocaleConfigFuncTest003
113  * @tc.desc: Test LocaleConfig GetSystemLocale default
114  * @tc.type: FUNC
115  */
116 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest003, TestSize.Level1)
117 {
118     int ret = SetParameter("hm.sys.locale", "");
119     if (!ret) {
120         EXPECT_EQ(LocaleConfig::GetSystemLocale(), "zh-Hans-CN");
121     }
122 }
123 
124 /**
125  * @tc.name: LocaleConfigFuncTest004
126  * @tc.desc: Test LocaleConfig SetSystemLanguage
127  * @tc.type: FUNC
128  */
129 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest004, TestSize.Level1)
130 {
131     string language = "pt-PT";
132     I18nErrorCode status = LocaleConfig::SetSystemLanguage(language);
133     EXPECT_EQ(status, I18nErrorCode::SUCCESS);
134     LocaleConfig::SetSystemLanguage("zh-Hans");
135     EXPECT_EQ(status, I18nErrorCode::SUCCESS);
136     LocaleConfig::SetSystemLanguage("%$=");
137 }
138 
139 /**
140  * @tc.name: LocaleConfigFuncTest005
141  * @tc.desc: Test LocaleConfig SetSystemLocale
142  * @tc.type: FUNC
143  */
144 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest005, TestSize.Level1)
145 {
146     string locale = "zh-Hant-TW";
147     I18nErrorCode status = LocaleConfig::SetSystemLocale(locale);
148     EXPECT_EQ(status, I18nErrorCode::SUCCESS);
149     status = LocaleConfig::SetSystemLocale("zh-Hans-CN");
150     EXPECT_EQ(status, I18nErrorCode::SUCCESS);
151 }
152 
153 /**
154  * @tc.name: LocaleConfigFuncTest006
155  * @tc.desc: Test LocaleConfig SetSystemRegion
156  * @tc.type: FUNC
157  */
158 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest006, TestSize.Level1)
159 {
160     string locale = "zh-Hant-TW";
161     I18nErrorCode status = LocaleConfig::SetSystemLocale(locale);
162     EXPECT_EQ(status, I18nErrorCode::SUCCESS);
163     status = LocaleConfig::SetSystemRegion("HK");
164     EXPECT_EQ(status, I18nErrorCode::SUCCESS);
165     status = LocaleConfig::SetSystemLocale("zh-Hans-CN");
166     EXPECT_EQ(status, I18nErrorCode::SUCCESS);
167     status = LocaleConfig::SetSystemRegion("@*%");
168     EXPECT_EQ(status, I18nErrorCode::INVALID_REGION_TAG);
169     status = LocaleConfig::SetSystemLocale("zh-Hans-CN", 2);
170     EXPECT_NE(status, I18nErrorCode::SUCCESS);
171     status = LocaleConfig::SetSystemLocale("zh-Hans-CN", 2);
172     EXPECT_NE(status, I18nErrorCode::SUCCESS);
173     status = LocaleConfig::SetSystemLocale("ar-EG");
174     EXPECT_EQ(status, I18nErrorCode::SUCCESS);
175     EXPECT_FALSE(LocaleConfig::GetUsingLocalDigit());
176     status = LocaleConfig::SetSystemLocale("$$@");
177     EXPECT_NE(status, I18nErrorCode::SUCCESS);
178     status = LocaleConfig::SetSystemLocale("zh-Hans-CN");
179     EXPECT_EQ(status, I18nErrorCode::SUCCESS);
180 }
181 
182 /**
183  * @tc.name: LocaleConfigFuncTest007
184  * @tc.desc: Test LocaleConfig GetSystemCountries
185  * @tc.type: FUNC
186  */
187 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest007, TestSize.Level1)
188 {
189     std::unordered_set<std::string> countries = LocaleConfig::GetSystemCountries("zh");
190     EXPECT_TRUE(countries.size() > 200);
191 }
192 
193 /**
194  * @tc.name: LocaleConfigFuncTest008
195  * @tc.desc: Test LocaleConfig GetDisplayLanguage
196  * @tc.type: FUNC
197  */
198 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest008, TestSize.Level1)
199 {
200     std::string languageTag = "pt";
201     std::string localeTag = "en-US";
202     std::string displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
203     EXPECT_EQ(displayName, "Portuguese");
204 
205     displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, false);
206     EXPECT_EQ(displayName, "Portuguese");
207 
208     std::string fakeLocaleTag = "FakeLocaleTag";
209     displayName = LocaleConfig::GetDisplayLanguage(languageTag, fakeLocaleTag, true);
210     EXPECT_EQ(displayName, "");
211 
212     std::string fakeLanguageTag = "FakeLanguageTag";
213     displayName = LocaleConfig::GetDisplayLanguage(fakeLanguageTag, localeTag, true);
214     EXPECT_EQ(displayName, "");
215 
216     languageTag = "zh-Hans-CN";
217     localeTag = "en-US";
218     displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, false);
219     EXPECT_EQ(displayName, "Simplified Chinese");
220 
221     displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
222     EXPECT_EQ(displayName, "Simplified Chinese");
223 
224     displayName = LocaleConfig::GetDisplayLanguage(languageTag, fakeLocaleTag, false);
225     EXPECT_EQ(displayName, "");
226 
227     languageTag = "pt-Latn-BR";
228     displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, false);
229     EXPECT_EQ(displayName, "Portuguese (Brazil)");
230 
231     displayName = LocaleConfig::GetDisplayLanguage(languageTag, fakeLocaleTag, false);
232     EXPECT_EQ(displayName, "");
233 
234     languageTag = "zh";
235     displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
236     EXPECT_EQ(displayName, "Chinese");
237 
238     localeTag = "en-Hans";
239     displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
240     EXPECT_EQ(displayName, "Chinese");
241 
242     languageTag = "zh-Hans";
243     localeTag = "en-US";
244     displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
245     EXPECT_EQ(displayName, "Simplified Chinese");
246 
247     languageTag = "ro-MD";
248     displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
249     EXPECT_EQ(displayName, "Moldavian");
250 }
251 
252 /**
253  * @tc.name: LocaleConfigFuncTest009
254  * @tc.desc: Test LocaleConfig GetDisplayRegion
255  * @tc.type: FUNC
256  */
257 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest009, TestSize.Level1)
258 {
259     std::string regionTag = "JP";
260     std::string localeTag = "zh-Hans-CN";
261     std::string displayName = LocaleConfig::GetDisplayRegion(regionTag, localeTag, false);
262     EXPECT_EQ(displayName, "日本");
263 
264     std::string fakeRegionTag = "XX";
265     displayName = LocaleConfig::GetDisplayRegion(fakeRegionTag, localeTag, false);
266     EXPECT_EQ(displayName, "XX");
267 
268     std::string fakeLocaleTag = "FakeLocaleTag";
269     displayName = LocaleConfig::GetDisplayRegion(regionTag, fakeLocaleTag, false);
270     EXPECT_EQ(displayName, "");
271 
272     localeTag = "en-Latn-US";
273     displayName = LocaleConfig::GetDisplayRegion(regionTag, localeTag, false);
274     EXPECT_EQ(displayName, "Japan");
275 
276     regionTag = "zh-Hans-CN";
277     displayName = LocaleConfig::GetDisplayRegion(regionTag, localeTag, false);
278     EXPECT_EQ(displayName, "China");
279 
280     regionTag = "HK";
281     displayName = LocaleConfig::GetDisplayRegion(regionTag, localeTag, false);
282     EXPECT_EQ(displayName, "Hong Kong (China)");
283 }
284 
285 /**
286  * @tc.name: LocaleConfigFuncTest010
287  * @tc.desc: Test LocaleConfig GetDisplayLanguage
288  * @tc.type: FUNC
289  */
290 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest010, TestSize.Level1)
291 {
292     std::string languageTag = "zh-Hant-HK";
293     std::string localeTag = "zh-Hant";
294     std::string displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
295     EXPECT_EQ(displayName, "繁體中文(中國香港)");
296 
297     languageTag = "zh-Hant-HK";
298     localeTag = "zh-Hans";
299     displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
300     EXPECT_EQ(displayName, "繁体中文(中国香港)");
301 
302     languageTag = "zh-Hant-HK";
303     localeTag = "en-US";
304     displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
305     EXPECT_EQ(displayName, "Traditional Chinese(Hong Kong, China)");
306 }
307 
308 /**
309  * @tc.name: LocaleConfigFuncTest011
310  * @tc.desc: Test LocaleConfig GetDisplayRegion
311  * @tc.type: FUNC
312  */
313 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest011, TestSize.Level1)
314 {
315     EXPECT_EQ(LocaleConfig::GetDisplayRegion("zh", "en-US", true), "");
316     EXPECT_EQ(LocaleConfig::GetDisplayRegion("zh-Hans-CN", "en-US", true), "China");
317 }
318 
319 /**
320  * @tc.name: LocaleConfigFuncTest012
321  * @tc.desc: Test LocaleConfig GetDisplayRegion
322  * @tc.type: FUNC
323  */
324 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest012, TestSize.Level1)
325 {
326     EXPECT_EQ(LocaleConfig::GetDisplayRegion("zh-Hans", "en-US", true), "");
327 }
328 
329 /**
330  * @tc.name: LocaleConfigFuncTest013
331  * @tc.desc: Test LocaleConfig LocalDigit
332  * @tc.type: FUNC
333  */
334 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest013, TestSize.Level1)
335 {
336     bool current = LocaleConfig::GetUsingLocalDigit();
337     I18nErrorCode status = LocaleConfig::SetUsingLocalDigit(true);
338     EXPECT_EQ(status, I18nErrorCode::UPDATE_LOCAL_DIGIT_FAILED);
339     current = LocaleConfig::GetUsingLocalDigit();
340     EXPECT_FALSE(current);
341 }
342 
343 /**
344  * @tc.name: LocaleConfigFuncTest014
345  * @tc.desc: Test LocaleConfig 24 hour clock
346  * @tc.type: FUNC
347  */
348 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest014, TestSize.Level1)
349 {
350     bool current = LocaleConfig::Is24HourClock();
351     I18nErrorCode status = LocaleConfig::Set24HourClock("true");
352     EXPECT_EQ(status, I18nErrorCode::SUCCESS);
353     current = LocaleConfig::Is24HourClock();
354     EXPECT_TRUE(current);
355     status = LocaleConfig::Set24HourClock("abc");
356     EXPECT_EQ(status, I18nErrorCode::INVALID_24_HOUR_CLOCK_TAG);
357     LocaleConfig::Set24HourClock("");
358     LocaleConfig::Set24HourClock("false");
359 }
360 
361 /**
362  * @tc.name: LocaleConfigFuncTest015
363  * @tc.desc: Test LocaleConfig valid locales
364  * @tc.type: FUNC
365  */
366 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest015, TestSize.Level1)
367 {
368     string localeTag = "zh";
369     string validLocaleTag = LocaleConfig::GetValidLocale(localeTag);
370     EXPECT_EQ(validLocaleTag, "zh");
371 
372     localeTag = "zh-u-hc-h12-nu-latn-ca-chinese-co-pinyin-kf-upper-kn-true";
373     validLocaleTag = LocaleConfig::GetValidLocale(localeTag);
374     EXPECT_EQ(validLocaleTag, "zh-u-ca-chinese-co-pinyin-kn-true-kf-upper-nu-latn-hc-h12");
375 }
376 
377 /**
378  * @tc.name: LocaleConfigFuncTest016
379  * @tc.desc: Test LocaleConfig isRTL
380  * @tc.type: FUNC
381  */
382 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest016, TestSize.Level1)
383 {
384     string localeTag = "zh";
385     bool isRTL = LocaleConfig::IsRTL(localeTag);
386     EXPECT_TRUE(!isRTL);
387     localeTag = "ar";
388     isRTL = LocaleConfig::IsRTL(localeTag);
389     EXPECT_TRUE(isRTL);
390 }
391 
392 /**
393  * @tc.name: LocaleConfigFuncTest017
394  * @tc.desc: Test LocaleConfig isSuggested
395  * @tc.type: FUNC
396  */
397 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest017, TestSize.Level1)
398 {
399     string language = "zh";
400     bool isSuggested = LocaleConfig::IsSuggested(language);
401     EXPECT_TRUE(isSuggested);
402     string region = "CN";
403     isSuggested = LocaleConfig::IsSuggested(language, region);
404     EXPECT_TRUE(isSuggested);
405     std::string fakeLanguage = "FakeLanguage";
406     isSuggested = LocaleConfig::IsSuggested(fakeLanguage);
407     EXPECT_FALSE(isSuggested);
408 }
409 
410 /**
411  * @tc.name: LocaleConfigFuncTest018
412  * @tc.desc: Test LocaleCOnfig systemRegion
413  * @tc.type: FUNC
414  */
415 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest018, TestSize.Level1)
416 {
417     string currentRegion = LocaleConfig::GetSystemRegion();
418     EXPECT_TRUE(currentRegion.length() > 0);
419     string region = "CN";
420     I18nErrorCode status = LocaleConfig::SetSystemRegion(region);
421     EXPECT_EQ(status, I18nErrorCode::SUCCESS);
422     currentRegion = LocaleConfig::GetSystemRegion();
423     EXPECT_EQ(currentRegion, region);
424 }
425 
426 /**
427  * @tc.name: LocaleConfigFuncTest019
428  * @tc.desc: Test LocaleCOnfig systemLocale
429  * @tc.type: FUNC
430  */
431 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest019, TestSize.Level1)
432 {
433     string currentLocale = LocaleConfig::GetSystemLocale();
434     EXPECT_TRUE(currentLocale.length() > 0);
435     string locale = "zh-Hans-CN";
436     I18nErrorCode status = LocaleConfig::SetSystemLocale(locale);
437     EXPECT_EQ(status, I18nErrorCode::SUCCESS);
438     currentLocale = LocaleConfig::GetSystemLocale();
439     EXPECT_EQ(currentLocale, locale);
440 }
441 
442 /**
443  * @tc.name: LocaleConfigFuncTest020
444  * @tc.desc: Test LocaleConfig systemLanguages
445  * @tc.type: FUNC
446  */
447 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest020, TestSize.Level1)
448 {
449     std::unordered_set<std::string> languages = LocaleConfig::GetSystemLanguages();
450     EXPECT_TRUE(languages.size() > 2);
451     LocaleConfig::SetSystemLocale("ur-Latn-PK");
452     LocaleConfig::SetUsingLocalDigit(true);
453     LocaleConfig::SetUsingLocalDigit(false);
454 }
455 
456 /**
457  * @tc.name: LocaleConfigFuncTest021
458  * @tc.desc: Test LocaleConfig IsValidLanguage
459  * @tc.type: FUNC
460  */
461 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest021, TestSize.Level1)
462 {
463     const string language = "zh";
464     const string fakeLanguage = "010";
465     const string tag = "zh-Hans";
466     const string fakeTag = "13-Hans";
467     bool flag = LocaleConfig::IsValidLanguage(language);
468     EXPECT_TRUE(flag);
469     flag = LocaleConfig::IsValidLanguage(fakeLanguage);
470     EXPECT_TRUE(!flag);
471     flag = LocaleConfig::IsValidTag(tag);
472     EXPECT_TRUE(flag);
473     flag = LocaleConfig::IsValidTag(fakeTag);
474     EXPECT_TRUE(!flag);
475     EXPECT_FALSE(LocaleConfig::IsValidTag(""));
476 }
477 
478 /**
479  * @tc.name: LocaleConfigFuncTest022
480  * @tc.desc: Test LocaleConfig GetSimplifiedSystemLanguage
481  * @tc.type: FUNC
482  */
483 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest022, TestSize.Level1)
484 {
485     for (auto index = 0; index < LocaleConfigTest::languageAndRegion.size(); ++index) {
486         LocaleConfig::SetSystemLanguage(languageAndRegion[index].first);
487         LocaleConfig::SetSystemRegion(languageAndRegion[index].second);
488         std::string ret = LocaleConfig::GetSimplifiedSystemLanguage();
489         EXPECT_EQ(ret, LocaleConfigTest::simplifiedLanguage[index]);
490     }
491 }
492 } // namespace I18n
493 } // namespace Global
494 } // namespace OHOS