3 #endif /* ifdef HAVE_CONFIG_H */
16 #ifdef EINA_HAVE_THREADS
17 #if ((!defined(_WIN32_WCE)) && (!defined(_WIN32)))
19 # define _EET_INCLUDED_PTHREAD
21 #endif /* ifdef EINA_HAVE_THREADS */
25 #include "eet_suite.h"
27 START_TEST(eet_test_init)
39 typedef struct _Eet_Test_Basic_Type Eet_Test_Basic_Type;
40 struct _Eet_Test_Basic_Type
54 unsigned long long ul;
55 Eet_Test_Basic_Type * empty;
56 Eet_Test_Basic_Type * with;
59 #define EET_TEST_CHAR 0x42
60 #define EET_TEST_SHORT 0x4224
61 #define EET_TEST_INT 0x42211224
62 #define EET_TEST_LONG_LONG 0x84CB42211224BC48
63 #define EET_TEST_STRING "my little test with escape \\\""
64 #define EET_TEST_KEY1 "key1"
65 #define EET_TEST_KEY2 "key2"
66 #define EET_TEST_FLOAT 123.45689
67 #define EET_TEST_FLOAT2 1.0
68 #define EET_TEST_FLOAT3 0.25
69 #define EET_TEST_FLOAT4 0.0001234
70 #define EET_TEST_DOUBLE 123456789.9876543210
71 #define EET_TEST_DOUBLE2 1.0
72 #define EET_TEST_DOUBLE3 0.25
73 #define EET_TEST_FILE_KEY1 "keys/data/1"
74 #define EET_TEST_FILE_KEY2 "keys/data/2"
75 #define EET_TEST_FILE_IMAGE "keys/images/"
77 typedef struct _Eet_Test_Image Eet_Test_Image;
78 struct _Eet_Test_Image
83 unsigned int color[64];
86 static const Eet_Test_Image test_noalpha = {
89 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
90 0x000000AA, 0x00110000,
91 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
92 0x00110000, 0x00AA0000,
93 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
94 0x00AA0000, 0x0000AA00,
95 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
96 0x0000AA00, 0x000000AA,
97 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
98 0x000000AA, 0x00110000,
99 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
100 0x00110000, 0x00AA0000,
101 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
102 0x00AA0000, 0x0000AA00,
103 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
104 0x0000AA00, 0x000000AA
108 static const Eet_Test_Image test_alpha = {
111 0x0FAA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
112 0x000000AA, 0x0F110000,
113 0x0000AA00, 0x0F0000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
114 0x0F110000, 0x00AA0000,
115 0x000000AA, 0x00110000, 0x0FAA0000, 0x0000AA00, 0x000000AA, 0x0F110000,
116 0x00AA0000, 0x0000AA00,
117 0x00110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA, 0x0F110000, 0x00AA0000,
118 0x0000AA00, 0x000000AA,
119 0x00AA0000, 0x0000AA00, 0x000000AA, 0x0F110000, 0x0FAA0000, 0x0000AA00,
120 0x000000AA, 0x00110000,
121 0x0000AA00, 0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA,
122 0x00110000, 0x00AA0000,
123 0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
124 0x0FAA0000, 0x0000AA00,
125 0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
126 0x0000AA00, 0x0F0000AA
131 _eet_test_basic_set(Eet_Test_Basic_Type * res, int i)
133 res->c = EET_TEST_CHAR;
134 res->s = EET_TEST_SHORT;
135 res->i = EET_TEST_INT + i;
136 res->l = EET_TEST_LONG_LONG;
137 res->str = EET_TEST_STRING;
138 res->istr = EET_TEST_STRING;
139 res->f1 = -EET_TEST_FLOAT;
140 res->d = -EET_TEST_DOUBLE;
141 res->f2 = EET_TEST_FLOAT4;
142 res->uc = EET_TEST_CHAR;
143 res->us = EET_TEST_SHORT;
144 res->ui = EET_TEST_INT;
145 res->ul = EET_TEST_LONG_LONG;
151 Eet_Test_Basic_Type * tmp;
153 tmp = malloc(sizeof (Eet_Test_Basic_Type));
157 tmp->c = EET_TEST_CHAR;
158 tmp->s = EET_TEST_SHORT;
159 tmp->i = EET_TEST_INT + i + 1;
160 tmp->l = EET_TEST_LONG_LONG;
161 tmp->str = EET_TEST_STRING;
162 tmp->istr = EET_TEST_STRING;
163 tmp->f1 = -EET_TEST_FLOAT;
164 tmp->d = -EET_TEST_DOUBLE;
165 tmp->f2 = EET_TEST_FLOAT4;
166 tmp->uc = EET_TEST_CHAR;
167 tmp->us = EET_TEST_SHORT;
168 tmp->ui = EET_TEST_INT;
169 tmp->ul = EET_TEST_LONG_LONG;
173 } /* _eet_test_basic_set */
176 _eet_test_basic_check(Eet_Test_Basic_Type * result, int i)
180 fail_if(result->c != EET_TEST_CHAR);
181 fail_if(result->s != EET_TEST_SHORT);
182 fail_if(result->i != EET_TEST_INT + i);
183 fail_if(result->l != (long long)EET_TEST_LONG_LONG);
184 fail_if(strcmp(result->str, EET_TEST_STRING) != 0);
185 fail_if(strcmp(result->istr, EET_TEST_STRING) != 0);
186 fail_if(result->uc != EET_TEST_CHAR);
187 fail_if(result->us != EET_TEST_SHORT);
188 fail_if(result->ui != EET_TEST_INT);
189 fail_if(result->ul != EET_TEST_LONG_LONG);
191 tmp = (result->f1 + EET_TEST_FLOAT);
195 fail_if(tmp > 0.005);
197 tmp = (result->f2 - EET_TEST_FLOAT4);
201 fail_if(tmp > 0.005);
203 tmp = (result->d + EET_TEST_DOUBLE);
207 fail_if(tmp > 0.00005);
209 fail_if(result->empty != NULL);
212 Eet_Test_Basic_Type * tmp;
215 fail_if(tmp == NULL);
217 fail_if(tmp->c != EET_TEST_CHAR);
218 fail_if(tmp->s != EET_TEST_SHORT);
219 fail_if(tmp->i != EET_TEST_INT + i + 1);
220 fail_if(tmp->l != (long long)EET_TEST_LONG_LONG);
221 fail_if(strcmp(tmp->str, EET_TEST_STRING) != 0);
222 fail_if(strcmp(tmp->istr, EET_TEST_STRING) != 0);
223 fail_if(tmp->uc != EET_TEST_CHAR);
224 fail_if(tmp->us != EET_TEST_SHORT);
225 fail_if(tmp->ui != EET_TEST_INT);
226 fail_if(tmp->ul != EET_TEST_LONG_LONG);
229 fail_if(result->with != NULL);
230 } /* _eet_test_basic_check */
233 _eet_build_basic_descriptor(Eet_Data_Descriptor * edd)
235 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
240 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
245 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
250 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
255 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
260 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
264 EET_T_INLINED_STRING);
265 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
270 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
275 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
280 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
285 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
290 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
295 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
301 EET_DATA_DESCRIPTOR_ADD_SUB(edd, Eet_Test_Basic_Type, "empty", empty, edd);
302 EET_DATA_DESCRIPTOR_ADD_SUB(edd, Eet_Test_Basic_Type, "with", with, edd);
303 } /* _eet_build_basic_descriptor */
305 START_TEST(eet_test_basic_data_type_encoding_decoding)
307 Eet_Data_Descriptor * edd;
308 Eet_Test_Basic_Type * result;
309 Eet_Data_Descriptor_Class eddc;
310 Eet_Test_Basic_Type etbt;
316 _eet_test_basic_set(&etbt, 0);
318 eet_test_setup_eddc(&eddc);
319 eddc.name = "Eet_Test_Basic_Type";
320 eddc.size = sizeof(Eet_Test_Basic_Type);
322 edd = eet_data_descriptor_stream_new(&eddc);
325 _eet_build_basic_descriptor(edd);
327 transfert = eet_data_descriptor_encode(edd, &etbt, &size);
328 fail_if(!transfert || size <= 0);
330 result = eet_data_descriptor_decode(edd, transfert, size);
333 _eet_test_basic_check(result, 0);
338 eet_data_descriptor_free(edd);
344 typedef struct _Eet_Test_Ex_Type Eet_Test_Ex_Type;
345 struct _Eet_Test_Ex_Type
350 unsigned long long l;
367 Eet_Test_Basic_Type sarray1[10];
368 unsigned int sarray2[5];
369 unsigned int varray1_count;
370 unsigned int * varray1;
371 unsigned int varray2_count;
372 Eet_Test_Basic_Type * varray2;
376 unsigned long long ul;
384 _eet_build_ex_descriptor(Eet_Data_Descriptor * edd)
386 Eet_Data_Descriptor_Class eddc;
387 Eet_Test_Ex_Type etbt;
388 Eet_Data_Descriptor * eddb;
390 eet_test_setup_eddc(&eddc);
391 eddc.name = "Eet_Test_Basic_Type";
392 eddc.size = sizeof(Eet_Test_Basic_Type);
393 eddb = eet_data_descriptor_file_new(&eddc);
396 _eet_build_basic_descriptor(eddb);
398 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
403 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
408 EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "i", i, EET_T_INT);
409 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
414 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
419 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
423 EET_T_INLINED_STRING);
424 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
429 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
434 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
439 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
444 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
449 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
454 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
459 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
464 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
469 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
474 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
479 EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
484 EET_DATA_DESCRIPTOR_ADD_ARRAY(edd,
489 EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(edd,
494 eet_data_descriptor_element_add(edd,
498 (char *)(&(etbt.varray1)) - (char *)(&(etbt)),
499 (char *)(&(etbt.varray1_count)) -
503 eet_data_descriptor_element_add(edd, "sarray2", EET_T_INT, EET_G_ARRAY,
504 (char *)(&(etbt.sarray2)) - (char *)(&(etbt)),
505 /* 0, */ sizeof(etbt.sarray2) /
506 sizeof(etbt.sarray2[0]), NULL, NULL);
507 eet_data_descriptor_element_add(edd, "charray", EET_T_STRING, EET_G_ARRAY,
508 (char *)(&(etbt.charray)) - (char *)(&(etbt)),
509 /* 0, */ sizeof(etbt.charray) /
510 sizeof(etbt.charray[0]), NULL, NULL);
511 EET_DATA_DESCRIPTOR_ADD_LIST(edd, Eet_Test_Ex_Type, "list", list, edd);
512 EET_DATA_DESCRIPTOR_ADD_HASH(edd, Eet_Test_Ex_Type, "hash", hash, edd);
513 eet_data_descriptor_element_add(edd, "ilist", EET_T_INT, EET_G_LIST,
514 (char *)(&(etbt.ilist)) - (char *)(&(etbt)),
515 0, /* 0, */ NULL, NULL);
516 eet_data_descriptor_element_add(edd, "ihash", EET_T_INT, EET_G_HASH,
517 (char *)(&(etbt.ihash)) - (char *)(&(etbt)),
518 0, /* 0, */ NULL, NULL);
519 eet_data_descriptor_element_add(edd, "slist", EET_T_STRING, EET_G_LIST,
520 (char *)(&(etbt.slist)) - (char *)(&(etbt)),
521 0, /* 0, */ NULL, NULL);
522 eet_data_descriptor_element_add(edd, "shash", EET_T_STRING, EET_G_HASH,
523 (char *)(&(etbt.shash)) - (char *)(&(etbt)),
524 0, /* 0, */ NULL, NULL);
525 } /* _eet_build_ex_descriptor */
527 static Eet_Test_Ex_Type *
528 _eet_test_ex_set(Eet_Test_Ex_Type * res, int offset)
533 res = malloc( sizeof(Eet_Test_Ex_Type));
538 res->c = EET_TEST_CHAR + offset;
539 res->s = EET_TEST_SHORT + offset;
540 res->i = EET_TEST_INT + offset;
541 res->l = EET_TEST_LONG_LONG + offset;
542 res->str = EET_TEST_STRING;
543 res->istr = EET_TEST_STRING;
544 res->f1 = EET_TEST_FLOAT + offset;
545 res->f2 = -(EET_TEST_FLOAT2 + offset);
546 res->f3 = EET_TEST_FLOAT3 + offset;
547 res->f4 = EET_TEST_FLOAT2 + offset;
548 res->d1 = EET_TEST_DOUBLE + offset;
549 res->d2 = -(EET_TEST_DOUBLE2 + offset);
550 res->d3 = EET_TEST_DOUBLE3 + offset;
551 res->d4 = EET_TEST_DOUBLE2 + offset;
558 for (i = 0; i < sizeof(res->charray) / sizeof(res->charray[0]); ++i)
559 res->charray[i] = NULL;
561 res->varray2 = malloc(sizeof (Eet_Test_Basic_Type) * 10);
562 res->varray1 = malloc(sizeof (int) * 5);
563 fail_if(!res->varray1 || !res->varray2);
564 for (i = 0; i < 10; ++i)
566 _eet_test_basic_set(res->sarray1 + i, i);
567 _eet_test_basic_set(res->varray2 + i, i);
569 res->varray2_count = 10;
570 for (i = 0; i < 5; ++i)
572 res->sarray2[i] = i * 42 + 1;
573 res->varray1[i] = i * 42 + 1;
575 res->varray1_count = 5;
577 res->uc = EET_TEST_CHAR + offset;
578 res->us = EET_TEST_SHORT + offset;
579 res->ui = EET_TEST_INT + offset;
580 res->ul = EET_TEST_LONG_LONG + offset;
583 } /* _eet_test_ex_set */
586 _eet_test_ex_check(Eet_Test_Ex_Type * stuff, int offset)
594 if (stuff->c != EET_TEST_CHAR + offset)
597 if (stuff->s != EET_TEST_SHORT + offset)
600 if (stuff->i != EET_TEST_INT + offset)
603 if (stuff->l != EET_TEST_LONG_LONG + offset)
606 if (strcmp(stuff->str, EET_TEST_STRING) != 0)
609 if (strcmp(stuff->istr, EET_TEST_STRING) != 0)
612 tmp = stuff->f1 - (EET_TEST_FLOAT + offset);
619 tmp = stuff->d1 - (EET_TEST_DOUBLE + offset);
626 if (stuff->f2 != -(EET_TEST_FLOAT2 + offset))
629 if (stuff->d2 != -(EET_TEST_DOUBLE2 + offset))
632 if (stuff->f3 != EET_TEST_FLOAT3 + offset)
635 if (stuff->d3 != EET_TEST_DOUBLE3 + offset)
638 if (stuff->f4 != EET_TEST_FLOAT2 + offset)
641 if (stuff->d4 != EET_TEST_DOUBLE2 + offset)
644 if (stuff->uc != EET_TEST_CHAR + offset)
647 if (stuff->us != EET_TEST_SHORT + offset)
650 if (stuff->ui != (unsigned int)EET_TEST_INT + offset)
653 if (stuff->ul != EET_TEST_LONG_LONG + offset)
656 if (stuff->varray1_count != 5)
659 if (stuff->varray2_count != 10)
662 for (i = 0; i < 5; ++i)
663 if (stuff->sarray2[i] != i * 42 + 1 && stuff->varray1[i] != i * 42 + 1)
666 for (i = 0; i < 10; ++i)
668 _eet_test_basic_check(stuff->sarray1 + i, i);
669 _eet_test_basic_check(stuff->varray2 + i, i);
673 } /* _eet_test_ex_check */
676 func(__UNUSED__ const Eina_Hash * hash, const void * key, void * data, void * fdata)
680 if (strcmp(key, EET_TEST_KEY1) != 0
681 && strcmp(key, EET_TEST_KEY2) != 0)
684 if (_eet_test_ex_check(data, 2))
691 func7(__UNUSED__ const Eina_Hash * hash,
692 __UNUSED__ const void * key,
709 START_TEST(eet_test_data_type_encoding_decoding)
711 Eet_Data_Descriptor * edd;
712 Eet_Test_Ex_Type * result;
714 Eet_Data_Descriptor_Class eddc;
715 Eet_Test_Ex_Type etbt;
721 _eet_test_ex_set(&etbt, 0);
722 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
723 etbt.hash = eina_hash_string_superfast_new(NULL);
724 eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
725 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
726 etbt.ihash = eina_hash_string_superfast_new(NULL);
727 eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
728 etbt.slist = eina_list_prepend(NULL, "test");
729 etbt.shash = eina_hash_string_superfast_new(NULL);
730 eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
731 memset(&etbt.charray, 0, sizeof(etbt.charray));
732 etbt.charray[0] = "test";
733 etbt.charray[5] = "plouf";
735 eet_test_setup_eddc(&eddc);
736 eddc.name = "Eet_Test_Ex_Type";
737 eddc.size = sizeof(Eet_Test_Ex_Type);
739 edd = eet_data_descriptor_file_new(&eddc);
742 _eet_build_ex_descriptor(edd);
744 transfert = eet_data_descriptor_encode(edd, &etbt, &size);
745 fail_if(!transfert || size <= 0);
747 result = eet_data_descriptor_decode(edd, transfert, size);
750 fail_if(_eet_test_ex_check(result, 0) != 0);
751 fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
752 fail_if(eina_list_data_get(result->ilist) == NULL);
753 fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
754 fail_if(eina_list_data_get(result->slist) == NULL);
755 fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
756 fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
757 fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
758 fail_if(strcmp(result->charray[0], "test") != 0);
759 fail_if(strcmp(result->charray[5], "plouf") != 0);
763 eina_hash_foreach(result->hash, func, &test);
767 eina_hash_foreach(result->ihash, func7, &test);
776 append_string(void * data, const char * str)
778 char ** string = data;
784 length = *string ? strlen(*string) : 0;
785 *string = realloc(*string, strlen(str) + length + 1);
787 memcpy((*string) + length, str, strlen(str) + 1);
788 } /* append_string */
790 START_TEST(eet_test_data_type_dump_undump)
792 Eet_Data_Descriptor * edd;
793 Eet_Test_Ex_Type * result;
794 Eet_Data_Descriptor_Class eddc;
795 Eet_Test_Ex_Type etbt;
806 _eet_test_ex_set(&etbt, 0);
807 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
808 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
809 etbt.hash = eina_hash_string_superfast_new(NULL);
810 eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
811 etbt.hash = eina_hash_string_superfast_new(NULL);
812 eina_hash_add(etbt.hash, EET_TEST_KEY2, _eet_test_ex_set(NULL, 2));
813 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
814 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
815 etbt.ihash = eina_hash_string_superfast_new(NULL);
816 eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
817 etbt.ihash = eina_hash_string_superfast_new(NULL);
818 eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
819 etbt.slist = eina_list_prepend(NULL, "test");
820 etbt.shash = eina_hash_string_superfast_new(NULL);
821 eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
822 memset(&etbt.charray, 0, sizeof(etbt.charray));
823 etbt.charray[0] = "test";
825 eet_test_setup_eddc(&eddc);
826 eddc.name = "Eet_Test_Ex_Type";
827 eddc.size = sizeof(Eet_Test_Ex_Type);
829 edd = eet_data_descriptor_file_new(&eddc);
832 _eet_build_ex_descriptor(edd);
834 transfert1 = eet_data_descriptor_encode(edd, &etbt, &size1);
835 fail_if(!transfert1 || size1 <= 0);
838 eet_data_text_dump(transfert1, size1, append_string, &string1);
841 transfert2 = eet_data_text_undump(string1, string1 ? strlen(
842 string1) : 0, &size2);
843 fail_if(!transfert2 && size2 <= 0);
846 eet_data_text_dump(transfert2, size2, append_string, &string2);
849 fail_if(strlen(string2) != strlen(string1));
851 result = eet_data_descriptor_decode(edd, transfert2, size2);
854 fail_if(_eet_test_ex_check(result, 0) != 0);
855 fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
856 fail_if(eina_list_data_get(result->ilist) == NULL);
857 fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
858 fail_if(eina_list_data_get(result->slist) == NULL);
859 fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
860 fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
861 fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
862 fail_if(strcmp(result->charray[0], "test") != 0);
866 eina_hash_foreach(result->hash, func, &test);
870 eina_hash_foreach(result->ihash, func7, &test);
878 START_TEST(eet_file_simple_write)
880 const char * buffer = "Here is a string of data to save !";
883 char * file = strdup("/tmp/eet_suite_testXXXXXX");
888 fail_if(!(file = tmpnam(file)));
890 fail_if(eet_mode_get(NULL) != EET_FILE_MODE_INVALID);
892 ef = eet_open(file, EET_FILE_MODE_WRITE);
895 fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 1));
896 fail_if(!eet_alias(ef, "keys/alias", "keys/tests", 0));
897 fail_if(!eet_alias(ef, "keys/alias2", "keys/alias", 1));
899 fail_if(eet_mode_get(ef) != EET_FILE_MODE_WRITE);
901 fail_if(eet_list(ef, "*", &size) != NULL);
902 fail_if(eet_num_entries(ef) != -1);
906 /* Test read of simple file */
907 ef = eet_open(file, EET_FILE_MODE_READ);
910 test = eet_read(ef, "keys/tests", &size);
912 fail_if(size != (int)strlen(buffer) + 1);
914 fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
916 test = eet_read(ef, "keys/alias2", &size);
918 fail_if(size != (int)strlen(buffer) + 1);
920 fail_if(eet_read_direct(ef, "key/alias2", &size));
922 fail_if(eet_mode_get(ef) != EET_FILE_MODE_READ);
923 fail_if(eet_num_entries(ef) != 3);
927 /* Test eet cache system */
928 ef = eet_open(file, EET_FILE_MODE_READ);
931 test = eet_read(ef, "keys/tests", &size);
933 fail_if(size != (int)strlen(buffer) + 1);
935 fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
939 fail_if(unlink(file) != 0);
946 START_TEST(eet_file_data_test)
948 Eet_Data_Descriptor * edd;
949 Eet_Test_Ex_Type * result;
953 char * file = strdup("/tmp/eet_suite_testXXXXXX");
954 Eet_Data_Descriptor_Class eddc;
955 Eet_Test_Ex_Type etbt;
961 _eet_test_ex_set(&etbt, 0);
962 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
963 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
964 etbt.hash = eina_hash_string_superfast_new(NULL);
965 eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
966 etbt.hash = eina_hash_string_superfast_new(NULL);
967 eina_hash_add(etbt.hash, EET_TEST_KEY2, _eet_test_ex_set(NULL, 2));
968 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
969 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
970 etbt.ihash = eina_hash_string_superfast_new(NULL);
971 eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
972 etbt.ihash = eina_hash_string_superfast_new(NULL);
973 eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
974 etbt.slist = eina_list_prepend(NULL, "test");
975 etbt.shash = eina_hash_string_superfast_new(NULL);
976 eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
977 memset(&etbt.charray, 0, sizeof(etbt.charray));
978 etbt.charray[0] = "test";
980 eet_test_setup_eddc(&eddc);
981 eddc.name = "Eet_Test_Ex_Type";
982 eddc.size = sizeof(Eet_Test_Ex_Type);
984 edd = eet_data_descriptor_file_new(&eddc);
987 _eet_build_ex_descriptor(edd);
989 fail_if(!(file = tmpnam(file)));
991 /* Insert an error in etbt. */
994 /* Save the encoded data in a file. */
995 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
998 fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
1000 result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
1003 fail_if(eet_mode_get(ef) != EET_FILE_MODE_READ_WRITE);
1005 /* Test string space. */
1006 ed = eet_dictionary_get(ef);
1008 fail_if(!eet_dictionary_string_check(ed, result->str));
1009 fail_if(eet_dictionary_string_check(ed, result->istr));
1013 /* Attempt to replace etbt by the correct one. */
1014 etbt.i = EET_TEST_INT;
1016 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
1019 fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
1021 result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
1024 /* Test the resulting data. */
1025 fail_if(_eet_test_ex_check(result, 0) != 0);
1029 /* Read back the data. */
1030 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
1033 fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY2, &etbt, 0));
1035 result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
1038 /* Test string space. */
1039 ed = eet_dictionary_get(ef);
1042 fail_if(!eet_dictionary_string_check(ed, result->str));
1043 fail_if(eet_dictionary_string_check(ed, result->istr));
1045 /* Test the resulting data. */
1046 fail_if(_eet_test_ex_check(result, 0) != 0);
1047 fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
1048 fail_if(eina_list_data_get(result->ilist) == NULL);
1049 fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
1050 fail_if(eina_list_data_get(result->slist) == NULL);
1051 fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
1052 fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
1053 fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
1054 fail_if(strcmp(result->charray[0], "test") != 0);
1058 eina_hash_foreach(result->hash, func, &test);
1062 eina_hash_foreach(result->ihash, func7, &test);
1066 list = eet_list(ef, "keys/*", &size);
1067 fail_if(eet_num_entries(ef) != 2);
1069 fail_if(!(strcmp(list[0],
1070 EET_TEST_FILE_KEY1) == 0 &&
1071 strcmp(list[1], EET_TEST_FILE_KEY2) == 0)
1072 && !(strcmp(list[0],
1073 EET_TEST_FILE_KEY2) == 0 &&
1074 strcmp(list[1], EET_TEST_FILE_KEY1) == 0));
1077 fail_if(eet_delete(ef, NULL) != 0);
1078 fail_if(eet_delete(NULL, EET_TEST_FILE_KEY1) != 0);
1079 fail_if(eet_delete(ef, EET_TEST_FILE_KEY1) == 0);
1081 list = eet_list(ef, "keys/*", &size);
1083 fail_if(eet_num_entries(ef) != 1);
1085 /* Test some more wrong case */
1086 fail_if(eet_data_read(ef, edd, "plop") != NULL);
1087 fail_if(eet_data_read(ef, edd, EET_TEST_FILE_KEY1) != NULL);
1089 /* Reinsert and reread data */
1090 fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
1091 fail_if(eet_data_read(ef, edd, EET_TEST_FILE_KEY1) == NULL);
1092 fail_if(eet_read_direct(ef, EET_TEST_FILE_KEY1, &size) == NULL);
1096 fail_if(unlink(file) != 0);
1103 START_TEST(eet_file_data_dump_test)
1105 Eet_Data_Descriptor * edd;
1106 Eet_Test_Ex_Type * result;
1107 Eet_Data_Descriptor_Class eddc;
1108 Eet_Test_Ex_Type etbt;
1111 char * file = strdup("/tmp/eet_suite_testXXXXXX");
1116 _eet_test_ex_set(&etbt, 0);
1117 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
1118 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
1119 etbt.hash = eina_hash_string_superfast_new(NULL);
1120 eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
1121 eina_hash_add(etbt.hash, EET_TEST_KEY2, _eet_test_ex_set(NULL, 2));
1122 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
1123 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
1124 etbt.ihash = eina_hash_string_superfast_new(NULL);
1125 eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
1126 eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
1127 etbt.slist = eina_list_prepend(NULL, "test");
1128 etbt.shash = eina_hash_string_superfast_new(NULL);
1129 eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
1130 memset(&etbt.charray, 0, sizeof(etbt.charray));
1131 etbt.charray[0] = "test";
1133 eet_eina_file_data_descriptor_class_set(&eddc, sizeof (eddc),
1135 sizeof(Eet_Test_Ex_Type));
1137 edd = eet_data_descriptor_file_new(&eddc);
1140 _eet_build_ex_descriptor(edd);
1142 fail_if(!(file = tmpnam(file)));
1144 /* Save the encoded data in a file. */
1145 ef = eet_open(file, EET_FILE_MODE_WRITE);
1148 fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
1152 /* Use dump/undump in the middle */
1153 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
1157 fail_if(eet_data_dump(ef, EET_TEST_FILE_KEY1, append_string, &string1) != 1);
1158 fail_if(eet_delete(ef, EET_TEST_FILE_KEY1) == 0);
1159 fail_if(!eet_data_undump(ef, EET_TEST_FILE_KEY1, string1, strlen(string1), 1));
1163 /* Test the correctness of the reinsertion. */
1164 ef = eet_open(file, EET_FILE_MODE_READ);
1167 result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
1172 /* Test the resulting data. */
1173 fail_if(_eet_test_ex_check(result, 0) != 0);
1174 fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
1175 fail_if(eina_list_data_get(result->ilist) == NULL);
1176 fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
1177 fail_if(eina_list_data_get(result->slist) == NULL);
1178 fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
1179 fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
1180 fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
1181 fail_if(strcmp(result->charray[0], "test") != 0);
1185 eina_hash_foreach(result->hash, func, &test);
1189 eina_hash_foreach(result->ihash, func7, &test);
1193 fail_if(unlink(file) != 0);
1200 START_TEST(eet_image)
1203 char * file = strdup("/tmp/eet_suite_testXXXXXX");
1204 unsigned int * data;
1215 fail_if(!(file = tmpnam(file)));
1217 /* Save the encoded data in a file. */
1218 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
1221 result = eet_data_image_write(ef,
1222 EET_TEST_FILE_IMAGE "0",
1230 fail_if(result == 0);
1232 result = eet_data_image_write(ef,
1233 EET_TEST_FILE_IMAGE "1",
1241 fail_if(result == 0);
1243 result = eet_data_image_write(ef,
1244 EET_TEST_FILE_IMAGE "2",
1252 fail_if(result == 0);
1254 result = eet_data_image_write(ef,
1255 EET_TEST_FILE_IMAGE "3",
1263 fail_if(result == 0);
1265 result = eet_data_image_write(ef,
1266 EET_TEST_FILE_IMAGE "4",
1274 fail_if(result == 0);
1276 result = eet_data_image_write(ef,
1277 EET_TEST_FILE_IMAGE "5",
1285 fail_if(result == 0);
1287 result = eet_data_image_write(ef,
1288 EET_TEST_FILE_IMAGE "6",
1296 fail_if(result == 0);
1298 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "7", test_alpha.color,
1299 test_alpha.w, test_alpha.h, test_alpha.alpha,
1301 fail_if(result == 0);
1303 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "8", test_alpha.color,
1304 test_alpha.w, test_alpha.h, test_alpha.alpha,
1306 fail_if(result == 0);
1308 result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "9", test_alpha.color,
1309 test_alpha.w, test_alpha.h, test_alpha.alpha,
1311 fail_if(result == 0);
1313 data = eet_data_image_read(ef,
1314 EET_TEST_FILE_IMAGE "2",
1321 fail_if(data == NULL);
1322 fail_if(w != test_noalpha.w);
1323 fail_if(h != test_noalpha.h);
1324 fail_if(alpha != test_noalpha.alpha);
1325 fail_if(compress != 9);
1326 fail_if(lossy != 0);
1327 fail_if(data[0] != test_noalpha.color[0]);
1330 result = eet_data_image_header_read(ef,
1331 EET_TEST_FILE_IMAGE "2",
1338 fail_if(result == 0);
1339 fail_if(w != test_noalpha.w);
1340 fail_if(h != test_noalpha.h);
1341 fail_if(alpha != test_noalpha.alpha);
1342 fail_if(compress != 9);
1343 fail_if(lossy != 0);
1347 /* Test read of image */
1348 ef = eet_open(file, EET_FILE_MODE_READ);
1351 result = eet_data_image_header_read(ef,
1352 EET_TEST_FILE_IMAGE "0",
1359 fail_if(result == 0);
1360 fail_if(w != test_noalpha.w);
1361 fail_if(h != test_noalpha.h);
1362 fail_if(alpha != test_noalpha.alpha);
1363 fail_if(compress != 0);
1364 fail_if(lossy != 0);
1366 data = malloc(w * h * 4);
1367 fail_if(data == NULL);
1368 result = eet_data_image_read_to_surface(ef,
1369 EET_TEST_FILE_IMAGE "0",
1380 fail_if(result != 1);
1381 fail_if(alpha != test_noalpha.alpha);
1382 fail_if(compress != 0);
1383 fail_if(quality != 100);
1384 fail_if(lossy != 0);
1385 fail_if(data[0] != test_noalpha.color[4 + 4 * w]);
1388 data = malloc(w * h * 4);
1389 fail_if(data == NULL);
1390 result = eet_data_image_read_to_surface(ef,
1391 EET_TEST_FILE_IMAGE "0",
1402 fail_if(result != 1);
1403 fail_if(alpha != test_noalpha.alpha);
1404 fail_if(compress != 0);
1405 fail_if(quality != 100);
1406 fail_if(lossy != 0);
1407 fail_if(data[0] != test_noalpha.color[0]);
1410 data = eet_data_image_read(ef,
1411 EET_TEST_FILE_IMAGE "1",
1418 fail_if(data == NULL);
1419 fail_if(w != test_noalpha.w);
1420 fail_if(h != test_noalpha.h);
1421 fail_if(alpha != test_noalpha.alpha);
1422 fail_if(compress != 5);
1423 fail_if(quality != 100);
1424 fail_if(lossy != 0);
1425 fail_if(data[0] != test_noalpha.color[0]);
1428 data = eet_data_image_read(ef,
1429 EET_TEST_FILE_IMAGE "2",
1436 fail_if(data == NULL);
1437 fail_if(w != test_noalpha.w);
1438 fail_if(h != test_noalpha.h);
1439 fail_if(alpha != test_noalpha.alpha);
1440 fail_if(compress != 9);
1441 fail_if(lossy != 0);
1442 fail_if(data[0] != test_noalpha.color[0]);
1445 data = eet_data_image_read(ef,
1446 EET_TEST_FILE_IMAGE "3",
1453 fail_if(data == NULL);
1454 fail_if(w != test_noalpha.w);
1455 fail_if(h != test_noalpha.h);
1456 fail_if(alpha != test_noalpha.alpha);
1457 fail_if(lossy != 1);
1460 data = eet_data_image_read(ef,
1461 EET_TEST_FILE_IMAGE "5",
1468 fail_if(data == NULL);
1469 fail_if(w != test_noalpha.w);
1470 fail_if(h != test_noalpha.h);
1471 fail_if(alpha != test_noalpha.alpha);
1472 fail_if(lossy != 1);
1475 data = eet_data_image_read(ef,
1476 EET_TEST_FILE_IMAGE "6",
1483 fail_if(data == NULL);
1484 fail_if(w != test_noalpha.w);
1485 fail_if(h != test_noalpha.h);
1486 fail_if(alpha != test_noalpha.alpha);
1487 fail_if(lossy != 1);
1490 result = eet_data_image_header_read(ef,
1491 EET_TEST_FILE_IMAGE "7",
1498 fail_if(result == 0);
1499 fail_if(w != test_alpha.w);
1500 fail_if(h != test_alpha.h);
1501 fail_if(alpha != test_alpha.alpha);
1502 fail_if(compress != 9);
1503 fail_if(lossy != 0);
1505 data = eet_data_image_read(ef,
1506 EET_TEST_FILE_IMAGE "7",
1513 fail_if(data == NULL);
1514 fail_if(w != test_alpha.w);
1515 fail_if(h != test_alpha.h);
1516 fail_if(alpha != test_alpha.alpha);
1517 fail_if(compress != 9);
1518 fail_if(lossy != 0);
1519 fail_if(data[0] != test_alpha.color[0]);
1522 result = eet_data_image_header_read(ef,
1523 EET_TEST_FILE_IMAGE "9",
1530 fail_if(result == 0);
1531 fail_if(w != test_alpha.w);
1532 fail_if(h != test_alpha.h);
1533 fail_if(alpha != test_alpha.alpha);
1534 fail_if(lossy != 1);
1536 data = eet_data_image_read(ef,
1537 EET_TEST_FILE_IMAGE "9",
1544 fail_if(data == NULL);
1545 fail_if(w != test_alpha.w);
1546 fail_if(h != test_alpha.h);
1547 fail_if(alpha != test_alpha.alpha);
1548 fail_if(lossy != 1);
1553 fail_if(unlink(file) != 0);
1560 #define IM0 0x00112233
1561 #define IM1 0x44556677
1562 #define IM2 0x8899aabb
1563 #define IM3 0xccddeeff
1565 START_TEST(eet_small_image)
1567 char * file = strdup("/tmp/eet_suite_testXXXXXX");
1568 unsigned int image[4];
1569 unsigned int * data;
1586 fail_if(!(file = tmpnam(file)));
1588 ef = eet_open(file, EET_FILE_MODE_WRITE);
1591 result = eet_data_image_write(ef, "/images/test", image, 2, 2, 1, 9, 100, 0);
1592 fail_if(result == 0);
1596 ef = eet_open(file, EET_FILE_MODE_READ);
1599 data = (unsigned int *)eet_data_image_read(ef,
1607 fail_if(data == NULL);
1611 fail_if(unlink(file) != 0);
1613 fail_if(data[0] != IM0);
1614 fail_if(data[1] != IM1);
1615 fail_if(data[2] != IM2);
1616 fail_if(data[3] != IM3);
1625 START_TEST(eet_identity_simple)
1627 const char * buffer = "Here is a string of data to save !";
1633 char * file = strdup("/tmp/eet_suite_testXXXXXX");
1639 fail_if(!(file = tmpnam(file)));
1640 fail_if(chdir("src/tests"));
1641 fail_if(!(noread = fopen("/dev/null", "w")));
1643 /* Sign an eet file. */
1644 ef = eet_open(file, EET_FILE_MODE_WRITE);
1647 fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 0));
1649 k = eet_identity_open("cert.pem", "key.pem", NULL);
1652 fail_if(eet_identity_set(ef, k) != EET_ERROR_NONE);
1653 eet_identity_print(k, noread);
1657 /* Open a signed file. */
1658 ef = eet_open(file, EET_FILE_MODE_READ);
1661 test = eet_read(ef, "keys/tests", &size);
1663 fail_if(size != (int)strlen(buffer) + 1);
1665 fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
1667 tmp = eet_identity_x509(ef, &size);
1668 fail_if(tmp == NULL);
1670 eet_identity_certificate_print(tmp, size, noread);
1674 /* As we are changing file contain in less than 1s, this could get unnoticed
1675 by eet cache system. */
1678 /* Corrupting the file. */
1679 fd = open(file, O_WRONLY);
1682 fail_if(lseek(fd, 200, SEEK_SET) != 200);
1683 fail_if(write(fd, "42", 2) != 2);
1684 fail_if(lseek(fd, 50, SEEK_SET) != 50);
1685 fail_if(write(fd, "42", 2) != 2);
1686 fail_if(lseek(fd, 88, SEEK_SET) != 88);
1687 fail_if(write(fd, "42", 2) != 2);
1691 /* Attempt to open a modified file. */
1692 ef = eet_open(file, EET_FILE_MODE_READ);
1695 fail_if(unlink(file) != 0);
1702 START_TEST(eet_identity_open_simple)
1708 fail_if(chdir("src/tests"));
1710 k = eet_identity_open("cert.pem", "key.pem", NULL);
1714 eet_identity_close(k);
1721 START_TEST(eet_identity_open_pkcs8)
1727 fail_if(chdir("src/tests"));
1729 k = eet_identity_open("cert.pem", "key_enc_none.pem", NULL);
1733 eet_identity_close(k);
1740 static int pass_get(char * pass,
1742 __UNUSED__ int rwflags,
1743 __UNUSED__ void * u)
1745 memset(pass, 0, size);
1747 if ((int)strlen("password") > size)
1750 snprintf(pass, size, "%s", "password");
1751 return strlen(pass);
1754 static int badpass_get(char * pass,
1756 __UNUSED__ int rwflags,
1757 __UNUSED__ void * u)
1759 memset(pass, 0, size);
1761 if ((int)strlen("bad password") > size)
1764 snprintf(pass, size, "%s", "bad password");
1765 return strlen(pass);
1768 START_TEST(eet_identity_open_pkcs8_enc)
1774 fail_if(chdir("src/tests"));
1776 k = eet_identity_open("cert.pem", "key_enc.pem", NULL);
1780 eet_identity_close(k);
1782 k = eet_identity_open("cert.pem", "key_enc.pem", &badpass_get);
1786 eet_identity_close(k);
1788 k = eet_identity_open("cert.pem", "key_enc.pem", &pass_get);
1792 eet_identity_close(k);
1798 START_TEST(eet_cipher_decipher_simple)
1800 const char * buffer = "Here is a string of data to save !";
1801 const char * key = "This is a crypto key";
1802 const char * key_bad = "This is another crypto key";
1805 char * file = strdup("/tmp/eet_suite_testXXXXXX");
1810 fail_if(!(file = tmpnam(file)));
1811 fail_if(chdir("src/tests"));
1813 /* Crypt an eet file. */
1814 ef = eet_open(file, EET_FILE_MODE_WRITE);
1817 fail_if(!eet_write_cipher(ef, "keys/tests", buffer, strlen(buffer) + 1, 0,
1822 /* Decrypt an eet file. */
1823 ef = eet_open(file, EET_FILE_MODE_READ);
1826 test = eet_read_cipher(ef, "keys/tests", &size, key);
1828 fail_if(size != (int)strlen(buffer) + 1);
1830 fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
1834 /* Decrypt an eet file. */
1835 ef = eet_open(file, EET_FILE_MODE_READ);
1838 test = eet_read_cipher(ef, "keys/tests", &size, key_bad);
1840 if (size == (int)strlen(buffer) + 1)
1841 fail_if(memcmp(test, buffer, strlen(buffer) + 1) == 0);
1845 fail_if(unlink(file) != 0);
1852 #ifdef EINA_HAVE_THREADS
1854 static Eina_Bool open_worker_stop;
1856 # ifdef _EET_INCLUDED_PTHREAD
1859 open_close_worker(void * path)
1861 while (!open_worker_stop)
1863 Eet_File * ef = eet_open((char const *)path, EET_FILE_MODE_READ);
1865 pthread_exit("eet_open() failed");
1868 Eet_Error err_code = eet_close(ef);
1869 if (err_code != EET_ERROR_NONE)
1870 pthread_exit("eet_close() failed");
1875 } /* open_close_worker */
1877 # else /* ifdef _EET_INCLUDED_PTHREAD */
1879 static unsigned int __stdcall
1880 open_close_worker(void * path)
1882 while (!open_worker_stop)
1884 Eet_File * ef = eet_open((char const *)path, EET_FILE_MODE_READ);
1889 Eet_Error err_code = eet_close(ef);
1890 if (err_code != EET_ERROR_NONE)
1896 } /* open_close_worker */
1898 # endif /* ifdef _EET_INCLUDED_PTHREAD */
1900 START_TEST(eet_cache_concurrency)
1902 char * file = strdup("/tmp/eet_suite_testXXXXXX");
1903 const char * buffer = "test data";
1907 # ifdef _EET_INCLUDED_PTHREAD
1909 # else /* ifdef _EET_INCLUDED_PTHREAD */
1911 unsigned int thread_id;
1913 # endif /* ifdef _EET_INCLUDED_PTHREAD */
1916 eina_threads_init();
1918 /* create a file to test with */
1919 fail_if(!(file = tmpnam(file)));
1920 ef = eet_open(file, EET_FILE_MODE_WRITE);
1922 fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 0));
1924 /* start a thread that repeatedly opens and closes a file */
1925 open_worker_stop = 0;
1926 # ifdef _EET_INCLUDED_PTHREAD
1927 pthread_create(&thread, NULL, open_close_worker, file);
1928 # else /* ifdef _EET_INCLUDED_PTHREAD */
1929 thread = _beginthreadex(NULL, 0, open_close_worker, file, 0, &thread_id);
1930 # endif /* ifdef _EET_INCLUDED_PTHREAD */
1931 /* clear the cache repeatedly in this thread */
1932 for (n = 0; n < 50000; ++n)
1937 /* join the other thread, and fail if it returned an error message */
1938 open_worker_stop = 1;
1939 # ifdef _EET_INCLUDED_PTHREAD
1940 fail_if(pthread_join(thread, &thread_ret) != 0);
1941 fail_unless(thread_ret == NULL, (char const *)thread_ret);
1942 # else /* ifdef _EET_INCLUDED_PTHREAD */
1943 ret = WaitForSingleObject((HANDLE)thread, INFINITE);
1944 fail_if(ret != WAIT_OBJECT_0);
1945 fail_if(GetExitCodeThread((HANDLE)thread, &ret) == FALSE);
1947 # endif /* ifdef _EET_INCLUDED_PTHREAD */
1949 fail_if(unlink(file) != 0);
1951 eina_threads_shutdown();
1956 #endif /* EINA_HAVE_THREADS */
1958 typedef struct _Eet_Connection_Data Eet_Connection_Data;
1959 struct _Eet_Connection_Data
1961 Eet_Connection * conn;
1962 Eet_Data_Descriptor * edd;
1967 _eet_connection_read(const void * eet_data, size_t size, void * user_data)
1969 Eet_Connection_Data * dt = user_data;
1970 Eet_Test_Ex_Type * result;
1974 result = eet_data_descriptor_decode(dt->edd, eet_data, size);
1975 node = eet_data_node_decode_cipher(eet_data, NULL, size);
1977 /* Test the resulting data. */
1979 fail_if(_eet_test_ex_check(result, 0) != 0);
1980 fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
1981 fail_if(eina_list_data_get(result->ilist) == NULL);
1982 fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
1983 fail_if(eina_list_data_get(result->slist) == NULL);
1984 fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
1985 fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
1986 fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
1987 fail_if(strcmp(result->charray[0], "test") != 0);
1991 eina_hash_foreach(result->hash, func, &test);
1995 eina_hash_foreach(result->ihash, func7, &test);
2001 dt->test = EINA_TRUE;
2002 fail_if(!eet_connection_node_send(dt->conn, node, NULL));
2006 } /* _eet_connection_read */
2009 _eet_connection_write(const void * data, size_t size, void * user_data)
2011 Eet_Connection_Data * dt = user_data;
2016 int step = size / 3;
2018 eet_connection_received(dt->conn, data, step);
2019 eet_connection_received(dt->conn, (char *)data + step, step);
2021 still = eet_connection_received(dt->conn, (char *)data + 2 * step, size);
2024 still = eet_connection_received(dt->conn, data, size);
2029 } /* _eet_connection_write */
2031 START_TEST(eet_connection_check)
2033 Eet_Connection * conn;
2034 Eet_Data_Descriptor * edd;
2035 Eet_Data_Descriptor_Class eddc;
2036 Eet_Connection_Data ecd;
2037 Eet_Test_Ex_Type etbt;
2042 _eet_test_ex_set(&etbt, 0);
2043 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
2044 etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
2045 etbt.hash = eina_hash_string_superfast_new(NULL);
2046 eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
2047 eina_hash_add(etbt.hash, EET_TEST_KEY2, _eet_test_ex_set(NULL, 2));
2048 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
2049 etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
2050 etbt.ihash = eina_hash_string_superfast_new(NULL);
2051 eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
2052 eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
2053 etbt.slist = eina_list_prepend(NULL, "test");
2054 etbt.shash = eina_hash_string_superfast_new(NULL);
2055 eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
2056 memset(&etbt.charray, 0, sizeof(etbt.charray));
2057 etbt.charray[0] = "test";
2059 eet_eina_file_data_descriptor_class_set(&eddc, sizeof (eddc),
2061 sizeof(Eet_Test_Ex_Type));
2063 edd = eet_data_descriptor_file_new(&eddc);
2066 _eet_build_ex_descriptor(edd);
2068 /* Create a connection. */
2069 conn = eet_connection_new(_eet_connection_read, _eet_connection_write, &ecd);
2073 ecd.test = EINA_FALSE;
2077 /* Test the connection. */
2078 fail_if(!eet_connection_send(conn, edd, &etbt, NULL));
2082 fail_if(!eet_connection_close(conn, &on_going));
2098 typedef struct _Eet_5FP Eet_5FP;
2108 typedef struct _Eet_5DBL Eet_5DBL;
2112 Eet_Data_Descriptor_Class eddc;
2113 Eet_Data_Descriptor * edd_5FP;
2114 Eet_Data_Descriptor * edd_5DBL;
2123 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_5FP);
2124 edd_5FP = eet_data_descriptor_stream_new(&eddc);
2126 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp32", fp32, EET_T_F32P32);
2127 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp16", fp16, EET_T_F16P16);
2128 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp8", fp8, EET_T_F8P24);
2129 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f1", f1, EET_T_F32P32);
2130 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f0", f0, EET_T_F32P32);
2132 eet_eina_stream_data_descriptor_class_set(&eddc, sizeof (eddc), "Eet_5FP", sizeof (Eet_5DBL));
2133 edd_5DBL = eet_data_descriptor_stream_new(&eddc);
2135 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp32", fp32, EET_T_DOUBLE);
2136 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp16", fp16, EET_T_DOUBLE);
2137 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp8", fp8, EET_T_FLOAT);
2138 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f1", f1, EET_T_DOUBLE);
2139 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f0", f0, EET_T_DOUBLE);
2141 origin.fp32 = eina_f32p32_double_from(1.125);
2142 origin.fp16 = eina_f16p16_int_from(2000);
2143 origin.fp8 = eina_f8p24_int_from(125);
2144 origin.f1 = eina_f32p32_int_from(1);
2147 blob = eet_data_descriptor_encode(edd_5FP, &origin, &size);
2148 fail_if(!blob || size <= 0);
2150 build = eet_data_descriptor_decode(edd_5FP, blob, size);
2153 convert = eet_data_descriptor_decode(edd_5DBL, blob, size);
2156 fail_if(build->fp32 != eina_f32p32_double_from(1.125));
2157 fail_if(build->fp16 != eina_f16p16_int_from(2000));
2158 fail_if(build->fp8 != eina_f8p24_int_from(125));
2159 fail_if(build->f1 != eina_f32p32_int_from(1));
2160 fail_if(build->f0 != 0);
2162 fail_if(convert->fp32 != 1.125);
2163 fail_if(convert->fp16 != 2000);
2164 fail_if(convert->fp8 != 125);
2165 fail_if(convert->f1 != 1);
2166 fail_if(convert->f0 != 0);
2172 START_TEST(eet_file_fp)
2174 char * file = strdup("/tmp/eet_suite_testXXXXXX");
2175 Eet_Data_Descriptor_Class eddc;
2176 Eet_Data_Descriptor * edd_5FP;
2177 Eet_Data_Descriptor * edd_5DBL;
2185 EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_5FP);
2186 edd_5FP = eet_data_descriptor_file_new(&eddc);
2188 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp32", fp32, EET_T_F32P32);
2189 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp16", fp16, EET_T_F16P16);
2190 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp8", fp8, EET_T_F8P24);
2191 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f1", f1, EET_T_F32P32);
2192 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f0", f0, EET_T_F32P32);
2194 eet_eina_file_data_descriptor_class_set(&eddc, sizeof (eddc), "Eet_5FP", sizeof (Eet_5DBL));
2195 edd_5DBL = eet_data_descriptor_file_new(&eddc);
2197 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp32", fp32, EET_T_DOUBLE);
2198 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp16", fp16, EET_T_DOUBLE);
2199 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp8", fp8, EET_T_FLOAT);
2200 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f1", f1, EET_T_DOUBLE);
2201 EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f0", f0, EET_T_DOUBLE);
2203 origin.fp32 = eina_f32p32_double_from(1.125);
2204 origin.fp16 = eina_f16p16_int_from(2000);
2205 origin.fp8 = eina_f8p24_int_from(125);
2206 origin.f1 = eina_f32p32_int_from(1);
2209 fail_if(!(file = tmpnam(file)));
2211 ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
2214 fail_if(!eet_data_write(ef, edd_5FP, EET_TEST_FILE_KEY1, &origin, 1));
2216 build = eet_data_read(ef, edd_5FP, EET_TEST_FILE_KEY1);
2219 convert = eet_data_read(ef, edd_5DBL, EET_TEST_FILE_KEY1);
2222 fail_if(build->fp32 != eina_f32p32_double_from(1.125));
2223 fail_if(build->fp16 != eina_f16p16_int_from(2000));
2224 fail_if(build->fp8 != eina_f8p24_int_from(125));
2225 fail_if(build->f1 != eina_f32p32_int_from(1));
2226 fail_if(build->f0 != 0);
2228 fail_if(convert->fp32 != 1.125);
2229 fail_if(convert->fp16 != 2000);
2230 fail_if(convert->fp8 != 125);
2231 fail_if(convert->f1 != 1);
2232 fail_if(convert->f0 != 0);
2236 fail_if(unlink(file) != 0);
2243 typedef struct _Eet_Union_Test Eet_Union_Test;
2244 typedef struct _Eet_Variant_Test Eet_Variant_Test;
2245 typedef struct _Eet_Variant_Type Eet_Variant_Type;
2246 typedef struct _Eet_Inherit_Test1 Eet_Inherit_Test1;
2247 typedef struct _Eet_Inherit_Test2 Eet_Inherit_Test2;
2248 typedef struct _Eet_Inherit_Test3 Eet_Inherit_Test3;
2249 typedef struct _Eet_St1 Eet_St1;
2250 typedef struct _Eet_St2 Eet_St2;
2251 typedef struct _Eet_St3 Eet_St3;
2252 typedef struct _Eet_List Eet_List;
2254 typedef enum _Eet_Union
2270 { EET_UNKNOWN, NULL }
2283 unsigned long long v1;
2291 struct _Eet_Union_Test
2302 struct _Eet_Variant_Type
2305 Eina_Bool unknow : 1;
2308 struct _Eet_Variant_Test
2313 Eina_List * data_list;
2316 struct _Eet_Inherit_Test1
2321 struct _Eet_Inherit_Test2
2326 struct _Eet_Inherit_Test3
2338 _eet_union_type_get(const void * data, Eina_Bool * unknow)
2340 const Eet_Union * u = data;
2344 *unknow = EINA_FALSE;
2346 for (i = 0; eet_mapping[i].name != NULL; ++i)
2347 if (*u == eet_mapping[i].u)
2348 return eet_mapping[i].name;
2351 *unknow = EINA_TRUE;
2354 } /* _eet_union_type_get */
2357 _eet_union_type_set(const char * type, void * data, Eina_Bool unknow)
2359 Eet_Union * u = data;
2365 for (i = 0; eet_mapping[i].name != NULL; ++i)
2366 if (strcmp(eet_mapping[i].name, type) == 0)
2368 *u = eet_mapping[i].u;
2373 } /* _eet_union_type_set */
2376 _eet_variant_type_get(const void * data, Eina_Bool * unknow)
2378 const Eet_Variant_Type * type = data;
2382 *unknow = type->unknow;
2384 for (i = 0; eet_mapping[i].name != NULL; ++i)
2385 if (strcmp(type->type, eet_mapping[i].name) == 0)
2386 return eet_mapping[i].name;
2389 *unknow = EINA_FALSE;
2392 } /* _eet_variant_type_get */
2395 _eet_variant_type_set(const char * type, void * data, Eina_Bool unknow)
2397 Eet_Variant_Type * vt = data;
2400 vt->unknow = unknow;
2402 } /* _eet_variant_type_set */
2404 static Eet_Data_Descriptor *
2407 Eet_Data_Descriptor_Class eddc;
2408 Eet_Data_Descriptor * res;
2410 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_St1);
2411 res = eet_data_descriptor_stream_new(&eddc);
2412 EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "val1", val1, EET_T_DOUBLE);
2413 EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "stuff", stuff, EET_T_INT);
2414 EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "s1", s1, EET_T_STRING);
2420 _eet_st1_set(Eet_St1 * st1, int i)
2422 st1->val1 = EET_TEST_DOUBLE;
2423 st1->stuff = EET_TEST_INT + i;
2424 st1->s1 = EET_TEST_STRING;
2425 } /* _eet_st1_set */
2428 _eet_st1_cmp(Eet_St1 * st1, int i)
2434 tmp = st1->val1 - EET_TEST_DOUBLE;
2438 fail_if(tmp > 0.005);
2439 fail_if(st1->stuff != EET_TEST_INT + i);
2440 fail_if(strcmp(st1->s1, EET_TEST_STRING));
2441 } /* _eet_st1_cmp */
2443 static Eet_Data_Descriptor *
2446 Eet_Data_Descriptor_Class eddc;
2447 Eet_Data_Descriptor * res;
2449 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_St2);
2450 res = eet_data_descriptor_stream_new(&eddc);
2451 EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St2, "b1", b1, EET_T_UCHAR);
2452 EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St2, "v1", v1, EET_T_ULONG_LONG);
2458 _eet_st2_set(Eet_St2 * st2, int i)
2460 st2->b1 = EINA_TRUE;
2461 st2->v1 = EET_TEST_LONG_LONG + i;
2462 } /* _eet_st2_set */
2465 _eet_st2_cmp(Eet_St2 * st2, int i)
2468 fail_if(st2->v1 != EET_TEST_LONG_LONG + i);
2469 } /* _eet_st2_cmp */
2471 static Eet_Data_Descriptor *
2474 Eet_Data_Descriptor_Class eddc;
2475 Eet_Data_Descriptor * res;
2477 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_St3);
2478 res = eet_data_descriptor_stream_new(&eddc);
2479 EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St3, "boby", boby, EET_T_INT);
2485 _eet_st3_set(Eet_St3 * st3, int i)
2487 st3->boby = EET_TEST_INT + i;
2488 } /* _eet_st3_set */
2491 _eet_st3_cmp(Eet_St3 * st3, int i)
2493 fail_if(st3->boby != EET_TEST_INT + i);
2494 } /* _eet_st3_cmp */
2496 START_TEST(eet_test_union)
2498 Eet_Union_Test * eut;
2500 Eet_Data_Descriptor_Class eddc;
2501 Eet_Data_Descriptor * edd;
2502 Eet_Data_Descriptor * unified;
2503 Eet_Data_Descriptor * m;
2511 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_Union_Test);
2512 edd = eet_data_descriptor_stream_new(&eddc);
2514 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_Union_Test);
2515 m = eet_data_descriptor_stream_new(&eddc);
2517 eddc.version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
2518 eddc.func.type_get = _eet_union_type_get;
2519 eddc.func.type_set = _eet_union_type_set;
2520 unified = eet_data_descriptor_stream_new(&eddc);
2522 EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST1", _eet_st1_dd());
2523 EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST2", _eet_st2_dd());
2524 EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST3", _eet_st3_dd());
2526 EET_DATA_DESCRIPTOR_ADD_UNION(edd, Eet_Union_Test, "u", u, type, unified);
2528 EET_DATA_DESCRIPTOR_ADD_LIST(m, Eet_List, "list", list, edd);
2530 l = calloc(1, sizeof (Eet_List));
2532 #define EUT_NEW(Type_Index)\
2533 eut = calloc(1, sizeof (Eet_Union_Test));\
2534 eut->type = EET_ST ## Type_Index;\
2535 _eet_st ## Type_Index ## _set(&(eut->u.st ## Type_Index), i);
2537 for (i = 0; i < 3; ++i)
2540 l->list = eina_list_append(l->list, eut);
2543 l->list = eina_list_append(l->list, eut);
2546 l->list = eina_list_append(l->list, eut);
2549 blob = eet_data_descriptor_encode(m, l, &size);
2550 fail_if(!blob || size <= 0);
2552 l = eet_data_descriptor_decode(m, blob, size);
2555 fail_if(eina_list_count(l->list) != 9);
2557 #define EUT_CMP(Type_Index)\
2558 eut = eina_list_nth(l->list, i * 3 + Type_Index - 1);\
2559 fail_if(eut->type != EET_ST ## Type_Index);\
2560 _eet_st ## Type_Index ## _cmp(&(eut->u.st ## Type_Index), i);
2562 for (i = 0; i < 3; ++i)
2574 START_TEST(eet_test_variant)
2576 Eet_Variant_Test * evt;
2581 Eet_Data_Descriptor_Class eddc;
2582 Eet_Data_Descriptor * edd;
2583 Eet_Data_Descriptor * unified;
2584 Eet_Data_Descriptor * m;
2592 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_Variant_Test);
2593 edd = eet_data_descriptor_stream_new(&eddc);
2595 EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_Variant_Test);
2596 m = eet_data_descriptor_stream_new(&eddc);
2598 eddc.version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
2599 eddc.func.type_get = _eet_variant_type_get;
2600 eddc.func.type_set = _eet_variant_type_set;
2601 unified = eet_data_descriptor_stream_new(&eddc);
2603 EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST1", _eet_st1_dd());
2604 EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST2", _eet_st2_dd());
2605 EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST3", _eet_st3_dd());
2607 EET_DATA_DESCRIPTOR_ADD_VARIANT(edd,
2614 unified = eet_data_descriptor_stream_new(&eddc);
2615 eet_data_descriptor_element_add(unified, "ST1",
2616 EET_T_UNKNOW, EET_G_LIST,
2617 0, 0, NULL, _eet_st1_dd());
2618 eet_data_descriptor_element_add(unified, "ST2",
2619 EET_T_UNKNOW, EET_G_LIST,
2620 0, 0, NULL, _eet_st2_dd());
2622 EET_DATA_DESCRIPTOR_ADD_VARIANT(edd, Eet_Variant_Test,
2623 "data_list", data_list, t, unified);
2625 EET_DATA_DESCRIPTOR_ADD_LIST(m, Eet_List, "list", list, edd);
2627 l = calloc(1, sizeof (Eet_List));
2629 #define EVT_NEW(Type_Index)\
2630 evt = calloc(1, sizeof (Eet_Variant_Test));\
2631 evt->t.type = eet_mapping[Type_Index - 1].name;\
2632 st ## Type_Index = calloc(1, sizeof (Eet_St ## Type_Index));\
2633 _eet_st ## Type_Index ## _set(st ## Type_Index, i);\
2634 evt->data = st ## Type_Index;
2636 for (i = 0; i < 3; ++i)
2639 l->list = eina_list_append(l->list, evt);
2641 st1 = calloc(1, sizeof (Eet_St1));
2642 _eet_st1_set(st1, i);
2643 evt->data_list = eina_list_append(evt->data_list, st1);
2646 l->list = eina_list_append(l->list, evt);
2649 l->list = eina_list_append(l->list, evt);
2652 blob = eet_data_descriptor_encode(m, l, &size);
2653 fail_if(!blob || size <= 0);
2655 l = eet_data_descriptor_decode(m, blob, size);
2658 fail_if(eina_list_count(l->list) != 9);
2660 #define EVT_CMP(Type_Index)\
2661 evt = eina_list_nth(l->list, i * 3 + Type_Index - 1);\
2662 fail_if(strcmp(evt->t.type, eet_mapping[Type_Index - 1].name) != 0);\
2663 _eet_st ## Type_Index ## _cmp(evt->data, i);
2665 for (i = 0; i < 3; ++i)
2669 fail_if(!evt->data_list);
2670 fail_if(eina_list_count(evt->data_list) != 1);
2672 st1 = eina_list_data_get(evt->data_list);
2673 _eet_st1_cmp(st1, i);
2691 s = suite_create("Eet");
2693 tc = tcase_create("Eet_Init");
2694 tcase_add_test(tc, eet_test_init);
2695 suite_add_tcase(s, tc);
2697 tc = tcase_create("Eet Data Encoding/Decoding");
2698 tcase_add_test(tc, eet_test_basic_data_type_encoding_decoding);
2699 tcase_add_test(tc, eet_test_data_type_encoding_decoding);
2700 tcase_add_test(tc, eet_test_data_type_dump_undump);
2701 tcase_add_test(tc, eet_fp);
2702 tcase_add_test(tc, eet_test_union);
2703 tcase_add_test(tc, eet_test_variant);
2704 suite_add_tcase(s, tc);
2706 tc = tcase_create("Eet File");
2707 tcase_add_test(tc, eet_file_simple_write);
2708 tcase_add_test(tc, eet_file_data_test);
2709 tcase_add_test(tc, eet_file_data_dump_test);
2710 tcase_add_test(tc, eet_file_fp);
2711 suite_add_tcase(s, tc);
2713 tc = tcase_create("Eet Image");
2714 tcase_add_test(tc, eet_image);
2715 tcase_add_test(tc, eet_small_image);
2716 suite_add_tcase(s, tc);
2718 #ifdef HAVE_SIGNATURE
2719 tc = tcase_create("Eet Identity");
2720 tcase_add_test(tc, eet_identity_simple);
2721 tcase_add_test(tc, eet_identity_open_simple);
2722 tcase_add_test(tc, eet_identity_open_pkcs8);
2723 tcase_add_test(tc, eet_identity_open_pkcs8_enc);
2724 suite_add_tcase(s, tc);
2725 #endif /* ifdef HAVE_SIGNATURE */
2728 tc = tcase_create("Eet Cipher");
2729 tcase_add_test(tc, eet_cipher_decipher_simple);
2730 suite_add_tcase(s, tc);
2731 #endif /* ifdef HAVE_CIPHER */
2733 #ifdef EINA_HAVE_THREADS
2734 tc = tcase_create("Eet Cache");
2735 tcase_add_test(tc, eet_cache_concurrency);
2736 suite_add_tcase(s, tc);
2737 #endif /* ifdef EFL_HAVE_THREADS */
2739 tc = tcase_create("Eet Connection");
2740 tcase_add_test(tc, eet_connection_check);
2741 suite_add_tcase(s, tc);
2754 sr = srunner_create(s);
2755 srunner_run_all(sr, CK_ENV);
2756 failed_count = srunner_ntests_failed(sr);
2759 return (failed_count == 0) ? EXIT_SUCCESS : EXIT_FAILURE;