10
#include "eio_test_common.h"
16
static uint64_t test_count = 0;
17
static Eina_Bool direct = EINA_FALSE;
19
#define DONE_CALLED 0xdeadbeef
22
_access_cb(void *data, Eina_Array *paths)
24
uint64_t *number_of_listed_files = data;
26
*number_of_listed_files += eina_array_count(paths);
30
_progress_cb(void *data, Eina_Array *entries)
32
uint64_t *number_of_listed_files = data;
34
(*number_of_listed_files) += eina_array_count(entries);
39
const Eina_Value file,
40
const Eina_Future *dead EINA_UNUSED)
42
if (file.type == EINA_VALUE_TYPE_ERROR)
46
eina_value_get(&file, &err);
47
fprintf(stderr, "Something has gone wrong: %s\n", eina_error_msg_get(err));
50
if (file.type == EINA_VALUE_TYPE_UINT64)
52
uint64_t *number_of_listed_files = data;
55
eina_value_get(&file, &value);
57
fail_if((*number_of_listed_files) != test_count);
58
fail_if(value != test_count);
59
*number_of_listed_files = DONE_CALLED;
62
ecore_main_loop_quit();
69
const Eina_Value file,
70
const Eina_Future *dead EINA_UNUSED)
72
uint64_t *number_of_listed_files = data;
74
if (eina_value_type_get(&file) == EINA_VALUE_TYPE_ERROR)
79
eina_value_error_get(&file, &err);
80
msg = eina_error_msg_get(err);
82
EINA_LOG_ERR("error: %s", msg);
87
Eina_Value convert = EINA_VALUE_EMPTY;
88
unsigned long files_count = 0;
90
eina_value_setup(&convert, EINA_VALUE_TYPE_ULONG);
91
fail_if(eina_value_convert(&file, &convert) != EINA_TRUE);
92
fail_unless(eina_value_ulong_get(&convert, &files_count));
94
fail_if((*number_of_listed_files) != test_count);
95
fail_if(files_count != test_count);
97
*number_of_listed_files = DONE_CALLED;
100
ecore_main_loop_quit();
106
_open_done_cb(void *data,
107
const Eina_Value file,
108
const Eina_Future *dead EINA_UNUSED)
110
if (file.type == EINA_VALUE_TYPE_ERROR)
114
eina_value_get(&file, &err);
115
fprintf(stderr, "Something has gone wrong: %s\n", eina_error_msg_get(err));
118
if (file.type == EINA_VALUE_TYPE_FILE)
120
Eina_Bool *opened = (Eina_Bool *)data;
124
ecore_main_loop_quit();
130
_stat_done_cb(void *data,
132
const Eina_Future *dead EINA_UNUSED)
134
Eina_Bool *is_dir = data;
137
if (st.type == EINA_VALUE_TYPE_ERROR)
140
eina_value_get(&st, &err);
141
fprintf(stderr, "Something has gone wrong: %s\n", eina_error_msg_get(err));
145
if (st.type == EINA_VALUE_TYPE_STRUCT)
147
unsigned int mode = 0;
149
fail_if(!eina_value_struct_get(&st, "mode", &mode));
150
fail_if(S_ISDIR(mode) != *is_dir);
153
fail_if(S_ISLNK(mode));
156
rights = mode & (S_IRWXU | S_IRWXG | S_IRWXO);
157
fail_if(rights != default_rights);
160
ecore_main_loop_quit();
166
_test_ls(Eina_Future *(*func)(const Eo *obj, const char *path, Eina_Bool recursive,
167
void *info_data, EflIoDirectInfo info, Eina_Free_Cb info_free_cb),
168
uint64_t expected_test_count,
169
const char* test_dirname)
171
Efl_Io_Manager *job = efl_add(EFL_IO_MANAGER_CLASS, efl_main_loop_get());
172
Eina_Future *f = NULL;
173
uint64_t main_files = 0;
177
f = func(job, test_dirname, EINA_FALSE, &main_files, _progress_cb, NULL);
179
test_count = expected_test_count;
180
eina_future_then(f, &_done_cb, &main_files, NULL);
182
ecore_main_loop_begin();
184
fail_if(main_files != DONE_CALLED);
187
f = func(job, test_dirname, EINA_TRUE, &main_files, _progress_cb, NULL);
188
test_count = expected_test_count + 4;
189
eina_future_then(f, &_done_cb, &main_files, NULL);
191
ecore_main_loop_begin();
193
fail_if(main_files != DONE_CALLED);
198
EFL_START_TEST(efl_io_manager_test_stat)
200
Eina_Tmpstr *test_dirname;
201
Eina_Tmpstr *nested_dirname;
202
Eina_Tmpstr *nested_filename;
205
Eina_Bool is_dir = EINA_TRUE;
208
ret = ecore_file_init();
211
test_dirname = get_eio_test_file_tmp_dir();
212
nested_dirname = create_test_dirs(test_dirname);
213
nested_filename = get_full_path(test_dirname, files[3]);
215
job = efl_add(EFL_IO_MANAGER_CLASS, efl_main_loop_get());
219
f = efl_io_manager_stat(job, nested_dirname);
220
eina_future_then(f, _stat_done_cb, &is_dir, NULL);
221
ecore_main_loop_begin();
224
f = efl_io_manager_stat(job, nested_filename);
225
eina_future_then(f, _stat_done_cb, &is_dir, NULL);
226
ecore_main_loop_begin();
230
fail_if(!ecore_file_recursive_rm(test_dirname));
232
eina_tmpstr_del(nested_dirname);
233
eina_tmpstr_del(test_dirname);
234
eina_tmpstr_del(nested_filename);
235
ecore_file_shutdown();
239
EFL_START_TEST(efl_io_manager_test_ls)
241
Eina_Tmpstr *test_dirname;
242
Eina_Tmpstr *nested_dirname;
243
Eina_Tmpstr *nested_filename;
246
uint64_t main_files = 0;
249
ret = ecore_file_init();
252
test_dirname = get_eio_test_file_tmp_dir();
253
nested_dirname = create_test_dirs(test_dirname);
254
nested_filename = get_full_path(test_dirname, files[3]);
257
job = efl_add(EFL_IO_MANAGER_CLASS, efl_main_loop_get());
260
f = efl_io_manager_ls(job, test_dirname, &main_files, _access_cb, NULL);
262
eina_future_then(f, _future_cb, &main_files, NULL);
264
ecore_main_loop_begin();
266
fail_if(main_files != DONE_CALLED);
271
_test_ls(&efl_io_manager_stat_ls, 6, test_dirname);
272
_test_ls(&efl_io_manager_direct_ls, 6, test_dirname);
276
fail_if(!ecore_file_recursive_rm(test_dirname));
278
eina_tmpstr_del(nested_dirname);
279
eina_tmpstr_del(test_dirname);
280
eina_tmpstr_del(nested_filename);
281
ecore_file_shutdown();
285
EFL_START_TEST(efl_io_manager_test_open)
287
Eina_Tmpstr *test_dirname;
288
Eina_Tmpstr *nested_dirname;
289
Eina_Tmpstr *nested_filename;
292
Eina_Bool opened_file = EINA_FALSE;
295
ret = ecore_file_init();
298
test_dirname = get_eio_test_file_tmp_dir();
299
nested_dirname = create_test_dirs(test_dirname);
300
nested_filename = get_full_path(test_dirname, files[3]);
302
job = efl_add(EFL_IO_MANAGER_CLASS, efl_main_loop_get());
304
f = efl_io_manager_open(job, nested_filename, EINA_FALSE);
305
eina_future_then(f, _open_done_cb, &opened_file, NULL);
306
ecore_main_loop_begin();
308
fail_if(!opened_file);
312
fail_if(!ecore_file_recursive_rm(test_dirname));
314
eina_tmpstr_del(nested_dirname);
315
eina_tmpstr_del(test_dirname);
317
eina_tmpstr_del(nested_filename);
318
ecore_file_shutdown();
322
EFL_START_TEST(efl_io_test_instantiated)
324
Efl_Io_Manager *manager;
328
ck_assert_int_eq(eio_shutdown(), 0);
330
fail_if(efl_provider_find(efl_main_loop_get(), EFL_IO_MANAGER_CLASS) != NULL);
332
ck_assert_int_eq(eio_init(), 1);
334
manager = efl_provider_find(efl_main_loop_get(), EFL_IO_MANAGER_CLASS);
335
fail_if(manager == NULL);
336
fail_if(!efl_isa(manager, EFL_IO_MANAGER_CLASS));
338
efl_object_shutdown();
343
eio_test_job(TCase *tc)
345
tcase_add_test(tc, efl_io_manager_test_ls);
346
tcase_add_test(tc, efl_io_manager_test_stat);
347
tcase_add_test(tc, efl_io_manager_test_open);
348
tcase_add_test(tc, efl_io_test_instantiated);