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 "locale_config_ext.h"
20 #include "unicode/locid.h"
21 #include "parameter.h"
22
23 using namespace OHOS::Global::I18n;
24 using testing::ext::TestSize;
25 using namespace std;
26
27 namespace OHOS {
28 namespace Global {
29 namespace I18n {
30 class LocaleConfigTest : public testing::Test {
31 public:
32 static string originalLanguage;
33 static string originalRegion;
34 static string originalLocale;
35 static void SetUpTestCase(void);
36 static void TearDownTestCase(void);
37 void SetUp();
38 void TearDown();
39
40 static std::vector<std::pair<std::string, std::string>> languageAndRegion;
41 static std::vector<std::string> simplifiedLanguage;
42 };
43
44 string LocaleConfigTest::originalLanguage;
45 string LocaleConfigTest::originalRegion;
46 string LocaleConfigTest::originalLocale;
47
48 std::vector<std::pair<std::string, std::string>> LocaleConfigTest::languageAndRegion {
49 { "zh-Hans", "CN" }, { "zh-Hant", "HK" }, { "zh-Hant", "TW" }, { "en-Latn-US", "US" }, { "en-Latn-US", "GB" },
50 { "bo", "CN" }, { "ug", "CN" }, { "am", "CN" }, { "ar", "CN" }, { "as", "CN" }, { "az-Latn", "IR" },
51 { "be", "CN" }, { "bg", "CN" }, { "bn", "CN" }, { "bs-Latn", "CN" }, { "ca", "CN" }, { "cs", "CN" },
52 { "da", "CN" }, { "de", "CN" }, { "el", "CN" }, { "es-ES", "US" }, { "es-US", "ES" }, { "et", "CN" },
53 { "eu", "CN" }, { "fa", "IR" }, { "fi", "CN" }, { "tl", "CN" }, { "fr", "CN" }, { "jv-Latn", "CN" },
54 { "mai", "CN" }, { "mn-Cyrl", "CN" }, { "uz-Latn", "CN" }
55 };
56
57 std::vector<std::string> LocaleConfigTest::simplifiedLanguage {
58 "zh-Hans", "zh-Hant-HK", "zh-Hant", "en", "en-GB", "bo", "ug", "am", "ar", "as", "az-Latn", "be", "bg", "bn",
59 "bs-Latn", "ca", "cs", "da", "de", "el", "es", "es-US", "et", "eu", "fa", "fi", "tl", "fr", "jv-Latn", "mai",
60 "mn-Cyrl", "uz-Latn"
61 };
62
SetUpTestCase(void)63 void LocaleConfigTest::SetUpTestCase(void)
64 {
65 originalLanguage = LocaleConfig::GetSystemLanguage();
66 originalRegion = LocaleConfig::GetSystemRegion();
67 originalLocale = LocaleConfig::GetSystemLocale();
68 LocaleConfig::SetSystemLanguage("zh-Hans");
69 LocaleConfig::SetSystemRegion("CN");
70 LocaleConfig::SetSystemLocale("zh-Hans-CN");
71 }
72
TearDownTestCase(void)73 void LocaleConfigTest::TearDownTestCase(void)
74 {
75 LocaleConfig::SetSystemLanguage(originalLanguage);
76 LocaleConfig::SetSystemRegion(originalRegion);
77 LocaleConfig::SetSystemLocale(originalLocale);
78 }
79
SetUp(void)80 void LocaleConfigTest::SetUp(void)
81 {}
82
TearDown(void)83 void LocaleConfigTest::TearDown(void)
84 {}
85
86 /**
87 * @tc.name: LocaleConfigFuncTest001
88 * @tc.desc: Test LocaleConfig GetSystemLanguage default
89 * @tc.type: FUNC
90 */
91 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest001, TestSize.Level1)
92 {
93 int ret = SetParameter("hm.sys.language", "");
94 if (!ret) {
95 EXPECT_EQ(LocaleConfig::GetSystemLanguage(), "zh-Hans");
96 }
97 }
98
99 /**
100 * @tc.name: LocaleConfigFuncTest002
101 * @tc.desc: Test LocaleConfig GetSystemRegion default.
102 * @tc.type: FUNC
103 */
104 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest002, TestSize.Level1)
105 {
106 int ret = SetParameter("hm.sys.locale", "");
107 if (!ret) {
108 EXPECT_EQ(LocaleConfig::GetSystemRegion(), "CN");
109 }
110 }
111
112 /**
113 * @tc.name: LocaleConfigFuncTest003
114 * @tc.desc: Test LocaleConfig GetSystemLocale default
115 * @tc.type: FUNC
116 */
117 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest003, TestSize.Level1)
118 {
119 int ret = SetParameter("hm.sys.locale", "");
120 if (!ret) {
121 EXPECT_EQ(LocaleConfig::GetSystemLocale(), "zh-Hans-CN");
122 }
123 }
124
125 /**
126 * @tc.name: LocaleConfigFuncTest004
127 * @tc.desc: Test LocaleConfig SetSystemLanguage
128 * @tc.type: FUNC
129 */
130 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest004, TestSize.Level1)
131 {
132 string language = "pt-PT";
133 I18nErrorCode status = LocaleConfig::SetSystemLanguage(language);
134 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
135 LocaleConfig::SetSystemLanguage("zh-Hans");
136 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
137 LocaleConfig::SetSystemLanguage("%$=");
138 }
139
140 /**
141 * @tc.name: LocaleConfigFuncTest005
142 * @tc.desc: Test LocaleConfig SetSystemLocale
143 * @tc.type: FUNC
144 */
145 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest005, TestSize.Level1)
146 {
147 string locale = "zh-Hant-TW";
148 I18nErrorCode status = LocaleConfig::SetSystemLocale(locale);
149 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
150 status = LocaleConfig::SetSystemLocale("zh-Hans-CN");
151 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
152 }
153
154 /**
155 * @tc.name: LocaleConfigFuncTest006
156 * @tc.desc: Test LocaleConfig SetSystemRegion
157 * @tc.type: FUNC
158 */
159 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest006, TestSize.Level1)
160 {
161 string locale = "zh-Hant-TW";
162 I18nErrorCode status = LocaleConfig::SetSystemLocale(locale);
163 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
164 status = LocaleConfig::SetSystemRegion("HK");
165 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
166 status = LocaleConfig::SetSystemLocale("zh-Hans-CN");
167 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
168 status = LocaleConfig::SetSystemRegion("@*%");
169 EXPECT_EQ(status, I18nErrorCode::INVALID_REGION_TAG);
170 status = LocaleConfig::SetSystemLocale("zh-Hans-CN", 2);
171 EXPECT_NE(status, I18nErrorCode::SUCCESS);
172 status = LocaleConfig::SetSystemLocale("zh-Hans-CN", 2);
173 EXPECT_NE(status, I18nErrorCode::SUCCESS);
174 status = LocaleConfig::SetSystemLocale("ar-EG");
175 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
176 EXPECT_FALSE(LocaleConfig::GetUsingLocalDigit());
177 status = LocaleConfig::SetSystemLocale("$$@");
178 EXPECT_NE(status, I18nErrorCode::SUCCESS);
179 status = LocaleConfig::SetSystemLocale("zh-Hans-CN");
180 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
181 }
182
183 /**
184 * @tc.name: LocaleConfigFuncTest007
185 * @tc.desc: Test LocaleConfig GetSystemCountries
186 * @tc.type: FUNC
187 */
188 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest007, TestSize.Level1)
189 {
190 std::unordered_set<std::string> countries = LocaleConfig::GetSystemCountries("zh");
191 EXPECT_TRUE(countries.size() > 200);
192 }
193
194 /**
195 * @tc.name: LocaleConfigFuncTest008
196 * @tc.desc: Test LocaleConfig GetDisplayLanguage
197 * @tc.type: FUNC
198 */
199 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest008, TestSize.Level1)
200 {
201 std::string languageTag = "pt";
202 std::string localeTag = "en-US";
203 std::string displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
204 EXPECT_EQ(displayName, "Portuguese");
205
206 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, false);
207 EXPECT_EQ(displayName, "Portuguese");
208
209 std::string fakeLocaleTag = "FakeLocaleTag";
210 displayName = LocaleConfig::GetDisplayLanguage(languageTag, fakeLocaleTag, true);
211 EXPECT_EQ(displayName, "");
212
213 std::string fakeLanguageTag = "FakeLanguageTag";
214 displayName = LocaleConfig::GetDisplayLanguage(fakeLanguageTag, localeTag, true);
215 EXPECT_EQ(displayName, "");
216
217 languageTag = "zh-Hans-CN";
218 localeTag = "en-US";
219 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, false);
220 EXPECT_EQ(displayName, "Simplified Chinese");
221
222 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
223 EXPECT_EQ(displayName, "Simplified Chinese");
224
225 displayName = LocaleConfig::GetDisplayLanguage(languageTag, fakeLocaleTag, false);
226 EXPECT_EQ(displayName, "");
227
228 languageTag = "pt-Latn-BR";
229 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, false);
230 EXPECT_EQ(displayName, "Portuguese (Brazil)");
231
232 displayName = LocaleConfig::GetDisplayLanguage(languageTag, fakeLocaleTag, false);
233 EXPECT_EQ(displayName, "");
234
235 languageTag = "zh";
236 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
237 EXPECT_EQ(displayName, "Chinese");
238
239 localeTag = "en-Hans";
240 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
241 EXPECT_EQ(displayName, "Chinese");
242
243 languageTag = "zh-Hans";
244 localeTag = "en-US";
245 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
246 EXPECT_EQ(displayName, "Simplified Chinese");
247
248 languageTag = "ro-MD";
249 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
250 EXPECT_EQ(displayName, "Moldavian");
251 }
252
253 /**
254 * @tc.name: LocaleConfigFuncTest009
255 * @tc.desc: Test LocaleConfig GetDisplayRegion
256 * @tc.type: FUNC
257 */
258 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest009, TestSize.Level1)
259 {
260 std::string regionTag = "JP";
261 std::string localeTag = "zh-Hans-CN";
262 std::string displayName = LocaleConfig::GetDisplayRegion(regionTag, localeTag, false);
263 EXPECT_EQ(displayName, "日本");
264
265 std::string fakeRegionTag = "XX";
266 displayName = LocaleConfig::GetDisplayRegion(fakeRegionTag, localeTag, false);
267 EXPECT_EQ(displayName, "XX");
268
269 std::string fakeLocaleTag = "FakeLocaleTag";
270 displayName = LocaleConfig::GetDisplayRegion(regionTag, fakeLocaleTag, false);
271 EXPECT_EQ(displayName, "");
272
273 localeTag = "en-Latn-US";
274 displayName = LocaleConfig::GetDisplayRegion(regionTag, localeTag, false);
275 EXPECT_EQ(displayName, "Japan");
276
277 regionTag = "zh-Hans-CN";
278 displayName = LocaleConfig::GetDisplayRegion(regionTag, localeTag, false);
279 EXPECT_EQ(displayName, "China");
280
281 regionTag = "HK";
282 displayName = LocaleConfig::GetDisplayRegion(regionTag, localeTag, false);
283 EXPECT_EQ(displayName, "Hong Kong (China)");
284 }
285
286 /**
287 * @tc.name: LocaleConfigFuncTest010
288 * @tc.desc: Test LocaleConfig GetDisplayLanguage
289 * @tc.type: FUNC
290 */
291 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest010, TestSize.Level1)
292 {
293 std::string languageTag = "zh-Hant-HK";
294 std::string localeTag = "zh-Hant";
295 std::string displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
296 EXPECT_EQ(displayName, "繁體中文(中國香港)");
297
298 languageTag = "zh-Hant-HK";
299 localeTag = "zh-Hans";
300 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
301 EXPECT_EQ(displayName, "繁体中文(中国香港)");
302
303 languageTag = "zh-Hant-HK";
304 localeTag = "en-US";
305 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
306 EXPECT_EQ(displayName, "Traditional Chinese(Hong Kong, China)");
307 }
308
309 /**
310 * @tc.name: LocaleConfigFuncTest011
311 * @tc.desc: Test LocaleConfig GetDisplayRegion
312 * @tc.type: FUNC
313 */
314 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest011, TestSize.Level1)
315 {
316 EXPECT_EQ(LocaleConfig::GetDisplayRegion("zh", "en-US", true), "");
317 EXPECT_EQ(LocaleConfig::GetDisplayRegion("zh-Hans-CN", "en-US", true), "China");
318 }
319
320 /**
321 * @tc.name: LocaleConfigFuncTest012
322 * @tc.desc: Test LocaleConfig GetDisplayRegion
323 * @tc.type: FUNC
324 */
325 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest012, TestSize.Level1)
326 {
327 EXPECT_EQ(LocaleConfig::GetDisplayRegion("zh-Hans", "en-US", true), "");
328 }
329
330 /**
331 * @tc.name: LocaleConfigFuncTest013
332 * @tc.desc: Test LocaleConfig LocalDigit
333 * @tc.type: FUNC
334 */
335 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest013, TestSize.Level1)
336 {
337 bool current = LocaleConfig::GetUsingLocalDigit();
338 I18nErrorCode status = LocaleConfig::SetUsingLocalDigit(true);
339 EXPECT_EQ(status, I18nErrorCode::UPDATE_LOCAL_DIGIT_FAILED);
340 current = LocaleConfig::GetUsingLocalDigit();
341 EXPECT_FALSE(current);
342 }
343
344 /**
345 * @tc.name: LocaleConfigFuncTest014
346 * @tc.desc: Test LocaleConfig 24 hour clock
347 * @tc.type: FUNC
348 */
349 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest014, TestSize.Level1)
350 {
351 bool current = LocaleConfig::Is24HourClock();
352 I18nErrorCode status = LocaleConfig::Set24HourClock("true");
353 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
354 current = LocaleConfig::Is24HourClock();
355 EXPECT_TRUE(current);
356 status = LocaleConfig::Set24HourClock("abc");
357 EXPECT_EQ(status, I18nErrorCode::INVALID_24_HOUR_CLOCK_TAG);
358 LocaleConfig::Set24HourClock("");
359 LocaleConfig::Set24HourClock("false");
360 }
361
362 /**
363 * @tc.name: LocaleConfigFuncTest015
364 * @tc.desc: Test LocaleConfig valid locales
365 * @tc.type: FUNC
366 */
367 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest015, TestSize.Level1)
368 {
369 string localeTag = "zh";
370 string validLocaleTag = LocaleConfig::GetValidLocale(localeTag);
371 EXPECT_EQ(validLocaleTag, "zh");
372
373 localeTag = "zh-u-hc-h12-nu-latn-ca-chinese-co-pinyin-kf-upper-kn-true";
374 validLocaleTag = LocaleConfig::GetValidLocale(localeTag);
375 EXPECT_EQ(validLocaleTag, "zh-u-ca-chinese-co-pinyin-kn-true-kf-upper-nu-latn-hc-h12");
376 }
377
378 /**
379 * @tc.name: LocaleConfigFuncTest016
380 * @tc.desc: Test LocaleConfig isRTL
381 * @tc.type: FUNC
382 */
383 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest016, TestSize.Level1)
384 {
385 string localeTag = "zh";
386 bool isRTL = LocaleConfig::IsRTL(localeTag);
387 EXPECT_TRUE(!isRTL);
388 localeTag = "ar";
389 isRTL = LocaleConfig::IsRTL(localeTag);
390 EXPECT_TRUE(isRTL);
391 }
392
393 /**
394 * @tc.name: LocaleConfigFuncTest017
395 * @tc.desc: Test LocaleConfig isSuggested
396 * @tc.type: FUNC
397 */
398 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest017, TestSize.Level1)
399 {
400 string language = "zh";
401 bool isSuggested = LocaleConfig::IsSuggested(language);
402 EXPECT_TRUE(isSuggested);
403 string region = "CN";
404 isSuggested = LocaleConfig::IsSuggested(language, region);
405 EXPECT_TRUE(isSuggested);
406 std::string fakeLanguage = "FakeLanguage";
407 isSuggested = LocaleConfig::IsSuggested(fakeLanguage);
408 EXPECT_FALSE(isSuggested);
409 }
410
411 /**
412 * @tc.name: LocaleConfigFuncTest018
413 * @tc.desc: Test LocaleCOnfig systemRegion
414 * @tc.type: FUNC
415 */
416 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest018, TestSize.Level1)
417 {
418 string currentRegion = LocaleConfig::GetSystemRegion();
419 EXPECT_TRUE(currentRegion.length() > 0);
420 string region = "CN";
421 I18nErrorCode status = LocaleConfig::SetSystemRegion(region);
422 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
423 currentRegion = LocaleConfig::GetSystemRegion();
424 EXPECT_EQ(currentRegion, region);
425 }
426
427 /**
428 * @tc.name: LocaleConfigFuncTest019
429 * @tc.desc: Test LocaleCOnfig systemLocale
430 * @tc.type: FUNC
431 */
432 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest019, TestSize.Level1)
433 {
434 string currentLocale = LocaleConfig::GetSystemLocale();
435 EXPECT_TRUE(currentLocale.length() > 0);
436 string locale = "zh-Hans-CN";
437 I18nErrorCode status = LocaleConfig::SetSystemLocale(locale);
438 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
439 currentLocale = LocaleConfig::GetSystemLocale();
440 EXPECT_EQ(currentLocale, locale);
441 }
442
443 /**
444 * @tc.name: LocaleConfigFuncTest020
445 * @tc.desc: Test LocaleConfig systemLanguages
446 * @tc.type: FUNC
447 */
448 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest020, TestSize.Level1)
449 {
450 std::unordered_set<std::string> languages = LocaleConfig::GetSystemLanguages();
451 EXPECT_TRUE(languages.size() > 2);
452 LocaleConfig::SetSystemLocale("ur-Latn-PK");
453 LocaleConfig::SetUsingLocalDigit(true);
454 LocaleConfig::SetUsingLocalDigit(false);
455 }
456
457 /**
458 * @tc.name: LocaleConfigFuncTest021
459 * @tc.desc: Test LocaleConfig IsValidLanguage
460 * @tc.type: FUNC
461 */
462 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest021, TestSize.Level1)
463 {
464 const string language = "zh";
465 const string fakeLanguage = "010";
466 const string tag = "zh-Hans";
467 const string fakeTag = "13-Hans";
468 bool flag = LocaleConfig::IsValidLanguage(language);
469 EXPECT_TRUE(flag);
470 flag = LocaleConfig::IsValidLanguage(fakeLanguage);
471 EXPECT_TRUE(!flag);
472 flag = LocaleConfig::IsValidTag(tag);
473 EXPECT_TRUE(flag);
474 flag = LocaleConfig::IsValidTag(fakeTag);
475 EXPECT_TRUE(!flag);
476 EXPECT_FALSE(LocaleConfig::IsValidTag(""));
477 icu::Locale locale = LocaleConfigExt::GetIcuLocale(tag);
478 EXPECT_EQ(locale.getLanguage(), language);
479 }
480
481 /**
482 * @tc.name: LocaleConfigFuncTest022
483 * @tc.desc: Test LocaleConfig GetSimplifiedSystemLanguage
484 * @tc.type: FUNC
485 */
486 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest022, TestSize.Level1)
487 {
488 for (auto index = 0; index < LocaleConfigTest::languageAndRegion.size(); ++index) {
489 LocaleConfig::SetSystemLanguage(languageAndRegion[index].first);
490 LocaleConfig::SetSystemRegion(languageAndRegion[index].second);
491 std::string ret = LocaleConfig::GetSimplifiedSystemLanguage();
492 EXPECT_EQ(ret, LocaleConfigTest::simplifiedLanguage[index]);
493 }
494 }
495
496 /**
497 * @tc.name: LocaleConfigFuncTest023
498 * @tc.desc: Test LocaleConfig GetEffectiveLanguage and GetEffectiveLocale
499 * @tc.type: FUNC
500 */
501 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest023, TestSize.Level1)
502 {
503 std::string systemLanguage = LocaleConfig::GetSystemLanguage();
504 std::string systemLocale = LocaleConfig::GetSystemLocale();
505 std::string language = "zh-Hans";
506 std::string locale = "zh-Hans-CN-u-mu-celsius";
507 LocaleConfig::SetSystemLanguage(language);
508 LocaleConfig::SetSystemLocale(locale);
509 std::string effectiveLanguage = LocaleConfig::GetEffectiveLanguage();
510 std::string effectiveLocale = LocaleConfig::GetEffectiveLocale();
511 std::string systemHour = LocaleConfig::GetSystemHour();
512 EXPECT_EQ(systemHour, "false");
513 EXPECT_EQ(effectiveLanguage, "zh-Hans-CN");
514 EXPECT_EQ(effectiveLocale, "zh-Hans-CN-u-mu-celsius");
515 LocaleConfig::SetSystemLanguage(systemLanguage);
516 LocaleConfig::SetSystemLocale(systemLocale);
517 }
518
519 /**
520 * @tc.name: LocaleConfigFuncTest024
521 * @tc.desc: Test LocaleConfig Collations
522 * @tc.type: FUNC
523 */
524 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest024, TestSize.Level1)
525 {
526 std::string systemLanguage = LocaleConfig::GetSystemLanguage();
527 std::string systemLocale = LocaleConfig::GetSystemLocale();
528 LocaleConfig::SetSystemLanguage("zh-Hant");
529 LocaleConfig::SetSystemRegion("HK");
530 std::unordered_map<std::string, std::string> systemCollations;
531 I18nErrorCode errCode = LocaleConfig::GetSystemCollations(systemCollations);
532 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
533 EXPECT_TRUE(systemCollations.find("pinyin") != systemCollations.end());
534 EXPECT_TRUE(systemCollations.find("stroke") != systemCollations.end());
535 EXPECT_TRUE(systemCollations.find("zhuyin") != systemCollations.end());
536
537 std::string usingCollation;
538 errCode = LocaleConfig::GetUsingCollation(usingCollation);
539 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
540 EXPECT_EQ(usingCollation, "stroke");
541 std::string systemLocaleInstanceTag = LocaleConfig::GetSystemLocaleInstanceTag();
542 EXPECT_EQ(systemLocaleInstanceTag, "zh-Hant-HK");
543
544 LocaleConfig::SetSystemLanguage("en-Latn-US");
545 errCode = LocaleConfig::GetSystemCollations(systemCollations);
546 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
547 EXPECT_TRUE(systemCollations.find("lower") != systemCollations.end());
548 EXPECT_TRUE(systemCollations.find("upper") != systemCollations.end());
549 errCode = LocaleConfig::GetUsingCollation(usingCollation);
550 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
551 EXPECT_EQ(usingCollation, "lower");
552 systemLocaleInstanceTag = LocaleConfig::GetSystemLocaleInstanceTag();
553 EXPECT_EQ(systemLocaleInstanceTag, "en-Latn-HK");
554
555 LocaleConfig::SetSystemLanguage("zh-Hans");
556 errCode = LocaleConfig::GetSystemCollations(systemCollations);
557 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
558 EXPECT_EQ(systemCollations.size(), 0);
559 errCode = LocaleConfig::GetUsingCollation(usingCollation);
560 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
561 EXPECT_EQ(usingCollation, "");
562 systemLocaleInstanceTag = LocaleConfig::GetSystemLocaleInstanceTag();
563 EXPECT_EQ(systemLocaleInstanceTag, "zh-Hans-HK");
564 LocaleConfig::SetSystemLanguage(systemLanguage);
565 LocaleConfig::SetSystemLocale(systemLocale);
566 }
567
568 /**
569 * @tc.name: LocaleConfigFuncTest025
570 * @tc.desc: Test LocaleConfig Collations
571 * @tc.type: FUNC
572 */
573 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest025, TestSize.Level1)
574 {
575 std::string systemLanguage = LocaleConfig::GetSystemLanguage();
576 std::string systemLocale = LocaleConfig::GetSystemLocale();
577 LocaleConfig::SetSystemLanguage("zh-Hans");
578 LocaleConfig::SetSystemRegion("HK");
579 I18nErrorCode errCode = LocaleConfig::SetSystemCollation("upper");
580 EXPECT_EQ(errCode, I18nErrorCode::INVALID_PARAM);
581 std::string systemLocaleInstanceTag = LocaleConfig::GetSystemLocaleInstanceTag();
582 EXPECT_EQ(systemLocaleInstanceTag, "zh-Hans-HK");
583
584 LocaleConfig::SetSystemLanguage("zh-Hant");
585 errCode = LocaleConfig::SetSystemCollation("upper");
586 EXPECT_EQ(errCode, I18nErrorCode::INVALID_PARAM);
587 systemLocaleInstanceTag = LocaleConfig::GetSystemLocaleInstanceTag();
588 EXPECT_EQ(systemLocaleInstanceTag, "zh-Hant-HK");
589
590 errCode = LocaleConfig::SetSystemCollation("pinyin");
591 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
592 systemLocaleInstanceTag = LocaleConfig::GetSystemLocaleInstanceTag();
593 EXPECT_EQ(systemLocaleInstanceTag, "zh-Hant-HK-u-co-pinyin");
594 LocaleConfig::SetSystemLanguage(systemLanguage);
595 LocaleConfig::SetSystemLocale(systemLocale);
596 }
597
598 /**
599 * @tc.name: LocaleConfigFuncTest026
600 * @tc.desc: Test LocaleConfig numbering system
601 * @tc.type: FUNC
602 */
603 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest026, TestSize.Level1)
604 {
605 std::string systemLanguage = LocaleConfig::GetSystemLanguage();
606 std::string systemLocale = LocaleConfig::GetSystemLocale();
607 LocaleConfig::SetSystemLanguage("ur");
608 LocaleConfig::SetSystemLocale("ur-CN");
609 std::unordered_map<std::string, std::string> systemNumberingSystems;
610 I18nErrorCode errCode = LocaleConfig::GetSystemNumberingSystems(systemNumberingSystems);
611 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
612 EXPECT_TRUE(systemNumberingSystems.find("arabext") != systemNumberingSystems.end());
613 EXPECT_TRUE(systemNumberingSystems.find("latn") != systemNumberingSystems.end());
614
615 std::string usingNumberingSystem;
616 errCode = LocaleConfig::GetUsingNumberingSystem(usingNumberingSystem);
617 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
618 EXPECT_EQ(usingNumberingSystem, "latn");
619 std::string systemLocaleInstanceTag = LocaleConfig::GetSystemLocaleInstanceTag();
620 EXPECT_EQ(systemLocaleInstanceTag, "ur-CN");
621
622 errCode = LocaleConfig::SetSystemNumberingSystem("latn");
623 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
624 errCode = LocaleConfig::GetUsingNumberingSystem(usingNumberingSystem);
625 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
626 EXPECT_EQ(usingNumberingSystem, "latn");
627 systemLocaleInstanceTag = LocaleConfig::GetSystemLocaleInstanceTag();
628 EXPECT_EQ(systemLocaleInstanceTag, "ur-CN-u-nu-latn");
629
630 errCode = LocaleConfig::SetSystemNumberingSystem("arab");
631 EXPECT_EQ(errCode, I18nErrorCode::INVALID_PARAM);
632
633 LocaleConfig::SetSystemLanguage(systemLanguage);
634 LocaleConfig::SetSystemLocale(systemLocale);
635 }
636
637 /**
638 * @tc.name: LocaleConfigFuncTest027
639 * @tc.desc: Test LocaleConfig number pattern
640 * @tc.type: FUNC
641 */
642 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest027, TestSize.Level1)
643 {
644 std::string systemLanguage = LocaleConfig::GetSystemLanguage();
645 std::string systemLocale = LocaleConfig::GetSystemLocale();
646 LocaleConfig::SetSystemLanguage("zh-Hans");
647 LocaleConfig::SetSystemRegion("CN");
648 std::unordered_map<std::string, std::string> systemNumberPatterns;
649 I18nErrorCode errCode = LocaleConfig::GetSystemNumberPatterns(systemNumberPatterns);
650 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
651 EXPECT_TRUE(systemNumberPatterns.find("002c002e") != systemNumberPatterns.end());
652 EXPECT_TRUE(systemNumberPatterns.find("0000002e") != systemNumberPatterns.end());
653 EXPECT_TRUE(systemNumberPatterns.find("002e002c") != systemNumberPatterns.end());
654 EXPECT_TRUE(systemNumberPatterns.find("0000002c") != systemNumberPatterns.end());
655
656 std::string usingNumberPattern;
657 errCode = LocaleConfig::GetUsingNumberPattern(usingNumberPattern);
658 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
659 EXPECT_EQ(usingNumberPattern, "002c002e");
660
661 errCode = LocaleConfig::SetSystemNumberPattern("0000002c");
662 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
663 errCode = LocaleConfig::GetUsingNumberPattern(usingNumberPattern);
664 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
665 EXPECT_EQ(usingNumberPattern, "0000002c");
666
667 errCode = LocaleConfig::SetSystemNumberingSystem("002d002f");
668 EXPECT_EQ(errCode, I18nErrorCode::INVALID_PARAM);
669
670 LocaleConfig::SetSystemLanguage(systemLanguage);
671 LocaleConfig::SetSystemLocale(systemLocale);
672 }
673
674 /**
675 * @tc.name: LocaleConfigFuncTest028
676 * @tc.desc: Test LocaleConfig
677 * @tc.type: FUNC
678 */
679 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest028, TestSize.Level1)
680 {
681 std::string localeTag = "zh-Hans-CN-u-nu-arab-x-np-002c002e";
682 std::pair<std::string, std::string> numberPattern = LocaleConfig::GetNumberPatternFromLocale(localeTag);
683 EXPECT_EQ(numberPattern.first, ",");
684 EXPECT_EQ(numberPattern.second, ".");
685 std::string removedLocale = LocaleConfig::RemoveCustExtParam(localeTag);
686 EXPECT_EQ(removedLocale, "zh-Hans-CN-u-nu-arab");
687 removedLocale = LocaleConfig::RemoveAllExtParam(localeTag);
688 EXPECT_EQ(removedLocale, "zh-Hans-CN");
689 std::string modifiedLocale = LocaleConfig::ModifyExtParam(localeTag, "np", "0000002c", "-x-");
690 EXPECT_EQ(modifiedLocale, "zh-Hans-CN-u-nu-arab-x-np-0000002c");
691 std::string extParam = LocaleConfig::QueryExtParam(localeTag, "np", "-x-");
692 EXPECT_EQ(extParam, "002c002e");
693 std::string numberingSystemDigit = LocaleConfig::GetNumberingSystemDigit("latn");
694 EXPECT_EQ(numberingSystemDigit, "0123456789");
695 }
696
697 /**
698 * @tc.name: LocaleConfigFuncTest029
699 * @tc.desc: Test LocaleConfig
700 * @tc.type: FUNC
701 */
702 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest029, TestSize.Level1)
703 {
704 std::string systemLanguage = LocaleConfig::GetSystemLanguage();
705 std::string systemLocale = LocaleConfig::GetSystemLocale();
706
707 LocaleConfig::SetSystemLanguage("zh-Hans");
708 LocaleConfig::SetSystemLocale("zh-Hans-CN");
709 std::unordered_map<std::string, std::string> systemMeasurements;
710 I18nErrorCode errCode = LocaleConfig::GetSystemMeasurements(systemMeasurements);
711 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
712 EXPECT_TRUE(systemMeasurements.find("uksystem") != systemMeasurements.end());
713 EXPECT_TRUE(systemMeasurements.find("ussystem") != systemMeasurements.end());
714 EXPECT_TRUE(systemMeasurements.find("metric") != systemMeasurements.end());
715
716 std::string usingMeasurement;
717 errCode = LocaleConfig::GetUsingMeasurement(usingMeasurement);
718 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
719 EXPECT_EQ(usingMeasurement, "metric");
720
721 errCode = LocaleConfig::SetSystemMeasurement("uksystem");
722 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
723 errCode = LocaleConfig::GetUsingMeasurement(usingMeasurement);
724 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
725 EXPECT_EQ(usingMeasurement, "uksystem");
726
727 errCode = LocaleConfig::SetSystemMeasurement("Invalid");
728 EXPECT_EQ(errCode, I18nErrorCode::INVALID_PARAM);
729
730 std::string measurement = LocaleConfig::GetMeasurementFromLocale("zh-Hans-CN-u-ms-uksystem");
731 EXPECT_EQ(measurement, "uksystem");
732
733 LocaleConfig::SetSystemLanguage(systemLanguage);
734 LocaleConfig::SetSystemLocale(systemLocale);
735 }
736
737 /**
738 * @tc.name: LocaleConfigFuncTest030
739 * @tc.desc: Test LocaleConfig
740 * @tc.type: FUNC
741 */
742 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest030, TestSize.Level1)
743 {
744 std::string systemLanguage = LocaleConfig::GetSystemLanguage();
745 std::string systemLocale = LocaleConfig::GetSystemLocale();
746
747 LocaleConfig::SetSystemLanguage("zh-Hans");
748 LocaleConfig::SetSystemLocale("zh-Hans-CN");
749 std::unordered_map<std::string, std::string> numericalDatePatterns;
750 I18nErrorCode errCode = LocaleConfig::GetSystemNumericalDatePatterns(numericalDatePatterns);
751 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
752 EXPECT_TRUE(numericalDatePatterns.find("d/MM/y") != numericalDatePatterns.end());
753 EXPECT_TRUE(numericalDatePatterns.find("d/M/yy") != numericalDatePatterns.end());
754 EXPECT_TRUE(numericalDatePatterns.find("y-MM-d") != numericalDatePatterns.end());
755 EXPECT_TRUE(numericalDatePatterns.find("d/M/y") != numericalDatePatterns.end());
756 EXPECT_TRUE(numericalDatePatterns.find("d/MM/yy") != numericalDatePatterns.end());
757 EXPECT_TRUE(numericalDatePatterns.find("d.MM.yy") != numericalDatePatterns.end());
758 EXPECT_TRUE(numericalDatePatterns.find("yy/MM/d") != numericalDatePatterns.end());
759 EXPECT_TRUE(numericalDatePatterns.find("d.MM.y") != numericalDatePatterns.end());
760 EXPECT_TRUE(numericalDatePatterns.find("d-MM-y") != numericalDatePatterns.end());
761 EXPECT_TRUE(numericalDatePatterns.find("y/M/d") != numericalDatePatterns.end());
762 EXPECT_TRUE(numericalDatePatterns.find("d-M-y") != numericalDatePatterns.end());
763
764 std::string identifier;
765 errCode = LocaleConfig::GetUsingNumericalDatePattern(identifier);
766 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
767 EXPECT_EQ(identifier, "y/M/d");
768
769 errCode = LocaleConfig::SetSystemNumericalDatePattern("d/MM/yy");
770 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
771 errCode = LocaleConfig::GetUsingNumericalDatePattern(identifier);
772 EXPECT_EQ(errCode, I18nErrorCode::SUCCESS);
773 EXPECT_EQ(identifier, "d/MM/yy");
774
775 errCode = LocaleConfig::SetSystemNumericalDatePattern("Invalid");
776 EXPECT_EQ(errCode, I18nErrorCode::INVALID_PARAM);
777
778 std::string patternNumber = LocaleConfig::GetPatternNumberFromLocale("zh-Hans-CN");
779 EXPECT_EQ(patternNumber, "");
780
781 LocaleConfig::SetSystemLanguage(systemLanguage);
782 LocaleConfig::SetSystemLocale(systemLocale);
783 }
784 } // namespace I18n
785 } // namespace Global
786 } // namespace OHOS