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 #include "hilog_tag_wrapper.h"
24 #ifdef SUPPORT_GRAPHICS
25 #include "locale_config.h"
26 #include "window_scene.h"
27 #endif
28 #undef private
29 #undef protected
30 
31 using namespace testing::ext;
32 using namespace OHOS::AppExecFwk;
33 namespace OHOS {
34 namespace AAFwk {
35 class ConfigurationTest : public testing::Test {
36 public:
37     static void SetUpTestCase(void);
38     static void TearDownTestCase(void);
39     void SetUp();
40     void TearDown();
41 
42     void InitResourceManager(std::shared_ptr<Global::Resource::ResourceManager> resourceManager);
43 };
44 
SetUpTestCase(void)45 void ConfigurationTest::SetUpTestCase(void)
46 {}
47 
TearDownTestCase(void)48 void ConfigurationTest::TearDownTestCase(void)
49 {}
50 
SetUp(void)51 void ConfigurationTest::SetUp(void)
52 {}
53 
TearDown(void)54 void ConfigurationTest::TearDown(void)
55 {}
56 
InitResourceManager(std::shared_ptr<Global::Resource::ResourceManager> resourceManager)57 void ConfigurationTest::InitResourceManager(std::shared_ptr<Global::Resource::ResourceManager> resourceManager)
58 {
59     std::unique_ptr<Global::Resource::ResConfig> resConfig(Global::Resource::CreateResConfig());
60     if (resConfig == nullptr) {
61         TAG_LOGE(AAFwkTag::TEST, "res config is invalid.");
62         return;
63     }
64 
65 #ifdef SUPPORT_GRAPHICS
66     UErrorCode status = U_ZERO_ERROR;
67     icu::Locale locale = icu::Locale::forLanguageTag("zh", status);
68     TAG_LOGI(AAFwkTag::TEST, "language: %{public}s, script: %{public}s, region: %{public}s",
69              locale.getLanguage(), locale.getScript(), locale.getCountry());
70     resConfig->SetLocaleInfo(locale);
71 #endif
72     Global::Resource::RState updateRet = resourceManager->UpdateResConfig(*resConfig);
73     if (updateRet != Global::Resource::RState::SUCCESS) {
74         TAG_LOGE(AAFwkTag::TEST, "Init locale failed.");
75     }
76 }
77 
78 /*
79  * Feature: Configuration
80  * Function: AddItem
81  * SubFunction: NA
82  * FunctionPoints: NA
83  * EnvConditions:NA
84  * CaseDescription: Update Configuration
85  */
86 HWTEST_F(ConfigurationTest, AddItem_001, TestSize.Level1)
87 {
88     AppExecFwk::Configuration config;
89     config.RemoveItem(AAFwk::GlobalConfigurationKey::APP_FONT_SIZE_SCALE);
90     int displayId = 1001;
91     std::string val{ "中文" };
92     EXPECT_EQ(0, config.GetItemSize());
93     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
94     EXPECT_EQ(1, config.GetItemSize());
95 
96     // replace
97     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
98     EXPECT_EQ(1, config.GetItemSize());
99 }
100 
101 /*
102  * Feature: Configuration
103  * Function: AddItem
104  * SubFunction: NA
105  * FunctionPoints: NA
106  * EnvConditions:NA
107  * CaseDescription: Update Configuration
108  */
109 HWTEST_F(ConfigurationTest, AddItem_002, TestSize.Level1)
110 {
111     AppExecFwk::Configuration config;
112     config.RemoveItem(AAFwk::GlobalConfigurationKey::APP_FONT_SIZE_SCALE);
113     std::string val{ "中文" };
114     EXPECT_EQ(0, config.GetItemSize());
115     config.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
116     EXPECT_EQ(1, config.GetItemSize());
117 
118     // replace
119     config.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
120     EXPECT_EQ(1, config.GetItemSize());
121 }
122 
123 /*
124  * Feature: Configuration
125  * Function: AddItem
126  * SubFunction: NA
127  * FunctionPoints: NA
128  * EnvConditions:NA
129  * CaseDescription: Update Configuration
130  */
131 HWTEST_F(ConfigurationTest, AddItem_003, TestSize.Level1)
132 {
133     AppExecFwk::Configuration config;
134     config.RemoveItem(AAFwk::GlobalConfigurationKey::APP_FONT_SIZE_SCALE);
135     std::string val{ "中文" };
136     std::string key{ "test_key" };
137     EXPECT_EQ(0, config.GetItemSize());
138     auto ref = config.AddItem(key, val);
139     EXPECT_FALSE(ref);
140 }
141 
142 /*
143  * Feature: Configuration
144  * Function: GetItem
145  * SubFunction: NA
146  * FunctionPoints: NA
147  * EnvConditions:NA
148  * CaseDescription: Process Configuration Change
149  */
150 HWTEST_F(ConfigurationTest, GetItem_001, TestSize.Level1)
151 {
152     AppExecFwk::Configuration config;
153     config.RemoveItem(AAFwk::GlobalConfigurationKey::APP_FONT_SIZE_SCALE);
154     int displayId = 1001;
155     std::string val{ "中文" };
156     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
157 
158     auto item = config.GetItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
159     EXPECT_EQ(item, val);
160 
161     // replace
162     std::string english{ "英文" };
163     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, english);
164     item = config.GetItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
165     EXPECT_EQ(item, english);
166 
167     int displayId2 = 1002;
168     std::string non{ "" };
169     item = config.GetItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
170     EXPECT_EQ(item, non);
171 }
172 
173 /*
174  * Feature: Configuration
175  * Function: GetItem
176  * SubFunction: NA
177  * FunctionPoints: NA
178  * EnvConditions:NA
179  * CaseDescription: Process Configuration Change
180  */
181 HWTEST_F(ConfigurationTest, GetItem_002, TestSize.Level1)
182 {
183     AppExecFwk::Configuration config;
184     config.RemoveItem(AAFwk::GlobalConfigurationKey::APP_FONT_SIZE_SCALE);
185     std::string val{ "中文" };
186     config.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
187 
188     auto item = config.GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
189     EXPECT_EQ(item, val);
190 
191     // replace
192     std::string english{ "英文" };
193     config.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, english);
194     item = config.GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
195     EXPECT_EQ(item, english);
196 
197     int displayId2 = 1002;
198     std::string non{ "" };
199     item = config.GetItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
200     EXPECT_EQ(item, non);
201 }
202 
203 /*
204  * Feature: Configuration
205  * Function: GetItem
206  * SubFunction: NA
207  * FunctionPoints: NA
208  * EnvConditions:NA
209  * CaseDescription: Process Configuration Change
210  */
211 HWTEST_F(ConfigurationTest, GetItem_003, TestSize.Level1)
212 {
213     AppExecFwk::Configuration config;
214     config.RemoveItem(AAFwk::GlobalConfigurationKey::APP_FONT_SIZE_SCALE);
215     std::string non{ "" };
216     auto item = config.GetItem("test_kay");
217     EXPECT_EQ(item, non);
218 }
219 /*
220  * Feature: Configuration
221  * Function: RemoveItem
222  * SubFunction: NA
223  * FunctionPoints: NA
224  * EnvConditions:NA
225  * CaseDescription: Process Configuration Change
226  */
227 HWTEST_F(ConfigurationTest, RemoveItem_001, TestSize.Level1)
228 {
229     AppExecFwk::Configuration config;
230     config.RemoveItem(AAFwk::GlobalConfigurationKey::APP_FONT_SIZE_SCALE);
231     int displayId = 1001;
232     std::string val{ "中文" };
233     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
234 
235     auto item = config.GetItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
236     EXPECT_EQ(item, val);
237 
238     // remove it
239     bool canRemove = config.RemoveItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
240     EXPECT_TRUE(canRemove);
241 
242     std::string non{ "" };
243     item = config.GetItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
244     EXPECT_EQ(item, non);
245 
246     canRemove = config.RemoveItem(displayId, non);
247     EXPECT_FALSE(canRemove);
248 
249     int displayId2 = 1002;
250     canRemove = config.RemoveItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
251     EXPECT_FALSE(canRemove);
252 }
253 
254 /*
255  * Feature: Configuration
256  * Function: RemoveItem
257  * SubFunction: NA
258  * FunctionPoints: NA
259  * EnvConditions:NA
260  * CaseDescription: Process Configuration Change
261  */
262 HWTEST_F(ConfigurationTest, RemoveItem_002, TestSize.Level1)
263 {
264     AppExecFwk::Configuration config;
265     config.RemoveItem(AAFwk::GlobalConfigurationKey::APP_FONT_SIZE_SCALE);
266     std::string val{ "中文" };
267     config.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
268 
269     auto item = config.GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
270     EXPECT_EQ(item, val);
271 
272     // remove it
273     bool canRemove = config.RemoveItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
274     EXPECT_TRUE(canRemove);
275 
276     std::string non{ "" };
277     item = config.GetItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
278     EXPECT_EQ(item, non);
279 
280     canRemove = config.RemoveItem(non);
281     EXPECT_FALSE(canRemove);
282 
283     canRemove = config.RemoveItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
284     EXPECT_FALSE(canRemove);
285 }
286 
287 /*
288  * Feature: Configuration
289  * Function: GetItemSize
290  * SubFunction: Process Configuration Change Inner
291  * FunctionPoints: NA
292  * EnvConditions:NA
293  * CaseDescription: Process Configuration Change Inner
294  */
295 HWTEST_F(ConfigurationTest, GetItemSize_001, TestSize.Level1)
296 {
297     AppExecFwk::Configuration config;
298     config.RemoveItem(AAFwk::GlobalConfigurationKey::APP_FONT_SIZE_SCALE);
299     int displayId = 1001;
300     std::string val{ "中文" };
301     EXPECT_EQ(0, config.GetItemSize());
302     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
303     EXPECT_EQ(1, config.GetItemSize());
304 
305     int displayId2 = 1002;
306     config.AddItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
307     EXPECT_EQ(2, config.GetItemSize());
308 }
309 
310 /*
311  * Feature: Configuration
312  * Function: CompareDifferent
313  * SubFunction: Process Configuration Change Inner
314  * FunctionPoints: NA
315  * EnvConditions:NA
316  * CaseDescription: Check according to key
317  */
318 HWTEST_F(ConfigurationTest, CompareDifferent_001, TestSize.Level1)
319 {
320     AppExecFwk::Configuration config;
321     int displayId = 1001;
322     std::string val{ "中文" };
323     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
324 
325 
326     AppExecFwk::Configuration config2;
327     int displayId2 = 1001;
328     std::string English{ "英文" };
329     config2.AddItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, English);
330 
331     std::vector<std::string> changeKeyV;
332 
333     config.CompareDifferent(changeKeyV, config2);
334     int size = changeKeyV.size();
335     EXPECT_EQ(size, 1);
336 }
337 
338 /*
339  * Feature: Configuration
340  * Function: CompareDifferent
341  * SubFunction: Process Configuration Change Inner
342  * FunctionPoints: NA
343  * EnvConditions:NA
344  * CaseDescription: Check according to key
345  */
346 HWTEST_F(ConfigurationTest, CompareDifferent_002, TestSize.Level1)
347 {
348     AppExecFwk::Configuration config;
349     int displayId = 1001;
350     std::string val{ "中文" };
351     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
352 
353 
354     AppExecFwk::Configuration config2;
355     int displayId2 = 1002;
356     std::string English{ "英文" };
357     config2.AddItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, English);
358 
359     std::vector<std::string> changeKeyV;
360 
361     config.CompareDifferent(changeKeyV, config2);
362     int size = changeKeyV.size();
363     EXPECT_EQ(size, 1);
364 }
365 
366 /*
367  * Feature: Configuration
368  * Function: Merge
369  * SubFunction: Process Configuration Change Inner
370  * FunctionPoints: NA
371  * EnvConditions:NA
372  * CaseDescription: Check according to key
373  */
374 HWTEST_F(ConfigurationTest, Merge_001, TestSize.Level1)
375 {
376     AppExecFwk::Configuration config;
377     int displayId = 1001;
378     std::string val{ "中文" };
379     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, val);
380 
381 
382     AppExecFwk::Configuration config2;
383     int displayId2 = 1002;
384     std::string English{ "英文" };
385     config2.AddItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, English);
386 
387     std::vector<std::string> changeKeyV;
388 
389     config.CompareDifferent(changeKeyV, config2);
390     int size = changeKeyV.size();
391     EXPECT_EQ(size, 1);
392 
393     config.Merge(changeKeyV, config2);
394 
395     auto item = config.GetItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
396     EXPECT_EQ(item, English);
397 }
398 
399 /*
400  * Feature: Configuration
401  * Function: Merge
402  * SubFunction: Process Configuration Change Inner
403  * FunctionPoints: NA
404  * EnvConditions:NA
405  * CaseDescription: Check according to key
406  */
407 HWTEST_F(ConfigurationTest, Merge_002, TestSize.Level1)
408 {
409     AppExecFwk::Configuration config;
410     int displayId = 1001;
411     std::string chinese{ "Chinese " };
412     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, chinese);
413 
414 
415     AppExecFwk::Configuration config2;
416     std::string english{ "English" };
417     config2.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, english);
418 
419     std::vector<std::string> changeKeyV;
420 
421     config.CompareDifferent(changeKeyV, config2);
422     int size = changeKeyV.size();
423     EXPECT_EQ(size, 1);
424 
425     config.Merge(changeKeyV, config2);
426 
427     auto item = config.GetItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
428     EXPECT_EQ(item, english);
429 }
430 /*
431  * Feature: Configuration
432  * Function: GetName
433  * SubFunction: Process Configuration Change Inner
434  * FunctionPoints: NA
435  * EnvConditions:NA
436  * CaseDescription: Check according to key
437  */
438 HWTEST_F(ConfigurationTest, GetName_001, TestSize.Level1)
439 {
440     AppExecFwk::Configuration config;
441     int displayId = 1001;
442     std::string chinese{ "Chinese " };
443     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, chinese);
444 
445     int displayId2 = 1002;
446     std::string english{ "English" };
447     config.AddItem(displayId2, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, english);
448 
449     auto name = config.GetName();
450     EXPECT_TRUE(name != "");
451     GTEST_LOG_(INFO) << "get name pair [" << name << "]";
452 }
453 
454 /*
455  * Feature: Configuration
456  * Function: Assignment structure
457  * SubFunction: Process Configuration Change Inner
458  * FunctionPoints: NA
459  * EnvConditions:NA
460  * CaseDescription: Check according to key
461  */
462 HWTEST_F(ConfigurationTest, structure_001, TestSize.Level1)
463 {
464     AppExecFwk::Configuration config;
465     int displayId = 1001;
466     std::string chinese{ "Chinese " };
467     config.AddItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, chinese);
468 
469     AppExecFwk::Configuration configOther(config);
470     auto item = configOther.GetItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
471     EXPECT_TRUE(item == chinese);
472 
473     AppExecFwk::Configuration configThird;
474     configThird = configOther;
475 
476     auto item2 = configThird.GetItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
477     EXPECT_TRUE(item2 == chinese);
478 
479     AppExecFwk::Configuration configFourth = configThird;
480     auto item3 = configFourth.GetItem(displayId, AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE);
481     EXPECT_TRUE(item3 == chinese);
482 }
483 
484 /**
485  * @tc.name: UpdateConfigToResMgr_001
486  * @tc.desc: Update configuration to resource manager.
487  * @tc.type: FUNC
488  * @tc.require: issueI6CWJD
489  */
490 HWTEST_F(ConfigurationTest, UpdateConfigToResMgr_001, TestSize.Level1)
491 {
492     // init configuration, "en", "dark", "false"
493     AppExecFwk::Configuration configuration;
494     bool addItemRet;
495     addItemRet = configuration.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_LANGUAGE, "en");
496     EXPECT_EQ(addItemRet, true);
497     addItemRet = configuration.AddItem(AAFwk::GlobalConfigurationKey::SYSTEM_COLORMODE, "dark");
498     EXPECT_EQ(addItemRet, true);
499     addItemRet = configuration.AddItem(AAFwk::GlobalConfigurationKey::INPUT_POINTER_DEVICE, "false");
500     EXPECT_EQ(addItemRet, true);
501 
502     // init resource manager, "zh", "light", "true"
503     std::shared_ptr<Global::Resource::ResourceManager> resourceManager(Global::Resource::CreateResourceManager());
504     ASSERT_NE(resourceManager, nullptr);
505     std::unique_ptr<Global::Resource::ResConfig> resConfig(Global::Resource::CreateResConfig());
506     ASSERT_NE(resConfig, nullptr);
507 
508 #ifdef SUPPORT_GRAPHICS
509     UErrorCode status = U_ZERO_ERROR;
510     icu::Locale locale = icu::Locale::forLanguageTag("zh", status);
511     EXPECT_EQ(status, U_ZERO_ERROR);
512     TAG_LOGI(AAFwkTag::TEST, "language: %{public}s, script: %{public}s, region: %{public}s",
513              locale.getLanguage(), locale.getScript(), locale.getCountry());
514     resConfig->SetLocaleInfo(locale);
515 #endif
516     resConfig->SetColorMode(ConvertColorMode("light"));
517     resConfig->SetInputDevice(ConvertHasPointerDevice("true"));
518     Global::Resource::RState updateRet = resourceManager->UpdateResConfig(*resConfig);
519     EXPECT_EQ(updateRet, Global::Resource::RState::SUCCESS);
520 
521     // update configuration to resource manager
522     auto configUtils = std::make_shared<AbilityRuntime::ConfigurationUtils>();
523     ASSERT_NE(configUtils, nullptr);
524     configUtils->UpdateGlobalConfig(configuration, nullptr);
525     configUtils->UpdateGlobalConfig(configuration, resourceManager);
526 
527     // check resource manager has updated to "en", "dark", "false"
528     std::unique_ptr<Global::Resource::ResConfig> updatedResConfig(Global::Resource::CreateResConfig());
529     ASSERT_NE(updatedResConfig, nullptr);
530     resourceManager->GetResConfig(*updatedResConfig);
531 #ifdef SUPPORT_GRAPHICS
532     const icu::Locale *localeInfo = updatedResConfig->GetLocaleInfo();
533     ASSERT_NE(localeInfo, nullptr);
534     TAG_LOGI(AAFwkTag::TEST, "language: %{public}s, script: %{public}s, region: %{public}s",
535              localeInfo->getLanguage(), localeInfo->getScript(), localeInfo->getCountry());
536     EXPECT_EQ(strcmp(localeInfo->getLanguage(), "en"), 0);
537 #endif
538     EXPECT_EQ(updatedResConfig->GetColorMode(), ConvertColorMode("dark"));
539     EXPECT_EQ(updatedResConfig->GetInputDevice(), ConvertHasPointerDevice("false"));
540 }
541 
542 /**
543  * @tc.name: InitDisplayConfig_0100
544  * @tc.desc: Init display config.
545  * @tc.type: FUNC
546  * @tc.require: issueI7HPHB
547  */
548 HWTEST_F(ConfigurationTest, InitDisplayConfig_0100, TestSize.Level1)
549 {
550     auto configUtils = std::make_shared<AbilityRuntime::ConfigurationUtils>();
551     ASSERT_NE(configUtils, nullptr);
552 
553     int displayId = Rosen::WindowScene::DEFAULT_DISPLAY_ID;
554     float originDensity;
555     std::string originDirection;
556     auto ret = configUtils->GetDisplayConfig(displayId, originDensity, originDirection);
557     EXPECT_EQ(ret, true);
558 
559     configUtils->InitDisplayConfig(displayId, nullptr, nullptr);
560 
561     AppExecFwk::Configuration originConfig;
562     auto configuration = std::make_shared<Configuration>(originConfig);
563     ASSERT_NE(configuration, nullptr);
564     configUtils->InitDisplayConfig(displayId, configuration, nullptr);
565 
566     std::shared_ptr<Global::Resource::ResourceManager> resourceManager(Global::Resource::CreateResourceManager());
567     ASSERT_NE(resourceManager, nullptr);
568     InitResourceManager(resourceManager);
569     configUtils->InitDisplayConfig(displayId, configuration, resourceManager);
570 
571     // check configurtion
572     std::string displayIdStr = configuration->GetItem(ConfigurationInner::APPLICATION_DISPLAYID);
573     EXPECT_EQ(displayIdStr, std::to_string(displayId));
574     std::string densityStr = configuration->GetItem(displayId, ConfigurationInner::APPLICATION_DENSITYDPI);
575     EXPECT_EQ(densityStr, GetDensityStr(originDensity));
576     std::string directionStr = configuration->GetItem(displayId, ConfigurationInner::APPLICATION_DIRECTION);
577     EXPECT_EQ(directionStr, originDirection);
578 
579     // check resourcemanager
580     std::unique_ptr<Global::Resource::ResConfig> resConfig(Global::Resource::CreateResConfig());
581     resourceManager->GetResConfig(*resConfig);
582     EXPECT_EQ(originDensity, resConfig->GetScreenDensity());
583     EXPECT_EQ(ConvertDirection(originDirection), resConfig->GetDirection());
584 }
585 
586 /**
587  * @tc.name: UpdateDisplayConfig_0100
588  * @tc.desc: Update display config with changed config.
589  * @tc.type: FUNC
590  * @tc.require: issueI7HPHB
591  */
592 HWTEST_F(ConfigurationTest, UpdateDisplayConfig_0100, TestSize.Level1)
593 {
594     auto configUtils = std::make_shared<AbilityRuntime::ConfigurationUtils>();
595     ASSERT_NE(configUtils, nullptr);
596 
597     int displayId = Rosen::WindowScene::DEFAULT_DISPLAY_ID;
598     float originDensity;
599     std::string originDirection;
600     auto ret = configUtils->GetDisplayConfig(displayId, originDensity, originDirection);
601     EXPECT_EQ(ret, true);
602 
603     bool configChanged;
604     configUtils->UpdateDisplayConfig(displayId, nullptr, nullptr, configChanged);
605 
606     AppExecFwk::Configuration originConfig;
607     auto configuration = std::make_shared<Configuration>(originConfig);
608     ASSERT_NE(configuration, nullptr);
609     configUtils->UpdateDisplayConfig(displayId, configuration, nullptr, configChanged);
610 
611     std::shared_ptr<Global::Resource::ResourceManager> resourceManager(Global::Resource::CreateResourceManager());
612     ASSERT_NE(resourceManager, nullptr);
613     InitResourceManager(resourceManager);
614     configUtils->UpdateDisplayConfig(displayId, configuration, resourceManager, configChanged);
615     EXPECT_EQ(configChanged, true);
616 
617     // check configurtion
618     std::string densityStr = configuration->GetItem(displayId, ConfigurationInner::APPLICATION_DENSITYDPI);
619     EXPECT_EQ(densityStr, GetDensityStr(originDensity));
620     std::string directionStr = configuration->GetItem(displayId, ConfigurationInner::APPLICATION_DIRECTION);
621     EXPECT_EQ(directionStr, originDirection);
622 
623     // check resourcemanager
624     std::unique_ptr<Global::Resource::ResConfig> resConfig(Global::Resource::CreateResConfig());
625     resourceManager->GetResConfig(*resConfig);
626     EXPECT_EQ(originDensity, resConfig->GetScreenDensity());
627     EXPECT_EQ(ConvertDirection(originDirection), resConfig->GetDirection());
628 }
629 
630 /**
631  * @tc.name: UpdateDisplayConfig_0200
632  * @tc.desc: Update display config with unchanged config.
633  * @tc.type: FUNC
634  * @tc.require: issueI7HPHB
635  */
636 HWTEST_F(ConfigurationTest, UpdateDisplayConfig_0200, TestSize.Level1)
637 {
638     auto configUtils = std::make_shared<AbilityRuntime::ConfigurationUtils>();
639     ASSERT_NE(configUtils, nullptr);
640 
641     int displayId = Rosen::WindowScene::DEFAULT_DISPLAY_ID;
642     float originDensity;
643     std::string originDirection;
644     auto ret = configUtils->GetDisplayConfig(displayId, originDensity, originDirection);
645     EXPECT_EQ(ret, true);
646 
647     bool configChanged;
648     configUtils->UpdateDisplayConfig(displayId, nullptr, nullptr, configChanged);
649 
650     AppExecFwk::Configuration originConfig;
651     auto configuration = std::make_shared<Configuration>(originConfig);
652     ASSERT_NE(configuration, nullptr);
653     configUtils->UpdateDisplayConfig(displayId, configuration, nullptr, configChanged);
654 
655     // Add configuration.
656     configuration->AddItem(displayId, ConfigurationInner::APPLICATION_DENSITYDPI, GetDensityStr(originDensity));
657     configuration->AddItem(displayId, ConfigurationInner::APPLICATION_DIRECTION, originDirection);
658     configuration->AddItem(ConfigurationInner::APPLICATION_DISPLAYID, std::to_string(displayId));
659 
660     std::shared_ptr<Global::Resource::ResourceManager> resourceManager(Global::Resource::CreateResourceManager());
661     ASSERT_NE(resourceManager, nullptr);
662     configUtils->UpdateDisplayConfig(displayId, configuration, resourceManager, configChanged);
663     EXPECT_EQ(configChanged, false);
664 }
665 } // namespace AAFwk
666 } // namespace OHOS
667