• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <cstddef>
17 
18 #include "gtest/gtest.h"
19 
20 #define private public
21 #include "core/components_ng/base/frame_node.h"
22 #include "core/components_ng/event/event_hub.h"
23 #include "core/components_ng/pattern/pattern.h"
24 #include "core/components_v2/inspector/inspector_constants.h"
25 #include "core/event/mouse_event.h"
26 #include "test/mock/core/pipeline/mock_pipeline_context.h"
27 
28 using namespace testing;
29 using namespace testing::ext;
30 
31 namespace OHOS::Ace::NG {
32 namespace {
33 constexpr uint32_t INPUT_EVENTS_SIZE = 1;
34 constexpr uint32_t INPUT_EVENTS_SIZE_2 = 2;
35 constexpr uint32_t INPUT_EVENTS_SIZE_0 = 0;
36 constexpr uint32_t MOUSE_RESULT_SIZE = 6;
37 constexpr uint32_t AXIS_RESULT_SIZE = 1;
38 const HoverEffectType HOVER_EFFECT_TYPE = HoverEffectType::BOARD;
39 constexpr float WIDTH = 400.0f;
40 constexpr float HEIGHT = 400.0f;
41 const OffsetF COORDINATE_OFFSET(WIDTH, HEIGHT);
42 constexpr bool HOVER_VALUE = true;
43 const std::string RESULT_SUCCESS_ONE = "sucess1";
44 const std::string RESULT_SUCCESS_TWO = "sucess2";
45 } // namespace
46 
47 class InputEventHubTestNg : public testing::Test {
48 public:
49     static void SetUpTestSuite();
50     static void TearDownTestSuite();
51     void SetUp() override;
52     void TearDown() override;
53 };
54 
SetUpTestSuite()55 void InputEventHubTestNg::SetUpTestSuite()
56 {
57     GTEST_LOG_(INFO) << "InputEventHubTestNg SetUpTestCase";
58 }
59 
TearDownTestSuite()60 void InputEventHubTestNg::TearDownTestSuite()
61 {
62     GTEST_LOG_(INFO) << "InputEventHubTestNg TearDownTestCase";
63 }
64 
SetUp()65 void InputEventHubTestNg::SetUp()
66 {
67     MockPipelineContext::SetUp();
68 }
69 
TearDown()70 void InputEventHubTestNg::TearDown()
71 {
72     MockPipelineContext::TearDown();
73 }
74 /**
75  * @tc.name: InputEventHubCreateTest001
76  * @tc.desc: Create InputEventHub
77  * @tc.type: FUNC
78  */
79 HWTEST_F(InputEventHubTestNg, InputEventHubCreateTest001, TestSize.Level1)
80 {
81     /**
82      * @tc.steps: step1. Create InputEventHub.
83      */
84     auto eventHub = AceType::MakeRefPtr<EventHub>();
85     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
86     EXPECT_NE(inputEventHub, nullptr);
87 }
88 
89 /**
90  * @tc.name: InputEventHubMouseEventTest002
91  * @tc.desc: Create InputEventHub and set, add and remove mouse event.
92  * @tc.type: FUNC
93  */
94 HWTEST_F(InputEventHubTestNg, InputEventHubMouseEventTest002, TestSize.Level1)
95 {
96     /**
97      * @tc.steps: step1. Create InputEventHub.
98      */
99     auto eventHub = AceType::MakeRefPtr<EventHub>();
100     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
101     eventHub->AttachHost(frameNode);
102     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
103     EXPECT_NE(inputEventHub, nullptr);
104     EXPECT_TRUE(
105         inputEventHub->GetFrameNode() != nullptr && inputEventHub->GetFrameNode()->GetTag() == V2::TEXT_ETS_TAG);
106 
107     /**
108      * @tc.steps: step2. Create mouse event and set it to inputEventHub.
109      * @tc.expected: mouseEventActuator_ will be initialized.
110      */
__anon91be7d820202(MouseInfo& info) 111     const OnMouseEventFunc onMouse = [](MouseInfo& info) {};
112     OnMouseEventFunc onMouse1 = onMouse;
113     inputEventHub->SetMouseEvent(std::move(onMouse1));
114     EXPECT_NE(inputEventHub->mouseEventActuator_, nullptr);
115 
116     /**
117      * @tc.steps: step3. Make mouseEventActuator_ as nullptr, and create input event and add it to inputEventHub.
118      * @tc.expected: mouseEventActuator_ will be initialized and the list of inputEvents size is 1.
119      */
120     inputEventHub->mouseEventActuator_ = nullptr;
121     OnMouseEventFunc onMouse2 = onMouse;
122     auto inputEvent = AceType::MakeRefPtr<InputEvent>(std::move(onMouse2));
123     inputEventHub->AddOnMouseEvent(inputEvent);
124     EXPECT_EQ(inputEventHub->mouseEventActuator_->inputEvents_.size(), INPUT_EVENTS_SIZE);
125 
126     /**
127      * @tc.steps: step4. Remove OnMouseEvent.
128      * @tc.expected: inputEvent will be remove from the list of inputEvents and the size will be 0. If
129      * mouseEventActuator_ is nullptr, the function will return directly.
130      */
131     inputEventHub->RemoveOnMouseEvent(inputEvent);
132     EXPECT_EQ(inputEventHub->mouseEventActuator_->inputEvents_.size(), INPUT_EVENTS_SIZE_0);
133     inputEventHub->mouseEventActuator_ = nullptr;
134     inputEventHub->RemoveOnMouseEvent(inputEvent);
135 }
136 
137 /**
138  * @tc.name: InputEventHubHoverEventTest003
139  * @tc.desc: Create InputEventHub and invoke hover related functions.
140  * @tc.type: FUNC
141  */
142 HWTEST_F(InputEventHubTestNg, InputEventHubHoverEventTest003, TestSize.Level1)
143 {
144     /**
145      * @tc.steps: step1. Create InputEventHub.
146      */
147     auto eventHub = AceType::MakeRefPtr<EventHub>();
148     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
149     eventHub->AttachHost(frameNode);
150     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
151     EXPECT_NE(inputEventHub, nullptr);
152 
153     /**
154      * @tc.steps: step2. Set hover animation.
155      * @tc.expected: mouseEventActuator_ will be initialized and get the hoverEffect which will be assigned the correct
156      * value.
157      */
158     inputEventHub->SetHoverEffect(HOVER_EFFECT_TYPE);
159     EXPECT_NE(inputEventHub->hoverEffectActuator_, nullptr);
160     EXPECT_EQ(inputEventHub->GetHoverEffect(), HOVER_EFFECT_TYPE);
161 
162     /**
163      * @tc.steps: step3. Set HoverEvent.
164      * @tc.expected: hoverEventActuator_ will be initialized.
165      */
__anon91be7d820302(bool, HoverInfo) 166     OnHoverFunc onHover = [](bool, HoverInfo) {};
167     inputEventHub->SetHoverEvent(std::move(onHover));
168     EXPECT_NE(inputEventHub->hoverEventActuator_, nullptr);
169 
170     /**
171      * @tc.steps: step4. Add OnHoverEvent.
172      * @tc.expected: hoverEventActuator_ will be initialized and and the list of inputEvents size is 1.
173      */
174     inputEventHub->hoverEventActuator_ = nullptr;
__anon91be7d820402(MouseInfo& info) 175     OnMouseEventFunc onHover2 = [](MouseInfo& info) {};
176     auto onHoverEvent = AceType::MakeRefPtr<InputEvent>(std::move(onHover2));
177     inputEventHub->AddOnHoverEvent(onHoverEvent);
178     EXPECT_NE(inputEventHub->hoverEventActuator_, nullptr);
179     EXPECT_EQ(inputEventHub->hoverEventActuator_->inputEvents_.size(), INPUT_EVENTS_SIZE);
180 
181     /**
182      * @tc.steps: step5. Remove OnHoverEvent.
183      * @tc.expected: onHoverEvent will be remove from the list of inputEvents and the size will be 0. If
184      * hoverEventActuator_ is nullptr, the function will return directly.
185      */
186     inputEventHub->RemoveOnHoverEvent(onHoverEvent);
187     EXPECT_EQ(inputEventHub->hoverEventActuator_->inputEvents_.size(), INPUT_EVENTS_SIZE_0);
188     inputEventHub->hoverEventActuator_ = nullptr;
189     inputEventHub->RemoveOnHoverEvent(onHoverEvent);
190 }
191 
192 /**
193  * @tc.name: InputEventHubAxisEventTest004
194  * @tc.desc: Create InputEventHub and invoke Axis related functions.
195  * @tc.type: FUNC
196  */
197 HWTEST_F(InputEventHubTestNg, InputEventHubAxisEventTest004, TestSize.Level1)
198 {
199     /**
200      * @tc.steps: step1. Create InputEventHub.
201      */
202     auto eventHub = AceType::MakeRefPtr<EventHub>();
203     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
204     eventHub->AttachHost(frameNode);
205     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
206     EXPECT_NE(inputEventHub, nullptr);
207 
208     /**
209      * @tc.steps: step2. Add OnAxisEvent.
210      * @tc.expected: axisEventActuator_ will be initialized, and the list of inputEvents and the size will be 1.
211      */
__anon91be7d820502(MouseInfo& info) 212     OnMouseEventFunc onAxis = [](MouseInfo& info) {};
213     auto onAxisEvent = AceType::MakeRefPtr<InputEvent>(std::move(onAxis));
214     inputEventHub->AddOnAxisEvent(onAxisEvent);
215     EXPECT_NE(inputEventHub->axisEventActuator_, nullptr);
216     EXPECT_EQ(inputEventHub->axisEventActuator_->inputEvents_.size(), INPUT_EVENTS_SIZE);
217 
218     /**
219      * @tc.steps: step3. Remove OnAxisEvent.
220      * @tc.expected: onAxisEvent will be remove from the list of inputEvents and the size will be 0. If
221      * axisEventActuator_ is nullptr, the function will return directly.
222      */
223     inputEventHub->RemoveOnAxisEvent(onAxisEvent);
224     EXPECT_EQ(inputEventHub->axisEventActuator_->inputEvents_.size(), INPUT_EVENTS_SIZE_0);
225     inputEventHub->axisEventActuator_ = nullptr;
226     inputEventHub->RemoveOnAxisEvent(onAxisEvent);
227 }
228 
229 /**
230  * @tc.name: InputEventHubProcessMouseTest005
231  * @tc.desc: Create InputEventHub and invoke ProcessMouseTestHit functions.
232  * @tc.type: FUNC
233  */
234 HWTEST_F(InputEventHubTestNg, InputEventHubProcessMouseTest005, TestSize.Level1)
235 {
236     /**
237      * @tc.steps: step1. Create InputEventHub.
238      */
239     auto eventHub = AceType::MakeRefPtr<EventHub>();
240     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
241     eventHub->AttachHost(frameNode);
242     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
243     EXPECT_NE(inputEventHub, nullptr);
244 
245     /**
246      * @tc.steps: step2. Invoke ProcessMouseTestHit when eventHub is nullptr.
247      * @tc.expected: ProcessMouseTestHit return false.
248      */
249     TouchTestResult mouseResult;
250     auto inputEventHub2 = AceType::MakeRefPtr<InputEventHub>(nullptr);
251     EXPECT_FALSE(inputEventHub2->ProcessMouseTestHit(COORDINATE_OFFSET, mouseResult));
252 
253     /**
254      * @tc.steps: step3. Initialize mouseEventActuator_ and mouseEventActuator_, their inputEvents_ is empty and
255      * userCallback_ is nullptr.
256      * @tc.expected: OnCollectMouseEvent will return directly, and ProcessMouseTestHit return false.
257      */
258     inputEventHub->mouseEventActuator_ =
259         AceType::MakeRefPtr<InputEventActuator>(AceType::WeakClaim(AceType::RawPtr(inputEventHub)));
260     inputEventHub->hoverEffectActuator_ =
261         AceType::MakeRefPtr<InputEventActuator>(AceType::WeakClaim(AceType::RawPtr(inputEventHub)));
262     EXPECT_FALSE(inputEventHub->ProcessMouseTestHit(COORDINATE_OFFSET, mouseResult));
263 
264     /**
265      * @tc.steps: step4. Invoke ProcessMouseTestHit when hoverNode is nullptr and the hover effect is UNKNOWN or not.
266      * @tc.expected: OnCollectMouseEvent will return directly, and ProcessMouseTestHit return false.
267      */
268     EXPECT_FALSE(inputEventHub->ProcessMouseTestHit(COORDINATE_OFFSET, mouseResult));
269     inputEventHub->SetHoverEffect(HOVER_EFFECT_TYPE);
270     EXPECT_FALSE(inputEventHub->ProcessMouseTestHit(COORDINATE_OFFSET, mouseResult));
271 
272     /**
273      * @tc.steps: step5. Set MouseEvent and mouseEventActuator_ and userCallback_ will be initialized.
274      */
__anon91be7d820602(MouseInfo& info) 275     const OnMouseEventFunc onMouse = [](MouseInfo& info) {};
276     OnMouseEventFunc onMouse1 = onMouse;
277     inputEventHub->SetMouseEvent(std::move(onMouse1));
278     EXPECT_NE(inputEventHub->mouseEventActuator_->userCallback_, nullptr);
279 
280     /**
281      * @tc.steps: step6. Set HoverEvent and hoverEventActuator_ and userCallback_ will be initialized.
282      */
__anon91be7d820702(bool, HoverInfo) 283     const OnHoverFunc onHover = [](bool, HoverInfo) {};
284     OnHoverFunc onHover1 = onHover;
285     inputEventHub->SetHoverEvent(std::move(onHover1));
286     EXPECT_NE(inputEventHub->hoverEventActuator_->userCallback_, nullptr);
287 
288     /**
289      * @tc.steps: step7. Add OnMouseEvent and inputEvents_ will not be empty.
290      */
291     OnMouseEventFunc onMouse2 = onMouse;
292     auto inputEvent = AceType::MakeRefPtr<InputEvent>(std::move(onMouse2));
293     inputEventHub->AddOnMouseEvent(inputEvent);
294     inputEventHub->AddOnMouseEvent(nullptr);
295     EXPECT_EQ(inputEventHub->mouseEventActuator_->inputEvents_.size(), INPUT_EVENTS_SIZE_2);
296 
297     /**
298      * @tc.steps: step8. Set HoverEvent and inputEvents_ will not be empty.
299      */
300     OnHoverFunc onHover2 = onHover;
301     auto onHoverEvent = AceType::MakeRefPtr<InputEvent>(std::move(onHover2));
302     inputEventHub->AddOnHoverEvent(onHoverEvent);
303     inputEventHub->AddOnHoverEvent(nullptr);
304     EXPECT_EQ(inputEventHub->hoverEventActuator_->inputEvents_.size(), INPUT_EVENTS_SIZE_2);
305 
306     /**
307      * @tc.steps: step9. Invoke ProcessMouseTestHit when inputEvents_ is not empty and userCallback_ has already been
308      * initialized.
309      * @tc.expected: ProcessMouseTestHit return false, mouse and hover result size has been increased one.
310      */
311     EXPECT_FALSE(inputEventHub->ProcessMouseTestHit(COORDINATE_OFFSET, mouseResult));
312     EXPECT_EQ(inputEventHub->mouseEventActuator_->mouseEventTarget_->GetCoordinateOffset(),
313         Offset(COORDINATE_OFFSET.GetX(), COORDINATE_OFFSET.GetY()));
314     EXPECT_EQ(inputEventHub->hoverEventActuator_->hoverEventTarget_->GetCoordinateOffset(),
315         Offset(COORDINATE_OFFSET.GetX(), COORDINATE_OFFSET.GetY()));
316     EXPECT_EQ(inputEventHub->hoverEffectActuator_->hoverEffectTarget_->GetCoordinateOffset(),
317         Offset(COORDINATE_OFFSET.GetX(), COORDINATE_OFFSET.GetY()));
318     EXPECT_EQ(mouseResult.size(), MOUSE_RESULT_SIZE);
319 
320     /**
321      * @tc.steps: step10. Handle mouse and hover event when the events and userCallback is nullptr or not.
322      */
323     const MouseEvent mouseEvent = { .action = MouseAction::MOVE };
324     EXPECT_FALSE(inputEventHub->hoverEventActuator_->hoverEventTarget_->HandleHoverEvent(HOVER_VALUE));
325     inputEventHub->mouseEventActuator_->mouseEventTarget_->HandleMouseEvent(mouseEvent);
326     inputEventHub->mouseEventActuator_->userCallback_ = nullptr;
327     inputEventHub->hoverEventActuator_->userCallback_ = nullptr;
328     EXPECT_FALSE(inputEventHub->hoverEventActuator_->hoverEventTarget_->HandleHoverEvent(HOVER_VALUE));
329     inputEventHub->mouseEventActuator_->mouseEventTarget_->HandleMouseEvent(mouseEvent);
330 }
331 
332 /**
333  * @tc.name: InputEventHubProcessAxisTestHitTest006
334  * @tc.desc: Create InputEventHub and invoke ProcessAxisTestHit functions.
335  * @tc.type: FUNC
336  */
337 HWTEST_F(InputEventHubTestNg, InputEventHubProcessAxisTestHitTest006, TestSize.Level1)
338 {
339     /**
340      * @tc.steps: step1. Create InputEventHub.
341      */
342     auto eventHub = AceType::MakeRefPtr<EventHub>();
343     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
344     eventHub->AttachHost(frameNode);
345     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
346     EXPECT_NE(inputEventHub, nullptr);
347 
348     /**
349      * @tc.steps: step2. Invoke ProcessAxisTestHit when eventHub is nullptr.
350      * @tc.expected: ProcessMouseTestHit return false.
351      */
352     AxisTestResult onAxisResult;
353     auto inputEventHub2 = AceType::MakeRefPtr<InputEventHub>(nullptr);
354     EXPECT_FALSE(inputEventHub2->ProcessAxisTestHit(COORDINATE_OFFSET, onAxisResult));
355 
356     /**
357      * @tc.steps: step3. Initialize axisEventActuator_ and its inputEvents_ is empty and userCallback_ is nullptr.
358      * @tc.expected: OnCollectAxisEvent will return directly, and ProcessAxisTestHit return false.
359      */
360     inputEventHub->axisEventActuator_ =
361         AceType::MakeRefPtr<InputEventActuator>(AceType::WeakClaim(AceType::RawPtr(inputEventHub)));
362     EXPECT_FALSE(inputEventHub2->ProcessAxisTestHit(COORDINATE_OFFSET, onAxisResult));
363 
364     /**
365      * @tc.steps: step4. Initialize userCallback_.
366      */
__anon91be7d820802(MouseInfo& info) 367     OnMouseEventFunc onAxis = [](MouseInfo& info) {};
368     auto onAxisEvent = AceType::MakeRefPtr<InputEvent>(std::move(onAxis));
369     inputEventHub->axisEventActuator_->userCallback_ = onAxisEvent;
370 
371     /**
372      * @tc.steps: step5. Add OnAxisEvent.
373      * @tc.expected: axisEventActuator_ will be initialized, and the list of inputEvents and the size will be 1.
374      */
375     inputEventHub->AddOnAxisEvent(onAxisEvent);
376     EXPECT_EQ(inputEventHub->axisEventActuator_->inputEvents_.size(), INPUT_EVENTS_SIZE);
377 
378     /**
379      * @tc.steps: step6. Invoke ProcessAxisTestHit when inputEvents_ is not empty and userCallback_ has already been
380      * initialized.
381      * @tc.expected: ProcessAxisTestHit return false, axis result size has been increased one.
382      */
383     EXPECT_FALSE(inputEventHub->ProcessAxisTestHit(COORDINATE_OFFSET, onAxisResult));
384     EXPECT_EQ(inputEventHub->axisEventActuator_->axisEventTarget_->coordinateOffset_, COORDINATE_OFFSET);
385     EXPECT_EQ(onAxisResult.size(), AXIS_RESULT_SIZE);
386 }
387 
388 /**
389  * @tc.name: InputEventHubBindContextMenuTest007
390  * @tc.desc: Create InputEventHub and invoke BindContextMenu functions.
391  * @tc.type: FUNC
392  */
393 HWTEST_F(InputEventHubTestNg, InputEventHubBindContextMenuTest007, TestSize.Level1)
394 {
395     /**
396      * @tc.steps: step1. Create InputEventHub.
397      */
398     auto eventHub = AceType::MakeRefPtr<EventHub>();
399     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
400     eventHub->AttachHost(frameNode);
401     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
402     EXPECT_NE(inputEventHub, nullptr);
403 
404     /**
405      * @tc.steps: step2. Invoke BindContextMenu when showMenu_ is nullptr or not.
406      * @tc.expected: mouseEventActuator_ is not nullptr.
407      */
__anon91be7d820902(MouseInfo& info) 408     const OnMouseEventFunc onMouse = [](MouseInfo& info) {};
409     OnMouseEventFunc onMouse1 = onMouse;
410     OnMouseEventFunc onMouse2 = onMouse;
411     inputEventHub->BindContextMenu(std::move(onMouse1));
412     inputEventHub->BindContextMenu(std::move(onMouse2));
413     EXPECT_NE(inputEventHub->mouseEventActuator_, nullptr);
414 }
415 
416 /**
417  * @tc.name: DisableMouseEvent001
418  * @tc.desc: Test disable mouse event.
419  * @tc.type: FUNC
420  */
421 HWTEST_F(InputEventHubTestNg, DisableMouseEvent001, TestSize.Level1)
422 {
423     /**
424      * @tc.steps: step1. Create InputEventHub.
425      */
426     auto eventHub = AceType::MakeRefPtr<EventHub>();
427     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
428     eventHub->AttachHost(frameNode);
429     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
430     EXPECT_NE(inputEventHub, nullptr);
431 
432     /**
433      * @tc.steps: step2. Initialize mouseEventActuator_, and set callback
434      * @tc.expected: callback is right.
435      */
436     inputEventHub->mouseEventActuator_ =
437         AceType::MakeRefPtr<InputEventActuator>(AceType::WeakClaim(AceType::RawPtr(inputEventHub)));
438     std::string result;
__anon91be7d820a02(MouseInfo& info) 439     OnMouseEventFunc onMouse = [&result](MouseInfo& info) { result = RESULT_SUCCESS_ONE; };
440     inputEventHub->SetMouseEvent(std::move(onMouse));
441     EXPECT_NE(inputEventHub->mouseEventActuator_->userCallback_, nullptr);
442 
443     MouseInfo press;
444     press.SetButton(MouseButton::LEFT_BUTTON);
445     press.SetAction(MouseAction::PRESS);
446     inputEventHub->mouseEventActuator_->userCallback_->onMouseCallback_(press);
447     EXPECT_EQ(result, RESULT_SUCCESS_ONE);
448 
449     /**
450      * @tc.steps: step3. Clear the callback.
451      * @tc.expected: callback is null.
452      */
453     inputEventHub->ClearUserOnMouse();
454     EXPECT_EQ(inputEventHub->mouseEventActuator_->userCallback_, nullptr);
455 
456     /**
457      * @tc.steps: step4. Set the callback again.
458      * @tc.expected: callback is right.
459      */
__anon91be7d820b02(MouseInfo& info) 460     OnMouseEventFunc onMouse2 = [&result](MouseInfo& info) { result = RESULT_SUCCESS_TWO; };
461     inputEventHub->SetMouseEvent(std::move(onMouse2));
462     EXPECT_NE(inputEventHub->mouseEventActuator_->userCallback_, nullptr);
463 
464     MouseInfo release;
465     release.SetButton(MouseButton::LEFT_BUTTON);
466     release.SetAction(MouseAction::RELEASE);
467     inputEventHub->mouseEventActuator_->userCallback_->onMouseCallback_(release);
468     EXPECT_EQ(result, RESULT_SUCCESS_TWO);
469 }
470 
471 /**
472  * @tc.name: DisableHoverEvent001
473  * @tc.desc: Test disable hover event.
474  * @tc.type: FUNC
475  */
476 HWTEST_F(InputEventHubTestNg, DisableHoverEvent001, TestSize.Level1)
477 {
478     /**
479      * @tc.steps: step1. Create InputEventHub.
480      */
481     auto eventHub = AceType::MakeRefPtr<EventHub>();
482     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
483     eventHub->AttachHost(frameNode);
484     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
485     EXPECT_NE(inputEventHub, nullptr);
486 
487     /**
488      * @tc.steps: step2. Initialize hoverEventActuator_, and set callback
489      * @tc.expected: callback is right.
490      */
491     inputEventHub->hoverEventActuator_ =
492         AceType::MakeRefPtr<InputEventActuator>(AceType::WeakClaim(AceType::RawPtr(inputEventHub)));
493     std::string result;
__anon91be7d820c02(bool, HoverInfo) 494     OnHoverFunc onHover = [&result](bool, HoverInfo) { result = RESULT_SUCCESS_ONE; };
495     inputEventHub->SetHoverEvent(std::move(onHover));
496     EXPECT_NE(inputEventHub->hoverEventActuator_->userCallback_, nullptr);
497 
498     HoverInfo hover;
499     inputEventHub->hoverEventActuator_->userCallback_->onHoverEventCallback_(true, hover);
500     EXPECT_EQ(result, RESULT_SUCCESS_ONE);
501 
502     /**
503      * @tc.steps: step3. Clear the callback.
504      * @tc.expected: callback is null.
505      */
506     inputEventHub->ClearUserOnHover();
507     EXPECT_EQ(inputEventHub->hoverEventActuator_->userCallback_, nullptr);
508 
509     /**
510      * @tc.steps: step4. Set the callback again.
511      * @tc.expected: callback is right.
512      */
__anon91be7d820d02(bool, HoverInfo) 513     OnHoverFunc onHover2 = [&result](bool, HoverInfo) { result = RESULT_SUCCESS_TWO; };
514     inputEventHub->SetHoverEvent(std::move(onHover2));
515     EXPECT_NE(inputEventHub->hoverEventActuator_->userCallback_, nullptr);
516 
517     HoverInfo hover2;
518     inputEventHub->hoverEventActuator_->userCallback_->onHoverEventCallback_(true, hover2);
519     EXPECT_EQ(result, RESULT_SUCCESS_TWO);
520 }
521 
522 /**
523  * @tc.name: InputEventHubGetHoverEffectStr001
524  * @tc.desc: Create InputEventHub and invoke GetHoverEffectStr function.
525  * @tc.type: FUNC
526  */
527 HWTEST_F(InputEventHubTestNg, InputEventHubGetHoverEffectStr001, TestSize.Level1)
528 {
529     /**
530      * @tc.steps: step1. Create InputEventHub.
531      */
532     auto eventHub = AceType::MakeRefPtr<EventHub>();
533     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
534     eventHub->AttachHost(frameNode);
535     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
536     EXPECT_NE(inputEventHub, nullptr);
537     inputEventHub->hoverEffectType_ = HoverEffectType::AUTO;
538 
539     /**
540      * @tc.steps: step2. Invoke BindContextMenu when showMenu_ is nullptr or not.
541      * @tc.expected: mouseEventActuator_ is not nullptr.
542      */
543     for (int i = 0; i <= 1; i++) {
544         for (int j = 0; j <= 1; j++) {
545             EXPECT_EQ(inputEventHub->GetHoverEffectStr(), i==0&&j==0?"HoverEffect.Auto":(i==0&&j==1?"HoverEffect.Scale":
546                 (i==1&&j==0?"HoverEffect.Highlight":"HoverEffect.None")));
547             if (i == 1) {
548                 inputEventHub->hoverEffectType_ = HoverEffectType::NONE;
549                 continue;
550             }
551             inputEventHub->hoverEffectType_ = HoverEffectType::SCALE;
552         }
553         inputEventHub->hoverEffectType_ = HoverEffectType::BOARD;
554     }
555     inputEventHub->hoverEffectType_ = HoverEffectType::OPACITY;
556     EXPECT_EQ(inputEventHub->GetHoverEffectStr(), "HoverEffect.Auto");
557 }
558 } // namespace OHOS::Ace::NG
559