From 52adb65aeaccf54e700e8421daf59e10568df4dd Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Sun, 7 Jul 2019 18:14:13 +0200 Subject: [PATCH] efl_ui_spin_button: add test suite this adds a testsuite to emulate and check the usage of buttons in the spin button widget. This also verifies that the correct events are emitted. (For now, the testcases from spin are also copied over, since they inherit from each other) Reviewed-by: Mike Blumenkrantz Differential Revision: https://phab.enlightenment.org/D9232 --- src/lib/elementary/Efl_Ui.h | 1 + src/tests/elementary/efl_ui_suite.c | 1 + src/tests/elementary/efl_ui_suite.h | 1 + .../elementary/efl_ui_test_spin_button.c | 210 ++++++++++++++++++ src/tests/elementary/meson.build | 1 + 5 files changed, 214 insertions(+) create mode 100644 src/tests/elementary/efl_ui_test_spin_button.c diff --git a/src/lib/elementary/Efl_Ui.h b/src/lib/elementary/Efl_Ui.h index 7b99cf3a23..09204faad1 100644 --- a/src/lib/elementary/Efl_Ui.h +++ b/src/lib/elementary/Efl_Ui.h @@ -248,6 +248,7 @@ typedef Eo Efl_Ui_Spotlight_Indicator; # include # include # include +# include /** * Initialize Elementary diff --git a/src/tests/elementary/efl_ui_suite.c b/src/tests/elementary/efl_ui_suite.c index 07c47cbd3e..87e4e8c696 100644 --- a/src/tests/elementary/efl_ui_suite.c +++ b/src/tests/elementary/efl_ui_suite.c @@ -30,6 +30,7 @@ static const Efl_Test_Case etc[] = { { "efl_ui_radio_group", efl_ui_test_radio_group }, { "efl_ui_win", efl_ui_test_win }, { "efl_ui_spin", efl_ui_test_spin }, + { "efl_ui_spin_button", efl_ui_test_spin_button }, { NULL, NULL } }; diff --git a/src/tests/elementary/efl_ui_suite.h b/src/tests/elementary/efl_ui_suite.h index 1366494c38..0e8be968ff 100644 --- a/src/tests/elementary/efl_ui_suite.h +++ b/src/tests/elementary/efl_ui_suite.h @@ -41,6 +41,7 @@ void efl_ui_test_progressbar(TCase *tc); void efl_ui_test_radio_group(TCase *tc); void efl_ui_test_win(TCase *tc); void efl_ui_test_spin(TCase *tc); +void efl_ui_test_spin_button(TCase *tc); void loop_timer_interval_set(Eo *obj, double in); diff --git a/src/tests/elementary/efl_ui_test_spin_button.c b/src/tests/elementary/efl_ui_test_spin_button.c new file mode 100644 index 0000000000..c495c881a8 --- /dev/null +++ b/src/tests/elementary/efl_ui_test_spin_button.c @@ -0,0 +1,210 @@ +#ifdef HAVE_CONFIG_H +# include "elementary_config.h" +#endif + +#include +#include "efl_ui_suite.h" + +static Eo *win, *spin; + +static void +spin_setup() +{ + win = win_add(); + + spin = efl_add(EFL_UI_SPIN_BUTTON_CLASS, win); + efl_content_set(win, spin); + efl_gfx_entity_geometry_set(win, EINA_RECT(0, 0, 200, 50)); +} + +static void +_set_flag(void *data, const Efl_Event *ev) +{ + Eina_Bool *b = data; + + ck_assert_int_eq(*b, EINA_FALSE); + *b = EINA_TRUE; + ck_assert_ptr_eq(ev->info, NULL); +} + +static void +_set_flag_quit(void *data, const Efl_Event *ev) +{ + Eina_Bool *b = data; + + ck_assert_int_eq(*b, EINA_FALSE); + *b = EINA_TRUE; + ck_assert_ptr_eq(ev->info, NULL); + + efl_loop_quit(efl_main_loop_get(), EINA_VALUE_EMPTY); +} + +static void +click_object(Efl_Part *obj) +{ + get_me_to_those_events(spin); + + Evas *e = evas_object_evas_get(spin); + //this deletes the part + Eina_Rect r = efl_gfx_entity_geometry_get(obj); + evas_event_feed_mouse_move(e, r.x+r.w/2, r.y+r.h/2, 1234, NULL); + evas_event_feed_mouse_down(e, 1, 0, 1235, NULL); + evas_event_feed_mouse_up(e, 1, 0, 1236, NULL); + edje_object_message_signal_process(obj); +} + +EFL_START_TEST (spin_value_events) +{ + Eina_Bool changed = EINA_FALSE, min_reached = EINA_FALSE, max_reached = EINA_FALSE; + + efl_ui_range_limits_set(spin, -3.0, 3.0); + efl_ui_range_value_set(spin, 0.0); + efl_event_callback_add(spin, EFL_UI_SPIN_EVENT_CHANGED, _set_flag, &changed); + efl_event_callback_add(spin, EFL_UI_SPIN_EVENT_MIN_REACHED, _set_flag, &min_reached); + efl_event_callback_add(spin, EFL_UI_SPIN_EVENT_MAX_REACHED, _set_flag, &max_reached); + + efl_ui_range_value_set(spin, 1.0); + ck_assert_int_eq(changed, EINA_TRUE); + ck_assert_int_eq(min_reached, EINA_FALSE); + ck_assert_int_eq(max_reached, EINA_FALSE); + changed = EINA_FALSE; + min_reached = EINA_FALSE; + max_reached = EINA_FALSE; + + efl_ui_range_value_set(spin, 3.0); + ck_assert_int_eq(changed, EINA_TRUE); + ck_assert_int_eq(min_reached, EINA_FALSE); + ck_assert_int_eq(max_reached, EINA_TRUE); + changed = EINA_FALSE; + min_reached = EINA_FALSE; + max_reached = EINA_FALSE; + + efl_ui_range_value_set(spin, -3.0); + ck_assert_int_eq(changed, EINA_TRUE); + ck_assert_int_eq(min_reached, EINA_TRUE); + ck_assert_int_eq(max_reached, EINA_FALSE); + changed = EINA_FALSE; + min_reached = EINA_FALSE; + max_reached = EINA_FALSE; +} +EFL_END_TEST + +EFL_START_TEST (spin_wheel_test) +{ + Eina_Bool changed = EINA_FALSE, min_reached = EINA_FALSE, max_reached = EINA_FALSE; + + efl_ui_range_limits_set(spin, -100.0, 100.0); + efl_ui_range_value_set(spin, 0.0); + efl_ui_range_step_set(spin, 10.0); + efl_event_callback_add(spin, EFL_UI_SPIN_EVENT_CHANGED, _set_flag, &changed); + efl_event_callback_add(spin, EFL_UI_SPIN_EVENT_MIN_REACHED, _set_flag, &min_reached); + efl_event_callback_add(spin, EFL_UI_SPIN_EVENT_MAX_REACHED, _set_flag, &max_reached); + + efl_gfx_entity_size_set(win, EINA_SIZE2D(60, 60)); + get_me_to_those_events(spin); + evas_event_feed_mouse_move(evas_object_evas_get(spin), 30, 30, 1234, NULL); + evas_event_feed_mouse_wheel(evas_object_evas_get(spin), -1, -1, 12345, NULL); + ck_assert(efl_ui_range_value_get(spin) == 10.0); + ck_assert_int_eq(changed, EINA_TRUE); + ck_assert_int_eq(min_reached, EINA_FALSE); + ck_assert_int_eq(max_reached, EINA_FALSE); + changed = EINA_FALSE; + min_reached = EINA_FALSE; + max_reached = EINA_FALSE; + + evas_event_feed_mouse_wheel(evas_object_evas_get(spin), -1, 1, 12345, NULL); + ck_assert(efl_ui_range_value_get(spin) == 0.0); + ck_assert_int_eq(changed, EINA_TRUE); + ck_assert_int_eq(min_reached, EINA_FALSE); + ck_assert_int_eq(max_reached, EINA_FALSE); + changed = EINA_FALSE; + min_reached = EINA_FALSE; + max_reached = EINA_FALSE; +} +EFL_END_TEST + +EFL_START_TEST (spin_value_inc) +{ + Eina_Bool changed = EINA_FALSE, min_reached = EINA_FALSE, max_reached = EINA_FALSE, delay_changed = EINA_FALSE; + + efl_ui_range_limits_set(spin, 0.0, 3.0); + efl_ui_range_value_set(spin, 1.0); + efl_event_callback_add(spin, EFL_UI_SPIN_EVENT_CHANGED, _set_flag, &changed); + efl_event_callback_add(spin, EFL_UI_SPIN_EVENT_MIN_REACHED, _set_flag, &min_reached); + efl_event_callback_add(spin, EFL_UI_SPIN_EVENT_MAX_REACHED, _set_flag, &max_reached); + efl_event_callback_add(spin, EFL_UI_SPIN_BUTTON_EVENT_DELAY_CHANGED, _set_flag_quit, &delay_changed); + + click_object(efl_content_get(efl_part(spin, "efl.inc_button"))); + + ck_assert_int_eq(changed, EINA_TRUE); + ck_assert_int_eq(min_reached, EINA_FALSE); + ck_assert_int_eq(max_reached, EINA_FALSE); + changed = EINA_FALSE; + min_reached = EINA_FALSE; + max_reached = EINA_FALSE; + + efl_loop_begin(efl_main_loop_get()); + ck_assert_int_eq(delay_changed, EINA_TRUE); +} +EFL_END_TEST + +EFL_START_TEST (spin_value_inc_max) +{ + Eina_Bool changed = EINA_FALSE, min_reached = EINA_FALSE, max_reached = EINA_FALSE, delay_changed = EINA_FALSE; + + efl_ui_range_limits_set(spin, 0.0, 3.0); + efl_ui_range_value_set(spin, 2.0); + efl_event_callback_add(spin, EFL_UI_SPIN_EVENT_CHANGED, _set_flag, &changed); + efl_event_callback_add(spin, EFL_UI_SPIN_EVENT_MIN_REACHED, _set_flag, &min_reached); + efl_event_callback_add(spin, EFL_UI_SPIN_EVENT_MAX_REACHED, _set_flag, &max_reached); + efl_event_callback_add(spin, EFL_UI_SPIN_BUTTON_EVENT_DELAY_CHANGED, _set_flag_quit, &delay_changed); + + click_object(efl_content_get(efl_part(spin, "efl.inc_button"))); + + ck_assert_int_eq(changed, EINA_TRUE); + ck_assert_int_eq(min_reached, EINA_FALSE); + ck_assert_int_eq(max_reached, EINA_TRUE); + changed = EINA_FALSE; + min_reached = EINA_FALSE; + max_reached = EINA_FALSE; + + efl_loop_begin(efl_main_loop_get()); + ck_assert_int_eq(delay_changed, EINA_TRUE); +} +EFL_END_TEST + +EFL_START_TEST (spin_value_dec_min) +{ + Eina_Bool changed = EINA_FALSE, min_reached = EINA_FALSE, max_reached = EINA_FALSE, delay_changed = EINA_FALSE; + + efl_ui_range_limits_set(spin, 0.0, 3.0); + efl_ui_range_value_set(spin, 1.0); + efl_event_callback_add(spin, EFL_UI_SPIN_EVENT_CHANGED, _set_flag, &changed); + efl_event_callback_add(spin, EFL_UI_SPIN_EVENT_MIN_REACHED, _set_flag, &min_reached); + efl_event_callback_add(spin, EFL_UI_SPIN_EVENT_MAX_REACHED, _set_flag, &max_reached); + efl_event_callback_add(spin, EFL_UI_SPIN_BUTTON_EVENT_DELAY_CHANGED, _set_flag_quit, &delay_changed); + + click_object(efl_content_get(efl_part(spin, "efl.dec_button"))); + + ck_assert_int_eq(changed, EINA_TRUE); + ck_assert_int_eq(min_reached, EINA_TRUE); + ck_assert_int_eq(max_reached, EINA_FALSE); + changed = EINA_FALSE; + min_reached = EINA_FALSE; + max_reached = EINA_FALSE; + + efl_loop_begin(efl_main_loop_get()); + ck_assert_int_eq(delay_changed, EINA_TRUE); +} +EFL_END_TEST + +void efl_ui_test_spin_button(TCase *tc) +{ + tcase_add_checked_fixture(tc, fail_on_errors_setup, fail_on_errors_teardown); + tcase_add_checked_fixture(tc, spin_setup, NULL); + tcase_add_test(tc, spin_value_events); + tcase_add_test(tc, spin_wheel_test); + tcase_add_test(tc, spin_value_inc); + tcase_add_test(tc, spin_value_inc_max); + tcase_add_test(tc, spin_value_dec_min); +} diff --git a/src/tests/elementary/meson.build b/src/tests/elementary/meson.build index 17458f36e0..4dc1bd1305 100644 --- a/src/tests/elementary/meson.build +++ b/src/tests/elementary/meson.build @@ -144,6 +144,7 @@ efl_ui_suite_src = [ 'efl_ui_test_radio_group.c', 'efl_ui_test_progressbar.c', 'efl_ui_test_spin.c', + 'efl_ui_test_spin_button.c', ] efl_ui_suite = executable('efl_ui_suite',