• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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 
16 #include <cstdio>
17 #include <gtest/gtest.h>
18 
19 #include "input_event_handler.h"
20 #include "touch_gesture_adapter.h"
21 #include "mmi_log.h"
22 
23 #undef MMI_LOG_TAG
24 #define MMI_LOG_TAG "TouchGestureAdapterTest"
25 
26 namespace OHOS {
27 namespace MMI {
28 namespace {
29 using namespace testing::ext;
30 }
31 class TouchGestureAdapterTest : public testing::Test {
32 public:
SetUpTestCase(void)33     static void SetUpTestCase(void) {}
TearDownTestCase(void)34     static void TearDownTestCase(void) {}
SetUp()35     void SetUp() {}
TearDown()36     void TearDown() {}
37 };
38 
39 /**
40  * @tc.name: TouchGestureAdapterTest_SetGestureEnable_001
41  * @tc.desc: Test the funcation SetGestureEnable
42  * @tc.type: FUNC
43  * @tc.require:
44  */
45 HWTEST_F(TouchGestureAdapterTest, TouchGestureAdapterTest_SetGestureEnable_001, TestSize.Level1)
46 {
47     CALL_TEST_DEBUG;
48     TouchGestureType adapterType = TOUCH_GESTURE_TYPE_SWIPE;
49     std::shared_ptr<TouchGestureAdapter> nextAdapter = nullptr;
50     auto touchGestureAdapter = std::make_shared<TouchGestureAdapter>(adapterType, nextAdapter);
51     touchGestureAdapter->Init();
52     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->SetGestureCondition(true, adapterType, 0));
53     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->SetGestureCondition(false, adapterType, 0));
54 }
55 
56 /**
57  * @tc.name: TouchGestureAdapterTest_process_001
58  * @tc.desc: Test the funcation process
59  * @tc.type: FUNC
60  * @tc.require:
61  */
62 HWTEST_F(TouchGestureAdapterTest, TouchGestureAdapterTest_process_001, TestSize.Level1)
63 {
64     CALL_TEST_DEBUG;
65     TouchGestureType adapterType = 5;
66     std::shared_ptr<TouchGestureAdapter> nextAdapter = nullptr;
67     auto touchGestureAdapter = std::make_shared<TouchGestureAdapter>(adapterType, nextAdapter);
68     std::shared_ptr<PointerEvent> event = PointerEvent::Create();
69     touchGestureAdapter->shouldDeliverToNext_ = true;
70     touchGestureAdapter->nextAdapter_ = nullptr;
71     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->process(event));
72     touchGestureAdapter->shouldDeliverToNext_ = true;
73     touchGestureAdapter->nextAdapter_ = std::make_shared<TouchGestureAdapter>(adapterType, nextAdapter);
74     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->process(event));
75     touchGestureAdapter->shouldDeliverToNext_ = false;
76     touchGestureAdapter->nextAdapter_ = nullptr;
77     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->process(event));
78     touchGestureAdapter->shouldDeliverToNext_ = false;
79     touchGestureAdapter->nextAdapter_ = std::make_shared<TouchGestureAdapter>(adapterType, nextAdapter);
80     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->process(event));
81 }
82 
83 /**
84  * @tc.name: TouchGestureAdapterTest_Init_001
85  * @tc.desc: Test the funcation Init
86  * @tc.type: FUNC
87  * @tc.require:
88  */
89 HWTEST_F(TouchGestureAdapterTest, TouchGestureAdapterTest_Init_001, TestSize.Level1)
90 {
91     CALL_TEST_DEBUG;
92     TouchGestureType adapterType = 5;
93     std::shared_ptr<TouchGestureAdapter> nextAdapter = nullptr;
94     auto touchGestureAdapter = std::make_shared<TouchGestureAdapter>(adapterType, nextAdapter);
95     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->Init());
96     std::shared_ptr<OHOS::MMI::TouchGestureDetector::GestureListener> listener = nullptr;
97     touchGestureAdapter->gestureDetector_ = std::make_shared<TouchGestureDetector>(adapterType, listener);
98     touchGestureAdapter->nextAdapter_ = std::make_shared<TouchGestureAdapter>(adapterType, nextAdapter);
99     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->Init());
100     touchGestureAdapter->nextAdapter_ = nullptr;
101     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->Init());
102 }
103 
104 /**
105  * @tc.name: TouchGestureAdapterTest_GetGestureFactory_001
106  * @tc.desc: Test the funcation GetGestureFactory
107  * @tc.type: FUNC
108  * @tc.require:
109  */
110 HWTEST_F(TouchGestureAdapterTest, TouchGestureAdapterTest_GetGestureFactory_001, TestSize.Level1)
111 {
112     CALL_TEST_DEBUG;
113     TouchGestureType adapterType = 5;
114     std::shared_ptr<TouchGestureAdapter> nextAdapter = nullptr;
115     auto touchGestureAdapter = std::make_shared<TouchGestureAdapter>(adapterType, nextAdapter);
116     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->GetGestureFactory());
117 }
118 
119 /**
120  * @tc.name: TouchGestureAdapterTest_OnTouchEvent_001
121  * @tc.desc: Test the funcation OnTouchEvent
122  * @tc.type: FUNC
123  * @tc.require:
124  */
125 HWTEST_F(TouchGestureAdapterTest, TouchGestureAdapterTest_OnTouchEvent_001, TestSize.Level1)
126 {
127     CALL_TEST_DEBUG;
128     TouchGestureType adapterType = 5;
129     std::shared_ptr<TouchGestureAdapter> nextAdapter = nullptr;
130     auto touchGestureAdapter = std::make_shared<TouchGestureAdapter>(adapterType, nextAdapter);
131     std::shared_ptr<PointerEvent> event = PointerEvent::Create();
132     std::shared_ptr<OHOS::MMI::TouchGestureDetector::GestureListener> listener = nullptr;
133     touchGestureAdapter->gestureDetector_ = std::make_shared<TouchGestureDetector>(adapterType, listener);
134     event->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHPAD);
135     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
136     event->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHSCREEN);
137     event->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN);
138     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
139     event->SetPointerAction(PointerEvent::POINTER_ACTION_UP);
140     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
141     event->SetPointerAction(PointerEvent::POINTER_ACTION_CANCEL);
142     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
143     touchGestureAdapter->gestureStarted_ = false;
144     event->SetPointerAction(PointerEvent::POINTER_ACTION_UP);
145     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
146     touchGestureAdapter->gestureStarted_ = false;
147     event->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN);
148     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
149     touchGestureAdapter->gestureStarted_ = true;
150     event->SetPointerAction(PointerEvent::POINTER_ACTION_UP);
151     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
152     touchGestureAdapter->gestureStarted_ = true;
153     event->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN);
154     touchGestureAdapter->gestureType_ = TOUCH_GESTURE_TYPE_SWIPE;
155     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
156     touchGestureAdapter->gestureType_ = TOUCH_GESTURE_TYPE_PINCH;
157     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
158     touchGestureAdapter->gestureType_ = 2;
159     event->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN);
160     touchGestureAdapter->state_ = TouchGestureAdapter::GestureState::SWIPE;
161     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
162 }
163 
164 /**
165  * @tc.name: TouchGestureAdapterTest_OnTouchEvent_002
166  * @tc.desc: Test the funcation OnTouchEvent
167  * @tc.type: FUNC
168  * @tc.require:
169  */
170 HWTEST_F(TouchGestureAdapterTest, TouchGestureAdapterTest_OnTouchEvent_002, TestSize.Level1)
171 {
172     CALL_TEST_DEBUG;
173     TouchGestureType adapterType = 5;
174     std::shared_ptr<TouchGestureAdapter> nextAdapter = nullptr;
175     auto touchGestureAdapter = std::make_shared<TouchGestureAdapter>(adapterType, nextAdapter);
176     std::shared_ptr<PointerEvent> event = PointerEvent::Create();
177     std::shared_ptr<OHOS::MMI::TouchGestureDetector::GestureListener> listener = nullptr;
178     touchGestureAdapter->gestureDetector_ = std::make_shared<TouchGestureDetector>(adapterType, listener);
179     event->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHSCREEN);
180     touchGestureAdapter->gestureStarted_ = true;
181     event->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN);
182     touchGestureAdapter->gestureType_ = 2;
183     touchGestureAdapter->state_ = TouchGestureAdapter::GestureState::IDLE;
184     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
185     event->SetPointerAction(PointerEvent::POINTER_ACTION_UP);
186     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
187     touchGestureAdapter->state_ = TouchGestureAdapter::GestureState::SWIPE;
188     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
189     event->SetPointerAction(PointerEvent::POINTER_ACTION_MOVE);
190     touchGestureAdapter->gestureStarted_ = true;
191     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
192     event->SetPointerAction(PointerEvent::POINTER_ACTION_UP);
193     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
194     touchGestureAdapter->gestureStarted_ = false;
195     event->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN);
196     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
197     event->SetPointerAction(PointerEvent::POINTER_ACTION_MOVE);
198     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
199 }
200 
201 /**
202  * @tc.name: TouchGestureAdapterTest_OnSwipeGesture_001
203  * @tc.desc: Test the funcation OnSwipeGesture
204  * @tc.type: FUNC
205  * @tc.require:
206  */
207 HWTEST_F(TouchGestureAdapterTest, TouchGestureAdapterTest_OnSwipeGesture_001, TestSize.Level1)
208 {
209     CALL_TEST_DEBUG;
210     TouchGestureType adapterType = 5;
211     std::shared_ptr<TouchGestureAdapter> nextAdapter = nullptr;
212     auto touchGestureAdapter = std::make_shared<TouchGestureAdapter>(adapterType, nextAdapter);
213     std::shared_ptr<PointerEvent> event = PointerEvent::Create();
214     std::shared_ptr<OHOS::MMI::TouchGestureDetector::GestureListener> listener = nullptr;
215     touchGestureAdapter->gestureDetector_ = std::make_shared<TouchGestureDetector>(adapterType, listener);
216     touchGestureAdapter->state_ = TouchGestureAdapter::GestureState::PINCH;
217     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnSwipeGesture(event));
218     touchGestureAdapter->state_ = TouchGestureAdapter::GestureState::IDLE;
219     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnSwipeGesture(event));
220 }
221 
222 /**
223  * @tc.name: TouchGestureAdapterTest_OnPinchGesture_001
224  * @tc.desc: Test the funcation OnPinchGesture
225  * @tc.type: FUNC
226  * @tc.require:
227  */
228 HWTEST_F(TouchGestureAdapterTest, TouchGestureAdapterTest_OnPinchGesture_001, TestSize.Level1)
229 {
230     CALL_TEST_DEBUG;
231     TouchGestureType adapterType = 5;
232     std::shared_ptr<TouchGestureAdapter> nextAdapter = nullptr;
233     auto touchGestureAdapter = std::make_shared<TouchGestureAdapter>(adapterType, nextAdapter);
234     std::shared_ptr<PointerEvent> event = PointerEvent::Create();
235     std::shared_ptr<OHOS::MMI::TouchGestureDetector::GestureListener> listener = nullptr;
236     touchGestureAdapter->gestureDetector_ = std::make_shared<TouchGestureDetector>(adapterType, listener);
237     touchGestureAdapter->state_ = TouchGestureAdapter::GestureState::SWIPE;
238     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnPinchGesture(event));
239     touchGestureAdapter->state_ = TouchGestureAdapter::GestureState::IDLE;
240     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnPinchGesture(event));
241 }
242 
243 /**
244  * @tc.name: TouchGestureAdapterTest_OnGestureEvent_001
245  * @tc.desc: Test the funcation OnGestureEvent
246  * @tc.type: FUNC
247  * @tc.require:
248  */
249 HWTEST_F(TouchGestureAdapterTest, TouchGestureAdapterTest_OnGestureEvent_001, TestSize.Level1)
250 {
251     CALL_TEST_DEBUG;
252     TouchGestureType adapterType = 5;
253     std::shared_ptr<TouchGestureAdapter> nextAdapter = nullptr;
254     auto touchGestureAdapter = std::make_shared<TouchGestureAdapter>(adapterType, nextAdapter);
255     std::shared_ptr<PointerEvent> event = PointerEvent::Create();
256     InputHandler->eventMonitorHandler_ = std::make_shared<EventMonitorHandler>();
257     GestureMode mode = GestureMode::ACTION_SWIPE_DOWN;
258     bool ret = touchGestureAdapter->OnGestureEvent(event, mode);
259     ASSERT_EQ(ret, true);
260     mode = GestureMode::ACTION_SWIPE_UP;
261     ret = touchGestureAdapter->OnGestureEvent(event, mode);
262     ASSERT_EQ(ret, true);
263     mode = GestureMode::ACTION_SWIPE_LEFT;
264     ret = touchGestureAdapter->OnGestureEvent(event, mode);
265     ASSERT_EQ(ret, true);
266     mode = GestureMode::ACTION_SWIPE_RIGHT;
267     ret = touchGestureAdapter->OnGestureEvent(event, mode);
268     ASSERT_EQ(ret, true);
269     mode = GestureMode::ACTION_PINCH_CLOSED;
270     ret = touchGestureAdapter->OnGestureEvent(event, mode);
271     ASSERT_EQ(ret, true);
272     mode = GestureMode::ACTION_PINCH_OPENED;
273     ret = touchGestureAdapter->OnGestureEvent(event, mode);
274     ASSERT_EQ(ret, true);
275     mode = GestureMode::ACTION_UNKNOWN;
276     ret = touchGestureAdapter->OnGestureEvent(event, mode);
277     ASSERT_EQ(ret, false);
278 }
279 
280 /**
281  * @tc.name: TouchGestureAdapterTest_SetGestureEnable_002
282  * @tc.desc: Test the funcation SetGestureEnable
283  * @tc.type: FUNC
284  * @tc.require:
285  */
286 HWTEST_F(TouchGestureAdapterTest, TouchGestureAdapterTest_SetGestureEnable_002, TestSize.Level1)
287 {
288     CALL_TEST_DEBUG;
289     TouchGestureType adapterType = TOUCH_GESTURE_TYPE_ALL;
290     std::shared_ptr<TouchGestureAdapter> nextAdapter = nullptr;
291     auto touchGestureAdapter = std::make_shared<TouchGestureAdapter>(adapterType, nextAdapter);
292     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->SetGestureCondition(true, adapterType, 0));
293     adapterType = TOUCH_GESTURE_TYPE_SWIPE;
294     touchGestureAdapter->gestureType_ = TOUCH_GESTURE_TYPE_SWIPE;
295     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->SetGestureCondition(true, adapterType, 0));
296     adapterType = TOUCH_GESTURE_TYPE_PINCH;
297     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->SetGestureCondition(true, adapterType, 0));
298     std::shared_ptr<OHOS::MMI::TouchGestureDetector::GestureListener> listener = nullptr;
299     touchGestureAdapter->gestureDetector_ = std::make_shared<TouchGestureDetector>(adapterType, listener);
300     adapterType = TOUCH_GESTURE_TYPE_ALL;
301     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->SetGestureCondition(true, adapterType, 0));
302     adapterType = TOUCH_GESTURE_TYPE_PINCH;
303     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->SetGestureCondition(true, adapterType, 0));
304     touchGestureAdapter->nextAdapter_ = nullptr;
305     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->SetGestureCondition(true, adapterType, 0));
306     touchGestureAdapter->nextAdapter_ = std::make_shared<TouchGestureAdapter>(adapterType, nextAdapter);
307     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->SetGestureCondition(true, adapterType, 0));
308 }
309 
310 /**
311  * @tc.name: TouchGestureAdapterTest_OnTouchEvent_003
312  * @tc.desc: Test the funcation OnTouchEvent
313  * @tc.type: FUNC
314  * @tc.require:
315  */
316 HWTEST_F(TouchGestureAdapterTest, TouchGestureAdapterTest_OnTouchEvent_003, TestSize.Level1)
317 {
318     CALL_TEST_DEBUG;
319     TouchGestureType adapterType = 5;
320     std::shared_ptr<TouchGestureAdapter> nextAdapter = nullptr;
321     auto touchGestureAdapter = std::make_shared<TouchGestureAdapter>(adapterType, nextAdapter);
322     std::shared_ptr<PointerEvent> event = PointerEvent::Create();
323     std::shared_ptr<OHOS::MMI::TouchGestureDetector::GestureListener> listener = nullptr;
324     touchGestureAdapter->gestureDetector_ = std::make_shared<TouchGestureDetector>(adapterType, listener);
325     event->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHSCREEN);
326     event->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN);
327     touchGestureAdapter->gestureType_ = 2;
328     touchGestureAdapter->state_ = TouchGestureAdapter::GestureState::SWIPE;
329     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
330     event->SetPointerAction(PointerEvent::POINTER_ACTION_UP);
331     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
332     event->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN);
333     touchGestureAdapter->state_ = TouchGestureAdapter::GestureState::IDLE;
334     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
335     event->SetPointerAction(PointerEvent::POINTER_ACTION_MOVE);
336     touchGestureAdapter->gestureStarted_ = true;
337     touchGestureAdapter->state_ = TouchGestureAdapter::GestureState::SWIPE;
338     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
339     touchGestureAdapter->state_ = TouchGestureAdapter::GestureState::IDLE;
340     event->SetPointerAction(PointerEvent::POINTER_ACTION_UP);
341     ASSERT_NO_FATAL_FAILURE(touchGestureAdapter->OnTouchEvent(event));
342 }
343 } // namespace MMI
344 } // namespace OHOS