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