19 #include "eet_suite.h"
21 START_TEST(eet_test_init)
33 typedef struct _Eet_Test_Basic_Type Eet_Test_Basic_Type;
34 struct _Eet_Test_Basic_Type
48 unsigned long long ul;
49 Eet_Test_Basic_Type *empty;
50 Eet_Test_Basic_Type *with;
53 #define EET_TEST_CHAR 0x42
54 #define EET_TEST_SHORT 0x4224
55 #define EET_TEST_INT 0x42211224
56 #define EET_TEST_LONG_LONG 0x84CB42211224BC48
57 #define EET_TEST_STRING "my little test with escape \\\""
58 #define EET_TEST_KEY1 "key1"
59 #define EET_TEST_KEY2 "key2"
60 #define EET_TEST_FLOAT 123.45689
61 #define EET_TEST_FLOAT2 1.0
62 #define EET_TEST_FLOAT3 0.25
63 #define EET_TEST_FLOAT4 0.0001234
64 #define EET_TEST_DOUBLE 123456789.9876543210
65 #define EET_TEST_DOUBLE2 1.0
66 #define EET_TEST_DOUBLE3 0.25
67 #define EET_TEST_FILE_KEY1 "keys/data/1"
68 #define EET_TEST_FILE_KEY2 "keys/data/2"
69 #define EET_TEST_FILE_IMAGE "keys/images/"
71 typedef struct _Eet_Test_Image Eet_Test_Image;
72 struct _Eet_Test_Image
77 unsigned int color[64];
80 static const Eet_Test_Image test_noalpha = {
83 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
84 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
85 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
86 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
87 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
88 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
89 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
90 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA
94 static const Eet_Test_Image test_alpha = {
97 0x0FAA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x0F110000,
98 0x0000AA00, 0x0F0000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x0F110000, 0x00AA0000,
99 0x000000AA, 0x00110000, 0x0FAA0000, 0x0000AA00, 0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00,
100 0x00110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
101 0x00AA0000, 0x0000AA00, 0x000000AA, 0x0F110000, 0x0FAA0000, 0x0000AA00, 0x000000AA, 0x00110000,
102 0x0000AA00, 0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA, 0x00110000, 0x00AA0000,
103 0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x0FAA0000, 0x0000AA00,
104 0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA
109 _eet_test_basic_set(Eet_Test_Basic_Type *res, int i)
111 res->c = EET_TEST_CHAR;
112 res->s = EET_TEST_SHORT;
113 res->i = EET_TEST_INT + i;
114 res->l = EET_TEST_LONG_LONG;
115 res->str = EET_TEST_STRING;
116 res->istr = EET_TEST_STRING;
117 res->f1 = - EET_TEST_FLOAT;
118 res->d = - EET_TEST_DOUBLE;
119 res->f2 = EET_TEST_FLOAT4;
120 res->uc = EET_TEST_CHAR;
121 res->us = EET_TEST_SHORT;
122 res->ui = EET_TEST_INT;
123 res->ul = EET_TEST_LONG_LONG;
129 Eet_Test_Basic_Type *tmp;
131 tmp = malloc(sizeof (Eet_Test_Basic_Type));
135 tmp->c = EET_TEST_CHAR;
136 tmp->s = EET_TEST_SHORT;
137 tmp->i = EET_TEST_INT + i + 1;
138 tmp->l = EET_TEST_LONG_LONG;
139 tmp->str = EET_TEST_STRING;
140 tmp->istr = EET_TEST_STRING;
141 tmp->f1 = - EET_TEST_FLOAT;
142 tmp->d = - EET_TEST_DOUBLE;
143 tmp->f2 = EET_TEST_FLOAT4;
144 tmp->uc = EET_TEST_CHAR;
145 tmp->us = EET_TEST_SHORT;
146 tmp->ui = EET_TEST_INT;
147 tmp->ul = EET_TEST_LONG_LONG;
154 _eet_test_basic_check(Eet_Test_Basic_Type *result, int i)
158 fail_if(result->c != EET_TEST_CHAR);
159 fail_if(result->s != EET_TEST_SHORT);
160 fail_if(result->i != EET_TEST_INT + i);
161 fail_if(result->l != (long long) EET_TEST_LONG_LONG);
162 fail_if(strcmp(result->str, EET_TEST_STRING) != 0);
163 fail_if(strcmp(result->istr, EET_TEST_STRING) != 0);
164 fail_if(result->uc != EET_TEST_CHAR);
165 fail_if(result->us != EET_TEST_SHORT);
166 fail_if(result->ui != EET_TEST_INT);
167 fail_if(result->ul != EET_TEST_LONG_LONG);
169 tmp = (result->f1 + EET_TEST_FLOAT);
170 if (tmp < 0) tmp = -tmp;
171 fail_if(tmp > 0.005);
173 tmp = (result->f2 - EET_TEST_FLOAT4);
174 if (tmp < 0) tmp = -tmp;
175 fail_if(tmp > 0.005);
177 tmp = (result->d + EET_TEST_DOUBLE);
178 if (tmp < 0) tmp = -tmp;
179 fail_if(tmp > 0.00005);
181 fail_if(result->empty != NULL);
184 Eet_Test_Basic_Type *tmp;
187 fail_if(tmp == NULL);
189 fail_if(tmp->c != EET_TEST_CHAR);
190 fail_if(tmp->s != EET_TEST_SHORT);
191 fail_if(tmp->i != EET_TEST_INT + i + 1);
192 fail_if(tmp->l != (long long) EET_TEST_LONG_LONG);
193 fail_if(strcmp(tmp->str, EET_TEST_STRING) != 0);
194 fail_if(strcmp(tmp->istr, EET_TEST_STRING) != 0);
195 fail_if(tmp->uc != EET_TEST_CHAR);
196 fail_if(tmp->us != EET_TEST_SHORT);
197 fail_if(tmp->ui != EET_TEST_INT);
198 fail_if(tmp->ul != EET_TEST_LONG_LONG);
201 fail_if(result->with != NULL);
205 _eet_build_basic_descriptor(Eet_Data_Descriptor *edd)
207 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "c", c, EET_T_CHAR);
208 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "s", s, EET_T_SHORT);
209 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "i", i, EET_T_INT);
210 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "l", l, EET_T_LONG_LONG);
211 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "str", str, EET_T_STRING);
212 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "istr", istr, EET_T_INLINED_STRING);
213 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "f1", f1, EET_T_FLOAT);
214 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "f2", f2, EET_T_FLOAT);
215 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "d", d, EET_T_DOUBLE);
216 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "uc", uc, EET_T_UCHAR);
217 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "us", us, EET_T_USHORT);
218 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "ui", ui, EET_T_UINT);
219 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "ul", ul, EET_T_ULONG_LONG);
221 EET_DATA_DESCRIPTOR_ADD_SUB(edd, Eet_Test_Basic_Type, "empty", empty, edd);
222 EET_DATA_DESCRIPTOR_ADD_SUB(edd, Eet_Test_Basic_Type, "with", with, edd);
225 START_TEST(eet_test_basic_data_type_encoding_decoding)
227 Eet_Data_Descriptor *edd;
228 Eet_Test_Basic_Type *result;
229 Eet_Data_Descriptor_Class eddc;
230 Eet_Test_Basic_Type etbt;
236 _eet_test_basic_set(&etbt, 0);
238 eet_test_setup_eddc(&eddc);
239 eddc.name = "Eet_Test_Basic_Type";
240 eddc.size = sizeof(Eet_Test_Basic_Type);
242 edd = eet_data_descriptor_stream_new(&eddc);
245 _eet_build_basic_descriptor(edd);
247 transfert = eet_data_descriptor_encode(edd, &etbt, &size);
248 fail_if(!transfert || size <= 0);
250 result = eet_data_descriptor_decode(edd, transfert, size);
253 _eet_test_basic_check(result, 0);
258 eet_data_descriptor_free(edd);
264 typedef struct _Eet_Test_Ex_Type Eet_Test_Ex_Type;
265 struct _Eet_Test_Ex_Type
270 unsigned long long l;
287 Eet_Test_Basic_Type sarray1[10];
288 unsigned int sarray2[5];
289 unsigned int varray1_count;
290 unsigned int *varray1;
291 unsigned int varray2_count;
292 Eet_Test_Basic_Type *varray2;
296 unsigned long long ul;
305 _eet_build_ex_descriptor(Eet_Data_Descriptor *edd)
307 Eet_Data_Descriptor_Class eddc;
308 Eet_Test_Ex_Type etbt;
309 Eet_Data_Descriptor *eddb;
311 eet_test_setup_eddc(&eddc);
312 eddc.name = "Eet_Test_Basic_Type";
313 eddc.size = sizeof(Eet_Test_Basic_Type);
314 eddb = eet_data_descriptor_file_new(&eddc);
317 _eet_build_basic_descriptor(eddb);
319 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "c", c, EET_T_CHAR);
320 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "s", s, EET_T_SHORT);
321 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "i", i, EET_T_INT);
322 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "l", l, EET_T_LONG_LONG);
323 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "str", str, EET_T_STRING);
324 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "istr", istr, EET_T_INLINED_STRING);
325 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f1", f1, EET_T_FLOAT);
326 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f2", f2, EET_T_FLOAT);
327 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f3", f3, EET_T_FLOAT);
328 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f4", f4, EET_T_FLOAT);
329 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d1", d1, EET_T_DOUBLE);
330 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d2", d2, EET_T_DOUBLE);
331 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d3", d3, EET_T_DOUBLE);
332 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d4", d4, EET_T_DOUBLE);
333 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "uc", uc, EET_T_UCHAR);
334 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "us", us, EET_T_USHORT);
335 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "ui", ui, EET_T_UINT);
336 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "ul", ul, EET_T_ULONG_LONG);
337 EET_DATA_DESCRIPTOR_ADD_ARRAY(edd, Eet_Test_Ex_Type, "sarray1", sarray1, eddb);
338 EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(edd, Eet_Test_Ex_Type, "varray2", varray2, eddb);
339 eet_data_descriptor_element_add(edd, "varray1", EET_T_INT, EET_G_VAR_ARRAY,
340 (char *)(&(etbt.varray1)) - (char *)(&(etbt)),
341 (char *)(&(etbt.varray1_count)) - (char *)(&(etbt)), /* 0, */NULL, NULL);
342 eet_data_descriptor_element_add(edd, "sarray2", EET_T_INT, EET_G_ARRAY,
343 (char *)(&(etbt.sarray2)) - (char *)(&(etbt)),
344 /* 0, */sizeof(etbt.sarray2)/sizeof(etbt.sarray2[0]), NULL, NULL);
345 eet_data_descriptor_element_add(edd, "charray", EET_T_STRING, EET_G_ARRAY,
346 (char *)(&(etbt.charray)) - (char *)(&(etbt)),
347 /* 0, */sizeof(etbt.charray)/sizeof(etbt.charray[0]), NULL, NULL);
348 EET_DATA_DESCRIPTOR_ADD_LIST(edd, Eet_Test_Ex_Type, "list", list, edd);
349 EET_DATA_DESCRIPTOR_ADD_HASH(edd, Eet_Test_Ex_Type, "hash", hash, edd);
350 eet_data_descriptor_element_add(edd, "ilist", EET_T_INT, EET_G_LIST,
351 (char *)(&(etbt.ilist)) - (char *)(&(etbt)),
352 0, /* 0, */NULL, NULL);
353 eet_data_descriptor_element_add(edd, "ihash", EET_T_INT, EET_G_HASH,
354 (char *)(&(etbt.ihash)) - (char *)(&(etbt)),
355 0, /* 0, */NULL, NULL);
356 eet_data_descriptor_element_add(edd, "slist", EET_T_STRING, EET_G_LIST,
357 (char *)(&(etbt.slist)) - (char *)(&(etbt)),
358 0, /* 0, */NULL, NULL);
359 eet_data_descriptor_element_add(edd, "shash", EET_T_STRING, EET_G_HASH,
360 (char *)(&(etbt.shash)) - (char *)(&(etbt)),
361 0, /* 0, */NULL, NULL);
364 static Eet_Test_Ex_Type*
365 _eet_test_ex_set(Eet_Test_Ex_Type *res, int offset)
369 if (!res) res = malloc( sizeof(Eet_Test_Ex_Type));
370 if (!res) return NULL;
372 res->c = EET_TEST_CHAR + offset;
373 res->s = EET_TEST_SHORT + offset;
374 res->i = EET_TEST_INT + offset;
375 res->l = EET_TEST_LONG_LONG + offset;
376 res->str = EET_TEST_STRING;
377 res->istr = EET_TEST_STRING;
378 res->f1 = EET_TEST_FLOAT + offset;
379 res->f2 = -(EET_TEST_FLOAT2 + offset);
380 res->f3 = EET_TEST_FLOAT3 + offset;
381 res->f4 = EET_TEST_FLOAT2 + offset;
382 res->d1 = EET_TEST_DOUBLE + offset;
383 res->d2 = -(EET_TEST_DOUBLE2 + offset);
384 res->d3 = EET_TEST_DOUBLE3 + offset;
385 res->d4 = EET_TEST_DOUBLE2 + offset;
392 for (i = 0; i < sizeof(res->charray)/sizeof(res->charray[0]); ++i)
393 res->charray[i] = NULL;
395 res->varray2 = malloc(sizeof (Eet_Test_Basic_Type) * 10);
396 res->varray1 = malloc(sizeof (int) * 5);
397 fail_if(!res->varray1 || !res->varray2);
398 for (i = 0; i < 10; ++i)
400 _eet_test_basic_set(res->sarray1 + i, i);
401 _eet_test_basic_set(res->varray2 + i, i);
403 res->varray2_count = 10;
404 for (i = 0; i < 5; ++i)
406 res->sarray2[i] = i * 42 + 1;
407 res->varray1[i] = i * 42 + 1;
409 res->varray1_count = 5;
411 res->uc = EET_TEST_CHAR + offset;
412 res->us = EET_TEST_SHORT + offset;
413 res->ui = EET_TEST_INT + offset;
414 res->ul = EET_TEST_LONG_LONG + offset;
420 _eet_test_ex_check(Eet_Test_Ex_Type *stuff, int offset)
425 if (!stuff) return 1;
427 if (stuff->c != EET_TEST_CHAR + offset) return 1;
428 if (stuff->s != EET_TEST_SHORT + offset) return 1;
429 if (stuff->i != EET_TEST_INT + offset) return 1;
430 if (stuff->l != EET_TEST_LONG_LONG + offset) return 1;
431 if (strcmp(stuff->str, EET_TEST_STRING) != 0) return 1;
432 if (strcmp(stuff->istr, EET_TEST_STRING) != 0) return 1;
434 tmp = stuff->f1 - (EET_TEST_FLOAT + offset);
435 if (tmp < 0) tmp = -tmp;
436 if (tmp > 0.005) return 1;
438 tmp = stuff->d1 - (EET_TEST_DOUBLE + offset);
439 if (tmp < 0) tmp = -tmp;
440 if (tmp > 0.00005) return 1;
442 if (stuff->f2 != - (EET_TEST_FLOAT2 + offset)) return 1;
443 if (stuff->d2 != - (EET_TEST_DOUBLE2 + offset)) return 1;
445 if (stuff->f3 != EET_TEST_FLOAT3 + offset) return 1;
446 if (stuff->d3 != EET_TEST_DOUBLE3 + offset) return 1;
448 if (stuff->f4 != EET_TEST_FLOAT2 + offset) return 1;
449 if (stuff->d4 != EET_TEST_DOUBLE2 + offset) return 1;
451 if (stuff->uc != EET_TEST_CHAR + offset) return 1;
452 if (stuff->us != EET_TEST_SHORT + offset) return 1;
453 if (stuff->ui != (unsigned int) EET_TEST_INT + offset) return 1;
454 if (stuff->ul != EET_TEST_LONG_LONG + offset) return 1;
456 if (stuff->varray1_count != 5) return 1;
457 if (stuff->varray2_count != 10) return 1;
459 for (i = 0; i < 5; ++i)
460 if (stuff->sarray2[i] != i * 42 + 1 && stuff->varray1[i] != i * 42 + 1)
463 for (i = 0; i < 10; ++i)
465 _eet_test_basic_check(stuff->sarray1 + i, i);
466 _eet_test_basic_check(stuff->varray2 + i, i);
473 func(__UNUSED__ const Eina_Hash *hash, const void *key, void *data, void *fdata)
477 if (strcmp(key, EET_TEST_KEY1) != 0
478 && strcmp(key, EET_TEST_KEY2) != 0) *res = 1;
479 if (_eet_test_ex_check(data, 2)) *res = 1;
485 func7(__UNUSED__ const Eina_Hash *hash, __UNUSED__ const void *key, void *data, void *fdata)
492 if (*val != 7) *res = 1;
497 START_TEST(eet_test_data_type_encoding_decoding)
499 Eet_Data_Descriptor *edd;
500 Eet_Test_Ex_Type *result;
502 Eet_Data_Descriptor_Class eddc;
503 Eet_Test_Ex_Type etbt;
509 _eet_test_ex_set(&etbt, 0);
510 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
511 etbt.hash = eina_hash_string_superfast_new(NULL);
512 eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
513 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
514 etbt.ihash = eina_hash_string_superfast_new(NULL);
515 eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
516 etbt.slist = eina_list_prepend(NULL, "test");
517 etbt.shash = eina_hash_string_superfast_new(NULL);
518 eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
519 memset(&etbt.charray, 0, sizeof(etbt.charray));
520 etbt.charray[0] = "test";
521 etbt.charray[5] = "plouf";
523 eet_test_setup_eddc(&eddc);
524 eddc.name = "Eet_Test_Ex_Type";
525 eddc.size = sizeof(Eet_Test_Ex_Type);
527 edd = eet_data_descriptor_file_new(&eddc);
530 _eet_build_ex_descriptor(edd);
532 transfert = eet_data_descriptor_encode(edd, &etbt, &size);
533 fail_if(!transfert || size <= 0);
535 result = eet_data_descriptor_decode(edd, transfert, size);
538 fail_if(_eet_test_ex_check(result, 0) != 0);
539 fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
540 fail_if(eina_list_data_get(result->ilist) == NULL);
541 fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
542 fail_if(eina_list_data_get(result->slist) == NULL);
543 fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
544 fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
545 fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
546 fail_if(strcmp(result->charray[0], "test") != 0);
547 fail_if(strcmp(result->charray[5], "plouf") != 0);
550 if (result->hash) eina_hash_foreach(result->hash, func, &test);
552 if (result->ihash) eina_hash_foreach(result->ihash, func7, &test);
560 append_string(void *data, const char *str)
562 char **string = data;
567 length = *string ? strlen(*string) : 0;
568 *string = realloc(*string, strlen(str) + length + 1);
570 memcpy((*string) + length, str, strlen(str) + 1);
573 START_TEST(eet_test_data_type_dump_undump)
575 Eet_Data_Descriptor *edd;
576 Eet_Test_Ex_Type *result;
577 Eet_Data_Descriptor_Class eddc;
578 Eet_Test_Ex_Type etbt;
589 _eet_test_ex_set(&etbt, 0);
590 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
591 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
592 etbt.hash = eina_hash_string_superfast_new(NULL);
593 eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
594 etbt.hash = eina_hash_string_superfast_new(NULL);
595 eina_hash_add(etbt.hash, EET_TEST_KEY2, _eet_test_ex_set(NULL, 2));
596 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
597 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
598 etbt.ihash = eina_hash_string_superfast_new(NULL);
599 eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
600 etbt.ihash = eina_hash_string_superfast_new(NULL);
601 eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
602 etbt.slist = eina_list_prepend(NULL, "test");
603 etbt.shash = eina_hash_string_superfast_new(NULL);
604 eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
605 memset(&etbt.charray, 0, sizeof(etbt.charray));
606 etbt.charray[0] = "test";
608 eet_test_setup_eddc(&eddc);
609 eddc.name = "Eet_Test_Ex_Type";
610 eddc.size = sizeof(Eet_Test_Ex_Type);
612 edd = eet_data_descriptor_file_new(&eddc);
615 _eet_build_ex_descriptor(edd);
617 transfert1 = eet_data_descriptor_encode(edd, &etbt, &size1);
618 fail_if(!transfert1 || size1 <= 0);
621 eet_data_text_dump(transfert1, size1, append_string, &string1);
624 transfert2 = eet_data_text_undump(string1, string1 ? strlen(string1) : 0, &size2);
625 fail_if(!transfert2 && size2 <= 0);
628 eet_data_text_dump(transfert2, size2, append_string, &string2);
631 fail_if(strlen(string2) != strlen(string1));
633 result = eet_data_descriptor_decode(edd, transfert2, size2);
636 fail_if(_eet_test_ex_check(result, 0) != 0);
637 fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
638 fail_if(eina_list_data_get(result->ilist) == NULL);
639 fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
640 fail_if(eina_list_data_get(result->slist) == NULL);
641 fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
642 fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
643 fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
644 fail_if(strcmp(result->charray[0], "test") != 0);
647 if (result->hash) eina_hash_foreach(result->hash, func, &test);
649 if (result->ihash) eina_hash_foreach(result->ihash, func7, &test);
656 START_TEST(eet_file_simple_write)
658 const char *buffer = "Here is a string of data to save !";
661 char *file = strdup("/tmp/eet_suite_testXXXXXX");
666 fail_if(!(file = tmpnam(file)));
668 fail_if(eet_mode_get(NULL) != EET_FILE_MODE_INVALID);
670 ef = eet_open(file, EET_FILE_MODE_WRITE);
673 fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 1));
674 fail_if(!eet_alias(ef, "keys/alias", "keys/tests", 0));
675 fail_if(!eet_alias(ef, "keys/alias2", "keys/alias", 1));
677 fail_if(eet_mode_get(ef) != EET_FILE_MODE_WRITE);
679 fail_if(eet_list(ef, "*", &size) != NULL);
680 fail_if(eet_num_entries(ef) != -1);
684 /* Test read of simple file */
685 ef = eet_open(file, EET_FILE_MODE_READ);
688 test = eet_read(ef, "keys/tests", &size);
690 fail_if(size != (int) strlen(buffer) + 1);
692 fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
694 test = eet_read(ef, "keys/alias2", &size);
696 fail_if(size != (int) strlen(buffer) + 1);
698 fail_if(eet_read_direct(ef, "key/alias2", &size));
700 fail_if(eet_mode_get(ef) != EET_FILE_MODE_READ);
701 fail_if(eet_num_entries(ef) != 3);
705 /* Test eet cache system */
706 ef = eet_open(file, EET_FILE_MODE_READ);
709 test = eet_read(ef, "keys/tests", &size);
711 fail_if(size != (int) strlen(buffer) + 1);
713 fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
717 fail_if(unlink(file) != 0);
723 START_TEST(eet_file_data_test)
725 Eet_Data_Descriptor *edd;
726 Eet_Test_Ex_Type *result;
730 char *file = strdup("/tmp/eet_suite_testXXXXXX");
731 Eet_Data_Descriptor_Class eddc;
732 Eet_Test_Ex_Type etbt;
738 _eet_test_ex_set(&etbt, 0);
739 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
740 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
741 etbt.hash = eina_hash_string_superfast_new(NULL);
742 eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
743 etbt.hash = eina_hash_string_superfast_new(NULL);
744 eina_hash_add(etbt.hash, EET_TEST_KEY2, _eet_test_ex_set(NULL, 2));
745 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
746 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
747 etbt.ihash = eina_hash_string_superfast_new(NULL);
748 eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
749 etbt.ihash = eina_hash_string_superfast_new(NULL);
750 eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
751 etbt.slist = eina_list_prepend(NULL, "test");
752 etbt.shash = eina_hash_string_superfast_new(NULL);
753 eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
754 memset(&etbt.charray, 0, sizeof(etbt.charray));
755 etbt.charray[0] = "test";
757 eet_test_setup_eddc(&eddc);
758 eddc.name = "Eet_Test_Ex_Type";
759 eddc.size = sizeof(Eet_Test_Ex_Type);
761 edd = eet_data_descriptor_file_new(&eddc);
764 _eet_build_ex_descriptor(edd);
766 fail_if(!(file = tmpnam(file)));
768 /* Insert an error in etbt. */
771 /* Save the encoded data in a file. */
772 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
775 fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
777 result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
780 fail_if(eet_mode_get(ef) != EET_FILE_MODE_READ_WRITE);
782 /* Test string space. */
783 ed = eet_dictionary_get(ef);
785 fail_if(!eet_dictionary_string_check(ed, result->str));
786 fail_if(eet_dictionary_string_check(ed, result->istr));
790 /* Attempt to replace etbt by the correct one. */
791 etbt.i = EET_TEST_INT;
793 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
796 fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
800 /* Read back the data. */
801 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
804 fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY2, &etbt, 0));
806 result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
809 /* Test string space. */
810 ed = eet_dictionary_get(ef);
813 fail_if(!eet_dictionary_string_check(ed, result->str));
814 fail_if(eet_dictionary_string_check(ed, result->istr));
816 /* Test the resulting data. */
817 fail_if(_eet_test_ex_check(result, 0) != 0);
818 fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
819 fail_if(eina_list_data_get(result->ilist) == NULL);
820 fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
821 fail_if(eina_list_data_get(result->slist) == NULL);
822 fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
823 fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
824 fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
825 fail_if(strcmp(result->charray[0], "test") != 0);
828 if (result->hash) eina_hash_foreach(result->hash, func, &test);
830 if (result->ihash) eina_hash_foreach(result->ihash, func7, &test);
833 list = eet_list(ef, "keys/*", &size);
834 fail_if(eet_num_entries(ef) != 2);
836 fail_if(!(strcmp(list[0], EET_TEST_FILE_KEY1) == 0 && strcmp(list[1], EET_TEST_FILE_KEY2) == 0)
837 && !(strcmp(list[0], EET_TEST_FILE_KEY2) == 0 && strcmp(list[1], EET_TEST_FILE_KEY1) == 0));
840 fail_if(eet_delete(ef, NULL) != 0);
841 fail_if(eet_delete(NULL, EET_TEST_FILE_KEY1) != 0);
842 fail_if(eet_delete(ef, EET_TEST_FILE_KEY1) == 0);
844 list = eet_list(ef, "keys/*", &size);
846 fail_if(eet_num_entries(ef) != 1);
848 /* Test some more wrong case */
849 fail_if(eet_data_read(ef, edd, "plop") != NULL);
850 fail_if(eet_data_read(ef, edd, EET_TEST_FILE_KEY1) != NULL);
852 /* Reinsert and reread data */
853 fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
854 fail_if(eet_data_read(ef, edd, EET_TEST_FILE_KEY1) == NULL);
855 fail_if(eet_read_direct(ef, EET_TEST_FILE_KEY1, &size) == NULL);
859 fail_if(unlink(file) != 0);
865 START_TEST(eet_file_data_dump_test)
867 Eet_Data_Descriptor *edd;
868 Eet_Test_Ex_Type *result;
869 Eet_Data_Descriptor_Class eddc;
870 Eet_Test_Ex_Type etbt;
873 char *file = strdup("/tmp/eet_suite_testXXXXXX");
878 _eet_test_ex_set(&etbt, 0);
879 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
880 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
881 etbt.hash = eina_hash_string_superfast_new(NULL);
882 eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
883 eina_hash_add(etbt.hash, EET_TEST_KEY2, _eet_test_ex_set(NULL, 2));
884 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
885 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
886 etbt.ihash = eina_hash_string_superfast_new(NULL);
887 eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
888 eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
889 etbt.slist = eina_list_prepend(NULL, "test");
890 etbt.shash = eina_hash_string_superfast_new(NULL);
891 eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
892 memset(&etbt.charray, 0, sizeof(etbt.charray));
893 etbt.charray[0] = "test";
895 eet_eina_file_data_descriptor_class_set(&eddc, "Eet_Test_Ex_Type", sizeof(Eet_Test_Ex_Type));
897 edd = eet_data_descriptor_file_new(&eddc);
900 _eet_build_ex_descriptor(edd);
902 fail_if(!(file = tmpnam(file)));
904 /* Save the encoded data in a file. */
905 ef = eet_open(file, EET_FILE_MODE_WRITE);
908 fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
912 /* Use dump/undump in the middle */
913 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
917 fail_if(eet_data_dump(ef, EET_TEST_FILE_KEY1, append_string, &string1) != 1);
918 fail_if(eet_delete(ef, EET_TEST_FILE_KEY1) == 0);
919 fail_if(!eet_data_undump(ef, EET_TEST_FILE_KEY1, string1, strlen(string1), 1));
923 /* Test the correctness of the reinsertion. */
924 ef = eet_open(file, EET_FILE_MODE_READ);
927 result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
932 /* Test the resulting data. */
933 fail_if(_eet_test_ex_check(result, 0) != 0);
934 fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
935 fail_if(eina_list_data_get(result->ilist) == NULL);
936 fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
937 fail_if(eina_list_data_get(result->slist) == NULL);
938 fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
939 fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
940 fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
941 fail_if(strcmp(result->charray[0], "test") != 0);
944 if (result->hash) eina_hash_foreach(result->hash, func, &test);
946 if (result->ihash) eina_hash_foreach(result->ihash, func7, &test);
949 fail_if(unlink(file) != 0);
955 START_TEST(eet_image)
958 char *file = strdup("/tmp/eet_suite_testXXXXXX");
968 fail_if(!(file = tmpnam(file)));
970 /* Save the encoded data in a file. */
971 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
974 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "0", test_noalpha.color,
975 test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
977 fail_if(result == 0);
979 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "1", test_noalpha.color,
980 test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
982 fail_if(result == 0);
984 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "2", test_noalpha.color,
985 test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
987 fail_if(result == 0);
989 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "3", test_noalpha.color,
990 test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
992 fail_if(result == 0);
994 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "4", test_noalpha.color,
995 test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
997 fail_if(result == 0);
999 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "5", test_noalpha.color,
1000 test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
1002 fail_if(result == 0);
1004 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "6", test_noalpha.color,
1005 test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
1007 fail_if(result == 0);
1009 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "7", test_alpha.color,
1010 test_alpha.w, test_alpha.h, test_alpha.alpha,
1012 fail_if(result == 0);
1014 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "8", test_alpha.color,
1015 test_alpha.w, test_alpha.h, test_alpha.alpha,
1017 fail_if(result == 0);
1019 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "9", test_alpha.color,
1020 test_alpha.w, test_alpha.h, test_alpha.alpha,
1022 fail_if(result == 0);
1024 data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "2", &w, &h, &alpha, &compress, &quality, &lossy);
1025 fail_if(data == NULL);
1026 fail_if(w != test_noalpha.w);
1027 fail_if(h != test_noalpha.h);
1028 fail_if(alpha != test_noalpha.alpha);
1029 fail_if(compress != 9);
1030 fail_if(lossy != 0);
1031 fail_if(data[0] != test_noalpha.color[0]);
1034 result = eet_data_image_header_read(ef, EET_TEST_FILE_IMAGE "2", &w, &h, &alpha, &compress, &quality, &lossy);
1035 fail_if(result == 0);
1036 fail_if(w != test_noalpha.w);
1037 fail_if(h != test_noalpha.h);
1038 fail_if(alpha != test_noalpha.alpha);
1039 fail_if(compress != 9);
1040 fail_if(lossy != 0);
1044 /* Test read of image */
1045 ef = eet_open(file, EET_FILE_MODE_READ);
1048 result = eet_data_image_header_read(ef, EET_TEST_FILE_IMAGE "0", &w, &h, &alpha, &compress, &quality, &lossy);
1049 fail_if(result == 0);
1050 fail_if(w != test_noalpha.w);
1051 fail_if(h != test_noalpha.h);
1052 fail_if(alpha != test_noalpha.alpha);
1053 fail_if(compress != 0);
1054 fail_if(lossy != 0);
1056 data = malloc(w * h * 4);
1057 fail_if(data == NULL);
1058 result = eet_data_image_read_to_surface(ef, EET_TEST_FILE_IMAGE "0", 4, 4, data, 2, 2, w * 4, &alpha, &compress, &quality, &lossy);
1059 fail_if(result != 1);
1060 fail_if(alpha != test_noalpha.alpha);
1061 fail_if(compress != 0);
1062 fail_if(quality != 100);
1063 fail_if(lossy != 0);
1064 fail_if(data[0] != test_noalpha.color[4 + 4 * w]);
1067 data = malloc(w * h * 4);
1068 fail_if(data == NULL);
1069 result = eet_data_image_read_to_surface(ef, EET_TEST_FILE_IMAGE "0", 0, 0, data, w, h, w * 4, &alpha, &compress, &quality, &lossy);
1070 fail_if(result != 1);
1071 fail_if(alpha != test_noalpha.alpha);
1072 fail_if(compress != 0);
1073 fail_if(quality != 100);
1074 fail_if(lossy != 0);
1075 fail_if(data[0] != test_noalpha.color[0]);
1078 data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "1", &w, &h, &alpha, &compress, &quality, &lossy);
1079 fail_if(data == NULL);
1080 fail_if(w != test_noalpha.w);
1081 fail_if(h != test_noalpha.h);
1082 fail_if(alpha != test_noalpha.alpha);
1083 fail_if(compress != 5);
1084 fail_if(quality != 100);
1085 fail_if(lossy != 0);
1086 fail_if(data[0] != test_noalpha.color[0]);
1089 data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "2", &w, &h, &alpha, &compress, &quality, &lossy);
1090 fail_if(data == NULL);
1091 fail_if(w != test_noalpha.w);
1092 fail_if(h != test_noalpha.h);
1093 fail_if(alpha != test_noalpha.alpha);
1094 fail_if(compress != 9);
1095 fail_if(lossy != 0);
1096 fail_if(data[0] != test_noalpha.color[0]);
1099 data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "3", &w, &h, &alpha, &compress, &quality, &lossy);
1100 fail_if(data == NULL);
1101 fail_if(w != test_noalpha.w);
1102 fail_if(h != test_noalpha.h);
1103 fail_if(alpha != test_noalpha.alpha);
1104 fail_if(lossy != 1);
1107 data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "5", &w, &h, &alpha, &compress, &quality, &lossy);
1108 fail_if(data == NULL);
1109 fail_if(w != test_noalpha.w);
1110 fail_if(h != test_noalpha.h);
1111 fail_if(alpha != test_noalpha.alpha);
1112 fail_if(lossy != 1);
1115 data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "6", &w, &h, &alpha, &compress, &quality, &lossy);
1116 fail_if(data == NULL);
1117 fail_if(w != test_noalpha.w);
1118 fail_if(h != test_noalpha.h);
1119 fail_if(alpha != test_noalpha.alpha);
1120 fail_if(lossy != 1);
1123 result = eet_data_image_header_read(ef, EET_TEST_FILE_IMAGE "7", &w, &h, &alpha, &compress, &quality, &lossy);
1124 fail_if(result == 0);
1125 fail_if(w != test_alpha.w);
1126 fail_if(h != test_alpha.h);
1127 fail_if(alpha != test_alpha.alpha);
1128 fail_if(compress != 9);
1129 fail_if(lossy != 0);
1131 data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "7", &w, &h, &alpha, &compress, &quality, &lossy);
1132 fail_if(data == NULL);
1133 fail_if(w != test_alpha.w);
1134 fail_if(h != test_alpha.h);
1135 fail_if(alpha != test_alpha.alpha);
1136 fail_if(compress != 9);
1137 fail_if(lossy != 0);
1138 fail_if(data[0] != test_alpha.color[0]);
1141 result = eet_data_image_header_read(ef, EET_TEST_FILE_IMAGE "9", &w, &h, &alpha, &compress, &quality, &lossy);
1142 fail_if(result == 0);
1143 fail_if(w != test_alpha.w);
1144 fail_if(h != test_alpha.h);
1145 fail_if(alpha != test_alpha.alpha);
1146 fail_if(lossy != 1);
1148 data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "9", &w, &h, &alpha, &compress, &quality, &lossy);
1149 fail_if(data == NULL);
1150 fail_if(w != test_alpha.w);
1151 fail_if(h != test_alpha.h);
1152 fail_if(alpha != test_alpha.alpha);
1153 fail_if(lossy != 1);
1158 fail_if(unlink(file) != 0);
1164 #define IM0 0x00112233
1165 #define IM1 0x44556677
1166 #define IM2 0x8899aabb
1167 #define IM3 0xccddeeff
1169 START_TEST(eet_small_image)
1171 char *file = strdup("/tmp/eet_suite_testXXXXXX");
1172 unsigned int image[4];
1190 fail_if(!(file = tmpnam(file)));
1192 ef = eet_open(file, EET_FILE_MODE_WRITE);
1195 result = eet_data_image_write(ef, "/images/test", image, 2, 2, 1, 9, 100, 0);
1196 fail_if(result == 0);
1200 ef = eet_open(file, EET_FILE_MODE_READ);
1203 data = (unsigned int*) eet_data_image_read(ef, "/images/test", &w, &h, &alpha, &compression, &quality, &lossy);
1204 fail_if(data == NULL);
1208 fail_if(unlink(file) != 0);
1210 fail_if(data[0] != IM0);
1211 fail_if(data[1] != IM1);
1212 fail_if(data[2] != IM2);
1213 fail_if(data[3] != IM3);
1221 START_TEST(eet_identity_simple)
1223 const char *buffer = "Here is a string of data to save !";
1229 char *file = strdup("/tmp/eet_suite_testXXXXXX");
1235 fail_if(!(file = tmpnam(file)));
1236 fail_if(chdir("src/tests"));
1237 fail_if(!(noread = fopen("/dev/null", "w")));
1239 /* Sign an eet file. */
1240 ef = eet_open(file, EET_FILE_MODE_WRITE);
1243 fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 0));
1245 k = eet_identity_open("cert.pem", "key.pem", NULL);
1248 fail_if(eet_identity_set(ef, k) != EET_ERROR_NONE);
1249 eet_identity_print(k, noread);
1253 /* Open a signed file. */
1254 ef = eet_open(file, EET_FILE_MODE_READ);
1257 test = eet_read(ef, "keys/tests", &size);
1259 fail_if(size != (int) strlen(buffer) + 1);
1261 fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
1263 tmp = eet_identity_x509(ef, &size);
1264 fail_if(tmp == NULL);
1266 eet_identity_certificate_print(tmp, size, noread);
1270 /* As we are changing file contain in less than 1s, this could get unnoticed
1271 by eet cache system. */
1274 /* Corrupting the file. */
1275 fd = open(file, O_WRONLY);
1278 fail_if(lseek(fd, 200, SEEK_SET) != 200);
1279 fail_if(write(fd, "42", 2) != 2);
1280 fail_if(lseek(fd, 50, SEEK_SET) != 50);
1281 fail_if(write(fd, "42", 2) != 2);
1282 fail_if(lseek(fd, 88, SEEK_SET) != 88);
1283 fail_if(write(fd, "42", 2) != 2);
1287 /* Attempt to open a modified file. */
1288 ef = eet_open(file, EET_FILE_MODE_READ);
1291 fail_if(unlink(file) != 0);
1297 START_TEST(eet_identity_open_simple)
1303 fail_if(chdir("src/tests"));
1305 k = eet_identity_open("cert.pem", "key.pem", NULL);
1308 if (k) eet_identity_close(k);
1314 START_TEST(eet_identity_open_pkcs8)
1320 fail_if(chdir("src/tests"));
1322 k = eet_identity_open("cert.pem", "key_enc_none.pem", NULL);
1325 if (k) eet_identity_close(k);
1331 static int pass_get(char *pass, int size, __UNUSED__ int rwflags, __UNUSED__ void *u)
1333 memset(pass, 0, size);
1335 if ((int) strlen("password") > size)
1337 snprintf(pass, size, "%s", "password");
1338 return strlen(pass);
1341 static int badpass_get(char *pass, int size, __UNUSED__ int rwflags, __UNUSED__ void *u)
1343 memset(pass, 0, size);
1345 if ((int) strlen("bad password") > size)
1347 snprintf(pass, size, "%s", "bad password");
1348 return strlen(pass);
1352 START_TEST(eet_identity_open_pkcs8_enc)
1358 fail_if(chdir("src/tests"));
1360 k = eet_identity_open("cert.pem", "key_enc.pem", NULL);
1363 if (k) eet_identity_close(k);
1365 k = eet_identity_open("cert.pem", "key_enc.pem", &badpass_get);
1368 if (k) eet_identity_close(k);
1370 k = eet_identity_open("cert.pem", "key_enc.pem", &pass_get);
1373 if (k) eet_identity_close(k);
1379 START_TEST(eet_cipher_decipher_simple)
1381 const char *buffer = "Here is a string of data to save !";
1382 const char *key = "This is a crypto key";
1383 const char *key_bad = "This is another crypto key";
1386 char *file = strdup("/tmp/eet_suite_testXXXXXX");
1391 fail_if(!(file = tmpnam(file)));
1392 fail_if(chdir("src/tests"));
1394 /* Crypt an eet file. */
1395 ef = eet_open(file, EET_FILE_MODE_WRITE);
1398 fail_if(!eet_write_cipher(ef, "keys/tests", buffer, strlen(buffer) + 1, 0, key));
1402 /* Decrypt an eet file. */
1403 ef = eet_open(file, EET_FILE_MODE_READ);
1406 test = eet_read_cipher(ef, "keys/tests", &size, key);
1408 fail_if(size != (int) strlen(buffer) + 1);
1410 fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
1414 /* Decrypt an eet file. */
1415 ef = eet_open(file, EET_FILE_MODE_READ);
1418 test = eet_read_cipher(ef, "keys/tests", &size, key_bad);
1420 if (size == (int) strlen(buffer) + 1)
1421 fail_if(memcmp(test, buffer, strlen(buffer) + 1) == 0);
1425 fail_if(unlink(file) != 0);
1431 static Eina_Bool open_worker_stop;
1433 open_close_worker(void* path)
1435 while (!open_worker_stop)
1437 Eet_File* ef = eet_open((char const*)path, EET_FILE_MODE_READ);
1440 pthread_exit("eet_open() failed");
1444 Eet_Error err_code = eet_close(ef);
1445 if (err_code != EET_ERROR_NONE)
1446 pthread_exit("eet_close() failed");
1453 START_TEST(eet_cache_concurrency)
1455 char *file = strdup("/tmp/eet_suite_testXXXXXX");
1456 const char *buffer = "test data";
1463 /* create a file to test with */
1464 fail_if(!(file = tmpnam(file)));
1465 ef = eet_open(file, EET_FILE_MODE_WRITE);
1467 fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 0));
1469 /* start a thread that repeatedly opens and closes a file */
1470 open_worker_stop = 0;
1472 pthread_create(&thread, NULL, open_close_worker, file);
1474 /* clear the cache repeatedly in this thread */
1475 for (n = 0; n < 50000; ++n)
1480 /* join the other thread, and fail if it returned an error message */
1481 open_worker_stop = 1;
1482 fail_if(pthread_join(thread, &thread_ret) != 0);
1483 fail_unless(thread_ret == NULL, (char const*)thread_ret);
1485 fail_if(unlink(file) != 0);
1490 typedef struct _Eet_Connection_Data Eet_Connection_Data;
1491 struct _Eet_Connection_Data
1493 Eet_Connection *conn;
1494 Eet_Data_Descriptor *edd;
1499 _eet_connection_read(const void *eet_data, size_t size, void *user_data)
1501 Eet_Connection_Data *dt = user_data;
1502 Eet_Test_Ex_Type *result;
1506 result = eet_data_descriptor_decode(dt->edd, eet_data, size);
1507 node = eet_data_node_decode_cipher(eet_data, NULL, size);
1509 /* Test the resulting data. */
1511 fail_if(_eet_test_ex_check(result, 0) != 0);
1512 fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
1513 fail_if(eina_list_data_get(result->ilist) == NULL);
1514 fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
1515 fail_if(eina_list_data_get(result->slist) == NULL);
1516 fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
1517 fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
1518 fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
1519 fail_if(strcmp(result->charray[0], "test") != 0);
1522 if (result->hash) eina_hash_foreach(result->hash, func, &test);
1524 if (result->ihash) eina_hash_foreach(result->ihash, func7, &test);
1529 dt->test = EINA_TRUE;
1530 fail_if(!eet_connection_node_send(dt->conn, node, NULL));
1537 _eet_connection_write(const void *data, size_t size, void *user_data)
1539 Eet_Connection_Data *dt = user_data;
1544 int step = size / 3;
1546 eet_connection_received(dt->conn, data, step);
1547 eet_connection_received(dt->conn, (char*) data + step, step);
1549 still = eet_connection_received(dt->conn, (char*) data + 2 * step, size);
1552 still = eet_connection_received(dt->conn, data, size);
1558 START_TEST(eet_connection_check)
1560 Eet_Connection *conn;
1561 Eet_Data_Descriptor *edd;
1562 Eet_Data_Descriptor_Class eddc;
1563 Eet_Connection_Data ecd;
1564 Eet_Test_Ex_Type etbt;
1569 _eet_test_ex_set(&etbt, 0);
1570 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
1571 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
1572 etbt.hash = eina_hash_string_superfast_new(NULL);
1573 eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
1574 eina_hash_add(etbt.hash, EET_TEST_KEY2, _eet_test_ex_set(NULL, 2));
1575 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
1576 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
1577 etbt.ihash = eina_hash_string_superfast_new(NULL);
1578 eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
1579 eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
1580 etbt.slist = eina_list_prepend(NULL, "test");
1581 etbt.shash = eina_hash_string_superfast_new(NULL);
1582 eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
1583 memset(&etbt.charray, 0, sizeof(etbt.charray));
1584 etbt.charray[0] = "test";
1586 eet_eina_file_data_descriptor_class_set(&eddc, "Eet_Test_Ex_Type", sizeof(Eet_Test_Ex_Type));
1588 edd = eet_data_descriptor_file_new(&eddc);
1591 _eet_build_ex_descriptor(edd);
1593 /* Create a connection. */
1594 conn = eet_connection_new(_eet_connection_read, _eet_connection_write, &ecd);
1598 ecd.test = EINA_FALSE;
1602 /* Test the connection. */
1603 fail_if(!eet_connection_send(conn, edd, &etbt, NULL));
1607 fail_if(!eet_connection_close(conn, &on_going));
1623 typedef struct _Eet_5FP Eet_5FP;
1633 typedef struct _Eet_5DBL Eet_5DBL;
1637 Eet_Data_Descriptor_Class eddc;
1638 Eet_Data_Descriptor *edd_5FP;
1639 Eet_Data_Descriptor *edd_5DBL;
1648 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_5FP);
1649 edd_5FP = eet_data_descriptor_stream_new(&eddc);
1651 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp32", fp32, EET_T_F32P32);
1652 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp16", fp16, EET_T_F16P16);
1653 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp8", fp8, EET_T_F8P24);
1654 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f1", f1, EET_T_F32P32);
1655 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f0", f0, EET_T_F32P32);
1657 eet_eina_stream_data_descriptor_class_set(&eddc, "Eet_5FP", sizeof (Eet_5DBL));
1658 edd_5DBL = eet_data_descriptor_stream_new(&eddc);
1660 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp32", fp32, EET_T_DOUBLE);
1661 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp16", fp16, EET_T_DOUBLE);
1662 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp8", fp8, EET_T_FLOAT);
1663 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f1", f1, EET_T_DOUBLE);
1664 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f0", f0, EET_T_DOUBLE);
1666 origin.fp32 = eina_f32p32_double_from(1.125);
1667 origin.fp16 = eina_f16p16_int_from(2000);
1668 origin.fp8 = eina_f8p24_int_from(125);
1669 origin.f1 = eina_f32p32_int_from(1);
1672 blob = eet_data_descriptor_encode(edd_5FP, &origin, &size);
1673 fail_if(!blob || size <= 0);
1675 build = eet_data_descriptor_decode(edd_5FP, blob, size);
1678 convert = eet_data_descriptor_decode(edd_5DBL, blob, size);
1681 fail_if(build->fp32 != eina_f32p32_double_from(1.125));
1682 fail_if(build->fp16 != eina_f16p16_int_from(2000));
1683 fail_if(build->fp8 != eina_f8p24_int_from(125));
1684 fail_if(build->f1 != eina_f32p32_int_from(1));
1685 fail_if(build->f0 != 0);
1687 fail_if(convert->fp32 != 1.125);
1688 fail_if(convert->fp16 != 2000);
1689 fail_if(convert->fp8 != 125);
1690 fail_if(convert->f1 != 1);
1691 fail_if(convert->f0 != 0);
1697 START_TEST(eet_file_fp)
1699 char *file = strdup("/tmp/eet_suite_testXXXXXX");
1700 Eet_Data_Descriptor_Class eddc;
1701 Eet_Data_Descriptor *edd_5FP;
1702 Eet_Data_Descriptor *edd_5DBL;
1710 EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_5FP);
1711 edd_5FP = eet_data_descriptor_file_new(&eddc);
1713 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp32", fp32, EET_T_F32P32);
1714 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp16", fp16, EET_T_F16P16);
1715 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp8", fp8, EET_T_F8P24);
1716 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f1", f1, EET_T_F32P32);
1717 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f0", f0, EET_T_F32P32);
1719 eet_eina_file_data_descriptor_class_set(&eddc, "Eet_5FP", sizeof (Eet_5DBL));
1720 edd_5DBL = eet_data_descriptor_file_new(&eddc);
1722 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp32", fp32, EET_T_DOUBLE);
1723 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp16", fp16, EET_T_DOUBLE);
1724 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp8", fp8, EET_T_FLOAT);
1725 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f1", f1, EET_T_DOUBLE);
1726 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f0", f0, EET_T_DOUBLE);
1728 origin.fp32 = eina_f32p32_double_from(1.125);
1729 origin.fp16 = eina_f16p16_int_from(2000);
1730 origin.fp8 = eina_f8p24_int_from(125);
1731 origin.f1 = eina_f32p32_int_from(1);
1734 fail_if(!(file = tmpnam(file)));
1736 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
1739 fail_if(!eet_data_write(ef, edd_5FP, EET_TEST_FILE_KEY1, &origin, 1));
1741 build = eet_data_read(ef, edd_5FP, EET_TEST_FILE_KEY1);
1744 convert = eet_data_read(ef, edd_5DBL, EET_TEST_FILE_KEY1);
1747 fail_if(build->fp32 != eina_f32p32_double_from(1.125));
1748 fail_if(build->fp16 != eina_f16p16_int_from(2000));
1749 fail_if(build->fp8 != eina_f8p24_int_from(125));
1750 fail_if(build->f1 != eina_f32p32_int_from(1));
1751 fail_if(build->f0 != 0);
1753 fail_if(convert->fp32 != 1.125);
1754 fail_if(convert->fp16 != 2000);
1755 fail_if(convert->fp8 != 125);
1756 fail_if(convert->f1 != 1);
1757 fail_if(convert->f0 != 0);
1761 fail_if(unlink(file) != 0);
1767 typedef struct _Eet_Union_Test Eet_Union_Test;
1768 typedef struct _Eet_Variant_Test Eet_Variant_Test;
1769 typedef struct _Eet_Variant_Type Eet_Variant_Type;
1770 typedef struct _Eet_Inherit_Test1 Eet_Inherit_Test1;
1771 typedef struct _Eet_Inherit_Test2 Eet_Inherit_Test2;
1772 typedef struct _Eet_Inherit_Test3 Eet_Inherit_Test3;
1773 typedef struct _Eet_St1 Eet_St1;
1774 typedef struct _Eet_St2 Eet_St2;
1775 typedef struct _Eet_St3 Eet_St3;
1776 typedef struct _Eet_List Eet_List;
1778 typedef enum _Eet_Union
1793 { EET_UNKNOWN, NULL }
1806 unsigned long long v1;
1814 struct _Eet_Union_Test
1825 struct _Eet_Variant_Type
1828 Eina_Bool unknow : 1;
1831 struct _Eet_Variant_Test
1836 Eina_List *data_list;
1839 struct _Eet_Inherit_Test1
1844 struct _Eet_Inherit_Test2
1849 struct _Eet_Inherit_Test3
1861 _eet_union_type_get(const void *data, Eina_Bool *unknow)
1863 const Eet_Union *u = data;
1866 if (unknow) *unknow = EINA_FALSE;
1867 for (i = 0; eet_mapping[i].name != NULL; ++i)
1868 if (*u == eet_mapping[i].u)
1869 return eet_mapping[i].name;
1871 if (unknow) *unknow = EINA_TRUE;
1876 _eet_union_type_set(const char *type, void *data, Eina_Bool unknow)
1878 Eet_Union *u = data;
1881 if (unknow) return EINA_FALSE;
1883 for (i = 0; eet_mapping[i].name != NULL; ++i)
1884 if (strcmp(eet_mapping[i].name, type) == 0)
1886 *u = eet_mapping[i].u;
1894 _eet_variant_type_get(const void *data, Eina_Bool *unknow)
1896 const Eet_Variant_Type *type = data;
1899 if (unknow) *unknow = type->unknow;
1900 for (i = 0; eet_mapping[i].name != NULL; ++i)
1901 if (strcmp(type->type, eet_mapping[i].name) == 0)
1902 return eet_mapping[i].name;
1904 if (unknow) *unknow = EINA_FALSE;
1909 _eet_variant_type_set(const char *type, void *data, Eina_Bool unknow)
1911 Eet_Variant_Type *vt = data;
1914 vt->unknow = unknow;
1918 static Eet_Data_Descriptor*
1921 Eet_Data_Descriptor_Class eddc;
1922 Eet_Data_Descriptor *res;
1924 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_St1);
1925 res = eet_data_descriptor_stream_new(&eddc);
1926 EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "val1", val1, EET_T_DOUBLE);
1927 EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "stuff", stuff, EET_T_INT);
1928 EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "s1", s1, EET_T_STRING);
1934 _eet_st1_set(Eet_St1 *st1, int i)
1936 st1->val1 = EET_TEST_DOUBLE;
1937 st1->stuff = EET_TEST_INT + i;
1938 st1->s1 = EET_TEST_STRING;
1942 _eet_st1_cmp(Eet_St1 *st1, int i)
1948 tmp = st1->val1 - EET_TEST_DOUBLE;
1949 if (tmp < 0) tmp = -tmp;
1950 fail_if(tmp > 0.005);
1951 fail_if(st1->stuff != EET_TEST_INT + i);
1952 fail_if(strcmp(st1->s1, EET_TEST_STRING));
1955 static Eet_Data_Descriptor*
1958 Eet_Data_Descriptor_Class eddc;
1959 Eet_Data_Descriptor *res;
1961 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_St2);
1962 res = eet_data_descriptor_stream_new(&eddc);
1963 EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St2, "b1", b1, EET_T_UCHAR);
1964 EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St2, "v1", v1, EET_T_ULONG_LONG);
1970 _eet_st2_set(Eet_St2 *st2, int i)
1972 st2->b1 = EINA_TRUE;
1973 st2->v1 = EET_TEST_LONG_LONG + i;
1977 _eet_st2_cmp(Eet_St2 *st2, int i)
1980 fail_if(st2->v1 != EET_TEST_LONG_LONG + i);
1983 static Eet_Data_Descriptor*
1986 Eet_Data_Descriptor_Class eddc;
1987 Eet_Data_Descriptor *res;
1989 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_St3);
1990 res = eet_data_descriptor_stream_new(&eddc);
1991 EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St3, "boby", boby, EET_T_INT);
1997 _eet_st3_set(Eet_St3 *st3, int i)
1999 st3->boby = EET_TEST_INT + i;
2003 _eet_st3_cmp(Eet_St3 *st3, int i)
2005 fail_if(st3->boby != EET_TEST_INT + i);
2008 START_TEST(eet_test_union)
2010 Eet_Union_Test *eut;
2012 Eet_Data_Descriptor_Class eddc;
2013 Eet_Data_Descriptor *edd;
2014 Eet_Data_Descriptor *unified;
2015 Eet_Data_Descriptor *m;
2023 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_Union_Test);
2024 edd = eet_data_descriptor_stream_new(&eddc);
2026 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_Union_Test);
2027 m = eet_data_descriptor_stream_new(&eddc);
2029 eddc.version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
2030 eddc.func.type_get = _eet_union_type_get;
2031 eddc.func.type_set = _eet_union_type_set;
2032 unified = eet_data_descriptor_stream_new(&eddc);
2034 EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST1", _eet_st1_dd());
2035 EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST2", _eet_st2_dd());
2036 EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST3", _eet_st3_dd());
2038 EET_DATA_DESCRIPTOR_ADD_UNION(edd, Eet_Union_Test, "u", u, type, unified);
2040 EET_DATA_DESCRIPTOR_ADD_LIST(m, Eet_List, "list", list, edd);
2042 l = calloc(1, sizeof (Eet_List));
2044 #define EUT_NEW(Type_Index) \
2045 eut = calloc(1, sizeof (Eet_Union_Test)); \
2046 eut->type = EET_ST##Type_Index; \
2047 _eet_st##Type_Index##_set(&(eut->u.st##Type_Index), i);
2049 for (i = 0; i < 3; ++i)
2052 l->list = eina_list_append(l->list, eut);
2055 l->list = eina_list_append(l->list, eut);
2058 l->list = eina_list_append(l->list, eut);
2061 blob = eet_data_descriptor_encode(m, l, &size);
2062 fail_if(!blob || size <= 0);
2064 l = eet_data_descriptor_decode(m, blob, size);
2067 fail_if(eina_list_count(l->list) != 9);
2069 #define EUT_CMP(Type_Index) \
2070 eut = eina_list_nth(l->list, i * 3 + Type_Index - 1); \
2071 fail_if(eut->type != EET_ST##Type_Index); \
2072 _eet_st##Type_Index##_cmp(&(eut->u.st##Type_Index), i);
2074 for (i = 0; i < 3; ++i)
2086 START_TEST(eet_test_variant)
2088 Eet_Variant_Test *evt;
2093 Eet_Data_Descriptor_Class eddc;
2094 Eet_Data_Descriptor *edd;
2095 Eet_Data_Descriptor *unified;
2096 Eet_Data_Descriptor *m;
2104 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_Variant_Test);
2105 edd = eet_data_descriptor_stream_new(&eddc);
2107 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_Variant_Test);
2108 m = eet_data_descriptor_stream_new(&eddc);
2110 eddc.version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
2111 eddc.func.type_get = _eet_variant_type_get;
2112 eddc.func.type_set = _eet_variant_type_set;
2113 unified = eet_data_descriptor_stream_new(&eddc);
2115 EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST1", _eet_st1_dd());
2116 EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST2", _eet_st2_dd());
2117 EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST3", _eet_st3_dd());
2119 EET_DATA_DESCRIPTOR_ADD_VARIANT(edd, Eet_Variant_Test, "data", data, t, unified);
2121 unified = eet_data_descriptor_stream_new(&eddc);
2122 eet_data_descriptor_element_add(unified, "ST1",
2123 EET_T_UNKNOW, EET_G_LIST,
2124 0, 0, NULL, _eet_st1_dd());
2125 eet_data_descriptor_element_add(unified, "ST2",
2126 EET_T_UNKNOW, EET_G_LIST,
2127 0, 0, NULL, _eet_st2_dd());
2129 EET_DATA_DESCRIPTOR_ADD_VARIANT(edd, Eet_Variant_Test,
2130 "data_list", data_list, t, unified);
2132 EET_DATA_DESCRIPTOR_ADD_LIST(m, Eet_List, "list", list, edd);
2134 l = calloc(1, sizeof (Eet_List));
2136 #define EVT_NEW(Type_Index) \
2137 evt = calloc(1, sizeof (Eet_Variant_Test)); \
2138 evt->t.type = eet_mapping[Type_Index - 1].name; \
2139 st##Type_Index = calloc(1, sizeof (Eet_St##Type_Index)); \
2140 _eet_st##Type_Index##_set(st##Type_Index, i); \
2141 evt->data = st##Type_Index;
2143 for (i = 0; i < 3; ++i)
2146 l->list = eina_list_append(l->list, evt);
2148 st1 = calloc(1, sizeof (Eet_St1));
2149 _eet_st1_set(st1, i);
2150 evt->data_list = eina_list_append(evt->data_list, st1);
2153 l->list = eina_list_append(l->list, evt);
2156 l->list = eina_list_append(l->list, evt);
2159 blob = eet_data_descriptor_encode(m, l, &size);
2160 fail_if(!blob || size <= 0);
2162 l = eet_data_descriptor_decode(m, blob, size);
2165 fail_if(eina_list_count(l->list) != 9);
2167 #define EVT_CMP(Type_Index) \
2168 evt = eina_list_nth(l->list, i * 3 + Type_Index - 1); \
2169 fail_if(strcmp(evt->t.type, eet_mapping[Type_Index - 1].name) != 0); \
2170 _eet_st##Type_Index##_cmp(evt->data, i);
2172 for (i = 0; i < 3; ++i)
2176 fail_if(!evt->data_list);
2177 fail_if(eina_list_count(evt->data_list) != 1);
2179 st1 = eina_list_data_get(evt->data_list);
2180 _eet_st1_cmp(st1, i);
2197 s = suite_create("Eet");
2199 tc = tcase_create("Eet_Init");
2200 tcase_add_test(tc, eet_test_init);
2201 suite_add_tcase(s, tc);
2203 tc = tcase_create("Eet Data Encoding/Decoding");
2204 tcase_add_test(tc, eet_test_basic_data_type_encoding_decoding);
2205 tcase_add_test(tc, eet_test_data_type_encoding_decoding);
2206 tcase_add_test(tc, eet_test_data_type_dump_undump);
2207 tcase_add_test(tc, eet_fp);
2208 tcase_add_test(tc, eet_test_union);
2209 tcase_add_test(tc, eet_test_variant);
2210 suite_add_tcase(s, tc);
2212 tc = tcase_create("Eet File");
2213 tcase_add_test(tc, eet_file_simple_write);
2214 tcase_add_test(tc, eet_file_data_test);
2215 tcase_add_test(tc, eet_file_data_dump_test);
2216 tcase_add_test(tc, eet_file_fp);
2217 suite_add_tcase(s, tc);
2219 tc = tcase_create("Eet Image");
2220 tcase_add_test(tc, eet_image);
2221 tcase_add_test(tc, eet_small_image);
2222 suite_add_tcase(s, tc);
2224 #ifdef HAVE_SIGNATURE
2225 tc = tcase_create("Eet Identity");
2226 tcase_add_test(tc, eet_identity_simple);
2227 tcase_add_test(tc, eet_identity_open_simple);
2228 tcase_add_test(tc, eet_identity_open_pkcs8);
2229 tcase_add_test(tc, eet_identity_open_pkcs8_enc);
2230 suite_add_tcase(s, tc);
2234 tc = tcase_create("Eet Cipher");
2235 tcase_add_test(tc, eet_cipher_decipher_simple);
2236 suite_add_tcase(s, tc);
2239 tc = tcase_create("Eet Cache");
2240 tcase_add_test(tc, eet_cache_concurrency);
2241 suite_add_tcase(s, tc);
2243 tc = tcase_create("Eet Connection");
2244 tcase_add_test(tc, eet_connection_check);
2245 suite_add_tcase(s, tc);
2258 sr = srunner_create(s);
2259 srunner_run_all(sr, CK_NORMAL);
2260 failed_count = srunner_ntests_failed(sr);
2263 return (failed_count == 0) ? EXIT_SUCCESS : EXIT_FAILURE;