14
#define EFL_MODEL_TEST_FILENAME_PATH "/tmp"
15
#define EFL_MODEL_MAX_TEST_CHILDS 16
25
int proplist_filename;
39
int properties_loaded;
42
static struct reqs_t reqs;
43
static Ecore_Event_Handler *handler;
46
exit_func(void *data EINA_UNUSED, int ev_type EINA_UNUSED, void *ev)
48
Ecore_Event_Signal_Exit *e;
50
e = (Ecore_Event_Signal_Exit *)ev;
51
if (e->interrupt) fprintf(stdout, "Exit: interrupt\n");
52
else if (e->quit) fprintf(stdout, "Exit: quit\n");
53
else if (e->terminate) fprintf(stdout, "Exit: terminate\n");
54
ecore_main_loop_quit();
55
return ECORE_CALLBACK_CANCEL;
59
promise_then_accessor(void *data EINA_UNUSED,
61
const Eina_Future *dead_future EINA_UNUSED)
66
fail_if(eina_value_type_get(&v) != EINA_VALUE_TYPE_ARRAY);
68
EINA_VALUE_ARRAY_FOREACH(&v, len, i, child)
71
ecore_main_loop_quit();
73
return EINA_VALUE_EMPTY;
78
const Eina_Value v EINA_UNUSED,
79
const Eina_Future *dead_future EINA_UNUSED)
82
Efl_Model *filemodel = data;
83
static unsigned int it = 0;
87
fprintf(stderr, "Failed to list any files after 3 attemps.\n");
88
ecore_main_loop_quit();
89
return eina_value_error_init(ECANCELED);
92
if (efl_model_children_count_get(filemodel) == 0)
94
future = efl_loop_job(efl_provider_find(filemodel, EFL_LOOP_CLASS));
95
future = eina_future_then(future, listing, filemodel, NULL);
99
future = efl_model_children_slice_get(filemodel, 0, efl_model_children_count_get(filemodel));
100
future = eina_future_then(future, &promise_then_accessor, NULL, NULL);
103
return eina_future_as_value(future);
106
static Eina_Future *listingf = NULL;
109
clearup(void *data EINA_UNUSED,
111
const Eina_Future *dead_future EINA_UNUSED)
119
setup_waiter(Efl_Model *model)
121
Efl_Loop *loop = efl_provider_find(model, EFL_LOOP_CLASS);
123
if (listingf) return ;
124
listingf = efl_loop_job(loop);
125
listingf = eina_future_then(listingf, listing, model, NULL);
126
listingf = eina_future_then(listingf, clearup, NULL, NULL);
130
_property_changed(void *data EINA_UNUSED, const Efl_Event *event)
133
Efl_Model_Property_Event *ev = event->info;
134
Efl_Model *filemodel = event->object;
135
const char *property;
136
Eina_Array_Iterator iterator;
139
EINA_ARRAY_ITER_NEXT(ev->changed_properties, i, property, iterator)
140
if (!strcmp(property, "is_dir"))
142
if (efl_model_children_count_get(filemodel) > 0)
143
setup_waiter(filemodel);
148
_child_added(void *data EINA_UNUSED, const Efl_Event *event)
151
Efl_Model *filemodel = event->object;
153
if (efl_model_children_count_get(filemodel) > 0)
154
setup_waiter(filemodel);
157
EFL_CALLBACKS_ARRAY_DEFINE(model,
158
{ EFL_MODEL_EVENT_PROPERTIES_CHANGED, _property_changed },
159
{ EFL_MODEL_EVENT_CHILD_ADDED, _child_added })
161
EFL_START_TEST(efl_io_model_test_test_file)
163
Eo *filemodel = NULL;
167
memset(&reqs, 0, sizeof(struct reqs_t));
169
filemodel = efl_add(EFL_IO_MODEL_CLASS, efl_main_loop_get(),
170
efl_io_model_path_set(efl_added, EFL_MODEL_TEST_FILENAME_PATH));
171
fail_if(!filemodel, "ERROR: Cannot init model!\n");
173
handler = ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, exit_func, NULL);
175
result = efl_model_property_get(filemodel, "filename");
177
str = eina_value_to_string(result);
180
eina_value_free(result);
182
result = efl_model_property_get(filemodel, "size");
184
eina_value_free(result);
186
result = efl_model_property_get(filemodel, "mtime");
188
eina_value_free(result);
190
efl_event_callback_array_add(filemodel, model(), NULL);
192
ecore_main_loop_begin();
198
EFL_START_TEST(efl_io_model_test_del)
203
DISABLE_ABORT_ON_CRITICAL_START;
204
for (i = 0; i < 10; i++)
206
model = efl_add(EFL_IO_MODEL_CLASS, efl_main_loop_get(),
207
efl_io_model_path_set(efl_added, EFL_MODEL_TEST_FILENAME_PATH));
210
DISABLE_ABORT_ON_CRITICAL_END;
215
efl_io_model_test_file(TCase *tc)
217
tcase_add_test(tc, efl_io_model_test_test_file);
218
tcase_add_test(tc, efl_io_model_test_del);