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