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