0009_input: add TC for checking mouse in/out event 58/323058/2
authorJihoon Kim <jihoon48.kim@samsung.com>
Tue, 22 Apr 2025 08:41:31 +0000 (17:41 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Tue, 22 Apr 2025 10:58:54 +0000 (19:58 +0900)
Change-Id: I81dfa027b5ce450b8e805ccff78e49bf5e30aed9
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/e_test_event.cpp
src/e_test_util.h
src/testcase/0009_input.cpp

index b173ba2324fca0dc8f4ad17132927c7dda7c7b91..bacba87eda9ffe925035c56dd1b1109add8e8c32 100644 (file)
@@ -131,6 +131,9 @@ static Eina_Bool _cb_ecore_mouse_relative_move(void *data, int type, void *event
 static void _cb_evas_key_down(void * data, Evas * evas, Evas_Object * obj, void * event_info);
 static void _cb_evas_key_up(void * data, Evas * evas, Evas_Object * obj, void * event_info);
 
+static void _cb_evas_mouse_in(void *data, Evas *evas, Evas_Object *obj, void *event_info);
+static void _cb_evas_mouse_out(void *data, Evas *evas, Evas_Object *obj, void *event_info);
+
 /* callbacks -  smart  */
 static void _cb_evas_smart_cb_effect_started(void *data, Evas_Object * obj, void *event_info);
 static void _cb_evas_smart_cb_effect_done(void *data, Evas_Object * obj, void *event_info);
@@ -1450,6 +1453,18 @@ etRunner::waitEvent(etWin *win, E_TC_Event_Type ev_type)
 
         ev.key.evas_state = EINA_FALSE;
      }
+   else if (ev_type == E_TC_EVENT_TYPE_INPUT_EVAS_MOUSE_IN)
+     {
+        ev.elm_win = win->elm_win;
+        ev.native_win = win->native_win;
+        evas_object_event_callback_add(this->ev.elm_win, EVAS_CALLBACK_MOUSE_IN, _cb_evas_mouse_in, this);
+     }
+   else if (ev_type == E_TC_EVENT_TYPE_INPUT_EVAS_MOUSE_OUT)
+     {
+        ev.elm_win = win->elm_win;
+        ev.native_win = win->native_win;
+        evas_object_event_callback_add(this->ev.elm_win, EVAS_CALLBACK_MOUSE_OUT, _cb_evas_mouse_out, this);
+     }
 
    // pre-waiting events
    if ((ev_type == E_TC_EVENT_TYPE_INPUT_ECORE_KEY) ||
@@ -2735,6 +2750,32 @@ _cb_evas_key_up(void * data, Evas * evas, Evas_Object * obj, void * event_info)
    evas_object_event_callback_del(runner->ev.elm_win, EVAS_CALLBACK_KEY_UP, _cb_evas_key_up);
 }
 
+static void
+_cb_evas_mouse_in(void *data, Evas * evas, Evas_Object * obj, void * event_info)
+{
+   etRunner *runner = (etRunner *)data;
+
+   if (runner->ev.elm_win == obj)
+     {
+        runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_INPUT_EVAS_MOUSE_IN);
+     }
+
+   evas_object_event_callback_del(runner->ev.elm_win, EVAS_CALLBACK_MOUSE_IN, _cb_evas_mouse_in);
+}
+
+static void
+_cb_evas_mouse_out(void *data, Evas * evas, Evas_Object * obj, void * event_info)
+{
+   etRunner *runner = (etRunner *)data;
+
+   if (runner->ev.elm_win == obj)
+     {
+        runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_INPUT_EVAS_MOUSE_OUT);
+     }
+
+   evas_object_event_callback_del(runner->ev.elm_win, EVAS_CALLBACK_MOUSE_OUT, _cb_evas_mouse_out);
+}
+
 /* callbacks -  smart object */
 static void
 _cb_evas_smart_cb_effect_started(void *data, Evas_Object * obj, void *event_info)
index 55d9fa9991e6d0a78eb9164f7f5be6797bdcb837..5a9a636793140b716de9698dba66da56a8c480ea 100644 (file)
@@ -90,6 +90,8 @@ typedef enum _E_TC_Event_Type
    E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE,
    E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE_RELATIVE_MOVE,
    E_TC_EVENT_TYPE_INPUT_EVAS_KEY,
+   E_TC_EVENT_TYPE_INPUT_EVAS_MOUSE_IN,
+   E_TC_EVENT_TYPE_INPUT_EVAS_MOUSE_OUT,
    E_TC_EVENT_TYPE_EFFECT_EVAS_CB,
    E_TC_EVENT_TYPE_EFFECT,
    E_TC_EVENT_TYPE_GESTURE_TAP,
index 71310822b81711662bebbd2e8feb676e9f2b131b..2984354c4a1999a69104f8f4e547dc54600597c3 100644 (file)
@@ -1326,6 +1326,44 @@ TEST_F(etTestInput, mouse_wheel_down)
    ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
 }
 
+TEST_F(etTestInput, mouse_in_and_out)
+{
+   int ret = EFL_UTIL_ERROR_NONE;
+
+   etWin *tw_big = initNormalWin("TCWin_TouchEvent_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_TouchEvent_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
+
+   ret = inputgen_h->generateTouchDown(0, 200, 200);
+   ASSERT_TRUE(ret);
+
+   ASSERT_EVENT(tw_big, E_TC_EVENT_TYPE_INPUT_EVAS_MOUSE_IN);
+
+   ret = inputgen_h->generateTouchUp(0, 200, 200);
+   ASSERT_TRUE(ret);
+
+   ret = inputgen_h->generateTouchDown(0, 50, 50);
+   ASSERT_TRUE(ret);
+
+   ret = inputgen_h->generateTouchUp(0, 50, 50);
+   ASSERT_TRUE(ret);
+
+   ASSERT_EVENT(tw_big, E_TC_EVENT_TYPE_INPUT_EVAS_MOUSE_OUT);
+
+   etRunner::get().ev.elm_win = NULL;
+
+   ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
 TEST_F(etTestInput, display_inputs_get)
 {
    Ecore_Wl2_Display *display = NULL;