0009_input: add edge swipe gesture testcases 07/196407/3
authorjeon <jhyuni.kang@samsung.com>
Fri, 28 Dec 2018 05:19:03 +0000 (14:19 +0900)
committerjeon <jhyuni.kang@samsung.com>
Wed, 2 Jan 2019 03:46:46 +0000 (12:46 +0900)
Change-Id: Ibfd9bc5013d9328dee95fb1ecd97ee1c2e049191

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

index 62725e0e1b5cc24e07af091d3b6c5472370882e9..fea6f237242c739ceb1adf1ccddb7fefbd069d93 100644 (file)
@@ -20,6 +20,52 @@ _cb_resource_id(void *data,
    etRunner::get().finishWork();
 }
 
+static void
+_cb_geometry(void *data EINA_UNUSED,
+             struct wl_output *wl_output EINA_UNUSED,
+             int x, int y, int w, int h,
+             int subpixel EINA_UNUSED,
+             const char *make EINA_UNUSED,
+             const char *model EINA_UNUSED,
+             int transform EINA_UNUSED)
+{
+   etRunner::get().output.x = x;
+   etRunner::get().output.y = y;
+   etRunner::get().output.w = w;
+   etRunner::get().output.h = h;
+}
+
+static void
+_cb_mode(void *data EINA_UNUSED,
+         struct wl_output *wl_output EINA_UNUSED,
+         unsigned int flags,
+         int w, int h,
+         int refresh EINA_UNUSED)
+{
+   if (flags & WL_OUTPUT_MODE_CURRENT)
+     {
+        etRunner::get().output.w = w;
+        etRunner::get().output.h = h;
+     }
+
+   etRunner::get().finishWork();
+}
+
+static void
+_cb_done(void *data EINA_UNUSED,
+         struct wl_output *output EINA_UNUSED)
+{
+   ;
+}
+
+static void
+_cb_scale(void *data EINA_UNUSED,
+          struct wl_output *output EINA_UNUSED,
+          int scale EINA_UNUSED)
+{
+   ;
+}
+
 /* callbacks - method */
 static void _cb_method_win_info_get(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
 static void _cb_method_win_info_list_get(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
@@ -53,9 +99,11 @@ static Eina_Bool _ev_wait_timeout(void *data);
 
 /* callbacks - gesture */
 static Eina_Bool _cb_gesture_tap(void *data, int type, void *event);
+static Eina_Bool _cb_gesture_edge_swipe(void *data, int type, void *event);
 
 /* functions - gesture */
 static void _gesture_tap_generate(etRunner *runner);
+static void _gesture_edge_swipe_generate(etRunner *runner);
 
 /**********************
       listeners
@@ -65,6 +113,14 @@ static const struct tizen_resource_listener _e_test_tizen_resource_listener =
    _cb_resource_id,
 };
 
+static const struct wl_output_listener _e_test_output_listener =
+{
+   _cb_geometry,
+   _cb_mode,
+   _cb_done,
+   _cb_scale
+};
+
 /**********************
    class etRunner
  **********************/
@@ -995,6 +1051,11 @@ etRunner::waitEvent(E_TC_Event_Type ev_type)
          _gesture_tap_generate(this);
          break;
 
+      case E_TC_EVENT_TYPE_GESTURE_EDGE_SWIPE:
+         eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_EDGE_SWIPE, _cb_gesture_edge_swipe, this);
+         _gesture_edge_swipe_generate(this);
+         break;
+
       default:
          goto finish;
          break;
@@ -1173,6 +1234,23 @@ etRunner::initProtocols()
                                  &tizen_launch_effect_interface,
                                  (global->version > 1)? 1 : global->version);
           }
+        if (!strcmp(global->interface, "wl_output"))
+          {
+             wlOutput = (struct wl_output *)
+                wl_registry_bind(registry,
+                                 global->id,
+                                 &wl_output_interface,
+                                 (global->version > 2)? 2 : global->version);
+             wl_output_add_listener(wlOutput, &_e_test_output_listener, NULL);
+
+             work();
+
+             if (wlOutput)
+               {
+                  wl_output_destroy(wlOutput);
+                  wlOutput = NULL;
+               }
+          }
      }
 
    EINA_SAFETY_ON_NULL_GOTO(tzPolicy, err);
@@ -1713,7 +1791,7 @@ _cb_gesture_tap_delay_timer(void *data)
           }
      }
 
-   runner->ev.gesture.tap.timer = NULL;
+   runner->ev.gesture.timer = NULL;
 
    runner->ev.gesture.tap.pressed = !runner->ev.gesture.tap.pressed;
    if (!runner->ev.gesture.tap.pressed)
@@ -1723,9 +1801,9 @@ _cb_gesture_tap_delay_timer(void *data)
 
    if (runner->ev.gesture.tap.current_repeats > 0)
      {
-        runner->ev.gesture.tap.timer = ecore_timer_add(0.11,
-                                                       _cb_gesture_tap_delay_timer,
-                                                       runner);
+        runner->ev.gesture.timer = ecore_timer_add(0.11,
+                                                   _cb_gesture_tap_delay_timer,
+                                                   runner);
      }
 
    return ECORE_CALLBACK_CANCEL;
@@ -1737,7 +1815,141 @@ _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);
+   runner->ev.gesture.timer = ecore_timer_add(1.0,
+                                              _cb_gesture_tap_delay_timer,
+                                              runner);
 }
+
+static Eina_Bool
+_cb_gesture_edge_swipe(void *data, int type, void *event)
+{
+   etRunner *runner = (etRunner *)data;
+   efl_util_event_gesture_edge_swipe_s *ev =
+     (efl_util_event_gesture_edge_swipe_s *)event;
+
+   if ((ev->fingers == (unsigned int)runner->ev.gesture.edge_swipe.fingers) &&
+       (ev->edge == (unsigned int)runner->ev.gesture.edge_swipe.edge))
+     {
+        runner->ev.response = E_TC_EVENT_TYPE_GESTURE_EDGE_SWIPE;
+        if (runner->ev.gesture.timer)
+          {
+             runner->ev.gesture.edge_swipe.get_event = EINA_TRUE;
+          }
+        else
+          elm_exit();
+     }
+
+   return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_cb_gesture_edge_swipe_delay_timer(void *data)
+{
+   etRunner *runner = (etRunner *)data;
+   int i, cnt, fingers, w, h;
+   efl_util_gesture_edge_e edge;
+
+   cnt = ++runner->ev.gesture.edge_swipe.touch_count;
+   fingers = runner->ev.gesture.edge_swipe.fingers;
+   edge = runner->ev.gesture.edge_swipe.edge;
+   w = runner->output.w - 1;
+   h = runner->output.h - 1;
+
+   if (cnt == 1)
+     {
+        for (i = 0; i < fingers; i++)
+          {
+             switch (edge)
+               {
+                  case EFL_UTIL_GESTURE_EDGE_TOP:
+                    runner->generateTouchDown(i, 100 * (i + 1), 1);
+                    break;
+                  case EFL_UTIL_GESTURE_EDGE_RIGHT:
+                    runner->generateTouchDown(i, w - 1, 100 * (i + 1));
+                    break;
+                  case EFL_UTIL_GESTURE_EDGE_BOTTOM:
+                    runner->generateTouchDown(i, 100 * (i + 1), h - 1);
+                    break;
+                  case EFL_UTIL_GESTURE_EDGE_LEFT:
+                    runner->generateTouchDown(i, 1, 100 * (i + 1));
+                    break;
+                  default:
+                    break;
+               }
+          }
+     }
+   else if (cnt < 5)
+     {
+        for (i = 0; i < fingers; i++)
+          {
+             switch (edge)
+               {
+                  case EFL_UTIL_GESTURE_EDGE_TOP:
+                    runner->generateTouchMove(i, 100 * (i + 1), 40 * cnt * cnt);
+                    break;
+                  case EFL_UTIL_GESTURE_EDGE_RIGHT:
+                    runner->generateTouchMove(i, (w - 1) - (40 * cnt * cnt), 100 * (i + 1));
+                    break;
+                  case EFL_UTIL_GESTURE_EDGE_BOTTOM:
+                    runner->generateTouchMove(i, 100 * (i + 1), (h - 1) - (40 * cnt * cnt));
+                    break;
+                  case EFL_UTIL_GESTURE_EDGE_LEFT:
+                    runner->generateTouchMove(i, 40 * cnt * cnt, 100 * (i + 1));
+                    break;
+                  default:
+                    break;
+               }
+          }
+     }
+   else
+     {
+        cnt--;
+        for (i = 0; i < fingers; i++)
+          {
+             switch (edge)
+               {
+                  case EFL_UTIL_GESTURE_EDGE_TOP:
+                    runner->generateTouchUp(i, 100 * (i + 1), 40 * cnt * cnt);
+                    break;
+                  case EFL_UTIL_GESTURE_EDGE_RIGHT:
+                    runner->generateTouchUp(i, (w - 1) - (40 * cnt * cnt), 100 * (i + 1));
+                    break;
+                  case EFL_UTIL_GESTURE_EDGE_BOTTOM:
+                    runner->generateTouchUp(i, 100 * (i + 1), (h - 1) - (40 * cnt * cnt));
+                    break;
+                  case EFL_UTIL_GESTURE_EDGE_LEFT:
+                    runner->generateTouchUp(i, 40 * cnt * cnt, 100 * (i + 1));
+                    break;
+                  default:
+                    break;
+               }
+          }
+
+        runner->ev.gesture.timer = NULL;
+        if (runner->ev.gesture.edge_swipe.get_event)
+          {
+             runner->ev.gesture.edge_swipe.get_event = EINA_FALSE;
+             elm_exit();
+          }
+        return ECORE_CALLBACK_CANCEL;
+     }
+
+   runner->ev.gesture.timer = NULL;
+   runner->ev.gesture.timer = ecore_timer_add(0.11,
+                                              _cb_gesture_edge_swipe_delay_timer,
+                                              runner);
+
+   return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_gesture_edge_swipe_generate(etRunner *runner)
+{
+   runner->ev.gesture.edge_swipe.touch_count = 0;
+   runner->ev.gesture.edge_swipe.get_event = EINA_FALSE;
+
+   runner->ev.gesture.timer = ecore_timer_add(1.0,
+                                              _cb_gesture_edge_swipe_delay_timer,
+                                              runner);
+}
+
index faf4513e31657682ccfdcfa4e96c78850e648757..81373c29de6750c157fabb8d29bbefdc023117bb 100644 (file)
@@ -18,6 +18,7 @@ private:
       tzSurface = NULL;
       tzlaunch_effect = NULL;
       tzlaunch_splash =  NULL;
+      wlOutput = NULL;
       ev.expire_timer = NULL;
       ev.request = E_TC_EVENT_TYPE_NONE;
       ev.response = E_TC_EVENT_TYPE_NONE;
@@ -55,6 +56,7 @@ private:
    struct tizen_surface *tzSurface;
    struct tizen_launch_effect *tzlaunch_effect;
    struct tizen_launch_splash *tzlaunch_splash;
+   struct wl_output *wlOutput;
 
    Eina_List *listWinInfo;
 
@@ -79,16 +81,27 @@ public: /* TODO: make it hidden */
           } effect;
         struct
           {
+             Ecore_Timer *timer;
              struct
                {
-                  Ecore_Timer *timer;
                   int fingers;
                   int repeats;
                   int current_repeats;
                   Eina_Bool pressed;
                } tap;
+             struct
+               {
+                  int fingers;
+                  efl_util_gesture_edge_e edge;
+                  int touch_count;
+                  Eina_Bool get_event;
+               } edge_swipe;
           } gesture;
      } ev;
+   struct
+     {
+        int x, y, w, h;
+     } output;
 
 public:
    Eina_Bool     init();
index b16a76ec4763e726dfce3430199c71f83955a02f..cbc05cd6f45f34ba2ee1688be2aa6b372f0e1d3b 100644 (file)
@@ -80,6 +80,7 @@ typedef enum _E_TC_Event_Type
    E_TC_EVENT_TYPE_EFFECT_EVAS_CB,
    E_TC_EVENT_TYPE_EFFECT,
    E_TC_EVENT_TYPE_GESTURE_TAP,
+   E_TC_EVENT_TYPE_GESTURE_EDGE_SWIPE,
    E_TC_EVENT_TYPE_MAX
 } E_TC_Event_Type;
 
index c2226aa5cbec83a366de1f86373d9f1453600fa7..da194a60770b0158b6fe76617c8415148db0076f 100644 (file)
@@ -13,6 +13,7 @@ protected:
    etWin *tw_topposition = NULL;
    etWin *tw_orexcl = NULL;
    etWin *tw_excl = NULL;
+   etWin *tw_gesture = NULL;
 };
 
 TEST_F(etTestInput, keygrab_nowin_shared)
@@ -357,4 +358,83 @@ TEST_F(etTestInput, gesture_tap23)
    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) << ")";
+}
+
+static void
+_test_gesture_edge_swipe(int fingers, efl_util_gesture_edge_e edge)
+{
+   int ret = EFL_UTIL_ERROR_NONE;
+   efl_util_gesture_h gesture_h;
+   efl_util_gesture_data edge_swipe_d;
+
+   gesture_h = efl_util_gesture_initialize();
+   ASSERT_TRUE(gesture_h != NULL) << "failed to initialize gesture system";
+
+   edge_swipe_d = efl_util_gesture_edge_swipe_new(gesture_h, fingers, edge);
+   ASSERT_TRUE(edge_swipe_d != NULL) << "failed to generate edge swipe grab data";
+
+   ret = efl_util_gesture_grab(gesture_h, edge_swipe_d);
+   ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to grab edge swipe gesture: (ret: "
+     << EFL_UTIL_RETURN_TO_STRING(ret) << ")";
+
+   etRunner::get().ev.gesture.edge_swipe.fingers = fingers;
+   etRunner::get().ev.gesture.edge_swipe.edge = edge;
+
+   ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_GESTURE_EDGE_SWIPE);
+   ASSERT_TRUE(ret);
+
+   etRunner::get().ev.gesture.edge_swipe.fingers = 0;
+   etRunner::get().ev.gesture.edge_swipe.edge = EFL_UTIL_GESTURE_EDGE_NONE;;
+
+   ret = efl_util_gesture_ungrab(gesture_h, edge_swipe_d);
+   ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to grab edge swipe gesture: (ret: "
+     << EFL_UTIL_RETURN_TO_STRING(ret) << ")";
+
+   ret = efl_util_gesture_edge_swipe_free(gesture_h, edge_swipe_d);
+   ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to free tap grab data: (ret: "
+     << EFL_UTIL_RETURN_TO_STRING(ret) << ")";
+
+   ret = efl_util_gesture_deinitialize(gesture_h);
+   ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to deinitialize gesture system: (ret: "
+     << EFL_UTIL_RETURN_TO_STRING(ret) << ")";
+}
+
+TEST_F(etTestInput, gesture_edge_swipe11)
+{
+   _test_gesture_edge_swipe(1, EFL_UTIL_GESTURE_EDGE_TOP);
+}
+
+TEST_F(etTestInput, gesture_edge_swipe12)
+{
+   _test_gesture_edge_swipe(1, EFL_UTIL_GESTURE_EDGE_RIGHT);
+}
+
+TEST_F(etTestInput, gesture_edge_swipe13)
+{
+   _test_gesture_edge_swipe(1, EFL_UTIL_GESTURE_EDGE_BOTTOM);
+}
+
+TEST_F(etTestInput, gesture_edge_swipe14)
+{
+   _test_gesture_edge_swipe(1, EFL_UTIL_GESTURE_EDGE_LEFT);
+}
+
+TEST_F(etTestInput, gesture_edge_swipe21)
+{
+   _test_gesture_edge_swipe(2, EFL_UTIL_GESTURE_EDGE_TOP);
+}
+
+TEST_F(etTestInput, gesture_edge_swipe22)
+{
+   _test_gesture_edge_swipe(2, EFL_UTIL_GESTURE_EDGE_RIGHT);
+}
+
+TEST_F(etTestInput, gesture_edge_swipe23)
+{
+   _test_gesture_edge_swipe(2, EFL_UTIL_GESTURE_EDGE_BOTTOM);
+}
+
+TEST_F(etTestInput, gesture_edge_swipe24)
+{
+   _test_gesture_edge_swipe(2, EFL_UTIL_GESTURE_EDGE_LEFT);
 }
\ No newline at end of file