summaryrefslogtreecommitdiff
path: root/src/tests/elementary/efl_ui_test_collection_view.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/elementary/efl_ui_test_collection_view.c')
-rw-r--r--src/tests/elementary/efl_ui_test_collection_view.c156
1 files changed, 156 insertions, 0 deletions
diff --git a/src/tests/elementary/efl_ui_test_collection_view.c b/src/tests/elementary/efl_ui_test_collection_view.c
new file mode 100644
index 0000000000..9e9f91b48e
--- /dev/null
+++ b/src/tests/elementary/efl_ui_test_collection_view.c
@@ -0,0 +1,156 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#include <Efl_Ui.h>
+#include "efl_ui_suite.h"
+
+#define NUM_ITEMS 50
+
+static Efl_Model*
+_make_model(Efl_Ui_Win *win)
+{
+ Eina_Value vi;
+ Efl_Generic_Model *model, *child;
+ unsigned int i;
+
+ model = efl_add(EFL_GENERIC_MODEL_CLASS, win);
+ model = efl_add(EFL_UI_VIEW_MODEL_CLASS, model,
+ efl_ui_view_model_set(efl_added, model));
+ eina_value_setup(&vi, EINA_VALUE_TYPE_INT);
+
+ efl_ui_view_model_property_string_add(model, "relative", "Relative index ${child.index}", "WRONG", "WRONG");
+ efl_ui_view_model_property_string_add(model, "title", "Initial index ${initial}", "WRONG", "WRONG");
+
+
+ for (i = 0; i < (NUM_ITEMS); i++)
+ {
+ child = efl_model_child_add(model);
+ eina_value_set(&vi, i);
+ efl_model_property_set(child, "initial", &vi);
+ }
+
+ eina_value_flush(&vi);
+ return model;
+}
+
+static Eina_Value
+_quit(Eo *obj, void *data EINA_UNUSED, const Eina_Value v)
+{
+ efl_loop_quit(efl_loop_get(obj), v);
+ return v;
+}
+
+static Eina_Value
+_children_get(Eo *obj EINA_UNUSED, void *data EINA_UNUSED, const Eina_Value v)
+{
+ Efl_Model *child;
+ unsigned int i, len;
+
+ EINA_VALUE_ARRAY_FOREACH(&v, len, i, child)
+ {
+ Eina_Value *rel_val, *title_val;
+ char *relative, *title;
+ if (i != 5) continue;
+ rel_val = efl_model_property_get(child, "relative");
+ title_val = efl_model_property_get(child, "title");
+ relative = eina_value_to_string(rel_val);
+ title = eina_value_to_string(title_val);
+
+ ck_assert(eina_streq(relative, "Relative index 5"));
+ ck_assert(eina_streq(title, "Initial index 5"));
+ free(relative);
+ free(title);
+ break;
+ }
+ return EINA_VALUE_EMPTY;
+}
+
+EFL_START_TEST(test_efl_ui_collection_view_basic)
+{
+ Efl_Ui_Win *win;
+ Efl_Model *model;
+ Efl_Ui_List_View *lv;
+ Efl_Ui_Factory *fl;
+ Eina_Future *f;
+ int count_realize = 0;
+ int count_unrealize = 0;
+
+ win = win_add();
+ efl_gfx_entity_size_set(win, EINA_SIZE2D(100, 100));
+
+ model = _make_model(win);
+ fl = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, win,
+ efl_ui_property_bind(efl_added, "text", "title"),
+ efl_ui_widget_factory_item_class_set(efl_added, EFL_UI_LIST_DEFAULT_ITEM_CLASS));
+
+ lv = efl_add(EFL_UI_LIST_VIEW_CLASS, win,
+ efl_ui_collection_view_factory_set(efl_added, fl),
+ efl_ui_view_model_set(efl_added, model),
+ efl_event_callback_add(efl_added, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_REALIZED,
+ (void*)event_callback_that_increments_an_int_when_called, &count_realize),
+ efl_event_callback_add(efl_added, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_UNREALIZED,
+ (void*)event_callback_that_increments_an_int_when_called, &count_unrealize)
+ );
+ efl_content_set(win, lv);
+
+ get_me_to_those_events(lv);
+ ck_assert_int_gt(count_realize, 0);
+ /* FIXME: this should eventually be eq(0) */
+ ck_assert_int_gt(count_unrealize, 0);
+
+ f = efl_model_children_slice_get(lv, 0, efl_model_children_count_get(lv));
+ f = efl_future_then(lv, f, .success_type = EINA_VALUE_TYPE_ARRAY, .success = _children_get);
+ ecore_main_loop_iterate();
+ efl_event_callback_del(lv, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_REALIZED, (void*)event_callback_that_increments_an_int_when_called, &count_realize);
+ efl_event_callback_del(lv, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_UNREALIZED, (void*)event_callback_that_increments_an_int_when_called, &count_unrealize);
+}
+EFL_END_TEST
+
+EFL_START_TEST(test_efl_ui_collection_view_select)
+{
+ Efl_Ui_Win *win;
+ Efl_Model *model;
+ Efl_Ui_List_View *lv;
+ Efl_Ui_Factory *fl;
+ Eina_Value *sel_val;
+ unsigned long sel = 10000;
+
+ win = win_add();
+ efl_gfx_entity_size_set(win, EINA_SIZE2D(100, 100));
+
+ model = _make_model(win);
+ model = efl_add(EFL_UI_SELECT_MODEL_CLASS, efl_main_loop_get(), efl_ui_view_model_set(efl_added, model));
+ fl = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, win,
+ efl_ui_property_bind(efl_added, "text", "title"),
+ efl_ui_widget_factory_item_class_set(efl_added, EFL_UI_LIST_DEFAULT_ITEM_CLASS));
+
+ lv = efl_add(EFL_UI_LIST_VIEW_CLASS, win,
+ efl_ui_collection_view_factory_set(efl_added, fl),
+ efl_ui_view_model_set(efl_added, model)
+ );
+ efl_content_set(win, lv);
+
+ get_me_to_those_events(lv);
+
+ /* nothing selected yet */
+ sel_val = efl_model_property_get(model, "child.selected");
+ ck_assert(eina_value_type_get(sel_val) == EINA_VALUE_TYPE_ERROR);
+
+ efl_future_then(model, efl_model_property_ready_get(model, "child.selected"), .success = _quit);
+
+ click_object_at(lv, 50, 5);
+ ecore_main_loop_begin();
+
+ sel_val = efl_model_property_get(model, "child.selected");
+ ck_assert(eina_value_type_get(sel_val) == EINA_VALUE_TYPE_ULONG);
+ ck_assert(eina_value_ulong_get(sel_val, &sel));
+ ck_assert_int_eq(sel, 0);
+}
+EFL_END_TEST
+
+void efl_ui_test_collection_view(TCase *tc)
+{
+ tcase_add_test(tc, test_efl_ui_collection_view_basic);
+ tcase_add_test(tc, test_efl_ui_collection_view_select);
+}