• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 #define private public
18 #define protected public
19 #include "ability_manager_service.h"
20 #include "configuration.h"
21 #include "configuration_convertor.h"
22 #include "configuration_utils.h"
23 #ifdef SUPPORT_GRAPHICS
24 #include "locale_config.h"
25 #endif
26 #undef private
27 #undef protected
28 
29 using namespace testing::ext;
30 using namespace OHOS::AppExecFwk;
31 namespace OHOS {
32 namespace AAFwk {
33 class ConfigurationTest : 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 ConfigurationTest::SetUpTestCase(void)
42 {}
43 
TearDownTestCase(void)44 void ConfigurationTest::TearDownTestCase(void)
45 {}
46 
SetUp(void)47 void ConfigurationTest::SetUp(void)
48 {}
TearDown(void)49 void ConfigurationTest::TearDown(void)
50 {}
51 
52 /*
53  * Feature: Configuration
54  * Function: AddItem
55  * SubFunction: NA
56  * FunctionPoints: NA
57  * EnvConditions:NA
58  * CaseDescription: Update Configuration
59  */
60 HWTEST_F(ConfigurationTest, AddItem_001, TestSize.Level1)
61 {
62     AppExecFwk::Configuration config;
63     int displayId = 1001;
64     std::string val {"中文"};
65     EXPECT_EQ(0, config.GetItemSize());
66     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
67     EXPECT_EQ(1, config.GetItemSize());
68 
69     // replace
70     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
71     EXPECT_EQ(1, config.GetItemSize());
72 }
73 
74 /*
75  * Feature: Configuration
76  * Function: AddItem
77  * SubFunction: NA
78  * FunctionPoints: NA
79  * EnvConditions:NA
80  * CaseDescription: Update Configuration
81  */
82 HWTEST_F(ConfigurationTest, AddItem_002, TestSize.Level1)
83 {
84     AppExecFwk::Configuration config;
85     std::string val {"中文"};
86     EXPECT_EQ(0, config.GetItemSize());
87     config.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
88     EXPECT_EQ(1, config.GetItemSize());
89 
90     // replace
91     config.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
92     EXPECT_EQ(1, config.GetItemSize());
93 }
94 
95 /*
96  * Feature: Configuration
97  * Function: AddItem
98  * SubFunction: NA
99  * FunctionPoints: NA
100  * EnvConditions:NA
101  * CaseDescription: Update Configuration
102  */
103 HWTEST_F(ConfigurationTest, AddItem_003, TestSize.Level1)
104 {
105     AppExecFwk::Configuration config;
106     std::string val {"中文"};
107     std::string key {"test_key"};
108     EXPECT_EQ(0, config.GetItemSize());
109     auto ref = config.AddItem(key, val);
110     EXPECT_FALSE(ref);
111 }
112 
113 /*
114  * Feature: Configuration
115  * Function: GetItem
116  * SubFunction: NA
117  * FunctionPoints: NA
118  * EnvConditions:NA
119  * CaseDescription: Process Configuration Change
120  */
121 HWTEST_F(ConfigurationTest, GetItem_001, TestSize.Level1)
122 {
123     AppExecFwk::Configuration config;
124     int displayId = 1001;
125     std::string val {"中文"};
126     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
127 
128     auto item = config.GetItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
129     EXPECT_EQ(item, val);
130 
131     // replace
132     std::string english {"英文"};
133     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, english);
134     item = config.GetItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
135     EXPECT_EQ(item, english);
136 
137     int displayId2 = 1002;
138     std::string non {""};
139     item = config.GetItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
140     EXPECT_EQ(item, non);
141 }
142 
143 /*
144  * Feature: Configuration
145  * Function: GetItem
146  * SubFunction: NA
147  * FunctionPoints: NA
148  * EnvConditions:NA
149  * CaseDescription: Process Configuration Change
150  */
151 HWTEST_F(ConfigurationTest, GetItem_002, TestSize.Level1)
152 {
153     AppExecFwk::Configuration config;
154     std::string val {"中文"};
155     config.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
156 
157     auto item = config.GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
158     EXPECT_EQ(item, val);
159 
160     // replace
161     std::string english {"英文"};
162     config.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, english);
163     item = config.GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
164     EXPECT_EQ(item, english);
165 
166     int displayId2 = 1002;
167     std::string non {""};
168     item = config.GetItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
169     EXPECT_EQ(item, non);
170 }
171 
172 /*
173  * Feature: Configuration
174  * Function: GetItem
175  * SubFunction: NA
176  * FunctionPoints: NA
177  * EnvConditions:NA
178  * CaseDescription: Process Configuration Change
179  */
180 HWTEST_F(ConfigurationTest, GetItem_003, TestSize.Level1)
181 {
182     AppExecFwk::Configuration config;
183     std::string non {""};
184     auto item = config.GetItem("test_kay");
185     EXPECT_EQ(item, non);
186 }
187 /*
188  * Feature: Configuration
189  * Function: RemoveItem
190  * SubFunction: NA
191  * FunctionPoints: NA
192  * EnvConditions:NA
193  * CaseDescription: Process Configuration Change
194  */
195 HWTEST_F(ConfigurationTest, RemoveItem_001, TestSize.Level1)
196 {
197     AppExecFwk::Configuration config;
198     int displayId = 1001;
199     std::string val {"中文"};
200     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
201 
202     auto item = config.GetItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
203     EXPECT_EQ(item, val);
204 
205     // remove it
206     bool canRemove = config.RemoveItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
207     EXPECT_TRUE(canRemove);
208 
209     std::string non {""};
210     item = config.GetItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
211     EXPECT_EQ(item, non);
212 
213     canRemove = config.RemoveItem(displayId, non);
214     EXPECT_FALSE(canRemove);
215 
216     int displayId2 = 1002;
217     canRemove = config.RemoveItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
218     EXPECT_FALSE(canRemove);
219 }
220 
221 /*
222  * Feature: Configuration
223  * Function: RemoveItem
224  * SubFunction: NA
225  * FunctionPoints: NA
226  * EnvConditions:NA
227  * CaseDescription: Process Configuration Change
228  */
229 HWTEST_F(ConfigurationTest, RemoveItem_002, TestSize.Level1)
230 {
231     AppExecFwk::Configuration config;
232     std::string val {"中文"};
233     config.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
234 
235     auto item = config.GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
236     EXPECT_EQ(item, val);
237 
238     // remove it
239     bool canRemove = config.RemoveItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
240     EXPECT_TRUE(canRemove);
241 
242     std::string non {""};
243     item = config.GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
244     EXPECT_EQ(item, non);
245 
246     canRemove = config.RemoveItem(non);
247     EXPECT_FALSE(canRemove);
248 
249     canRemove = config.RemoveItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
250     EXPECT_FALSE(canRemove);
251 }
252 
253 /*
254  * Feature: Configuration
255  * Function: GetItemSize
256  * SubFunction: Process Configuration Change Inner
257  * FunctionPoints: NA
258  * EnvConditions:NA
259  * CaseDescription: Process Configuration Change Inner
260  */
261 HWTEST_F(ConfigurationTest, GetItemSize_001, TestSize.Level1)
262 {
263     AppExecFwk::Configuration config;
264     int displayId = 1001;
265     std::string val {"中文"};
266     EXPECT_EQ(0, config.GetItemSize());
267     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
268     EXPECT_EQ(1, config.GetItemSize());
269 
270     int displayId2 = 1002;
271     config.AddItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
272     EXPECT_EQ(2, config.GetItemSize());
273 }
274 
275 /*
276  * Feature: Configuration
277  * Function: CompareDifferent
278  * SubFunction: Process Configuration Change Inner
279  * FunctionPoints: NA
280  * EnvConditions:NA
281  * CaseDescription: Check according to key
282  */
283 HWTEST_F(ConfigurationTest, CompareDifferent_001, TestSize.Level1)
284 {
285     AppExecFwk::Configuration config;
286     int displayId = 1001;
287     std::string val {"中文"};
288     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
289 
290 
291     AppExecFwk::Configuration config2;
292     int displayId2 = 1001;
293     std::string English {"英文"};
294     config2.AddItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, English);
295 
296     std::vector<std::string> changeKeyV;
297 
298     config.CompareDifferent(changeKeyV, config2);
299     int size = changeKeyV.size();
300     EXPECT_EQ(size, 1);
301 }
302 
303 /*
304  * Feature: Configuration
305  * Function: CompareDifferent
306  * SubFunction: Process Configuration Change Inner
307  * FunctionPoints: NA
308  * EnvConditions:NA
309  * CaseDescription: Check according to key
310  */
311 HWTEST_F(ConfigurationTest, CompareDifferent_002, TestSize.Level1)
312 {
313     AppExecFwk::Configuration config;
314     int displayId = 1001;
315     std::string val {"中文"};
316     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
317 
318 
319     AppExecFwk::Configuration config2;
320     int displayId2 = 1002;
321     std::string English {"英文"};
322     config2.AddItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, English);
323 
324     std::vector<std::string> changeKeyV;
325 
326     config.CompareDifferent(changeKeyV, config2);
327     int size = changeKeyV.size();
328     EXPECT_EQ(size, 1);
329 }
330 
331 /*
332  * Feature: Configuration
333  * Function: Merge
334  * SubFunction: Process Configuration Change Inner
335  * FunctionPoints: NA
336  * EnvConditions:NA
337  * CaseDescription: Check according to key
338  */
339 HWTEST_F(ConfigurationTest, Merge_001, TestSize.Level1)
340 {
341     AppExecFwk::Configuration config;
342     int displayId = 1001;
343     std::string val {"中文"};
344     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
345 
346 
347     AppExecFwk::Configuration config2;
348     int displayId2 = 1002;
349     std::string English {"英文"};
350     config2.AddItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, English);
351 
352     std::vector<std::string> changeKeyV;
353 
354     config.CompareDifferent(changeKeyV, config2);
355     int size = changeKeyV.size();
356     EXPECT_EQ(size, 1);
357 
358     config.Merge(changeKeyV, config2);
359 
360     auto item = config.GetItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
361     EXPECT_EQ(item, English);
362 }
363 
364 /*
365  * Feature: Configuration
366  * Function: Merge
367  * SubFunction: Process Configuration Change Inner
368  * FunctionPoints: NA
369  * EnvConditions:NA
370  * CaseDescription: Check according to key
371  */
372 HWTEST_F(ConfigurationTest, Merge_002, TestSize.Level1)
373 {
374     AppExecFwk::Configuration config;
375     int displayId = 1001;
376     std::string chinese {"Chinese "};
377     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, chinese);
378 
379 
380     AppExecFwk::Configuration config2;
381     std::string english {"English"};
382     config2.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, english);
383 
384     std::vector<std::string> changeKeyV;
385 
386     config.CompareDifferent(changeKeyV, config2);
387     int size = changeKeyV.size();
388     EXPECT_EQ(size, 1);
389 
390     config.Merge(changeKeyV, config2);
391 
392     auto item = config.GetItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
393     EXPECT_EQ(item, english);
394 }
395 /*
396  * Feature: Configuration
397  * Function: GetName
398  * SubFunction: Process Configuration Change Inner
399  * FunctionPoints: NA
400  * EnvConditions:NA
401  * CaseDescription: Check according to key
402  */
403 HWTEST_F(ConfigurationTest, GetName_001, TestSize.Level1)
404 {
405     AppExecFwk::Configuration config;
406     int displayId = 1001;
407     std::string chinese {"Chinese "};
408     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, chinese);
409 
410     int displayId2 = 1002;
411     std::string english {"English"};
412     config.AddItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, english);
413 
414     auto name = config.GetName();
415     EXPECT_TRUE(name != "");
416     GTEST_LOG_(INFO) << "get name pair ["<<name<<"]";
417 }
418 
419 /*
420  * Feature: Configuration
421  * Function: Assignment structure
422  * SubFunction: Process Configuration Change Inner
423  * FunctionPoints: NA
424  * EnvConditions:NA
425  * CaseDescription: Check according to key
426  */
427 HWTEST_F(ConfigurationTest, structure_001, TestSize.Level1)
428 {
429     AppExecFwk::Configuration config;
430     int displayId = 1001;
431     std::string chinese {"Chinese "};
432     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, chinese);
433 
434     AppExecFwk::Configuration configOther(config);
435     auto item = configOther.GetItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
436     EXPECT_TRUE(item == chinese);
437 
438     AppExecFwk::Configuration configThird;
439     configThird = configOther;
440 
441     auto item2 = configThird.GetItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
442     EXPECT_TRUE(item2 == chinese);
443 
444     AppExecFwk::Configuration configFourth = configThird;
445     auto item3 = configFourth.GetItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
446     EXPECT_TRUE(item3 == chinese);
447 }
448 
449 /**
450  * @tc.name: UpdateConfigToResMgr_001
451  * @tc.desc: Update configuration to resource manager.
452  * @tc.type: FUNC
453  * @tc.require: issueI6CWJD
454  */
455 HWTEST_F(ConfigurationTest, UpdateConfigToResMgr_001, TestSize.Level1)
456 {
457     // init configuration, "en", "dark", "false"
458     AppExecFwk::Configuration configuration;
459     bool addItemRet;
460     addItemRet = configuration.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, "en");
461     EXPECT_EQ(addItemRet, true);
462     addItemRet = configuration.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_COLORMODE, "dark");
463     EXPECT_EQ(addItemRet, true);
464     addItemRet = configuration.AddItem(AAFwk::GlobalConfigurationKey::INPUT_POINTER_DEVICE, "false");
465     EXPECT_EQ(addItemRet, true);
466 
467     // init resource manager, "zh", "light", "true"
468     std::shared_ptr<Global::Resource::ResourceManager> resourceManager(Global::Resource::CreateResourceManager());
469     ASSERT_NE(resourceManager, nullptr);
470     std::unique_ptr<Global::Resource::ResConfig> resConfig(Global::Resource::CreateResConfig());
471     ASSERT_NE(resConfig, nullptr);
472 
473 #ifdef SUPPORT_GRAPHICS
474     UErrorCode status = U_ZERO_ERROR;
475     icu::Locale locale = icu::Locale::forLanguageTag("zh", status);
476     EXPECT_EQ(status, U_ZERO_ERROR);
477     HILOG_INFO("language: %{public}s, script: %{public}s, region: %{public}s", locale.getLanguage(),
478         locale.getScript(), locale.getCountry());
479     resConfig->SetLocaleInfo(locale);
480 #endif
481     resConfig->SetColorMode(ConvertColorMode("light"));
482     resConfig->SetInputDevice(ConvertHasPointerDevice("true"));
483     Global::Resource::RState updateRet = resourceManager->UpdateResConfig(*resConfig);
484     EXPECT_EQ(updateRet, Global::Resource::RState::SUCCESS);
485 
486     // update configuration to resource manager
487     auto configUtils = std::make_shared<AbilityRuntime::ConfigurationUtils>();
488     ASSERT_NE(configUtils, nullptr);
489     configUtils->UpdateConfigToResourceManager(configuration, nullptr);
490     configUtils->UpdateConfigToResourceManager(configuration, resourceManager);
491 
492     // check resource manager has updated to "en", "dark", "false"
493     std::unique_ptr<Global::Resource::ResConfig> updatedResConfig(Global::Resource::CreateResConfig());
494     ASSERT_NE(updatedResConfig, nullptr);
495     resourceManager->GetResConfig(*updatedResConfig);
496 #ifdef SUPPORT_GRAPHICS
497     const icu::Locale *localeInfo = updatedResConfig->GetLocaleInfo();
498     ASSERT_NE(localeInfo, nullptr);
499     HILOG_INFO("language: %{public}s, script: %{public}s, region: %{public}s", localeInfo->getLanguage(),
500         localeInfo->getScript(), localeInfo->getCountry());
501     EXPECT_EQ(strcmp(localeInfo->getLanguage(), "en"), 0);
502 #endif
503     EXPECT_EQ(updatedResConfig->GetColorMode(), ConvertColorMode("dark"));
504     EXPECT_EQ(updatedResConfig->GetInputDevice(), ConvertHasPointerDevice("false"));
505 }
506 }  // namespace AAFwk
507 }  // namespace OHOS
508