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