2
// gcc -o emodel_test_file emodel_test_file.c `pkg-config --cflags --libs emodel`
15
Eina_Tmpstr* temp_filename = NULL;
16
const char* tmpdir = NULL;
17
Eina_Bool children_deleted = EINA_FALSE;
19
// This will ensure that the child have the time to be automatically destroyed
21
_delayed_quit(Eo *o EINA_UNUSED, void *data EINA_UNUSED, const Eina_Value v)
23
ecore_main_loop_quit();
29
_children_got(Eo *o, void *data EINA_UNUSED, const Eina_Value v)
33
Eina_Value r = (Eina_Value) v;
35
EINA_VALUE_ARRAY_FOREACH(&v, len, i, child)
40
path = efl_model_property_get(child, "path");
41
fail_if(path == NULL);
42
str = eina_value_to_string(path);
45
if (temp_filename && strcmp(str, temp_filename) == 0)
46
r = eina_future_as_value(efl_future_then(efl_loop_get(o),
47
efl_loop_job(efl_loop_get(o)),
48
.success = _delayed_quit));
52
eina_value_free(path);
59
_children_failed(Eo *o EINA_UNUSED, void *data EINA_UNUSED, const Eina_Error err)
62
ck_abort_msg( "Failed to get the child with '%s'.\n", eina_error_msg_get(err));
63
return eina_value_error_init(err);
67
_children_removed_cb(void *data EINA_UNUSED, const Efl_Event* event)
69
Efl_Model_Children_Event* evt = event->info;
77
// Last time we can fetch the object
78
f = efl_future_then(event->object,
79
efl_model_children_slice_get(event->object, evt->index, 1),
80
.success = _children_got,
81
.error = _children_failed,
82
.success_type = EINA_VALUE_TYPE_ARRAY);
87
fail_if(evt->child == NULL);
88
path = efl_model_property_get(evt->child, "path");
89
fail_if(path == NULL);
90
str = eina_value_to_string(path);
93
if (temp_filename && strcmp(str, temp_filename) == 0)
94
efl_future_then(efl_loop_get(evt->child),
95
efl_loop_job(efl_loop_get(evt->child)),
96
.success = _delayed_quit);
99
eina_value_free(path);
102
static Eina_Bool started_up = EINA_FALSE;
105
_children_get(void *data,
107
const Eina_Future *dead_future EINA_UNUSED)
109
Efl_Model *filemodel = data;
113
if (eina_value_type_get(&v) == EINA_VALUE_TYPE_ERROR)
117
fail_if(!eina_value_error_get(&v, &err));
118
fail_if(err != ECANCELED);
122
fail_if(eina_value_type_get(&v) != EINA_VALUE_TYPE_ARRAY);
124
EINA_VALUE_ARRAY_FOREACH(&v, len, i, child)
129
path = efl_model_property_get(child, "path");
130
fail_if(path == NULL);
131
str = eina_value_to_string(path);
132
fail_if(str == NULL);
134
if (started_up && strcmp(temp_filename, str) == 0)
136
children_deleted = EINA_TRUE;
137
efl_model_child_del(filemodel, child);
140
eina_value_free(path);
147
fd = eina_file_mkstemp("prefixXXXXXX.ext", &temp_filename);
148
ck_assert_int_gt(fd, 0);
151
started_up = EINA_TRUE;
157
_children_added_cb(void *d EINA_UNUSED, const Efl_Event* event)
159
Efl_Model_Children_Event* evt = event->info;
162
future = efl_model_children_slice_get(event->object, evt->index, 1);
163
eina_future_then(future, _children_get, event->object, NULL);
166
EFL_START_TEST(efl_io_model_test_test_monitor_add)
168
Eo *filemodel = NULL;
170
tmpdir = eina_environment_tmp_get();
172
filemodel = efl_add(EFL_IO_MODEL_CLASS,
174
efl_io_model_path_set(efl_added, tmpdir));
175
fail_if(!filemodel, "ERROR: Cannot init model!\n");
177
efl_event_callback_add(filemodel, EFL_MODEL_EVENT_CHILD_ADDED, &_children_added_cb, filemodel);
178
efl_event_callback_add(filemodel, EFL_MODEL_EVENT_CHILD_REMOVED, &_children_removed_cb, NULL);
180
ecore_main_loop_begin();
184
fail_if(!children_deleted);
189
efl_io_model_test_monitor_add(TCase *tc)
191
tcase_add_test(tc, efl_io_model_test_test_monitor_add);