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