tests/efl_ui: begin some gesture unit tests

adds basic testing for taps and flick

Differential Revision: https://phab.enlightenment.org/D11029
This commit is contained in:
Mike Blumenkrantz 2020-01-06 12:30:45 -05:00 committed by Marcel Hollerbach
parent 8cde7424c2
commit 18e9bc9a9f
4 changed files with 160 additions and 0 deletions

View File

@ -14,6 +14,7 @@ static const Efl_Test_Case etc[] = {
{ "efl_ui_config", efl_ui_test_config},
{ "efl_ui_focus", efl_ui_test_focus},
{ "efl_ui_focus_sub", efl_ui_test_focus_sub},
{ "efl_ui_gesture", efl_ui_test_gesture},
{ "efl_ui_box", efl_ui_test_box},
{ "efl_ui_box_flow", efl_ui_test_box_flow},
{ "efl_ui_box_stack", efl_ui_test_box_stack},

View File

@ -33,6 +33,7 @@ void efl_ui_test_image(TCase *tc);
void efl_ui_test_callback(TCase *tc);
void efl_ui_test_focus(TCase *tc);
void efl_ui_test_focus_sub(TCase *tc);
void efl_ui_test_gesture(TCase *tc);
void efl_ui_model(TCase *tc);
void efl_ui_test_widget(TCase *tc);
void efl_ui_test_spotlight(TCase *tc);

View File

@ -0,0 +1,157 @@
#ifdef HAVE_CONFIG_H
# include "elementary_config.h"
#endif
#include <Efl_Ui.h>
#include "efl_ui_suite.h"
/*
typedef enum
{
EFL_GESTURE_STATE_NONE = 0,
EFL_GESTURE_STATE_STARTED = 1,
EFL_GESTURE_STATE_UPDATED,
EFL_GESTURE_STATE_FINISHED,
EFL_GESTURE_STATE_CANCELED
} Efl_Canvas_Gesture_State;
*/
enum
{
TAP,
LONG_TAP,
DOUBLE_TAP,
TRIPLE_TAP,
MOMENTUM,
FLICK,
ZOOM,
LAST
};
static int count[LAST][4] = {0};
/* macros to simplify checking gesture counts */
#define CHECK_START(type, val) \
ck_assert_int_eq(count[(type)][EFL_GESTURE_STATE_STARTED - 1], (val))
#define CHECK_UPDATE(type, val) \
ck_assert_int_eq(count[(type)][EFL_GESTURE_STATE_UPDATED - 1], (val))
#define CHECK_FINISH(type, val) \
ck_assert_int_eq(count[(type)][EFL_GESTURE_STATE_FINISHED - 1], (val))
#define CHECK_CANCEL(type, val) \
ck_assert_int_eq(count[(type)][EFL_GESTURE_STATE_CANCELED - 1], (val))
#define CHECK_ALL(type, ...) \
do {\
int state_vals[] = {__VA_ARGS__}; \
for (int i = 0; i < 4; i++) \
ck_assert_int_eq(count[(type)][i], state_vals[i]); \
} while (0)
#define CHECK_ZERO(type) CHECK_ALL((type), 0, 0, 0, 0)
#define RESET memset(count, 0, sizeof(count))
static void
gesture_cb(void *data , const Efl_Event *ev)
{
Efl_Canvas_Gesture *g = ev->info;
int *count = data;
/* increment counter for event state which has been processed */
count[efl_gesture_state_get(g) - 1]++;
}
static Eo *
setup(void)
{
Eo *win, *rect;
RESET;
win = win_add();
efl_gfx_entity_size_set(win, EINA_SIZE2D(100, 100));
rect = efl_add(EFL_CANVAS_RECTANGLE_CLASS, win);
efl_content_set(win, rect);
#define WATCH(type) \
efl_event_callback_add(rect, EFL_EVENT_GESTURE_##type, gesture_cb, &count[(type)])
WATCH(TAP);
WATCH(LONG_TAP);
WATCH(DOUBLE_TAP);
WATCH(TRIPLE_TAP);
WATCH(MOMENTUM);
WATCH(FLICK);
WATCH(ZOOM);
get_me_to_those_events(win);
return rect;
}
EFL_START_TEST(test_efl_ui_gesture_taps)
{
Eo *rect = setup();
/* basic tap */
click_object(rect);
CHECK_ALL(TAP, 1, 0, 1, 0);
CHECK_ALL(LONG_TAP, 1, 0, 0, 1);
CHECK_ALL(DOUBLE_TAP, 1, 1, 0, 0);
CHECK_ALL(TRIPLE_TAP, 1, 1, 0, 0);
CHECK_ZERO(MOMENTUM);
CHECK_ZERO(FLICK);
CHECK_ZERO(ZOOM);
RESET;
/* add a second tap */
click_object(rect);
CHECK_ALL(TAP, 1, 0, 1, 0);
CHECK_ALL(LONG_TAP, 1, 0, 0, 1);
/* UPDATE -> FINISH */
CHECK_ALL(DOUBLE_TAP, 0, 1, 1, 0);
CHECK_ALL(TRIPLE_TAP, 0, 2, 0, 0);
CHECK_ZERO(MOMENTUM);
CHECK_ZERO(FLICK);
CHECK_ZERO(ZOOM);
RESET;
/* add a third tap */
click_object(rect);
CHECK_ALL(TAP, 1, 0, 1, 0);
CHECK_ALL(LONG_TAP, 1, 0, 0, 1);
/* UPDATE -> FINISH */
CHECK_ALL(DOUBLE_TAP, 1, 1, 0, 0);
CHECK_ALL(TRIPLE_TAP, 0, 1, 1, 0);
CHECK_ZERO(MOMENTUM);
CHECK_ZERO(FLICK);
CHECK_ZERO(ZOOM);
}
EFL_END_TEST
EFL_START_TEST(test_efl_ui_gesture_flick)
{
Eo *rect = setup();
/* basic flick */
drag_object(rect, 0, 0, 75, 0, EINA_FALSE);
/* canceled */
CHECK_ALL(TAP, 1, 0, 0, 1);
/* canceled */
CHECK_ALL(LONG_TAP, 1, 0, 0, 1);
/* canceled */
CHECK_ALL(DOUBLE_TAP, 1, 0, 0, 1);
/* canceled */
CHECK_ALL(TRIPLE_TAP, 1, 0, 0, 1);
/* updated but canceled */
CHECK_ALL(MOMENTUM, 1, DRAG_OBJECT_NUM_MOVES - 1, 0, 1);
/* triggered */
CHECK_ALL(FLICK, 1, DRAG_OBJECT_NUM_MOVES - 1, 1, 0);
CHECK_ZERO(ZOOM);
RESET;
}
EFL_END_TEST
void efl_ui_test_gesture(TCase *tc)
{
tcase_add_test(tc, test_efl_ui_gesture_taps);
tcase_add_test(tc, test_efl_ui_gesture_flick);
}

View File

@ -129,6 +129,7 @@ efl_ui_suite_src = [
'efl_ui_test_focus_common.h',
'efl_ui_test_focus.c',
'efl_ui_test_focus_sub.c',
'efl_ui_test_gesture.c',
'efl_ui_test_box.c',
'efl_ui_test_box_flow.c',
'efl_ui_test_box_stack.c',