1 /*
2 * Copyright (c) 2021-2022 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
18 #include "base/test/mock/mock_asset_manager.h"
19 #include "core/components/test/unittest/mock/mock_render_common.h"
20 #define private public
21 #define protected public
22 #include "bridge/card_frontend/card_frontend.h"
23 #include "bridge/card_frontend/js_card_parser.h"
24 #undef private
25 #undef protected
26 #include "base/test/mock/mock_task_executor.h"
27 #include "bridge/common/utils/utils.h"
28
29 using namespace testing;
30 using namespace testing::ext;
31
32 namespace OHOS::Ace::Framework {
33 namespace {
34 constexpr int32_t COMMAND_SIZE = 1;
35 constexpr int32_t DEVICE_WIDTH = 720;
36 constexpr int32_t DEVICE_HEIGHT = 1280;
37 constexpr double_t DENSITY = 1.5;
38 } // namespace
39
40 class CardFrontendTest : public testing::Test {
41 public:
42 static void SetUpTestCase();
43 static void TearDownTestCase();
44 void SetUp() override;
45 void TearDown() override;
46 };
47
SetUpTestCase()48 void CardFrontendTest::SetUpTestCase() {}
TearDownTestCase()49 void CardFrontendTest::TearDownTestCase() {}
SetUp()50 void CardFrontendTest::SetUp()
51 {
52 SystemProperties::SetColorMode(ColorMode::LIGHT);
53 }
TearDown()54 void CardFrontendTest::TearDown() {}
55
56 /**
57 * @tc.name: CardFrontendTest001
58 * @tc.desc: Test data binding.
59 * @tc.type: FUNC
60 */
61 HWTEST_F(CardFrontendTest, CardFrontendTest001, TestSize.Level1)
62 {
63 /**
64 * @tc.steps: step1. construct json string.
65 */
66 const std::string rootJson = "{\n"
67 "\t\"template\": {\n"
68 "\t\t\"attr\": {\n"
69 "\t\t\t\"value\": \"{{variable}}\"\n"
70 "\t\t},\n"
71 "\t\t\"type\": \"text\",\n"
72 "\t\t\"shown\": \"{{show}}\"\n"
73 "\t},\n"
74 "\t\"styles\": {},\n"
75 "\t\"actions\": {},\n"
76 "\t\"data\": {\n"
77 "\t\t\"show\": false,\n"
78 "\t\t\"variable\": \"hello!\"\n"
79 "\t}\n"
80 "}";
81 auto rootBody = JsonUtil::ParseJsonString(rootJson);
82 auto rootTemplate = rootBody->GetValue("template");
83 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
84 jsCardParser->Initialize();
85 auto document = AceType::MakeRefPtr<DOMDocument>(1);
86 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
87 jsCardParser->CreateDomNode(page, rootTemplate, -1);
88 auto shown = rootTemplate->GetValue("shown");
89 auto shownValue = shown->GetString();
90 int32_t nodeId = 1;
91
92 /**
93 * @tc.steps: step2. Get the value of the shown attribute.
94 * @tc.expected: step2. shown value is false.
95 */
96 jsCardParser->GetShownValue(shownValue);
97 ASSERT_TRUE(shownValue == "false");
98
99 /**
100 * @tc.steps: step3. Get the value of the attribute.
101 * @tc.expected: step3. Property value is correct.
102 */
103 std::vector<std::pair<std::string, std::string>> attrs;
104 auto type = rootTemplate->GetValue("type")->GetString();
105 RefPtr<Framework::JsCommandDomElementCreator> command =
106 Referenced::MakeRefPtr<Framework::JsCommandAddDomElement>(type, nodeId, 0);
107 auto ptr = Referenced::RawPtr(command);
108 jsCardParser->ParseAttributes(rootTemplate, nodeId, attrs, (Framework::JsCommandDomElementOperator*)ptr);
109 ASSERT_TRUE(attrs.size() == COMMAND_SIZE);
110 ASSERT_TRUE(attrs[0].first == "value" && attrs[0].second == "hello!");
111 }
112
113 /**
114 * @tc.name: CardFrontendTest002
115 * @tc.desc: Test data binding.
116 * @tc.type: FUNC
117 */
118 HWTEST_F(CardFrontendTest, CardFrontendTest002, TestSize.Level1)
119 {
120 /**
121 * @tc.steps: step1. construct json string.
122 */
123 const std::string rootJson = "{\n"
124 "\t\"template\": {\n"
125 "\t\t\"attr\": {\n"
126 "\t\t\t\"value\": \"{{}}\"\n"
127 "\t\t},\n"
128 "\t\t\"type\": \"text\",\n"
129 "\t\t\"shown\": \"{{}\"\n"
130 "\t},\n"
131 "\t\"styles\": {},\n"
132 "\t\"actions\": {},\n"
133 "\t\"data\": {}\n"
134 "}";
135 auto rootBody = JsonUtil::ParseJsonString(rootJson);
136 auto rootTemplate = rootBody->GetValue("template");
137 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
138 jsCardParser->Initialize();
139 auto document = AceType::MakeRefPtr<DOMDocument>(1);
140 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
141 jsCardParser->CreateDomNode(page, rootTemplate, -1);
142
143 /**
144 * @tc.steps: step2. Get the value of the shown attribute.
145 * @tc.expected: step2. shown value is not true.
146 */
147 auto shown = rootTemplate->GetValue("shown");
148 auto shownValue = shown->GetString();
149 int32_t nodeId = 1;
150 jsCardParser->GetShownValue(shownValue);
151 ASSERT_TRUE(shownValue != "true");
152
153 /**
154 * @tc.steps: step3. Get the value of the attribute.
155 * @tc.expected: step3. Property value is "{{}}".
156 */
157 std::vector<std::pair<std::string, std::string>> attrs;
158 auto type = rootTemplate->GetValue("type")->GetString();
159 RefPtr<Framework::JsCommandDomElementCreator> command =
160 Referenced::MakeRefPtr<Framework::JsCommandAddDomElement>(type, nodeId, 0);
161 auto ptr = Referenced::RawPtr(command);
162 jsCardParser->ParseAttributes(rootTemplate, nodeId, attrs, (Framework::JsCommandDomElementOperator*)ptr);
163 ASSERT_TRUE(attrs.size() == COMMAND_SIZE);
164 ASSERT_TRUE(attrs[0].first == "value" && attrs[0].second == "{{}}");
165 }
166
167 /**
168 * @tc.name: CardFrontendTest003
169 * @tc.desc: Test data binding.
170 * @tc.type: FUNC
171 */
172 HWTEST_F(CardFrontendTest, CardFrontendTest003, TestSize.Level1)
173 {
174 /**
175 * @tc.steps: step1. construct json string.
176 */
177 const std::string rootJson = "{\n"
178 "\t\"template\": {\n"
179 "\t\t\"attr\": {},\n"
180 "\t\t\"type\": \"text\",\n"
181 "\t\t\"style\": {\n"
182 "\t\t\t\"color\": \"{{{variable}}\",\n"
183 "\t\t\t\"strokeColor\": \"{{variable}}\"\n"
184 "\t\t}\n"
185 "\t},\n"
186 "\t\"styles\": {},\n"
187 "\t\"actions\": {},\n"
188 "\t\"data\": {\n"
189 "\t\t\"variable\": \"0xffffff\"\n"
190 "\t}\n"
191 "}";
192 auto rootBody = JsonUtil::ParseJsonString(rootJson);
193 auto rootTemplate = rootBody->GetValue("template");
194 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
195 jsCardParser->Initialize();
196 auto document = AceType::MakeRefPtr<DOMDocument>(1);
197 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
198 jsCardParser->CreateDomNode(page, rootTemplate, -1);
199
200 /**
201 * @tc.steps: step2. Get the value of the style.
202 * @tc.expected: step2. The style value meets expectations.
203 */
204 int32_t nodeId = 1;
205 std::vector<std::pair<std::string, std::string>> styles;
206 auto type = rootTemplate->GetValue("type")->GetString();
207 jsCardParser->ParseStyles(rootTemplate, nodeId, styles);
208 ASSERT_TRUE(styles.size() == 2);
209 ASSERT_TRUE(styles[0].first == "color" && styles[0].second == "{{{variable}}");
210 ASSERT_TRUE(styles[1].first == "strokeColor" && styles[1].second == "0xffffff");
211 }
212
213 /**
214 * @tc.name: CardFrontendTest004
215 * @tc.desc: Test condition rendering.
216 * @tc.type: FUNC
217 */
218 HWTEST_F(CardFrontendTest, CardFrontendTest004, TestSize.Level1)
219 {
220 /**
221 * @tc.steps: step1. construct json string.
222 */
223 const std::string rootJson = "{\n"
224 "\t\"template\": {\n"
225 "\t\t\"attr\": {},\n"
226 "\t\t\"type\": \"text\",\n"
227 "\t\t\"shown\": \"{{show}} && {{display}}\"\n"
228 "\t},\n"
229 "\t\"styles\": {},\n"
230 "\t\"actions\": {},\n"
231 "\t\"data\": {\n"
232 "\t\t\"display\": true,\n"
233 "\t\t\"show\": false\n"
234 "\t}\n"
235 "}";
236 auto rootBody = JsonUtil::ParseJsonString(rootJson);
237 auto rootTemplate = rootBody->GetValue("template");
238 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
239 jsCardParser->Initialize();
240 auto document = AceType::MakeRefPtr<DOMDocument>(1);
241 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
242 jsCardParser->CreateDomNode(page, rootTemplate, -1);
243
244 /**
245 * @tc.steps: step2. Get the value of the shown.
246 * @tc.expected: step2. The shown value meets expectations.
247 */
248 auto shown = rootTemplate->GetValue("shown");
249 auto shownValue = shown->GetString();
250 jsCardParser->GetShownValue(shownValue);
251 ASSERT_TRUE(shownValue == "false");
252 }
253
254 /**
255 * @tc.name: CardFrontendTest005
256 * @tc.desc: Test condition rendering.
257 * @tc.type: FUNC
258 */
259 HWTEST_F(CardFrontendTest, CardFrontendTest005, TestSize.Level1)
260 {
261 /**
262 * @tc.steps: step1. construct json string.
263 */
264 const std::string rootJson = "{\n"
265 "\t\"template\": {\n"
266 "\t\t\"attr\": {},\n"
267 "\t\t\"type\": \"text\",\n"
268 "\t\t\"shown\": \"{{show}} && !{{display}}\"\n"
269 "\t},\n"
270 "\t\"styles\": {},\n"
271 "\t\"actions\": {},\n"
272 "\t\"data\": {\n"
273 "\t\t\"display\": false,\n"
274 "\t\t\"show\": false\n"
275 "\t}\n"
276 "}";
277 auto rootBody = JsonUtil::ParseJsonString(rootJson);
278 auto rootTemplate = rootBody->GetValue("template");
279 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
280 jsCardParser->Initialize();
281 auto document = AceType::MakeRefPtr<DOMDocument>(1);
282 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
283 jsCardParser->CreateDomNode(page, rootTemplate, -1);
284
285 /**
286 * @tc.steps: step2. Get the value of the shown.
287 * @tc.expected: step2. The shown value meets expectations.
288 */
289 auto shown = rootTemplate->GetValue("shown");
290 auto shownValue = shown->GetString();
291 jsCardParser->GetShownValue(shownValue);
292 ASSERT_TRUE(shownValue == "false");
293 }
294
295 /**
296 * @tc.name: CardFrontendTest006
297 * @tc.desc: Test condition rendering.
298 * @tc.type: FUNC
299 */
300 HWTEST_F(CardFrontendTest, CardFrontendTest006, TestSize.Level1)
301 {
302 /**
303 * @tc.steps: step1. construct json string.
304 */
305 const std::string rootJson = "{\n"
306 "\t\"template\": {\n"
307 "\t\t\"attr\": {},\n"
308 "\t\t\"type\": \"text\",\n"
309 "\t\t\"shown\": \"!{{show}} && !{{display}}\"\n"
310 "\t},\n"
311 "\t\"styles\": {},\n"
312 "\t\"actions\": {},\n"
313 "\t\"data\": {\n"
314 "\t\t\"display\": false,\n"
315 "\t\t\"show\": false\n"
316 "\t}\n"
317 "}";
318 auto rootBody = JsonUtil::ParseJsonString(rootJson);
319 auto rootTemplate = rootBody->GetValue("template");
320 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
321 jsCardParser->Initialize();
322 auto document = AceType::MakeRefPtr<DOMDocument>(1);
323 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
324 jsCardParser->CreateDomNode(page, rootTemplate, -1);
325
326 /**
327 * @tc.steps: step2. Get the value of the shown.
328 * @tc.expected: step2. The shown value meets expectations.
329 */
330 auto shown = rootTemplate->GetValue("shown");
331 auto shownValue = shown->GetString();
332 jsCardParser->GetShownValue(shownValue);
333 ASSERT_TRUE(shownValue == "true");
334 }
335
336 /**
337 * @tc.name: CardFrontendTest007
338 * @tc.desc: Test condition rendering.
339 * @tc.type: FUNC
340 */
341 HWTEST_F(CardFrontendTest, CardFrontendTest007, TestSize.Level1)
342 {
343 /**
344 * @tc.steps: step1. construct json string.
345 */
346 const std::string rootJson = "{\n"
347 "\t\"template\": {\n"
348 "\t\t\"attr\": {},\n"
349 "\t\t\"type\": \"text\",\n"
350 "\t\t\"shown\": \"{{show}} && {{xdisplay}}\"\n"
351 "\t},\n"
352 "\t\"styles\": {},\n"
353 "\t\"actions\": {},\n"
354 "\t\"data\": {\n"
355 "\t\t\"display\": true,\n"
356 "\t\t\"show\": true\n"
357 "\t}\n"
358 "}";
359 auto rootBody = JsonUtil::ParseJsonString(rootJson);
360 auto rootTemplate = rootBody->GetValue("template");
361 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
362 jsCardParser->Initialize();
363 auto document = AceType::MakeRefPtr<DOMDocument>(1);
364 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
365 jsCardParser->CreateDomNode(page, rootTemplate, -1);
366
367 /**
368 * @tc.steps: step2. Get the value of the shown.
369 * @tc.expected: step2. The shown value meets expectations.
370 */
371 auto shown = rootTemplate->GetValue("shown");
372 auto shownValue = shown->GetString();
373 jsCardParser->GetShownValue(shownValue);
374 ASSERT_TRUE(shownValue != "true");
375 }
376
377 /**
378 * @tc.name: CardFrontendTest008
379 * @tc.desc: Test "repeat" attr: for = "{{list}}".
380 * @tc.type: FUNC
381 */
382 HWTEST_F(CardFrontendTest, CardFrontendTest008, TestSize.Level1)
383 {
384 /**
385 * @tc.steps: step1. construct json string.
386 */
387 const std::string rootJson = "{\n"
388 "\t\"template\": {\n"
389 "\t\t\"attr\": {},\n"
390 "\t\t\"type\": \"text\",\n"
391 "\t\t\"repeat\": \"{{list}}\"\n"
392 "\t},\n"
393 "\t\"styles\": {},\n"
394 "\t\"actions\": {},\n"
395 "\t\"data\": {\n"
396 "\t\t\"list\": [\n"
397 "\t\t\t{\n"
398 "\t\t\t\t\"name\": \"aa\",\n"
399 "\t\t\t\t\"idx\": 1\n"
400 "\t\t\t},\n"
401 "\t\t\t{\n"
402 "\t\t\t\t\"name\": \"bb\",\n"
403 "\t\t\t\t\"idx\": 2\n"
404 "\t\t\t},\n"
405 "\t\t\t{\n"
406 "\t\t\t\t\"name\": \"cc\",\n"
407 "\t\t\t\t\"idx\": 1\n"
408 "\t\t\t}\n"
409 "\t\t]\n"
410 "\t}\n"
411 "}";
412 auto rootBody = JsonUtil::ParseJsonString(rootJson);
413 auto rootTemplate = rootBody->GetValue("template");
414 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
415 jsCardParser->Initialize();
416 auto document = AceType::MakeRefPtr<DOMDocument>(1);
417 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
418 jsCardParser->CreateDomNode(page, rootTemplate, -1);
419
420 /**
421 * @tc.steps: step2. Get the value of the repeat.
422 * @tc.expected: step2. The repeat value meets expectations.
423 */
424 auto repeatValue = rootTemplate->GetValue("repeat");
425 std::string key;
426 jsCardParser->GetRepeatData(repeatValue, key);
427
428 ASSERT_EQ(repeatValue->GetArraySize(), 3);
429 auto item = repeatValue->GetChild();
430 auto itemName = item->GetValue("name")->GetString();
431 auto itemIndex = item->GetValue("idx")->GetInt();
432 ASSERT_EQ(itemName, "aa");
433 ASSERT_EQ(itemIndex, 1);
434 }
435
436 /**
437 * @tc.name: CardFrontendTest009
438 * @tc.desc: Test "repeat" attr: for = "value in list".
439 * @tc.type: FUNC
440 */
441 HWTEST_F(CardFrontendTest, CardFrontendTest009, TestSize.Level1)
442 {
443 /**
444 * @tc.steps: step1. construct json string.
445 */
446 const std::string rootJson = "{\n"
447 "\t\"template\": {\n"
448 "\t\t\"attr\": {\n"
449 "\t\t\t\"value\": \"{{item.name}}\",\n"
450 "\t\t\t\"index\": \"{{item.idx}}\"\n"
451 "\t\t},\n"
452 "\t\t\"type\": \"text\",\n"
453 "\t\t\"repeat\": {\n"
454 "\t\t\t\"exp\": \"{{list}}\",\n"
455 "\t\t\t\"value\": \"item\"\n"
456 "\t\t}\n"
457 "\t},\n"
458 "\t\"styles\": {},\n"
459 "\t\"actions\": {},\n"
460 "\t\"data\": {\n"
461 "\t\t\"list\": [\n"
462 "\t\t\t{\n"
463 "\t\t\t\t\"name\": \"aa\",\n"
464 "\t\t\t\t\"idx\": 1\n"
465 "\t\t\t},\n"
466 "\t\t\t{\n"
467 "\t\t\t\t\"name\": \"bb\",\n"
468 "\t\t\t\t\"idx\": 2\n"
469 "\t\t\t},\n"
470 "\t\t\t{\n"
471 "\t\t\t\t\"name\": \"cc\",\n"
472 "\t\t\t\t\"idx\": 1\n"
473 "\t\t\t}\n"
474 "\t\t]\n"
475 "\t}\n"
476 "}";
477 auto rootBody = JsonUtil::ParseJsonString(rootJson);
478 auto rootTemplate = rootBody->GetValue("template");
479 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
480 jsCardParser->Initialize();
481 jsCardParser->SetIsRepeat(true);
482 auto document = AceType::MakeRefPtr<DOMDocument>(1);
483 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
484 jsCardParser->CreateDomNode(page, rootTemplate, -1);
485
486 /**
487 * @tc.steps: step2. Get the value of the repeat and parse data.
488 */
489 auto repeatValue = rootTemplate->GetValue("repeat");
490 jsCardParser->ParseRepeatIndexItem(repeatValue);
491 auto expValue = repeatValue->GetValue("exp");
492 std::string key;
493 jsCardParser->GetRepeatData(expValue, key);
494 jsCardParser->SetRepeatItemValue(0, expValue, true);
495
496 /**
497 * @tc.steps: step3. Parse repeat attr and assert value of repeat.
498 * @tc.expected: step3. The repeat value meets expectations.
499 */
500 std::vector<std::pair<std::string, std::string>> attrs;
501 auto type = rootTemplate->GetValue("type")->GetString();
502 RefPtr<Framework::JsCommandDomElementCreator> command =
503 Referenced::MakeRefPtr<Framework::JsCommandAddDomElement>(type, 1, 0);
504 auto ptr = Referenced::RawPtr(command);
505 jsCardParser->ParseAttributes(rootTemplate, 1, attrs, (Framework::JsCommandDomElementOperator*)ptr);
506
507 ASSERT_EQ(attrs.begin()->first, "value");
508 ASSERT_EQ(attrs.begin()->second, "aa");
509
510 ASSERT_EQ(attrs.rbegin()->first, "index");
511 ASSERT_EQ(attrs.rbegin()->second, "1");
512
513 jsCardParser->SetRepeatItemValue(1, expValue, true);
514 attrs.clear();
515 jsCardParser->ParseAttributes(rootTemplate, 1, attrs, (Framework::JsCommandDomElementOperator*)ptr);
516 ASSERT_EQ(attrs.begin()->first, "value");
517 ASSERT_EQ(attrs.begin()->second, "bb");
518
519 ASSERT_EQ(attrs.rbegin()->first, "index");
520 ASSERT_EQ(attrs.rbegin()->second, "2");
521 }
522
523 /**
524 * @tc.name: CardFrontendTest010
525 * @tc.desc: Test "repeat" attr: for = "(index, item) in list".
526 * @tc.type: FUNC
527 */
528 HWTEST_F(CardFrontendTest, CardFrontendTest010, TestSize.Level1)
529 {
530 /**
531 * @tc.steps: step1. construct json string.
532 */
533 const std::string rootJson = "{\n"
534 "\t\"template\": {\n"
535 "\t\t\"attr\": {\n"
536 "\t\t\t\"value\": \"{{$item.name}}\",\n"
537 "\t\t\t\"index\": \"{{$idx}}\"\n"
538 "\t\t},\n"
539 "\t\t\"type\": \"text\",\n"
540 "\t\t\"repeat\": {\n"
541 "\t\t\t\"exp\": \"{{list}}\",\n"
542 "\t\t\t\"key\": \"index\",\n"
543 "\t\t\t\"value\": \"item\"\n"
544 "\t\t}\n"
545 "\t},\n"
546 "\t\"styles\": {},\n"
547 "\t\"actions\": {},\n"
548 "\t\"data\": {\n"
549 "\t\t\"list\": [\n"
550 "\t\t\t{\n"
551 "\t\t\t\t\"name\": \"aa\",\n"
552 "\t\t\t\t\"idx\": 1\n"
553 "\t\t\t},\n"
554 "\t\t\t{\n"
555 "\t\t\t\t\"name\": \"bb\",\n"
556 "\t\t\t\t\"idx\": 2\n"
557 "\t\t\t},\n"
558 "\t\t\t{\n"
559 "\t\t\t\t\"name\": \"cc\",\n"
560 "\t\t\t\t\"idx\": 3\n"
561 "\t\t\t}\n"
562 "\t\t]\n"
563 "\t}\n"
564 "}";
565 auto rootBody = JsonUtil::ParseJsonString(rootJson);
566 auto rootTemplate = rootBody->GetValue("template");
567 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
568 jsCardParser->Initialize();
569 jsCardParser->SetIsRepeat(true);
570 auto document = AceType::MakeRefPtr<DOMDocument>(1);
571 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
572 jsCardParser->CreateDomNode(page, rootTemplate, -1);
573
574 /**
575 * @tc.steps: step2. Get the value of the repeat and parse data.
576 */
577 auto repeatValue = rootTemplate->GetValue("repeat");
578 jsCardParser->ParseRepeatIndexItem(repeatValue);
579 auto expValue = repeatValue->GetValue("exp");
580 std::string key;
581 jsCardParser->GetRepeatData(expValue, key);
582 jsCardParser->SetRepeatItemValue(2, expValue, true);
583
584 /**
585 * @tc.steps: step3. Parse repeat attr and assert value of repeat.
586 * @tc.expected: step3. The repeat value meets expectations.
587 */
588 std::vector<std::pair<std::string, std::string>> attrs;
589 auto type = rootTemplate->GetValue("type")->GetString();
590 RefPtr<Framework::JsCommandDomElementCreator> command =
591 Referenced::MakeRefPtr<Framework::JsCommandAddDomElement>(type, 1, 0);
592 auto ptr = Referenced::RawPtr(command);
593 jsCardParser->ParseAttributes(rootTemplate, 1, attrs, (Framework::JsCommandDomElementOperator*)ptr);
594
595 ASSERT_EQ(attrs.begin()->first, "value");
596 ASSERT_EQ(attrs.begin()->second, "cc");
597
598 ASSERT_EQ(attrs.rbegin()->first, "index");
599 ASSERT_EQ(attrs.rbegin()->second, "2");
600
601 jsCardParser->SetRepeatItemValue(1, expValue, true);
602 attrs.clear();
603 jsCardParser->ParseAttributes(rootTemplate, 1, attrs, (Framework::JsCommandDomElementOperator*)ptr);
604 ASSERT_EQ(attrs.begin()->first, "value");
605 ASSERT_EQ(attrs.begin()->second, "bb");
606
607 ASSERT_EQ(attrs.rbegin()->first, "index");
608 ASSERT_EQ(attrs.rbegin()->second, "1");
609 }
610
611 /**
612 * @tc.name: CardFrontendTest011
613 * @tc.desc: Test point operation.
614 * @tc.type: FUNC
615 */
616 HWTEST_F(CardFrontendTest, CardFrontendTest011, TestSize.Level1)
617 {
618 const std::string rootJson = "{\n"
619 "\t\"template\": {\n"
620 "\t\t\"attr\": {},\n"
621 "\t\t\"type\": \"text\"\n"
622 "\t},\n"
623 "\t\"styles\": {},\n"
624 "\t\"actions\": {},\n"
625 "\t\"data\": {\n"
626 "\t\t\"number\": {\n"
627 "\t\t\t\"key\": 1\n"
628 "\t\t}\n"
629 "\t}\n"
630 "}";
631 auto rootBody = JsonUtil::ParseJsonString(rootJson);
632 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
633 jsCardParser->Initialize();
634 std::string value = "{{number.key}}";
635 jsCardParser->ParseVariable(value);
636 ASSERT_EQ(value, "1");
637 }
638
639 /**
640 * @tc.name: CardFrontendTest012
641 * @tc.desc: Test array operations.
642 * @tc.type: FUNC
643 */
644 HWTEST_F(CardFrontendTest, CardFrontendTest012, TestSize.Level1)
645 {
646 const std::string rootJson = "{\n"
647 "\t\"template\": {\n"
648 "\t\t\"attr\": {},\n"
649 "\t\t\"type\": \"text\"\n"
650 "\t},\n"
651 "\t\"styles\": {},\n"
652 "\t\"actions\": {},\n"
653 "\t\"data\": {\n"
654 "\t\t\"index\": [\n"
655 "\t\t\t0,\n"
656 "\t\t\t3,\n"
657 "\t\t\t4\n"
658 "\t\t]\n"
659 "\t}\n"
660 "}";
661 auto rootBody = JsonUtil::ParseJsonString(rootJson);
662 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
663 jsCardParser->Initialize();
664 std::string value = "{{index[0]}}";
665 jsCardParser->ParseVariable(value);
666 ASSERT_EQ(value, "0");
667 value = "{{index[1]}}";
668 jsCardParser->ParseVariable(value);
669 ASSERT_EQ(value, "3");
670 value = "{{index[2]}}";
671 jsCardParser->ParseVariable(value);
672 ASSERT_EQ(value, "4");
673 }
674
675 /**
676 * @tc.name: CardFrontendTest013
677 * @tc.desc: Test complex expressions.
678 * @tc.type: FUNC
679 */
680 HWTEST_F(CardFrontendTest, CardFrontendTest013, TestSize.Level1)
681 {
682 const std::string rootJson = "{\n"
683 "\t\"template\": {\n"
684 "\t\t\"attr\": {},\n"
685 "\t\t\"type\": \"text\"\n"
686 "\t},\n"
687 "\t\"styles\": {},\n"
688 "\t\"actions\": {},\n"
689 "\t\"data\": {\n"
690 "\t\t\"hours\": [\n"
691 "\t\t\t{\n"
692 "\t\t\t\t\"time\": [\n"
693 "\t\t\t\t\t8,\n"
694 "\t\t\t\t\t2,\n"
695 "\t\t\t\t\t3\n"
696 "\t\t\t\t],\n"
697 "\t\t\t\t\"src\": \"src/XXX.png\",\n"
698 "\t\t\t\t\"prop\": 10,\n"
699 "\t\t\t\t\"isPast\": false,\n"
700 "\t\t\t\t\"temperature\": \"22°\",\n"
701 "\t\t\t\t\"description\": \"\"\n"
702 "\t\t\t},\n"
703 "\t\t\t{\n"
704 "\t\t\t\t\"time\": \"3:00\",\n"
705 "\t\t\t\t\"src\": \"src/XXX.png\",\n"
706 "\t\t\t\t\"prop\": 11,\n"
707 "\t\t\t\t\"isPast\": false,\n"
708 "\t\t\t\t\"temperature\": \"22°\",\n"
709 "\t\t\t\t\"description\": \"\"\n"
710 "\t\t\t}\n"
711 "\t\t],\n"
712 "\t\t\"number\": {\n"
713 "\t\t\t\"key\": 1\n"
714 "\t\t}\n"
715 "\t}\n"
716 "}";
717 auto rootBody = JsonUtil::ParseJsonString(rootJson);
718 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
719 jsCardParser->Initialize();
720 std::string value = "{{hours[0].time[0]}}";
721 jsCardParser->ParseVariable(value);
722 ASSERT_EQ(value, "8");
723 value = "{{hours[number.key].time}}";
724 jsCardParser->ParseVariable(value);
725 ASSERT_EQ(value, "3:00");
726 value = "{{hours[0].time}}";
727 jsCardParser->ParseVariable(value);
728 ASSERT_EQ(value, "[8,2,3]");
729 }
730
731 /**
732 * @tc.name: CardFrontendTest014
733 * @tc.desc: Test error expression.
734 * @tc.type: FUNC
735 */
736 HWTEST_F(CardFrontendTest, CardFrontendTest014, TestSize.Level1)
737 {
738 const std::string rootJson = "{\n"
739 "\t\"template\": {\n"
740 "\t\t\"attr\": {},\n"
741 "\t\t\"type\": \"text\"\n"
742 "\t},\n"
743 "\t\"styles\": {},\n"
744 "\t\"actions\": {},\n"
745 "\t\"data\": {\n"
746 "\t\t\"hours\": [\n"
747 "\t\t\t{\n"
748 "\t\t\t\t\"time\": [\n"
749 "\t\t\t\t\t8,\n"
750 "\t\t\t\t\t2,\n"
751 "\t\t\t\t\t3\n"
752 "\t\t\t\t],\n"
753 "\t\t\t\t\"src\": \"src/XXX.png\",\n"
754 "\t\t\t\t\"prop\": 10,\n"
755 "\t\t\t\t\"isPast\": false,\n"
756 "\t\t\t\t\"temperature\": \"22°\",\n"
757 "\t\t\t\t\"description\": \"\"\n"
758 "\t\t\t},\n"
759 "\t\t\t{\n"
760 "\t\t\t\t\"time\": \"3:00\",\n"
761 "\t\t\t\t\"src\": \"src/XXX.png\",\n"
762 "\t\t\t\t\"prop\": 11,\n"
763 "\t\t\t\t\"isPast\": false,\n"
764 "\t\t\t\t\"temperature\": \"22°\",\n"
765 "\t\t\t\t\"description\": \"\"\n"
766 "\t\t\t}\n"
767 "\t\t],\n"
768 "\t\t\"number\": {\n"
769 "\t\t\t\"key\": 1\n"
770 "\t\t}\n"
771 "\t}\n"
772 "}";
773 auto rootBody = JsonUtil::ParseJsonString(rootJson);
774 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
775 jsCardParser->Initialize();
776 std::string value = "{{hours[key].time}}";
777 jsCardParser->ParseVariable(value);
778 ASSERT_EQ(value, "{{hours[key].time}}");
779 value = "{{key.number}}";
780 jsCardParser->ParseVariable(value);
781 ASSERT_EQ(value, "{{key.number}}");
782 value = "{{number.key}}}";
783 jsCardParser->ParseVariable(value);
784 ASSERT_EQ(value, "{{number.key}}}");
785 }
786
787 /**
788 * @tc.name: CardFrontendDataBindingTest001
789 * @tc.desc: Test data binding for {{key1}}.{{key2}
790 * @tc.type: FUNC
791 */
792 HWTEST_F(CardFrontendTest, CardFrontendDataBindingTest001, TestSize.Level1)
793 {
794 const std::string rootJson = "{\n"
795 "\t\"template\": {\n"
796 "\t\t\"attr\": {\n"
797 "\t\t\t\"value\": \"$f({{aaa}}.{{ddd}})\",\n"
798 "\t\t\t\"index\": \"$f({{bbb}}.{{ccc}})\"\n"
799 "\t\t},\n"
800 "\t\t\"type\": \"text\"\n"
801 "\t},\n"
802 "\t\"styles\": {},\n"
803 "\t\"actions\": {},\n"
804 "\t\"data\": {\n"
805 "\t\t\"aaa\": \"abc\",\n"
806 "\t\t\"bbb\": \"true\",\n"
807 "\t\t\"ccc\": \"false\",\n"
808 "\t\t\"ddd\": \"123\"\n"
809 "\t}\n"
810 "}";
811 auto rootBody = JsonUtil::ParseJsonString(rootJson);
812 auto rootTemplate = rootBody->GetValue("template");
813 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
814 jsCardParser->Initialize();
815 auto document = AceType::MakeRefPtr<DOMDocument>(1);
816 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
817 jsCardParser->CreateDomNode(page, rootTemplate, -1);
818
819 auto attrValue = rootTemplate->GetValue("attr");
820 auto value = attrValue->GetValue("value")->GetString();
821
822 // {{aaa}}.{{ddd}} == abc.123
823 jsCardParser->ParseMultiVariable(value);
824 ASSERT_EQ(value, "abc.123");
825
826 // {{bbb}}.{{ccc}} = true.false
827 value = attrValue->GetValue("index")->GetString();
828 jsCardParser->ParseMultiVariable(value);
829 ASSERT_EQ(value, "true.false");
830 }
831
832 /**
833 * @tc.name: CardFrontendDataBindingTest002
834 * @tc.desc: Test data binding for {{key1}}.{{key2}.{{key3}}
835 * @tc.type: FUNC
836 */
837 HWTEST_F(CardFrontendTest, CardFrontendDataBindingTest002, TestSize.Level1)
838 {
839 const std::string rootJson = "{\n"
840 "\t\"template\": {\n"
841 "\t\t\"attr\": {\n"
842 "\t\t\t\"value\": \"$f({{aaa}}.{{bbb}}.{{ccc}})\",\n"
843 "\t\t\t\"index\": \"$f({{aaa}}.{{bbb}}.{{ccc}}.{{ddd}})\"\n"
844 "\t\t},\n"
845 "\t\t\"type\": \"text\"\n"
846 "\t},\n"
847 "\t\"styles\": {},\n"
848 "\t\"actions\": {},\n"
849 "\t\"data\": {\n"
850 "\t\t\"aaa\": \"abc\",\n"
851 "\t\t\"bbb\": \"true\",\n"
852 "\t\t\"ccc\": \"false\",\n"
853 "\t\t\"ddd\": \"123\"\n"
854 "\t}\n"
855 "}";
856 auto rootBody = JsonUtil::ParseJsonString(rootJson);
857 auto rootTemplate = rootBody->GetValue("template");
858 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
859 jsCardParser->Initialize();
860 auto document = AceType::MakeRefPtr<DOMDocument>(1);
861 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
862 jsCardParser->CreateDomNode(page, rootTemplate, -1);
863
864 auto attrValue = rootTemplate->GetValue("attr");
865 auto value = attrValue->GetValue("value")->GetString();
866
867 // {{aaa}}.{{bbb}}.{{ccc}} == abc.true.false
868 jsCardParser->ParseMultiVariable(value);
869 ASSERT_EQ(value, "abc.true.false");
870
871 // {{aaa}}.{{bbb}}.{{ccc}}.{{ddd}} = abc.true.false.123
872 value = attrValue->GetValue("index")->GetString();
873 jsCardParser->ParseMultiVariable(value);
874 ASSERT_EQ(value, "abc.true.false.123");
875 }
876
877 /**
878 * @tc.name: CardFrontendDataBindingTest003
879 * @tc.desc: Test data binding for {{flag1 ? key1 : key2}}.
880 * @tc.type: FUNC
881 */
882 HWTEST_F(CardFrontendTest, CardFrontendDataBindingTest003, TestSize.Level1)
883 {
884 const std::string rootJson = "{\n"
885 "\t\"template\": {\n"
886 "\t\t\"attr\": {\n"
887 "\t\t\t\"value\": \"{{bbb ? aaa : bbb}}\",\n"
888 "\t\t\t\"index\": \"{{ccc ? aaa : ddd}}\"\n"
889 "\t\t},\n"
890 "\t\t\"type\": \"text\"\n"
891 "\t},\n"
892 "\t\"styles\": {},\n"
893 "\t\"actions\": {},\n"
894 "\t\"data\": {\n"
895 "\t\t\"aaa\": \"abc\",\n"
896 "\t\t\"bbb\": \"true\",\n"
897 "\t\t\"ccc\": \"false\",\n"
898 "\t\t\"ddd\": \"123\"\n"
899 "\t}\n"
900 "}";
901 auto rootBody = JsonUtil::ParseJsonString(rootJson);
902 auto rootTemplate = rootBody->GetValue("template");
903 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
904 jsCardParser->Initialize();
905 auto document = AceType::MakeRefPtr<DOMDocument>(1);
906 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
907 jsCardParser->CreateDomNode(page, rootTemplate, -1);
908
909 auto attrValue = rootTemplate->GetValue("attr");
910 auto value = attrValue->GetValue("value")->GetString();
911
912 // bbb = true, value = {{aaa}}
913 jsCardParser->ParseVariable(value);
914 ASSERT_EQ(value, "abc");
915
916 // ccc = false, value = {{ddd}}
917 value = attrValue->GetValue("index")->GetString();
918 jsCardParser->ParseVariable(value);
919 ASSERT_EQ(value, "123");
920 }
921
922 /**
923 * @tc.name: CardFrontendDataBindingTest004
924 * @tc.desc: Test data binding for illegal {{flag1 ? key1 : key2}}.
925 * @tc.type: FUNC
926 */
927 HWTEST_F(CardFrontendTest, CardFrontendDataBindingTest004, TestSize.Level1)
928 {
929 const std::string rootJson = "{\n"
930 "\t\"template\": {\n"
931 "\t\t\"attr\": {\n"
932 "\t\t\t\"value\": \"{{aaa ? bbb : ccc}}\",\n"
933 "\t\t\t\"index\": \"{{ccc ? aaa : eee}}\"\n"
934 "\t\t},\n"
935 "\t\t\"type\": \"text\"\n"
936 "\t},\n"
937 "\t\"styles\": {},\n"
938 "\t\"actions\": {},\n"
939 "\t\"data\": {\n"
940 "\t\t\"aaa\": \"abc\",\n"
941 "\t\t\"bbb\": \"true\",\n"
942 "\t\t\"ccc\": \"false\",\n"
943 "\t\t\"ddd\": \"123\"\n"
944 "\t}\n"
945 "}";
946 auto rootBody = JsonUtil::ParseJsonString(rootJson);
947 auto rootTemplate = rootBody->GetValue("template");
948 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
949 jsCardParser->Initialize();
950 auto document = AceType::MakeRefPtr<DOMDocument>(1);
951 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
952 jsCardParser->CreateDomNode(page, rootTemplate, -1);
953
954 auto attrValue = rootTemplate->GetValue("attr");
955 auto value = attrValue->GetValue("value")->GetString();
956
957 // aaa if not a bool value, set aaa = false, and value = {{ccc}}
958 jsCardParser->ParseVariable(value);
959 ASSERT_EQ(value, "false");
960
961 // ccc = false, value = {{eee}}, eee does not belong to the data domain.
962 value = attrValue->GetValue("index")->GetString();
963 jsCardParser->ParseVariable(value);
964 ASSERT_EQ(value, "eee");
965 }
966
967 /**
968 * @tc.name: CardFrontendDataBindingTest005
969 * @tc.desc: Test data binding for {{flag1 && flag2}}.
970 * @tc.type: FUNC
971 */
972 HWTEST_F(CardFrontendTest, CardFrontendDataBindingTest005, TestSize.Level1)
973 {
974 const std::string rootJson = "{\n"
975 "\t\"template\": {\n"
976 "\t\t\"attr\": {\n"
977 "\t\t\t\"value\": \"{{bbb && ccc}}\",\n"
978 "\t\t\t\"index\": \"{{bbb && bbb}}\"\n"
979 "\t\t},\n"
980 "\t\t\"type\": \"text\"\n"
981 "\t},\n"
982 "\t\"styles\": {},\n"
983 "\t\"actions\": {},\n"
984 "\t\"data\": {\n"
985 "\t\t\"aaa\": \"abc\",\n"
986 "\t\t\"bbb\": \"true\",\n"
987 "\t\t\"ccc\": \"false\",\n"
988 "\t\t\"ddd\": \"123\"\n"
989 "\t}\n"
990 "}";
991 auto rootBody = JsonUtil::ParseJsonString(rootJson);
992 auto rootTemplate = rootBody->GetValue("template");
993 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
994 jsCardParser->Initialize();
995 auto document = AceType::MakeRefPtr<DOMDocument>(1);
996 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
997 jsCardParser->CreateDomNode(page, rootTemplate, -1);
998
999 auto attrValue = rootTemplate->GetValue("attr");
1000 auto value = attrValue->GetValue("value")->GetString();
1001
1002 // bbb = true, ccc = false, value = (bbb && ccc) = false.
1003 jsCardParser->ParseVariable(value);
1004 ASSERT_EQ(value, "false");
1005
1006 // bbb = true, value = (bbb && bbb) = true.
1007 value = attrValue->GetValue("index")->GetString();
1008 jsCardParser->ParseVariable(value);
1009 ASSERT_EQ(value, "true");
1010 }
1011
1012 /**
1013 * @tc.name: CardFrontendDataBindingTest006
1014 * @tc.desc: Test data binding for {{flag1 || flag2}}.
1015 * @tc.type: FUNC
1016 */
1017 HWTEST_F(CardFrontendTest, CardFrontendDataBindingTest006, TestSize.Level1)
1018 {
1019 const std::string rootJson = "{\n"
1020 "\t\"template\": {\n"
1021 "\t\t\"attr\": {\n"
1022 "\t\t\t\"value\": \"{{bbb || ccc}}\",\n"
1023 "\t\t\t\"index\": \"{{ccc || ccc}}\"\n"
1024 "\t\t},\n"
1025 "\t\t\"type\": \"text\"\n"
1026 "\t},\n"
1027 "\t\"styles\": {},\n"
1028 "\t\"actions\": {},\n"
1029 "\t\"data\": {\n"
1030 "\t\t\"aaa\": \"abc\",\n"
1031 "\t\t\"bbb\": \"true\",\n"
1032 "\t\t\"ccc\": \"false\",\n"
1033 "\t\t\"ddd\": \"123\"\n"
1034 "\t}\n"
1035 "}";
1036 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1037 auto rootTemplate = rootBody->GetValue("template");
1038 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1039 jsCardParser->Initialize();
1040 auto document = AceType::MakeRefPtr<DOMDocument>(1);
1041 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
1042 jsCardParser->CreateDomNode(page, rootTemplate, -1);
1043
1044 auto attrValue = rootTemplate->GetValue("attr");
1045 auto value = attrValue->GetValue("value")->GetString();
1046
1047 // bbb = true, ccc = false, value = (bbb || ccc) = true.
1048 jsCardParser->ParseVariable(value);
1049 ASSERT_EQ(value, "true");
1050
1051 // ccc = false, value = (ccc || ccc) = false.
1052 value = attrValue->GetValue("index")->GetString();
1053 jsCardParser->ParseVariable(value);
1054 ASSERT_EQ(value, "false");
1055 }
1056
1057 /**
1058 * @tc.name: CardFrontendDataBindingTest007
1059 * @tc.desc: Test data binding for {{!flag1}}.
1060 * @tc.type: FUNC
1061 */
1062 HWTEST_F(CardFrontendTest, CardFrontendDataBindingTest007, TestSize.Level1)
1063 {
1064 const std::string rootJson = "{\n"
1065 "\t\"template\": {\n"
1066 "\t\t\"attr\": {\n"
1067 "\t\t\t\"value\": \"{{!bbb}}\",\n"
1068 "\t\t\t\"index\": \"{{!ccc}}\"\n"
1069 "\t\t},\n"
1070 "\t\t\"type\": \"text\"\n"
1071 "\t},\n"
1072 "\t\"styles\": {},\n"
1073 "\t\"actions\": {},\n"
1074 "\t\"data\": {\n"
1075 "\t\t\"aaa\": \"abc\",\n"
1076 "\t\t\"bbb\": \"true\",\n"
1077 "\t\t\"ccc\": \"false\",\n"
1078 "\t\t\"ddd\": \"123\"\n"
1079 "\t}\n"
1080 "}";
1081 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1082 auto rootTemplate = rootBody->GetValue("template");
1083 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1084 jsCardParser->Initialize();
1085 auto document = AceType::MakeRefPtr<DOMDocument>(1);
1086 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
1087 jsCardParser->CreateDomNode(page, rootTemplate, -1);
1088
1089 auto attrValue = rootTemplate->GetValue("attr");
1090 auto value = attrValue->GetValue("value")->GetString();
1091
1092 // bbb = true, !bbb = false.
1093 jsCardParser->ParseVariable(value);
1094 ASSERT_EQ(value, "false");
1095
1096 // ccc = false, !ccc = true.
1097 value = attrValue->GetValue("index")->GetString();
1098 jsCardParser->ParseVariable(value);
1099 ASSERT_EQ(value, "true");
1100 }
1101
1102 /**
1103 * @tc.name: CardFrontendDataBindingTest008
1104 * @tc.desc: Test data binding for {{flag1 && flag2 && flag3}} (not support now).
1105 * @tc.type: FUNC
1106 */
1107 HWTEST_F(CardFrontendTest, CardFrontendDataBindingTest008, TestSize.Level1)
1108 {
1109 const std::string rootJson = "{\n"
1110 "\t\"template\": {\n"
1111 "\t\t\"attr\": {\n"
1112 "\t\t\t\"value\": \"{{bbb && ccc && aaa}}\",\n"
1113 "\t\t\t\"index\": \"{{bbb && bbb && ccc}}\"\n"
1114 "\t\t},\n"
1115 "\t\t\"type\": \"text\"\n"
1116 "\t},\n"
1117 "\t\"styles\": {},\n"
1118 "\t\"actions\": {},\n"
1119 "\t\"data\": {\n"
1120 "\t\t\"aaa\": \"abc\",\n"
1121 "\t\t\"bbb\": \"true\",\n"
1122 "\t\t\"ccc\": \"false\",\n"
1123 "\t\t\"ddd\": \"123\"\n"
1124 "\t}\n"
1125 "}";
1126 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1127 auto rootTemplate = rootBody->GetValue("template");
1128 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1129 jsCardParser->Initialize();
1130 auto document = AceType::MakeRefPtr<DOMDocument>(1);
1131 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
1132 jsCardParser->CreateDomNode(page, rootTemplate, -1);
1133
1134 auto attrValue = rootTemplate->GetValue("attr");
1135 auto value = attrValue->GetValue("value")->GetString();
1136
1137 // When more than two variables want to &&, return itself.
1138 jsCardParser->ParseVariable(value);
1139 ASSERT_EQ(value, "{{bbb && ccc && aaa}}");
1140
1141 value = attrValue->GetValue("index")->GetString();
1142 jsCardParser->ParseVariable(value);
1143 ASSERT_EQ(value, "{{bbb && bbb && ccc}}");
1144 }
1145
1146 /**
1147 * @tc.name: CardFrontendDataBindingTest009
1148 * @tc.desc: Test data binding for {{flag1 || flag2 || flag3}} (not support now).
1149 * @tc.type: FUNC
1150 */
1151 HWTEST_F(CardFrontendTest, CardFrontendDataBindingTest009, TestSize.Level1)
1152 {
1153 const std::string rootJson = "{\n"
1154 "\t\"template\": {\n"
1155 "\t\t\"attr\": {\n"
1156 "\t\t\t\"value\": \"{{bbb || ccc || aaa}}\",\n"
1157 "\t\t\t\"index\": \"{{bbb || bbb || ccc}}\"\n"
1158 "\t\t},\n"
1159 "\t\t\"type\": \"text\"\n"
1160 "\t},\n"
1161 "\t\"styles\": {},\n"
1162 "\t\"actions\": {},\n"
1163 "\t\"data\": {\n"
1164 "\t\t\"aaa\": \"abc\",\n"
1165 "\t\t\"bbb\": \"true\",\n"
1166 "\t\t\"ccc\": \"false\",\n"
1167 "\t\t\"ddd\": \"123\"\n"
1168 "\t}\n"
1169 "}";
1170 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1171 auto rootTemplate = rootBody->GetValue("template");
1172 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1173 jsCardParser->Initialize();
1174 auto document = AceType::MakeRefPtr<DOMDocument>(1);
1175 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
1176 jsCardParser->CreateDomNode(page, rootTemplate, -1);
1177
1178 auto attrValue = rootTemplate->GetValue("attr");
1179 auto value = attrValue->GetValue("value")->GetString();
1180
1181 // When more than two variables want to ||, return itself.
1182 jsCardParser->ParseVariable(value);
1183 ASSERT_EQ(value, "{{bbb || ccc || aaa}}");
1184
1185 value = attrValue->GetValue("index")->GetString();
1186 jsCardParser->ParseVariable(value);
1187 ASSERT_EQ(value, "{{bbb || bbb || ccc}}");
1188 }
1189
1190 /**
1191 * @tc.name: CardFrontendDataBindingTest010
1192 * @tc.desc: Test data binding for {{flag1 && flag2 || flag3}} (not support now).
1193 * @tc.type: FUNC
1194 */
1195 HWTEST_F(CardFrontendTest, CardFrontendDataBindingTest010, TestSize.Level1)
1196 {
1197 const std::string rootJson = "{\n"
1198 "\t\"template\": {\n"
1199 "\t\t\"attr\": {\n"
1200 "\t\t\t\"value\": \"{{bbb && ccc || aaa}}\",\n"
1201 "\t\t\t\"index\": \"{{bbb || bbb && ccc}}\"\n"
1202 "\t\t},\n"
1203 "\t\t\"type\": \"text\"\n"
1204 "\t},\n"
1205 "\t\"styles\": {},\n"
1206 "\t\"actions\": {},\n"
1207 "\t\"data\": {\n"
1208 "\t\t\"aaa\": \"abc\",\n"
1209 "\t\t\"bbb\": \"true\",\n"
1210 "\t\t\"ccc\": \"false\",\n"
1211 "\t\t\"ddd\": \"123\"\n"
1212 "\t}\n"
1213 "}";
1214 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1215 auto rootTemplate = rootBody->GetValue("template");
1216 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1217 jsCardParser->Initialize();
1218 auto document = AceType::MakeRefPtr<DOMDocument>(1);
1219 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
1220 jsCardParser->CreateDomNode(page, rootTemplate, -1);
1221
1222 auto attrValue = rootTemplate->GetValue("attr");
1223 auto value = attrValue->GetValue("value")->GetString();
1224
1225 // When more than two variables want to || or &&, return itself.
1226 jsCardParser->ParseVariable(value);
1227 ASSERT_EQ(value, "{{bbb && ccc || aaa}}");
1228
1229 value = attrValue->GetValue("index")->GetString();
1230 jsCardParser->ParseVariable(value);
1231 ASSERT_EQ(value, "{{bbb || bbb && ccc}}");
1232 }
1233
1234 /**
1235 * @tc.name: CardFrontendDataBindingTest011
1236 * @tc.desc: Test data binding for {{!flag1 && flag2}} (not support now).
1237 * @tc.type: FUNC
1238 */
1239 HWTEST_F(CardFrontendTest, CardFrontendDataBindingTest011, TestSize.Level1)
1240 {
1241 const std::string rootJson = "{\n"
1242 "\t\"template\": {\n"
1243 "\t\t\"attr\": {\n"
1244 "\t\t\t\"value\": \"{{!bbb && ccc}}\",\n"
1245 "\t\t\t\"index\": \"{{!ccc || bbb}}\"\n"
1246 "\t\t},\n"
1247 "\t\t\"type\": \"text\"\n"
1248 "\t},\n"
1249 "\t\"styles\": {},\n"
1250 "\t\"actions\": {},\n"
1251 "\t\"data\": {\n"
1252 "\t\t\"aaa\": \"abc\",\n"
1253 "\t\t\"bbb\": \"true\",\n"
1254 "\t\t\"ccc\": \"false\",\n"
1255 "\t\t\"ddd\": \"123\"\n"
1256 "\t}\n"
1257 "}";
1258 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1259 auto rootTemplate = rootBody->GetValue("template");
1260 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1261 jsCardParser->Initialize();
1262 auto document = AceType::MakeRefPtr<DOMDocument>(1);
1263 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
1264 jsCardParser->CreateDomNode(page, rootTemplate, -1);
1265
1266 auto attrValue = rootTemplate->GetValue("attr");
1267 auto value = attrValue->GetValue("value")->GetString();
1268
1269 jsCardParser->ParseVariable(value);
1270 ASSERT_EQ(value, "{{!bbb && ccc}}");
1271
1272 value = attrValue->GetValue("index")->GetString();
1273 jsCardParser->ParseVariable(value);
1274 ASSERT_EQ(value, "{{!ccc || bbb}}");
1275 }
1276
1277 /**
1278 * @tc.name: CardFrontendDataBindingTest012
1279 * @tc.desc: Test data binding for {{!flag1}}.{{!flag2}}.
1280 * @tc.type: FUNC
1281 */
1282 HWTEST_F(CardFrontendTest, CardFrontendDataBindingTest012, TestSize.Level1)
1283 {
1284 const std::string rootJson = "{\n"
1285 "\t\"template\": {\n"
1286 "\t\t\"attr\": {\n"
1287 "\t\t\t\"value\": \"$f({{!bbb}}.{{!ccc}})\",\n"
1288 "\t\t\t\"index\": \"$f({{!aaa}}.{{!ccc}})\"\n"
1289 "\t\t},\n"
1290 "\t\t\"type\": \"text\"\n"
1291 "\t},\n"
1292 "\t\"styles\": {},\n"
1293 "\t\"actions\": {},\n"
1294 "\t\"data\": {\n"
1295 "\t\t\"aaa\": \"abc\",\n"
1296 "\t\t\"bbb\": \"true\",\n"
1297 "\t\t\"ccc\": \"false\",\n"
1298 "\t\t\"ddd\": \"123\"\n"
1299 "\t}\n"
1300 "}";
1301 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1302 auto rootTemplate = rootBody->GetValue("template");
1303 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1304 jsCardParser->Initialize();
1305 auto document = AceType::MakeRefPtr<DOMDocument>(1);
1306 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
1307 jsCardParser->CreateDomNode(page, rootTemplate, -1);
1308
1309 auto attrValue = rootTemplate->GetValue("attr");
1310 auto value = attrValue->GetValue("value")->GetString();
1311
1312 // !bbb = false, !ccc = true.
1313 jsCardParser->ParseMultiVariable(value);
1314 ASSERT_EQ(value, "false.true");
1315
1316 // aaa is not bool value, so aaa = false, !aaa = true.
1317 value = attrValue->GetValue("index")->GetString();
1318 jsCardParser->ParseMultiVariable(value);
1319 ASSERT_EQ(value, "true.true");
1320 }
1321
1322 /**
1323 * @tc.name: CardFrontendDataBindingTest013
1324 * @tc.desc: Test data binding for {{key1}}.{{!flag1}}.
1325 * @tc.type: FUNC
1326 */
1327 HWTEST_F(CardFrontendTest, CardFrontendDataBindingTest013, TestSize.Level1)
1328 {
1329 const std::string rootJson = "{\n"
1330 "\t\"template\": {\n"
1331 "\t\t\"attr\": {\n"
1332 "\t\t\t\"value\": \"$f({{bbb}}.{{!ccc}})\",\n"
1333 "\t\t\t\"index\": \"$f({{aaa}}.{{!ccc}})\"\n"
1334 "\t\t},\n"
1335 "\t\t\"type\": \"text\"\n"
1336 "\t},\n"
1337 "\t\"styles\": {},\n"
1338 "\t\"actions\": {},\n"
1339 "\t\"data\": {\n"
1340 "\t\t\"aaa\": \"abc\",\n"
1341 "\t\t\"bbb\": \"true\",\n"
1342 "\t\t\"ccc\": \"false\",\n"
1343 "\t\t\"ddd\": \"123\"\n"
1344 "\t}\n"
1345 "}";
1346 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1347 auto rootTemplate = rootBody->GetValue("template");
1348 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1349 jsCardParser->Initialize();
1350 auto document = AceType::MakeRefPtr<DOMDocument>(1);
1351 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
1352 jsCardParser->CreateDomNode(page, rootTemplate, -1);
1353
1354 auto attrValue = rootTemplate->GetValue("attr");
1355 auto value = attrValue->GetValue("value")->GetString();
1356
1357 jsCardParser->ParseMultiVariable(value);
1358 ASSERT_EQ(value, "true.true");
1359
1360 value = attrValue->GetValue("index")->GetString();
1361 jsCardParser->ParseMultiVariable(value);
1362 ASSERT_EQ(value, "abc.true");
1363 }
1364
1365 /**
1366 * @tc.name: CardFrontendDataBindingTest014
1367 * @tc.desc: Test data binding for constant + variable.
1368 * @tc.type: FUNC
1369 */
1370 HWTEST_F(CardFrontendTest, CardFrontendDataBindingTest014, TestSize.Level1)
1371 {
1372 const std::string rootJson = "{\n"
1373 "\t\"template\": {\n"
1374 "\t\t\"attr\": {\n"
1375 "\t\t\t\"value\": \"$f(value1 is : {{aaa}})\",\n"
1376 "\t\t\t\"index\": \"$f(ccc is: {{ccc}}, bbb is {{bbb}}.)\"\n"
1377 "\t\t},\n"
1378 "\t\t\"type\": \"text\"\n"
1379 "\t},\n"
1380 "\t\"styles\": {},\n"
1381 "\t\"actions\": {},\n"
1382 "\t\"data\": {\n"
1383 "\t\t\"aaa\": \"abc\",\n"
1384 "\t\t\"bbb\": \"true\",\n"
1385 "\t\t\"ccc\": \"false\",\n"
1386 "\t\t\"ddd\": \"123\"\n"
1387 "\t}\n"
1388 "}";
1389 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1390 auto rootTemplate = rootBody->GetValue("template");
1391 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1392 jsCardParser->Initialize();
1393 auto document = AceType::MakeRefPtr<DOMDocument>(1);
1394 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
1395 jsCardParser->CreateDomNode(page, rootTemplate, -1);
1396
1397 auto attrValue = rootTemplate->GetValue("attr");
1398 auto value = attrValue->GetValue("value")->GetString();
1399
1400 jsCardParser->ParseMultiVariable(value);
1401 ASSERT_EQ(value, "value1 is : abc");
1402
1403 value = attrValue->GetValue("index")->GetString();
1404 jsCardParser->ParseMultiVariable(value);
1405 ASSERT_EQ(value, "ccc is: false, bbb is true.");
1406 }
1407
1408 /**
1409 * @tc.name: CardFrontendDataBindingTest015
1410 * @tc.desc: Test data binding for {{!flag1}}.{{flag2 && flag3}}
1411 * @tc.type: FUNC
1412 */
1413 HWTEST_F(CardFrontendTest, CardFrontendDataBindingTest015, TestSize.Level1)
1414 {
1415 const std::string rootJson = "{\n"
1416 "\t\"template\": {\n"
1417 "\t\t\"attr\": {\n"
1418 "\t\t\t\"value\": \"$f({{!bbb}}.{{bbb && ccc}})\",\n"
1419 "\t\t\t\"index\": \"$f({{aaa}}.{{bbb || ccc}})\"\n"
1420 "\t\t},\n"
1421 "\t\t\"type\": \"text\"\n"
1422 "\t},\n"
1423 "\t\"styles\": {},\n"
1424 "\t\"actions\": {},\n"
1425 "\t\"data\": {\n"
1426 "\t\t\"aaa\": \"abc\",\n"
1427 "\t\t\"bbb\": \"true\",\n"
1428 "\t\t\"ccc\": \"false\",\n"
1429 "\t\t\"ddd\": \"123\"\n"
1430 "\t}\n"
1431 "}";
1432 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1433 auto rootTemplate = rootBody->GetValue("template");
1434 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1435 jsCardParser->Initialize();
1436 auto document = AceType::MakeRefPtr<DOMDocument>(1);
1437 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
1438 jsCardParser->CreateDomNode(page, rootTemplate, -1);
1439
1440 auto attrValue = rootTemplate->GetValue("attr");
1441 auto value = attrValue->GetValue("value")->GetString();
1442
1443 jsCardParser->ParseMultiVariable(value);
1444 ASSERT_EQ(value, "false.false");
1445
1446 value = attrValue->GetValue("index")->GetString();
1447 jsCardParser->ParseMultiVariable(value);
1448 ASSERT_EQ(value, "abc.true");
1449 }
1450
1451 /**
1452 * @tc.name: CardFrontendDataBindingTest016
1453 * @tc.desc: Test data binding for error expression.
1454 * @tc.type: FUNC
1455 */
1456 HWTEST_F(CardFrontendTest, CardFrontendDataBindingTest016, TestSize.Level1)
1457 {
1458 const std::string rootJson = "{\n"
1459 "\t\"template\": {\n"
1460 "\t\t\"attr\": {\n"
1461 "\t\t\t\"value\": \"$f({{aaa}}.{{eee}})\",\n"
1462 "\t\t\t\"value1\": \"{{aaa ? bbb : ddd}}\",\n"
1463 "\t\t\t\"value2\": \"{{aaa && ddd}}\",\n"
1464 "\t\t\t\"value3\": \"{{aaa || ddd}}\",\n"
1465 "\t\t\t\"value4\": \"{{!ddd}}\"\n"
1466 "\t\t},\n"
1467 "\t\t\"type\": \"text\"\n"
1468 "\t},\n"
1469 "\t\"styles\": {},\n"
1470 "\t\"actions\": {},\n"
1471 "\t\"data\": {\n"
1472 "\t\t\"aaa\": \"abc\",\n"
1473 "\t\t\"bbb\": \"true\",\n"
1474 "\t\t\"ccc\": \"false\",\n"
1475 "\t\t\"ddd\": \"123\"\n"
1476 "\t}\n"
1477 "}";
1478 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1479 auto rootTemplate = rootBody->GetValue("template");
1480 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1481 jsCardParser->Initialize();
1482 auto document = AceType::MakeRefPtr<DOMDocument>(1);
1483 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
1484 jsCardParser->CreateDomNode(page, rootTemplate, -1);
1485
1486 auto attrValue = rootTemplate->GetValue("attr");
1487 auto value = attrValue->GetValue("value")->GetString();
1488
1489 // {{aaa}}.{{eee}}, eee does not belong to the data field.
1490 jsCardParser->ParseMultiVariable(value);
1491 ASSERT_EQ(value, "abc.{{eee}}");
1492
1493 // aaa ? bbb : ddd, aaa is not bool variable, the default setting is false.
1494 value = attrValue->GetValue("value1")->GetString();
1495 jsCardParser->ParseVariable(value);
1496 ASSERT_EQ(value, "123");
1497
1498 // aaa && ddd, aaa and ddd are not bool variables, the default setting is false.
1499 value = attrValue->GetValue("value2")->GetString();
1500 jsCardParser->ParseVariable(value);
1501 ASSERT_EQ(value, "false");
1502
1503 // aaa || ddd, aaa and ddd are not bool variables, the default setting is false.
1504 value = attrValue->GetValue("value3")->GetString();
1505 jsCardParser->ParseVariable(value);
1506 ASSERT_EQ(value, "false");
1507
1508 // ddd is not a bool variable, the default setting is false.
1509 value = attrValue->GetValue("value4")->GetString();
1510 jsCardParser->ParseVariable(value);
1511 ASSERT_EQ(value, "true");
1512 }
1513
1514 /**
1515 * @tc.name: JsCardParserCreateDomNodeTest001
1516 * @tc.desc: Test create dom node when type is text with children list.
1517 * @tc.type: FUNC
1518 */
1519 HWTEST_F(CardFrontendTest, JsCardParserCreateDomNodeTest001, TestSize.Level1)
1520 {
1521 /**
1522 * @tc.steps: step1. construct json string.
1523 */
1524 const std::string rootJson = "{\n"
1525 "\t\"template\": {\n"
1526 "\t\t\"attr\": {},\n"
1527 "\t\t\"type\": \"text\",\n"
1528 "\t\t\"children\": [\n"
1529 "\t\t\t{\n"
1530 "\t\t\t\t\"name\": \"aa\",\n"
1531 "\t\t\t\t\"idx\": 1\n"
1532 "\t\t\t},\n"
1533 "\t\t\t{\n"
1534 "\t\t\t\t\"name\": \"bb\",\n"
1535 "\t\t\t\t\"idx\": 2\n"
1536 "\t\t\t},\n"
1537 "\t\t\t{\n"
1538 "\t\t\t\t\"name\": \"cc\",\n"
1539 "\t\t\t\t\"idx\": 1\n"
1540 "\t\t\t}\n"
1541 "\t\t]\n"
1542 "\t},\n"
1543 "\t\"styles\": {},\n"
1544 "\t\"actions\": {}\n"
1545 "}";
1546 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1547 auto rootTemplate = rootBody->GetValue("template");
1548 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1549 jsCardParser->Initialize();
1550 jsCardParser->SetIsRepeat(true);
1551 auto document = AceType::MakeRefPtr<DOMDocument>(1);
1552 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
1553 jsCardParser->CreateDomNode(page, rootTemplate, -1);
1554
1555 auto childList = rootTemplate->GetValue("children");
1556 ASSERT_EQ(childList->GetArraySize(), 3);
1557 if (childList && childList->IsValid()) {
1558 auto child = childList->GetChild();
1559 int32_t count = 0;
1560 while (child && child->IsValid()) {
1561 auto itemName = child->GetValue("name")->GetString();
1562 auto itemIndex = child->GetValue("idx")->GetInt();
1563 if (count == 0) {
1564 ASSERT_EQ(itemName, "aa");
1565 ASSERT_EQ(itemIndex, 1);
1566 } else if (count == 1) {
1567 ASSERT_EQ(itemName, "bb");
1568 ASSERT_EQ(itemIndex, 2);
1569 } else {
1570 ASSERT_EQ(itemName, "cc");
1571 ASSERT_EQ(itemIndex, 1);
1572 }
1573 count++;
1574 child = child->GetNext();
1575 }
1576 }
1577 }
1578
1579 /**
1580 * @tc.name: JsCardParserCreateDomNodeTest002
1581 * @tc.desc: Test create dom node when type is block with children list.
1582 * @tc.type: FUNC
1583 */
1584 HWTEST_F(CardFrontendTest, JsCardParserCreateDomNodeTest002, TestSize.Level1)
1585 {
1586 /**
1587 * @tc.steps: step1. construct json string.
1588 */
1589 const std::string rootJson = "{\n"
1590 "\t\"template\": {\n"
1591 "\t\t\"attr\": {},\n"
1592 "\t\t\"type\": \"block\",\n"
1593 "\t\t\"children\": [\n"
1594 "\t\t\t{\n"
1595 "\t\t\t\t\"name\": \"aa\",\n"
1596 "\t\t\t\t\"idx\": 1\n"
1597 "\t\t\t},\n"
1598 "\t\t\t{\n"
1599 "\t\t\t\t\"name\": \"bb\",\n"
1600 "\t\t\t\t\"idx\": 2\n"
1601 "\t\t\t},\n"
1602 "\t\t\t{\n"
1603 "\t\t\t\t\"name\": \"cc\",\n"
1604 "\t\t\t\t\"idx\": 1\n"
1605 "\t\t\t}\n"
1606 "\t\t]\n"
1607 "\t},\n"
1608 "\t\"styles\": {},\n"
1609 "\t\"actions\": {}\n"
1610 "}";
1611 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1612 auto rootTemplate = rootBody->GetValue("template");
1613 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1614 jsCardParser->Initialize();
1615 jsCardParser->SetIsRepeat(true);
1616 auto document = AceType::MakeRefPtr<DOMDocument>(1);
1617 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
1618 jsCardParser->CreateDomNode(page, rootTemplate, -1);
1619
1620 auto childList = rootTemplate->GetValue("children");
1621 ASSERT_EQ(childList->GetArraySize(), 3);
1622 if (childList && childList->IsValid()) {
1623 auto child = childList->GetChild();
1624 int32_t count = 0;
1625 while (child && child->IsValid()) {
1626 auto itemName = child->GetValue("name")->GetString();
1627 auto itemIndex = child->GetValue("idx")->GetInt();
1628 if (count == 0) {
1629 ASSERT_EQ(itemName, "aa");
1630 ASSERT_EQ(itemIndex, 1);
1631 } else if (count == 1) {
1632 ASSERT_EQ(itemName, "bb");
1633 ASSERT_EQ(itemIndex, 2);
1634 } else {
1635 ASSERT_EQ(itemName, "cc");
1636 ASSERT_EQ(itemIndex, 1);
1637 }
1638 count++;
1639 child = child->GetNext();
1640 }
1641 }
1642 }
1643
1644 /**
1645 * @tc.name: JsCardParserCreateDomNodeTest003
1646 * @tc.desc: Test create dom node when type is block without children list.
1647 * @tc.type: FUNC
1648 */
1649 HWTEST_F(CardFrontendTest, JsCardParserCreateDomNodeTest003, TestSize.Level1)
1650 {
1651 /**
1652 * @tc.steps: step1. construct json string.
1653 */
1654 const std::string rootJson = "{\n"
1655 "\t\"template\": {\n"
1656 "\t\t\"attr\": {},\n"
1657 "\t\t\"type\": \"block\",\n"
1658 "\t\t\"repeat\": \"{{list}}\"\n"
1659 "\t},\n"
1660 "\t\"styles\": {},\n"
1661 "\t\"actions\": {},\n"
1662 "\t\"data\": {\n"
1663 "\t\t\"list\": [\n"
1664 "\t\t\t{\n"
1665 "\t\t\t\t\"name\": \"aa\",\n"
1666 "\t\t\t\t\"idx\": 1\n"
1667 "\t\t\t},\n"
1668 "\t\t\t{\n"
1669 "\t\t\t\t\"name\": \"bb\",\n"
1670 "\t\t\t\t\"idx\": 2\n"
1671 "\t\t\t},\n"
1672 "\t\t\t{\n"
1673 "\t\t\t\t\"name\": \"cc\",\n"
1674 "\t\t\t\t\"idx\": 1\n"
1675 "\t\t\t}\n"
1676 "\t\t]\n"
1677 "\t}\n"
1678 "}";
1679 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1680 auto rootTemplate = rootBody->GetValue("template");
1681 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1682 jsCardParser->Initialize();
1683 jsCardParser->SetIsRepeat(true);
1684 auto document = AceType::MakeRefPtr<DOMDocument>(1);
1685 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
1686 jsCardParser->CreateDomNode(page, rootTemplate, -1);
1687
1688 auto repeatValue = rootTemplate->GetValue("repeat");
1689 std::string key;
1690 jsCardParser->GetRepeatData(repeatValue, key);
1691
1692 ASSERT_EQ(repeatValue->GetArraySize(), 3);
1693 auto item = repeatValue->GetChild();
1694 auto itemName = item->GetValue("name")->GetString();
1695 auto itemIndex = item->GetValue("idx")->GetInt();
1696 ASSERT_EQ(itemName, "aa");
1697 ASSERT_EQ(itemIndex, 1);
1698 }
1699
1700 /**
1701 * @tc.name: JsCardParserCreateDomNodeTest004
1702 * @tc.desc: Test create dom node when rootBody dosen't contains type.
1703 * @tc.type: FUNC
1704 */
1705 HWTEST_F(CardFrontendTest, JsCardParserCreateDomNodeTest004, TestSize.Level1)
1706 {
1707 /**
1708 * @tc.steps: step1. construct json string.
1709 */
1710 const std::string rootJson = "{\n"
1711 "\t\"template\": {\n"
1712 "\t\t\"attr\": {},\n"
1713 "\t\t\"repeat\": \"{{list}}\"\n"
1714 "\t},\n"
1715 "\t\"styles\": {},\n"
1716 "\t\"actions\": {},\n"
1717 "\t\"data\": {\n"
1718 "\t\t\"list\": [\n"
1719 "\t\t\t{\n"
1720 "\t\t\t\t\"name\": \"aa\",\n"
1721 "\t\t\t\t\"idx\": 1\n"
1722 "\t\t\t},\n"
1723 "\t\t\t{\n"
1724 "\t\t\t\t\"name\": \"bb\",\n"
1725 "\t\t\t\t\"idx\": 2\n"
1726 "\t\t\t},\n"
1727 "\t\t\t{\n"
1728 "\t\t\t\t\"name\": \"cc\",\n"
1729 "\t\t\t\t\"idx\": 1\n"
1730 "\t\t\t}\n"
1731 "\t\t]\n"
1732 "\t}\n"
1733 "}";
1734 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1735 auto rootTemplate = rootBody->GetValue("template");
1736 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1737 jsCardParser->Initialize();
1738 jsCardParser->SetIsRepeat(true);
1739 auto document = AceType::MakeRefPtr<DOMDocument>(1);
1740 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
1741 jsCardParser->CreateDomNode(page, rootTemplate, -1);
1742
1743 auto repeatValue = rootTemplate->GetValue("repeat");
1744 std::string key;
1745 jsCardParser->GetRepeatData(repeatValue, key);
1746
1747 ASSERT_EQ(repeatValue->GetArraySize(), 3);
1748 auto item = repeatValue->GetChild();
1749 auto itemName = item->GetValue("name")->GetString();
1750 auto itemIndex = item->GetValue("idx")->GetInt();
1751 ASSERT_EQ(itemName, "aa");
1752 ASSERT_EQ(itemIndex, 1);
1753 }
1754
1755 /**
1756 * @tc.name: JsCardParserCreateDomNodeTest005
1757 * @tc.desc: Test create dom node when repeat is invalid.
1758 * @tc.type: FUNC
1759 */
1760 HWTEST_F(CardFrontendTest, JsCardParserCreateDomNodeTest005, TestSize.Level1)
1761 {
1762 /**
1763 * @tc.steps: step1. construct json string.
1764 */
1765 const std::string rootJson = "{\n"
1766 "\t\"template\": {\n"
1767 "\t\t\"attr\": {},\n"
1768 "\t\t\"repeat\": \"{{list}}\"\n"
1769 "\t},\n"
1770 "\t\"styles\": {},\n"
1771 "\t\"actions\": {},\n"
1772 "\t\"data\": {\n"
1773 "\t\t\"list\": [\n"
1774 "\t\t\t{\n"
1775 "\t\t\t\t\"name\": \"aa\",\n"
1776 "\t\t\t\t\"idx\": 1\n"
1777 "\t\t\t}\n"
1778 "\t\t\t{\n"
1779 "\t\t\t\t\"name\": \"bb\",\n"
1780 "\t\t\t\t\"idx\": 2\n"
1781 "\t\t\t},\n"
1782 "\t\t\t{\n"
1783 "\t\t\t\t\"name\": \"cc\",\n"
1784 "\t\t\t\t\"idx\": 1\n"
1785 "\t\t\t}\n"
1786 "\t\t]\n"
1787 "\t}\n"
1788 "}";
1789 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1790 auto rootTemplate = rootBody->GetValue("template");
1791 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1792 jsCardParser->Initialize();
1793 jsCardParser->SetIsRepeat(true);
1794 auto document = AceType::MakeRefPtr<DOMDocument>(1);
1795 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
1796 jsCardParser->CreateDomNode(page, rootTemplate, -1);
1797
1798 auto repeatValue = rootTemplate->GetValue("repeat");
1799 std::string key;
1800 jsCardParser->GetRepeatData(repeatValue, key);
1801
1802 ASSERT_EQ(repeatValue->GetArraySize(), 0);
1803 }
1804
1805 /**
1806 * @tc.name: JsCardParserInitialize001
1807 * @tc.desc: Test js card parser initialize when template is invalid.
1808 * @tc.type: FUNC
1809 */
1810 HWTEST_F(CardFrontendTest, JsCardParserInitialize001, TestSize.Level1)
1811 {
1812 /**
1813 * @tc.steps: step1. construct json string.
1814 */
1815 const std::string rootJson = "{\n"
1816 "\t\"template\": {\n"
1817 "\t\t\"attr\": {}\n"
1818 "\t\t\"repeat\": \"{{list}}\"\n"
1819 "\t},\n"
1820 "\t\"styles\": {},\n"
1821 "\t\"actions\": {},\n"
1822 "\t\"data\": {\n"
1823 "\t\t\"list\": [\n"
1824 "\t\t\t{\n"
1825 "\t\t\t\t\"name\": \"aa\",\n"
1826 "\t\t\t\t\"idx\": 1\n"
1827 "\t\t\t},\n"
1828 "\t\t\t{\n"
1829 "\t\t\t\t\"name\": \"bb\",\n"
1830 "\t\t\t\t\"idx\": 2\n"
1831 "\t\t\t},\n"
1832 "\t\t\t{\n"
1833 "\t\t\t\t\"name\": \"cc\",\n"
1834 "\t\t\t\t\"idx\": 1\n"
1835 "\t\t\t}\n"
1836 "\t\t]\n"
1837 "\t}\n"
1838 "}";
1839 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1840 auto rootTemplate = rootBody->GetValue("template");
1841 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1842 bool ret = jsCardParser->Initialize();
1843 ASSERT_EQ(ret, false);
1844 }
1845
1846 /**
1847 * @tc.name: JsCardParserInitialize002
1848 * @tc.desc: Test js card parser initialize when styles is invalid.
1849 * @tc.type: FUNC
1850 */
1851 HWTEST_F(CardFrontendTest, JsCardParserInitialize002, TestSize.Level1)
1852 {
1853 /**
1854 * @tc.steps: step1. construct json string.
1855 */
1856 const std::string rootJson = "{\n"
1857 "\t\"template\": {\n"
1858 "\t\t\"attr\": {},\n"
1859 "\t\t\"repeat\": \"{{list}}\"\n"
1860 "\t},\n"
1861 "\t\"styles\": {,\n"
1862 "\t\"actions\": {},\n"
1863 "\t\"data\": {\n"
1864 "\t\t\"list\": [\n"
1865 "\t\t\t{\n"
1866 "\t\t\t\t\"name\": \"aa\",\n"
1867 "\t\t\t\t\"idx\": 1\n"
1868 "\t\t\t},\n"
1869 "\t\t\t{\n"
1870 "\t\t\t\t\"name\": \"bb\",\n"
1871 "\t\t\t\t\"idx\": 2\n"
1872 "\t\t\t},\n"
1873 "\t\t\t{\n"
1874 "\t\t\t\t\"name\": \"cc\",\n"
1875 "\t\t\t\t\"idx\": 1\n"
1876 "\t\t\t}\n"
1877 "\t\t]\n"
1878 "\t}\n"
1879 "}";
1880 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1881 auto rootTemplate = rootBody->GetValue("template");
1882 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1883 bool ret = jsCardParser->Initialize();
1884 ASSERT_EQ(ret, false);
1885 }
1886
1887 /**
1888 * @tc.name: JsCardParserInitialize003
1889 * @tc.desc: Test js card parser initialize when actions is invalid.
1890 * @tc.type: FUNC
1891 */
1892 HWTEST_F(CardFrontendTest, JsCardParserInitialize003, TestSize.Level1)
1893 {
1894 /**
1895 * @tc.steps: step1. construct json string.
1896 */
1897 const std::string rootJson = "{\n"
1898 "\t\"template\": {\n"
1899 "\t\t\"attr\": {},\n"
1900 "\t\t\"repeat\": \"{{list}}\"\n"
1901 "\t},\n"
1902 "\t\"styles\": {},\n"
1903 "\t\"actions\": {,\n"
1904 "\t\"data\": {\n"
1905 "\t\t\"list\": [\n"
1906 "\t\t\t{\n"
1907 "\t\t\t\t\"name\": \"aa\",\n"
1908 "\t\t\t\t\"idx\": 1\n"
1909 "\t\t\t},\n"
1910 "\t\t\t{\n"
1911 "\t\t\t\t\"name\": \"bb\",\n"
1912 "\t\t\t\t\"idx\": 2\n"
1913 "\t\t\t},\n"
1914 "\t\t\t{\n"
1915 "\t\t\t\t\"name\": \"cc\",\n"
1916 "\t\t\t\t\"idx\": 1\n"
1917 "\t\t\t}\n"
1918 "\t\t]\n"
1919 "\t}\n"
1920 "}";
1921 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1922 auto rootTemplate = rootBody->GetValue("template");
1923 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1924 bool ret = jsCardParser->Initialize();
1925 ASSERT_EQ(ret, false);
1926 }
1927
1928 /**
1929 * @tc.name: JsCardParserInitialize004
1930 * @tc.desc: Test js card parser initialize when data is invalid.
1931 * @tc.type: FUNC
1932 */
1933 HWTEST_F(CardFrontendTest, JsCardParserInitialize004, TestSize.Level1)
1934 {
1935 /**
1936 * @tc.steps: step1. construct json string.
1937 */
1938 const std::string rootJson = "{\n"
1939 "\t\"template\": {\n"
1940 "\t\t\"attr\": {},\n"
1941 "\t\t\"repeat\": \"{{list}}\"\n"
1942 "\t},\n"
1943 "\t\"styles\": {},\n"
1944 "\t\"actions\": {},\n"
1945 "\t\"data\": \n"
1946 "\t\t\"list\": [\n"
1947 "\t\t\t{\n"
1948 "\t\t\t\t\"name\": \"aa\",\n"
1949 "\t\t\t\t\"idx\": 1\n"
1950 "\t\t\t},\n"
1951 "\t\t\t{\n"
1952 "\t\t\t\t\"name\": \"bb\",\n"
1953 "\t\t\t\t\"idx\": 2\n"
1954 "\t\t\t},\n"
1955 "\t\t\t{\n"
1956 "\t\t\t\t\"name\": \"cc\",\n"
1957 "\t\t\t\t\"idx\": 1\n"
1958 "\t\t\t}\n"
1959 "\t\t]\n"
1960 "\t}\n"
1961 "}";
1962 auto rootBody = JsonUtil::ParseJsonString(rootJson);
1963 auto rootTemplate = rootBody->GetValue("template");
1964 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
1965 bool ret = jsCardParser->Initialize();
1966 ASSERT_EQ(ret, false);
1967 }
1968
1969 /**
1970 * @tc.name: JsCardParserParseVersionAndUpdateData001
1971 * @tc.desc: Test js card parser ParseVersionAndUpdateData when apiVersion is valid.
1972 * @tc.type: FUNC
1973 */
1974 HWTEST_F(CardFrontendTest, JsCardParserParseVersionAndUpdateData001, TestSize.Level1)
1975 {
1976 /**
1977 * @tc.steps: step1. construct json string.
1978 */
1979 const std::string rootJson = "{\n"
1980 "\t\"template\": {\n"
1981 "\t\t\"attr\": {},\n"
1982 "\t\t\"type\": \"text\"\n"
1983 "\t},\n"
1984 "\t\"styles\": {},\n"
1985 "\t\"actions\": {},\n"
1986 "\t\"data\": {},\n"
1987 "\t\"apiVersion\": [\n"
1988 "\t\t{\n"
1989 "\t\t\t\"version1\": \"1.0\"\n"
1990 "\t\t},\n"
1991 "\t\t{\n"
1992 "\t\t\t\"version2\": \"2.0\"\n"
1993 "\t\t},\n"
1994 "\t\t{\n"
1995 "\t\t\t\"version3\": 3.0\n"
1996 "\t\t}\n"
1997 "\t]\n"
1998 "}";
1999 auto rootBody = JsonUtil::ParseJsonString(rootJson);
2000 auto rootTemplate = rootBody->GetValue("template");
2001 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
2002 bool ret = jsCardParser->Initialize();
2003 ASSERT_EQ(ret, true);
2004 SystemProperties::InitDeviceInfo(DEVICE_WIDTH, DEVICE_HEIGHT, 0, DENSITY, false);
2005 jsCardParser->ParseVersionAndUpdateData();
2006 }
2007
2008 /**
2009 * @tc.name: JsCardParserParseVersionAndUpdateData002
2010 * @tc.desc: Test js card parser ParseVersionAndUpdateData when apiVersion is valid and systemapiversion is invalid.
2011 * @tc.type: FUNC
2012 */
2013 HWTEST_F(CardFrontendTest, JsCardParserParseVersionAndUpdateData002, TestSize.Level1)
2014 {
2015 /**
2016 * @tc.steps: step1. construct json string.
2017 */
2018 const std::string rootJson = "{\n"
2019 "\t\"template\": {\n"
2020 "\t\t\"attr\": {},\n"
2021 "\t\t\"type\": \"text\"\n"
2022 "\t},\n"
2023 "\t\"styles\": {},\n"
2024 "\t\"actions\": {},\n"
2025 "\t\"data\": {},\n"
2026 "\t\"apiVersion\": [\n"
2027 "\t\t{\n"
2028 "\t\t\t\"version1\": \"1.0\"\n"
2029 "\t\t},\n"
2030 "\t\t{\n"
2031 "\t\t\t\"version2\": \"2.0\"\n"
2032 "\t\t},\n"
2033 "\t\t{\n"
2034 "\t\t\t\"version3\": 3.0\n"
2035 "\t\t}\n"
2036 "\t]\n"
2037 "}";
2038 auto rootBody = JsonUtil::ParseJsonString(rootJson);
2039 auto rootTemplate = rootBody->GetValue("template");
2040 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
2041 bool ret = jsCardParser->Initialize();
2042 ASSERT_EQ(ret, true);
2043 jsCardParser->ParseVersionAndUpdateData();
2044 }
2045
2046 /**
2047 * @tc.name: JsCardParserParseVersionAndUpdateData003
2048 * @tc.desc: Test js card parser ParseVersionAndUpdateData when apiVersion is invalid.
2049 * @tc.type: FUNC
2050 */
2051 HWTEST_F(CardFrontendTest, JsCardParserParseVersionAndUpdateData003, TestSize.Level1)
2052 {
2053 /**
2054 * @tc.steps: step1. construct json string.
2055 */
2056 const std::string rootJson = "{\n"
2057 "\t\"template\": {\n"
2058 "\t\t\"attr\": {},\n"
2059 "\t\t\"type\": \"text\"\n"
2060 "\t},\n"
2061 "\t\"styles\": {},\n"
2062 "\t\"actions\": {},\n"
2063 "\t\"data\": {},\n"
2064 "\t\"apiVersion\": \n"
2065 "\t\t{\n"
2066 "\t\t\t\"version1\": \"1.0\"\n"
2067 "\t\t},\n"
2068 "\t\t{\n"
2069 "\t\t\t\"version2\": \"2.0\"\n"
2070 "\t\t},\n"
2071 "\t\t{\n"
2072 "\t\t\t\"version3\": 3.0\n"
2073 "\t\t}\n"
2074 "\t]\n"
2075 "}";
2076 auto rootBody = JsonUtil::ParseJsonString(rootJson);
2077 auto rootTemplate = rootBody->GetValue("template");
2078 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
2079 bool ret = jsCardParser->Initialize();
2080 SystemProperties::InitDeviceInfo(DEVICE_WIDTH, DEVICE_HEIGHT, 0, DENSITY, false);
2081 jsCardParser->ParseVersionAndUpdateData();
2082 ASSERT_EQ(ret, false);
2083 }
2084
2085 /**
2086 * @tc.name: JsCardParserParseVersionAndUpdateData004
2087 * @tc.desc: Test js card parser ParseVersionAndUpdateData when apiVersion child is invalid.
2088 * @tc.type: FUNC
2089 */
2090 HWTEST_F(CardFrontendTest, JsCardParserParseVersionAndUpdateData004, TestSize.Level1)
2091 {
2092 /**
2093 * @tc.steps: step1. construct json string.
2094 */
2095 const std::string rootJson = "{\n"
2096 "\t\"template\": {\n"
2097 "\t\t\"attr\": {},\n"
2098 "\t\t\"type\": \"text\"\n"
2099 "\t},\n"
2100 "\t\"styles\": {},\n"
2101 "\t\"actions\": {},\n"
2102 "\t\"data\": {},\n"
2103 "\t\"apiVersion\": [\n"
2104 "\t\t{\n"
2105 "\t\t\t\"version1\": \"1.0\"\n"
2106 "\t\t}\n"
2107 "\t\t{\n"
2108 "\t\t\t\"version2\": \"2.0\"\n"
2109 "\t\t},\n"
2110 "\t\t{\n"
2111 "\t\t\t\"version3\": 3.0\n"
2112 "\t\t}\n"
2113 "\t]\n"
2114 "}";
2115 auto rootBody = JsonUtil::ParseJsonString(rootJson);
2116 auto rootTemplate = rootBody->GetValue("template");
2117 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
2118 bool ret = jsCardParser->Initialize();
2119 SystemProperties::InitDeviceInfo(DEVICE_WIDTH, DEVICE_HEIGHT, 0, DENSITY, false);
2120 jsCardParser->ParseVersionAndUpdateData();
2121 ASSERT_EQ(ret, false);
2122 }
2123
2124 /**
2125 * @tc.name: JsCardParserCreateRepeatDomNode001
2126 * @tc.desc: Test js card parser CreateRepeatDomNode when repeat is invalid.
2127 * @tc.type: FUNC
2128 */
2129 HWTEST_F(CardFrontendTest, JsCardParserCreateRepeatDomNode001, TestSize.Level1)
2130 {
2131 /**
2132 * @tc.steps: step1. construct json string.
2133 */
2134 const std::string rootJson = "{\n"
2135 "\t\"template\": {\n"
2136 "\t\t\"attr\": {},\n"
2137 "\t\t\"repeat\": }\"{{list}}\"\n"
2138 "\t},\n"
2139 "\t\"styles\": {},\n"
2140 "\t\"actions\": {},\n"
2141 "\t\"data\": {\n"
2142 "\t\t\"list\": [\n"
2143 "\t\t\t{\n"
2144 "\t\t\t\t\"name\": \"aa\",\n"
2145 "\t\t\t\t\"idx\": 1\n"
2146 "\t\t\t},\n"
2147 "\t\t\t{\n"
2148 "\t\t\t\t\"name\": \"bb\",\n"
2149 "\t\t\t\t\"idx\": 2\n"
2150 "\t\t\t},\n"
2151 "\t\t\t{\n"
2152 "\t\t\t\t\"name\": \"cc\",\n"
2153 "\t\t\t\t\"idx\": 1\n"
2154 "\t\t\t}\n"
2155 "\t\t]\n"
2156 "\t}\n"
2157 "}";
2158 auto rootBody = JsonUtil::ParseJsonString(rootJson);
2159 auto rootTemplate = rootBody->GetValue("template");
2160 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
2161 bool ret = jsCardParser->Initialize();
2162 auto document = AceType::MakeRefPtr<DOMDocument>(1);
2163 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
2164 jsCardParser->CreateRepeatDomNode(page, rootTemplate, 1);
2165 ASSERT_EQ(ret, false);
2166 }
2167
2168 /**
2169 * @tc.name: JsCardParserCreateRepeatDomNode002
2170 * @tc.desc: Test js card parser CreateRepeatDomNode when repeatValue is
2171 * {{list}} and repeat data does not contains list value.
2172 * @tc.type: FUNC
2173 */
2174 HWTEST_F(CardFrontendTest, JsCardParserCreateRepeatDomNode002, TestSize.Level1)
2175 {
2176 /**
2177 * @tc.steps: step1. construct json string.
2178 */
2179 const std::string rootJson = "{\n"
2180 "\t\"template\": {\n"
2181 "\t\t\"attr\": {},\n"
2182 "\t\t\"repeat\": \"{{list}}\"\n"
2183 "\t},\n"
2184 "\t\"styles\": {},\n"
2185 "\t\"actions\": {},\n"
2186 "\t\"data\": {\n"
2187 "\t\t\"list1\": [\n"
2188 "\t\t\t{\n"
2189 "\t\t\t\t\"name\": \"aa\",\n"
2190 "\t\t\t\t\"idx\": 1\n"
2191 "\t\t\t},\n"
2192 "\t\t\t{\n"
2193 "\t\t\t\t\"name\": \"bb\",\n"
2194 "\t\t\t\t\"idx\": 2\n"
2195 "\t\t\t},\n"
2196 "\t\t\t{\n"
2197 "\t\t\t\t\"name\": \"cc\",\n"
2198 "\t\t\t\t\"idx\": 1\n"
2199 "\t\t\t}\n"
2200 "\t\t]\n"
2201 "\t}\n"
2202 "}";
2203 auto rootBody = JsonUtil::ParseJsonString(rootJson);
2204 auto rootTemplate = rootBody->GetValue("template");
2205 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
2206 bool ret = jsCardParser->Initialize();
2207 auto document = AceType::MakeRefPtr<DOMDocument>(1);
2208 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
2209 jsCardParser->CreateRepeatDomNode(page, rootTemplate, 1);
2210 ASSERT_EQ(ret, true);
2211 }
2212
2213 /**
2214 * @tc.name: JsCardParserCreateRepeatDomNode003
2215 * @tc.desc: Test js card parser CreateRepeatDomNode when repeatValue is
2216 * {"exp": {{list}}, "key":"index", "value": "item"} and repeat data does not contains exp value.
2217 * @tc.type: FUNC
2218 */
2219 HWTEST_F(CardFrontendTest, JsCardParserCreateRepeatDomNode003, TestSize.Level1)
2220 {
2221 /**
2222 * @tc.steps: step1. construct json string.
2223 */
2224 const std::string rootJson = "{\n"
2225 "\t\"template\": {\n"
2226 "\t\t\"attr\": {\n"
2227 "\t\t\t\"value\": \"{{item.name}}\",\n"
2228 "\t\t\t\"index\": \"{{item.idx}}\"\n"
2229 "\t\t},\n"
2230 "\t\t\"type\": \"text\",\n"
2231 "\t\t\"repeat\": {\n"
2232 "\t\t\t\"exp1\": \"{{list}}\",\n"
2233 "\t\t\t\"value\": \"item\"\n"
2234 "\t\t}\n"
2235 "\t},\n"
2236 "\t\"styles\": {},\n"
2237 "\t\"actions\": {},\n"
2238 "\t\"data\": {\n"
2239 "\t\t\"list\": [\n"
2240 "\t\t\t{\n"
2241 "\t\t\t\t\"name\": \"aa\",\n"
2242 "\t\t\t\t\"idx\": 1\n"
2243 "\t\t\t},\n"
2244 "\t\t\t{\n"
2245 "\t\t\t\t\"name\": \"bb\",\n"
2246 "\t\t\t\t\"idx\": 2\n"
2247 "\t\t\t},\n"
2248 "\t\t\t{\n"
2249 "\t\t\t\t\"name\": \"cc\",\n"
2250 "\t\t\t\t\"idx\": 1\n"
2251 "\t\t\t}\n"
2252 "\t\t]\n"
2253 "\t}\n"
2254 "}";
2255 auto rootBody = JsonUtil::ParseJsonString(rootJson);
2256 auto rootTemplate = rootBody->GetValue("template");
2257 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
2258 bool ret = jsCardParser->Initialize();
2259 auto document = AceType::MakeRefPtr<DOMDocument>(1);
2260 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
2261 jsCardParser->CreateRepeatDomNode(page, rootTemplate, 1);
2262 ASSERT_EQ(ret, true);
2263 }
2264
2265 /**
2266 * @tc.name: JsCardParserCreateRepeatDomNode004
2267 * @tc.desc: Test js card parser CreateRepeatDomNode when repeatValue is
2268 * {"exp": {{list}}, "key":"index", "value": "item"} and exp does not contains list value.
2269 * @tc.type: FUNC
2270 */
2271 HWTEST_F(CardFrontendTest, JsCardParserCreateRepeatDomNode004, TestSize.Level1)
2272 {
2273 /**
2274 * @tc.steps: step1. construct json string.
2275 */
2276 const std::string rootJson = "{\n"
2277 "\t\"template\": {\n"
2278 "\t\t\"attr\": {\n"
2279 "\t\t\t\"value\": \"{{item.name}}\",\n"
2280 "\t\t\t\"index\": \"{{item.idx}}\"\n"
2281 "\t\t},\n"
2282 "\t\t\"type\": \"text\",\n"
2283 "\t\t\"repeat\": {\n"
2284 "\t\t\t\"exp\": \"{{list}}\",\n"
2285 "\t\t\t\"value\": \"item\"\n"
2286 "\t\t}\n"
2287 "\t},\n"
2288 "\t\"styles\": {},\n"
2289 "\t\"actions\": {},\n"
2290 "\t\"data\": {\n"
2291 "\t\t\"list1\": [\n"
2292 "\t\t\t{\n"
2293 "\t\t\t\t\"name\": \"aa\",\n"
2294 "\t\t\t\t\"idx\": 1\n"
2295 "\t\t\t},\n"
2296 "\t\t\t{\n"
2297 "\t\t\t\t\"name\": \"bb\",\n"
2298 "\t\t\t\t\"idx\": 2\n"
2299 "\t\t\t},\n"
2300 "\t\t\t{\n"
2301 "\t\t\t\t\"name\": \"cc\",\n"
2302 "\t\t\t\t\"idx\": 1\n"
2303 "\t\t\t}\n"
2304 "\t\t]\n"
2305 "\t}\n"
2306 "}";
2307 auto rootBody = JsonUtil::ParseJsonString(rootJson);
2308 auto rootTemplate = rootBody->GetValue("template");
2309 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
2310 bool ret = jsCardParser->Initialize();
2311 auto document = AceType::MakeRefPtr<DOMDocument>(1);
2312 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
2313 jsCardParser->CreateRepeatDomNode(page, rootTemplate, 1);
2314 ASSERT_EQ(ret, true);
2315 }
2316
2317 /**
2318 * @tc.name: JsCardParserGetClockConfig001
2319 * @tc.desc: Test js card parser GetClockConfig when clockconfig value is string value.
2320 * @tc.type: FUNC
2321 */
2322 HWTEST_F(CardFrontendTest, JsCardParserGetClockConfig001, TestSize.Level1)
2323 {
2324 /**
2325 * @tc.steps: step1. construct json string.
2326 */
2327 const std::string rootJson = "{\n"
2328 "\t\"template\": {\n"
2329 "\t\t\"attr\": {},\n"
2330 "\t\t\"repeat\": \"{{list}}\"\n"
2331 "\t},\n"
2332 "\t\"styles\": {},\n"
2333 "\t\"actions\": {},\n"
2334 "\t\"data\": {\n"
2335 "\t\t\"list\": [\n"
2336 "\t\t\t{\n"
2337 "\t\t\t\t\"name\": \"aa\",\n"
2338 "\t\t\t\t\"idx\": 1\n"
2339 "\t\t\t},\n"
2340 "\t\t\t{\n"
2341 "\t\t\t\t\"name\": \"bb\",\n"
2342 "\t\t\t\t\"idx\": 2\n"
2343 "\t\t\t},\n"
2344 "\t\t\t{\n"
2345 "\t\t\t\t\"name\": \"cc\",\n"
2346 "\t\t\t\t\"idx\": 1\n"
2347 "\t\t\t}\n"
2348 "\t\t]\n"
2349 "\t},\n"
2350 "\t\"clockconfig\": {\n"
2351 "\t\t\"digitColor\": \"digitColor\",\n"
2352 "\t\t\"digitColorNight\": \"digitColorNight\",\n"
2353 "\t\t\"digitRadiusRatio\": \"100\",\n"
2354 "\t\t\"digitSizeRatio\": \"300\",\n"
2355 "\t\t\"face\": \"face\",\n"
2356 "\t\t\"faceNight\": \"faceNight\",\n"
2357 "\t\t\"hourHand\": \"hourHand\",\n"
2358 "\t\t\"hourHandNight\": \"hourHandNight\",\n"
2359 "\t\t\"minuteHand\": \"minuteHand\",\n"
2360 "\t\t\"minuteHandNight\": \"minuteHandNight\",\n"
2361 "\t\t\"secondHand\": \"secondHand\",\n"
2362 "\t\t\"secondHandNight\": \"secondHandNight\",\n"
2363 "\t\t\"showdigit\": \"showdigit\"\n"
2364 "\t}\n"
2365 "}";
2366 auto rootBody = JsonUtil::ParseJsonString(rootJson);
2367 auto rootTemplate = rootBody->GetValue("clockconfig");
2368 ASSERT_EQ(rootTemplate->GetArraySize(), 13);
2369 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
2370 bool ret = jsCardParser->Initialize();
2371 ClockConfig clockConfig;
2372 jsCardParser->GetClockConfig(rootTemplate, clockConfig);
2373 ASSERT_EQ(ret, true);
2374 ASSERT_EQ(clockConfig.digitColor_, "digitColor");
2375 ASSERT_EQ(clockConfig.digitColorNight_, "digitColorNight");
2376 ASSERT_EQ(clockConfig.digitRadiusRatio_, 100);
2377 ASSERT_EQ(clockConfig.digitSizeRatio_, 300);
2378 ASSERT_EQ(clockConfig.clockFaceSrc_, "face");
2379 ASSERT_EQ(clockConfig.clockFaceNightSrc_, "faceNight");
2380 ASSERT_EQ(clockConfig.hourHandSrc_, "hourHand");
2381 ASSERT_EQ(clockConfig.hourHandNightSrc_, "hourHandNight");
2382 ASSERT_EQ(clockConfig.minuteHandSrc_, "minuteHand");
2383 ASSERT_EQ(clockConfig.minuteHandNightSrc_, "minuteHandNight");
2384 ASSERT_EQ(clockConfig.secondHandSrc_, "secondHand");
2385 ASSERT_EQ(clockConfig.secondHandNightSrc_, "secondHandNight");
2386 }
2387
2388 /**
2389 * @tc.name: JsCardParserGetClockConfig002
2390 * @tc.desc: Test js card parser GetClockConfig when clockconfig value is variable value.
2391 * @tc.type: FUNC
2392 */
2393 HWTEST_F(CardFrontendTest, JsCardParserGetClockConfig002, TestSize.Level1)
2394 {
2395 /**
2396 * @tc.steps: step1. construct json string.
2397 */
2398 const std::string rootJson = "{\n"
2399 "\t\"template\": {\n"
2400 "\t\t\"attr\": {},\n"
2401 "\t\t\"repeat\": \"{{list}}\"\n"
2402 "\t},\n"
2403 "\t\"styles\": {},\n"
2404 "\t\"actions\": {},\n"
2405 "\t\"data\": {\n"
2406 "\t\t\"face\": \"face\",\n"
2407 "\t\t\"faceNight\": \"faceNight\",\n"
2408 "\t\t\"hourHand\": \"hourHand\",\n"
2409 "\t\t\"hourHandNight\": \"hourHandNight\",\n"
2410 "\t\t\"minuteHand\": \"minuteHand\",\n"
2411 "\t\t\"minuteHandNight\": \"minuteHandNight\",\n"
2412 "\t\t\"secondHand\": \"secondHand\",\n"
2413 "\t\t\"secondHandNight\": \"secondHandNight\"\n"
2414 "\t},\n"
2415 "\t\"clockconfig\": {\n"
2416 "\t\t\"digitColor\": \"digitColor\",\n"
2417 "\t\t\"digitColorNight\": \"digitColorNight\",\n"
2418 "\t\t\"digitRadiusRatio\": \"100\",\n"
2419 "\t\t\"digitSizeRatio\": \"300\",\n"
2420 "\t\t\"face\": \"{{face}}\",\n"
2421 "\t\t\"faceNight\": \"{{faceNight}}\",\n"
2422 "\t\t\"hourHand\": \"{{hourHand}}\",\n"
2423 "\t\t\"hourHandNight\": \"{{hourHandNight}}\",\n"
2424 "\t\t\"minuteHand\": \"{{minuteHand}}\",\n"
2425 "\t\t\"minuteHandNight\": \"{{minuteHandNight}}\",\n"
2426 "\t\t\"secondHand\": \"{{secondHand}}\",\n"
2427 "\t\t\"secondHandNight\": \"{{secondHandNight}}\",\n"
2428 "\t\t\"showdigit\": \"showdigit\"\n"
2429 "\t}\n"
2430 "}";
2431 auto rootBody = JsonUtil::ParseJsonString(rootJson);
2432 auto rootTemplate = rootBody->GetValue("clockconfig");
2433 ASSERT_EQ(rootTemplate->GetArraySize(), 13);
2434 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
2435 bool ret = jsCardParser->Initialize();
2436 ClockConfig clockConfig;
2437 jsCardParser->GetClockConfig(rootTemplate, clockConfig);
2438 ASSERT_EQ(ret, true);
2439 ASSERT_EQ(clockConfig.digitColor_, "digitColor");
2440 ASSERT_EQ(clockConfig.digitColorNight_, "digitColorNight");
2441 ASSERT_EQ(clockConfig.digitRadiusRatio_, 100);
2442 ASSERT_EQ(clockConfig.digitSizeRatio_, 300);
2443 ASSERT_EQ(clockConfig.clockFaceSrc_, "face");
2444 ASSERT_EQ(clockConfig.clockFaceNightSrc_, "faceNight");
2445 ASSERT_EQ(clockConfig.hourHandSrc_, "hourHand");
2446 ASSERT_EQ(clockConfig.hourHandNightSrc_, "hourHandNight");
2447 ASSERT_EQ(clockConfig.minuteHandSrc_, "minuteHand");
2448 ASSERT_EQ(clockConfig.minuteHandNightSrc_, "minuteHandNight");
2449 ASSERT_EQ(clockConfig.secondHandSrc_, "secondHand");
2450 ASSERT_EQ(clockConfig.secondHandNightSrc_, "secondHandNight");
2451 }
2452
2453 /**
2454 * @tc.name: JsCardParserGetClockConfig003
2455 * @tc.desc: Test js card parser GetClockConfig when clockconfig is invalid.
2456 * @tc.type: FUNC
2457 */
2458 HWTEST_F(CardFrontendTest, JsCardParserGetClockConfig003, TestSize.Level1)
2459 {
2460 /**
2461 * @tc.steps: step1. construct json string.
2462 */
2463 const std::string rootJson = "{\n"
2464 "\t\"template\": {\n"
2465 "\t\t\"attr\": {},\n"
2466 "\t\t\"repeat\": \"{{list}}\"\n"
2467 "\t},\n"
2468 "\t\"styles\": {},\n"
2469 "\t\"actions\": {},\n"
2470 "\t\"data\": {\n"
2471 "\t\t\"face\": \"face\",\n"
2472 "\t\t\"faceNight\": \"faceNight\",\n"
2473 "\t\t\"hourHand\": \"hourHand\",\n"
2474 "\t\t\"hourHandNight\": \"hourHandNight\",\n"
2475 "\t\t\"minuteHand\": \"minuteHand\",\n"
2476 "\t\t\"minuteHandNight\": \"minuteHandNight\",\n"
2477 "\t\t\"secondHand\": \"secondHand\",\n"
2478 "\t\t\"secondHandNight\": \"secondHandNight\"\n"
2479 "\t},\n"
2480 "\t\"clockconfig\": \n"
2481 "\t\t\"digitColor\": \"digitColor\",\n"
2482 "\t\t\"digitColorNight\": \"digitColorNight\",\n"
2483 "\t\t\"digitRadiusRatio\": \"100\",\n"
2484 "\t\t\"digitSizeRatio\": \"300\",\n"
2485 "\t\t\"face\": \"{{face}}\",\n"
2486 "\t\t\"faceNight\": \"{{faceNight}}\",\n"
2487 "\t\t\"hourHand\": \"{{hourHand}}\",\n"
2488 "\t\t\"hourHandNight\": \"{{hourHandNight}}\",\n"
2489 "\t\t\"minuteHand\": \"{{minuteHand}}\",\n"
2490 "\t\t\"minuteHandNight\": \"{{minuteHandNight}}\",\n"
2491 "\t\t\"secondHand\": \"{{secondHand}}\",\n"
2492 "\t\t\"secondHandNight\": \"{{secondHandNight}}\",\n"
2493 "\t\t\"showdigit\": \"showdigit\"\n"
2494 "\t}\n"
2495 "}";
2496 auto rootBody = JsonUtil::ParseJsonString(rootJson);
2497 auto rootTemplate = rootBody->GetValue("clockconfig");
2498 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
2499 bool ret = jsCardParser->Initialize();
2500 ClockConfig clockConfig;
2501 jsCardParser->GetClockConfig(rootTemplate, clockConfig);
2502 ASSERT_EQ(ret, false);
2503 ASSERT_EQ(clockConfig.digitColor_, "");
2504 ASSERT_EQ(clockConfig.digitColorNight_, "#00000000");
2505 ASSERT_EQ(clockConfig.digitRadiusRatio_, 0.7);
2506 ASSERT_EQ(clockConfig.digitSizeRatio_, 0.08);
2507 ASSERT_EQ(clockConfig.clockFaceSrc_, "");
2508 ASSERT_EQ(clockConfig.clockFaceNightSrc_, "");
2509 ASSERT_EQ(clockConfig.hourHandSrc_, "");
2510 ASSERT_EQ(clockConfig.hourHandNightSrc_, "");
2511 ASSERT_EQ(clockConfig.minuteHandSrc_, "");
2512 ASSERT_EQ(clockConfig.minuteHandNightSrc_, "");
2513 ASSERT_EQ(clockConfig.secondHandSrc_, "");
2514 ASSERT_EQ(clockConfig.secondHandNightSrc_, "");
2515 }
2516
2517 /**
2518 * @tc.name: JsCardParserGetClockConfig004
2519 * @tc.desc: Test js card parser GetClockConfig when attr contains clockconfig value.
2520 * @tc.type: FUNC
2521 */
2522 HWTEST_F(CardFrontendTest, JsCardParserGetClockConfig004, TestSize.Level1)
2523 {
2524 /**
2525 * @tc.steps: step1. construct json string.
2526 */
2527 const std::string rootJson = "{\n"
2528 "\t\"template\": {\n"
2529 "\t\t\"attr\": {\n"
2530 "\t\t\t\"clockconfig\": {\n"
2531 "\t\t\t\t\"digitColor\": \"digitColor\",\n"
2532 "\t\t\t\t\"digitColorNight\": \"digitColorNight\",\n"
2533 "\t\t\t\t\"digitRadiusRatio\": \"100\",\n"
2534 "\t\t\t\t\"digitSizeRatio\": \"300\",\n"
2535 "\t\t\t\t\"face\": \"{{face}}\",\n"
2536 "\t\t\t\t\"faceNight\": \"{{faceNight}}\",\n"
2537 "\t\t\t\t\"hourHand\": \"{{hourHand}}\",\n"
2538 "\t\t\t\t\"hourHandNight\": \"{{hourHandNight}}\",\n"
2539 "\t\t\t\t\"minuteHand\": \"{{minuteHand}}\",\n"
2540 "\t\t\t\t\"minuteHandNight\": \"{{minuteHandNight}}\",\n"
2541 "\t\t\t\t\"secondHand\": \"{{secondHand}}\",\n"
2542 "\t\t\t\t\"secondHandNight\": \"{{secondHandNight}}\",\n"
2543 "\t\t\t\t\"showdigit\": \"showdigit\"\n"
2544 "\t\t\t}\n"
2545 "\t\t}\n"
2546 "\t},\n"
2547 "\t\"styles\": {},\n"
2548 "\t\"actions\": {},\n"
2549 "\t\"data\": {\n"
2550 "\t\t\"face\": \"face\",\n"
2551 "\t\t\"faceNight\": \"faceNight\",\n"
2552 "\t\t\"hourHand\": \"hourHand\",\n"
2553 "\t\t\"hourHandNight\": \"hourHandNight\",\n"
2554 "\t\t\"minuteHand\": \"minuteHand\",\n"
2555 "\t\t\"minuteHandNight\": \"minuteHandNight\",\n"
2556 "\t\t\"secondHand\": \"secondHand\",\n"
2557 "\t\t\"secondHandNight\": \"secondHandNight\"\n"
2558 "\t}\n"
2559 "}";
2560 auto rootBody = JsonUtil::ParseJsonString(rootJson);
2561 auto rootTemplate = rootBody->GetValue("template");
2562 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
2563 bool ret = jsCardParser->Initialize();
2564 jsCardParser->SetIsRepeat(true);
2565 auto document = AceType::MakeRefPtr<DOMDocument>(1);
2566 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
2567 jsCardParser->CreateDomNode(page, rootTemplate, -1);
2568 ASSERT_EQ(ret, true);
2569 }
2570
2571 /**
2572 * @tc.name: JsCardParserGetClockConfig005
2573 * @tc.desc: Test js card parser GetClockConfig when clockconfig is invalid.
2574 * @tc.type: FUNC
2575 */
2576 HWTEST_F(CardFrontendTest, JsCardParserGetClockConfig005, TestSize.Level1)
2577 {
2578 /**
2579 * @tc.steps: step1. construct json string.
2580 */
2581 const std::string rootJson = "{\n"
2582 "\t\"template\": {\n"
2583 "\t\t\"attr\": {\n"
2584 "\t\t\t\"clockconfig1\": {\n"
2585 "\t\t\t\t\"digitColor\": \"digitColor\",\n"
2586 "\t\t\t\t\"digitColorNight\": \"digitColorNight\",\n"
2587 "\t\t\t\t\"digitRadiusRatio\": \"100\",\n"
2588 "\t\t\t\t\"digitSizeRatio\": \"300\",\n"
2589 "\t\t\t\t\"face\": \"{{face}}\",\n"
2590 "\t\t\t\t\"faceNight\": \"{{faceNight}}\",\n"
2591 "\t\t\t\t\"hourHand\": \"{{hourHand}}\",\n"
2592 "\t\t\t\t\"hourHandNight\": \"{{hourHandNight}}\",\n"
2593 "\t\t\t\t\"minuteHand\": \"{{minuteHand}}\",\n"
2594 "\t\t\t\t\"minuteHandNight\": \"{{minuteHandNight}}\",\n"
2595 "\t\t\t\t\"secondHand\": \"{{secondHand}}\",\n"
2596 "\t\t\t\t\"secondHandNight\": \"{{secondHandNight}}\",\n"
2597 "\t\t\t\t\"showdigit\": \"showdigit\"\n"
2598 "\t\t\t}\n"
2599 "\t\t}\n"
2600 "\t},\n"
2601 "\t\"styles\": {},\n"
2602 "\t\"actions\": {},\n"
2603 "\t\"data\": {\n"
2604 "\t\t\"face\": \"face\",\n"
2605 "\t\t\"faceNight\": \"faceNight\",\n"
2606 "\t\t\"hourHand\": \"hourHand\",\n"
2607 "\t\t\"hourHandNight\": \"hourHandNight\",\n"
2608 "\t\t\"minuteHand\": \"minuteHand\",\n"
2609 "\t\t\"minuteHandNight\": \"minuteHandNight\",\n"
2610 "\t\t\"secondHand\": \"secondHand\",\n"
2611 "\t\t\"secondHandNight\": \"secondHandNight\"\n"
2612 "\t}\n"
2613 "}";
2614 auto rootBody = JsonUtil::ParseJsonString(rootJson);
2615 auto rootTemplate = rootBody->GetValue("template");
2616 auto jsCardParser = AceType::MakeRefPtr<JsCardParser>(nullptr, nullptr, std::move(rootBody));
2617 bool ret = jsCardParser->Initialize();
2618 jsCardParser->SetIsRepeat(true);
2619 auto document = AceType::MakeRefPtr<DOMDocument>(1);
2620 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
2621 jsCardParser->CreateDomNode(page, rootTemplate, -1);
2622 ASSERT_EQ(ret, true);
2623 }
2624
2625 /**
2626 * @tc.name: CardFrontendInitialize001
2627 * @tc.desc: Test card frontend Initialize method.
2628 * @tc.type: FUNC
2629 */
2630 HWTEST_F(CardFrontendTest, CardFrontendInitialize001, TestSize.Level1)
2631 {
2632 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2633 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2634 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2635 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2636 ASSERT_NE(cardFrontend->delegate_, nullptr);
2637 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2638 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2639 }
2640
2641 /**
2642 * @tc.name: CardFrontendDestroy001
2643 * @tc.desc: Test card frontend Destroy method.
2644 * @tc.type: FUNC
2645 */
2646 HWTEST_F(CardFrontendTest, CardFrontendDestroy001, TestSize.Level1)
2647 {
2648 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2649 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2650 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2651 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2652 ASSERT_NE(cardFrontend->delegate_, nullptr);
2653 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2654 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2655 cardFrontend->Destroy();
2656 ASSERT_EQ(cardFrontend->parseJsCard_, nullptr);
2657 ASSERT_EQ(cardFrontend->delegate_, nullptr);
2658 ASSERT_EQ(cardFrontend->eventHandler_, nullptr);
2659 }
2660
2661 /**
2662 * @tc.name: CardFrontendAttachPipelineContext001
2663 * @tc.desc: Test card frontend AttachPipelineContext method.
2664 * @tc.type: FUNC
2665 */
2666 HWTEST_F(CardFrontendTest, CardFrontendAttachPipelineContext001, TestSize.Level1)
2667 {
2668 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2669 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2670 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2671 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2672 ASSERT_NE(cardFrontend->delegate_, nullptr);
2673 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2674 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2675 auto pipeline = MockRenderCommon::GetMockContext();
2676 cardFrontend->AttachPipelineContext(pipeline);
2677 ASSERT_NE(cardFrontend->eventHandler_, nullptr);
2678 cardFrontend->AttachPipelineContext(nullptr);
2679 ASSERT_NE(cardFrontend->eventHandler_, nullptr);
2680 }
2681
2682 /**
2683 * @tc.name: CardFrontendSetAssetManager001
2684 * @tc.desc: Test card frontend SetAssetManager method.
2685 * @tc.type: FUNC
2686 */
2687 HWTEST_F(CardFrontendTest, CardFrontendSetAssetManager001, TestSize.Level1)
2688 {
2689 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2690 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2691 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2692 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2693 ASSERT_NE(cardFrontend->delegate_, nullptr);
2694 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2695 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2696 auto assetManager = Referenced::MakeRefPtr<MockAssetManager>();
2697 cardFrontend->SetAssetManager(assetManager);
2698 ASSERT_NE(cardFrontend->assetManager_, nullptr);
2699 }
2700
2701 /**
2702 * @tc.name: CardFrontendParseManifest001
2703 * @tc.desc: Test card frontend ParseManifest method.
2704 * @tc.type: FUNC
2705 */
2706 HWTEST_F(CardFrontendTest, CardFrontendParseManifest001, TestSize.Level1)
2707 {
2708 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2709 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2710 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2711 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2712 ASSERT_NE(cardFrontend->delegate_, nullptr);
2713 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2714 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2715 cardFrontend->ParseManifest();
2716 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2717 ASSERT_NE(cardFrontend->delegate_, nullptr);
2718 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2719 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2720 }
2721
2722 /**
2723 * @tc.name: CardFrontendRunPage001
2724 * @tc.desc: Test card frontend RunPage method.
2725 * @tc.type: FUNC
2726 */
2727 HWTEST_F(CardFrontendTest, CardFrontendRunPage001, TestSize.Level1)
2728 {
2729 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2730 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2731 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2732 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2733 ASSERT_NE(cardFrontend->delegate_, nullptr);
2734 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2735 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2736 cardFrontend->RunPage(1, "", "");
2737 cardFrontend->RunPage(1, "test", "test");
2738 cardFrontend->RunPage(1, "", "test");
2739 cardFrontend->RunPage(1, "test", "");
2740 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2741 ASSERT_NE(cardFrontend->delegate_, nullptr);
2742 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2743 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2744 }
2745
2746 /**
2747 * @tc.name: CardFrontendGetFormSrcPath001
2748 * @tc.desc: Test card frontend GetFormSrcPath method.
2749 * @tc.type: FUNC
2750 */
2751 HWTEST_F(CardFrontendTest, CardFrontendGetFormSrcPath001, TestSize.Level1)
2752 {
2753 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2754 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2755 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2756 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2757 ASSERT_NE(cardFrontend->delegate_, nullptr);
2758 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2759 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2760 auto path = cardFrontend->GetFormSrcPath("", "");
2761 ASSERT_EQ(path, "");
2762 path = cardFrontend->GetFormSrcPath("test", "test");
2763 ASSERT_EQ(path, "testtest");
2764 path = cardFrontend->GetFormSrcPath("test", "");
2765 ASSERT_EQ(path, "test");
2766 path = cardFrontend->GetFormSrcPath("", "test");
2767 ASSERT_EQ(path, "");
2768 }
2769
2770 /**
2771 * @tc.name: CardFrontendGetPage001
2772 * @tc.desc: Test card frontend GetPage method.
2773 * @tc.type: FUNC
2774 */
2775 HWTEST_F(CardFrontendTest, CardFrontendGetPage001, TestSize.Level1)
2776 {
2777 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2778 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2779 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2780 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2781 ASSERT_NE(cardFrontend->delegate_, nullptr);
2782 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2783 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2784 auto page = cardFrontend->GetPage(1);
2785 ASSERT_EQ(page, nullptr);
2786 }
2787
2788 /**
2789 * @tc.name: CardFrontendGetWindowConfig001
2790 * @tc.desc: Test card frontend GetWindowConfig method.
2791 * @tc.type: FUNC
2792 */
2793 HWTEST_F(CardFrontendTest, CardFrontendGetWindowConfig001, TestSize.Level1)
2794 {
2795 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2796 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2797 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2798 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2799 ASSERT_NE(cardFrontend->delegate_, nullptr);
2800 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2801 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2802 auto config = cardFrontend->GetWindowConfig();
2803 ASSERT_EQ(config.designWidth, DEFAULT_DESIGN_WIDTH);
2804 ASSERT_EQ(config.autoDesignWidth, false);
2805 ASSERT_EQ(config.boxWrap, false);
2806 ASSERT_EQ(config.designWidthScale, 0.0);
2807 }
2808
2809 /**
2810 * @tc.name: CardFrontendLoadPage001
2811 * @tc.desc: Test card frontend LoadPage method.
2812 * @tc.type: FUNC
2813 */
2814 HWTEST_F(CardFrontendTest, CardFrontendLoadPage001, TestSize.Level1)
2815 {
2816 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2817 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2818 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2819 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2820 ASSERT_NE(cardFrontend->delegate_, nullptr);
2821 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2822 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2823 cardFrontend->LoadPage("", "");
2824 cardFrontend->LoadPage("test", "test");
2825 cardFrontend->LoadPage("", "test");
2826 cardFrontend->LoadPage("test", "");
2827 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2828 ASSERT_NE(cardFrontend->delegate_, nullptr);
2829 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2830 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2831 }
2832
2833 /**
2834 * @tc.name: CardFrontendParsePage001
2835 * @tc.desc: Test card frontend ParsePage method.
2836 * @tc.type: FUNC
2837 */
2838 HWTEST_F(CardFrontendTest, CardFrontendParsePage001, TestSize.Level1)
2839 {
2840 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2841 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2842 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2843 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2844 ASSERT_NE(cardFrontend->delegate_, nullptr);
2845 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2846 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2847 auto pipeline = MockRenderCommon::GetMockContext();
2848 cardFrontend->AttachPipelineContext(pipeline);
2849 auto document = AceType::MakeRefPtr<DOMDocument>(1);
2850 auto page = AceType::MakeRefPtr<Framework::JsAcePage>(1, document, "", nullptr);
2851 cardFrontend->ParsePage(pipeline, "", "", page);
2852 cardFrontend->ParsePage(pipeline, "test", "test", page);
2853 cardFrontend->ParsePage(pipeline, "", "test", page);
2854 cardFrontend->ParsePage(pipeline, "test", "", page);
2855 cardFrontend->ParsePage(pipeline, "test", "", nullptr);
2856 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2857 ASSERT_NE(cardFrontend->delegate_, nullptr);
2858 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2859 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2860 }
2861
2862 /**
2863 * @tc.name: CardFrontendUpdateData001
2864 * @tc.desc: Test card frontend UpdateData method.
2865 * @tc.type: FUNC
2866 */
2867 HWTEST_F(CardFrontendTest, CardFrontendUpdateData001, TestSize.Level1)
2868 {
2869 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2870 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2871 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2872 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2873 ASSERT_NE(cardFrontend->delegate_, nullptr);
2874 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2875 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2876 cardFrontend->UpdateData("");
2877 cardFrontend->UpdateData("test");
2878 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2879 ASSERT_NE(cardFrontend->delegate_, nullptr);
2880 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2881 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2882 }
2883
2884 /**
2885 * @tc.name: CardFrontendUpdatePageData001
2886 * @tc.desc: Test card frontend UpdatePageData method.
2887 * @tc.type: FUNC
2888 */
2889 HWTEST_F(CardFrontendTest, CardFrontendUpdatePageData001, TestSize.Level1)
2890 {
2891 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2892 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2893 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2894 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2895 ASSERT_NE(cardFrontend->delegate_, nullptr);
2896 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2897 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2898 cardFrontend->UpdatePageData("");
2899 cardFrontend->UpdatePageData("test");
2900 cardFrontend->delegate_ = nullptr;
2901 cardFrontend->parseJsCard_ = nullptr;
2902 cardFrontend->UpdatePageData("test");
2903 ASSERT_EQ(cardFrontend->delegate_, nullptr);
2904 ASSERT_EQ(cardFrontend->parseJsCard_, nullptr);
2905 }
2906
2907 /**
2908 * @tc.name: CardFrontendSetColorMode001
2909 * @tc.desc: Test card frontend SetColorMode method.
2910 * @tc.type: FUNC
2911 */
2912 HWTEST_F(CardFrontendTest, CardFrontendSetColorMode001, TestSize.Level1)
2913 {
2914 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2915 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2916 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2917 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2918 ASSERT_NE(cardFrontend->delegate_, nullptr);
2919 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2920 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2921 cardFrontend->SetColorMode(ColorMode::LIGHT);
2922 ASSERT_EQ(cardFrontend->colorMode_, ColorMode::LIGHT);
2923 }
2924
2925 /**
2926 * @tc.name: CardFrontendRebuildAllPages001
2927 * @tc.desc: Test card frontend RebuildAllPages method.
2928 * @tc.type: FUNC
2929 */
2930 HWTEST_F(CardFrontendTest, CardFrontendRebuildAllPages001, TestSize.Level1)
2931 {
2932 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2933 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2934 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2935 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2936 ASSERT_NE(cardFrontend->delegate_, nullptr);
2937 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2938 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2939 cardFrontend->RebuildAllPages();
2940 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2941 ASSERT_NE(cardFrontend->delegate_, nullptr);
2942 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2943 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2944 }
2945
2946 /**
2947 * @tc.name: CardFrontendOnSurfaceChanged001
2948 * @tc.desc: Test card frontend OnSurfaceChanged method.
2949 * @tc.type: FUNC
2950 */
2951 HWTEST_F(CardFrontendTest, CardFrontendOnSurfaceChanged001, TestSize.Level1)
2952 {
2953 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2954 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2955 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2956 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2957 ASSERT_NE(cardFrontend->delegate_, nullptr);
2958 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2959 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2960 cardFrontend->OnSurfaceChanged(0, 0);
2961 cardFrontend->OnSurfaceChanged(100, 100);
2962 cardFrontend->OnSurfaceChanged(-100, -100);
2963 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2964 ASSERT_NE(cardFrontend->delegate_, nullptr);
2965 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2966 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2967 }
2968
2969 /**
2970 * @tc.name: CardFrontendHandleSurfaceChanged001
2971 * @tc.desc: Test card frontend HandleSurfaceChanged method.
2972 * @tc.type: FUNC
2973 */
2974 HWTEST_F(CardFrontendTest, CardFrontendHandleSurfaceChanged001, TestSize.Level1)
2975 {
2976 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
2977 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
2978 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
2979 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2980 ASSERT_NE(cardFrontend->delegate_, nullptr);
2981 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2982 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2983 cardFrontend->HandleSurfaceChanged(0, 0);
2984 cardFrontend->HandleSurfaceChanged(100, 100);
2985 cardFrontend->HandleSurfaceChanged(-100, -100);
2986 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
2987 ASSERT_NE(cardFrontend->delegate_, nullptr);
2988 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
2989 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
2990 }
2991
2992 /**
2993 * @tc.name: CardFrontendOnMediaFeatureUpdate001
2994 * @tc.desc: Test card frontend OnMediaFeatureUpdate method.
2995 * @tc.type: FUNC
2996 */
2997 HWTEST_F(CardFrontendTest, CardFrontendOnMediaFeatureUpdate001, TestSize.Level1)
2998 {
2999 auto cardFrontend = AceType::MakeRefPtr<CardFrontend>();
3000 auto taskExecutor = Referenced::MakeRefPtr<MockTaskExecutor>();
3001 cardFrontend->Initialize(FrontendType::JS_CARD, taskExecutor);
3002 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
3003 ASSERT_NE(cardFrontend->delegate_, nullptr);
3004 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
3005 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
3006 cardFrontend->OnMediaFeatureUpdate();
3007 ASSERT_NE(cardFrontend->taskExecutor_, nullptr);
3008 ASSERT_NE(cardFrontend->delegate_, nullptr);
3009 ASSERT_NE(cardFrontend->manifestParser_, nullptr);
3010 ASSERT_EQ(cardFrontend->type_, FrontendType::JS_CARD);
3011 }
3012 } // namespace OHOS::Ace::Framework