efl

Форк
0
/
efl_ui_test_position_manager_common.c 
193 строки · 5.7 Кб
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
#include "efl_ui_test_collection_common.h"
8

9
Eo *position_manager;
10

11
static Eo* win;
12

13
static Eina_Array *arr_obj;
14
static Eina_Inarray *arr_size;
15

16
static void
17
item_container_setup()
18
{
19
   win = win_add();
20
}
21

22
static void
23
item_container_teardown()
24
{
25
   win = NULL;
26
}
27

28
static Efl_Ui_Position_Manager_Size_Batch_Result
29
_size_accessor_get_at(void *data EINA_UNUSED, Efl_Ui_Position_Manager_Size_Call_Config conf, Eina_Rw_Slice memory)
30
{
31
   int i;
32
   Efl_Ui_Position_Manager_Size_Batch_Entity *sizes = memory.mem;
33
   Efl_Ui_Position_Manager_Size_Batch_Result result = {0};
34

35
   for (i = conf.range.start_id; i < (int)(MIN(conf.range.end_id, eina_inarray_count(arr_size))); ++i)
36
     {
37
        Eina_Size2D *size = eina_inarray_nth(arr_size, i);
38

39
        sizes[i - conf.range.start_id].size = *size;
40
        sizes[i - conf.range.start_id].depth_leader = 0;
41
        sizes[i - conf.range.start_id].element_depth = 0;
42
     }
43
   result.filled_items = i - conf.range.start_id;
44
   result.parent_size = EINA_SIZE2D(0, 0);
45
   return result;
46
}
47

48
static Efl_Ui_Position_Manager_Object_Batch_Result
49
_obj_accessor_get_at(void *data EINA_UNUSED, Efl_Ui_Position_Manager_Request_Range range, Eina_Rw_Slice memory)
50
{
51
   int i;
52
   Efl_Ui_Position_Manager_Object_Batch_Entity *objs = memory.mem;
53
   Efl_Ui_Position_Manager_Object_Batch_Result result = {0};
54

55
   for (i = range.start_id; i < (int)(MIN(range.end_id, eina_array_count(arr_obj))); ++i)
56
     {
57
         Efl_Gfx_Entity *geom = eina_array_data_get(arr_obj, i);
58

59
         objs[i - range.start_id].entity = geom;
60
         objs[i - range.start_id].depth_leader = 0;
61
         objs[i - range.start_id].element_depth = 0;
62
     }
63
   result.filled_items = i - range.start_id;
64
   result.group = NULL;
65
   return result;
66
}
67
static void
68
_initial_setup(void)
69
{
70
   arr_obj = eina_array_new(10);
71
   arr_size = eina_inarray_new(sizeof(Eina_Size2D), 10);
72

73
   efl_ui_position_manager_data_access_v1_data_access_set(position_manager,
74
      win,
75
      NULL, _obj_accessor_get_at, NULL,
76
      NULL, _size_accessor_get_at, NULL,
77
      0);
78
}
79

80
static int
81
_add_item(Eo *obj, Eina_Size2D size)
82
{
83
   int idx = eina_array_count(arr_obj);
84
   EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_array_count(arr_obj) == eina_inarray_count(arr_size), -1);
85

86
   eina_array_push(arr_obj, (void*)0x1); //wtf
87
   eina_array_data_set(arr_obj, idx, obj);
88
   eina_inarray_push(arr_size, &size);
89

90

91
   efl_ui_position_manager_entity_item_added(position_manager, idx, obj);
92

93
   return idx;
94
}
95

96
static void
97
_update_item(int index, Eo *obj, Eina_Size2D size)
98
{
99
   Eina_Size2D *s;
100

101
   eina_array_data_set(arr_obj, index, obj);
102
   s = eina_inarray_nth(arr_size, index);
103
   *s = size;
104
}
105

106
static void
107
_ticker(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
108
{
109
   efl_loop_quit(efl_main_loop_get(), EINA_VALUE_EMPTY);
110
}
111

112
static void
113
_iterate_a_few(void)
114
{
115
   efl_add(EFL_LOOP_TIMER_CLASS, efl_main_loop_get(),
116
      efl_event_callback_add(efl_added, EFL_LOOP_TIMER_EVENT_TIMER_TICK, _ticker, NULL),
117
      efl_loop_timer_interval_set(efl_added, 0.1));
118
   efl_loop_begin(efl_main_loop_get());
119
}
120

121
EFL_START_TEST(no_crash1)
122
{
123
   _initial_setup();
124

125
   //try to resize the viewport while we have no item
126
   efl_ui_position_manager_entity_viewport_set(position_manager, EINA_RECT(20, 20, 200, 200));
127
   _iterate_a_few();
128
   efl_ui_position_manager_entity_viewport_set(position_manager, EINA_RECT(20, 20, 0, 0));
129
   _iterate_a_few();
130
   _add_item(efl_add(EFL_UI_GRID_DEFAULT_ITEM_CLASS, win), EINA_SIZE2D(20, 20));
131
   _iterate_a_few();
132
   efl_ui_position_manager_entity_viewport_set(position_manager, EINA_RECT(20, 20, 200, 200));
133
   _iterate_a_few();
134
   efl_ui_position_manager_entity_viewport_set(position_manager, EINA_RECT(20, 20, 0, 0));
135
   _iterate_a_few();
136
}
137
EFL_END_TEST
138

139
EFL_START_TEST(no_crash2)
140
{
141
   _initial_setup();
142

143
   //try to resize the viewport while we have no item
144
   efl_ui_position_manager_entity_viewport_set(position_manager, EINA_RECT(20, 20, 200, 200));
145
   _iterate_a_few();
146
   efl_ui_position_manager_entity_viewport_set(position_manager, EINA_RECT(20, 20, 0, 0));
147
   _iterate_a_few();
148
   _add_item(NULL, EINA_SIZE2D(20, 20));
149
   _iterate_a_few();
150
   efl_ui_position_manager_entity_viewport_set(position_manager, EINA_RECT(20, 20, 0, 0));
151
   _iterate_a_few();
152
   efl_ui_position_manager_entity_viewport_set(position_manager, EINA_RECT(20, 20, 200, 200));
153
   _iterate_a_few();
154
   _update_item(0, efl_add(EFL_UI_GRID_DEFAULT_ITEM_CLASS, win), EINA_SIZE2D(20, 20));
155
   _iterate_a_few();
156
}
157
EFL_END_TEST
158

159
static void
160
_content_size_cb(void *data, const Efl_Event *ev)
161
{
162
   Eina_Size2D *size = data;
163
   *size = *((Eina_Size2D*)ev->info);
164
}
165

166
EFL_START_TEST(viewport_newsize_event_result)
167
{
168
   Eina_Size2D size = EINA_SIZE2D(-2, -2), min_size = EINA_SIZE2D(-2, -2);
169
   efl_event_callback_add(position_manager,
170
      EFL_UI_POSITION_MANAGER_ENTITY_EVENT_CONTENT_SIZE_CHANGED, _content_size_cb, &size);
171
   efl_event_callback_add(position_manager,
172
      EFL_UI_POSITION_MANAGER_ENTITY_EVENT_CONTENT_MIN_SIZE_CHANGED, _content_size_cb, &min_size);
173
   _initial_setup();
174
   _add_item(efl_add(EFL_UI_GRID_DEFAULT_ITEM_CLASS, win), EINA_SIZE2D(20, 20));
175
   _add_item(efl_add(EFL_UI_GRID_DEFAULT_ITEM_CLASS, win), EINA_SIZE2D(20, 30));
176

177
   efl_ui_position_manager_entity_viewport_set(position_manager, EINA_RECT(0, 0, 200, 200));
178
   _iterate_a_few();
179

180
   ck_assert_int_ne(size.w, -2);
181
   ck_assert_int_ne(size.h, -2);
182
   ck_assert_int_ne(min_size.w, -2);
183
   ck_assert_int_ne(min_size.h, -2);
184
}
185
EFL_END_TEST
186

187
void efl_ui_test_position_manager_common_add(TCase *tc)
188
{
189
   tcase_add_checked_fixture(tc, item_container_setup, item_container_teardown);
190
   tcase_add_test(tc, no_crash1);
191
   tcase_add_test(tc, no_crash2);
192
   tcase_add_test(tc, viewport_newsize_event_result);
193
}
194

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

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

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

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