From: jeon Date: Thu, 6 Dec 2018 12:08:16 +0000 (+0900) Subject: 0009_input: add tap gesture's test cases X-Git-Tag: accepted/tizen/unified/20190103.061733~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d3e84d4c1458aa8754095d261d517e0ce57b6a26;p=platform%2Fcore%2Fuifw%2Fe-tizen-testcase.git 0009_input: add tap gesture's test cases Change-Id: I4e015a69cec3e0d4823fc33ffe8ef00d197cbb7f --- diff --git a/src/e_test_event.cpp b/src/e_test_event.cpp index 60ad71e..6b91b35 100644 --- a/src/e_test_event.cpp +++ b/src/e_test_event.cpp @@ -51,6 +51,12 @@ static void _cb_evas_smart_cb_launch_done(void *data, Evas_Object * obj, void *e static Eina_Bool _cb_work_timeout(void *data); static Eina_Bool _ev_wait_timeout(void *data); +/* callbacks - gesture */ +static Eina_Bool _cb_gesture_tap(void *data, int type, void *event); + +/* functions - gesture */ +static void _gesture_tap_generate(etRunner *runner); + /********************** listeners **********************/ @@ -735,6 +741,84 @@ etRunner::generateKeyEvent(const char *keyname, double delay) } Eina_Bool +etRunner::generateTouchDown(int idx, int x, int y) +{ + // Using efl_util_input_generate instead of generate event by eldbus + int ret = EFL_UTIL_ERROR_NONE; + + if (inputGenerator == NULL) + { + inputGenerator = efl_util_input_initialize_generator(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN); + work(); + } + + ret = efl_util_input_generate_touch(inputGenerator, + idx, + EFL_UTIL_INPUT_TOUCH_BEGIN, + x, y); + if (ret != EFL_UTIL_ERROR_NONE) + { + efl_util_input_deinitialize_generator(inputGenerator); + inputGenerator = NULL; + return EINA_FALSE; + } + + return EINA_TRUE; +} + +Eina_Bool +etRunner::generateTouchMove(int idx, int x, int y) +{ + // Using efl_util_input_generate instead of generate event by eldbus + int ret = EFL_UTIL_ERROR_NONE; + + if (inputGenerator == NULL) + { + inputGenerator = efl_util_input_initialize_generator(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN); + work(); + } + + ret = efl_util_input_generate_touch(inputGenerator, + idx, + EFL_UTIL_INPUT_TOUCH_UPDATE, + x, y); + if (ret != EFL_UTIL_ERROR_NONE) + { + efl_util_input_deinitialize_generator(inputGenerator); + inputGenerator = NULL; + return EINA_FALSE; + } + + return EINA_TRUE; +} + +Eina_Bool +etRunner::generateTouchUp(int idx, int x, int y) +{ + // Using efl_util_input_generate instead of generate event by eldbus + int ret = EFL_UTIL_ERROR_NONE; + + if (inputGenerator == NULL) + { + inputGenerator = efl_util_input_initialize_generator(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN); + work(); + } + + ret = efl_util_input_generate_touch(inputGenerator, + idx, + EFL_UTIL_INPUT_TOUCH_END, + x, y); + if (ret != EFL_UTIL_ERROR_NONE) + { + efl_util_input_deinitialize_generator(inputGenerator); + inputGenerator = NULL; + return EINA_FALSE; + } + + return EINA_TRUE; +} + +Eina_Bool etRunner::setSplashLaunch(const char *path, int type) { const char *effect_type = "launch"; @@ -910,6 +994,11 @@ etRunner::waitEvent(E_TC_Event_Type ev_type) evas_object_smart_callback_add(this->ev.win, launch_done, _cb_evas_smart_cb_launch_done, this); break; + case E_TC_EVENT_TYPE_GESTURE_TAP: + eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_TAP, _cb_gesture_tap, this); + _gesture_tap_generate(this); + break; + default: goto finish; break; @@ -1600,3 +1689,66 @@ _cb_key_delay_timer(void *data) return ECORE_CALLBACK_CANCEL; } +static Eina_Bool +_cb_gesture_tap(void *data, int type, void *event) +{ + etRunner *runner = (etRunner *)data; + efl_util_event_gesture_tap_s *ev = + (efl_util_event_gesture_tap_s *)event; + + if ((ev->fingers == (unsigned int)runner->ev.gesture.tap.fingers) && + (ev->repeats == (unsigned int)runner->ev.gesture.tap.repeats)) + { + runner->ev.response = E_TC_EVENT_TYPE_GESTURE_TAP; + elm_exit(); + } + + return ECORE_CALLBACK_PASS_ON; +} + +static Eina_Bool +_cb_gesture_tap_delay_timer(void *data) +{ + etRunner *runner = (etRunner *)data; + int i; + + for (i = 0; i < runner->ev.gesture.tap.fingers; i++) + { + if (!runner->ev.gesture.tap.pressed) + { + runner->generateTouchDown(i, 100 * (i + 1), 100 * (i + 1)); + } + else + { + runner->generateTouchUp(i, 100 * (i + 1), 100 * (i + 1)); + } + } + + runner->ev.gesture.tap.timer = NULL; + + runner->ev.gesture.tap.pressed = !runner->ev.gesture.tap.pressed; + if (!runner->ev.gesture.tap.pressed) + { + runner->ev.gesture.tap.current_repeats--; + } + + if (runner->ev.gesture.tap.current_repeats > 0) + { + runner->ev.gesture.tap.timer = ecore_timer_add(0.11, + _cb_gesture_tap_delay_timer, + runner); + } + + return ECORE_CALLBACK_CANCEL; +} + +static void +_gesture_tap_generate(etRunner *runner) +{ + runner->ev.gesture.tap.current_repeats = runner->ev.gesture.tap.repeats; + runner->ev.gesture.tap.pressed = EINA_FALSE; + + runner->ev.gesture.tap.timer = ecore_timer_add(1.0, + _cb_gesture_tap_delay_timer, + runner); +} diff --git a/src/e_test_event.h b/src/e_test_event.h index 789b7c1..8cb3d02 100644 --- a/src/e_test_event.h +++ b/src/e_test_event.h @@ -77,6 +77,17 @@ public: /* TODO: make it hidden */ unsigned int state_smcb; unsigned int type; } effect; + struct + { + struct + { + Ecore_Timer *timer; + int fingers; + int repeats; + int current_repeats; + Eina_Bool pressed; + } tap; + } gesture; } ev; public: @@ -123,6 +134,9 @@ public: Eina_Bool generateKeyPress(const char *key); Eina_Bool generateKeyRelease(const char *key); void generateKeyEvent(const char *keyname, double delay); + Eina_Bool generateTouchDown(int idx, int x, int y); + Eina_Bool generateTouchMove(int idx, int x, int y); + Eina_Bool generateTouchUp(int idx, int x, int y); Eina_Bool setSplashLaunch(const char *path, int type); Eina_Bool setSplashOwner(); Eina_Bool setWindowEffectType(etWin *tw, E_TC_Window_Effect_type type); diff --git a/src/e_test_util.h b/src/e_test_util.h index a922ce3..b16a76e 100644 --- a/src/e_test_util.h +++ b/src/e_test_util.h @@ -79,6 +79,7 @@ typedef enum _E_TC_Event_Type E_TC_EVENT_TYPE_INPUT_EVAS_KEY, E_TC_EVENT_TYPE_EFFECT_EVAS_CB, E_TC_EVENT_TYPE_EFFECT, + E_TC_EVENT_TYPE_GESTURE_TAP, E_TC_EVENT_TYPE_MAX } E_TC_Event_Type; @@ -167,6 +168,20 @@ typedef struct _Window_Info_List Eina_Bool retry; } Window_Info_List; +# define EFL_UTIL_RETURN_TO_STRING(type) \ + ((type == EFL_UTIL_ERROR_NONE)?"None": \ + (type == EFL_UTIL_ERROR_INVALID_PARAMETER)?"Invalid parameter": \ + (type == EFL_UTIL_ERROR_OUT_OF_MEMORY)?"Out of memory": \ + (type == EFL_UTIL_ERROR_PERMISSION_DENIED)?"Permission denied": \ + (type == EFL_UTIL_ERROR_NO_SUCH_DEVICE)?"No such device": \ + (type == EFL_UTIL_ERROR_INVALID_OPERATION)?"Invalid operation": \ + (type == EFL_UTIL_ERROR_NOT_SUPPORTED)?"Not supported": \ + (type == EFL_UTIL_ERROR_NOT_SUPPORTED_WINDOW_TYPE)?"Not supported window type": \ + (type == EFL_UTIL_ERROR_SCREENSHOT_INIT_FAIL)?"Screenshot init fail": \ + (type == EFL_UTIL_ERROR_SCREENSHOT_EXECUTION_FAIL)?"Screenshot execution fail": \ + (type == EFL_UTIL_ERROR_NO_RESOURCE_AVAILABLE)?"No resource available": \ + "Unknown") \ + #endif // end of E_TC_MAIN_H #ifdef __cplusplus diff --git a/src/testcase/0009_input.cpp b/src/testcase/0009_input.cpp index 07d5b97..c2226aa 100644 --- a/src/testcase/0009_input.cpp +++ b/src/testcase/0009_input.cpp @@ -290,3 +290,71 @@ TEST_F(etTestInput, keygrab_win) etRunner::get().ev.key.name = NULL; etRunner::get().ev.win = NULL; } + +TEST_F(etTestInput, gesture_tap22) +{ + int ret = EFL_UTIL_ERROR_NONE; + efl_util_gesture_h gesture_h; + efl_util_gesture_data tap_d; + + gesture_h = efl_util_gesture_initialize(); + ASSERT_TRUE(gesture_h != NULL) << "failed to initiation gesture system"; + + tap_d = efl_util_gesture_tap_new(gesture_h, 2, 2); + ASSERT_TRUE(tap_d != NULL) << "failed to generate tap grab data"; + + ret = efl_util_gesture_grab(gesture_h, tap_d); + ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to grab tap gesture: (ret: " + << EFL_UTIL_RETURN_TO_STRING(ret) << ")"; + + etRunner::get().ev.gesture.tap.fingers = 2; + etRunner::get().ev.gesture.tap.repeats = 2; + + ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_GESTURE_TAP); + ASSERT_TRUE(ret); + + etRunner::get().ev.gesture.tap.fingers = 0; + etRunner::get().ev.gesture.tap.repeats = 0; + + ret = efl_util_gesture_ungrab(gesture_h, tap_d); + ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to ungrab tap gesture: (ret: " + << EFL_UTIL_RETURN_TO_STRING(ret) << ")"; + + efl_util_gesture_tap_free(gesture_h, tap_d); + ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to free tap grab data: (ret: " + << EFL_UTIL_RETURN_TO_STRING(ret) << ")"; +} + +TEST_F(etTestInput, gesture_tap23) +{ + int ret = EFL_UTIL_ERROR_NONE; + efl_util_gesture_h gesture_h; + efl_util_gesture_data tap_d; + + gesture_h = efl_util_gesture_initialize(); + ASSERT_TRUE(gesture_h != NULL) << "failed to initiation gesture system"; + + tap_d = efl_util_gesture_tap_new(gesture_h, 2, 3); + ASSERT_TRUE(tap_d != NULL) << "failed to generate tap grab data"; + + ret = efl_util_gesture_grab(gesture_h, tap_d); + ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to grab tap gesture: (ret: " + << EFL_UTIL_RETURN_TO_STRING(ret) << ")"; + + etRunner::get().ev.gesture.tap.fingers = 2; + etRunner::get().ev.gesture.tap.repeats = 3; + + ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_GESTURE_TAP); + ASSERT_TRUE(ret); + + etRunner::get().ev.gesture.tap.fingers = 0; + etRunner::get().ev.gesture.tap.repeats = 0; + + ret = efl_util_gesture_ungrab(gesture_h, tap_d); + ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to ungrab tap gesture: (ret: " + << EFL_UTIL_RETURN_TO_STRING(ret) << ")"; + + efl_util_gesture_tap_free(gesture_h, tap_d); + ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to free tap grab data: (ret: " + << EFL_UTIL_RETURN_TO_STRING(ret) << ")"; +} \ No newline at end of file