9_input: add TC for multi touch grab 86/323586/4
authorJihoon Kim <jihoon48.kim@samsung.com>
Wed, 30 Apr 2025 08:35:26 +0000 (17:35 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Wed, 7 May 2025 06:20:24 +0000 (15:20 +0900)
Change-Id: Iffa763facd21e71c4bcd1d377d1a52b34b85e72b
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/testcase/0009_input.cpp

index f508676507c37f3415ab018da3af45cf599728c6..b61088665cca4c70166bb878da74a24033cef259 100644 (file)
@@ -1994,6 +1994,7 @@ TEST_F(etTestInput, touch_multi_down)
    InputGenHandler inputgen_h = std::make_shared<etInputGenHandler>(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, true);
    etRunner::get().work(1.0); // wait for touch device enabled
 
+   // finger 0 - down
    etRunner::get().ev.mouse.buttons = 1;
    etRunner::get().ev.mouse.x = 50;
    etRunner::get().ev.mouse.y = 50;
@@ -2002,6 +2003,7 @@ TEST_F(etTestInput, touch_multi_down)
    ASSERT_TRUE(ret);
    ASSERT_EVENT(tw_small, E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE_DOWN);
 
+   // finger 1 - down
    etRunner::get().ev.mouse.multi_device = 1;
    etRunner::get().ev.mouse.x = 200;
    etRunner::get().ev.mouse.y = 200;
@@ -2012,10 +2014,12 @@ TEST_F(etTestInput, touch_multi_down)
    ASSERT_TRUE(ret);
    ASSERT_EVENT(tw_small, E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE_DOWN);
 
+   // finger 1 - up
    ret = inputgen_h->generateTouchUp(1, 200, 200);
    ASSERT_TRUE(ret);
    ASSERT_EVENT(tw_small, E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE_UP);
 
+   // finger 0 - up
    etRunner::get().ev.mouse.multi_device = 0;
    etRunner::get().ev.mouse.x = 50;
    etRunner::get().ev.mouse.y = 50;
@@ -2026,6 +2030,73 @@ TEST_F(etTestInput, touch_multi_down)
    ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
 }
 
+TEST_F(etTestInput, touch_multi_down_up_down)
+{
+   int ret = EFL_UTIL_ERROR_NONE;
+
+   etWin *tw_big = initNormalWin("TCWin_TouchMultiEvent_Big", 0, 0, 500, 500);
+   ASSERT_TRUE(tw_big != NULL) << "failed to initiation Big window";
+   showTCWin(tw_big);
+   ASSERT_VIS_ON(tw_big);
+
+   etWin *tw_small = initNormalWin("TCWin_TouchMultiEvent_Small", 0, 0, 100, 100);
+   ASSERT_TRUE(tw_small != NULL) << "failed to initiation Small window";
+   showTCWin(tw_small);
+   ASSERT_VIS_ON(tw_small);
+
+   InputGenHandler inputgen_h = std::make_shared<etInputGenHandler>(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, true);
+   etRunner::get().work(1.0); // wait for touch device enabled
+
+   // finger 0 - down
+   etRunner::get().ev.mouse.buttons = 1;
+   etRunner::get().ev.mouse.x = 50;
+   etRunner::get().ev.mouse.y = 50;
+
+   ret = inputgen_h->generateTouchDown(0, 50, 50);
+   ASSERT_TRUE(ret);
+   ASSERT_EVENT(tw_small, E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE_DOWN);
+
+   // finger 1 - down
+   etRunner::get().ev.mouse.multi_device = 1;
+   etRunner::get().ev.mouse.x = 200;
+   etRunner::get().ev.mouse.y = 200;
+
+   // Even if the second mouse down position is on the tw_big window, an event occurs on the tw_small window
+   // because mouse events are grabbed to tw_small window after the first mouse down position is on it.
+   ret = inputgen_h->generateTouchDown(1, 200, 200);
+   ASSERT_TRUE(ret);
+   ASSERT_EVENT(tw_small, E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE_DOWN);
+
+   // finger 0 - up
+   etRunner::get().ev.mouse.multi_device = 0;
+   etRunner::get().ev.mouse.x = 50;
+   etRunner::get().ev.mouse.y = 50;
+
+   ret = inputgen_h->generateTouchUp(0, 50, 50);
+   ASSERT_TRUE(ret);
+   ASSERT_EVENT(tw_small, E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE_UP);
+
+   // finger 0 - down
+   etRunner::get().ev.mouse.buttons = 1;
+   etRunner::get().ev.mouse.multi_device = 0;
+   etRunner::get().ev.mouse.x = 200;
+   etRunner::get().ev.mouse.y = 100;
+
+   // Even if the first finger down position is on the tw_big window, an event occurs on the tw_small window
+   // because mouse events are grabbed to tw_small window until all fingers are released.
+   ret = inputgen_h->generateTouchDown(0, 200, 100);
+   ASSERT_TRUE(ret);
+   ASSERT_EVENT(tw_small, E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE_DOWN);
+
+   // finger 0 - up
+   ret = inputgen_h->generateTouchUp(0, 200, 100);
+
+   // finger 1 - up
+   ret = inputgen_h->generateTouchUp(1, 200, 100);
+
+   ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
 #ifndef DISABLE_GESTURE_TESTS
 TEST_F(etTestInput, gesture_tap22)
 {