1 /*
2  * Copyright (c) 2022-2024 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 #include "gtest/gtest.h"
16 
17 #define private public
18 #define protected public
19 #include "test/mock/core/common/mock_resource_adapter.h"
20 #include "test/mock/core/common/mock_theme_manager.h"
21 #include "test/mock/core/pipeline/mock_pipeline_context.h"
22 #include "test/mock/core/render/mock_render_context.h"
23 #include "test/unittest/core/pattern/test_ng.h"
24 
25 #include "base/log/log_wrapper.h"
26 #include "core/components/container_modal/container_modal_constants.h"
27 #include "core/components/theme/theme_constants.h"
28 #include "core/components_ng/base/ui_node.h"
29 #include "core/components_ng/base/view_stack_processor.h"
30 #include "core/components_ng/pattern/button/button_pattern.h"
31 #include "core/components_ng/pattern/container_modal/container_modal_pattern.h"
32 #include "core/components_ng/pattern/container_modal/container_modal_theme.h"
33 #include "core/components_ng/pattern/container_modal/container_modal_view.h"
34 #include "core/components_ng/pattern/image/image_layout_property.h"
35 #include "core/components_ng/pattern/image/image_pattern.h"
36 #include "core/components_ng/pattern/linear_layout/linear_layout_pattern.h"
37 #include "core/components_ng/pattern/pattern.h"
38 #include "core/components_ng/pattern/stack/stack_pattern.h"
39 #include "core/components_ng/pattern/text/text_pattern.h"
40 #include "core/components_ng/pattern/text_picker/textpicker_column_pattern.h"
41 #include "core/pipeline_ng/pipeline_context.h"
42 
43 using namespace testing;
44 using namespace testing::ext;
45 namespace OHOS::Ace::NG {
46 namespace {
47 constexpr double MOUSE_MOVE_POPUP_DISTANCE = 5.0; // 5.0px
48 } // namespace
49 class ContainerModelTestNg : public TestNG {
50 protected:
51     static void SetUpTestSuite();
52     static void TearDownTestSuite();
53     void SetUp() override;
54     void TearDown() override;
55     void GetInstance();
56     RefPtr<FrameNode> CreateContent();
57     void SetMockWindow(WindowMode windowMode);
58     void CreateContainerModal();
59     void Touch(TouchLocationInfo locationInfo);
60     void Touch(Offset downOffset, Offset moveOffset, Offset upOffset);
61     void Mouse(MouseInfo mouseInfo);
62     void Mouse(Offset moveOffset);
63     void ClickBtn(int32_t index);
64     OnHoverEventFunc GetHovertEvent(int32_t index);
65     OnMouseEventFunc GetMouseEvent(int32_t index);
66 
67     RefPtr<FrameNode> frameNode_;
68     RefPtr<ContainerModalPattern> pattern_;
69     RefPtr<LayoutProperty> layoutProperty_;
70     RefPtr<ContainerModalAccessibilityProperty> accessibilityProperty_;
71 };
72 
SetUpTestSuite()73 void ContainerModelTestNg::SetUpTestSuite()
74 {
75     MockPipelineContext::SetUp();
76     TestNG::SetUpTestSuite();
77     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
78     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
79     auto themeConstants = CreateThemeConstants(THEME_PATTERN_CONTAINER_MODAL);
80     auto containerModalTheme = ContainerModalTheme::Builder().Build(themeConstants);
81     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(containerModalTheme));
82     EXPECT_CALL(*themeManager, GetThemeConstants()).WillRepeatedly(Return(themeConstants));
83 }
84 
TearDownTestSuite()85 void ContainerModelTestNg::TearDownTestSuite()
86 {
87     TestNG::TearDownTestSuite();
88 }
89 
SetUp()90 void ContainerModelTestNg::SetUp()
91 {
92     SetMockWindow(WindowMode::WINDOW_MODE_FULLSCREEN);
93 }
94 
TearDown()95 void ContainerModelTestNg::TearDown()
96 {
97     frameNode_ = nullptr;
98     pattern_ = nullptr;
99     layoutProperty_ = nullptr;
100     accessibilityProperty_ = nullptr;
101 }
102 
GetInstance()103 void ContainerModelTestNg::GetInstance()
104 {
105     RefPtr<UINode> element = ViewStackProcessor::GetInstance()->Finish();
106     frameNode_ = AceType::DynamicCast<FrameNode>(element);
107     pattern_ = frameNode_->GetPattern<ContainerModalPattern>();
108     layoutProperty_ = frameNode_->GetLayoutProperty();
109     accessibilityProperty_ = frameNode_->GetAccessibilityProperty<ContainerModalAccessibilityProperty>();
110 }
111 
CreateContent()112 RefPtr<FrameNode> ContainerModelTestNg::CreateContent()
113 {
114     return AceType::MakeRefPtr<FrameNode>("content", 0, AceType::MakeRefPtr<Pattern>());
115 }
116 
SetMockWindow(WindowMode windowMode)117 void ContainerModelTestNg::SetMockWindow(WindowMode windowMode)
118 {
119     const auto windowManager = AceType::MakeRefPtr<WindowManager>();
120     auto windowModeCallback = [windowMode]() { return windowMode; };
121     windowManager->SetWindowGetModeCallBack(std::move(windowModeCallback));
122     auto pipeline = MockPipelineContext::GetCurrent();
123     pipeline->windowManager_ = windowManager;
124 }
125 
CreateContainerModal()126 void ContainerModelTestNg::CreateContainerModal()
127 {
128     ContainerModalView view;
129     RefPtr<FrameNode> content = CreateContent();
130     auto frameNode = view.Create(content);
131     ViewStackProcessor::GetInstance()->Push(frameNode);
132     GetInstance();
133     FlushLayoutTask(frameNode_);
134 }
135 
Touch(TouchLocationInfo locationInfo)136 void ContainerModelTestNg::Touch(TouchLocationInfo locationInfo)
137 {
138     auto touchEventHub = frameNode_->GetOrCreateGestureEventHub();
139     auto touchEvent = touchEventHub->touchEventActuator_->userCallback_->GetTouchEventCallback();
140     TouchEventInfo eventInfo("touch");
141     eventInfo.AddChangedTouchLocationInfo(std::move(locationInfo));
142     touchEvent(eventInfo);
143 }
144 
Touch(Offset downOffset,Offset moveOffset,Offset upOffset)145 void ContainerModelTestNg::Touch(Offset downOffset, Offset moveOffset, Offset upOffset)
146 {
147     TouchLocationInfo locationInfo(1);
148     locationInfo.SetTouchType(TouchType::DOWN);
149     locationInfo.SetGlobalLocation(downOffset);
150     Touch(locationInfo);
151     locationInfo.SetTouchType(TouchType::MOVE);
152     locationInfo.SetGlobalLocation(moveOffset);
153     Touch(locationInfo);
154     locationInfo.SetTouchType(TouchType::UP);
155     locationInfo.SetGlobalLocation(upOffset);
156     Touch(locationInfo);
157 }
158 
Mouse(MouseInfo mouseInfo)159 void ContainerModelTestNg::Mouse(MouseInfo mouseInfo)
160 {
161     auto mouseEventHub = frameNode_->GetOrCreateInputEventHub();
162     auto mouseEvent = mouseEventHub->mouseEventActuator_->userCallback_->GetOnMouseEventFunc();
163     mouseEvent(mouseInfo);
164 }
165 
Mouse(Offset moveOffset)166 void ContainerModelTestNg::Mouse(Offset moveOffset)
167 {
168     MouseInfo mouseInfo;
169     mouseInfo.SetAction(MouseAction::MOVE);
170     mouseInfo.SetLocalLocation(moveOffset);
171     Mouse(mouseInfo);
172 }
173 
ClickBtn(int32_t index)174 void ContainerModelTestNg::ClickBtn(int32_t index)
175 {
176     auto container_modal_control_buttons = frameNode_->GetChildAtIndex(2);
177     auto btn = AceType::DynamicCast<FrameNode>(container_modal_control_buttons->GetChildAtIndex(index));
178     auto eventHub = btn->GetOrCreateGestureEventHub();
179     eventHub->clickEventActuator_ =
180         AceType::MakeRefPtr<ClickEventActuator>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
181     GestureEventFunc callback = [](GestureEvent& info) {};
182     auto clickEvent = AceType::MakeRefPtr<ClickEvent>(std::move(callback));
183     eventHub->clickEventActuator_->AddClickEvent(clickEvent);
184     auto clickEvents = eventHub->clickEventActuator_->clickEvents_;
185     GestureEvent info;
186     clickEvents.front()->GetGestureEventFunc()(info);
187 }
188 
GetHovertEvent(int32_t index)189 OnHoverEventFunc ContainerModelTestNg::GetHovertEvent(int32_t index)
190 {
191     auto container_modal_control_buttons = frameNode_->GetChildAtIndex(2);
192     auto btn = AceType::DynamicCast<FrameNode>(container_modal_control_buttons->GetChildAtIndex(index));
193     auto inputHub = btn->GetOrCreateInputEventHub();
194     auto inputEvents = inputHub->hoverEventActuator_->inputEvents_;
195     return inputEvents.front()->GetOnHoverEventFunc();
196 }
197 
GetMouseEvent(int32_t index)198 OnMouseEventFunc ContainerModelTestNg::GetMouseEvent(int32_t index)
199 {
200     auto container_modal_control_buttons = frameNode_->GetChildAtIndex(2);
201     auto btn = AceType::DynamicCast<FrameNode>(container_modal_control_buttons->GetChildAtIndex(index));
202     auto inputHub = btn->GetOrCreateInputEventHub();
203     auto inputEvents = inputHub->mouseEventActuator_->inputEvents_;
204     return inputEvents.front()->GetOnMouseEventFunc();
205 }
206 
207 /**
208  * @tc.name: Test001
209  * @tc.desc: Test ContainerModel Child
210  * @tc.type: FUNC
211  */
212 HWTEST_F(ContainerModelTestNg, Test001, TestSize.Level1)
213 {
214     /**
215      * The structure of container_modal is designed as follows :
216      * |--container_modal(stack)
217      *   |--column
218      *      |--container_modal_custom_title(row)
219      *          |--custom_node(js)
220      *      |--stack
221      *          |--container_modal_content(stage)
222      *              |--page
223      *          |--dialog(when show)
224      *   |--container_modal_custom_floating_title(row)
225      *          |--custom_node(js)
226      *   |--container_modal_control_buttons(row)
227      *          |--[leftSplit, maxRecover, minimize, close](button)
228      */
229     CreateContainerModal();
230 
231     EXPECT_EQ(frameNode_->GetTag(), "ContainerModal");
232     EXPECT_EQ(frameNode_->GetChildren().size(), 3);
233     auto column = frameNode_->GetChildAtIndex(0);
234     EXPECT_EQ(column->GetTag(), V2::COLUMN_ETS_TAG);
235     EXPECT_EQ(column->GetChildren().size(), 2);
236     auto container_modal_custom_title = column->GetChildAtIndex(0);
237     EXPECT_EQ(container_modal_custom_title->GetTag(), V2::ROW_ETS_TAG);
238     EXPECT_EQ(container_modal_custom_title->GetChildren().size(), 1);
239     auto stack = column->GetChildAtIndex(1);
240     EXPECT_EQ(stack->GetTag(), V2::STACK_ETS_TAG);
241     EXPECT_EQ(stack->GetChildren().size(), 1);
242     auto container_modal_content = stack->GetChildAtIndex(0);
243     EXPECT_EQ(container_modal_content->GetTag(), "content");
244     auto container_modal_custom_floating_title = frameNode_->GetChildAtIndex(1);
245     EXPECT_EQ(container_modal_custom_floating_title->GetTag(), V2::ROW_ETS_TAG);
246     EXPECT_EQ(container_modal_custom_floating_title->GetChildren().size(), 1);
247     auto container_modal_control_buttons = frameNode_->GetChildAtIndex(2);
248     EXPECT_EQ(container_modal_control_buttons->GetTag(), V2::ROW_ETS_TAG);
249     EXPECT_EQ(container_modal_control_buttons->GetChildren().size(), 4);
250 }
251 
252 /**
253  * @tc.name: Test002
254  * @tc.desc: Test event
255  * @tc.type: FUNC
256  */
257 HWTEST_F(ContainerModelTestNg, Test002, TestSize.Level1)
258 {
259     /**
260      * @tc.steps: step1. set callback
261      * @tc.expected: call is triggered
262      */
263     const auto windowManager = AceType::MakeRefPtr<WindowManager>();
264     MaximizeMode maximizeMode = MaximizeMode::MODE_AVOID_SYSTEM_BAR;
265     windowManager->SetCurrentWindowMaximizeMode(maximizeMode);
266     WindowMode windowMode = WindowMode::WINDOW_MODE_FULLSCREEN;
__anon6640ff530402() 267     auto windowModeCallback = [&windowMode]() { return windowMode; };
268     windowManager->SetWindowGetModeCallBack(std::move(windowModeCallback));
269     bool isWindowStartMove = false;
270     bool iswindowSplitPrimary = false;
271     bool iswindowRecover = false;
272     bool windowMaximize = false;
273     bool windowMinimize = false;
274     bool windowClose = false;
__anon6640ff530502() 275     auto windowStartMoveCallBack = [&isWindowStartMove]() { isWindowStartMove = true; };
__anon6640ff530602() 276     auto windowSplitPrimaryCallBack = [&iswindowSplitPrimary]() { iswindowSplitPrimary = true; };
__anon6640ff530702() 277     auto windowRecoverCallBack = [&iswindowRecover]() { iswindowRecover = true; };
__anon6640ff530802() 278     auto windowMaximizeCallBack = [&windowMaximize]() { windowMaximize = true; };
__anon6640ff530902() 279     auto windowMinimizeCallBack = [&windowMinimize]() { windowMinimize = true; };
__anon6640ff530a02() 280     auto windowCloseCallBack = [&windowClose]() { windowClose = true; };
281     windowManager->SetWindowStartMoveCallBack(std::move(windowStartMoveCallBack));
282     windowManager->SetWindowSplitPrimaryCallBack(std::move(windowSplitPrimaryCallBack));
283     windowManager->SetWindowRecoverCallBack(std::move(windowRecoverCallBack));
284     windowManager->SetWindowMaximizeCallBack(std::move(windowMaximizeCallBack));
285     windowManager->SetWindowMinimizeCallBack(std::move(windowMinimizeCallBack));
286     windowManager->SetWindowCloseCallBack(std::move(windowCloseCallBack));
287     auto pipeline = MockPipelineContext::GetCurrent();
288     pipeline->windowManager_ = windowManager;
289     CreateContainerModal();
290     pattern_->ShowTitle(true, true);
291     ClickBtn(0);
292     ClickBtn(1);
293     ClickBtn(2);
294     ClickBtn(3);
295     EXPECT_FALSE(isWindowStartMove);
296     EXPECT_FALSE(iswindowSplitPrimary);
297     EXPECT_FALSE(iswindowRecover);
298     EXPECT_FALSE(windowMaximize);
299     EXPECT_FALSE(windowMinimize);
300     EXPECT_FALSE(windowClose);
301 
302     /**
303      * @tc.steps: step2. set callback
304      * @tc.expected: call is triggered
305      */
306     maximizeMode = MaximizeMode::MODE_FULL_FILL;
307     windowManager->SetCurrentWindowMaximizeMode(maximizeMode);
308     windowMode = WindowMode::WINDOW_MODE_SPLIT_PRIMARY;
309     CreateContainerModal();
310     pattern_->ShowTitle(true, true);
311     auto container_modal_control_buttons = AceType::DynamicCast<FrameNode>(frameNode_->GetChildAtIndex(2));
312     auto eventHub = container_modal_control_buttons->GetOrCreateGestureEventHub();
313     auto panEvents = eventHub->panEventActuator_->panEvents_;
314     GestureEvent info;
315     panEvents.front()->GetActionStartEventFunc()(info);
316     ClickBtn(1);
317     EXPECT_TRUE(isWindowStartMove);
318     EXPECT_FALSE(windowMaximize);
319 }
320 
321 /**
322  * @tc.name: Test003
323  * @tc.desc: Test event
324  * @tc.type: FUNC
325  */
326 HWTEST_F(ContainerModelTestNg, Test003, TestSize.Level1)
327 {
328     CreateContainerModal();
329     GetHovertEvent(0)(true);
330     MouseInfo mouseInfo;
331     mouseInfo.SetAction(MouseAction::PRESS);
332     mouseInfo.SetLocalLocation(Offset(0, 0));
333     GetMouseEvent(0)(mouseInfo);
334     mouseInfo.SetAction(MouseAction::MOVE);
335     GetMouseEvent(0)(mouseInfo);
336 
337     GetHovertEvent(0)(false);
338     mouseInfo.SetAction(MouseAction::MOVE);
339     GetMouseEvent(0)(mouseInfo);
340     SUCCEED();
341 }
342 
343 /**
344  * @tc.name: Test004
345  * @tc.desc: Test InitContainerEvent
346  * @tc.type: FUNC
347  */
348 HWTEST_F(ContainerModelTestNg, Test004, TestSize.Level1)
349 {
350     CreateContainerModal();
351 
352     /**
353      * @tc.steps: step1. When hasDeco_ is false
354      * @tc.expected: Do nothing
355      */
356     pattern_->ShowTitle(true, false);
357     auto floatingTitleNode = AceType::DynamicCast<FrameNode>(frameNode_->GetChildAtIndex(1));
358     auto floatingLayoutProperty = floatingTitleNode->GetLayoutProperty();
359     Touch(Offset::Zero(), Offset::Zero(), Offset::Zero());
360     EXPECT_EQ(floatingLayoutProperty->GetVisibility(), VisibleType::GONE);
361 
362     Mouse(Offset::Zero());
363     EXPECT_EQ(floatingLayoutProperty->GetVisibility(), VisibleType::GONE);
364 
365     /**
366      * @tc.steps: step2. When MouseAction is not MOVE
367      * @tc.expected: Do nothing
368      */
369     MouseInfo mouseInfo;
370     mouseInfo.SetAction(MouseAction::PRESS);
371     mouseInfo.SetLocalLocation(Offset(0, 0));
372     Mouse(mouseInfo);
373     EXPECT_EQ(floatingLayoutProperty->GetVisibility(), VisibleType::GONE);
374 
375     // Set needUpdate to true
376     pattern_->ShowTitle(true, true, true);
377     /**
378      * @tc.steps: step3. Set hasDeco_ to true
379      */
380     pattern_->ShowTitle(true, true);
381 
382     /**
383      * @tc.steps: step4. Touch outSide
384      * @tc.expected: Do nothing
385      */
386     constexpr double movePopupDistanceX = 10.0;
387     constexpr double movePopupDistanceY = 20.0;
388     constexpr double titlePopupDistance = 37.0;
389 
390     Offset outOffset = Offset(0, titlePopupDistance + 1);
391     Touch(outOffset, outOffset, outOffset);
392     EXPECT_EQ(floatingLayoutProperty->GetVisibility(), VisibleType::GONE);
393 
394     /**
395      * @tc.steps: step5. Touch inSide but deltaMoveY < movePopupDistanceY
396      * @tc.expected: Do nothing
397      */
398     Offset inOffset_1 = Offset(movePopupDistanceX, movePopupDistanceY - 1);
399     Touch(Offset::Zero(), inOffset_1, inOffset_1);
400     EXPECT_EQ(floatingLayoutProperty->GetVisibility(), VisibleType::GONE);
401 
402     /**
403      * @tc.steps: step6. Touch inSide but deltaMoveX > movePopupDistanceX
404      * @tc.expected: Do nothing
405      */
406     Offset inOffset_2 = Offset(movePopupDistanceX + 1, movePopupDistanceY);
407     Touch(Offset::Zero(), inOffset_2, inOffset_2);
408     EXPECT_EQ(floatingLayoutProperty->GetVisibility(), VisibleType::VISIBLE);
409 
410     /**
411      * @tc.steps: step7. Touch inSide
412      * @tc.expected: float node would VISIBLE
413      */
414     Offset inOffset_3 = Offset(movePopupDistanceX, movePopupDistanceY);
415     Touch(Offset::Zero(), inOffset_3, inOffset_3);
416     EXPECT_EQ(floatingLayoutProperty->GetVisibility(), VisibleType::VISIBLE);
417 
418     /**
419      * @tc.steps: step8. Touch outSide
420      * @tc.expected: float node would GONE by Animate()
421      */
422     Touch(outOffset, outOffset, outOffset);
423     floatingLayoutProperty->UpdateVisibility(VisibleType::GONE);
424 
425     /**
426      * @tc.steps: step9. Mouse move > MOUSE_MOVE_POPUP_DISTANCE
427      * @tc.expected: Do nothing
428      */
429     Mouse(Offset(0, MOUSE_MOVE_POPUP_DISTANCE + 1));
430     EXPECT_EQ(floatingLayoutProperty->GetVisibility(), VisibleType::GONE);
431 
432     /**
433      * @tc.steps: step10. Mouse move outSide
434      * @tc.expected: Do nothing
435      */
436     Mouse(Offset(0, titlePopupDistance));
437     EXPECT_EQ(floatingLayoutProperty->GetVisibility(), VisibleType::GONE);
438 
439     /**
440      * @tc.steps: step11. Mouse move <= MOUSE_MOVE_POPUP_DISTANCE
441      * @tc.expected: float node would VISIBLE
442      */
443     Mouse(Offset(0, MOUSE_MOVE_POPUP_DISTANCE));
444     EXPECT_EQ(floatingLayoutProperty->GetVisibility(), VisibleType::VISIBLE);
445 
446     /**
447      * @tc.steps: step12. Mouse move <= MOUSE_MOVE_POPUP_DISTANCE again
448      * @tc.expected: The CanShowFloatingTitle() is false, Do nothing
449      */
450     Mouse(Offset(0, MOUSE_MOVE_POPUP_DISTANCE));
451     EXPECT_EQ(floatingLayoutProperty->GetVisibility(), VisibleType::VISIBLE);
452 
453     /**
454      * @tc.steps: step13. Mouse move outSide
455      * @tc.expected: float node would GONE by Animate()
456      */
457     Mouse(Offset(0, titlePopupDistance));
458     floatingLayoutProperty->UpdateVisibility(VisibleType::GONE);
459 }
460 
461 /**
462  * @tc.name: Test005
463  * @tc.desc: WindowFocus.
464  * @tc.type: FUNC
465  */
466 HWTEST_F(ContainerModelTestNg, Test005, TestSize.Level1)
467 {
468     CreateContainerModal();
469 
470     /**
471      * @tc.steps: step1. set foused true.
472      * @tc.expected: isFocus_ is true.
473      */
474     pattern_->OnWindowFocused();
475     EXPECT_TRUE(pattern_->isFocus_);
476 
477     /**
478      * @tc.steps: step2. set foused false.
479      * @tc.expected: isFocus_ is false.
480      */
481     pattern_->OnWindowUnfocused();
482     EXPECT_FALSE(pattern_->isFocus_);
483 
484     // coverage OnWindowForceUnfocused
485     pattern_->OnWindowForceUnfocused();
486 
487     /**
488      * @tc.steps: step3. Alter maxId.
489      */
490     auto pipeline = MockPipelineContext::GetCurrent();
491     pipeline->windowManager_->SetCurrentWindowMaximizeMode(MaximizeMode::MODE_AVOID_SYSTEM_BAR);
492     pattern_->OnWindowFocused();
493     EXPECT_TRUE(pattern_->isFocus_);
494 }
495 /**
496  * @tc.name: Test006
497  * @tc.desc: CanShowFloatingTitle windowMode_.
498  * @tc.type: FUNC
499  */
500 HWTEST_F(ContainerModelTestNg, Test006, TestSize.Level1)
501 {
502     CreateContainerModal();
503     pattern_->windowMode_ = WindowMode::WINDOW_MODE_FLOATING;
504     bool bResult = pattern_->CanShowFloatingTitle();
505     EXPECT_FALSE(bResult);
506 }
507 /**
508  * @tc.name: Test007
509  * @tc.desc: SetIsHoveredMenu GetIsHoveredMenu.
510  * @tc.type: FUNC
511  */
512 HWTEST_F(ContainerModelTestNg, Test007, TestSize.Level1)
513 {
514     CreateContainerModal();
515     pattern_->SetIsHoveredMenu(true);
516     bool bResult = pattern_->GetIsHoveredMenu();
517     EXPECT_TRUE(bResult);
518 }
519 /**
520  * @tc.name: Test008
521  * @tc.desc: SetContainerModalPattern.
522  * @tc.type: FUNC
523  */
524 HWTEST_F(ContainerModelTestNg, Test008, TestSize.Level1)
525 {
526     CreateContainerModal();
527     ContainerModalView::SetContainerModalPattern(pattern_);
528     EXPECT_EQ(ContainerModalView::containerModalPattern_, pattern_);
529 }
530 /**
531  * @tc.name: Test009
532  * @tc.desc: AddButtonStyleMouseEvent.
533  * @tc.type: FUNC
534  */
535 HWTEST_F(ContainerModelTestNg, Test009, TestSize.Level1)
536 {
537     CreateContainerModal();
538     auto buttonNode = FrameNode::CreateFrameNode(V2::BUTTON_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
539         AccessibilityManager::MakeRefPtr<ButtonPattern>());
540     auto imageIcon = FrameNode::CreateFrameNode(V2::IMAGE_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(),
541         AccessibilityManager::MakeRefPtr<ImagePattern>());
542     ContainerModalView::AddButtonStyleMouseEvent(buttonNode, imageIcon, false);
543 }
544 
545 /**
546  * @tc.name: AccessibilityProperty001
547  * @tc.desc: Test GetText of containerModal.
548  * @tc.type: FUNC
549  */
550 HWTEST_F(ContainerModelTestNg, AccessibilityProperty001, TestSize.Level1)
551 {
552     CreateContainerModal();
553     EXPECT_EQ(accessibilityProperty_->GetText(), "");
554 }
555 
556 /**
557  * @tc.name: VisibleTest009
558  * @tc.desc: Test SetContainerModalTitleVisible.
559  * @tc.type: FUNC
560  */
561 HWTEST_F(ContainerModelTestNg, VisibleTest009, TestSize.Level1)
562 {
563     CreateContainerModal();
564     auto customRow = pattern_->GetCustomTitleRow();
565     ASSERT_NE(customRow, nullptr);
566     auto customLayoutProperty = customRow->GetLayoutProperty();
567     ASSERT_NE(customLayoutProperty, nullptr);
568 
569     pattern_->windowMode_ = WindowMode::WINDOW_MODE_FLOATING;
570     pattern_->SetContainerModalTitleVisible(true, true);
571     EXPECT_EQ(customLayoutProperty->GetVisibility(), std::nullopt);
572     pattern_->SetContainerModalTitleVisible(false, false);
573     EXPECT_EQ(customLayoutProperty->GetVisibility(), VisibleType::GONE);
574 
575     pattern_->windowMode_ = WindowMode::WINDOW_MODE_FULLSCREEN;
576     pattern_->SetContainerModalTitleVisible(true, true);
577     EXPECT_EQ(customLayoutProperty->GetVisibility(), VisibleType::GONE);
578     pattern_->SetContainerModalTitleVisible(false, false);
579     EXPECT_EQ(customLayoutProperty->GetVisibility(), VisibleType::GONE);
580 }
581 
582 /**
583  * @tc.name: TitleHeightTest010
584  * @tc.desc: Test SetContainerModalHeight and GetContainerModalTitleHeight.
585  * @tc.type: FUNC
586  */
587 HWTEST_F(ContainerModelTestNg, TitleHeightTest010, TestSize.Level1)
588 {
589     CreateContainerModal();
590 
591     pattern_->windowMode_ = WindowMode::WINDOW_MODE_FLOATING;
592     const int32_t height1 = -1;
593     const int32_t height2 = 100;
594 
595     pattern_->SetContainerModalTitleVisible(true, true);
596     pattern_->SetContainerModalTitleHeight(height1);
597     EXPECT_EQ(pattern_->GetContainerModalTitleHeight(), 0);
598 
599     pattern_->SetContainerModalTitleVisible(false, false);
600     EXPECT_EQ(pattern_->GetContainerModalTitleHeight(), 0);
601 
602     pattern_->SetContainerModalTitleHeight(height2);
603     EXPECT_EQ(pattern_->GetContainerModalTitleHeight(), height2);
604 
605     pattern_->SetContainerModalTitleVisible(true, true);
606     EXPECT_EQ(pattern_->GetContainerModalTitleHeight(), height2);
607 }
608 
609 /**
610  * @tc.name: ButtonsRectTest011
611  * @tc.desc: Test function about ButtonsRect.
612  * @tc.type: FUNC
613  */
614 HWTEST_F(ContainerModelTestNg, ButtonsRectTest011, TestSize.Level1)
615 {
616     CreateContainerModal();
617     RectF containerModalRect;
618     RectF buttonsRect;
619     pattern_->GetContainerModalButtonsRect(containerModalRect, buttonsRect);
620 
621     auto column = pattern_->GetColumnNode();
622     ASSERT_NE(column, nullptr);
623     EXPECT_EQ(containerModalRect, column->GetGeometryNode()->GetFrameRect());
624 
625     auto buttonsRow = pattern_->GetControlButtonRow();
626     ASSERT_NE(buttonsRow, nullptr);
627     auto children = buttonsRow->GetChildren();
628     auto firstButtonRect = AceType::DynamicCast<FrameNode>(children.front())->GetGeometryNode()->GetFrameRect();
629     auto lastButtonRect = AceType::DynamicCast<FrameNode>(children.back())->GetGeometryNode()->GetFrameRect();
630     auto childrenRect = firstButtonRect.CombineRectT(lastButtonRect);
631     childrenRect.SetLeft(childrenRect.GetX() - TITLE_PADDING_START.ConvertToPx());
632     childrenRect.SetTop(0);
633     childrenRect.SetHeight(pattern_->titleHeight_.ConvertToPx());
634     childrenRect.SetWidth(childrenRect.Width() + (TITLE_PADDING_START + TITLE_PADDING_END).ConvertToPx());
635     EXPECT_EQ(buttonsRect, childrenRect);
636 
637     bool callbackTriggered = false;
__anon6640ff530b02(RectF&, RectF&) 638     auto callback = [&callbackTriggered](RectF&, RectF&) { callbackTriggered = true; };
639     pattern_->SubscribeContainerModalButtonsRectChange(std::move(callback));
640     pattern_->CallButtonsRectChange();
641     EXPECT_TRUE(callbackTriggered);
642 }
643 
644 /**
645  * @tc.name: AccessibilityProperty002
646  * @tc.desc: Test GetText of containerModal.
647  * @tc.type: FUNC
648  */
649 HWTEST_F(ContainerModelTestNg, AccessibilityProperty002, TestSize.Level1)
650 {
651     ContainerModalView view;
652     RefPtr<FrameNode> content = CreateContent();
653     auto frameNode = view.Create(content);
654     ViewStackProcessor::GetInstance()->Push(frameNode);
655     GetInstance();
656     FlushLayoutTask(frameNode_);
657     pattern_->appLabel_ = "abc";
658     EXPECT_EQ(accessibilityProperty_->GetText(), "abc");
659 }
660 
661 /**
662  * @tc.name: UpdateGestureRowVisible
663  * @tc.desc: Test GUpdateGestureRowVisible.
664  * @tc.type: FUNC
665  */
666 HWTEST_F(ContainerModelTestNg, UpdateGestureRowVisible, TestSize.Level1)
667 {
668     bool result = true;
669     auto containerModalNode =
670         FrameNode::CreateFrameNode("ContainerModal", 1, AceType::MakeRefPtr<ContainerModalPattern>());
671     auto textNode = FrameNode::CreateFrameNode(V2::COLUMN_ETS_TAG, 2, AceType::MakeRefPtr<TextPickerColumnPattern>());
672     textNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 4, AceType::MakeRefPtr<TextPattern>()));
673     textNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 5, AceType::MakeRefPtr<TextPattern>()));
674     textNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 6, AceType::MakeRefPtr<TextPattern>()));
675     containerModalNode->AddChild(textNode);
676     auto buttonNode = FrameNode::CreateFrameNode(V2::BUTTON_ETS_TAG, 3, AceType::MakeRefPtr<ButtonPattern>());
677     buttonNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 4, AceType::MakeRefPtr<TextPattern>()));
678     buttonNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 5, AceType::MakeRefPtr<TextPattern>()));
679     buttonNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 6, AceType::MakeRefPtr<TextPattern>()));
680     containerModalNode->AddChild(buttonNode);
681     auto containerPattern = containerModalNode->GetPattern<ContainerModalPattern>();
682     auto gestureRow = containerPattern->GetGestureRow();
683     CHECK_NULL_VOID(gestureRow);
684     auto customTitleRow = containerPattern->GetCustomTitleRow();
685     CHECK_NULL_VOID(customTitleRow);
686     auto buttonsRow = containerPattern->GetControlButtonRow();
687     CHECK_NULL_VOID(buttonsRow);
688     auto gestureRowProp = gestureRow->GetLayoutProperty();
689     auto customTitleRowProp = customTitleRow->GetLayoutProperty();
690     auto buttonsRowProp = buttonsRow->GetLayoutProperty();
691     customTitleRowProp->UpdateVisibility(VisibleType::GONE);
692     buttonsRowProp->UpdateVisibility(VisibleType::GONE);
693     containerPattern->UpdateGestureRowVisible();
694     EXPECT_TRUE(result);
695 }
696 
697 /**
698  * @tc.name: UpdateGestureRowVisible2
699  * @tc.desc: Test GUpdateGestureRowVisible.
700  * @tc.type: FUNC
701  */
702 HWTEST_F(ContainerModelTestNg, UpdateGestureRowVisible2, TestSize.Level1)
703 {
704     bool result = true;
705     auto containerModalNode =
706         FrameNode::CreateFrameNode("ContainerModal", 1, AceType::MakeRefPtr<ContainerModalPattern>());
707     auto textNode = FrameNode::CreateFrameNode(V2::COLUMN_ETS_TAG, 2, AceType::MakeRefPtr<TextPickerColumnPattern>());
708     textNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 4, AceType::MakeRefPtr<TextPattern>()));
709     textNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 5, AceType::MakeRefPtr<TextPattern>()));
710     textNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 6, AceType::MakeRefPtr<TextPattern>()));
711     containerModalNode->AddChild(textNode);
712     auto buttonNode = FrameNode::CreateFrameNode(V2::BUTTON_ETS_TAG, 3, AceType::MakeRefPtr<ButtonPattern>());
713     buttonNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 4, AceType::MakeRefPtr<TextPattern>()));
714     buttonNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 5, AceType::MakeRefPtr<TextPattern>()));
715     buttonNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 6, AceType::MakeRefPtr<TextPattern>()));
716     containerModalNode->AddChild(buttonNode);
717     auto containerPattern = containerModalNode->GetPattern<ContainerModalPattern>();
718     auto gestureRow = containerPattern->GetGestureRow();
719     CHECK_NULL_VOID(gestureRow);
720     auto customTitleRow = containerPattern->GetCustomTitleRow();
721     CHECK_NULL_VOID(customTitleRow);
722     auto buttonsRow = containerPattern->GetControlButtonRow();
723     CHECK_NULL_VOID(buttonsRow);
724     auto gestureRowProp = gestureRow->GetLayoutProperty();
725     auto customTitleRowProp = customTitleRow->GetLayoutProperty();
726     auto buttonsRowProp = buttonsRow->GetLayoutProperty();
727     customTitleRowProp->UpdateVisibility(VisibleType::GONE);
728     buttonsRowProp->UpdateVisibility(VisibleType::VISIBLE);
729     containerPattern->UpdateGestureRowVisible();
730     EXPECT_TRUE(result);
731 }
732 
733 /**
734  * @tc.name: UpdateGestureRowVisible3
735  * @tc.desc: Test GUpdateGestureRowVisible.
736  * @tc.type: FUNC
737  */
738 HWTEST_F(ContainerModelTestNg, UpdateGestureRowVisible3, TestSize.Level1)
739 {
740     bool result = true;
741     auto containerModalNode =
742         FrameNode::CreateFrameNode("ContainerModal", 1, AceType::MakeRefPtr<ContainerModalPattern>());
743     auto textNode = FrameNode::CreateFrameNode(V2::COLUMN_ETS_TAG, 2, AceType::MakeRefPtr<TextPickerColumnPattern>());
744     textNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 4, AceType::MakeRefPtr<TextPattern>()));
745     textNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 5, AceType::MakeRefPtr<TextPattern>()));
746     textNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 6, AceType::MakeRefPtr<TextPattern>()));
747     containerModalNode->AddChild(textNode);
748     auto buttonNode = FrameNode::CreateFrameNode(V2::BUTTON_ETS_TAG, 3, AceType::MakeRefPtr<ButtonPattern>());
749     buttonNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 4, AceType::MakeRefPtr<TextPattern>()));
750     buttonNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 5, AceType::MakeRefPtr<TextPattern>()));
751     buttonNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 6, AceType::MakeRefPtr<TextPattern>()));
752     containerModalNode->AddChild(buttonNode);
753     auto containerPattern = containerModalNode->GetPattern<ContainerModalPattern>();
754     auto gestureRow = containerPattern->GetGestureRow();
755     CHECK_NULL_VOID(gestureRow);
756     auto customTitleRow = containerPattern->GetCustomTitleRow();
757     CHECK_NULL_VOID(customTitleRow);
758     auto buttonsRow = containerPattern->GetControlButtonRow();
759     CHECK_NULL_VOID(buttonsRow);
760     auto gestureRowProp = gestureRow->GetLayoutProperty();
761     auto customTitleRowProp = customTitleRow->GetLayoutProperty();
762     auto buttonsRowProp = buttonsRow->GetLayoutProperty();
763     customTitleRowProp->UpdateVisibility(VisibleType::VISIBLE);
764     buttonsRowProp->UpdateVisibility(VisibleType::VISIBLE);
765     containerPattern->UpdateGestureRowVisible();
766     EXPECT_TRUE(result);
767 }
768 
769 /**
770  * @tc.name: UpdateGestureRowVisible4
771  * @tc.desc: Test GUpdateGestureRowVisible.
772  * @tc.type: FUNC
773  */
774 HWTEST_F(ContainerModelTestNg, UpdateGestureRowVisible4, TestSize.Level1)
775 {
776     bool result = true;
777     auto containerModalNode =
778         FrameNode::CreateFrameNode("ContainerModal", 1, AceType::MakeRefPtr<ContainerModalPattern>());
779     auto textNode = FrameNode::CreateFrameNode(V2::COLUMN_ETS_TAG, 2, AceType::MakeRefPtr<TextPickerColumnPattern>());
780     textNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 4, AceType::MakeRefPtr<TextPattern>()));
781     textNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 5, AceType::MakeRefPtr<TextPattern>()));
782     textNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 6, AceType::MakeRefPtr<TextPattern>()));
783     containerModalNode->AddChild(textNode);
784     auto buttonNode = FrameNode::CreateFrameNode(V2::BUTTON_ETS_TAG, 3, AceType::MakeRefPtr<ButtonPattern>());
785     buttonNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 4, AceType::MakeRefPtr<TextPattern>()));
786     buttonNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 5, AceType::MakeRefPtr<TextPattern>()));
787     buttonNode->AddChild(FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 6, AceType::MakeRefPtr<TextPattern>()));
788     containerModalNode->AddChild(buttonNode);
789     auto containerPattern = containerModalNode->GetPattern<ContainerModalPattern>();
790     auto gestureRow = containerPattern->GetGestureRow();
791     CHECK_NULL_VOID(gestureRow);
792     auto customTitleRow = containerPattern->GetCustomTitleRow();
793     CHECK_NULL_VOID(customTitleRow);
794     auto buttonsRow = containerPattern->GetControlButtonRow();
795     CHECK_NULL_VOID(buttonsRow);
796     auto gestureRowProp = gestureRow->GetLayoutProperty();
797     auto customTitleRowProp = customTitleRow->GetLayoutProperty();
798     auto buttonsRowProp = buttonsRow->GetLayoutProperty();
799     customTitleRowProp->UpdateVisibility(VisibleType::VISIBLE);
800     buttonsRowProp->UpdateVisibility(VisibleType::GONE);
801     containerPattern->UpdateGestureRowVisible();
802     EXPECT_TRUE(result);
803 }
804 
805 /**
806  * @tc.name: GetContainerModalButtonsRect
807  * @tc.desc: Test GetContainerModalButtonsRect
808  * @tc.type: FUNC
809  */
810 HWTEST_F(ContainerModelTestNg, GetContainerModalButtonsRect, TestSize.Level1)
811 {
812     bool result = true;
813     CreateContainerModal();
814     RectF containerModalRect;
815     RectF buttonsRect;
816     auto column = pattern_->GetColumnNode();
817     auto geomeNode = column->GetGeometryNode();
818     geomeNode->frame_.rect_ = { 0, 0, 0, 0 };
819     pattern_->GetContainerModalButtonsRect(containerModalRect, buttonsRect);
820     EXPECT_TRUE(result);
821 }
822 
823 HWTEST_F(ContainerModelTestNg, GetContainerModalButtonsRect2, TestSize.Level1)
824 {
825     bool result = true;
826     CreateContainerModal();
827     auto controlButtonsRow = pattern_->GetControlButtonRow();
828     auto children = controlButtonsRow->GetChildren();
829     for (auto& child : children) {
830         auto node = AceType::DynamicCast<FrameNode>(child);
831         node->GetLayoutProperty()->UpdateVisibility(VisibleType::GONE);
832     }
833     RectF containerModalRect;
834     RectF buttonsRect;
835     AceApplicationInfo::GetInstance().isRightToLeft_ = true;
836     pattern_->GetContainerModalButtonsRect(containerModalRect, buttonsRect);
837     EXPECT_TRUE(result);
838 }
839 
840 HWTEST_F(ContainerModelTestNg, GetContainerModalButtonsRect3, TestSize.Level1)
841 {
842     bool result = true;
843     CreateContainerModal();
844     RectF containerModalRect;
845     RectF buttonsRect;
846     AceApplicationInfo::GetInstance().isRightToLeft_ = true;
847     pattern_->GetContainerModalButtonsRect(containerModalRect, buttonsRect);
848     pattern_->InitButtonsLayoutProperty();
849     EXPECT_TRUE(result);
850 }
851 
852 /**
853  * @tc.name: GetCustomTitleHeight
854  * @tc.desc: Test GetCustomTitleHeight.
855  * @tc.type: FUNC
856  */
857 HWTEST_F(ContainerModelTestNg, GetCustomTitleHeight, TestSize.Level1)
858 {
859     bool result = true;
860     CreateContainerModal();
861     pattern_->GetCustomTitleHeight();
862     auto customTitleRow = pattern_->GetCustomTitleRow();
863     auto property = customTitleRow->GetLayoutProperty();
864     property->UpdateVisibility(VisibleType::GONE);
865     pattern_->GetCustomTitleHeight();
866     EXPECT_TRUE(result);
867 }
868 
869 /**
870  * @tc.name: InitColumnTouchTestFunc
871  * @tc.desc: Test InitColumnTouchTestFunc.
872  * @tc.type: FUNC
873  */
874 HWTEST_F(ContainerModelTestNg, InitColumnTouchTestFunc, TestSize.Level1)
875 {
876     bool result = true;
877     CreateContainerModal();
878     pattern_->InitColumnTouchTestFunc();
879     auto column = pattern_->GetColumnNode();
880     auto eventHub = column->GetOrCreateGestureEventHub();
881     const auto& Callback = eventHub->GetOnTouchTestFunc();
882     std::vector<TouchTestInfo> touchInfos;
883     TouchTestInfo info;
884     info.id = CONTAINER_MODAL_STACK_ID;
885     touchInfos.emplace_back(info);
886     Callback(touchInfos);
887     EXPECT_TRUE(result);
888 }
889 
890 /**
891  * @tc.name: InitColumnTouchTestFunc2
892  * @tc.desc: Test InitColumnTouchTestFunc.
893  * @tc.type: FUNC
894  */
895 HWTEST_F(ContainerModelTestNg, InitColumnTouchTestFunc2, TestSize.Level1)
896 {
897     bool result = true;
898     CreateContainerModal();
899     pattern_->InitColumnTouchTestFunc();
900     auto column = pattern_->GetColumnNode();
901     auto eventHub = column->GetOrCreateGestureEventHub();
902     const auto& Callback = eventHub->GetOnTouchTestFunc();
903     std::vector<TouchTestInfo> touchInfos;
904     TouchTestInfo info;
905     touchInfos.emplace_back(info);
906     Callback(touchInfos);
907     EXPECT_TRUE(result);
908 }
909 
910 /**
911  * @tc.name: AddButtonHoverEvent
912  * @tc.desc: Test AddButtonHoverEvent.
913  * @tc.type: FUNC
914  */
915 HWTEST_F(ContainerModelTestNg, AddButtonHoverEvent, TestSize.Level1)
916 {
917     bool result = true;
918     CreateContainerModal();
919     pattern_->InitColumnTouchTestFunc();
920     RefPtr<FrameNode> content = CreateContent();
921     ContainerModalView view;
922     auto frameNode = view.Create(content);
923     auto frameNode2 = view.Create(content);
924     auto inputEventHub = frameNode_->GetOrCreateInputEventHub();
925     auto imageLayoutProperty = AceType::MakeRefPtr<ImageLayoutProperty>();
926     frameNode2->layoutProperty_ = imageLayoutProperty;
927     imageLayoutProperty->UpdateImageSourceInfo(
928         ImageSourceInfo("file://data/data/com.example.test/res/example.svg", Dimension(300.0), Dimension(200.0)));
929     imageLayoutProperty->UpdateAlt(
930         ImageSourceInfo("file://data/data/com.example.test/res/exampleAlt.jpg", Dimension(100.0), Dimension(200.0)));
931     view.AddButtonHoverEvent(inputEventHub, frameNode, frameNode2, false);
932 
933     auto hoverEventActuator = inputEventHub->hoverEventActuator_;
934     auto Events = hoverEventActuator->inputEvents_;
935     for (const auto& callback : Events) {
936         (*callback)(false);
937     }
938     EXPECT_TRUE(result);
939 }
940 
941 /**
942  * @tc.name: AddButtonHoverEvent2
943  * @tc.desc: Test AddButtonHoverEvent.
944  * @tc.type: FUNC
945  */
946 HWTEST_F(ContainerModelTestNg, AddButtonHoverEvent2, TestSize.Level1)
947 {
948     bool result = true;
949     CreateContainerModal();
950     pattern_->InitColumnTouchTestFunc();
951     RefPtr<FrameNode> content = CreateContent();
952     ContainerModalView view;
953     auto frameNode = view.Create(content);
954     auto frameNode2 = view.Create(content);
955     auto inputEventHub = frameNode_->GetOrCreateInputEventHub();
956     auto imageLayoutProperty = AceType::MakeRefPtr<ImageLayoutProperty>();
957     frameNode2->layoutProperty_ = imageLayoutProperty;
958     imageLayoutProperty->UpdateImageSourceInfo(
959         ImageSourceInfo("file://data/data/com.example.test/res/example.svg", Dimension(300.0), Dimension(200.0)));
960     imageLayoutProperty->UpdateAlt(
961         ImageSourceInfo("file://data/data/com.example.test/res/exampleAlt.jpg", Dimension(100.0), Dimension(200.0)));
962     view.AddButtonHoverEvent(inputEventHub, frameNode, frameNode2, true);
963 
964     auto hoverEventActuator = inputEventHub->hoverEventActuator_;
965     auto Events = hoverEventActuator->inputEvents_;
966     for (const auto& callback : Events) {
967         (*callback)(true);
968     }
969     EXPECT_TRUE(result);
970 }
971 
972 /**
973  * @tc.name: AddButtonOnEvent
974  * @tc.desc: Test AddButtonOnEvent.
975  * @tc.type: FUNC
976  */
977 HWTEST_F(ContainerModelTestNg, AddButtonOnEvent, TestSize.Level1)
978 {
979     bool result = true;
980     CreateContainerModal();
981     pattern_->InitColumnTouchTestFunc();
982     RefPtr<FrameNode> content = CreateContent();
983     ContainerModalView view;
984     auto frameNode = view.Create(content);
985     auto frameNode2 = view.Create(content);
986     auto inputEventHub = frameNode_->GetOrCreateInputEventHub();
987     auto imageLayoutProperty = AceType::MakeRefPtr<ImageLayoutProperty>();
988     frameNode2->layoutProperty_ = imageLayoutProperty;
989     imageLayoutProperty->UpdateImageSourceInfo(
990         ImageSourceInfo("file://data/data/com.example.test/res/example.svg", Dimension(300.0), Dimension(200.0)));
991     imageLayoutProperty->UpdateAlt(
992         ImageSourceInfo("file://data/data/com.example.test/res/exampleAlt.jpg", Dimension(100.0), Dimension(200.0)));
993     view.AddButtonOnEvent(inputEventHub, frameNode, frameNode2, true);
994 
995     auto mouseEventActuator_ = inputEventHub->mouseEventActuator_;
996     auto Events = mouseEventActuator_->inputEvents_;
997     MouseInfo mouseInfo;
998     for (const auto& callback : Events) {
999         (*callback)(mouseInfo);
1000     }
1001     mouseInfo.action_ = MouseAction::PRESS;
1002     for (const auto& callback : Events) {
1003         (*callback)(mouseInfo);
1004     }
1005     mouseInfo.action_ = MouseAction::RELEASE;
1006     for (const auto& callback : Events) {
1007         (*callback)(mouseInfo);
1008     }
1009     EXPECT_TRUE(result);
1010 }
1011 } // namespace OHOS::Ace::NG
1012