• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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