efl
278 строк · 9.0 Кб
1#ifdef HAVE_CONFIG_H2# include "elementary_config.h"3#endif4
5#include <Elementary.h>6#include "elm_entry_eo.h" //needed to check that spin is in text mode7#include <Efl_Ui.h>8#include "efl_ui_suite.h"9
10static Eo *win, *spin;11
12static void13spin_setup()14{
15win = win_add();16
17spin = efl_add(EFL_UI_SPIN_BUTTON_CLASS, win);18efl_content_set(win, spin);19efl_gfx_entity_geometry_set(win, EINA_RECT(0, 0, 200, 50));20}
21
22static void23_set_flag(void *data, const Efl_Event *ev)24{
25Eina_Bool *b = data;26
27ck_assert_int_eq(*b, EINA_FALSE);28*b = EINA_TRUE;29ck_assert_ptr_eq(ev->info, NULL);30}
31
32static void33_set_flag_quit(void *data, const Efl_Event *ev)34{
35Eina_Bool *b = data;36
37ck_assert_int_eq(*b, EINA_FALSE);38*b = EINA_TRUE;39ck_assert_ptr_eq(ev->info, NULL);40
41efl_loop_quit(efl_main_loop_get(), EINA_VALUE_EMPTY);42}
43
44static void45click_spin_part(Eo *obj, const char *part)46{
47get_me_to_those_events(spin);48click_part(obj, part);49}
50
51EFL_START_TEST (spin_wheel_test)52{
53Eina_Bool changed = EINA_FALSE, min_reached = EINA_FALSE, max_reached = EINA_FALSE;54
55efl_ui_range_limits_set(spin, -100.0, 100.0);56efl_ui_range_value_set(spin, 0.0);57efl_ui_range_step_set(spin, 10.0);58efl_event_callback_add(spin, EFL_UI_RANGE_EVENT_CHANGED, _set_flag, &changed);59efl_event_callback_add(spin, EFL_UI_RANGE_EVENT_MIN_REACHED, _set_flag, &min_reached);60efl_event_callback_add(spin, EFL_UI_RANGE_EVENT_MAX_REACHED, _set_flag, &max_reached);61
62efl_gfx_entity_size_set(win, EINA_SIZE2D(60, 60));63get_me_to_those_events(spin);64evas_event_feed_mouse_move(evas_object_evas_get(spin), 30, 30, 1234, NULL);65evas_event_feed_mouse_wheel(evas_object_evas_get(spin), -1, -1, 12345, NULL);66ck_assert(EINA_DBL_EQ(efl_ui_range_value_get(spin), 10.0));67ck_assert_int_eq(changed, EINA_TRUE);68ck_assert_int_eq(min_reached, EINA_FALSE);69ck_assert_int_eq(max_reached, EINA_FALSE);70changed = EINA_FALSE;71min_reached = EINA_FALSE;72max_reached = EINA_FALSE;73
74evas_event_feed_mouse_wheel(evas_object_evas_get(spin), -1, 1, 12345, NULL);75ck_assert(EINA_DBL_EQ(efl_ui_range_value_get(spin), 0.0));76ck_assert_int_eq(changed, EINA_TRUE);77ck_assert_int_eq(min_reached, EINA_FALSE);78ck_assert_int_eq(max_reached, EINA_FALSE);79changed = EINA_FALSE;80min_reached = EINA_FALSE;81max_reached = EINA_FALSE;82}
83EFL_END_TEST
84
85EFL_START_TEST (spin_value_inc)86{
87Eina_Bool changed = EINA_FALSE, min_reached = EINA_FALSE, max_reached = EINA_FALSE, delay_changed = EINA_FALSE;88
89efl_ui_range_limits_set(spin, 0.0, 3.0);90efl_ui_range_value_set(spin, 1.0);91efl_event_callback_add(spin, EFL_UI_RANGE_EVENT_CHANGED, _set_flag, &changed);92efl_event_callback_add(spin, EFL_UI_RANGE_EVENT_MIN_REACHED, _set_flag, &min_reached);93efl_event_callback_add(spin, EFL_UI_RANGE_EVENT_MAX_REACHED, _set_flag, &max_reached);94efl_event_callback_add(spin, EFL_UI_RANGE_EVENT_STEADY, _set_flag_quit, &delay_changed);95
96click_spin_part(spin, "efl.inc_button");97
98ck_assert_int_eq(changed, EINA_TRUE);99ck_assert_int_eq(min_reached, EINA_FALSE);100ck_assert_int_eq(max_reached, EINA_FALSE);101changed = EINA_FALSE;102min_reached = EINA_FALSE;103max_reached = EINA_FALSE;104
105efl_loop_begin(efl_main_loop_get());106ck_assert_int_eq(delay_changed, EINA_TRUE);107}
108EFL_END_TEST
109
110EFL_START_TEST (spin_value_inc_max)111{
112Eina_Bool changed = EINA_FALSE, min_reached = EINA_FALSE, max_reached = EINA_FALSE, delay_changed = EINA_FALSE;113
114efl_ui_range_limits_set(spin, 0.0, 3.0);115efl_ui_range_value_set(spin, 2.0);116efl_event_callback_add(spin, EFL_UI_RANGE_EVENT_CHANGED, _set_flag, &changed);117efl_event_callback_add(spin, EFL_UI_RANGE_EVENT_MIN_REACHED, _set_flag, &min_reached);118efl_event_callback_add(spin, EFL_UI_RANGE_EVENT_MAX_REACHED, _set_flag, &max_reached);119efl_event_callback_add(spin, EFL_UI_RANGE_EVENT_STEADY, _set_flag_quit, &delay_changed);120
121click_spin_part(spin, "efl.inc_button");122
123ck_assert_int_eq(changed, EINA_TRUE);124ck_assert_int_eq(min_reached, EINA_FALSE);125ck_assert_int_eq(max_reached, EINA_TRUE);126changed = EINA_FALSE;127min_reached = EINA_FALSE;128max_reached = EINA_FALSE;129
130efl_loop_begin(efl_main_loop_get());131ck_assert_int_eq(delay_changed, EINA_TRUE);132}
133EFL_END_TEST
134
135EFL_START_TEST (spin_value_dec_min)136{
137Eina_Bool changed = EINA_FALSE, min_reached = EINA_FALSE, max_reached = EINA_FALSE, delay_changed = EINA_FALSE;138
139efl_ui_range_limits_set(spin, 0.0, 3.0);140efl_ui_range_value_set(spin, 1.0);141efl_event_callback_add(spin, EFL_UI_RANGE_EVENT_CHANGED, _set_flag, &changed);142efl_event_callback_add(spin, EFL_UI_RANGE_EVENT_MIN_REACHED, _set_flag, &min_reached);143efl_event_callback_add(spin, EFL_UI_RANGE_EVENT_MAX_REACHED, _set_flag, &max_reached);144efl_event_callback_add(spin, EFL_UI_RANGE_EVENT_STEADY, _set_flag_quit, &delay_changed);145
146click_spin_part(spin, "efl.dec_button");147
148ck_assert_int_eq(changed, EINA_TRUE);149ck_assert_int_eq(min_reached, EINA_TRUE);150ck_assert_int_eq(max_reached, EINA_FALSE);151changed = EINA_FALSE;152min_reached = EINA_FALSE;153max_reached = EINA_FALSE;154
155efl_loop_begin(efl_main_loop_get());156ck_assert_int_eq(delay_changed, EINA_TRUE);157}
158EFL_END_TEST
159
160EFL_START_TEST (spin_wraparound)161{
162efl_ui_spin_button_wraparound_set(spin, EINA_TRUE);163efl_ui_range_limits_set(spin, 10, 30);164efl_ui_range_step_set(spin, 20);165
166efl_ui_range_value_set(spin, 20);167click_spin_part(spin, "efl.inc_button");168ck_assert_int_eq(efl_ui_range_value_get(spin), 10);169
170efl_ui_range_value_set(spin, 20);171click_spin_part(spin, "efl.dec_button");172ck_assert_int_eq(efl_ui_range_value_get(spin), 30);173
174}
175EFL_END_TEST
176
177EFL_START_TEST (spin_double_values)178{
179double step = 0.1;180efl_ui_range_limits_set(spin, 10, 30);181efl_ui_range_value_set(spin, 20);182efl_ui_range_step_set(spin, step);183ck_assert(EINA_DBL_EQ(efl_ui_range_step_get(spin), step));184get_me_to_those_events(spin);185ck_assert(EINA_DBL_EQ(efl_ui_range_value_get(spin), 20.0));186
187for (int i = 0; i < 5; ++i)188{189click_part(spin, "efl.inc_button");190get_me_to_those_events(spin);191}192ck_assert_int_eq(EINA_DBL_EQ(efl_ui_range_value_get(spin), 20.5), 1);193}
194EFL_END_TEST
195
196EFL_START_TEST (spin_double_values_hitting_max_with_step)197{
198//idea is to check that spin button can hit max with inc, even if value is not multiple is 2.7199efl_ui_range_limits_set(spin, 10, 30);200efl_ui_range_value_set(spin, 27);201efl_ui_range_step_set(spin, 2.7);202get_me_to_those_events(spin);203
204for (int i = 0; i < 2; ++i)205{206click_part(spin, "efl.inc_button");207get_me_to_those_events(spin);208}209ck_assert_int_eq(EINA_DBL_EQ(efl_ui_range_value_get(spin), 30), 1);210}
211EFL_END_TEST
212
213static inline void214_try_direct_text_input(const char *text, double result)215{
216Eo *entry;217
218efl_ui_focus_util_focus(efl_content_get(efl_part(spin, "efl.text_button")));219get_me_to_those_events(spin);220entry = efl_content_get(efl_part(spin, "efl.entry"));221elm_object_text_set(entry, "");222ck_assert_int_eq(efl_isa(entry, ELM_ENTRY_CLASS), 1);223efl_ui_focus_util_focus(entry);224get_me_to_those_events(spin);225
226write_key_sequence(spin, text);227get_me_to_those_events(spin);228
229efl_ui_focus_util_focus(efl_content_get(efl_part(spin, "efl.inc_button")));230ck_assert_msg(EINA_DBL_EQ(efl_ui_range_value_get(spin), result), "Values do not match %f - %f (%s)", efl_ui_range_value_get(spin), result, elm_object_text_get(entry));231}
232
233EFL_START_TEST (spin_direct_text_input)234{
235efl_ui_spin_button_direct_text_input_set(spin, EINA_TRUE);236efl_ui_range_limits_set(spin, -30, 30);237efl_ui_range_value_set(spin, 20);238get_me_to_those_events(spin);239_try_direct_text_input("1asdf2", 12);240_try_direct_text_input("1-2", 12);241_try_direct_text_input("-12", -12);242_try_direct_text_input("-100", -30);243_try_direct_text_input("1.8", 18);244_try_direct_text_input("12342435", 30);245}
246EFL_END_TEST
247
248EFL_START_TEST (spin_direct_text_input_comma_value)249{
250efl_ui_spin_button_direct_text_input_set(spin, EINA_TRUE);251efl_ui_range_limits_set(spin, -30, 30);252efl_ui_range_value_set(spin, 20);253efl_ui_format_string_set(spin, "%.2f", EFL_UI_FORMAT_STRING_TYPE_SIMPLE);254efl_ui_focus_util_focus(efl_content_get(efl_part(spin, "efl.text_button")));255get_me_to_those_events(spin);256_try_direct_text_input("1asdf2.1", 12.1);257_try_direct_text_input("1-2.2", 12.2);258_try_direct_text_input("-12.8", -12.8);259_try_direct_text_input("-100", -30);260_try_direct_text_input("10.8", 10.8);261_try_direct_text_input("12342435.12312341342", 30);262}
263EFL_END_TEST
264
265void efl_ui_test_spin_button(TCase *tc)266{
267tcase_add_checked_fixture(tc, fail_on_errors_setup, fail_on_errors_teardown);268tcase_add_checked_fixture(tc, spin_setup, NULL);269tcase_add_test(tc, spin_wheel_test);270tcase_add_test(tc, spin_value_inc);271tcase_add_test(tc, spin_value_inc_max);272tcase_add_test(tc, spin_value_dec_min);273tcase_add_test(tc, spin_wraparound);274tcase_add_test(tc, spin_double_values);275tcase_add_test(tc, spin_double_values_hitting_max_with_step);276tcase_add_test(tc, spin_direct_text_input);277tcase_add_test(tc, spin_direct_text_input_comma_value);278}
279