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