efl
156 строк · 5.1 Кб
1#ifdef HAVE_CONFIG_H2# include "elementary_config.h"3#endif4
5#include <Efl_Ui.h>6#include "efl_ui_suite.h"7
8#define NUM_ITEMS 509
10static Efl_Model*11_make_model(Efl_Ui_Win *win)12{
13Eina_Value vi;14Efl_Generic_Model *model, *child;15unsigned int i;16
17model = efl_add(EFL_GENERIC_MODEL_CLASS, win);18model = efl_add(EFL_UI_VIEW_MODEL_CLASS, model,19efl_ui_view_model_set(efl_added, model));20eina_value_setup(&vi, EINA_VALUE_TYPE_INT);21
22efl_ui_view_model_property_string_add(model, "relative", "Relative index ${child.index}", "WRONG", "WRONG");23efl_ui_view_model_property_string_add(model, "title", "Initial index ${initial}", "WRONG", "WRONG");24
25
26for (i = 0; i < (NUM_ITEMS); i++)27{28child = efl_model_child_add(model);29eina_value_set(&vi, i);30efl_model_property_set(child, "initial", &vi);31}32
33eina_value_flush(&vi);34return model;35}
36
37static Eina_Value38_quit(Eo *obj, void *data EINA_UNUSED, const Eina_Value v)39{
40efl_loop_quit(efl_loop_get(obj), v);41return v;42}
43
44static Eina_Value45_children_get(Eo *obj EINA_UNUSED, void *data EINA_UNUSED, const Eina_Value v)46{
47Efl_Model *child;48unsigned int i, len;49
50EINA_VALUE_ARRAY_FOREACH(&v, len, i, child)51{52Eina_Value *rel_val, *title_val;53char *relative, *title;54if (i != 5) continue;55rel_val = efl_model_property_get(child, "relative");56title_val = efl_model_property_get(child, "title");57relative = eina_value_to_string(rel_val);58title = eina_value_to_string(title_val);59
60ck_assert(eina_streq(relative, "Relative index 5"));61ck_assert(eina_streq(title, "Initial index 5"));62free(relative);63free(title);64break;65}66return EINA_VALUE_EMPTY;67}
68
69EFL_START_TEST(test_efl_ui_collection_view_basic)70{
71Efl_Ui_Win *win;72Efl_Model *model;73Efl_Ui_List_View *lv;74Efl_Ui_Factory *fl;75Eina_Future *f;76int count_realize = 0;77int count_unrealize = 0;78
79win = win_add();80efl_gfx_entity_size_set(win, EINA_SIZE2D(100, 100));81
82model = _make_model(win);83fl = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, win,84efl_ui_property_bind(efl_added, "text", "title"),85efl_ui_widget_factory_item_class_set(efl_added, EFL_UI_LIST_DEFAULT_ITEM_CLASS));86
87lv = efl_add(EFL_UI_LIST_VIEW_CLASS, win,88efl_ui_collection_view_factory_set(efl_added, fl),89efl_ui_view_model_set(efl_added, model),90efl_event_callback_add(efl_added, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_REALIZED,91(void*)event_callback_that_increments_an_int_when_called, &count_realize),92efl_event_callback_add(efl_added, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_UNREALIZED,93(void*)event_callback_that_increments_an_int_when_called, &count_unrealize)94);95efl_content_set(win, lv);96
97get_me_to_those_events(lv);98ck_assert_int_gt(count_realize, 0);99/* FIXME: this should eventually be eq(0) */100ck_assert_int_gt(count_unrealize, 0);101
102f = efl_model_children_slice_get(lv, 0, efl_model_children_count_get(lv));103f = efl_future_then(lv, f, .success_type = EINA_VALUE_TYPE_ARRAY, .success = _children_get);104ecore_main_loop_iterate();105efl_event_callback_del(lv, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_REALIZED, (void*)event_callback_that_increments_an_int_when_called, &count_realize);106efl_event_callback_del(lv, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_UNREALIZED, (void*)event_callback_that_increments_an_int_when_called, &count_unrealize);107}
108EFL_END_TEST
109
110EFL_START_TEST(test_efl_ui_collection_view_select)111{
112Efl_Ui_Win *win;113Efl_Model *model;114Efl_Ui_List_View *lv;115Efl_Ui_Factory *fl;116Eina_Value *sel_val;117unsigned long sel = 10000;118
119win = win_add();120efl_gfx_entity_size_set(win, EINA_SIZE2D(100, 100));121
122model = _make_model(win);123model = efl_add(EFL_UI_SELECT_MODEL_CLASS, efl_main_loop_get(), efl_ui_view_model_set(efl_added, model));124fl = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, win,125efl_ui_property_bind(efl_added, "text", "title"),126efl_ui_widget_factory_item_class_set(efl_added, EFL_UI_LIST_DEFAULT_ITEM_CLASS));127
128lv = efl_add(EFL_UI_LIST_VIEW_CLASS, win,129efl_ui_collection_view_factory_set(efl_added, fl),130efl_ui_view_model_set(efl_added, model)131);132efl_content_set(win, lv);133
134get_me_to_those_events(lv);135
136/* nothing selected yet */137sel_val = efl_model_property_get(model, "child.selected");138ck_assert(eina_value_type_get(sel_val) == EINA_VALUE_TYPE_ERROR);139
140efl_future_then(model, efl_model_property_ready_get(model, "child.selected"), .success = _quit);141
142click_object_at(lv, 50, 5);143ecore_main_loop_begin();144
145sel_val = efl_model_property_get(model, "child.selected");146ck_assert(eina_value_type_get(sel_val) == EINA_VALUE_TYPE_ULONG);147ck_assert(eina_value_ulong_get(sel_val, &sel));148ck_assert_int_eq(sel, 0);149}
150EFL_END_TEST
151
152void efl_ui_test_collection_view(TCase *tc)153{
154tcase_add_test(tc, test_efl_ui_collection_view_basic);155tcase_add_test(tc, test_efl_ui_collection_view_select);156}
157