12
#include <Eldbus_Model.h>
14
#include "eldbus_test_eldbus_model.h"
15
#include "eldbus_suite.h"
18
_future_then_quit_u_cb(void *data,
20
const Eina_Future *dead_future EINA_UNUSED)
25
eina_value_uint_get(&v, &r);
28
ecore_main_loop_quit();
34
_future_then_cp(void *data ,
36
const Eina_Future *dead_future EINA_UNUSED)
38
Eina_Value *value = data;
40
eina_value_copy(&v, value);
41
ecore_main_loop_quit();
48
_future_check_err(void *data,
50
const Eina_Future *dead_future EINA_UNUSED)
52
Eina_Error *expected_error = data;
55
fail_if(eina_value_type_get(&v) != EINA_VALUE_TYPE_ERROR);
57
eina_value_error_get(&v, &got);
60
ck_assert_int_eq(got, *expected_error);
62
ecore_main_loop_quit();
68
_future_then_quit_cb(void* data,
70
const Eina_Future *dead_future EINA_UNUSED)
72
Eina_Value **value = data;
74
*value = eina_value_dup(&v);
76
ecore_main_loop_quit();
82
_efl_event_quit_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
84
ecore_main_loop_quit();
85
efl_event_callback_stop(event->object);
89
efl_model_future_then(Eina_Future *future)
91
Eina_Value *data = NULL;
92
eina_future_then(future, &_future_then_quit_cb, &data, NULL);
93
ecore_main_loop_begin();
98
check_efl_model_future_error(Eina_Future *future, Eina_Error *err)
100
eina_future_then(future, &_future_check_err, err, NULL);
101
ecore_main_loop_begin();
105
efl_model_future_then_u(Eina_Future *future)
108
eina_future_then(future, &_future_then_quit_u_cb, &i, NULL);
109
ecore_main_loop_begin();
114
efl_model_wait_for_event(Eo *obj, const Efl_Event_Description* event)
116
efl_event_callback_add(obj, event, _efl_event_quit_cb, NULL);
117
ecore_main_loop_begin();
118
efl_event_callback_del(obj, event, _efl_event_quit_cb, NULL);
122
efl_model_nth_child_get(Efl_Model *efl_model, unsigned int n)
129
future = efl_model_children_slice_get(efl_model, n, 1);
131
array = efl_model_future_then(future);
132
fail_if(eina_value_type_get(array) != EINA_VALUE_TYPE_ARRAY);
134
EINA_VALUE_ARRAY_FOREACH(array, len, i, child)
137
child = efl_ref(child);
138
eina_value_free(array);
146
efl_model_first_child_get(Efl_Model *efl_model)
148
return efl_model_nth_child_get(efl_model, 0);
152
check_property(Eo *object, const char *property_name, const char *expected_value)
157
value = efl_model_property_get(object, property_name);
158
actual_value = eina_value_to_string(value);
160
ck_assert_ptr_eq(expected_value, actual_value);
163
bool is_property_equal = strcmp(expected_value, actual_value) == 0;
164
ck_assert_msg(is_property_equal, "'%s' != '%s'", expected_value, actual_value);
167
eina_value_free(value);
171
create_connection(void)
173
Eo *connection = efl_add(ELDBUS_MODEL_CONNECTION_CLASS, efl_main_loop_get(),
174
eldbus_model_connect(efl_added, ELDBUS_CONNECTION_TYPE_SESSION, NULL, EINA_FALSE));
175
ck_assert_ptr_ne(NULL, connection);
182
Eo *object = efl_add(ELDBUS_MODEL_OBJECT_CLASS, efl_main_loop_get(),
183
eldbus_model_connect(efl_added, ELDBUS_CONNECTION_TYPE_SESSION, NULL, EINA_FALSE),
184
eldbus_model_object_bus_set(efl_added, ELDBUS_FDO_BUS),
185
eldbus_model_object_path_set(efl_added, ELDBUS_FDO_PATH));
186
ck_assert_ptr_ne(NULL, object);
191
check_efl_model_children_count_eq(Efl_Model *efl_model, unsigned int expected_children_count)
193
unsigned int actual_children_count;
195
actual_children_count = efl_model_children_count_get(efl_model);
196
ck_assert_int_eq(expected_children_count, actual_children_count);
200
check_efl_model_children_count_ge(Efl_Model *efl_model, unsigned int minimum_children_count)
202
unsigned int actual_children_count;
204
actual_children_count = efl_model_children_count_get(efl_model);
205
ck_assert_int_ge(actual_children_count, minimum_children_count);
209
check_efl_model_children_slice_get(Efl_Model *efl_model)
214
Eo *first_child = NULL;
215
Eo *last_child = NULL;
216
Eo *nonexistent_child = NULL;
219
count = efl_model_children_count_get(efl_model);
220
ck_assert_msg((int)count > 0, "There must be at least 1 child to test");
223
future = efl_model_children_slice_get(efl_model, 0, count);
224
array = efl_model_future_then(future);
225
ck_assert_ptr_ne(NULL, array);
226
fail_if(eina_value_type_get(array) != EINA_VALUE_TYPE_ARRAY);
229
eina_value_array_get(array, 0, &first_child);
230
ck_assert_ptr_ne(NULL, first_child);
233
eina_value_array_get(array, count - 1, &last_child);
234
ck_assert_ptr_ne(NULL, last_child);
237
eina_value_array_get(array, count, &nonexistent_child);
238
ck_assert_ptr_eq(NULL, nonexistent_child);
239
eina_value_free(array);
242
future = efl_model_children_slice_get(efl_model, 0, 1);
243
array = efl_model_future_then(future);
244
ck_assert_ptr_ne(NULL, array);
245
eina_value_array_get(array, 0, &child);
246
ck_assert_ptr_ne(NULL, child);
247
eina_value_array_get(array, 1, &child);
248
ck_assert_ptr_eq(first_child, child);
249
eina_value_free(array);
252
future = efl_model_children_slice_get(efl_model, count - 1, 1);
253
array = efl_model_future_then(future);
254
ck_assert_ptr_ne(NULL, array);
255
eina_value_array_get(array, 0, &child);
256
ck_assert_ptr_ne(NULL, child);
257
eina_value_array_get(array, 1, &child);
258
ck_assert_ptr_eq(last_child, child);
261
future = efl_model_children_slice_get(efl_model, count, 1);
262
ck_assert_ptr_ne(NULL, future);
263
array = efl_model_future_then(future);
264
fail_if(eina_value_type_get(array) != EINA_VALUE_TYPE_ERROR);
265
eina_value_free(array);
270
Eo *connection = create_connection();
275
EFL_START_TEST(object)
277
Eo *root = create_object();
285
_leave(void *data EINA_UNUSED, const Eina_Value v,
286
const Eina_Future *dead EINA_UNUSED)
288
ecore_main_loop_quit();
292
_count_changed(void *data EINA_UNUSED, const Efl_Event *ev)
295
f = efl_loop_job(efl_provider_find(ev->object, EFL_LOOP_CLASS));
296
eina_future_then(f, _leave, NULL, NULL);
300
_async_slice_get(Efl_Model *model)
302
efl_event_callback_add(model, EFL_MODEL_EVENT_CHILDREN_COUNT_CHANGED, _count_changed, NULL);
303
if (!efl_model_children_count_get(model))
304
ecore_main_loop_begin();
306
efl_event_callback_del(model, EFL_MODEL_EVENT_CHILDREN_COUNT_CHANGED, _count_changed, NULL);
308
return efl_model_children_slice_get(model, 0, efl_model_children_count_get(model));
313
Eina_Future *future = NULL;
314
Eina_Value *array = NULL;
319
root = create_object();
321
future = _async_slice_get(root);
322
ck_assert_ptr_ne(NULL, future);
324
array = efl_model_future_then(future);
325
ck_assert_ptr_ne(NULL, array);
327
EINA_VALUE_ARRAY_FOREACH(array, len, i, proxy)
329
ck_assert_ptr_ne(NULL, proxy);
333
eina_value_free(array);
341
eldbus_test_eldbus_model(TCase *tc)
343
tcase_add_test(tc, smoke);
344
tcase_add_test(tc, object);
345
tcase_add_test(tc, proxy);
349
eldbus_model_proxy_from_object_get(Eldbus_Model_Object *object, const char *interface_name)
351
Eina_Future *future = NULL;
356
future = _async_slice_get(object);
357
array = efl_model_future_then(future);
358
ck_assert_ptr_ne(NULL, array);
360
EINA_VALUE_ARRAY_FOREACH(array, len, i, proxy)
364
name = eldbus_model_proxy_name_get(proxy);
365
ck_assert_ptr_ne(NULL, name);
366
if (strcmp(name, interface_name) == 0)
372
eina_value_free(array);
376
static Eldbus_Model_Arguments *
377
_eldbus_model_arguments_from_proxy_get(Eldbus_Model_Proxy *proxy, const char *method_name, const Efl_Class *klass)
379
Eina_Future *future = NULL;
384
future = _async_slice_get(proxy);
385
ck_assert_ptr_ne(NULL, future);
386
array = efl_model_future_then(future);
387
ck_assert_ptr_ne(NULL, array);
389
EINA_VALUE_ARRAY_FOREACH(array, len, i, child)
393
if (!efl_isa(child, klass))
396
name = eldbus_model_arguments_arg_name_get(child);
397
ck_assert_ptr_ne(NULL, name);
398
if (strcmp(name, method_name) == 0)
404
eina_value_free(array);
409
eldbus_model_method_from_proxy_get(Eldbus_Model_Proxy *proxy, const char *method_name)
411
return _eldbus_model_arguments_from_proxy_get(proxy, method_name, ELDBUS_MODEL_METHOD_CLASS);
415
eldbus_model_signal_from_proxy_get(Eldbus_Model_Proxy *proxy, const char *signal_name)
417
return _eldbus_model_arguments_from_proxy_get(proxy, signal_name, ELDBUS_MODEL_SIGNAL_CLASS);
421
check_efl_model_property_int_eq(Efl_Model *efl_model, const char *property, int expected_value)
423
const Eina_Value_Type *property_type;
424
Eina_Value *property_value;
425
int actual_value = 0;
427
property_value = efl_model_property_get(efl_model, property);
428
property_type = eina_value_type_get(property_value);
429
ck_assert_ptr_eq(EINA_VALUE_TYPE_INT, property_type);
431
eina_value_get(property_value, &actual_value);
432
ck_assert_int_eq(expected_value, actual_value);
433
eina_value_free(property_value);
437
check_efl_model_property_int_set(Efl_Model *efl_model, const char *property, int value)
439
Eina_Value eina_value = EINA_VALUE_EMPTY, value_ret = EINA_VALUE_EMPTY;
441
const Eina_Value_Type *property_type;
443
eina_value_setup(&eina_value, EINA_VALUE_TYPE_INT);
444
eina_value_set(&eina_value, value);
445
future = efl_model_property_set(efl_model, property, &eina_value);
447
eina_future_then(future, &_future_then_cp, &value_ret, NULL);
448
ecore_main_loop_begin();
450
property_type = eina_value_type_get(&value_ret);
451
ck_assert_ptr_eq(EINA_VALUE_TYPE_INT, property_type);
454
eina_value_get(&value_ret, &actual_value);
455
ck_assert_int_eq(value, actual_value);
456
eina_value_flush(&eina_value);
457
eina_value_flush(&value_ret);