1 /*
2 * Copyright (c) 2023 iSoftStone Information Technology (Group) Co.,Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "gtest/gtest.h"
17 #define protected public
18 #define private public
19 #include "test/mock/core/common/mock_container.h"
20 #include "test/mock/core/common/mock_theme_manager.h"
21 #include "test/mock/core/pipeline/mock_pipeline_context.h"
22
23 #include "core/interfaces/native/node/api.h"
24 #include "core/components/common/properties/decoration.h"
25 #include "core/components/popup/popup_theme.h"
26 #include "core/components_ng/base/frame_node.h"
27 #include "core/components_ng/base/view_abstract.h"
28 #include "core/components_ng/base/view_abstract_model.h"
29 #include "core/components_ng/base/view_abstract_model_ng.h"
30 #include "core/components_ng/base/view_stack_model.h"
31 #include "core/components_ng/base/view_stack_model_ng.h"
32 #include "core/components_ng/layout/layout_property.h"
33 #include "core/components_ng/pattern/bubble/bubble_pattern.h"
34 #include "core/components_ng/pattern/menu/menu_pattern.h"
35 #include "core/components_ng/pattern/navigation/navigation_model_ng.h"
36 #include "core/components_ng/pattern/navigator/navigator_model_ng.h"
37 #include "core/components_ng/pattern/navrouter/navrouter_model_ng.h"
38 #include "core/components_ng/pattern/picker/datepicker_model_ng.h"
39 #include "core/components_ng/pattern/stepper/stepper_item_model_ng.h"
40 #include "core/components_ng/pattern/text/text_model_ng.h"
41 #include "core/components_ng/property/property.h"
42 #include "core/pipeline/base/element_register.h"
43 #include "frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_model_ng.h"
44 #include "frameworks/core/components_ng/pattern/panel/sliding_panel_model_ng.h"
45 #include "frameworks/core/pipeline/base/element.h"
46
47 #undef private
48 #undef protected
49 using namespace testing;
50 using namespace testing::ext;
51
52 namespace OHOS::Ace::NG {
53 namespace {
54 const Dimension WIDTH { 50.0, DimensionUnit::PX };
55 const Dimension HEIGHT { 100.0, DimensionUnit::PX };
56 const Dimension MIN_WIDTH { 10.0, DimensionUnit::PX };
57 const Dimension MIN_HEIGHT { 20.0, DimensionUnit::PX };
58 const Dimension RADIUS { 10.0, DimensionUnit::PX };
59 const Dimension LEFT { 10.0, DimensionUnit::PX };
60 const Dimension TOP { 20.0, DimensionUnit::PX };
61 const Dimension RIGHT { 10.0, DimensionUnit::PX };
62 const Dimension BOTTOM { 20.0, DimensionUnit::PX };
63 const Dimension VALUE { -50.0, DimensionUnit::PX };
64 const Dimension ZERO { 0.0, DimensionUnit::PX };
65 const InvertVariant invert = 0.0f;
66 const OffsetF OFFSETF { 1.0, 1.0 };
67 const Offset OFFSET { 2.0, 2.0 };
68 const float RATIO = 1.0f;
69 const double OPACITYS = 10;
70 const int32_t TEN = 10;
71 const int32_t FOUF = 4;
72 const int32_t INDEX = 1;
73 const Color BLUE = Color(0xff0000ff);
74 const SafeAreaExpandOpts safeAreaExpandOpts = SafeAreaExpandOpts();
75 const std::vector<ObscuredReasons> reasonsVector = { ObscuredReasons::PLACEHOLDER };
76
77 const BackgroundImageSize BACKGROUNDSIZE { BackgroundImageSizeType::AUTO, 1.0 };
78 const BackgroundImagePosition BACKGROUNDPOSITION { BackgroundImagePositionType::PERCENT, -1.0,
79 BackgroundImagePositionType::PERCENT, 0.0 };
80
81 constexpr char TAG_ROOT[] = "root";
82 constexpr char TAG_CHILD[] = "child";
83 const auto MOCK_PATTERN_ROOT = AceType::MakeRefPtr<Pattern>();
84 const auto FRAME_NODE_ROOT = FrameNode::CreateFrameNode(TAG_ROOT, 1, MOCK_PATTERN_ROOT, true);
85 const auto FRAME_NODE_CHILD = FrameNode::CreateFrameNode(TAG_CHILD, 2, MOCK_PATTERN_ROOT, false);
86 const uint32_t REGISTER_ID = 1 << 20;
87 const auto FRAME_NODE_REGISTER = FrameNode::CreateFrameNode(TAG_ROOT, REGISTER_ID, MOCK_PATTERN_ROOT, false);
88
89 std::string srcimages = "common/images/mmm.jpg";
90 const std::string VALUE_EMPTY = "";
91 const std::string VALUE_X = "X";
92 const std::string VALUE_CX = "CX";
93 ViewAbstractModelNG viewAbstractModelNG;
__anonbfd7bfda0202() 94 auto callback = []() { srcimages = "test"; };
95 int32_t flag = 0;
96 const ImageSourceInfo imageSourceInfo = ImageSourceInfo("common/images/mmm.jpg", "abstract", "abstract");
97 }; // namespace
98 class ViewAbstractTestNg : public testing::Test {
99 public:
SetUpTestSuite()100 static void SetUpTestSuite()
101 {
102 MockPipelineContext::SetUp();
103 MockContainer::SetUp();
104 MockContainer::Current()->pipelineContext_ = PipelineBase::GetCurrentContext();
105 auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
106 PipelineBase::GetCurrentContext()->SetThemeManager(themeManager);
107 PipelineBase::GetCurrentContext()->SetEventManager(AceType::MakeRefPtr<EventManager>());
108 EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<PopupTheme>()));
109 }
TearDownTestSuite()110 static void TearDownTestSuite()
111 {
112 MockContainer::Current()->pipelineContext_ = nullptr;
113 MockPipelineContext::TearDown();
114 }
115 };
116
117 /**
118 * @tc.name: ViewAbstractTest001
119 * @tc.desc: Test the operation of View_Abstract
120 * @tc.type: FUNC
121 */
122 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest001, TestSize.Level1)
123 {
124 /**
125 * @tc.steps: step1.The FrameNode is null, related function is called.
126 */
127 ViewAbstract::SetWidth(NG::CalcLength(WIDTH));
128 ViewAbstract::SetHeight(NG::CalcLength(HEIGHT));
129 ViewAbstract::SetMinWidth(NG::CalcLength(MIN_WIDTH));
130 ViewAbstract::SetMinHeight(NG::CalcLength(MIN_HEIGHT));
131 ViewAbstract::SetMaxWidth(NG::CalcLength(MIN_WIDTH));
132 ViewAbstract::SetMaxHeight(NG::CalcLength(MIN_HEIGHT));
133 ViewAbstract::ResetAspectRatio();
134 ViewAbstract::ClearWidthOrHeight(true);
135
136 /**
137 * @tc.expected: Return expected results..
138 */
139 EXPECT_EQ(ViewStackProcessor::GetInstance()->GetMainElementNode(), nullptr);
140 }
141
142 /**
143 * @tc.name: ViewAbstractTest002
144 * @tc.desc: Test the operation of View_Abstract.
145 * @tc.type: FUNC
146 */
147 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest002, TestSize.Level1)
148 {
149 /**
150 * @tc.steps: step1.push FrameNode is not null, related function is called.
151 */
152 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
153 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
154
155 ViewAbstract::SetWidth(NG::CalcLength(WIDTH));
156 ViewAbstract::SetHeight(NG::CalcLength(HEIGHT));
157 ViewAbstract::SetMinWidth(NG::CalcLength(MIN_WIDTH));
158 ViewAbstract::SetMinHeight(NG::CalcLength(MIN_HEIGHT));
159 ViewAbstract::SetMaxWidth(NG::CalcLength(MIN_WIDTH));
160 ViewAbstract::SetMaxHeight(NG::CalcLength(MIN_HEIGHT));
161 ViewAbstract::ResetAspectRatio();
162 ViewAbstract::ClearWidthOrHeight(true);
163
164 /**
165 * @tc.expected: Return expected results..
166 */
167 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
168 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
169 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
170 ASSERT_NE(frameNode, nullptr);
171 auto Node = AceType::DynamicCast<NG::FrameNode>(frameNode);
172 ASSERT_NE(Node, nullptr);
173 auto layoutProperty = Node->GetLayoutProperty();
174 ASSERT_NE(layoutProperty, nullptr);
175 ViewStackProcessor::GetInstance()->instance = nullptr;
176 }
177
178 /**
179 * @tc.name: ViewAbstractTest003
180 * @tc.desc: Test the operation of View_Abstract
181 * @tc.type: FUNC
182 */
183 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest003, TestSize.Level1)
184 {
185 /**
186 * @tc.steps: step1.The FrameNode is null, related function is called.
187 */
188 ViewAbstract::SetAspectRatio(RATIO);
189 ViewAbstract::SetBackgroundColor(BLUE);
190 ViewAbstract::SetBackgroundImage(imageSourceInfo);
191 ViewAbstract::SetBackgroundImageSize(BACKGROUNDSIZE);
192 ViewAbstract::SetBackgroundImagePosition(BACKGROUNDPOSITION);
193 ViewAbstract::SetLayoutWeight(TEN);
194
195 BlurStyleOption blurStyleOption;
196 blurStyleOption.blurStyle = BlurStyle::NO_MATERIAL;
197 blurStyleOption.colorMode = ThemeColorMode::SYSTEM;
198 blurStyleOption.adaptiveColor = AdaptiveColor::DEFAULT;
199 ViewAbstract::SetBackgroundBlurStyle(blurStyleOption);
200
201 std::map<AlignDirection, AlignRule> alignRules;
202 ViewAbstract::SetAlignRules(alignRules);
203 auto repeat = static_cast<ImageRepeat>(INDEX);
204 ViewAbstract::SetBackgroundImageRepeat(repeat);
205 auto direction = static_cast<TextDirection>(INDEX);
206 ViewAbstract::SetLayoutDirection(direction);
207
208 /**
209 * @tc.expected: Return expected results..
210 */
211 EXPECT_EQ(ViewStackProcessor::GetInstance()->GetMainElementNode(), nullptr);
212 }
213
214 /**
215 * @tc.name: ViewAbstractTest004
216 * @tc.desc: Test the operation of View_Abstract.
217 * @tc.type: FUNC
218 */
219 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest004, TestSize.Level1)
220 {
221 /**
222 * @tc.steps: step1.push FrameNode is not null, related function is called.
223 */
224 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
225 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
226
227 ViewAbstract::SetAspectRatio(RATIO);
228 ViewAbstract::SetBackgroundColor(BLUE);
229 ViewAbstract::SetBackgroundImage(imageSourceInfo);
230 ViewAbstract::SetBackgroundImageSize(BACKGROUNDSIZE);
231 ViewAbstract::SetBackgroundImagePosition(BACKGROUNDPOSITION);
232 ViewAbstract::SetLayoutWeight(TEN);
233
234 BlurStyleOption blurStyleOption;
235 blurStyleOption.blurStyle = BlurStyle::NO_MATERIAL;
236 blurStyleOption.colorMode = ThemeColorMode::SYSTEM;
237 blurStyleOption.adaptiveColor = AdaptiveColor::DEFAULT;
238 ViewAbstract::SetBackgroundBlurStyle(blurStyleOption);
239
240 std::map<AlignDirection, AlignRule> alignRules;
241 ViewAbstract::SetAlignRules(alignRules);
242 auto repeat = static_cast<ImageRepeat>(INDEX);
243 ViewAbstract::SetBackgroundImageRepeat(repeat);
244 auto direction = static_cast<TextDirection>(INDEX);
245 ViewAbstract::SetLayoutDirection(direction);
246
247 /**
248 * @tc.expected: Return expected results.
249 */
250 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
251 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
252 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
253 ASSERT_NE(frameNode, nullptr);
254 auto Node = AceType::DynamicCast<NG::FrameNode>(frameNode);
255 ASSERT_NE(Node, nullptr);
256 auto layoutProperty = Node->GetLayoutProperty<LayoutProperty>();
257 ASSERT_NE(layoutProperty, nullptr);
258 ViewStackProcessor::GetInstance()->instance = nullptr;
259 }
260
261 /**
262 * @tc.name: ViewAbstractTest005
263 * @tc.desc: Test the operation of View_Abstract
264 * @tc.type: FUNC
265 */
266 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest005, TestSize.Level1)
267 {
268 /**
269 * @tc.steps: step1.The FrameNode is null, related function is called.
270 */
271 auto alignSelf = static_cast<FlexAlign>(INDEX);
272 ViewAbstract::SetAlignSelf(alignSelf);
273 ViewAbstract::SetFlexShrink(RATIO);
274 ViewAbstract::SetFlexGrow(RATIO);
275 ViewAbstract::SetFlexBasis(WIDTH);
276 ViewAbstract::SetDisplayIndex(INDEX);
277
278 ViewAbstract::SetPadding(NG::CalcLength(WIDTH));
279 ViewAbstract::SetMargin(NG::CalcLength(WIDTH));
280 ViewAbstract::SetBorderRadius(WIDTH);
281 ViewAbstract::SetBorderColor(BLUE);
282 ViewAbstract::SetBorderWidth(WIDTH);
283 auto borderStyle = static_cast<BorderStyle>(INDEX);
284 ViewAbstract::SetBorderStyle(borderStyle);
285
286 /**
287 * @tc.expected: Return expected results..
288 */
289 EXPECT_EQ(ViewStackProcessor::GetInstance()->GetMainElementNode(), nullptr);
290 }
291
292 /**
293 * @tc.name: ViewAbstractTest006
294 * @tc.desc: Test the operation of View_Abstract.
295 * @tc.type: FUNC
296 */
297 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest006, TestSize.Level1)
298 {
299 /**
300 * @tc.steps: step1.push FrameNode is not null, related function is called.
301 */
302 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
303 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
304
305 auto alignSelf = static_cast<FlexAlign>(INDEX);
306 ViewAbstract::SetAlignSelf(alignSelf);
307 ViewAbstract::SetFlexShrink(RATIO);
308 ViewAbstract::SetFlexGrow(RATIO);
309 ViewAbstract::SetFlexBasis(WIDTH);
310 ViewAbstract::SetDisplayIndex(INDEX);
311
312 ViewAbstract::SetPadding(NG::CalcLength(WIDTH));
313 ViewAbstract::SetMargin(NG::CalcLength(WIDTH));
314 ViewAbstract::SetBorderRadius(WIDTH);
315 ViewAbstract::SetBorderColor(BLUE);
316 ViewAbstract::SetBorderWidth(WIDTH);
317 auto borderStyle = static_cast<BorderStyle>(INDEX);
318 ViewAbstract::SetBorderStyle(borderStyle);
319
320 /**
321 * @tc.expected: Return expected results.
322 */
323 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
324 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
325 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
326 ASSERT_NE(frameNode, nullptr);
327 auto Node = AceType::DynamicCast<NG::FrameNode>(frameNode);
328 ASSERT_NE(Node, nullptr);
329 auto layoutProperty = Node->GetLayoutProperty<LayoutProperty>();
330 ASSERT_NE(layoutProperty, nullptr);
331 ViewStackProcessor::GetInstance()->instance = nullptr;
332 }
333
334 /**
335 * @tc.name: ViewAbstractTest007
336 * @tc.desc: Test the operation of View_Abstract
337 * @tc.type: FUNC
338 */
339 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest007, TestSize.Level1)
340 {
341 /**
342 * @tc.steps: step1.The FrameNode is null, related function is called.
343 */
344 NG::PaddingProperty paddings;
345 ViewAbstract::SetPadding(paddings);
346
347 NG::MarginProperty margins;
348 ViewAbstract::SetMargin(margins);
349
350 NG::BorderRadiusProperty borderRadius;
351 ViewAbstract::SetBorderRadius(borderRadius);
352
353 NG::BorderColorProperty borderColors;
354 ViewAbstract::SetBorderColor(borderColors);
355
356 NG::BorderWidthProperty borderWidth;
357 ViewAbstract::SetBorderWidth(borderWidth);
358
359 NG::BorderStyleProperty borderStyles;
360 ViewAbstract::SetBorderStyle(borderStyles);
361
362 /**
363 * @tc.expected: Return expected results..
364 */
365 EXPECT_EQ(ViewStackProcessor::GetInstance()->GetMainElementNode(), nullptr);
366 }
367
368 /**
369 * @tc.name: ViewAbstractTest008
370 * @tc.desc: Test the operation of View_Abstract.
371 * @tc.type: FUNC
372 */
373 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest008, TestSize.Level1)
374 {
375 /**
376 * @tc.steps: step1.push FrameNode is not null, related function is called.
377 */
378 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
379 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
380
381 NG::PaddingProperty paddings;
382 ViewAbstract::SetPadding(paddings);
383
384 NG::MarginProperty margins;
385 ViewAbstract::SetMargin(margins);
386
387 NG::BorderRadiusProperty borderRadius;
388 ViewAbstract::SetBorderRadius(borderRadius);
389
390 NG::BorderColorProperty borderColors;
391 ViewAbstract::SetBorderColor(borderColors);
392
393 NG::BorderWidthProperty borderWidth;
394 ViewAbstract::SetBorderWidth(borderWidth);
395
396 NG::BorderStyleProperty borderStyles;
397 ViewAbstract::SetBorderStyle(borderStyles);
398
399 /**
400 * @tc.expected: Return expected results.
401 */
402 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
403 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
404 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
405 ASSERT_NE(frameNode, nullptr);
406 auto Node = AceType::DynamicCast<NG::FrameNode>(frameNode);
407 ASSERT_NE(Node, nullptr);
408 auto layoutProperty = Node->GetLayoutProperty<LayoutProperty>();
409 ASSERT_NE(layoutProperty, nullptr);
410 ViewStackProcessor::GetInstance()->instance = nullptr;
411 }
412
413 /**
414 * @tc.name: ViewAbstractTest009
415 * @tc.desc: Test the operation of View_Abstract
416 * @tc.type: FUNC
417 */
418 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest009, TestSize.Level1)
419 {
420 /**
421 * @tc.steps: step1.The FrameNode is null, related function is called.
422 */
423 GestureEventFunc tapEventFunc;
424 ViewAbstract::SetOnClick(std::move(tapEventFunc));
425 TouchEventFunc touchEventFunc;
426 ViewAbstract::SetOnTouch(std::move(touchEventFunc));
427 OnMouseEventFunc onMouseEventFunc;
428 ViewAbstract::SetOnMouse(std::move(onMouseEventFunc));
429 OnHoverFunc onHoverEventFunc;
430 ViewAbstract::SetOnHover(std::move(onHoverEventFunc));
431 OnKeyCallbackFunc onKeyCallback;
432 ViewAbstract::SetOnKeyEvent(std::move(onKeyCallback));
433
434 auto hoverEffect = static_cast<HoverEffectType>(INDEX);
435 ViewAbstract::SetHoverEffect(hoverEffect);
436
437 ViewAbstract::SetFocusable(false);
438 ViewAbstract::SetEnabled(false);
439 ViewAbstract::SetOnFocus(callback);
440 ViewAbstract::SetOnBlur(callback);
441
442 /**
443 * @tc.expected: Return expected results.
444 */
445 EXPECT_EQ(ViewStackProcessor::GetInstance()->GetMainElementNode(), nullptr);
446 }
447
448 /**
449 * @tc.name: ViewAbstractTest010
450 * @tc.desc: Test the operation of View_Abstract.
451 * @tc.type: FUNC
452 */
453 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest010, TestSize.Level1)
454 {
455 /**
456 * @tc.steps: step1.push FrameNode is not null, related function is called.
457 */
458 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
459 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
460
461 GestureEventFunc tapEventFunc;
462 ViewAbstract::SetOnClick(std::move(tapEventFunc));
463 TouchEventFunc touchEventFunc;
464 ViewAbstract::SetOnTouch(std::move(touchEventFunc));
465 OnMouseEventFunc onMouseEventFunc;
466 ViewAbstract::SetOnMouse(std::move(onMouseEventFunc));
467 OnHoverFunc onHoverEventFunc;
468 ViewAbstract::SetOnHover(std::move(onHoverEventFunc));
469 OnKeyCallbackFunc onKeyCallback;
470 ViewAbstract::SetOnKeyEvent(std::move(onKeyCallback));
471
472 auto hoverEffect = static_cast<HoverEffectType>(INDEX);
473 ViewAbstract::SetHoverEffect(hoverEffect);
474
475 ViewAbstract::SetFocusable(true);
476 ViewAbstract::SetOnFocus(callback);
477 ViewAbstract::SetOnBlur(callback);
478 ViewAbstract::SetFlexBasis(VALUE);
479
480 auto eventHub = AceType::MakeRefPtr<EventHub>();
481 auto focusHub = AceType::MakeRefPtr<FocusHub>(eventHub);
482 focusHub->focusable_ = true;
483 focusHub->parentFocusable_ = true;
484 ViewAbstract::SetVisibility(VisibleType::VISIBLE);
485 ViewAbstract::SetEnabled(true);
486
487 /**
488 * @tc.expected: Return expected results.
489 */
490 EXPECT_FALSE(focusHub->IsFocusableScope());
491 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
492 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
493 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
494 ASSERT_NE(frameNode, nullptr);
495 auto Node = AceType::DynamicCast<NG::FrameNode>(frameNode);
496 ASSERT_NE(Node, nullptr);
497 auto layoutProperty = Node->GetLayoutProperty<LayoutProperty>();
498 ASSERT_NE(layoutProperty, nullptr);
499 ViewStackProcessor::GetInstance()->instance = nullptr;
500 }
501
502 /**
503 * @tc.name: ViewAbstractTest011
504 * @tc.desc: Test the operation of View_Abstract
505 * @tc.type: FUNC
506 */
507 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest011, TestSize.Level1)
508 {
509 /**
510 * @tc.steps: step1.The FrameNode is null, related function is called.
511 */
512 ViewAbstract::SetTabIndex(INDEX);
513 ViewAbstract::SetFocusOnTouch(false);
514 ViewAbstract::SetDefaultFocus(false);
515 ViewAbstract::SetGroupDefaultFocus(false);
516 ViewAbstract::SetTouchable(false);
517 ViewAbstract::SetOnAppear(callback);
518 ViewAbstract::SetOnDisappear(callback);
519
520 auto hitTestMode = static_cast<HitTestMode>(INDEX);
521 ViewAbstract::SetHitTestMode(hitTestMode);
522
523 std::vector<DimensionRect> responseRegion;
524 ViewAbstract::SetResponseRegion(std::move(responseRegion));
525 std::function<DragDropInfo(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&)> onDragStart;
526 ViewAbstract::SetOnDragStart(std::move(onDragStart));
527 std::function<void(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&)> onDragEnter;
528 ViewAbstract::SetOnDragEnter(std::move(onDragEnter));
529 std::function<void(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&)> onDragLeave;
530 ViewAbstract::SetOnDragLeave(std::move(onDragLeave));
531 std::function<void(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&)> onDragMove;
532 ViewAbstract::SetOnDragMove(std::move(onDragMove));
533 std::function<void(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&)> onDrop;
534 ViewAbstract::SetOnDrop(std::move(onDrop));
535 Alignment alignment;
536 ViewAbstract::SetAlign(std::move(alignment));
537
538 /**
539 * @tc.expected: Return expected results.
540 */
541 EXPECT_EQ(ViewStackProcessor::GetInstance()->GetMainElementNode(), nullptr);
542 }
543
544 /**
545 * @tc.name: ViewAbstractTest012
546 * @tc.desc: Test the operation of View_Abstract.
547 * @tc.type: FUNC
548 */
549 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest012, TestSize.Level1)
550 {
551 /**
552 * @tc.steps: step1.push FrameNode is not null, related function is called.
553 */
554 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
555 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
556
557 ViewAbstract::SetTabIndex(INDEX);
558 ViewAbstract::SetFocusOnTouch(false);
559 ViewAbstract::SetDefaultFocus(false);
560 ViewAbstract::SetGroupDefaultFocus(false);
561 ViewAbstract::SetTouchable(false);
562 ViewAbstract::SetOnAppear(callback);
563 ViewAbstract::SetOnDisappear(callback);
564 auto hitTestMode = static_cast<HitTestMode>(INDEX);
565 ViewAbstract::SetHitTestMode(hitTestMode);
566
567 std::vector<DimensionRect> responseRegion;
568 ViewAbstract::SetResponseRegion(std::move(responseRegion));
569 std::function<DragDropInfo(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&)> onDragStart;
570 ViewAbstract::SetOnDragStart(std::move(onDragStart));
571 std::function<void(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&)> onDragEnter;
572 ViewAbstract::SetOnDragEnter(std::move(onDragEnter));
573 std::function<void(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&)> onDragLeave;
574 ViewAbstract::SetOnDragLeave(std::move(onDragLeave));
575 std::function<void(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&)> onDragMove;
576 ViewAbstract::SetOnDragMove(std::move(onDragMove));
577 std::function<void(const RefPtr<OHOS::Ace::DragEvent>&, const std::string&)> onDrop;
578 ViewAbstract::SetOnDrop(std::move(onDrop));
579 Alignment alignment;
580 ViewAbstract::SetAlign(std::move(alignment));
581
582 /**
583 * @tc.expected: Return expected results.
584 */
585 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
586 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
587 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
588 ASSERT_NE(frameNode, nullptr);
589 auto Node = AceType::DynamicCast<NG::FrameNode>(frameNode);
590 ASSERT_NE(Node, nullptr);
591 auto layoutProperty = Node->GetLayoutProperty<LayoutProperty>();
592 ASSERT_NE(layoutProperty, nullptr);
593 ViewStackProcessor::GetInstance()->instance = nullptr;
594 }
595
596 /**
597 * @tc.name: ViewAbstractTest013
598 * @tc.desc: Test the operation of View_Abstract
599 * @tc.type: FUNC
600 */
601 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest013, TestSize.Level1)
602 {
603 /**
604 * @tc.steps: step1.The FrameNode is null, related function is called.
605 */
606 auto visible = static_cast<VisibleType>(INDEX);
607 ViewAbstract::SetVisibility(std::move(visible));
608 ViewAbstract::SetGeometryTransition(srcimages);
609 ViewAbstract::SetOpacity(OPACITYS);
610 ViewAbstract::SetZIndex(FOUF);
611
612 OffsetT<Dimension> value = { WIDTH, HEIGHT };
613 ViewAbstract::SetPosition(value);
614 ViewAbstract::SetOffset(value);
615 ViewAbstract::MarkAnchor(value);
616 VectorF scale(1.0f, 1.0f);
617 ViewAbstract::SetScale(scale);
618
619 /**
620 * @tc.expected: Return expected results.
621 */
622 EXPECT_EQ(ViewStackProcessor::GetInstance()->GetMainElementNode(), nullptr);
623 }
624
625 /**
626 * @tc.name: ViewAbstractTest014
627 * @tc.desc: Test the operation of View_Abstract.
628 * @tc.type: FUNC
629 */
630 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest014, TestSize.Level1)
631 {
632 /**
633 * @tc.steps: step1.push FrameNode is not null, related function is called.
634 */
635 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
636 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
637
638 auto visible = static_cast<VisibleType>(INDEX);
639 ViewAbstract::SetVisibility(std::move(visible));
640 ViewAbstract::SetGeometryTransition(srcimages);
641 ViewAbstract::SetOpacity(OPACITYS);
642 ViewAbstract::SetZIndex(FOUF);
643
644 OffsetT<Dimension> value = { WIDTH, HEIGHT };
645 ViewAbstract::SetPosition(value);
646 ViewAbstract::SetOffset(value);
647 ViewAbstract::MarkAnchor(value);
648 viewAbstractModelNG.SetScale(-1.0f, -1.0f, 0.0f);
649
650 /**
651 * @tc.expected: Return expected results.
652 */
653 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
654 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
655 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
656 ASSERT_NE(frameNode, nullptr);
657 auto Node = AceType::DynamicCast<NG::FrameNode>(frameNode);
658 ASSERT_NE(Node, nullptr);
659 auto layoutProperty = Node->GetLayoutProperty<LayoutProperty>();
660 ASSERT_NE(layoutProperty, nullptr);
661 ViewStackProcessor::GetInstance()->instance = nullptr;
662 }
663
664 /**
665 * @tc.name: ViewAbstractTest015
666 * @tc.desc: Test the operation of View_Abstract
667 * @tc.type: FUNC
668 */
669 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest015, TestSize.Level1)
670 {
671 /**
672 * @tc.steps: step1.The FrameNode is null, related function is called.
673 */
674 viewAbstractModelNG.SetPivot(WIDTH, HEIGHT, WIDTH);
675 NG::TranslateOptions pttions;
676 BlurOption blurOption;
677 ViewAbstract::SetTranslate(std::move(pttions));
678 Matrix4 matrix;
679 ViewAbstract::SetTransformMatrix(std::move(matrix));
680 ViewAbstract::SetBackdropBlur(RADIUS, blurOption);
681 ViewAbstract::SetFrontBlur(RADIUS, blurOption);
682 ViewAbstract::SetInspectorId(srcimages);
683
684 Vector5F scale(1.0f, 1.0f, 2.0f, 2.0f, 0.0f);
685 ViewAbstract::SetRotate(scale);
686 ShadowStyle style { 1 };
687 Shadow shadow { RATIO, OFFSET, BLUE, style };
688 ViewAbstract::SetBackShadow(shadow);
689
690 NG::Gradient gradient;
691 ViewAbstract::SetLinearGradient(std::move(gradient));
692 ViewAbstract::SetSweepGradient(std::move(gradient));
693 ViewAbstract::SetRadialGradient(std::move(gradient));
694
695 /**
696 * @tc.expected: Return expected results.
697 */
698 EXPECT_EQ(ViewStackProcessor::GetInstance()->GetMainElementNode(), nullptr);
699 }
700
701 /**
702 * @tc.name: ViewAbstractTest016
703 * @tc.desc: Test the operation of View_Abstract.
704 * @tc.type: FUNC
705 */
706 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest016, TestSize.Level1)
707 {
708 /**
709 * @tc.steps: step1.push FrameNode is not null, related function is called.
710 */
711 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
712 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
713
714 viewAbstractModelNG.SetPivot(WIDTH, HEIGHT, ZERO);
715 NG::TranslateOptions pttions;
716 ViewAbstract::SetTranslate(std::move(pttions));
717 Matrix4 matrix;
718 BlurOption blurOption;
719 ViewAbstract::SetTransformMatrix(std::move(matrix));
720 ViewAbstract::SetBackdropBlur(RADIUS, blurOption);
721 ViewAbstract::SetFrontBlur(RADIUS, blurOption);
722 ViewAbstract::SetInspectorId(srcimages);
723 ViewAbstract::SetDebugLine(srcimages);
724
725 Vector5F scale(1.0f, 1.0f, 2.0f, 2.0f, 0.0f);
726 ViewAbstract::SetRotate(scale);
727 ShadowStyle style { 1 };
728 Shadow shadow { RATIO, OFFSET, BLUE, style };
729 ViewAbstract::SetBackShadow(shadow);
730 NG::Gradient gradient;
731 ViewAbstract::SetLinearGradient(std::move(gradient));
732 ViewAbstract::SetSweepGradient(std::move(gradient));
733 ViewAbstract::SetRadialGradient(std::move(gradient));
734
735 /**
736 * @tc.expected: Return expected results.
737 */
738 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
739 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
740 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
741 ASSERT_NE(frameNode, nullptr);
742 auto Node = AceType::DynamicCast<NG::FrameNode>(frameNode);
743 ASSERT_NE(Node, nullptr);
744 auto layoutProperty = Node->GetLayoutProperty<LayoutProperty>();
745 ASSERT_NE(layoutProperty, nullptr);
746 ViewStackProcessor::GetInstance()->instance = nullptr;
747 }
748
749 /**
750 * @tc.name: ViewAbstractTest017
751 * @tc.desc: Test the operation of View_Abstract
752 * @tc.type: FUNC
753 */
754 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest017, TestSize.Level1)
755 {
756 /**
757 * @tc.steps: step1.The FrameNode is null, related function is called.
758 */
759 auto visible = static_cast<GridSizeType>(INDEX);
760 ViewAbstract::SetGrid(FOUF, FOUF, std::move(visible));
761 TransitionOptions options;
762 ViewAbstract::SetTransition(std::move(options));
763 RefPtr<BasicShape> basicShape;
764 ViewAbstract::SetClipShape(std::move(basicShape));
765 ViewAbstract::SetMask(std::move(basicShape));
766 ViewAbstract::SetClipEdge(false);
767 ViewAbstract::SetGrayScale(RADIUS);
768 ViewAbstract::SetContrast(RADIUS);
769 ViewAbstract::SetSaturate(RADIUS);
770 ViewAbstract::SetSepia(RADIUS);
771 ViewAbstract::SetInvert(invert);
772 ViewAbstract::SetHueRotate(RATIO);
773 ViewAbstract::SetBrightness(RADIUS);
774 ViewAbstract::SetColorBlend(BLUE);
775 ViewAbstract::SetBorderImageSource(srcimages);
776
777 /**
778 * @tc.expected: Return expected results.
779 */
780 EXPECT_EQ(ViewStackProcessor::GetInstance()->GetMainElementNode(), nullptr);
781 }
782
783 /**
784 * @tc.name: ViewAbstractTest018
785 * @tc.desc: Test the operation of View_Abstract.
786 * @tc.type: FUNC
787 */
788 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest018, TestSize.Level1)
789 {
790 /**
791 * @tc.steps: step1.push FrameNode is not null, related function is called.
792 */
793 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
794 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
795
796 auto visible = static_cast<GridSizeType>(INDEX);
797 ViewAbstract::SetGrid(FOUF, FOUF, std::move(visible));
798 TransitionOptions options;
799 ViewAbstract::SetTransition(std::move(options));
800 RefPtr<BasicShape> basicShape;
801 ViewAbstract::SetClipShape(std::move(basicShape));
802 ViewAbstract::SetMask(std::move(basicShape));
803 ViewAbstract::SetClipEdge(false);
804 ViewAbstract::SetGrayScale(RADIUS);
805 ViewAbstract::SetContrast(RADIUS);
806 ViewAbstract::SetSaturate(RADIUS);
807 ViewAbstract::SetSepia(RADIUS);
808 ViewAbstract::SetInvert(invert);
809 ViewAbstract::SetHueRotate(RATIO);
810 ViewAbstract::SetBrightness(RADIUS);
811 ViewAbstract::SetColorBlend(BLUE);
812 ViewAbstract::SetBorderImageSource(srcimages);
813
814 /**
815 * @tc.expected: Return expected results.
816 */
817 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
818 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
819 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
820 ASSERT_NE(frameNode, nullptr);
821 auto Node = AceType::DynamicCast<NG::FrameNode>(frameNode);
822 ASSERT_NE(Node, nullptr);
823 auto layoutProperty = Node->GetLayoutProperty<LayoutProperty>();
824 ASSERT_NE(layoutProperty, nullptr);
825 ViewStackProcessor::GetInstance()->instance = nullptr;
826 }
827
828 /**
829 * @tc.name: ViewAbstractTest019
830 * @tc.desc: Test the operation of View_Abstract
831 * @tc.type: FUNC
832 */
833 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest019, TestSize.Level1)
834 {
835 /**
836 * @tc.steps: step1.The FrameNode is null, related function is called.
837 */
838 RefPtr<BorderImage> borderImage;
839 ViewAbstract::SetBorderImage(std::move(borderImage));
840 ViewAbstract::SetHasBorderImageSlice(true);
841 ViewAbstract::SetHasBorderImageWidth(true);
842 ViewAbstract::SetHasBorderImageOutset(true);
843 ViewAbstract::SetHasBorderImageRepeat(true);
844 Gradient gradient;
845 ViewAbstract::SetBorderImageGradient(std::move(gradient));
846 OverlayOptions overlay;
847 ViewAbstract::SetOverlay(std::move(overlay));
848 MotionPathOption motionPath;
849 ViewAbstract::SetMotionPath(std::move(motionPath));
850 ViewAbstract::SetSharedTransition("", nullptr);
851 ViewAbstract::SetSphericalEffect(RATIO);
852 ViewAbstract::SetLightUpEffect(RATIO);
853 ViewAbstract::SetUseEffect(false);
854 ViewAbstract::SetRenderGroup(false);
855 ViewAbstract::SetRenderFit(RenderFit::BOTTOM);
856 ViewAbstract::UpdateSafeAreaExpandOpts(safeAreaExpandOpts);
857 ViewAbstract::SetObscured(reasonsVector);
858
859 /**
860 * @tc.expected: Return expected results.
861 */
862 EXPECT_EQ(ViewStackProcessor::GetInstance()->GetMainElementNode(), nullptr);
863 }
864
865 /**
866 * @tc.name: ViewAbstractTest020
867 * @tc.desc: Test the operation of View_Abstract.
868 * @tc.type: FUNC
869 */
870 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest020, TestSize.Level1)
871 {
872 /**
873 * @tc.steps: step1.push FrameNode is not null, related function is called.
874 */
875 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
876 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
877
878 RefPtr<BorderImage> borderImage;
879 ViewAbstract::SetBorderImage(std::move(borderImage));
880 ViewAbstract::SetHasBorderImageSlice(true);
881 ViewAbstract::SetHasBorderImageWidth(true);
882 ViewAbstract::SetHasBorderImageOutset(true);
883 ViewAbstract::SetHasBorderImageRepeat(true);
884 Gradient gradient;
885 ViewAbstract::SetBorderImageGradient(std::move(gradient));
886 OverlayOptions overlay;
887 ViewAbstract::SetOverlay(std::move(overlay));
888 MotionPathOption motionPath;
889 ViewAbstract::SetMotionPath(std::move(motionPath));
890 std::shared_ptr<SharedTransitionOption> option;
891 ViewAbstract::SetSharedTransition(srcimages, std::move(option));
892 ViewAbstract::SetSphericalEffect(RATIO);
893 ViewAbstract::SetLightUpEffect(RATIO);
894 ViewAbstract::SetDraggable(false);
895 ViewAbstract::SetUseEffect(false);
896 ViewAbstract::SetRenderGroup(false);
897 ViewAbstract::SetRenderFit(RenderFit::BOTTOM);
898 ViewAbstract::UpdateSafeAreaExpandOpts(safeAreaExpandOpts);
899 ViewAbstract::SetObscured(reasonsVector);
900
901 /**
902 * @tc.expected: Return expected results.
903 */
904 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
905 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
906 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
907 ASSERT_NE(frameNode, nullptr);
908 auto Node = AceType::DynamicCast<NG::FrameNode>(frameNode);
909 ASSERT_NE(Node, nullptr);
910 auto layoutProperty = Node->GetLayoutProperty<LayoutProperty>();
911 ASSERT_NE(layoutProperty, nullptr);
912 ViewStackProcessor::GetInstance()->instance = nullptr;
913 }
914
915 /**
916 * @tc.name: ViewAbstractTest021
917 * @tc.desc: Test the operation of View_Abstract
918 * @tc.type: FUNC
919 */
920 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest021, TestSize.Level1)
921 {
922 /**
923 * @tc.steps: step1.The FrameNode is null, related function is called.
924 */
925 PixStretchEffectOption option;
926 option.bottom = BOTTOM;
927 option.left = LEFT;
928 option.right = RIGHT;
929 option.top = TOP;
930 ViewAbstract::SetPixelStretchEffect(option);
931 RefPtr<NG::ChainedTransitionEffect> effect;
932 ViewAbstract::SetChainedTransition(std::move(effect));
933 RefPtr<ProgressMaskProperty> progress;
934 ViewAbstract::SetProgressMask(std::move(progress));
935
936 ViewAbstract::SetForegroundColor(BLUE);
937 auto strategy = static_cast<ForegroundColorStrategy>(INDEX);
938 ViewAbstract::SetForegroundColorStrategy(std::move(strategy));
939 auto hoverEffect = static_cast<HoverEffectType>(INDEX);
940 ViewAbstract::SetHoverEffectAuto(hoverEffect);
941 ViewAbstract::SetDraggable(true);
942
943 /**
944 * @tc.expected: Return expected results.
945 */
946 EXPECT_EQ(ViewStackProcessor::GetInstance()->GetMainElementNode(), nullptr);
947 }
948
949 /**
950 * @tc.name: ViewAbstractTest022
951 * @tc.desc: Test the operation of View_Abstract.
952 * @tc.type: FUNC
953 */
954 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest022, TestSize.Level1)
955 {
956 /**
957 * @tc.steps: step1.push FrameNode is not null, related function is called.
958 */
959 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
960 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
961
962 PixStretchEffectOption option;
963 option.bottom = BOTTOM;
964 option.left = LEFT;
965 option.right = RIGHT;
966 option.top = TOP;
967 ViewAbstract::SetPixelStretchEffect(option);
968 RefPtr<NG::ChainedTransitionEffect> effect;
969 ViewAbstract::SetChainedTransition(std::move(effect));
970 RefPtr<ProgressMaskProperty> progress;
971 ViewAbstract::SetProgressMask(std::move(progress));
972 ViewAbstract::SetForegroundColor(BLUE);
973 auto strategy = static_cast<ForegroundColorStrategy>(INDEX);
974 ViewAbstract::SetForegroundColorStrategy(std::move(strategy));
975 ViewAbstract::SetBorderWidth(VALUE);
976 ViewAbstract::SetHeight(NG::CalcLength(HEIGHT));
977 ViewAbstract::SetWidth(NG::CalcLength(WIDTH));
978 auto hoverEffect = static_cast<HoverEffectType>(INDEX);
979 ViewAbstract::SetHoverEffectAuto(hoverEffect);
980 ViewAbstract::SetDraggable(true);
981
982 /**
983 * @tc.expected: Return expected results.
984 */
985 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
986 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
987 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
988 ASSERT_NE(frameNode, nullptr);
989 auto Node = AceType::DynamicCast<NG::FrameNode>(frameNode);
990 ASSERT_NE(Node, nullptr);
991 auto layoutProperty = Node->GetLayoutProperty<LayoutProperty>();
992 ASSERT_NE(layoutProperty, nullptr);
993 ViewStackProcessor::GetInstance()->instance = nullptr;
994 }
995
996 /**
997 * @tc.name: ViewAbstractTest023
998 * @tc.desc: Test the operation of View_Abstract
999 * @tc.type: FUNC
1000 */
1001 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest023, TestSize.Level1)
1002 {
1003 /**
1004 * @tc.steps: step1.The FrameNode is null, related function is called.
1005 */
1006 std::function<void(const RectF& oldRect, const OffsetF& oldOrigin, const RectF& rect, const OffsetF& origin)>
1007 onAreaChanged;
1008 ViewAbstract::SetOnAreaChanged(std::move(onAreaChanged));
1009 std::function<void(bool, double)> onVisibleChange;
1010 const std::vector<double> ratios;
1011 ViewAbstract::SetOnVisibleChange(std::move(onVisibleChange), ratios);
1012
1013 std::function<void(const RefPtr<OHOS::Ace::DragEvent>&)> onDragEnd;
1014 ViewAbstract::SetOnDragEnd(std::move(onDragEnd));
1015 std::set<std::string> allowDrop;
1016 ViewAbstract::SetAllowDrop(std::move(allowDrop));
1017 ViewAbstract::CreateAnimatablePropertyFloat(srcimages, RATIO, nullptr);
1018 ViewAbstract::UpdateAnimatablePropertyFloat(srcimages, RATIO);
1019 ViewAbstract::SetRestoreId(TEN);
1020
1021 /**
1022 * @tc.expected: Return expected results.
1023 */
1024 EXPECT_EQ(ViewStackProcessor::GetInstance()->GetMainElementNode(), nullptr);
1025 }
1026
1027 /**
1028 * @tc.name: ViewAbstractTest024
1029 * @tc.desc: Test the operation of View_Abstract.
1030 * @tc.type: FUNC
1031 */
1032 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest024, TestSize.Level1)
1033 {
1034 /**
1035 * @tc.steps: step1.push FrameNode is not null, related function is called.
1036 */
1037 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
1038 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
1039
1040 std::function<void(const RectF& oldRect, const OffsetF& oldOrigin, const RectF& rect, const OffsetF& origin)>
1041 onAreaChanged;
1042 ViewAbstract::SetOnAreaChanged(std::move(onAreaChanged));
1043 std::function<void(bool, double)> onVisibleChange;
1044 const std::vector<double> ratios;
1045 ViewAbstract::SetOnVisibleChange(std::move(onVisibleChange), ratios);
1046 std::function<void(const RefPtr<OHOS::Ace::DragEvent>&)> onDragEnd;
1047 ViewAbstract::SetOnDragEnd(std::move(onDragEnd));
1048 std::set<std::string> allowDrop;
1049 ViewAbstract::SetAllowDrop(std::move(allowDrop));
1050 ViewAbstract::CreateAnimatablePropertyFloat(srcimages, RATIO, nullptr);
1051 ViewAbstract::UpdateAnimatablePropertyFloat(srcimages, RATIO);
1052 ViewAbstract::SetRestoreId(TEN);
1053
1054 /**
1055 * @tc.expected: Return expected results.
1056 */
1057 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
1058 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
1059 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
1060 ASSERT_NE(frameNode, nullptr);
1061 auto Node = AceType::DynamicCast<NG::FrameNode>(frameNode);
1062 ASSERT_NE(Node, nullptr);
1063 auto layoutProperty = Node->GetLayoutProperty<LayoutProperty>();
1064 ASSERT_NE(layoutProperty, nullptr);
1065 ViewStackProcessor::GetInstance()->instance = nullptr;
1066 }
1067
1068 /**
1069 * @tc.name: ViewAbstractTest025
1070 * @tc.desc: Test the BindPopup of View_Abstract.
1071 * @tc.type: FUNC
1072 */
1073 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest025, TestSize.Level1)
1074 {
1075 /**
1076 * @tc.steps: step1. Create some FrameNode and params.
1077 */
1078 const RefPtr<FrameNode> customNode = FrameNode::CreateFrameNode("one", 1, AceType::MakeRefPtr<Pattern>(), true);
1079 const RefPtr<FrameNode> targetNode = FrameNode::CreateFrameNode("two", 2, AceType::MakeRefPtr<Pattern>());
1080 const RefPtr<FrameNode> targetNode2 = FrameNode::CreateFrameNode("three", 3, AceType::MakeRefPtr<Pattern>());
1081 auto param = AceType::MakeRefPtr<PopupParam>();
1082 auto param2 = AceType::MakeRefPtr<PopupParam>();
1083
1084 /**
1085 * @tc.steps: step2. get popupInfo and change some params.
1086 */
1087 auto container = Container::Current();
1088 ASSERT_NE(container, nullptr);
1089 auto pipelineContext = container->GetPipelineContext();
1090 ASSERT_NE(pipelineContext, nullptr);
1091 auto context = AceType::DynamicCast<NG::PipelineContext>(pipelineContext);
1092 ASSERT_NE(context, nullptr);
1093 auto overlayManager = context->GetOverlayManager();
1094 ASSERT_NE(overlayManager, nullptr);
1095 auto nodeId = targetNode->GetId();
1096 PopupInfo info = overlayManager->GetPopupInfo(nodeId);
1097 info.isCurrentOnShow = true;
1098 info.popupId = 1;
1099 auto popupNode1 = FrameNode::CreateFrameNode(
1100 V2::POPUP_ETS_TAG, info.popupId, AceType::MakeRefPtr<BubblePattern>(targetNode->GetId(), targetNode->GetTag()));
1101 info.popupNode = popupNode1;
1102 overlayManager->ShowPopup(targetNode->GetId(), info);
1103
1104 /**
1105 * @tc.steps: step3. Call BindPopup many times.
1106 * @tc.expected: popupNode in overlayManager of targetNode not null
1107 */
1108 ViewAbstract::BindPopup(param, targetNode, customNode);
1109 ViewAbstract::BindPopup(param, targetNode, customNode);
1110 auto popupInfo = overlayManager->GetPopupInfo(targetNode->GetId());
1111 auto popupNode = FrameNode::CreateFrameNode(
1112 V2::POPUP_ETS_TAG, popupInfo.popupId, AceType::MakeRefPtr<BubblePattern>(nodeId, targetNode->GetTag()));
1113 ASSERT_NE(popupNode, nullptr);
1114 popupNode->GetPattern<BubblePattern>()->transitionStatus_ = TransitionStatus::ENTERING;
1115 ViewAbstract::BindPopup(param, targetNode, customNode);
1116 param->SetIsShow(false);
1117 ViewAbstract::BindPopup(param, targetNode, customNode);
1118 param->SetShowInSubWindow(true);
1119 ViewAbstract::BindPopup(param, targetNode, customNode);
1120 EXPECT_FALSE(overlayManager->GetPopupInfo(targetNode->GetId()).isCurrentOnShow);
1121
1122 /**
1123 * @tc.steps: step4. Call BindPopup with param use custom.
1124 * @tc.expected: popupNode in overlayManager of targetNode not null
1125 */
1126 param2->SetUseCustomComponent(true);
1127 ViewAbstract::BindPopup(param2, targetNode2, customNode);
1128 ViewAbstract::BindPopup(param2, targetNode2, customNode);
1129 param2->SetShowInSubWindow(true);
1130 ViewAbstract::BindPopup(param2, targetNode2, customNode);
1131 param2->SetIsShow(false);
1132 ViewAbstract::BindPopup(param2, targetNode2, customNode);
1133 EXPECT_FALSE(overlayManager->GetPopupInfo(targetNode->GetId()).isCurrentOnShow);
1134 }
1135
1136 /**
1137 * @tc.name: ViewAbstractTest026
1138 * @tc.desc: Test the SetKeyboardShortcut of View_Abstract.
1139 * @tc.type: FUNC
1140 */
1141 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest026, TestSize.Level1)
1142 {
1143 /**
1144 * @tc.steps: step1. Create a FrameNode and get eventManager.
1145 */
1146 const RefPtr<FrameNode> targetNode = FrameNode::CreateFrameNode("main", 1, AceType::MakeRefPtr<Pattern>(), true);
1147 ViewStackProcessor::GetInstance()->Push(targetNode);
1148 auto eventManager = PipelineContext::GetCurrentContext()->GetEventManager();
1149 /**
1150 * @tc.steps: step2. call SetKeyboardShortcut with ctrl + x.
1151 * @tc.expected: add fail
1152 */
1153 std::vector<ModifierKey> keys;
1154 keys.push_back(ModifierKey::CTRL);
1155 ViewAbstract::SetKeyboardShortcut(VALUE_X, std::move(keys), callback);
1156 EXPECT_EQ(eventManager->keyboardShortcutNode_.size(), 0);
1157 keys.clear();
1158 /**
1159 * @tc.steps: step3. call SetKeyboardShortcut with other wrong type.
1160 * @tc.expected: add fail
1161 */
1162 ViewAbstract::SetKeyboardShortcut(VALUE_EMPTY, std::move(keys), callback);
1163 ViewAbstract::SetKeyboardShortcut(VALUE_CX, std::move(keys), callback);
1164 ViewAbstract::SetKeyboardShortcut(VALUE_X, std::move(keys), callback);
1165
1166 /**
1167 * @tc.steps: step4. and shift in keys and recall SetKeyboardShortcut .
1168 * @tc.expected: add success
1169 */
1170 keys.push_back(ModifierKey::ALT);
1171 ViewAbstract::SetKeyboardShortcut(VALUE_CX, std::move(keys), callback);
1172 EXPECT_EQ(eventManager->keyboardShortcutNode_.size(), 1);
1173
1174 /**
1175 * @tc.steps: step5. make other key and recall SetKeyboardShortcut .
1176 * @tc.expected: add fail
1177 */
1178 keys.push_back(ModifierKey::SHIFT);
1179 ViewAbstract::SetKeyboardShortcut(VALUE_CX, std::move(keys), callback);
1180 EXPECT_EQ(eventManager->keyboardShortcutNode_.size(), 1);
1181 keys.push_back(ModifierKey::ALT);
1182 ViewAbstract::SetKeyboardShortcut(VALUE_CX, std::move(keys), callback);
1183 EXPECT_EQ(eventManager->keyboardShortcutNode_.size(), 1);
1184 }
1185
1186 /**
1187 * @tc.name: ViewAbstractTest027
1188 * @tc.desc: Test the operation of View_Abstract.
1189 * @tc.type: FUNC
1190 */
1191 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest027, TestSize.Level1)
1192 {
1193 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
1194 /**
1195 * @tc.steps: step1. callback ShowMenu with two condition.
1196 */
1197 ContainerScope sontainerScope(1);
1198 ViewAbstract::ShowMenu(INDEX, OFFSETF, false);
1199 ViewAbstract::ShowMenu(INDEX, OFFSETF, true);
1200 /**
1201 * @tc.steps: step2. callback SetForegroundBlurStyle and ResetFlexShrink.
1202 */
1203 BlurStyleOption bgBlurStyle;
1204 ViewAbstract::SetForegroundBlurStyle(bgBlurStyle);
1205 ViewAbstract::ResetFlexShrink();
1206 /**
1207 * @tc.steps: step3. SetVisualState in ViewStackProcessor and recall the two function.
1208 * @tc.expected: the blur radius in render context meet expectations.
1209 */
1210 ViewStackProcessor::GetInstance()->SetVisualState(VisualState::FOCUSED);
1211 ViewAbstract::SetForegroundBlurStyle(bgBlurStyle);
1212 ViewAbstract::ResetFlexShrink();
1213 ASSERT_NE(FRAME_NODE_ROOT->GetRenderContext(), nullptr);
1214 EXPECT_FALSE(FRAME_NODE_ROOT->GetRenderContext()->GetFrontBlurRadius().has_value());
1215 }
1216
1217 /**
1218 * @tc.name: ViewAbstractTest028
1219 * @tc.desc: Test the operation of View_Abstract.
1220 * @tc.type: FUNC
1221 */
1222 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest028, TestSize.Level1)
1223 {
1224 /**
1225 * @tc.steps: step1.push FrameNode is not null, callback Pop function.
1226 */
1227 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
1228 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
1229 ViewAbstract::Pop();
1230
1231 /**
1232 * @tc.expected: Return expected results.
1233 */
1234 EXPECT_FALSE(ViewStackProcessor::GetInstance()->elementsStack_.empty());
1235 EXPECT_EQ(ViewStackProcessor::GetInstance()->elementsStack_.size(), INDEX);
1236 }
1237
1238 /**
1239 * @tc.name: ViewAbstractTest029
1240 * @tc.desc: Test the operation of View_Abstract
1241 * @tc.type: FUNC
1242 */
1243 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest029, TestSize.Level1)
1244 {
1245 /**
1246 * @tc.steps: step1.ClearStack.
1247 */
1248 auto state = static_cast<VisualState>(INDEX);
1249 ViewStackProcessor::GetInstance()->SetVisualState(state);
1250 ViewStackProcessor::GetInstance()->ClearStack();
1251
1252 /**
1253 * @tc.steps: step2. related function is called.
1254 */
1255 ViewAbstract::SetWidth(NG::CalcLength(WIDTH));
1256 ViewAbstract::SetHeight(NG::CalcLength(HEIGHT));
1257 ViewAbstract::SetMinWidth(NG::CalcLength(MIN_WIDTH));
1258 ViewAbstract::SetMinHeight(NG::CalcLength(MIN_HEIGHT));
1259 ViewAbstract::SetMaxWidth(NG::CalcLength(MIN_WIDTH));
1260 ViewAbstract::SetMaxHeight(NG::CalcLength(MIN_HEIGHT));
1261 ViewAbstract::SetAspectRatio(RATIO);
1262 ViewAbstract::SetBackgroundColor(BLUE);
1263 ViewAbstract::SetBackgroundImage(imageSourceInfo);
1264 ViewAbstract::SetBackgroundImageSize(BACKGROUNDSIZE);
1265 ViewAbstract::SetBackgroundImagePosition(BACKGROUNDPOSITION);
1266 ViewAbstract::ResetAspectRatio();
1267
1268 /**
1269 * @tc.expected: Return expected results.
1270 */
1271 bool result = ViewStackProcessor::GetInstance()->IsCurrentVisualStateProcess();
1272 EXPECT_FALSE(result);
1273 }
1274
1275 /**
1276 * @tc.name: ViewAbstractTest030
1277 * @tc.desc: Test the operation of View_Abstract
1278 * @tc.type: FUNC
1279 */
1280 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest030, TestSize.Level1)
1281 {
1282 /**
1283 * @tc.steps: step1.ClearStack.
1284 */
1285 auto state = static_cast<VisualState>(INDEX);
1286 ViewStackProcessor::GetInstance()->SetVisualState(state);
1287 ViewStackProcessor::GetInstance()->ClearStack();
1288
1289 /**
1290 * @tc.steps: step2. related function is called.
1291 */
1292 MotionPathOption motionPath;
1293 ViewAbstract::SetMotionPath(std::move(motionPath));
1294 auto repeat = static_cast<ImageRepeat>(INDEX);
1295 ViewAbstract::SetBackgroundImageRepeat(repeat);
1296
1297 BlurStyleOption blurStyleOption;
1298 blurStyleOption.blurStyle = BlurStyle::NO_MATERIAL;
1299 blurStyleOption.colorMode = ThemeColorMode::SYSTEM;
1300 blurStyleOption.adaptiveColor = AdaptiveColor::DEFAULT;
1301 ViewAbstract::SetBackgroundBlurStyle(blurStyleOption);
1302
1303 auto direction = static_cast<TextDirection>(INDEX);
1304 ViewAbstract::SetLayoutDirection(direction);
1305 std::map<AlignDirection, AlignRule> alignRules;
1306 ViewAbstract::SetAlignRules(alignRules);
1307 auto alignSelf = static_cast<FlexAlign>(INDEX);
1308 ViewAbstract::SetAlignSelf(alignSelf);
1309
1310 /**
1311 * @tc.expected: Return expected results.
1312 */
1313 bool result = ViewStackProcessor::GetInstance()->IsCurrentVisualStateProcess();
1314 EXPECT_FALSE(result);
1315 }
1316
1317 /**
1318 * @tc.name: ViewAbstractTest031
1319 * @tc.desc: Test the operation of View_Abstract
1320 * @tc.type: FUNC
1321 */
1322 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest031, TestSize.Level1)
1323 {
1324 /**
1325 * @tc.steps: step1.ClearStack.
1326 */
1327 auto state = static_cast<VisualState>(INDEX);
1328 ViewStackProcessor::GetInstance()->SetVisualState(state);
1329 ViewStackProcessor::GetInstance()->ClearStack();
1330
1331 /**
1332 * @tc.steps: step2. related function is called.
1333 */
1334 ViewAbstract::SetFlexShrink(RATIO);
1335 ViewAbstract::SetFlexGrow(RATIO);
1336 ViewAbstract::SetFlexBasis(WIDTH);
1337 ViewAbstract::SetDisplayIndex(TEN);
1338 ViewAbstract::SetZIndex(FOUF);
1339
1340 Alignment alignment;
1341 ViewAbstract::SetAlign(std::move(alignment));
1342 auto visible = static_cast<VisibleType>(INDEX);
1343 ViewAbstract::SetVisibility(std::move(visible));
1344 ViewAbstract::SetOpacity(OPACITYS);
1345
1346 /**
1347 * @tc.expected: Return expected results.
1348 */
1349 bool result = ViewStackProcessor::GetInstance()->IsCurrentVisualStateProcess();
1350 EXPECT_FALSE(result);
1351 }
1352
1353 /**
1354 * @tc.name: ViewAbstractTest032
1355 * @tc.desc: Test the operation of View_Abstract
1356 * @tc.type: FUNC
1357 */
1358 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest032, TestSize.Level1)
1359 {
1360 /**
1361 * @tc.steps: step1.ClearStack.
1362 */
1363 auto state = static_cast<VisualState>(INDEX);
1364 ViewStackProcessor::GetInstance()->SetVisualState(state);
1365 ViewStackProcessor::GetInstance()->ClearStack();
1366
1367 /**
1368 * @tc.steps: step2. related function is called.
1369 */
1370 OffsetT<Dimension> values = { WIDTH, HEIGHT };
1371 ViewAbstract::SetPosition(values);
1372 ViewAbstract::SetOffset(values);
1373 ViewAbstract::MarkAnchor(values);
1374
1375 ViewAbstract::SetPadding(NG::CalcLength(WIDTH));
1376 ViewAbstract::SetMargin(NG::CalcLength(WIDTH));
1377 ViewAbstract::SetBorderRadius(WIDTH);
1378 ViewAbstract::SetBorderColor(BLUE);
1379 ViewAbstract::SetBorderWidth(WIDTH);
1380
1381 auto borderStyle = static_cast<BorderStyle>(INDEX);
1382 ViewAbstract::SetBorderStyle(borderStyle);
1383
1384 /**
1385 * @tc.expected: Return expected results.
1386 */
1387 bool result = ViewStackProcessor::GetInstance()->IsCurrentVisualStateProcess();
1388 EXPECT_FALSE(result);
1389 }
1390
1391 /**
1392 * @tc.name: ViewAbstractTest033
1393 * @tc.desc: Test the operation of View_Abstract
1394 * @tc.type: FUNC
1395 */
1396 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest033, TestSize.Level1)
1397 {
1398 /**
1399 * @tc.steps: step1.ClearStack.
1400 */
1401 auto state = static_cast<VisualState>(INDEX);
1402 ViewStackProcessor::GetInstance()->SetVisualState(state);
1403 ViewStackProcessor::GetInstance()->ClearStack();
1404
1405 /**
1406 * @tc.steps: step2. related function is called.
1407 */
1408 OffsetT<Dimension> values = { WIDTH, HEIGHT };
1409 ViewAbstract::SetPosition(values);
1410 ViewAbstract::SetOffset(values);
1411 ViewAbstract::MarkAnchor(values);
1412
1413 NG::PaddingProperty paddings;
1414 ViewAbstract::SetPadding(paddings);
1415
1416 NG::MarginProperty margins;
1417 ViewAbstract::SetMargin(margins);
1418
1419 NG::BorderRadiusProperty borderRadius;
1420 ViewAbstract::SetBorderRadius(borderRadius);
1421
1422 NG::BorderColorProperty borderColors;
1423 ViewAbstract::SetBorderColor(borderColors);
1424
1425 NG::BorderWidthProperty borderWidth;
1426 ViewAbstract::SetBorderWidth(borderWidth);
1427
1428 NG::BorderStyleProperty borderStyles;
1429 ViewAbstract::SetBorderStyle(borderStyles);
1430
1431 /**
1432 * @tc.expected: Return expected results.
1433 */
1434 bool result = ViewStackProcessor::GetInstance()->IsCurrentVisualStateProcess();
1435 EXPECT_FALSE(result);
1436 }
1437
1438 /**
1439 * @tc.name: ViewAbstractTest034
1440 * @tc.desc: Test the operation of View_Abstract
1441 * @tc.type: FUNC
1442 */
1443 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest034, TestSize.Level1)
1444 {
1445 /**
1446 * @tc.steps: step1.ClearStack.
1447 */
1448 auto state = static_cast<VisualState>(INDEX);
1449 ViewStackProcessor::GetInstance()->SetVisualState(state);
1450 ViewStackProcessor::GetInstance()->ClearStack();
1451
1452 /**
1453 * @tc.steps: step2. related function is called.
1454 */
1455 BlurOption blurOption;
1456 ViewAbstract::SetBrightness(RADIUS);
1457 ViewAbstract::SetGrayScale(RADIUS);
1458 ViewAbstract::SetContrast(RADIUS);
1459 ViewAbstract::SetSaturate(RADIUS);
1460 ViewAbstract::SetSepia(RADIUS);
1461 ViewAbstract::SetInvert(invert);
1462 ViewAbstract::SetHueRotate(RATIO);
1463 ViewAbstract::SetColorBlend(BLUE);
1464 ViewAbstract::SetBackdropBlur(RADIUS, blurOption);
1465 ViewAbstract::SetFrontBlur(RADIUS, blurOption);
1466 ViewAbstract::SetClipEdge(false);
1467
1468 /**
1469 * @tc.expected: Return expected results.
1470 */
1471 bool result = ViewStackProcessor::GetInstance()->IsCurrentVisualStateProcess();
1472 EXPECT_FALSE(result);
1473 }
1474
1475 /**
1476 * @tc.name: ViewAbstractTest035
1477 * @tc.desc: Test the operation of View_Abstract
1478 * @tc.type: FUNC
1479 */
1480 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest035, TestSize.Level1)
1481 {
1482 /**
1483 * @tc.steps: step1.ClearStack.
1484 */
1485 auto state = static_cast<VisualState>(INDEX);
1486 ViewStackProcessor::GetInstance()->SetVisualState(state);
1487 ViewStackProcessor::GetInstance()->ClearStack();
1488
1489 /**
1490 * @tc.steps: step2. related function is called.
1491 */
1492 viewAbstractModelNG.SetScale(1.0f, 1.0f, 0.0f);
1493 DimensionOffset value = { WIDTH, HEIGHT };
1494 viewAbstractModelNG.SetPivot(WIDTH, HEIGHT, ZERO);
1495 NG::TranslateOptions values;
1496 ViewAbstract::SetTranslate(std::move(values));
1497 Vector5F scales(1.0f, 1.0f, 2.0f, 2.0f, 0.0f);
1498 ViewAbstract::SetRotate(scales);
1499 Matrix4 matrix;
1500 ViewAbstract::SetTransformMatrix(std::move(matrix));
1501
1502 ShadowStyle style { 1 };
1503 Shadow shadow { RATIO, OFFSET, BLUE, style };
1504 ViewAbstract::SetBackShadow(shadow);
1505 NG::Gradient gradient;
1506 ViewAbstract::SetLinearGradient(std::move(gradient));
1507 ViewAbstract::SetSweepGradient(std::move(gradient));
1508 ViewAbstract::SetRadialGradient(std::move(gradient));
1509 TransitionOptions options;
1510 ViewAbstract::SetTransition(std::move(options));
1511 RefPtr<BasicShape> basicShape;
1512 ViewAbstract::SetClipShape(std::move(basicShape));
1513 ViewAbstract::SetMask(std::move(basicShape));
1514
1515 /**
1516 * @tc.expected: Return expected results.
1517 */
1518 bool result = ViewStackProcessor::GetInstance()->IsCurrentVisualStateProcess();
1519 EXPECT_FALSE(result);
1520 }
1521
1522 /**
1523 * @tc.name: ViewAbstractTest036
1524 * @tc.desc: Test the operation of View_Abstract
1525 * @tc.type: FUNC
1526 */
1527 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest036, TestSize.Level1)
1528 {
1529 /**
1530 * @tc.steps: step1.ClearStack.
1531 */
1532 auto state = static_cast<VisualState>(INDEX);
1533 ViewStackProcessor::GetInstance()->SetVisualState(state);
1534 ViewStackProcessor::GetInstance()->ClearStack();
1535
1536 /**
1537 * @tc.steps: step2. related function is called.
1538 */
1539 ViewAbstract::SetBorderImageSource(srcimages);
1540 ViewAbstract::SetHasBorderImageSlice(false);
1541 ViewAbstract::SetHasBorderImageWidth(false);
1542 ViewAbstract::SetHasBorderImageOutset(false);
1543 ViewAbstract::SetHasBorderImageRepeat(false);
1544 ViewAbstract::SetSphericalEffect(RATIO);
1545 ViewAbstract::SetLightUpEffect(RATIO);
1546 ViewAbstract::SetForegroundColor(BLUE);
1547 ViewAbstract::ClearWidthOrHeight(true);
1548 ViewAbstract::SetUseEffect(false);
1549 ViewAbstract::SetRenderGroup(false);
1550 ViewAbstract::SetRenderFit(RenderFit::BOTTOM);
1551 ViewAbstract::UpdateSafeAreaExpandOpts(safeAreaExpandOpts);
1552 ViewAbstract::SetObscured(reasonsVector);
1553
1554 PixStretchEffectOption option;
1555 option.bottom = BOTTOM;
1556 option.left = LEFT;
1557 option.right = RIGHT;
1558 option.top = TOP;
1559 ViewAbstract::SetPixelStretchEffect(option);
1560
1561 /**
1562 * @tc.expected: Return expected results.
1563 */
1564 bool result = ViewStackProcessor::GetInstance()->IsCurrentVisualStateProcess();
1565 EXPECT_FALSE(result);
1566 }
1567
1568 /**
1569 * @tc.name: ViewAbstractTest037
1570 * @tc.desc: Test the operation of View_Abstract
1571 * @tc.type: FUNC
1572 */
1573 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest037, TestSize.Level1)
1574 {
1575 /**
1576 * @tc.steps: step1.ClearStack.
1577 */
1578 auto state = static_cast<VisualState>(INDEX);
1579 ViewStackProcessor::GetInstance()->SetVisualState(state);
1580 ViewStackProcessor::GetInstance()->ClearStack();
1581
1582 /**
1583 * @tc.steps: step2. related function is called.
1584 */
1585 RefPtr<BorderImage> borderImage;
1586 ViewAbstract::SetBorderImage(std::move(borderImage));
1587 Gradient gradient;
1588 ViewAbstract::SetBorderImageGradient(std::move(gradient));
1589 RefPtr<NG::ChainedTransitionEffect> effect;
1590 ViewAbstract::SetChainedTransition(std::move(effect));
1591 RefPtr<ProgressMaskProperty> progress;
1592 ViewAbstract::SetProgressMask(std::move(progress));
1593 auto strategy = static_cast<ForegroundColorStrategy>(INDEX);
1594 ViewAbstract::SetForegroundColorStrategy(std::move(strategy));
1595 OverlayOptions overlay;
1596 ViewAbstract::SetOverlay(std::move(overlay));
1597
1598 /**
1599 * @tc.expected: Return expected results.
1600 */
1601 bool result = ViewStackProcessor::GetInstance()->IsCurrentVisualStateProcess();
1602 EXPECT_FALSE(result);
1603 }
1604
1605 /**
1606 * @tc.name: ViewAbstractTest038
1607 * @tc.desc: Test the operation of View_Abstract.
1608 * @tc.type: FUNC
1609 */
1610 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest038, TestSize.Level1)
1611 {
1612 /**
1613 * @tc.steps: step1. Build a object viewAbstract.
1614 */
1615 ViewStackProcessor viewStackProcessor;
1616 ViewAbstract viewAbstract;
1617 constexpr char TAG_ROOT[] = "root";
1618 constexpr char TAG_CHILD[] = "child";
1619 const auto MOCK_PATTERN_ROOT = AceType::MakeRefPtr<Pattern>();
1620 const auto FRAME_NODE_ROOT = FrameNode::CreateFrameNode(TAG_ROOT, 1, MOCK_PATTERN_ROOT, true);
1621 const auto FRAME_NODE_CHILD = FrameNode::CreateFrameNode(TAG_CHILD, 2, MOCK_PATTERN_ROOT, false);
1622 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
1623 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
1624 /**
1625 * @tc.steps: step2. callback SetClickEffectLevel.push FrameNode is not null.
1626 */
1627 viewAbstract.SetClickEffectLevel(ClickEffectLevel::LIGHT, 1.0f);
1628 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
1629 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
1630 auto frameNode = AceType::DynamicCast<FrameNode>(ViewStackProcessor::GetInstance()->Finish());
1631 ASSERT_NE(frameNode, nullptr);
1632 /**
1633 * @tc.expected: step3. Return expected results..
1634 */
1635 auto Node = AceType::DynamicCast<NG::FrameNode>(frameNode);
1636 ASSERT_NE(Node, nullptr);
1637 auto layoutProperty = Node->GetLayoutProperty();
1638 ASSERT_NE(layoutProperty, nullptr);
1639 viewStackProcessor.instance = nullptr;
1640 }
1641
1642 /**
1643 * @tc.name: ViewAbstractTest039
1644 * @tc.desc: Test the operation of View_Abstract
1645 * @tc.type: FUNC
1646 */
1647 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest039, TestSize.Level1)
1648 {
1649 /**
1650 * @tc.steps: step1. Build a object viewAbstract.
1651 */
1652 ViewStackProcessor viewStackProcessor;
1653 ViewAbstract viewAbstract;
1654 int32_t index = 1;
1655 auto state = static_cast<VisualState>(index);
1656 viewStackProcessor.GetInstance()->SetVisualState(state);
1657 /**
1658 * @tc.steps: step2.ClearStack and callback SetScale.
1659 */
1660 viewStackProcessor.GetInstance()->ClearStack();
1661 /**
1662 * @tc.expected: step2. Return expected results..
1663 */
1664 bool result = ViewStackProcessor::GetInstance()->IsCurrentVisualStateProcess();
1665 viewAbstract.SetClickEffectLevel(ClickEffectLevel::LIGHT, 1.0f);
1666 ViewAbstract::ResetMinSize(true);
1667 EXPECT_FALSE(result);
1668 /**
1669 * @tc.steps: step3. visualState_ is null.
1670 * @tc.expected: result is true.
1671 */
1672 ViewStackProcessor::GetInstance()->visualState_ = std::nullopt;
1673 result = ViewStackProcessor::GetInstance()->IsCurrentVisualStateProcess();
1674 viewAbstract.SetClickEffectLevel(ClickEffectLevel::LIGHT, 1.0f);
1675 ViewAbstract::ResetMinSize(true);
1676 EXPECT_TRUE(result);
1677 }
1678
1679 /**
1680 * @tc.name: ViewAbstractTest040
1681 * @tc.desc: Test the BindMenu and BindContextMenu of ViewAbstractModelNG
1682 * @tc.type: FUNC
1683 */
1684 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest040, TestSize.Level1)
1685 {
1686 /**
1687 * @tc.steps: step1. create and put mainNode, then build some necessary params.
1688 */
1689 const RefPtr<FrameNode> mainNode = FrameNode::CreateFrameNode("main", 1, AceType::MakeRefPtr<Pattern>(), true);
1690 ViewStackProcessor::GetInstance()->Push(mainNode);
1691
1692 auto container = Container::Current();
1693 ASSERT_NE(container, nullptr);
1694 auto pipelineContext = container->GetPipelineContext();
1695 ASSERT_NE(pipelineContext, nullptr);
1696 auto context = AceType::DynamicCast<NG::PipelineContext>(pipelineContext);
1697 ASSERT_NE(context, nullptr);
1698 auto overlayManager = context->GetOverlayManager();
1699 ASSERT_NE(overlayManager, nullptr);
1700
1701 ASSERT_NE(SubwindowManager::GetInstance(), nullptr);
__anonbfd7bfda0302() 1702 std::function<void()> flagFunc = []() { flag++; };
1703 std::vector<NG::OptionParam> params = {};
1704 std::function<void()> buildFunc;
1705 MenuParam menuParam;
1706 std::function<void()> previewBuildFunc = nullptr;
1707 /**
1708 * @tc.steps: step2. call Bind and BindContextMenu multiple times with unless parameters
1709 * @tc.expected: The show or hide method will not call flagFunc.
1710 */
1711 viewAbstractModelNG.BindMenu(std::move(params), std::move(buildFunc), menuParam);
__anonbfd7bfda0402() 1712 buildFunc = []() {};
1713 viewAbstractModelNG.BindMenu(std::move(params), std::move(buildFunc), menuParam);
1714 params.push_back(OptionParam());
1715 viewAbstractModelNG.BindMenu(std::move(params), std::move(buildFunc), menuParam);
1716 menuParam.type = MenuType::CONTEXT_MENU;
1717 viewAbstractModelNG.BindContextMenu(ResponseType::LONG_PRESS, buildFunc, menuParam, previewBuildFunc);
1718 EXPECT_EQ(flag, 0);
1719 /**
1720 * @tc.steps: step3. set appear and disappear and recall BindMenu and BindContextMenu;
1721 * @tc.expected: The flagFunc call times meet expectations.
1722 */
1723 menuParam.onAppear = flagFunc;
1724 menuParam.onDisappear = flagFunc;
1725 menuParam.type = MenuType::MENU;
1726 viewAbstractModelNG.BindMenu(std::move(params), std::move(buildFunc), menuParam);
1727 menuParam.type = MenuType::CONTEXT_MENU;
1728 viewAbstractModelNG.BindContextMenu(ResponseType::RIGHT_CLICK, buildFunc, menuParam, previewBuildFunc);
1729 EXPECT_EQ(flag, 0);
1730 /**
1731 * @tc.steps: step4. create mouseInfo, set some useless params and call onMouseCallback_;
1732 * @tc.expected: StopPropagation in mouseInfo is false.
1733 */
1734 auto inputHub = mainNode->GetOrCreateInputEventHub();
1735 ASSERT_NE(inputHub, nullptr);
1736 MouseInfo mouseInfo;
1737 mouseInfo.SetButton(MouseButton::LEFT_BUTTON);
1738 mouseInfo.SetAction(MouseAction::NONE);
1739 inputHub->showMenu_->onMouseCallback_(mouseInfo);
1740 mouseInfo.SetButton(MouseButton::RIGHT_BUTTON);
1741 mouseInfo.SetAction(MouseAction::NONE);
1742 inputHub->showMenu_->onMouseCallback_(mouseInfo);
1743 EXPECT_FALSE(mouseInfo.IsStopPropagation());
1744 /**
1745 * @tc.steps: step4. create mouseInfo, set right param and call onMouseCallback_;
1746 * @tc.expected: StopPropagation in mouseInfo is false.
1747 */
1748 mouseInfo.SetButton(MouseButton::RIGHT_BUTTON);
1749 mouseInfo.SetAction(MouseAction::RELEASE);
1750 inputHub->showMenu_->onMouseCallback_(mouseInfo);
1751 EXPECT_FALSE(mouseInfo.IsStopPropagation());
1752
1753 /**
1754 * @tc.steps: step5. create mouseInfo, set right param and call BindMenuWithCustomNode;
1755 * @tc.expected: StopPropagation in mouseInfo is true.
1756 */
1757 auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
1758 PipelineBase::GetCurrentContext()->SetThemeManager(themeManager);
1759 PipelineBase::GetCurrentContext()->SetEventManager(AceType::MakeRefPtr<EventManager>());
1760 EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<SelectTheme>()));
1761 int32_t nodeId = ElementRegister::GetInstance()->MakeUniqueId();
1762 const RefPtr<FrameNode> targetNode =
1763 FrameNode::CreateFrameNode("targetNode", nodeId, AceType::MakeRefPtr<Pattern>(), true);
1764 std::vector<OptionParam> param;
1765 ViewAbstract::BindMenuWithItems(std::move(param), targetNode, OFFSETF, menuParam);
1766 menuParam.type = MenuType::MULTI_MENU;
1767 ViewAbstract::BindMenuWithCustomNode(mainNode, targetNode, OFFSETF, menuParam);
1768 EXPECT_FALSE(mouseInfo.IsStopPropagation());
1769 param.push_back(OptionParam());
1770 ViewAbstract::BindMenuWithItems(std::move(param), targetNode, OFFSETF, menuParam);
1771 menuParam.type = MenuType::CONTEXT_MENU;
1772 ViewAbstract::BindMenuWithCustomNode(mainNode, targetNode, OFFSETF, menuParam);
1773 EXPECT_FALSE(mouseInfo.IsStopPropagation());
1774 }
1775
1776 /**
1777 * @tc.name: ViewAbstractTest041
1778 * @tc.desc: Test the BindMenu and BindContextMenu of ViewAbstractModelNG
1779 * @tc.type: FUNC
1780 */
1781 HWTEST_F(ViewAbstractTestNg, ViewAbstractTest041, TestSize.Level1)
1782 {
1783 /**
1784 * @tc.steps: step1. creat frameNode and other creat.
1785 */
1786 int32_t nodeId = ElementRegister::GetInstance()->MakeUniqueId();
1787 const RefPtr<FrameNode> frameNode =
1788 FrameNode::CreateFrameNode("frameNode", nodeId, AceType::MakeRefPtr<Pattern>(), true);
1789
1790 auto layoutProperty = frameNode->GetLayoutProperty();
1791 CalcSize idealSize = { CalcLength(ZERO), CalcLength(ZERO) };
1792 layoutProperty->calcLayoutConstraint_ = std::make_unique<MeasureProperty>();
1793 layoutProperty->calcLayoutConstraint_->minSize = idealSize;
1794 layoutProperty->calcLayoutConstraint_->maxSize = idealSize;
1795 EffectOption option;
1796 Color color = Color::TRANSPARENT;
1797 option.color = color;
1798
1799 std::vector<std::pair<float, float>> fractionStops;
1800 fractionStops.push_back(std::pair<float, float>(0.0f, 1.0f));
1801 CalcDimension dimensionRadius(0.0);
1802 LinearGradientBlurPara blurPara(dimensionRadius, fractionStops, GradientDirection::LEFT);
1803 /**
1804 * @tc.steps: step2. ResetMinSize test, IsCurrentVisualStateProcess() == false
1805 * @tc.expected:call ResetMinSize(),calcLayoutConstraint_ not change
1806 */
1807 ViewStackProcessor::GetInstance()->SetVisualState(VisualState::DISABLED);
1808 ViewAbstract::ResetMinSize(true);
1809 ViewAbstract::ResetMaxSize(true);
1810 ViewAbstract::SetBackgroundAlign(Alignment::TOP_LEFT);
1811 ViewAbstract::SetBackgroundEffect(option);
1812 ViewAbstract::SetDynamicLightUp(0, 0);
1813 ViewAbstract::SetLinearGradientBlur(blurPara);
1814 EXPECT_TRUE(layoutProperty->calcLayoutConstraint_->minSize.has_value());
1815 EXPECT_TRUE(layoutProperty->calcLayoutConstraint_->maxSize.has_value());
1816
1817 /**
1818 * @tc.steps: step3. ResetMinSize test, IsCurrentVisualStateProcess() == true
1819 * @tc.expected:call ResetMinSize(),calcLayoutConstraint_->minSize.Width not change
1820 */
1821 ViewStackProcessor::GetInstance()->visualState_ = std::nullopt;
1822 ViewAbstract::ResetMinSize(true);
1823 ViewAbstract::ResetMaxSize(true);
1824 ViewAbstract::SetBackgroundAlign(Alignment::BOTTOM_RIGHT);
1825 ViewAbstract::SetBackgroundEffect(option);
1826 ViewAbstract::SetDynamicLightUp(0, 0);
1827 ViewAbstract::SetLinearGradientBlur(blurPara);
1828 ViewAbstract::DisableOnAppear();
1829 ViewAbstract::DisableOnAreaChange();
1830 ViewAbstract::DisableOnDisAppear();
1831 std::vector<DimensionRect> responseRegion;
1832 DimensionRect responseRect(Dimension(0), Dimension(0), DimensionOffset(OFFSETF));
1833 responseRegion.emplace_back(responseRect);
1834 ViewAbstract::SetMouseResponseRegion(responseRegion);
1835 EXPECT_TRUE(layoutProperty->calcLayoutConstraint_->minSize.value().Width().has_value());
1836 EXPECT_TRUE(layoutProperty->calcLayoutConstraint_->maxSize.value().Width().has_value());
1837 }
1838
1839 /**
1840 * @tc.name: ViewAbstractDisableClickTest
1841 * @tc.desc: Test the operation of View_Abstract.
1842 * @tc.type: FUNC
1843 */
1844 HWTEST_F(ViewAbstractTestNg, ViewAbstractDisableClickTest, TestSize.Level1)
1845 {
1846 /**
1847 * @tc.steps: step1. create framenode and check callback;
1848 * @tc.expected: callback is not null.
1849 */
1850 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
1851 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
1852 GestureEventFunc tapEventFunc;
1853 ViewAbstract::SetOnClick(std::move(tapEventFunc));
1854
1855 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
1856 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
1857 auto frameNode = AceType::DynamicCast<FrameNode>(topFrameNodeOne);
1858 ASSERT_NE(frameNode, nullptr);
1859 auto node = AceType::DynamicCast<NG::FrameNode>(frameNode);
1860 ASSERT_NE(node, nullptr);
1861 auto gestureHub = node->GetOrCreateGestureEventHub();
1862 auto& callback = gestureHub->clickEventActuator_->userCallback_;
1863 EXPECT_NE(callback, nullptr);
1864
1865 /**
1866 * @tc.steps: step2. Disable callback.
1867 * @tc.expected: callback is null.
1868 */
1869 ViewAbstract::DisableOnClick();
1870 EXPECT_EQ(callback, nullptr);
1871
1872 /**
1873 * @tc.steps: step3. Add callback again.
1874 * @tc.expected: callback is not null.
1875 */
1876 GestureEventFunc tapEventFunc2;
1877 ViewAbstract::SetOnClick(std::move(tapEventFunc2));
1878 EXPECT_NE(callback, nullptr);
1879 ViewStackProcessor::GetInstance()->instance = nullptr;
1880 }
1881
1882 /**
1883 * @tc.name: ViewAbstractDisableTouchTest
1884 * @tc.desc: Test the operation of View_Abstract.
1885 * @tc.type: FUNC
1886 */
1887 HWTEST_F(ViewAbstractTestNg, ViewAbstractDisableTouchTest, TestSize.Level1)
1888 {
1889 /**
1890 * @tc.steps: step1. create framenode and check callback;
1891 * @tc.expected: callback is not null.
1892 */
1893 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
1894 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
1895 TouchEventFunc touchEventFunc;
1896 ViewAbstract::SetOnTouch(std::move(touchEventFunc));
1897
1898 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
1899 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
1900 auto frameNode = AceType::DynamicCast<FrameNode>(topFrameNodeOne);
1901 ASSERT_NE(frameNode, nullptr);
1902 auto node = AceType::DynamicCast<NG::FrameNode>(frameNode);
1903 ASSERT_NE(node, nullptr);
1904 auto gestureHub = node->GetOrCreateGestureEventHub();
1905 auto& callback = gestureHub->touchEventActuator_->userCallback_;
1906 EXPECT_NE(callback, nullptr);
1907
1908 /**
1909 * @tc.steps: step2. Disable callback.
1910 * @tc.expected: callback is null.
1911 */
1912 ViewAbstract::DisableOnTouch();
1913 EXPECT_EQ(callback, nullptr);
1914
1915 /**
1916 * @tc.steps: step3. Add callback again.
1917 * @tc.expected: callback is not null.
1918 */
1919 TouchEventFunc touchEventFunc2;
1920 ViewAbstract::SetOnTouch(std::move(touchEventFunc2));
1921 EXPECT_NE(callback, nullptr);
1922 ViewStackProcessor::GetInstance()->instance = nullptr;
1923 }
1924
1925 /**
1926 * @tc.name: ViewAbstractDisableMouseTest
1927 * @tc.desc: Test the operation of View_Abstract.
1928 * @tc.type: FUNC
1929 */
1930 HWTEST_F(ViewAbstractTestNg, ViewAbstractDisableMouseTest, TestSize.Level1)
1931 {
1932 /**
1933 * @tc.steps: step1. create framenode and check callback;
1934 * @tc.expected: callback is not null.
1935 */
1936 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
1937 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
1938 OnMouseEventFunc onMouseEventFunc;
1939 ViewAbstract::SetOnMouse(std::move(onMouseEventFunc));
1940
1941 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
1942 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
1943 auto frameNode = AceType::DynamicCast<FrameNode>(topFrameNodeOne);
1944 ASSERT_NE(frameNode, nullptr);
1945 auto node = AceType::DynamicCast<NG::FrameNode>(frameNode);
1946 ASSERT_NE(node, nullptr);
1947 auto eventHub = node->GetOrCreateInputEventHub();
1948 auto& callback = eventHub->mouseEventActuator_->userCallback_;
1949 EXPECT_NE(callback, nullptr);
1950
1951 /**
1952 * @tc.steps: step2. Disable callback.
1953 * @tc.expected: callback is null.
1954 */
1955 ViewAbstract::DisableOnMouse();
1956 EXPECT_EQ(callback, nullptr);
1957
1958 /**
1959 * @tc.steps: step3. Add callback again.
1960 * @tc.expected: callback is not null.
1961 */
1962 OnMouseEventFunc onMouseEventFunc2;
1963 ViewAbstract::SetOnMouse(std::move(onMouseEventFunc2));
1964 EXPECT_NE(callback, nullptr);
1965 ViewStackProcessor::GetInstance()->instance = nullptr;
1966 }
1967
1968 /**
1969 * @tc.name: ViewAbstractDisableHoverTest
1970 * @tc.desc: Test the operation of View_Abstract.
1971 * @tc.type: FUNC
1972 */
1973 HWTEST_F(ViewAbstractTestNg, ViewAbstractDisableHoverTest, TestSize.Level1)
1974 {
1975 /**
1976 * @tc.steps: step1. create framenode and check callback;
1977 * @tc.expected: callback is not null.
1978 */
1979 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
1980 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
1981 OnHoverFunc onHoverEventFunc;
1982 ViewAbstract::SetOnHover(std::move(onHoverEventFunc));
1983
1984 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
1985 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
1986 auto frameNode = AceType::DynamicCast<FrameNode>(topFrameNodeOne);
1987 ASSERT_NE(frameNode, nullptr);
1988 auto node = AceType::DynamicCast<NG::FrameNode>(frameNode);
1989 ASSERT_NE(node, nullptr);
1990 auto eventHub = node->GetOrCreateInputEventHub();
1991 auto& callback = eventHub->hoverEventActuator_->userCallback_;
1992 EXPECT_NE(callback, nullptr);
1993
1994 /**
1995 * @tc.steps: step2. Disable callback.
1996 * @tc.expected: callback is null.
1997 */
1998 ViewAbstract::DisableOnHover();
1999 EXPECT_EQ(callback, nullptr);
2000
2001 /**
2002 * @tc.steps: step3. Add callback again.
2003 * @tc.expected: callback is not null.
2004 */
2005 OnHoverFunc onHoverEventFunc2;
2006 ViewAbstract::SetOnHover(std::move(onHoverEventFunc2));
2007 EXPECT_NE(callback, nullptr);
2008 ViewStackProcessor::GetInstance()->instance = nullptr;
2009 }
2010
2011 /**
2012 * @tc.name: ViewAbstractDisableKeyTest
2013 * @tc.desc: Test the operation of View_Abstract.
2014 * @tc.type: FUNC
2015 */
2016 HWTEST_F(ViewAbstractTestNg, ViewAbstractDisableKeyTest, TestSize.Level1)
2017 {
2018 /**
2019 * @tc.steps: step1. create framenode and check callback;
2020 * @tc.expected: callback is not null.
2021 */
2022 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
2023 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
__anonbfd7bfda0502(KeyEventInfo& info) 2024 OnKeyCallbackFunc onKeyCallback = [](KeyEventInfo& info) {};
2025 ViewAbstract::SetOnKeyEvent(std::move(onKeyCallback));
2026
2027 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
2028 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
2029 auto frameNode = AceType::DynamicCast<FrameNode>(topFrameNodeOne);
2030 ASSERT_NE(frameNode, nullptr);
2031 auto node = AceType::DynamicCast<NG::FrameNode>(frameNode);
2032 ASSERT_NE(node, nullptr);
2033 auto focusHub = node->GetOrCreateFocusHub();
2034 auto& callback = focusHub->focusCallbackEvents_->onKeyEventCallback_;
2035 EXPECT_TRUE(callback);
2036
2037 /**
2038 * @tc.steps: step2. Disable callback.
2039 * @tc.expected: callback is null.
2040 */
2041 ViewAbstract::DisableOnKeyEvent();
2042 EXPECT_FALSE(callback);
2043
2044 /**
2045 * @tc.steps: step3. Add callback again.
2046 * @tc.expected: callback is not null.
2047 */
__anonbfd7bfda0602(KeyEventInfo& info) 2048 OnKeyCallbackFunc onKeyCallback2 = [](KeyEventInfo& info) {};
2049 ViewAbstract::SetOnKeyEvent(std::move(onKeyCallback2));
2050 EXPECT_TRUE(callback);
2051 ViewStackProcessor::GetInstance()->instance = nullptr;
2052 }
2053
2054 /**
2055 * @tc.name: ViewAbstractDisableFocusTest
2056 * @tc.desc: Test the operation of View_Abstract.
2057 * @tc.type: FUNC
2058 */
2059 HWTEST_F(ViewAbstractTestNg, ViewAbstractDisableFocusTest, TestSize.Level1)
2060 {
2061 /**
2062 * @tc.steps: step1. create framenode and check callback;
2063 * @tc.expected: callback is not null.
2064 */
2065 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
2066 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
__anonbfd7bfda0702() 2067 OnFocusFunc onFocusCallback = []() {};
2068 ViewAbstract::SetOnFocus(std::move(onFocusCallback));
2069
2070 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
2071 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
2072 auto frameNode = AceType::DynamicCast<FrameNode>(topFrameNodeOne);
2073 ASSERT_NE(frameNode, nullptr);
2074 auto node = AceType::DynamicCast<NG::FrameNode>(frameNode);
2075 ASSERT_NE(node, nullptr);
2076 auto focusHub = node->GetOrCreateFocusHub();
2077 auto& callback = focusHub->focusCallbackEvents_->onFocusCallback_;
2078 EXPECT_NE(callback, nullptr);
2079
2080 /**
2081 * @tc.steps: step2. Disable callback.
2082 * @tc.expected: callback is null.
2083 */
2084 ViewAbstract::DisableOnFocus();
2085 EXPECT_EQ(callback, nullptr);
2086
2087 /**
2088 * @tc.steps: step3. Add callback again.
2089 * @tc.expected: callback is not null.
2090 */
__anonbfd7bfda0802() 2091 OnFocusFunc onFocusCallback2 = []() {};
2092 ViewAbstract::SetOnFocus(std::move(onFocusCallback2));
2093 EXPECT_NE(callback, nullptr);
2094 ViewStackProcessor::GetInstance()->instance = nullptr;
2095 }
2096
2097 /**
2098 * @tc.name: ViewAbstractDisableBlurTest
2099 * @tc.desc: Test the operation of View_Abstract.
2100 * @tc.type: FUNC
2101 */
2102 HWTEST_F(ViewAbstractTestNg, ViewAbstractDisableBlurTest, TestSize.Level1)
2103 {
2104 /**
2105 * @tc.steps: step1. create framenode and check callback;
2106 * @tc.expected: callback is not null.
2107 */
2108 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
2109 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_CHILD);
__anonbfd7bfda0902() 2110 OnBlurFunc onBlurCallback = []() {};
2111 ViewAbstract::SetOnFocus(std::move(onBlurCallback));
2112
2113 auto topFrameNodeOne = ViewStackProcessor::GetInstance()->GetMainElementNode();
2114 EXPECT_EQ(strcmp(topFrameNodeOne->GetTag().c_str(), TAG_CHILD), 0);
2115 auto frameNode = AceType::DynamicCast<FrameNode>(topFrameNodeOne);
2116 ASSERT_NE(frameNode, nullptr);
2117 auto node = AceType::DynamicCast<NG::FrameNode>(frameNode);
2118 ASSERT_NE(node, nullptr);
2119 auto focusHub = node->GetOrCreateFocusHub();
2120 auto& callback = focusHub->focusCallbackEvents_->onBlurCallback_;
2121 EXPECT_TRUE(callback);
2122
2123 /**
2124 * @tc.steps: step2. Disable callback.
2125 * @tc.expected: callback is null.
2126 */
2127 ViewAbstract::DisableOnBlur();
2128 EXPECT_FALSE(callback);
2129
2130 /**
2131 * @tc.steps: step3. Add callback again.
2132 * @tc.expected: callback is not null.
2133 */
__anonbfd7bfda0a02() 2134 OnBlurFunc onBlurCallback2 = []() {};
2135 ViewAbstract::SetOnBlur(std::move(onBlurCallback2));
2136 EXPECT_TRUE(callback);
2137 ViewStackProcessor::GetInstance()->instance = nullptr;
2138 }
2139
2140 /**
2141 * @tc.name: ViewAbstractMonopolizeEvent001
2142 * @tc.desc: View_Abstract set MonopolizeEvent true test
2143 * @tc.type: FUNC
2144 */
2145 HWTEST_F(ViewAbstractTestNg, ViewAbstractMonopolizeEvent001, TestSize.Level1)
2146 {
2147 /**
2148 * @tc.steps: step1. create and put mainNode, then build some necessary params.
2149 */
2150 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
2151
2152 /**
2153 * @tc.steps: step2. set monopolize
2154 */
2155 ViewAbstract::SetMonopolizeEvents(true);
2156
2157 /**
2158 * @tc.steps: step3. get node in ViewStackProcessor.
2159 * @tc.expected: node is not null.
2160 */
2161 auto rootFrameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
2162 EXPECT_NE(rootFrameNode, nullptr);
2163
2164 /**
2165 * @tc.steps: step4. get monopolizeEvents value of the node.
2166 * @tc.expected: value is equal to true.
2167 */
2168 EXPECT_EQ(rootFrameNode->GetMonopolizeEvents(), true);
2169
2170 /**
2171 * @tc.steps: step5. finish view stack.
2172 */
2173 ViewStackProcessor::GetInstance()->Finish();
2174 }
2175
2176 /**
2177 * @tc.name: ViewAbstractMonopolizeEvent002
2178 * @tc.desc: View_Abstract set MonopolizeEvent false test
2179 * @tc.type: FUNC
2180 */
2181 HWTEST_F(ViewAbstractTestNg, ViewAbstractMonopolizeEvent002, TestSize.Level1)
2182 {
2183 /**
2184 * @tc.steps: step1. create and put mainNode, then build some necessary params.
2185 */
2186 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
2187
2188 /**
2189 * @tc.steps: step2. set monopolize
2190 */
2191 ViewAbstract::SetMonopolizeEvents(false);
2192
2193 /**
2194 * @tc.steps: step3. get node in ViewStackProcessor.
2195 * @tc.expected: node is not null.
2196 */
2197 auto rootFrameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
2198 EXPECT_NE(rootFrameNode, nullptr);
2199
2200 /**
2201 * @tc.steps: step4. get monopolizeEvents value of the node.
2202 * @tc.expected: value is equal to true.
2203 */
2204 EXPECT_EQ(rootFrameNode->GetMonopolizeEvents(), false);
2205
2206 /**
2207 * @tc.steps: step5. finish view stack.
2208 */
2209 ViewStackProcessor::GetInstance()->Finish();
2210 }
2211
2212 /**
2213 * @tc.name: ViewAbstractMonopolizeEvent003
2214 * @tc.desc: View_Abstract not set MonopolizeEvent test (use default)
2215 * @tc.type: FUNC
2216 */
2217 HWTEST_F(ViewAbstractTestNg, ViewAbstractMonopolizeEvent003, TestSize.Level1)
2218 {
2219 /**
2220 * @tc.steps: step1. create and put mainNode, then build some necessary params.
2221 */
2222 ViewStackProcessor::GetInstance()->Push(FRAME_NODE_ROOT);
2223
2224 /**
2225 * @tc.steps: step2. get node in ViewStackProcessor.
2226 * @tc.expected: node is not null.
2227 */
2228 auto rootFrameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
2229 EXPECT_NE(rootFrameNode, nullptr);
2230
2231 /**
2232 * @tc.steps: step3. get monopolizeEvents value of the node.
2233 * @tc.expected: value is equal to true.
2234 */
2235 EXPECT_EQ(rootFrameNode->GetMonopolizeEvents(), false);
2236
2237 /**
2238 * @tc.steps: step5. finish view stack.
2239 */
2240 ViewStackProcessor::GetInstance()->Finish();
2241 }
2242 } // namespace OHOS::Ace::NG
2243