efl
462 строки · 17.7 Кб
1#ifdef HAVE_CONFIG_H2# include "elementary_config.h"3#endif4
5#include <Elementary.h>6#include "efl_ui_suite.h"7
8static void9_boolean_flag_set(void *data, const Efl_Event *ev EINA_UNUSED)10{
11Eina_Bool *flag = data;12*flag = EINA_TRUE;13
14efl_loop_quit(efl_main_loop_get(), EINA_VALUE_EMPTY);15}
16
17EFL_START_TEST(efl_ui_win_test_scene_focus)18{
19Efl_Ui_Win *win1;20Ecore_Evas *ee;21
22Eina_Bool win1_focus_in = EINA_FALSE;23Eina_Bool win1_focus_out = EINA_FALSE;24
25win1 = efl_new(EFL_UI_WIN_CLASS);26
27//we want to test here the correct propagation of events from ecore_evas to the win object28//in order to ensure that we are resetting ee focus first here.29ee = ecore_evas_ecore_evas_get(evas_object_evas_get(win1));30ecore_evas_focus_set(ee, EINA_TRUE);31ecore_evas_focus_set(ee, EINA_FALSE);32efl_event_callback_add(win1, EFL_CANVAS_SCENE_EVENT_SCENE_FOCUS_IN, _boolean_flag_set, &win1_focus_in);33efl_event_callback_add(win1, EFL_CANVAS_SCENE_EVENT_SCENE_FOCUS_OUT, _boolean_flag_set, &win1_focus_out);34
35//focus in check36ecore_evas_focus_set(ee, EINA_TRUE);37if (!win1_focus_in)38efl_loop_begin(efl_main_loop_get());39ck_assert_int_eq(win1_focus_in, EINA_TRUE);40ck_assert_int_eq(win1_focus_out, EINA_FALSE);41win1_focus_in = EINA_FALSE;42
43//focus out check44ecore_evas_focus_set(ee, EINA_FALSE);45if (!win1_focus_out)46efl_loop_begin(efl_main_loop_get());47
48ck_assert_int_eq(win1_focus_out, EINA_TRUE);49ck_assert_int_eq(win1_focus_in, EINA_FALSE);50
51efl_unref(win1);52}
53EFL_END_TEST
54
55static void56_check_focus_event(void *data, const Efl_Event *ev)57{
58void **tmp = data;59
60*tmp = efl_input_focus_object_get(ev->info);61}
62
63EFL_START_TEST(efl_ui_win_test_object_focus)64{
65Efl_Ui_Win *win1;66
67void *win1_focus_in = NULL;68void *win1_focus_out = NULL;69
70win1 = efl_new(EFL_UI_WIN_CLASS);71
72efl_event_callback_add(win1, EFL_CANVAS_SCENE_EVENT_OBJECT_FOCUS_IN, _check_focus_event, &win1_focus_in);73efl_event_callback_add(win1, EFL_CANVAS_SCENE_EVENT_OBJECT_FOCUS_OUT, _check_focus_event, &win1_focus_out);74
75Eo *r1 = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas_object_evas_get(win1));76efl_canvas_object_seat_focus_add(r1, NULL);77ck_assert_ptr_eq(win1_focus_in, r1);78ck_assert_ptr_eq(win1_focus_out, NULL);79win1_focus_in = NULL;80win1_focus_out = NULL;81
82Eo *r2 = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas_object_evas_get(win1));83efl_canvas_object_seat_focus_add(r2, NULL);84ck_assert_ptr_eq(win1_focus_in, r2);85ck_assert_ptr_eq(win1_focus_out, r1);86win1_focus_in = NULL;87win1_focus_out = NULL;88
89efl_canvas_object_seat_focus_del(r2, NULL);90ck_assert_ptr_eq(win1_focus_in, NULL);91ck_assert_ptr_eq(win1_focus_out, r2);92
93efl_unref(win1);94}
95EFL_END_TEST
96
97
98static void99create_environment(Eo **win, Eo **rect)100{
101*win = efl_new(EFL_UI_WIN_CLASS);102*rect = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas_object_evas_get(*win));103efl_canvas_object_seat_focus_add(*rect, NULL);104efl_gfx_entity_geometry_set(*win, EINA_RECT(0, 0, 200, 200));105efl_gfx_entity_geometry_set(*rect, EINA_RECT(0, 0, 200, 200));106get_me_to_those_events(evas_object_evas_get(*win));107}
108
109EFL_START_TEST(efl_ui_win_test_efl_input_interface_focus)110{
111Efl_Ui_Win *win;112Efl_Canvas_Object *rect, *focus_in = NULL, *focus_out = NULL;113create_environment(&win, &rect);114efl_canvas_object_seat_focus_del(rect, NULL);115
116efl_event_callback_add(rect, EFL_EVENT_FOCUS_IN , _check_focus_event, &focus_in);117efl_event_callback_add(rect, EFL_EVENT_FOCUS_OUT, _check_focus_event, &focus_out);118
119efl_canvas_object_seat_focus_add(rect, NULL);120ck_assert_ptr_eq(focus_out, NULL);121ck_assert_ptr_eq(focus_in, rect);122focus_out = NULL;123focus_in = NULL;124
125efl_canvas_object_seat_focus_del(rect, NULL);126ck_assert_ptr_eq(focus_out, rect);127ck_assert_ptr_eq(focus_in, NULL);128focus_out = NULL;129focus_in = NULL;130}
131EFL_END_TEST
132
133#define TIMESTAMP 1337134
135static void136_check_key_event(void *data, const Efl_Event *ev)137{
138Eina_Bool *pressed = data;139
140ck_assert_int_eq(efl_input_timestamp_get(ev->info), TIMESTAMP);141ck_assert_str_eq(efl_input_key_name_get(ev->info), "odiaeresis");142ck_assert_str_eq(efl_input_key_sym_get(ev->info), "ö");143ck_assert_str_eq(efl_input_key_string_get(ev->info), "Ö");144ck_assert_str_eq(efl_input_key_compose_string_get(ev->info), "Ö");145ck_assert_int_eq(efl_input_key_code_get(ev->info), 0xffe1);146*pressed = efl_input_key_pressed_get(ev->info);147}
148
149EFL_START_TEST(efl_ui_win_test_efl_input_interface_key_down)150{
151Efl_Ui_Win *win;152Eina_Bool pressed = EINA_FALSE;153Efl_Canvas_Object *rect;154create_environment(&win, &rect);155
156efl_event_callback_add(rect, EFL_EVENT_KEY_DOWN , _check_key_event, &pressed);157efl_event_callback_add(rect, EFL_EVENT_KEY_UP, _check_key_event, &pressed);158
159evas_event_feed_key_down_with_keycode(evas_object_evas_get(win), "odiaeresis", "ö", "Ö", "Ö", TIMESTAMP, NULL, 0xffe1);160ck_assert_int_eq(pressed, EINA_TRUE);161
162evas_event_feed_key_up_with_keycode(evas_object_evas_get(win), "odiaeresis", "ö", "Ö", "Ö", TIMESTAMP, NULL, 0xffe1);163ck_assert_int_eq(pressed, EINA_FALSE);164}
165EFL_END_TEST
166
167static void168position_eq(Eina_Position2D a, Eina_Position2D b)169{
170ck_assert_int_eq(a.x, b.x);171ck_assert_int_eq(a.y, b.y);172}
173
174static void175_check_ptr_move_event(void *data, const Efl_Event *ev)176{
177Eina_Bool *called = data;178ck_assert_int_eq(efl_input_timestamp_get(ev->info), TIMESTAMP);179ck_assert_int_eq(efl_input_pointer_wheel_delta_get(ev->info), 0);180ck_assert_int_eq(efl_input_pointer_wheel_horizontal_get(ev->info), 0);181ck_assert_int_eq(efl_input_pointer_double_click_get(ev->info), 0);182ck_assert_int_eq(efl_input_pointer_triple_click_get(ev->info), 0);183ck_assert_int_eq(efl_input_pointer_button_flags_get(ev->info), 0);184ck_assert_int_eq(efl_input_pointer_touch_id_get(ev->info), 0);185position_eq(efl_input_pointer_previous_position_get(ev->info), EINA_POSITION2D(20, 20));186position_eq(efl_input_pointer_position_get(ev->info), EINA_POSITION2D(25, 25));187ck_assert_int_eq(efl_input_pointer_button_get(ev->info), 0);188ck_assert_int_eq(efl_input_pointer_action_get(ev->info), EFL_POINTER_ACTION_MOVE);189*called = EINA_TRUE;190}
191
192EFL_START_TEST(efl_ui_win_test_efl_input_interface_pointer_move)193{
194Efl_Ui_Win *win;195Eina_Bool called = EINA_FALSE;196Efl_Canvas_Object *rect;197create_environment(&win, &rect);198
199evas_event_feed_mouse_move(evas_object_evas_get(win), 20, 20, TIMESTAMP - 1, NULL);200efl_event_callback_add(rect, EFL_EVENT_POINTER_MOVE , _check_ptr_move_event, &called);201evas_event_feed_mouse_move(evas_object_evas_get(win), 25, 25, TIMESTAMP, NULL);202ck_assert_int_eq(called, EINA_TRUE);203}
204EFL_END_TEST
205
206static void207_check_ptr_down_event(void *data, const Efl_Event *ev)208{
209Eina_Bool *called = data;210ck_assert_int_eq(efl_input_timestamp_get(ev->info), TIMESTAMP);211ck_assert_int_eq(efl_input_pointer_wheel_delta_get(ev->info), 0);212ck_assert_int_eq(efl_input_pointer_wheel_horizontal_get(ev->info), 0);213ck_assert_int_eq(efl_input_pointer_double_click_get(ev->info), 0);214ck_assert_int_eq(efl_input_pointer_triple_click_get(ev->info), EINA_TRUE);215ck_assert_int_eq(efl_input_pointer_button_flags_get(ev->info), EVAS_BUTTON_TRIPLE_CLICK);216ck_assert_int_eq(efl_input_pointer_touch_id_get(ev->info), 0);217position_eq(efl_input_pointer_position_get(ev->info), EINA_POSITION2D(20, 20));218ck_assert_int_eq(efl_input_pointer_button_get(ev->info), 1);219ck_assert_int_eq(efl_input_pointer_action_get(ev->info), EFL_POINTER_ACTION_DOWN);220*called = EINA_TRUE;221}
222
223EFL_START_TEST(efl_ui_win_test_efl_input_interface_pointer_down)224{
225Efl_Ui_Win *win;226Eina_Bool called = EINA_FALSE;227Efl_Canvas_Object *rect;228create_environment(&win, &rect);229
230evas_event_feed_mouse_move(evas_object_evas_get(win), 20, 20, TIMESTAMP - 1, NULL);231efl_event_callback_add(rect, EFL_EVENT_POINTER_DOWN , _check_ptr_down_event, &called);232evas_event_feed_mouse_down(evas_object_evas_get(win), 1, EVAS_BUTTON_TRIPLE_CLICK, TIMESTAMP, NULL);233ck_assert_int_eq(called, EINA_TRUE);234}
235EFL_END_TEST
236
237static void238_check_ptr_up_event(void *data, const Efl_Event *ev)239{
240Eina_Bool *called = data;241ck_assert_int_eq(efl_input_timestamp_get(ev->info), TIMESTAMP);242ck_assert_int_eq(efl_input_pointer_wheel_delta_get(ev->info), 0);243ck_assert_int_eq(efl_input_pointer_wheel_horizontal_get(ev->info), 0);244ck_assert_int_eq(efl_input_pointer_double_click_get(ev->info), 0);245ck_assert_int_eq(efl_input_pointer_triple_click_get(ev->info), EINA_TRUE);246ck_assert_int_eq(efl_input_pointer_button_flags_get(ev->info), EVAS_BUTTON_TRIPLE_CLICK);247ck_assert_int_eq(efl_input_pointer_touch_id_get(ev->info), 0);248position_eq(efl_input_pointer_position_get(ev->info), EINA_POSITION2D(20, 20));249ck_assert_int_eq(efl_input_pointer_button_get(ev->info), 1);250ck_assert_int_eq(efl_input_pointer_action_get(ev->info), EFL_POINTER_ACTION_UP);251*called = EINA_TRUE;252}
253
254EFL_START_TEST(efl_ui_win_test_efl_input_interface_pointer_up)255{
256Efl_Ui_Win *win;257Eina_Bool called = EINA_FALSE;258Efl_Canvas_Object *rect;259create_environment(&win, &rect);260
261evas_event_feed_mouse_move(evas_object_evas_get(win), 20, 20, TIMESTAMP - 1, NULL);262evas_event_feed_mouse_down(evas_object_evas_get(win), 1, EVAS_BUTTON_TRIPLE_CLICK, TIMESTAMP, NULL);263efl_event_callback_add(rect, EFL_EVENT_POINTER_UP , _check_ptr_up_event, &called);264evas_event_feed_mouse_up(evas_object_evas_get(win), 1, EVAS_BUTTON_TRIPLE_CLICK, TIMESTAMP, NULL);265ck_assert_int_eq(called, EINA_TRUE);266}
267EFL_END_TEST
268
269static void270_check_pointer_in_cb(void *data, const Efl_Event *ev)271{
272Eina_Bool *called = data;273ck_assert_int_eq(efl_input_timestamp_get(ev->info), TIMESTAMP);274ck_assert_int_eq(efl_input_pointer_wheel_delta_get(ev->info), 0);275ck_assert_int_eq(efl_input_pointer_wheel_horizontal_get(ev->info), 0);276ck_assert_int_eq(efl_input_pointer_double_click_get(ev->info), 0);277ck_assert_int_eq(efl_input_pointer_triple_click_get(ev->info), 0);278ck_assert_int_eq(efl_input_pointer_button_flags_get(ev->info), 0);279ck_assert_int_eq(efl_input_pointer_touch_id_get(ev->info), 0);280position_eq(efl_input_pointer_position_get(ev->info), EINA_POSITION2D(20, 20));281ck_assert_int_eq(efl_input_pointer_button_get(ev->info), 0);282ck_assert_int_eq(efl_input_pointer_action_get(ev->info), EFL_POINTER_ACTION_IN );283*called = EINA_TRUE;284}
285
286static void287_check_pointer_out_cb(void *data, const Efl_Event *ev)288{
289Eina_Bool *called = data;290ck_assert_int_eq(efl_input_timestamp_get(ev->info), TIMESTAMP);291ck_assert_int_eq(efl_input_pointer_wheel_delta_get(ev->info), 0);292ck_assert_int_eq(efl_input_pointer_wheel_horizontal_get(ev->info), 0);293ck_assert_int_eq(efl_input_pointer_double_click_get(ev->info), 0);294ck_assert_int_eq(efl_input_pointer_triple_click_get(ev->info), 0);295ck_assert_int_eq(efl_input_pointer_button_flags_get(ev->info), 0);296ck_assert_int_eq(efl_input_pointer_touch_id_get(ev->info), 0);297position_eq(efl_input_pointer_position_get(ev->info), EINA_POSITION2D(5, 5));298ck_assert_int_eq(efl_input_pointer_button_get(ev->info), 0);299ck_assert_int_eq(efl_input_pointer_action_get(ev->info), EFL_POINTER_ACTION_OUT );300*called = EINA_TRUE;301}
302
303EFL_START_TEST(efl_ui_win_test_efl_input_interface_pointer_in_out)304{
305Efl_Ui_Win *win;306Eina_Bool pointer_in = EINA_FALSE, pointer_out = EINA_FALSE;307Efl_Canvas_Object *rect;308
309create_environment(&win, &rect);310evas_event_feed_mouse_move(evas_object_evas_get(win), 5, 5, TIMESTAMP - 1, NULL);311evas_object_geometry_set(rect, 10, 10, 20, 20);312
313evas_event_feed_mouse_move(evas_object_evas_get(win), 5, 5, TIMESTAMP - 1, NULL);314efl_event_callback_add(rect, EFL_EVENT_POINTER_IN, _check_pointer_in_cb, &pointer_in);315efl_event_callback_add(rect, EFL_EVENT_POINTER_OUT, _check_pointer_out_cb, &pointer_out);316
317evas_event_feed_mouse_move(evas_object_evas_get(win), 20, 20, TIMESTAMP, NULL);318ck_assert_int_eq(pointer_in, EINA_TRUE);319ck_assert_int_eq(pointer_out, EINA_FALSE);320pointer_in = EINA_FALSE;321pointer_out = EINA_FALSE;322
323evas_event_feed_mouse_move(evas_object_evas_get(win), 5, 5, TIMESTAMP, NULL);324ck_assert_int_eq(pointer_in, EINA_FALSE);325ck_assert_int_eq(pointer_out, EINA_TRUE);326}
327EFL_END_TEST
328
329static void330_check_pointer_wheel_cb(void *data, const Efl_Event *ev)331{
332Eina_Bool *called = data;333ck_assert_int_eq(efl_input_timestamp_get(ev->info), TIMESTAMP);334ck_assert_int_eq(efl_input_pointer_wheel_delta_get(ev->info), 2);335ck_assert_int_eq(efl_input_pointer_wheel_horizontal_get(ev->info), 1);336ck_assert_int_eq(efl_input_pointer_double_click_get(ev->info), 0);337ck_assert_int_eq(efl_input_pointer_triple_click_get(ev->info), 0);338ck_assert_int_eq(efl_input_pointer_button_flags_get(ev->info), 0);339ck_assert_int_eq(efl_input_pointer_touch_id_get(ev->info), 0);340position_eq(efl_input_pointer_position_get(ev->info), EINA_POSITION2D(20, 20));341ck_assert_int_eq(efl_input_pointer_button_get(ev->info), 0);342ck_assert_int_eq(efl_input_pointer_action_get(ev->info), EFL_POINTER_ACTION_WHEEL );343*called = EINA_TRUE;344}
345
346EFL_START_TEST(efl_ui_win_test_efl_input_interface_pointer_wheel)347{
348Efl_Ui_Win *win;349Eina_Bool pointer_wheel = EINA_FALSE;350Efl_Canvas_Object *rect;351
352create_environment(&win, &rect);353
354efl_event_callback_add(rect, EFL_EVENT_POINTER_WHEEL, _check_pointer_wheel_cb, &pointer_wheel);355
356evas_event_feed_mouse_move(evas_object_evas_get(win), 20, 20, TIMESTAMP, NULL);357evas_event_feed_mouse_wheel(evas_object_evas_get(win), 1, 2, TIMESTAMP, NULL);358ck_assert_int_eq(pointer_wheel, EINA_TRUE);359}
360EFL_END_TEST
361
362
363static void364_check_ptr_cancel_down_event(void *data, const Efl_Event *ev)365{
366Eina_Bool *called = data;367ck_assert_int_eq(efl_input_timestamp_get(ev->info), TIMESTAMP);368ck_assert_int_eq(efl_input_pointer_wheel_delta_get(ev->info), 0);369ck_assert_int_eq(efl_input_pointer_wheel_horizontal_get(ev->info), 0);370ck_assert_int_eq(efl_input_pointer_double_click_get(ev->info), 0);371ck_assert_int_eq(efl_input_pointer_triple_click_get(ev->info), 0);372ck_assert_int_eq(efl_input_pointer_button_flags_get(ev->info), 0);373ck_assert_int_eq(efl_input_pointer_touch_id_get(ev->info), 0);374position_eq(efl_input_pointer_position_get(ev->info), EINA_POSITION2D(20, 20));375ck_assert_int_eq(efl_input_pointer_button_get(ev->info), 1);376ck_assert_int_eq(efl_input_pointer_action_get(ev->info), EFL_POINTER_ACTION_DOWN);377*called = EINA_TRUE;378}
379
380static void381_check_ptr_cancel_event(void *data, const Efl_Event *ev)382{
383int *called = data;384ck_assert_int_eq(efl_input_timestamp_get(ev->info), TIMESTAMP);385ck_assert_int_eq(efl_input_pointer_wheel_delta_get(ev->info), 0);386ck_assert_int_eq(efl_input_pointer_wheel_horizontal_get(ev->info), 0);387ck_assert_int_eq(efl_input_pointer_double_click_get(ev->info), 0);388ck_assert_int_eq(efl_input_pointer_triple_click_get(ev->info), 0);389ck_assert_int_eq(efl_input_pointer_button_flags_get(ev->info), 0);390ck_assert_int_eq(efl_input_pointer_touch_id_get(ev->info), 0);391position_eq(efl_input_pointer_position_get(ev->info), EINA_POSITION2D(20, 20));392ck_assert_int_eq(efl_input_pointer_button_get(ev->info), 1);393ck_assert_int_eq(efl_input_pointer_action_get(ev->info), EFL_POINTER_ACTION_CANCEL );394ck_assert_int_eq(*called, 0);395*called = 1;396}
397
398static void399_check_ptr_cancel_up_event(void *data, const Efl_Event *ev)400{
401Eina_Bool *called = data;402ck_assert_int_eq(efl_input_timestamp_get(ev->info), TIMESTAMP);403ck_assert_int_eq(efl_input_pointer_wheel_delta_get(ev->info), 0);404ck_assert_int_eq(efl_input_pointer_wheel_horizontal_get(ev->info), 0);405ck_assert_int_eq(efl_input_pointer_double_click_get(ev->info), 0);406ck_assert_int_eq(efl_input_pointer_triple_click_get(ev->info), 0);407ck_assert_int_eq(efl_input_pointer_button_flags_get(ev->info), 0);408ck_assert_int_eq(efl_input_pointer_touch_id_get(ev->info), 0);409position_eq(efl_input_pointer_position_get(ev->info), EINA_POSITION2D(20, 20));410ck_assert_int_eq(efl_input_pointer_button_get(ev->info), 1);411ck_assert_int_eq(efl_input_pointer_action_get(ev->info), EFL_POINTER_ACTION_UP);412ck_assert_int_eq(*called, 1);413*called = 2;414}
415
416EFL_START_TEST(efl_ui_win_test_efl_input_interface_pointer_cancel)417{
418Efl_Ui_Win *win;419Eina_Bool called_down = EINA_FALSE;420int called;421Efl_Canvas_Object *rect;422create_environment(&win, &rect);423
424evas_event_feed_mouse_move(evas_object_evas_get(win), 20, 20, TIMESTAMP - 1, NULL);425efl_event_callback_add(rect, EFL_EVENT_POINTER_DOWN, _check_ptr_cancel_down_event, &called_down);426evas_event_feed_mouse_down(evas_object_evas_get(win), 1, 0, TIMESTAMP, NULL);427ck_assert_int_eq(called_down, EINA_TRUE);428called = EINA_FALSE;429
430efl_event_callback_add(rect, EFL_EVENT_POINTER_CANCEL, _check_ptr_cancel_event, &called);431efl_event_callback_add(rect, EFL_EVENT_POINTER_UP, _check_ptr_cancel_up_event, &called);432evas_event_feed_mouse_cancel(evas_object_evas_get(win), TIMESTAMP, NULL);433ck_assert_int_eq(called, 2);434}
435EFL_END_TEST
436
437EFL_START_TEST(efl_ui_win_test_type)438{
439Efl_Ui_Win *win;440
441win = win_add();442
443ck_assert_int_eq(efl_ui_win_type_get(win), EFL_UI_WIN_TYPE_BASIC);444}
445EFL_END_TEST
446
447void
448efl_ui_test_win(TCase *tc)449{
450tcase_add_test(tc, efl_ui_win_test_scene_focus);451tcase_add_test(tc, efl_ui_win_test_object_focus);452tcase_add_test(tc, efl_ui_win_test_object_focus);453tcase_add_test(tc, efl_ui_win_test_efl_input_interface_focus);454tcase_add_test(tc, efl_ui_win_test_efl_input_interface_key_down);455tcase_add_test(tc, efl_ui_win_test_efl_input_interface_pointer_move);456tcase_add_test(tc, efl_ui_win_test_efl_input_interface_pointer_down);457tcase_add_test(tc, efl_ui_win_test_efl_input_interface_pointer_up);458tcase_add_test(tc, efl_ui_win_test_efl_input_interface_pointer_in_out);459tcase_add_test(tc, efl_ui_win_test_efl_input_interface_pointer_wheel);460tcase_add_test(tc, efl_ui_win_test_efl_input_interface_pointer_cancel);461tcase_add_test(tc, efl_ui_win_test_type);462}
463