efl

Форк
0
/
efl_ui_test_collection_view.c 
156 строк · 5.1 Кб
1
#ifdef HAVE_CONFIG_H
2
# include "elementary_config.h"
3
#endif
4

5
#include <Efl_Ui.h>
6
#include "efl_ui_suite.h"
7

8
#define NUM_ITEMS 50
9

10
static Efl_Model*
11
_make_model(Efl_Ui_Win *win)
12
{
13
   Eina_Value vi;
14
   Efl_Generic_Model *model, *child;
15
   unsigned int i;
16

17
   model = efl_add(EFL_GENERIC_MODEL_CLASS, win);
18
   model = efl_add(EFL_UI_VIEW_MODEL_CLASS, model,
19
                   efl_ui_view_model_set(efl_added, model));
20
   eina_value_setup(&vi, EINA_VALUE_TYPE_INT);
21

22
   efl_ui_view_model_property_string_add(model, "relative", "Relative index ${child.index}", "WRONG", "WRONG");
23
   efl_ui_view_model_property_string_add(model, "title", "Initial index ${initial}", "WRONG", "WRONG");
24

25

26
   for (i = 0; i < (NUM_ITEMS); i++)
27
     {
28
        child = efl_model_child_add(model);
29
        eina_value_set(&vi, i);
30
        efl_model_property_set(child, "initial", &vi);
31
     }
32

33
   eina_value_flush(&vi);
34
   return model;
35
}
36

37
static Eina_Value
38
_quit(Eo *obj, void *data EINA_UNUSED, const Eina_Value v)
39
{
40
   efl_loop_quit(efl_loop_get(obj), v);
41
   return v;
42
}
43

44
static Eina_Value
45
_children_get(Eo *obj EINA_UNUSED, void *data EINA_UNUSED, const Eina_Value v)
46
{
47
   Efl_Model *child;
48
   unsigned int i, len;
49

50
   EINA_VALUE_ARRAY_FOREACH(&v, len, i, child)
51
     {
52
        Eina_Value *rel_val, *title_val;
53
        char *relative, *title;
54
        if (i != 5) continue;
55
        rel_val = efl_model_property_get(child, "relative");
56
        title_val = efl_model_property_get(child, "title");
57
        relative = eina_value_to_string(rel_val);
58
        title = eina_value_to_string(title_val);
59

60
        ck_assert(eina_streq(relative, "Relative index 5"));
61
        ck_assert(eina_streq(title, "Initial index 5"));
62
        free(relative);
63
        free(title);
64
        break;
65
     }
66
   return EINA_VALUE_EMPTY;
67
}
68

69
EFL_START_TEST(test_efl_ui_collection_view_basic)
70
{
71
   Efl_Ui_Win *win;
72
   Efl_Model *model;
73
   Efl_Ui_List_View *lv;
74
   Efl_Ui_Factory *fl;
75
   Eina_Future *f;
76
   int count_realize = 0;
77
   int count_unrealize = 0;
78

79
   win = win_add();
80
   efl_gfx_entity_size_set(win, EINA_SIZE2D(100, 100));
81

82
   model = _make_model(win);
83
   fl = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, win,
84
                efl_ui_property_bind(efl_added, "text", "title"),
85
                efl_ui_widget_factory_item_class_set(efl_added, EFL_UI_LIST_DEFAULT_ITEM_CLASS));
86

87
   lv = efl_add(EFL_UI_LIST_VIEW_CLASS, win,
88
                efl_ui_collection_view_factory_set(efl_added, fl),
89
                efl_ui_view_model_set(efl_added, model),
90
                efl_event_callback_add(efl_added, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_REALIZED,
91
                  (void*)event_callback_that_increments_an_int_when_called, &count_realize),
92
                efl_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
               );
95
   efl_content_set(win, lv);
96

97
   get_me_to_those_events(lv);
98
   ck_assert_int_gt(count_realize, 0);
99
   /* FIXME: this should eventually be eq(0) */
100
   ck_assert_int_gt(count_unrealize, 0);
101

102
   f = efl_model_children_slice_get(lv, 0, efl_model_children_count_get(lv));
103
   f = efl_future_then(lv, f, .success_type = EINA_VALUE_TYPE_ARRAY, .success = _children_get);
104
   ecore_main_loop_iterate();
105
   efl_event_callback_del(lv, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_REALIZED, (void*)event_callback_that_increments_an_int_when_called, &count_realize);
106
   efl_event_callback_del(lv, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_UNREALIZED, (void*)event_callback_that_increments_an_int_when_called, &count_unrealize);
107
}
108
EFL_END_TEST
109

110
EFL_START_TEST(test_efl_ui_collection_view_select)
111
{
112
   Efl_Ui_Win *win;
113
   Efl_Model *model;
114
   Efl_Ui_List_View *lv;
115
   Efl_Ui_Factory *fl;
116
   Eina_Value *sel_val;
117
   unsigned long sel = 10000;
118

119
   win = win_add();
120
   efl_gfx_entity_size_set(win, EINA_SIZE2D(100, 100));
121

122
   model = _make_model(win);
123
   model = efl_add(EFL_UI_SELECT_MODEL_CLASS, efl_main_loop_get(), efl_ui_view_model_set(efl_added, model));
124
   fl = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, win,
125
                efl_ui_property_bind(efl_added, "text", "title"),
126
                efl_ui_widget_factory_item_class_set(efl_added, EFL_UI_LIST_DEFAULT_ITEM_CLASS));
127

128
   lv = efl_add(EFL_UI_LIST_VIEW_CLASS, win,
129
                efl_ui_collection_view_factory_set(efl_added, fl),
130
                efl_ui_view_model_set(efl_added, model)
131
               );
132
   efl_content_set(win, lv);
133

134
   get_me_to_those_events(lv);
135

136
   /* nothing selected yet */
137
   sel_val = efl_model_property_get(model, "child.selected");
138
   ck_assert(eina_value_type_get(sel_val) == EINA_VALUE_TYPE_ERROR);
139

140
   efl_future_then(model, efl_model_property_ready_get(model, "child.selected"), .success = _quit);
141

142
   click_object_at(lv, 50, 5);
143
   ecore_main_loop_begin();
144

145
   sel_val = efl_model_property_get(model, "child.selected");
146
   ck_assert(eina_value_type_get(sel_val) == EINA_VALUE_TYPE_ULONG);
147
   ck_assert(eina_value_ulong_get(sel_val, &sel));
148
   ck_assert_int_eq(sel, 0);
149
}
150
EFL_END_TEST
151

152
void efl_ui_test_collection_view(TCase *tc)
153
{
154
   tcase_add_test(tc, test_efl_ui_collection_view_basic);
155
   tcase_add_test(tc, test_efl_ui_collection_view_select);
156
}
157

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.