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 "gtest/gtest.h"
17 #include "test/unittest/core/event/event_manager_test_ng.h"
18 #include "test/mock/core/pipeline/mock_pipeline_context.h"
19 
20 #include "core/components_ng/base/frame_node.h"
21 #include "core/components_ng/event/event_hub.h"
22 #include "core/components_ng/event/input_event.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 
27 using namespace testing;
28 using namespace testing::ext;
29 
30 namespace OHOS::Ace::NG {
31 namespace {
32 constexpr float WIDTH = 400.0f;
33 constexpr float HEIGHT = 400.0f;
34 const OffsetF COORDINATE_OFFSET(WIDTH, HEIGHT);
35 const std::string RESULT_SUCCESS_ONE = "sucess1";
36 const std::string RESULT_SUCCESS_TWO = "sucess2";
37 } // namespace
38 
39 class InputEventTestNg : public testing::Test {
40 public:
41     static void SetUpTestSuite();
42     static void TearDownTestSuite();
43     void SetUp() override;
44     void TearDown() override;
45 };
46 
SetUpTestSuite()47 void InputEventTestNg::SetUpTestSuite()
48 {
49     GTEST_LOG_(INFO) << "InputEventTestNg SetUpTestCase";
50 }
51 
TearDownTestSuite()52 void InputEventTestNg::TearDownTestSuite()
53 {
54     GTEST_LOG_(INFO) << "InputEventTestNg TearDownTestCase";
55 }
56 
SetUp()57 void InputEventTestNg::SetUp()
58 {
59     MockPipelineContext::SetUp();
60 }
61 
TearDown()62 void InputEventTestNg::TearDown()
63 {
64     MockPipelineContext::TearDown();
65 }
66 
67 /**
68  * @tc.name: InputEventTest001
69  * @tc.desc: test InputEvent
70  * @tc.type: FUNC
71  */
72 HWTEST_F(InputEventTestNg, InputEventTest001, TestSize.Level1)
73 {
74     auto eventHub = AceType::MakeRefPtr<EventHub>();
75     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
76     eventHub->AttachHost(frameNode);
77     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
78     inputEventHub->mouseEventActuator_ =
79         AceType::MakeRefPtr<InputEventActuator>(AceType::WeakClaim(AceType::RawPtr(inputEventHub)));
80     inputEventHub->hoverEventActuator_ =
81         AceType::MakeRefPtr<InputEventActuator>(AceType::WeakClaim(AceType::RawPtr(inputEventHub)));
__anon8da78ddb0202(MouseInfo& info) 82     const OnMouseEventFunc onMouse = [](MouseInfo& info) {};
83     OnMouseEventFunc onMouse1 = onMouse;
84     inputEventHub->SetJSFrameNodeOnMouseEvent(std::move(onMouse1));
85     OnMouseEventFunc onMouse2 = onMouse;
86     inputEventHub->SetMouseEvent(std::move(onMouse2));
87 
88     TouchTestResult Result;
89     auto getEventTargetImpl = eventHub->CreateGetEventTargetImpl();
90     inputEventHub->mouseEventActuator_->OnCollectMouseEvent(COORDINATE_OFFSET, getEventTargetImpl, Result);
91     MouseInfo mouse;
92     inputEventHub->mouseEventActuator_->mouseEventTarget_->onMouseCallback_(mouse);
93     EXPECT_NE(inputEventHub, nullptr);
94 }
95 
96 /**
97  * @tc.name: InputEventTest002
98  * @tc.desc: test InputEvent
99  * @tc.type: FUNC
100  */
101 HWTEST_F(InputEventTestNg, InputEventTest002, TestSize.Level1)
102 {
103     auto eventHub = AceType::MakeRefPtr<EventHub>();
104     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
105     eventHub->AttachHost(frameNode);
106     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
107     inputEventHub->hoverEventActuator_ =
108         AceType::MakeRefPtr<InputEventActuator>(AceType::WeakClaim(AceType::RawPtr(inputEventHub)));
109     OnHoverFunc onHoverEventFunc;
110     OnHoverFunc onHoverEventFunc2;
111     inputEventHub->SetJSFrameNodeOnHoverEvent(std::move(onHoverEventFunc));
112     inputEventHub->SetHoverEvent(std::move(onHoverEventFunc2));
113 
__anon8da78ddb0302(bool, HoverInfo) 114     const OnHoverFunc onHover = [](bool, HoverInfo) {};
115     OnHoverFunc onHover1 = onHover;
116     auto onHoverEvent = AceType::MakeRefPtr<InputEvent>(std::move(onHover1));
117     inputEventHub->AddOnHoverEvent(onHoverEvent);
118     inputEventHub->AddOnHoverEvent(nullptr);
119 
120     TouchTestResult hoverResult;
121     auto getEventTargetImpl = eventHub->CreateGetEventTargetImpl();
122     inputEventHub->hoverEventActuator_->OnCollectHoverEvent(COORDINATE_OFFSET, getEventTargetImpl, hoverResult);
123     HoverInfo hover;
124     inputEventHub->hoverEventActuator_->hoverEventTarget_->onHoverEventCallback_(true, hover);
125     EXPECT_NE(inputEventHub, nullptr);
126 }
127 
128 /**
129  * @tc.name: InputEventTest003
130  * @tc.desc: test InputEvent
131  * @tc.type: FUNC
132  */
133 HWTEST_F(InputEventTestNg, InputEventTest003, TestSize.Level1)
134 {
135     auto eventHub = AceType::MakeRefPtr<EventHub>();
136     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
137     eventHub->AttachHost(frameNode);
138     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
139     inputEventHub->hoverEventActuator_ =
140         AceType::MakeRefPtr<InputEventActuator>(AceType::WeakClaim(AceType::RawPtr(inputEventHub)));
141     OnHoverFunc onHoverEventFunc;
142     inputEventHub->SetHoverEvent(std::move(onHoverEventFunc));
143 
144     TouchTestResult hoverResult;
145     auto getEventTargetImpl = eventHub->CreateGetEventTargetImpl();
146     inputEventHub->hoverEventActuator_->OnCollectHoverEvent(COORDINATE_OFFSET, getEventTargetImpl, hoverResult);
147     HoverInfo hover;
148     inputEventHub->hoverEventActuator_->hoverEventTarget_->onHoverEventCallback_(true, hover);
149     EXPECT_NE(inputEventHub, nullptr);
150 }
151 
152 /**
153  * @tc.name: InputEventTest004
154  * @tc.desc: test InputEvent
155  * @tc.type: FUNC
156  */
157 HWTEST_F(InputEventTestNg, InputEventTest004, TestSize.Level1)
158 {
159     auto eventHub = AceType::MakeRefPtr<EventHub>();
160     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
161     eventHub->AttachHost(frameNode);
162     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
163     inputEventHub->hoverEventActuator_ =
164         AceType::MakeRefPtr<InputEventActuator>(AceType::WeakClaim(AceType::RawPtr(inputEventHub)));
165     OnHoverFunc onHoverEventFunc;
166     inputEventHub->SetJSFrameNodeOnHoverEvent(std::move(onHoverEventFunc));
167 
168     TouchTestResult hoverResult;
169     auto getEventTargetImpl = eventHub->CreateGetEventTargetImpl();
170     inputEventHub->hoverEventActuator_->OnCollectHoverEvent(COORDINATE_OFFSET, getEventTargetImpl, hoverResult);
171     HoverInfo hover;
172     inputEventHub->hoverEventActuator_->hoverEventTarget_->onHoverEventCallback_(true, hover);
173     EXPECT_NE(inputEventHub, nullptr);
174 }
175 
176 /**
177  * @tc.name: InputEventTest005
178  * @tc.desc: test InputEvent
179  * @tc.type: FUNC
180  */
181 HWTEST_F(InputEventTestNg, InputEventTest005, TestSize.Level1)
182 {
183     auto eventHub = AceType::MakeRefPtr<EventHub>();
184     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
185     eventHub->AttachHost(frameNode);
186     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
187     inputEventHub->hoverEventActuator_ =
188         AceType::MakeRefPtr<InputEventActuator>(AceType::WeakClaim(AceType::RawPtr(inputEventHub)));
189 
190     TouchTestResult hoverResult;
191     auto getEventTargetImpl = eventHub->CreateGetEventTargetImpl();
192     inputEventHub->hoverEventActuator_->OnCollectHoverEvent(COORDINATE_OFFSET, getEventTargetImpl, hoverResult);
193     EXPECT_NE(inputEventHub, nullptr);
194 }
195 
196 /**
197  * @tc.name: InputEventTest006
198  * @tc.desc: test InputEvent
199  * @tc.type: FUNC
200  */
201 HWTEST_F(InputEventTestNg, InputEventTest006, TestSize.Level1)
202 {
203     auto eventHub = AceType::MakeRefPtr<EventHub>();
204     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
205     eventHub->AttachHost(frameNode);
206     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
207     inputEventHub->axisEventActuator_ =
208         AceType::MakeRefPtr<InputEventActuator>(AceType::WeakClaim(AceType::RawPtr(inputEventHub)));
209 
__anon8da78ddb0402(MouseInfo& info) 210     OnMouseEventFunc onAxis = [](MouseInfo& info) {};
211     auto onAxisEvent = AceType::MakeRefPtr<InputEvent>(std::move(onAxis));
212     inputEventHub->AddOnAxisEvent(onAxisEvent);
213     inputEventHub->AddOnAxisEvent(nullptr);
214     inputEventHub->axisEventActuator_->userCallback_ = onAxisEvent;
215 
216     AxisTestResult Result;
217     auto getEventTargetImpl = eventHub->CreateGetEventTargetImpl();
218     inputEventHub->axisEventActuator_->OnCollectAxisEvent(COORDINATE_OFFSET, getEventTargetImpl, Result);
219     AxisInfo axisInfo;
220     inputEventHub->axisEventActuator_->axisEventTarget_->onAxisCallback_(axisInfo);
221     EXPECT_NE(inputEventHub, nullptr);
222 }
223 
224 /**
225  * @tc.name: InputEventTest007
226  * @tc.desc: test InputEvent
227  * @tc.type: FUNC
228  */
229 HWTEST_F(InputEventTestNg, InputEventTest007, TestSize.Level1)
230 {
231     auto eventHub = AceType::MakeRefPtr<EventHub>();
232     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
233     eventHub->AttachHost(frameNode);
234     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
235     inputEventHub->axisEventActuator_ =
236         AceType::MakeRefPtr<InputEventActuator>(AceType::WeakClaim(AceType::RawPtr(inputEventHub)));
237 
__anon8da78ddb0502(MouseInfo& info) 238     OnMouseEventFunc onAxis = [](MouseInfo& info) {};
239     auto onAxisEvent = AceType::MakeRefPtr<InputEvent>(std::move(onAxis));
240     inputEventHub->axisEventActuator_->userCallback_ = onAxisEvent;
241 
242     AxisTestResult Result;
243     auto getEventTargetImpl = eventHub->CreateGetEventTargetImpl();
244     inputEventHub->axisEventActuator_->OnCollectAxisEvent(COORDINATE_OFFSET, getEventTargetImpl, Result);
245     AxisInfo axisInfo;
246     inputEventHub->axisEventActuator_->axisEventTarget_->onAxisCallback_(axisInfo);
247     EXPECT_NE(inputEventHub, nullptr);
248 }
249 
250 /**
251  * @tc.name: InputEventTest008
252  * @tc.desc: test InputEvent
253  * @tc.type: FUNC
254  */
255 HWTEST_F(InputEventTestNg, InputEventTest008, TestSize.Level1)
256 {
257     auto eventHub = AceType::MakeRefPtr<EventHub>();
258     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
259     eventHub->AttachHost(frameNode);
260     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
261     inputEventHub->axisEventActuator_ =
262         AceType::MakeRefPtr<InputEventActuator>(AceType::WeakClaim(AceType::RawPtr(inputEventHub)));
263 
__anon8da78ddb0602(MouseInfo& info) 264     OnMouseEventFunc onAxis = [](MouseInfo& info) {};
265     auto onAxisEvent = AceType::MakeRefPtr<InputEvent>(std::move(onAxis));
266     inputEventHub->AddOnAxisEvent(onAxisEvent);
267     inputEventHub->AddOnAxisEvent(nullptr);
268 
269     AxisTestResult Result;
270     auto getEventTargetImpl = eventHub->CreateGetEventTargetImpl();
271     inputEventHub->axisEventActuator_->OnCollectAxisEvent(COORDINATE_OFFSET, getEventTargetImpl, Result);
272     AxisInfo axisInfo;
273     inputEventHub->axisEventActuator_->axisEventTarget_->onAxisCallback_(axisInfo);
274     EXPECT_NE(inputEventHub, nullptr);
275 }
276 
277 /**
278  * @tc.name: InputEventTest009
279  * @tc.desc: test InputEvent
280  * @tc.type: FUNC
281  */
282 HWTEST_F(InputEventTestNg, InputEventTest009, TestSize.Level1)
283 {
284     auto eventHub = AceType::MakeRefPtr<EventHub>();
285     auto frameNode = AceType::MakeRefPtr<FrameNode>(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
286     eventHub->AttachHost(frameNode);
287     auto inputEventHub = AceType::MakeRefPtr<InputEventHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
288     inputEventHub->axisEventActuator_ =
289         AceType::MakeRefPtr<InputEventActuator>(AceType::WeakClaim(AceType::RawPtr(inputEventHub)));
290 
291     AxisTestResult Result;
292     auto getEventTargetImpl = eventHub->CreateGetEventTargetImpl();
293     inputEventHub->axisEventActuator_->OnCollectAxisEvent(COORDINATE_OFFSET, getEventTargetImpl, Result);
294     EXPECT_NE(inputEventHub, nullptr);
295 }
296 } // namespace OHOS::Ace::NG