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:
parent
8cde7424c2
commit
18e9bc9a9f
|
@ -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},
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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',
|
||||
|
|
Loading…
Reference in New Issue