0009_input: add tap gesture's test cases 43/194643/5
authorjeon <jhyuni.kang@samsung.com>
Thu, 6 Dec 2018 12:08:16 +0000 (21:08 +0900)
committerjeon <jhyuni.kang@samsung.com>
Fri, 7 Dec 2018 04:53:26 +0000 (13:53 +0900)
Change-Id: I4e015a69cec3e0d4823fc33ffe8ef00d197cbb7f

src/e_test_event.cpp
src/e_test_event.h
src/e_test_util.h
src/testcase/0009_input.cpp

index 60ad71e..6b91b35 100644 (file)
@@ -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);
+}
index 789b7c1..8cb3d02 100644 (file)
@@ -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);
index a922ce3..b16a76e 100644 (file)
@@ -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
index 07d5b97..c2226aa 100644 (file)
@@ -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