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
40 string LocaleConfigTest::originalLanguage;
41 string LocaleConfigTest::originalRegion;
42 string LocaleConfigTest::originalLocale;
43
SetUpTestCase(void)44 void LocaleConfigTest::SetUpTestCase(void)
45 {
46 originalLanguage = LocaleConfig::GetSystemLanguage();
47 originalRegion = LocaleConfig::GetSystemRegion();
48 originalLocale = LocaleConfig::GetSystemLocale();
49 LocaleConfig::SetSystemLanguage("zh-Hans");
50 LocaleConfig::SetSystemRegion("CN");
51 LocaleConfig::SetSystemLocale("zh-Hans-CN");
52 }
53
TearDownTestCase(void)54 void LocaleConfigTest::TearDownTestCase(void)
55 {
56 LocaleConfig::SetSystemLanguage(originalLanguage);
57 LocaleConfig::SetSystemRegion(originalRegion);
58 LocaleConfig::SetSystemLocale(originalLocale);
59 }
60
SetUp(void)61 void LocaleConfigTest::SetUp(void)
62 {}
63
TearDown(void)64 void LocaleConfigTest::TearDown(void)
65 {}
66
67 /**
68 * @tc.name: LocaleConfigFuncTest001
69 * @tc.desc: Test LocaleConfig GetSystemLanguage default
70 * @tc.type: FUNC
71 */
72 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest001, TestSize.Level1)
73 {
74 int ret = SetParameter("hm.sys.language", "");
75 if (!ret) {
76 EXPECT_EQ(LocaleConfig::GetSystemLanguage(), "zh-Hans");
77 }
78 }
79
80 /**
81 * @tc.name: LocaleConfigFuncTest002
82 * @tc.desc: Test LocaleConfig GetSystemRegion default.
83 * @tc.type: FUNC
84 */
85 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest002, TestSize.Level1)
86 {
87 int ret = SetParameter("hm.sys.locale", "");
88 if (!ret) {
89 EXPECT_EQ(LocaleConfig::GetSystemRegion(), "CN");
90 }
91 }
92
93 /**
94 * @tc.name: LocaleConfigFuncTest003
95 * @tc.desc: Test LocaleConfig GetSystemLocale default
96 * @tc.type: FUNC
97 */
98 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest003, TestSize.Level1)
99 {
100 int ret = SetParameter("hm.sys.locale", "");
101 if (!ret) {
102 EXPECT_EQ(LocaleConfig::GetSystemLocale(), "zh-Hans-CN");
103 }
104 }
105
106 /**
107 * @tc.name: LocaleConfigFuncTest004
108 * @tc.desc: Test LocaleConfig SetSystemLanguage
109 * @tc.type: FUNC
110 */
111 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest004, TestSize.Level1)
112 {
113 string language = "pt-PT";
114 I18nErrorCode status = LocaleConfig::SetSystemLanguage(language);
115 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
116 LocaleConfig::SetSystemLanguage("zh-Hans");
117 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
118 LocaleConfig::SetSystemLanguage("%$=");
119 }
120
121 /**
122 * @tc.name: LocaleConfigFuncTest005
123 * @tc.desc: Test LocaleConfig SetSystemLocale
124 * @tc.type: FUNC
125 */
126 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest005, TestSize.Level1)
127 {
128 string locale = "zh-Hant-TW";
129 I18nErrorCode status = LocaleConfig::SetSystemLocale(locale);
130 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
131 status = LocaleConfig::SetSystemLocale("zh-Hans-CN");
132 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
133 }
134
135 /**
136 * @tc.name: LocaleConfigFuncTest006
137 * @tc.desc: Test LocaleConfig SetSystemRegion
138 * @tc.type: FUNC
139 */
140 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest006, TestSize.Level1)
141 {
142 string locale = "zh-Hant-TW";
143 I18nErrorCode status = LocaleConfig::SetSystemLocale(locale);
144 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
145 status = LocaleConfig::SetSystemRegion("HK");
146 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
147 status = LocaleConfig::SetSystemLocale("zh-Hans-CN");
148 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
149 status = LocaleConfig::SetSystemRegion("@*%");
150 EXPECT_EQ(status, I18nErrorCode::INVALID_REGION_TAG);
151 }
152
153 /**
154 * @tc.name: LocaleConfigFuncTest007
155 * @tc.desc: Test LocaleConfig GetSystemCountries
156 * @tc.type: FUNC
157 */
158 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest007, TestSize.Level1)
159 {
160 vector<string> countries;
161 LocaleConfig::GetSystemCountries(countries);
162 EXPECT_TRUE(countries.size() > 200);
163 }
164
165 /**
166 * @tc.name: LocaleConfigFuncTest008
167 * @tc.desc: Test LocaleConfig GetDisplayLanguage
168 * @tc.type: FUNC
169 */
170 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest008, TestSize.Level1)
171 {
172 std::string languageTag = "pt";
173 std::string localeTag = "en-US";
174 std::string displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
175 EXPECT_EQ(displayName, "Portuguese");
176
177 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, false);
178 EXPECT_EQ(displayName, "Portuguese");
179
180 std::string fakeLocaleTag = "FakeLocaleTag";
181 displayName = LocaleConfig::GetDisplayLanguage(languageTag, fakeLocaleTag, true);
182 EXPECT_EQ(displayName, "");
183
184 std::string fakeLanguageTag = "FakeLanguageTag";
185 displayName = LocaleConfig::GetDisplayLanguage(fakeLanguageTag, localeTag, true);
186 EXPECT_EQ(displayName, "");
187
188 languageTag = "zh-Hans-CN";
189 localeTag = "en-US";
190 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, false);
191 EXPECT_EQ(displayName, "Simplified Chinese");
192
193 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
194 EXPECT_EQ(displayName, "Simplified Chinese");
195
196 displayName = LocaleConfig::GetDisplayLanguage(languageTag, fakeLocaleTag, false);
197 EXPECT_EQ(displayName, "");
198
199 languageTag = "pt-Latn-BR";
200 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, false);
201 EXPECT_EQ(displayName, "Portuguese (Brazil)");
202
203 displayName = LocaleConfig::GetDisplayLanguage(languageTag, fakeLocaleTag, false);
204 EXPECT_EQ(displayName, "");
205
206 languageTag = "zh";
207 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
208 EXPECT_EQ(displayName, "Chinese");
209
210 localeTag = "en-Hans";
211 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
212 EXPECT_EQ(displayName, "Chinese");
213
214 languageTag = "zh-Hans";
215 localeTag = "en-US";
216 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
217 EXPECT_EQ(displayName, "Simplified Chinese");
218
219 languageTag = "ro-MD";
220 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
221 EXPECT_EQ(displayName, "Moldavian");
222 }
223
224 /**
225 * @tc.name: LocaleConfigFuncTest009
226 * @tc.desc: Test LocaleConfig GetDisplayRegion
227 * @tc.type: FUNC
228 */
229 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest009, TestSize.Level1)
230 {
231 std::string regionTag = "JP";
232 std::string localeTag = "zh-Hans-CN";
233 std::string displayName = LocaleConfig::GetDisplayRegion(regionTag, localeTag, false);
234 EXPECT_EQ(displayName, "日本");
235
236 std::string fakeRegionTag = "XX";
237 displayName = LocaleConfig::GetDisplayRegion(fakeRegionTag, localeTag, false);
238 EXPECT_EQ(displayName, "XX");
239
240 std::string fakeLocaleTag = "FakeLocaleTag";
241 displayName = LocaleConfig::GetDisplayRegion(regionTag, fakeLocaleTag, false);
242 EXPECT_EQ(displayName, "");
243
244 localeTag = "en-Latn-US";
245 displayName = LocaleConfig::GetDisplayRegion(regionTag, localeTag, false);
246 EXPECT_EQ(displayName, "Japan");
247
248 regionTag = "zh-Hans-CN";
249 displayName = LocaleConfig::GetDisplayRegion(regionTag, localeTag, false);
250 EXPECT_EQ(displayName, "China");
251
252 regionTag = "HK";
253 displayName = LocaleConfig::GetDisplayRegion(regionTag, localeTag, false);
254 EXPECT_EQ(displayName, "Hong Kong (China)");
255 }
256
257 /**
258 * @tc.name: LocaleConfigFuncTest010
259 * @tc.desc: Test LocaleConfig GetDisplayLanguage
260 * @tc.type: FUNC
261 */
262 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest010, TestSize.Level1)
263 {
264 std::string languageTag = "zh-Hant-HK";
265 std::string localeTag = "zh-Hant";
266 std::string displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
267 EXPECT_EQ(displayName, "繁體中文(中國香港)");
268
269 languageTag = "zh-Hant-HK";
270 localeTag = "zh-Hans";
271 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
272 EXPECT_EQ(displayName, "繁体中文(中国香港)");
273
274 languageTag = "zh-Hant-HK";
275 localeTag = "en-US";
276 displayName = LocaleConfig::GetDisplayLanguage(languageTag, localeTag, true);
277 EXPECT_EQ(displayName, "Traditional Chinese(Hong Kong, China)");
278 }
279
280 /**
281 * @tc.name: LocaleConfigFuncTest011
282 * @tc.desc: Test LocaleConfig GetDisplayRegion
283 * @tc.type: FUNC
284 */
285 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest011, TestSize.Level1)
286 {
287 EXPECT_EQ(LocaleConfig::GetDisplayRegion("zh", "en-US", true), "");
288 EXPECT_EQ(LocaleConfig::GetDisplayRegion("zh-Hans-CN", "en-US", true), "China");
289 }
290
291 /**
292 * @tc.name: LocaleConfigFuncTest012
293 * @tc.desc: Test LocaleConfig GetDisplayRegion
294 * @tc.type: FUNC
295 */
296 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest012, TestSize.Level1)
297 {
298 EXPECT_EQ(LocaleConfig::GetDisplayRegion("zh-Hans", "en-US", true), "");
299 }
300
301 /**
302 * @tc.name: LocaleConfigFuncTest013
303 * @tc.desc: Test LocaleConfig LocalDigit
304 * @tc.type: FUNC
305 */
306 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest013, TestSize.Level1)
307 {
308 bool current = LocaleConfig::GetUsingLocalDigit();
309 I18nErrorCode status = LocaleConfig::SetUsingLocalDigit(true);
310 EXPECT_EQ(status, I18nErrorCode::UPDATE_LOCAL_DIGIT_FAILED);
311 current = LocaleConfig::GetUsingLocalDigit();
312 EXPECT_FALSE(current);
313 }
314
315 /**
316 * @tc.name: LocaleConfigFuncTest014
317 * @tc.desc: Test LocaleConfig 24 hour clock
318 * @tc.type: FUNC
319 */
320 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest014, TestSize.Level1)
321 {
322 bool current = LocaleConfig::Is24HourClock();
323 I18nErrorCode status = LocaleConfig::Set24HourClock("true");
324 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
325 current = LocaleConfig::Is24HourClock();
326 EXPECT_TRUE(current);
327 status = LocaleConfig::Set24HourClock("abc");
328 EXPECT_EQ(status, I18nErrorCode::INVALID_24_HOUR_CLOCK_TAG);
329 LocaleConfig::Set24HourClock("");
330 }
331
332 /**
333 * @tc.name: LocaleConfigFuncTest015
334 * @tc.desc: Test LocaleConfig valid locales
335 * @tc.type: FUNC
336 */
337 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest015, TestSize.Level1)
338 {
339 string localeTag = "zh";
340 string validLocaleTag = LocaleConfig::GetValidLocale(localeTag);
341 EXPECT_EQ(validLocaleTag, "zh");
342
343 localeTag = "zh-u-hc-h12-nu-latn-ca-chinese-co-pinyin-kf-upper-kn-true";
344 validLocaleTag = LocaleConfig::GetValidLocale(localeTag);
345 EXPECT_EQ(validLocaleTag, "zh-u-ca-chinese-co-pinyin-kn-true-kf-upper-nu-latn-hc-h12");
346 }
347
348 /**
349 * @tc.name: LocaleConfigFuncTest016
350 * @tc.desc: Test LocaleConfig isRTL
351 * @tc.type: FUNC
352 */
353 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest016, TestSize.Level1)
354 {
355 string localeTag = "zh";
356 bool isRTL = LocaleConfig::IsRTL(localeTag);
357 EXPECT_TRUE(!isRTL);
358 localeTag = "ar";
359 isRTL = LocaleConfig::IsRTL(localeTag);
360 EXPECT_TRUE(isRTL);
361 }
362
363 /**
364 * @tc.name: LocaleConfigFuncTest017
365 * @tc.desc: Test LocaleConfig isSuggested
366 * @tc.type: FUNC
367 */
368 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest017, TestSize.Level1)
369 {
370 string language = "zh";
371 bool isSuggested = LocaleConfig::IsSuggested(language);
372 EXPECT_TRUE(isSuggested);
373 string region = "CN";
374 isSuggested = LocaleConfig::IsSuggested(language, region);
375 EXPECT_TRUE(isSuggested);
376 std::string fakeLanguage = "FakeLanguage";
377 isSuggested = LocaleConfig::IsSuggested(fakeLanguage);
378 EXPECT_FALSE(isSuggested);
379 }
380
381 /**
382 * @tc.name: LocaleConfigFuncTest018
383 * @tc.desc: Test LocaleCOnfig systemRegion
384 * @tc.type: FUNC
385 */
386 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest018, TestSize.Level1)
387 {
388 string currentRegion = LocaleConfig::GetSystemRegion();
389 EXPECT_TRUE(currentRegion.length() > 0);
390 string region = "CN";
391 I18nErrorCode status = LocaleConfig::SetSystemRegion(region);
392 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
393 currentRegion = LocaleConfig::GetSystemRegion();
394 EXPECT_EQ(currentRegion, region);
395 }
396
397 /**
398 * @tc.name: LocaleConfigFuncTest019
399 * @tc.desc: Test LocaleCOnfig systemLocale
400 * @tc.type: FUNC
401 */
402 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest019, TestSize.Level1)
403 {
404 string currentLocale = LocaleConfig::GetSystemLocale();
405 EXPECT_TRUE(currentLocale.length() > 0);
406 string locale = "zh-Hans-CN";
407 I18nErrorCode status = LocaleConfig::SetSystemLocale(locale);
408 EXPECT_EQ(status, I18nErrorCode::SUCCESS);
409 currentLocale = LocaleConfig::GetSystemLocale();
410 EXPECT_EQ(currentLocale, locale);
411 }
412
413 /**
414 * @tc.name: LocaleConfigFuncTest020
415 * @tc.desc: Test LocaleConfig systemLanguages
416 * @tc.type: FUNC
417 */
418 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest020, TestSize.Level1)
419 {
420 vector<string> languages;
421 LocaleConfig::GetSystemLanguages(languages);
422 EXPECT_TRUE(languages.size() > 2);
423 LocaleConfig::SetSystemLocale("ur-Latn-PK");
424 LocaleConfig::SetUsingLocalDigit(true);
425 LocaleConfig::SetUsingLocalDigit(false);
426 }
427
428 /**
429 * @tc.name: LocaleConfigFuncTest021
430 * @tc.desc: Test LocaleConfig IsValidLanguage
431 * @tc.type: FUNC
432 */
433 HWTEST_F(LocaleConfigTest, LocaleConfigFuncTest021, TestSize.Level1)
434 {
435 const string language = "zh";
436 const string fakeLanguage = "010";
437 const string tag = "zh-Hans";
438 const string fakeTag = "13-Hans";
439 bool flag = LocaleConfig::IsValidLanguage(language);
440 EXPECT_TRUE(flag);
441 flag = LocaleConfig::IsValidLanguage(fakeLanguage);
442 EXPECT_TRUE(!flag);
443 flag = LocaleConfig::IsValidTag(tag);
444 EXPECT_TRUE(flag);
445 flag = LocaleConfig::IsValidTag(fakeTag);
446 EXPECT_TRUE(!flag);
447 EXPECT_FALSE(LocaleConfig::IsValidTag(""));
448 }
449 } // namespace I18n
450 } // namespace Global
451 } // namespace OHOS