1 /*
2 * Copyright (c) 2023 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 <gtest/gtest.h>
17 #include "accesstoken_kit.h"
18 #include "i18n_service_ability_client.h"
19 #include "locale_config.h"
20 #include "nativetoken_kit.h"
21 #include "preferred_language.h"
22 #include "token_setproc.h"
23 #include "i18n_service_test.h"
24
25 using testing::ext::TestSize;
26 using namespace std;
27 namespace OHOS {
28 namespace Global {
29 namespace I18n {
30 static const uint64_t SELF_TOKEN_ID = GetSelfTokenID();
31 static constexpr int32_t I18N_UID = 3013;
32 static constexpr int32_t ROOT_UID = 0;
33
34 class I18nServiceTest : public testing::Test {
35 public:
36 static void SetUpTestCase(void);
37 static void TearDownTestCase(void);
38 void SetUp();
39 void TearDown();
40 };
41
SetUpTestCase(void)42 void I18nServiceTest::SetUpTestCase(void)
43 {}
44
TearDownTestCase(void)45 void I18nServiceTest::TearDownTestCase(void)
46 {}
47
SetUp(void)48 void I18nServiceTest::SetUp(void)
49 {}
50
TearDown(void)51 void I18nServiceTest::TearDown(void)
52 {}
53
RemoveNativeTokenTypeAndPermissions()54 void RemoveNativeTokenTypeAndPermissions()
55 {
56 SetSelfTokenID(SELF_TOKEN_ID);
57 seteuid(ROOT_UID);
58 OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
59 seteuid(I18N_UID);
60 }
61
AddNativeTokenTypeAndPermissions()62 void AddNativeTokenTypeAndPermissions()
63 {
64 const char* permissions[] = {
65 "ohos.permission.UPDATE_CONFIGURATION"
66 };
67 NativeTokenInfoParams infoInstance = {
68 .dcapsNum = 0,
69 .permsNum = sizeof(permissions) / sizeof(permissions[0]),
70 .aclsNum = 0,
71 .dcaps = nullptr,
72 .perms = permissions,
73 .acls = nullptr,
74 .aplStr = "system_basic",
75 };
76 infoInstance.processName = "I18nServiceTest";
77 SetSelfTokenID(GetAccessTokenId(&infoInstance));
78 seteuid(ROOT_UID);
79 int32_t ret = OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
80 printf("ReloadNativeTokenInfo result is %d. \n", ret);
81 seteuid(I18N_UID);
82 }
83
InitTestEnvironment()84 void InitTestEnvironment()
85 {
86 LocaleConfig::SetSystemLanguage("zh-Hans");
87 LocaleConfig::SetSystemRegion("CN");
88 LocaleConfig::SetSystemLocale("zh-Hans-CN");
89 LocaleConfig::Set24HourClock("true");
90 std::vector<std::string> preferredLanguageList = PreferredLanguage::GetPreferredLanguageList();
91 if (preferredLanguageList.size() > 1) {
92 for (size_t i = preferredLanguageList.size(); i > 1; --i) {
93 PreferredLanguage::RemovePreferredLanguage(i);
94 }
95 }
96 RemoveNativeTokenTypeAndPermissions();
97 }
98
99 /**
100 * @tc.name: I18nServiceFuncTest001
101 * @tc.desc: Test I18nServiceAbilityClient SetSystemLanguage: no permission case
102 * @tc.type: FUNC
103 */
104 HWTEST_F(I18nServiceTest, I18nServiceFuncTest001, TestSize.Level1)
105 {
106 InitTestEnvironment();
107 I18nErrorCode err = I18nServiceAbilityClient::SetSystemLanguage("en");
108 EXPECT_EQ(err, I18nErrorCode::NO_PERMISSION);
109 }
110
111 /**
112 * @tc.name: I18nServiceFuncTest002
113 * @tc.desc: Test I18nServiceAbilityClient SetSystemLanguage
114 * @tc.type: FUNC
115 */
116 HWTEST_F(I18nServiceTest, I18nServiceFuncTest002, TestSize.Level1)
117 {
118 InitTestEnvironment();
119 AddNativeTokenTypeAndPermissions();
120 I18nErrorCode err = I18nServiceAbilityClient::SetSystemLanguage("en");
121 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
122 }
123
124 /**
125 * @tc.name: I18nServiceFuncTest003
126 * @tc.desc: Test I18nServiceAbilityClient SetSystemLanguage: invalid language tag
127 * @tc.type: FUNC
128 */
129 HWTEST_F(I18nServiceTest, I18nServiceFuncTest003, TestSize.Level1)
130 {
131 InitTestEnvironment();
132 AddNativeTokenTypeAndPermissions();
133 I18nErrorCode err = I18nServiceAbilityClient::SetSystemLanguage("fake_language_tag");
134 EXPECT_EQ(err, I18nErrorCode::INVALID_LANGUAGE_TAG);
135 }
136
137 /**
138 * @tc.name: I18nServiceFuncTest004
139 * @tc.desc: Test I18nServiceAbilityClient SetSystemRegion: no permission case.
140 * @tc.type: FUNC
141 */
142 HWTEST_F(I18nServiceTest, I18nServiceFuncTest004, TestSize.Level1)
143 {
144 InitTestEnvironment();
145 I18nErrorCode err = I18nServiceAbilityClient::SetSystemRegion("US");
146 EXPECT_EQ(err, I18nErrorCode::NO_PERMISSION);
147 }
148
149 /**
150 * @tc.name: I18nServiceFuncTest005
151 * @tc.desc: Test I18nServiceAbilityClient SetSystemRegion
152 * @tc.type: FUNC
153 */
154 HWTEST_F(I18nServiceTest, I18nServiceFuncTest005, TestSize.Level1)
155 {
156 InitTestEnvironment();
157 AddNativeTokenTypeAndPermissions();
158 I18nErrorCode err = I18nServiceAbilityClient::SetSystemRegion("US");
159 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
160 }
161
162 /**
163 * @tc.name: I18nServiceFuncTest006
164 * @tc.desc: Test I18nServiceAbilityClient SetSystemRegion: invalid region tag.
165 * @tc.type: FUNC
166 */
167 HWTEST_F(I18nServiceTest, I18nServiceFuncTest006, TestSize.Level1)
168 {
169 InitTestEnvironment();
170 AddNativeTokenTypeAndPermissions();
171 I18nErrorCode err = I18nServiceAbilityClient::SetSystemRegion("fake_region_tag");
172 EXPECT_EQ(err, I18nErrorCode::INVALID_REGION_TAG);
173 }
174
175 /**
176 * @tc.name: I18nServiceFuncTest007
177 * @tc.desc: Test I18nServiceAbilityClient SetSystemLocale: no permission case.
178 * @tc.type: FUNC
179 */
180 HWTEST_F(I18nServiceTest, I18nServiceFuncTest007, TestSize.Level1)
181 {
182 InitTestEnvironment();
183 I18nErrorCode err = I18nServiceAbilityClient::SetSystemLocale("en-US");
184 EXPECT_EQ(err, I18nErrorCode::NO_PERMISSION);
185 }
186
187 /**
188 * @tc.name: I18nServiceFuncTest008
189 * @tc.desc: Test I18nServiceAbilityClient SetSystemLocale
190 * @tc.type: FUNC
191 */
192 HWTEST_F(I18nServiceTest, I18nServiceFuncTest008, TestSize.Level1)
193 {
194 InitTestEnvironment();
195 AddNativeTokenTypeAndPermissions();
196 I18nErrorCode err = I18nServiceAbilityClient::SetSystemLocale("en-US");
197 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
198 err = I18nServiceAbilityClient::SetSystemLocale("en-XA");
199 LocaleConfig::GetDisplayLanguage("zh", "en-US", true);
200 }
201
202 /**
203 * @tc.name: I18nServiceFuncTest009
204 * @tc.desc: Test I18nServiceAbilityClient SetSystemLocale: invalid locale tag.
205 * @tc.type: FUNC
206 */
207 HWTEST_F(I18nServiceTest, I18nServiceFuncTest009, TestSize.Level1)
208 {
209 InitTestEnvironment();
210 AddNativeTokenTypeAndPermissions();
211 I18nErrorCode err = I18nServiceAbilityClient::SetSystemRegion("fake_locale_tag");
212 EXPECT_EQ(err, I18nErrorCode::INVALID_REGION_TAG);
213 }
214
215 /**
216 * @tc.name: I18nServiceFuncTest010
217 * @tc.desc: Test I18nServiceAbilityClient Set24HourClock: no permission.
218 * @tc.type: FUNC
219 */
220 HWTEST_F(I18nServiceTest, I18nServiceFuncTest010, TestSize.Level1)
221 {
222 InitTestEnvironment();
223 I18nErrorCode err = I18nServiceAbilityClient::Set24HourClock("false");
224 EXPECT_EQ(err, I18nErrorCode::NO_PERMISSION);
225 }
226
227 /**
228 * @tc.name: I18nServiceFuncTest011
229 * @tc.desc: Test I18nServiceAbilityClient Set24HourClock: set 24 hour clock to false.
230 * @tc.type: FUNC
231 */
232 HWTEST_F(I18nServiceTest, I18nServiceFuncTest011, TestSize.Level1)
233 {
234 InitTestEnvironment();
235 AddNativeTokenTypeAndPermissions();
236 I18nErrorCode err = I18nServiceAbilityClient::Set24HourClock("false");
237 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
238 }
239
240 /**
241 * @tc.name: I18nServiceFuncTest012
242 * @tc.desc: Test I18nServiceAbilityClient Set24HourClock: set 24 hour clock to true.
243 * @tc.type: FUNC
244 */
245 HWTEST_F(I18nServiceTest, I18nServiceFuncTest012, TestSize.Level1)
246 {
247 InitTestEnvironment();
248 AddNativeTokenTypeAndPermissions();
249 I18nErrorCode err = I18nServiceAbilityClient::Set24HourClock("true");
250 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
251 }
252
253 /**
254 * @tc.name: I18nServiceFuncTest013
255 * @tc.desc: Test I18nServiceAbilityClient SetUsingLocalDigit: test no permission case.
256 * @tc.type: FUNC
257 */
258 HWTEST_F(I18nServiceTest, I18nServiceFuncTest013, TestSize.Level1)
259 {
260 InitTestEnvironment();
261 I18nErrorCode err = I18nServiceAbilityClient::SetUsingLocalDigit(true);
262 EXPECT_EQ(err, I18nErrorCode::NO_PERMISSION);
263 }
264
265 /**
266 * @tc.name: I18nServiceFuncTest014
267 * @tc.desc: Test I18nServiceAbilityClient SetUsingLocalDigit: test no local digit language.
268 * @tc.type: FUNC
269 */
270 HWTEST_F(I18nServiceTest, I18nServiceFuncTest014, TestSize.Level1)
271 {
272 InitTestEnvironment();
273 AddNativeTokenTypeAndPermissions();
274 I18nErrorCode err = I18nServiceAbilityClient::SetUsingLocalDigit(true);
275 EXPECT_EQ(err, I18nErrorCode::UPDATE_LOCAL_DIGIT_FAILED);
276 }
277
278 /**
279 * @tc.name: I18nServiceFuncTest015
280 * @tc.desc: Test I18nServiceAbilityClient SetUsingLocalDigit test set local digit to true
281 * @tc.type: FUNC
282 */
283 HWTEST_F(I18nServiceTest, I18nServiceFuncTest015, TestSize.Level1)
284 {
285 InitTestEnvironment();
286 AddNativeTokenTypeAndPermissions();
287 I18nErrorCode err = I18nServiceAbilityClient::SetSystemLanguage("ar");
288 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
289 err = I18nServiceAbilityClient::SetUsingLocalDigit(true);
290 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
291 }
292
293 /**
294 * @tc.name: I18nServiceFuncTest016
295 * @tc.desc: Test I18nServiceAbilityClient SetUsingLocalDigit test set local digit to false
296 * @tc.type: FUNC
297 */
298 HWTEST_F(I18nServiceTest, I18nServiceFuncTest016, TestSize.Level1)
299 {
300 InitTestEnvironment();
301 AddNativeTokenTypeAndPermissions();
302 I18nErrorCode err = I18nServiceAbilityClient::SetSystemLanguage("ar");
303 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
304 err = I18nServiceAbilityClient::SetUsingLocalDigit(false);
305 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
306 }
307
308 /**
309 * @tc.name: I18nServiceFuncTest017
310 * @tc.desc: Test I18nServiceAbilityClient AddPreferredLanguage: test no permission case
311 * @tc.type: FUNC
312 */
313 HWTEST_F(I18nServiceTest, I18nServiceFuncTest017, TestSize.Level1)
314 {
315 InitTestEnvironment();
316 I18nErrorCode err = I18nServiceAbilityClient::AddPreferredLanguage("ar", 0);
317 EXPECT_EQ(err, I18nErrorCode::NO_PERMISSION);
318 }
319
320 /**
321 * @tc.name: I18nServiceFuncTest018
322 * @tc.desc: Test I18nServiceAbilityClient AddPreferredLanguage: test add language to preferred language list header.
323 * @tc.type: FUNC
324 */
325 HWTEST_F(I18nServiceTest, I18nServiceFuncTest018, TestSize.Level1)
326 {
327 InitTestEnvironment();
328 AddNativeTokenTypeAndPermissions();
329 I18nErrorCode err = I18nServiceAbilityClient::AddPreferredLanguage("ar", 0);
330 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
331 }
332
333 /**
334 * @tc.name: I18nServiceFuncTest019
335 * @tc.desc: Test I18nServiceAbilityClient AddPreferredLanguage: test add language to preferred language list tailor.
336 * @tc.type: FUNC
337 */
338 HWTEST_F(I18nServiceTest, I18nServiceFuncTest019, TestSize.Level1)
339 {
340 InitTestEnvironment();
341 AddNativeTokenTypeAndPermissions();
342 I18nErrorCode err = I18nServiceAbilityClient::AddPreferredLanguage("fr", 1);
343 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
344 }
345
346 /**
347 * @tc.name: I18nServiceFuncTest020
348 * @tc.desc: Test I18nServiceAbilityClient AddPreferredLanguage: test add language to negative index.
349 * @tc.type: FUNC
350 */
351 HWTEST_F(I18nServiceTest, I18nServiceFuncTest020, TestSize.Level1)
352 {
353 InitTestEnvironment();
354 AddNativeTokenTypeAndPermissions();
355 I18nErrorCode err = I18nServiceAbilityClient::AddPreferredLanguage("fr", -10);
356 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
357 }
358
359 /**
360 * @tc.name: I18nServiceFuncTest021
361 * @tc.desc: Test I18nServiceAbilityClient AddPreferredLanguage: test add language to large index.
362 * @tc.type: FUNC
363 */
364 HWTEST_F(I18nServiceTest, I18nServiceFuncTest021, TestSize.Level1)
365 {
366 InitTestEnvironment();
367 AddNativeTokenTypeAndPermissions();
368 I18nErrorCode err = I18nServiceAbilityClient::AddPreferredLanguage("fr", 10);
369 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
370 }
371
372 /**
373 * @tc.name: I18nServiceFuncTest022
374 * @tc.desc: Test I18nServiceAbilityClient AddPreferredLanguage: test add invalid language tag.
375 * @tc.type: FUNC
376 */
377 HWTEST_F(I18nServiceTest, I18nServiceFuncTest022, TestSize.Level1)
378 {
379 InitTestEnvironment();
380 AddNativeTokenTypeAndPermissions();
381 I18nErrorCode err = I18nServiceAbilityClient::AddPreferredLanguage("fr", 1);
382 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
383 }
384
385 /**
386 * @tc.name: I18nServiceFuncTest023
387 * @tc.desc: Test I18nServiceAbilityClient RemovePreferredLanguage: test no permission case.
388 * @tc.type: FUNC
389 */
390 HWTEST_F(I18nServiceTest, I18nServiceFuncTest023, TestSize.Level1)
391 {
392 InitTestEnvironment();
393 I18nErrorCode err = I18nServiceAbilityClient::AddPreferredLanguage("fr", -1);
394 EXPECT_EQ(err, I18nErrorCode::NO_PERMISSION);
395 }
396
397 /**
398 * @tc.name: I18nServiceFuncTest024
399 * @tc.desc: Test I18nServiceAbilityClient RemovePreferredLanguage: remove when preferred language list size is 1.
400 * @tc.type: FUNC
401 */
402 HWTEST_F(I18nServiceTest, I18nServiceFuncTest024, TestSize.Level1)
403 {
404 InitTestEnvironment();
405 AddNativeTokenTypeAndPermissions();
406 I18nErrorCode err = I18nServiceAbilityClient::RemovePreferredLanguage(0);
407 EXPECT_EQ(err, I18nErrorCode::REMOVE_PREFERRED_LANGUAGE_FAILED);
408 }
409
410 /**
411 * @tc.name: I18nServiceFuncTest025
412 * @tc.desc: Test I18nServiceAbilityClient RemovePreferredLanguage: remove large index.
413 * @tc.type: FUNC
414 */
415 HWTEST_F(I18nServiceTest, I18nServiceFuncTest025, TestSize.Level1)
416 {
417 InitTestEnvironment();
418 AddNativeTokenTypeAndPermissions();
419 I18nErrorCode err = I18nServiceAbilityClient::AddPreferredLanguage("fr", 0);
420 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
421 err = I18nServiceAbilityClient::RemovePreferredLanguage(10);
422 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
423 }
424
425 /**
426 * @tc.name: I18nServiceFuncTest026
427 * @tc.desc: Test I18nServiceAbilityClient RemovePreferredLanguage: remove first preferred language.
428 * @tc.type: FUNC
429 */
430 HWTEST_F(I18nServiceTest, I18nServiceFuncTest026, TestSize.Level1)
431 {
432 InitTestEnvironment();
433 AddNativeTokenTypeAndPermissions();
434 I18nErrorCode err = I18nServiceAbilityClient::AddPreferredLanguage("fr", 0);
435 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
436 err = I18nServiceAbilityClient::RemovePreferredLanguage(0);
437 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
438 }
439
440 /**
441 * @tc.name: I18nServiceFuncTest027
442 * @tc.desc: Test I18nServiceAbilityClient RemovePreferredLanguage: remove last preferred language.
443 * @tc.type: FUNC
444 */
445 HWTEST_F(I18nServiceTest, I18nServiceFuncTest027, TestSize.Level1)
446 {
447 InitTestEnvironment();
448 AddNativeTokenTypeAndPermissions();
449 I18nErrorCode err = I18nServiceAbilityClient::AddPreferredLanguage("fr", 0);
450 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
451 err = I18nServiceAbilityClient::RemovePreferredLanguage(1);
452 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
453 }
454
455 /**
456 * @tc.name: I18nServiceFuncTest028
457 * @tc.desc: Test I18nServiceAbilityClient RemovePreferredLanguage: remove negative index.
458 * @tc.type: FUNC
459 */
460 HWTEST_F(I18nServiceTest, I18nServiceFuncTest028, TestSize.Level1)
461 {
462 InitTestEnvironment();
463 AddNativeTokenTypeAndPermissions();
464 I18nErrorCode err = I18nServiceAbilityClient::AddPreferredLanguage("fr", 0);
465 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
466 err = I18nServiceAbilityClient::RemovePreferredLanguage(-1);
467 EXPECT_EQ(err, I18nErrorCode::SUCCESS);
468 }
469 } // namespace I18n
470 } // namespace Global
471 } // namespace OHOS