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