Test rework #6: Eet
authorVincent Torri <vincent dot torri at gmail dot com>
Thu, 4 Feb 2016 13:29:22 +0000 (14:29 +0100)
committerTom Hacohen <tom@stosb.com>
Tue, 16 Feb 2016 12:41:06 +0000 (12:41 +0000)
This one is big: I had to split the huge eet_suite.c into separate test files
and it needs more review

14 files changed:
src/Makefile_Eet.am
src/tests/eet/eet_data_suite.c [deleted file]
src/tests/eet/eet_suite.c
src/tests/eet/eet_suite.h
src/tests/eet/eet_test_cache.c [new file with mode: 0644]
src/tests/eet/eet_test_cipher.c [new file with mode: 0644]
src/tests/eet/eet_test_common.c [new file with mode: 0644]
src/tests/eet/eet_test_common.h [new file with mode: 0644]
src/tests/eet/eet_test_connection.c [new file with mode: 0644]
src/tests/eet/eet_test_data.c [new file with mode: 0644]
src/tests/eet/eet_test_file.c [new file with mode: 0644]
src/tests/eet/eet_test_identity.c [new file with mode: 0644]
src/tests/eet/eet_test_image.c [new file with mode: 0644]
src/tests/eet/eet_test_init.c [new file with mode: 0644]

index 1701e7b..d2efc9a 100644 (file)
@@ -62,8 +62,17 @@ check_PROGRAMS += tests/eet/eet_suite
 TESTS += tests/eet/eet_suite
 
 tests_eet_eet_suite_SOURCES = \
+tests/eet/eet_test_cache.c \
+tests/eet/eet_test_cipher.c \
+tests/eet/eet_test_common.c \
+tests/eet/eet_test_connection.c \
+tests/eet/eet_test_data.c \
+tests/eet/eet_test_file.c \
+tests/eet/eet_test_identity.c \
+tests/eet/eet_test_image.c \
+tests/eet/eet_test_init.c \
 tests/eet/eet_suite.c \
-tests/eet/eet_data_suite.c \
+tests/eet/eet_test_common.h \
 tests/eet/eet_suite.h
 
 tests_eet_eet_suite_CPPFLAGS = -I$(top_builddir)/src/lib/efl \
diff --git a/src/tests/eet/eet_data_suite.c b/src/tests/eet/eet_data_suite.c
deleted file mode 100644 (file)
index c4d5e50..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-#include <string.h>
-#include <stdio.h>
-
-#include <Eina.h>
-
-#include "eet_suite.h"
-
-static char *
-_eet_str_direct_alloc(const char *str)
-{
-   return (char *)str;
-} /* _eet_str_direct_alloc */
-
-static void
-_eet_str_direct_free(const char *str)
-{
-   /* FIXME: Use attribute unused */
-    (void)str;
-} /* _eet_str_direct_free */
-
-static void
-_eet_eina_hash_foreach(void             *hash,
-                       Eina_Hash_Foreach cb,
-                       void             *fdata)
-{
-   if (hash)
-     eina_hash_foreach(hash, cb, fdata);
-} /* _eet_eina_hash_foreach */
-
-/* Internal wrapper for eina_hash */
-static Eina_Hash *
-_eet_eina_hash_add(Eina_Hash  *hash,
-                   const char *key,
-                   const void *data)
-{
-   if (!hash)
-     hash = eina_hash_string_superfast_new(NULL);
-
-   if (!hash)
-     return NULL;
-
-   eina_hash_add(hash, key, data);
-   return hash;
-} /* _eet_eina_hash_add */
-
-static void
-_eet_eina_hash_free(Eina_Hash *hash)
-{
-   if (hash)
-     eina_hash_free(hash);
-} /* _eet_eina_hash_free */
-
-void
-eet_test_setup_eddc(Eet_Data_Descriptor_Class *eddc)
-{
-   eddc->version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
-   eddc->func.mem_alloc = NULL;
-   eddc->func.mem_free = NULL;
-   eddc->func.str_alloc = NULL;
-   eddc->func.str_free = NULL;
-   eddc->func.list_next = (void *)eina_list_next;
-   eddc->func.list_append = (void *)eina_list_append;
-   eddc->func.list_data = (void *)eina_list_data_get;
-   eddc->func.list_free = (void *)eina_list_free;
-   eddc->func.hash_foreach = (void *)_eet_eina_hash_foreach;
-   eddc->func.hash_add = (void *)_eet_eina_hash_add;
-   eddc->func.hash_free = (void *)_eet_eina_hash_free;
-   eddc->func.str_direct_alloc = (void *)_eet_str_direct_alloc;
-   eddc->func.str_direct_free = (void *)_eet_str_direct_free;
-   eddc->func.array_alloc = NULL;
-   eddc->func.array_free = NULL;
-} /* eet_test_setup_eddc */
-
index e7737a7..3d8bb2d 100644 (file)
 #ifdef HAVE_CONFIG_H
 # include <config.h>
-#endif /* ifdef HAVE_CONFIG_H */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <stdlib.h>
-#include <string.h>
-#include <strings.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-#include <Eina.h>
-
-#include <check.h>
-
-#include "eet_suite.h"
-
-#ifndef O_BINARY
-# define O_BINARY 0
-#endif
-
-static char _key_pem[PATH_MAX] = "";
-static char _cert_pem[PATH_MAX] = "";
-static char _key_enc[PATH_MAX] = "";
-static char _key_enc_pem[PATH_MAX] = "";
-static char _key_enc_none_pem[PATH_MAX] = "";
-
-START_TEST(eet_test_init)
-{
-   int ret;
-
-   ret = eet_init();
-   fail_if(ret != 1);
-
-   ret = eet_shutdown();
-   fail_if(ret != 0);
-}
-END_TEST
-
-typedef struct _Eet_Test_Basic_Type Eet_Test_Basic_Type;
-struct _Eet_Test_Basic_Type
-{
-   char                 c;
-   short                s;
-   int                  i;
-   long long            l;
-   char                *str;
-   char                *istr;
-   float                f1;
-   float                f2;
-   double               d;
-   unsigned char        uc;
-   unsigned short       us;
-   unsigned int         ui;
-   unsigned long long   ul;
-   Eina_Value          *vp;
-   Eet_Test_Basic_Type *empty;
-   Eet_Test_Basic_Type *with;
-};
-
-#define EET_TEST_CHAR       0x42
-#define EET_TEST_SHORT      0x4224
-#define EET_TEST_INT        0x42211224
-#define EET_TEST_LONG_LONG  0x84CB42211224BC48
-#define EET_TEST_STRING     "my little test with escape \\\""
-#define EET_TEST_KEY1       "key1"
-#define EET_TEST_KEY2       "key2"
-#define EET_TEST_FLOAT      123.45689
-#define EET_TEST_FLOAT2     1.0
-#define EET_TEST_FLOAT3     0.25
-#define EET_TEST_FLOAT4     0.0001234
-#define EET_TEST_DOUBLE     123456789.9876543210
-#define EET_TEST_DOUBLE2    1.0
-#define EET_TEST_DOUBLE3    0.25
-#define EET_TEST_FILE_KEY1  "keys/data/1"
-#define EET_TEST_FILE_KEY2  "keys/data/2"
-#define EET_TEST_FILE_IMAGE "keys/images/"
-
-typedef struct _Eet_Test_Image Eet_Test_Image;
-struct _Eet_Test_Image
-{
-   unsigned int w;
-   unsigned int h;
-   int          alpha;
-   unsigned int color[64];
-};
-
-static const Eet_Test_Image test_noalpha = {
-   8, 8, 0,
-   {
-      0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
-      0x000000AA, 0x00110000,
-      0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
-      0x00110000, 0x00AA0000,
-      0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
-      0x00AA0000, 0x0000AA00,
-      0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
-      0x0000AA00, 0x000000AA,
-      0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
-      0x000000AA, 0x00110000,
-      0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
-      0x00110000, 0x00AA0000,
-      0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
-      0x00AA0000, 0x0000AA00,
-      0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
-      0x0000AA00, 0x000000AA
-   }
-};
-
-static const Eet_Test_Image test_alpha = {
-   8, 8, 1,
-   {
-      0x0FAA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
-      0x000000AA, 0x0F110000,
-      0x0000AA00, 0x0F0000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
-      0x0F110000, 0x00AA0000,
-      0x000000AA, 0x00110000, 0x0FAA0000, 0x0000AA00, 0x000000AA, 0x0F110000,
-      0x00AA0000, 0x0000AA00,
-      0x00110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA, 0x0F110000, 0x00AA0000,
-      0x0000AA00, 0x000000AA,
-      0x00AA0000, 0x0000AA00, 0x000000AA, 0x0F110000, 0x0FAA0000, 0x0000AA00,
-      0x000000AA, 0x00110000,
-      0x0000AA00, 0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA,
-      0x00110000, 0x00AA0000,
-      0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
-      0x0FAA0000, 0x0000AA00,
-      0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
-      0x0000AA00, 0x0F0000AA
-   }
-};
-
-static void
-_eet_test_basic_set(Eet_Test_Basic_Type *res,
-                    int                  i)
-{
-   res->c = EET_TEST_CHAR;
-   res->s = EET_TEST_SHORT;
-   res->i = EET_TEST_INT + i;
-   res->l = EET_TEST_LONG_LONG;
-   res->str = EET_TEST_STRING;
-   res->istr = EET_TEST_STRING;
-   res->f1 = -EET_TEST_FLOAT;
-   res->d = -EET_TEST_DOUBLE;
-   res->f2 = EET_TEST_FLOAT4;
-   res->uc = EET_TEST_CHAR;
-   res->us = EET_TEST_SHORT;
-   res->ui = EET_TEST_INT;
-   res->ul = EET_TEST_LONG_LONG;
-   res->empty = NULL;
-   res->with = NULL;
-   res->vp = eina_value_new(EINA_VALUE_TYPE_INT);
-   eina_value_set(res->vp, EET_TEST_INT + i);
-
-   if (i == 0)
-     {
-        Eet_Test_Basic_Type *tmp;
-
-        tmp = malloc(sizeof (Eet_Test_Basic_Type));
-        fail_if(!tmp);
-
-        res->with = tmp;
-        tmp->c = EET_TEST_CHAR;
-        tmp->s = EET_TEST_SHORT;
-        tmp->i = EET_TEST_INT + i + 1;
-        tmp->l = EET_TEST_LONG_LONG;
-        tmp->str = EET_TEST_STRING;
-        tmp->istr = EET_TEST_STRING;
-        tmp->f1 = -EET_TEST_FLOAT;
-        tmp->d = -EET_TEST_DOUBLE;
-        tmp->f2 = EET_TEST_FLOAT4;
-        tmp->uc = EET_TEST_CHAR;
-        tmp->us = EET_TEST_SHORT;
-        tmp->ui = EET_TEST_INT;
-        tmp->ul = EET_TEST_LONG_LONG;
-        tmp->empty = NULL;
-        tmp->with = NULL;
-        tmp->vp = NULL;
-     }
-} /* _eet_test_basic_set */
-
-static void
-_eet_test_basic_check(Eet_Test_Basic_Type *result,
-                      int                  i,
-                      Eina_Bool            dumper)
-{
-   int test = -1;
-   float tmp;
-
-   fail_if(result->c != EET_TEST_CHAR);
-   fail_if(result->s != EET_TEST_SHORT);
-   fail_if(result->i != EET_TEST_INT + i);
-   fail_if(result->l != (long long)EET_TEST_LONG_LONG);
-   fail_if(strcmp(result->str, EET_TEST_STRING) != 0);
-   fail_if(strcmp(result->istr, EET_TEST_STRING) != 0);
-   fail_if(result->uc != EET_TEST_CHAR);
-   fail_if(result->us != EET_TEST_SHORT);
-   fail_if(result->ui != EET_TEST_INT);
-   fail_if(result->ul != EET_TEST_LONG_LONG);
-   if (!dumper)
-     {
-        fail_if(result->vp == NULL);
-        eina_value_get(result->vp, &test);
-        fail_if(test != EET_TEST_INT + i);
-     }
-   else
-     {
-        fail_if(result->vp != NULL);
-     }
-
-   tmp = (result->f1 + EET_TEST_FLOAT);
-   if (tmp < 0)
-     tmp = -tmp;
-
-   fail_if(tmp > 0.005);
-
-   tmp = (result->f2 - EET_TEST_FLOAT4);
-   if (tmp < 0)
-     tmp = -tmp;
-
-   fail_if(tmp > 0.005);
-
-   tmp = (result->d + EET_TEST_DOUBLE);
-   if (tmp < 0)
-     tmp = -tmp;
-
-   fail_if(tmp > 0.00005);
-
-   fail_if(result->empty != NULL);
-   if (i == 0)
-     {
-        Eet_Test_Basic_Type *tmp2;
-
-        tmp2 = result->with;
-        fail_if(tmp2 == NULL);
-
-        fail_if(tmp2->c != EET_TEST_CHAR);
-        fail_if(tmp2->s != EET_TEST_SHORT);
-        fail_if(tmp2->i != EET_TEST_INT + i + 1);
-        fail_if(tmp2->l != (long long)EET_TEST_LONG_LONG);
-        fail_if(strcmp(tmp2->str, EET_TEST_STRING) != 0);
-        fail_if(strcmp(tmp2->istr, EET_TEST_STRING) != 0);
-        fail_if(tmp2->uc != EET_TEST_CHAR);
-        fail_if(tmp2->us != EET_TEST_SHORT);
-        fail_if(tmp2->ui != EET_TEST_INT);
-        fail_if(tmp2->ul != EET_TEST_LONG_LONG);
-        fail_if(tmp2->vp != NULL);
-     }
-   else
-     fail_if(result->with != NULL);
-} /* _eet_test_basic_check */
-
-static void
-_eet_build_basic_descriptor(Eet_Data_Descriptor *edd)
-{
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Basic_Type,
-                                 "c",
-                                 c,
-                                 EET_T_CHAR);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Basic_Type,
-                                 "s",
-                                 s,
-                                 EET_T_SHORT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Basic_Type,
-                                 "i",
-                                 i,
-                                 EET_T_INT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Basic_Type,
-                                 "l",
-                                 l,
-                                 EET_T_LONG_LONG);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Basic_Type,
-                                 "str",
-                                 str,
-                                 EET_T_STRING);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Basic_Type,
-                                 "istr",
-                                 istr,
-                                 EET_T_INLINED_STRING);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Basic_Type,
-                                 "f1",
-                                 f1,
-                                 EET_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Basic_Type,
-                                 "f2",
-                                 f2,
-                                 EET_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Basic_Type,
-                                 "d",
-                                 d,
-                                 EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Basic_Type,
-                                 "uc",
-                                 uc,
-                                 EET_T_UCHAR);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Basic_Type,
-                                 "us",
-                                 us,
-                                 EET_T_USHORT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Basic_Type,
-                                 "ui",
-                                 ui,
-                                 EET_T_UINT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Basic_Type,
-                                 "ul",
-                                 ul,
-                                 EET_T_ULONG_LONG);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Basic_Type,
-                                 "vp",
-                                 vp,
-                                 EET_T_VALUE);
-
-   EET_DATA_DESCRIPTOR_ADD_SUB(edd, Eet_Test_Basic_Type, "empty", empty, edd);
-   EET_DATA_DESCRIPTOR_ADD_SUB(edd, Eet_Test_Basic_Type, "with", with, edd);
-} /* _eet_build_basic_descriptor */
-
-START_TEST(eet_test_basic_data_type_encoding_decoding)
-{
-   Eet_Data_Descriptor *edd;
-   Eet_Test_Basic_Type *result;
-   Eet_Data_Descriptor_Class eddc;
-   Eet_Test_Basic_Type etbt;
-   void *transfert;
-   int size;
-
-   eet_init();
-
-   _eet_test_basic_set(&etbt, 0);
-
-   eet_test_setup_eddc(&eddc);
-   eddc.name = "Eet_Test_Basic_Type";
-   eddc.size = sizeof(Eet_Test_Basic_Type);
-
-   edd = eet_data_descriptor_stream_new(&eddc);
-   fail_if(!edd);
-
-   _eet_build_basic_descriptor(edd);
-
-   transfert = eet_data_descriptor_encode(edd, &etbt, &size);
-   fail_if(!transfert || size <= 0);
-
-   result = eet_data_descriptor_decode(edd, transfert, size);
-   fail_if(!result);
-
-   _eet_test_basic_check(result, 0, EINA_FALSE);
-
-   free(result->str);
-   free(result);
-
-   eet_data_descriptor_free(edd);
-
-   eet_shutdown();
-}
-END_TEST
-
-typedef struct _Eet_Test_Ex_Type Eet_Test_Ex_Type;
-struct _Eet_Test_Ex_Type
-{
-   char                 c;
-   short                s;
-   int                  i;
-   unsigned long long   l;
-   char                *str;
-   char                *istr;
-   float                f1;
-   float                f2;
-   float                f3;
-   float                f4;
-   double               d1;
-   double               d2;
-   double               d3;
-   double               d4;
-   Eina_List           *list;
-   Eina_Hash           *hash;
-   Eina_List           *ilist;
-   Eina_List           *slist;
-   Eina_Hash           *ihash;
-   Eina_Hash           *shash;
-   Eet_Test_Basic_Type  sarray1[10];
-   unsigned int         sarray2[5];
-   unsigned int         varray1_count;
-   unsigned int        *varray1;
-   unsigned int         varray2_count;
-   Eet_Test_Basic_Type *varray2;
-   unsigned char        uc;
-   unsigned short       us;
-   unsigned int         ui;
-   unsigned long long   ul;
-   char                *charray[10];
-};
-
-static int i42 = 42;
-static int i7 = 7;
-
-static void
-_eet_build_ex_descriptor(Eet_Data_Descriptor *edd, Eina_Bool stream)
-{
-   Eet_Data_Descriptor_Class eddc;
-   Eet_Test_Ex_Type etbt;
-   Eet_Data_Descriptor *eddb;
-
-   if (stream)
-     {
-        eet_eina_stream_data_descriptor_class_set(&eddc,
-                                                  sizeof (Eet_Data_Descriptor_Class),
-                                                  "Eet_Test_Basic_Type",
-                                                  sizeof(Eet_Test_Basic_Type));
-        eddb = eet_data_descriptor_stream_new(&eddc);
-     }
-   else
-     {
-        eet_eina_file_data_descriptor_class_set(&eddc,
-                                                sizeof (Eet_Data_Descriptor_Class),
-                                                "Eet_Test_Basic_Type",
-                                                sizeof(Eet_Test_Basic_Type));
-        eddb = eet_data_descriptor_file_new(&eddc);
-     }
-   fail_if(!eddb);
-
-   _eet_build_basic_descriptor(eddb);
-
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "c",
-                                 c,
-                                 EET_T_CHAR);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "s",
-                                 s,
-                                 EET_T_SHORT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "i", i, EET_T_INT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "l",
-                                 l,
-                                 EET_T_LONG_LONG);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "str",
-                                 str,
-                                 EET_T_STRING);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "istr",
-                                 istr,
-                                 EET_T_INLINED_STRING);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "f1",
-                                 f1,
-                                 EET_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "f2",
-                                 f2,
-                                 EET_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "f3",
-                                 f3,
-                                 EET_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "f4",
-                                 f4,
-                                 EET_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "d1",
-                                 d1,
-                                 EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "d2",
-                                 d2,
-                                 EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "d3",
-                                 d3,
-                                 EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "d4",
-                                 d4,
-                                 EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "uc",
-                                 uc,
-                                 EET_T_UCHAR);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "us",
-                                 us,
-                                 EET_T_USHORT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "ui",
-                                 ui,
-                                 EET_T_UINT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
-                                 Eet_Test_Ex_Type,
-                                 "ul",
-                                 ul,
-                                 EET_T_ULONG_LONG);
-   EET_DATA_DESCRIPTOR_ADD_ARRAY(edd,
-                                 Eet_Test_Ex_Type,
-                                 "sarray1",
-                                 sarray1,
-                                 eddb);
-   EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(edd,
-                                     Eet_Test_Ex_Type,
-                                     "varray2",
-                                     varray2,
-                                     eddb);
-   eet_data_descriptor_element_add(edd,
-                                   "varray1",
-                                   EET_T_INT,
-                                   EET_G_VAR_ARRAY,
-                                   (char *)(&(etbt.varray1)) - (char *)(&(etbt)),
-                                   (char *)(&(etbt.varray1_count)) -
-                                   (char *)(&(etbt)),
-                                   /* 0,  */ NULL,
-                                   NULL);
-   eet_data_descriptor_element_add(edd, "sarray2", EET_T_INT, EET_G_ARRAY,
-                                   (char *)(&(etbt.sarray2)) - (char *)(&(etbt)),
-                                   /* 0,  */ sizeof(etbt.sarray2) /
-                                   sizeof(etbt.sarray2[0]), NULL, NULL);
-   eet_data_descriptor_element_add(edd, "charray", EET_T_STRING, EET_G_ARRAY,
-                                   (char *)(&(etbt.charray)) - (char *)(&(etbt)),
-                                   /* 0,  */ sizeof(etbt.charray) /
-                                   sizeof(etbt.charray[0]), NULL, NULL);
-   EET_DATA_DESCRIPTOR_ADD_LIST(edd, Eet_Test_Ex_Type, "list", list, edd);
-   EET_DATA_DESCRIPTOR_ADD_HASH(edd, Eet_Test_Ex_Type, "hash", hash, edd);
-   eet_data_descriptor_element_add(edd, "ilist", EET_T_INT, EET_G_LIST,
-                                   (char *)(&(etbt.ilist)) - (char *)(&(etbt)),
-                                   0, /* 0,  */ NULL, NULL);
-   eet_data_descriptor_element_add(edd, "ihash", EET_T_INT, EET_G_HASH,
-                                   (char *)(&(etbt.ihash)) - (char *)(&(etbt)),
-                                   0, /* 0,  */ NULL, NULL);
-   eet_data_descriptor_element_add(edd, "slist", EET_T_STRING, EET_G_LIST,
-                                   (char *)(&(etbt.slist)) - (char *)(&(etbt)),
-                                   0, /* 0,  */ NULL, NULL);
-   eet_data_descriptor_element_add(edd, "shash", EET_T_STRING, EET_G_HASH,
-                                   (char *)(&(etbt.shash)) - (char *)(&(etbt)),
-                                   0, /* 0,  */ NULL, NULL);
-} /* _eet_build_ex_descriptor */
-
-static Eet_Test_Ex_Type *
-_eet_test_ex_set(Eet_Test_Ex_Type *res,
-                 int               offset)
-{
-   unsigned int i;
-
-   if (!res)
-     res = malloc(sizeof(Eet_Test_Ex_Type));
-
-   if (!res)
-     return NULL;
-
-   res->c = EET_TEST_CHAR + offset;
-   res->s = EET_TEST_SHORT + offset;
-   res->i = EET_TEST_INT + offset;
-   res->l = EET_TEST_LONG_LONG + offset;
-   res->str = EET_TEST_STRING;
-   res->istr = EET_TEST_STRING;
-   res->f1 = EET_TEST_FLOAT + offset;
-   res->f2 = -(EET_TEST_FLOAT2 + offset);
-   res->f3 = EET_TEST_FLOAT3 + offset;
-   res->f4 = EET_TEST_FLOAT2 + offset;
-   res->d1 = EET_TEST_DOUBLE + offset;
-   res->d2 = -(EET_TEST_DOUBLE2 + offset);
-   res->d3 = EET_TEST_DOUBLE3 + offset;
-   res->d4 = EET_TEST_DOUBLE2 + offset;
-   res->list = NULL;
-   res->hash = NULL;
-   res->ilist = NULL;
-   res->ihash = NULL;
-   res->slist = NULL;
-   res->shash = NULL;
-   for (i = 0; i < sizeof(res->charray) / sizeof(res->charray[0]); ++i)
-     res->charray[i] = NULL;
-
-   res->varray2 = malloc(sizeof (Eet_Test_Basic_Type) * 10);
-   res->varray1 = malloc(sizeof (int) * 5);
-   fail_if(!res->varray1 || !res->varray2);
-   for (i = 0; i < 10; ++i)
-     {
-        _eet_test_basic_set(res->sarray1 + i, i);
-        _eet_test_basic_set(res->varray2 + i, i);
-     }
-   res->varray2_count = 10;
-   for (i = 0; i < 5; ++i)
-     {
-        res->sarray2[i] = i * 42 + 1;
-        res->varray1[i] = i * 42 + 1;
-     }
-   res->varray1_count = 5;
-
-   res->uc = EET_TEST_CHAR + offset;
-   res->us = EET_TEST_SHORT + offset;
-   res->ui = EET_TEST_INT + offset;
-   res->ul = EET_TEST_LONG_LONG + offset;
-
-   return res;
-} /* _eet_test_ex_set */
-
-static int
-_eet_test_ex_check(Eet_Test_Ex_Type *stuff,
-                   int               offset,
-                   Eina_Bool         dumper)
-{
-   double tmp;
-   unsigned int i;
-
-   if (!stuff)
-     return 1;
-
-   if (stuff->c != EET_TEST_CHAR + offset)
-     return 1;
-
-   if (stuff->s != EET_TEST_SHORT + offset)
-     return 1;
-
-   if (stuff->i != EET_TEST_INT + offset)
-     return 1;
-
-   if (stuff->l != EET_TEST_LONG_LONG + offset)
-     return 1;
-
-   if (strcmp(stuff->str, EET_TEST_STRING) != 0)
-     return 1;
-
-   if (strcmp(stuff->istr, EET_TEST_STRING) != 0)
-     return 1;
-
-   tmp = stuff->f1 - (EET_TEST_FLOAT + offset);
-   if (tmp < 0)
-     tmp = -tmp;
-
-   if (tmp > 0.005)
-     return 1;
-
-   tmp = stuff->d1 - (EET_TEST_DOUBLE + offset);
-   if (tmp < 0)
-     tmp = -tmp;
-
-   if (tmp > 0.00005)
-     return 1;
-
-   if (stuff->f2 != -(EET_TEST_FLOAT2 + offset))
-     return 1;
-
-   if (stuff->d2 != -(EET_TEST_DOUBLE2 + offset))
-     return 1;
-
-   if (stuff->f3 != EET_TEST_FLOAT3 + offset)
-     return 1;
-
-   if (stuff->d3 != EET_TEST_DOUBLE3 + offset)
-     return 1;
-
-   if (stuff->f4 != EET_TEST_FLOAT2 + offset)
-     return 1;
-
-   if (stuff->d4 != EET_TEST_DOUBLE2 + offset)
-     return 1;
-
-   if (stuff->uc != EET_TEST_CHAR + offset)
-     return 1;
-
-   if (stuff->us != EET_TEST_SHORT + offset)
-     return 1;
-
-   if (stuff->ui != (unsigned int)EET_TEST_INT + offset)
-     return 1;
-
-   if (stuff->ul != EET_TEST_LONG_LONG + offset)
-     return 1;
-
-   if (stuff->varray1_count != 5)
-     return 1;
-
-   if (stuff->varray2_count != 10)
-     return 1;
-
-   for (i = 0; i < 5; ++i)
-     if (stuff->sarray2[i] != i * 42 + 1 && stuff->varray1[i] != i * 42 + 1)
-       return 1;
-
-   for (i = 0; i < 10; ++i)
-     {
-        _eet_test_basic_check(stuff->sarray1 + i, i, dumper);
-        _eet_test_basic_check(stuff->varray2 + i, i, dumper);
-     }
-
-   return 0;
-} /* _eet_test_ex_check */
-
-static Eina_Bool _dump_call = EINA_FALSE;
-
-static Eina_Bool
-func(EINA_UNUSED const Eina_Hash *hash,
-     const void                 *key,
-     void                       *data,
-     void                       *fdata)
-{
-   int *res = fdata;
-
-   if (strcmp(key, EET_TEST_KEY1) != 0
-       && strcmp(key, EET_TEST_KEY2) != 0)
-     *res = 1;
-
-   if (_eet_test_ex_check(data, 2, _dump_call))
-     *res = 1;
-
-   return EINA_TRUE;
-} /* func */
-
-static Eina_Bool
-func7(EINA_UNUSED const Eina_Hash *hash,
-      EINA_UNUSED const void      *key,
-      void                       *data,
-      void                       *fdata)
-{
-   int *res = fdata;
-   int *val;
-
-   val = data;
-   if (!val)
-     *res = 1;
-
-   if (*val != 7)
-     *res = 1;
-
-   return EINA_TRUE;
-} /* func7 */
-
-START_TEST(eet_test_data_type_encoding_decoding)
-{
-   Eet_Data_Descriptor *edd;
-   Eet_Test_Ex_Type *result;
-   void *transfert;
-   Eet_Data_Descriptor_Class eddc;
-   Eet_Test_Ex_Type etbt;
-   int size;
-   int test;
-
-   eet_init();
-
-   _eet_test_ex_set(&etbt, 0);
-   etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
-   etbt.hash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
-   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
-   etbt.ihash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
-   etbt.slist = eina_list_prepend(NULL, "test");
-   etbt.shash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
-   memset(&etbt.charray, 0, sizeof(etbt.charray));
-   etbt.charray[0] = "test";
-   etbt.charray[5] = "plouf";
-
-   eet_test_setup_eddc(&eddc);
-   eddc.name = "Eet_Test_Ex_Type";
-   eddc.size = sizeof(Eet_Test_Ex_Type);
-
-   edd = eet_data_descriptor_file_new(&eddc);
-   fail_if(!edd);
-
-   _eet_build_ex_descriptor(edd, EINA_FALSE);
-
-   transfert = eet_data_descriptor_encode(edd, &etbt, &size);
-   fail_if(!transfert || size <= 0);
-
-   result = eet_data_descriptor_decode(edd, transfert, size);
-   fail_if(!result);
-
-   fail_if(_eet_test_ex_check(result, 0, EINA_FALSE) != 0);
-   fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1, EINA_FALSE) != 0);
-   fail_if(eina_list_data_get(result->ilist) == NULL);
-   fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
-   fail_if(eina_list_data_get(result->slist) == NULL);
-   fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
-   fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
-   fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
-   fail_if(strcmp(result->charray[0], "test") != 0);
-   fail_if(strcmp(result->charray[5], "plouf") != 0);
-
-   test = 0;
-   if (result->hash)
-     eina_hash_foreach(result->hash, func, &test);
-
-   fail_if(test != 0);
-   if (result->ihash)
-     eina_hash_foreach(result->ihash, func7, &test);
-
-   fail_if(test != 0);
-
-   eet_shutdown();
-}
-END_TEST
-
-static void
-append_string(void       *data,
-              const char *str)
-{
-   char **string = data;
-   int length;
-
-   if (!data)
-     return;
-
-   length = *string ? strlen(*string) : 0;
-   *string = realloc(*string, strlen(str) + length + 1);
-
-   fail_unless(*string); // Fail test case if realloc fails.
-
-   memcpy((*string) + length, str, strlen(str) + 1);
-} /* append_string */
-
-START_TEST(eet_test_data_type_dump_undump)
-{
-   Eet_Data_Descriptor *edd;
-   Eet_Test_Ex_Type *result;
-   Eet_Data_Descriptor_Class eddc;
-   Eet_Test_Ex_Type etbt;
-   char *transfert1;
-   char *transfert2;
-   char *string1;
-   char *string2;
-   int size1;
-   int size2;
-   int test;
-
-   eet_init();
-
-   _eet_test_ex_set(&etbt, 0);
-   etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
-   etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
-   etbt.hash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
-   etbt.hash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.hash, EET_TEST_KEY2, _eet_test_ex_set(NULL, 2));
-   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
-   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
-   etbt.ihash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
-   etbt.ihash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
-   etbt.slist = eina_list_prepend(NULL, "test");
-   etbt.shash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
-   memset(&etbt.charray, 0, sizeof(etbt.charray));
-   etbt.charray[0] = "test";
-
-   eet_test_setup_eddc(&eddc);
-   eddc.name = "Eet_Test_Ex_Type";
-   eddc.size = sizeof(Eet_Test_Ex_Type);
-
-   edd = eet_data_descriptor_file_new(&eddc);
-   fail_if(!edd);
-
-   _eet_build_ex_descriptor(edd, EINA_FALSE);
-
-   transfert1 = eet_data_descriptor_encode(edd, &etbt, &size1);
-   fail_if(!transfert1 || size1 <= 0);
-
-   string1 = NULL;
-   eet_data_text_dump(transfert1, size1, append_string, &string1);
-   fail_if(!string1);
-
-   transfert2 = eet_data_text_undump(string1, string1 ? strlen(
-                                       string1) : 0, &size2);
-   fail_if(!transfert2 && size2 <= 0);
-
-   string2 = NULL;
-   eet_data_text_dump(transfert2, size2, append_string, &string2);
-   fail_if(!string2);
-
-   fail_if(strlen(string2) != strlen(string1));
-
-   result = eet_data_descriptor_decode(edd, transfert2, size2);
-   fail_if(!result);
-
-   fail_if(_eet_test_ex_check(result, 0, EINA_TRUE) != 0);
-   fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1, EINA_TRUE) != 0);
-   fail_if(eina_list_data_get(result->ilist) == NULL);
-   fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
-   fail_if(eina_list_data_get(result->slist) == NULL);
-   fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
-   fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
-   fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
-   fail_if(strcmp(result->charray[0], "test") != 0);
-
-   test = 0;
-   _dump_call = EINA_TRUE;
-   if (result->hash)
-     eina_hash_foreach(result->hash, func, &test);
-   _dump_call = EINA_FALSE;
-
-   fail_if(test != 0);
-   if (result->ihash)
-     eina_hash_foreach(result->ihash, func7, &test);
-
-   fail_if(test != 0);
-
-   eet_shutdown();
-}
-END_TEST
-
-static void
-append_strbuf_string(void *data, const char *string)
-{
-   Eina_Strbuf *strbuf = data;
-   eina_strbuf_append(strbuf, string);
-}
-
-START_TEST(eet_test_data_type_escape_dump_undump)
-{
-   void *blob;
-   int blob_len;
-   int ret = 0;
-   const char *outputstr;
-   Eina_Strbuf *strbuf;
-   const char inputstr[] = ""
-     "group \"\\\\My\\\"Group\\\\\" struct {\n"
-     "    value \"\\\\My\\\\BackSlash\\\\\" string: \"\\\\\";\n"
-     "    value \"\\\\My\\\\DoubleQuote\\\\\" string: \"\\\"\";\n"
-     "    value \"\\\\My\\\\NewLine\\\\\" string: \"\\n\";\n"
-     "}\n";
-
-   eet_init();
-
-   blob = eet_data_text_undump(inputstr, strlen(inputstr), &blob_len);
-   fail_if(!blob);
-
-   strbuf = eina_strbuf_new();
-   ret = eet_data_text_dump(blob, blob_len, append_strbuf_string, strbuf);
-   ck_assert_int_eq(ret, 1);
-
-   outputstr = eina_strbuf_string_get(strbuf);
-   fail_if(!outputstr);
-   ck_assert_str_eq(inputstr, outputstr);
-
-   eina_strbuf_free(strbuf);
-   free(blob);
-
-   eet_shutdown();
-}
-END_TEST
-START_TEST(eet_file_simple_write)
-{
-   const char *buffer = "Here is a string of data to save !";
-   Eet_File *ef;
-   char *test;
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
-   int size;
-   int tmpfd;
-
-   eet_init();
-
-   fail_if(-1 == (tmpfd = mkstemp(file)));
-   fail_if(!!close(tmpfd));
-
-   fail_if(eet_mode_get(NULL) != EET_FILE_MODE_INVALID);
-
-   ef = eet_open(file, EET_FILE_MODE_WRITE);
-   fail_if(!ef);
-
-   fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 1));
-   fail_if(!eet_alias(ef, "keys/alias", "keys/tests", 0));
-   fail_if(!eet_alias(ef, "keys/alias2", "keys/alias", 1));
-
-   fail_if(eet_mode_get(ef) != EET_FILE_MODE_WRITE);
-
-   fail_if(eet_list(ef, "*", &size) != NULL);
-   fail_if(eet_num_entries(ef) != -1);
-
-   eet_close(ef);
-
-   /* Test read of simple file */
-   ef = eet_open(file, EET_FILE_MODE_READ);
-   fail_if(!ef);
-
-   test = eet_read(ef, "keys/tests", &size);
-   fail_if(!test);
-   fail_if(size != (int)strlen(buffer) + 1);
-
-   fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
-
-   test = eet_read(ef, "keys/alias2", &size);
-   fail_if(!test);
-   fail_if(size != (int)strlen(buffer) + 1);
-
-   fail_if(eet_read_direct(ef, "key/alias2", &size));
-
-   fail_if(eet_mode_get(ef) != EET_FILE_MODE_READ);
-   fail_if(eet_num_entries(ef) != 3);
-
-   eet_close(ef);
-
-   /* Test eet cache system */
-   ef = eet_open(file, EET_FILE_MODE_READ);
-   fail_if(!ef);
-
-   test = eet_read(ef, "keys/tests", &size);
-   fail_if(!test);
-   fail_if(size != (int)strlen(buffer) + 1);
-
-   fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
-
-   eet_close(ef);
-
-   fail_if(unlink(file) != 0);
-
-   eet_shutdown();
-} /* START_TEST */
-
-END_TEST
-START_TEST(eet_file_data_test)
-{
-   Eet_Data_Descriptor *edd;
-   Eet_Test_Ex_Type *result;
-   Eet_Dictionary *ed;
-   Eet_File *ef;
-   char **list;
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
-   Eet_Data_Descriptor_Class eddc;
-   Eet_Test_Ex_Type etbt;
-   int size;
-   int test;
-   int tmpfd;
-
-   eet_init();
-
-   _eet_test_ex_set(&etbt, 0);
-   etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
-   etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
-   etbt.hash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
-   etbt.hash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.hash, EET_TEST_KEY2, _eet_test_ex_set(NULL, 2));
-   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
-   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
-   etbt.ihash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
-   etbt.ihash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
-   etbt.slist = eina_list_prepend(NULL, "test");
-   etbt.shash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
-   memset(&etbt.charray, 0, sizeof(etbt.charray));
-   etbt.charray[0] = "test";
-
-   eet_test_setup_eddc(&eddc);
-   eddc.name = "Eet_Test_Ex_Type";
-   eddc.size = sizeof(Eet_Test_Ex_Type);
-
-   edd = eet_data_descriptor_file_new(&eddc);
-   fail_if(!edd);
-
-   _eet_build_ex_descriptor(edd, EINA_FALSE);
-
-   fail_if(-1 == (tmpfd = mkstemp(file)));
-   fail_if(!!close(tmpfd));
-
-   /* Insert an error in etbt. */
-   etbt.i = 0;
-
-   /* Save the encoded data in a file. */
-   ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
-   fail_if(!ef);
-
-   fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
-
-   result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
-   fail_if(!result);
-
-   fail_if(eet_mode_get(ef) != EET_FILE_MODE_READ_WRITE);
-
-   /* Test string space. */
-   ed = eet_dictionary_get(ef);
-
-   fail_if(!eet_dictionary_string_check(ed, result->str));
-   fail_if(eet_dictionary_string_check(ed, result->istr));
-
-   eet_close(ef);
-
-   /* Attempt to replace etbt by the correct one. */
-   etbt.i = EET_TEST_INT;
-
-   ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
-   fail_if(!ef);
-
-   fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
-
-   result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
-   fail_if(!result);
-
-   /* Test the resulting data. */
-   fail_if(_eet_test_ex_check(result, 0, EINA_FALSE) != 0);
-
-   eet_close(ef);
-
-   /* Read back the data. */
-   ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
-   fail_if(!ef);
-
-   fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY2, &etbt, 0));
-
-   result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
-   fail_if(!result);
-
-   /* Test string space. */
-   ed = eet_dictionary_get(ef);
-   fail_if(!ed);
-
-   fail_if(!eet_dictionary_string_check(ed, result->str));
-   fail_if(eet_dictionary_string_check(ed, result->istr));
-
-   /* Test the resulting data. */
-   fail_if(_eet_test_ex_check(result, 0, EINA_FALSE) != 0);
-   fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1, EINA_FALSE) != 0);
-   fail_if(eina_list_data_get(result->ilist) == NULL);
-   fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
-   fail_if(eina_list_data_get(result->slist) == NULL);
-   fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
-   fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
-   fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
-   fail_if(strcmp(result->charray[0], "test") != 0);
-
-   test = 0;
-   if (result->hash)
-     eina_hash_foreach(result->hash, func, &test);
-
-   fail_if(test != 0);
-   if (result->ihash)
-     eina_hash_foreach(result->ihash, func7, &test);
-
-   fail_if(test != 0);
-
-   list = eet_list(ef, "keys/*", &size);
-   fail_if(eet_num_entries(ef) != 2);
-   fail_if(size != 2);
-   fail_if(!(strcmp(list[0],
-                    EET_TEST_FILE_KEY1) == 0 &&
-             strcmp(list[1], EET_TEST_FILE_KEY2) == 0)
-           && !(strcmp(list[0],
-                       EET_TEST_FILE_KEY2) == 0 &&
-                strcmp(list[1], EET_TEST_FILE_KEY1) == 0));
-   free(list);
-
-   fail_if(eet_delete(ef, NULL) != 0);
-   fail_if(eet_delete(NULL, EET_TEST_FILE_KEY1) != 0);
-   fail_if(eet_delete(ef, EET_TEST_FILE_KEY1) == 0);
-
-   list = eet_list(ef, "keys/*", &size);
-   fail_if(size != 1);
-   fail_if(eet_num_entries(ef) != 1);
-
-   /* Test some more wrong case */
-   fail_if(eet_data_read(ef, edd, "plop") != NULL);
-   fail_if(eet_data_read(ef, edd, EET_TEST_FILE_KEY1) != NULL);
-
-   /* Reinsert and reread data */
-   fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
-   fail_if(eet_data_read(ef, edd, EET_TEST_FILE_KEY1) == NULL);
-   fail_if(eet_read_direct(ef, EET_TEST_FILE_KEY1, &size) == NULL);
-
-   eet_close(ef);
-
-   fail_if(unlink(file) != 0);
-
-   eet_shutdown();
-} /* START_TEST */
-
-END_TEST
-START_TEST(eet_file_data_dump_test)
-{
-   Eet_Data_Descriptor *edd;
-   Eet_Test_Ex_Type *result;
-   Eet_Data_Descriptor_Class eddc;
-   Eet_Test_Ex_Type etbt;
-   Eet_File *ef;
-   char *string1;
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
-   int test;
-   int tmpfd;
-
-   eet_init();
-
-   _eet_test_ex_set(&etbt, 0);
-   etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
-   etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
-   etbt.hash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
-   eina_hash_add(etbt.hash, EET_TEST_KEY2, _eet_test_ex_set(NULL, 2));
-   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
-   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
-   etbt.ihash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
-   eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
-   etbt.slist = eina_list_prepend(NULL, "test");
-   etbt.shash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
-   memset(&etbt.charray, 0, sizeof(etbt.charray));
-   etbt.charray[0] = "test";
-
-   eet_eina_file_data_descriptor_class_set(&eddc, sizeof (eddc),
-                                           "Eet_Test_Ex_Type",
-                                           sizeof(Eet_Test_Ex_Type));
-
-   edd = eet_data_descriptor_file_new(&eddc);
-   fail_if(!edd);
-
-   _eet_build_ex_descriptor(edd, EINA_FALSE);
-
-   fail_if(-1 == (tmpfd = mkstemp(file)));
-   fail_if(!!close(tmpfd));
-
-   /* Save the encoded data in a file. */
-   ef = eet_open(file, EET_FILE_MODE_WRITE);
-   fail_if(!ef);
-
-   fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
-
-   eet_close(ef);
-
-   /* Use dump/undump in the middle */
-   ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
-   fail_if(!ef);
-
-   string1 = NULL;
-   fail_if(eet_data_dump(ef, EET_TEST_FILE_KEY1, append_string, &string1) != 1);
-   fail_if(eet_delete(ef, EET_TEST_FILE_KEY1) == 0);
-   fail_if(!eet_data_undump(ef, EET_TEST_FILE_KEY1, string1, strlen(string1), 1));
-
-   eet_close(ef);
-
-   /* Test the correctness of the reinsertion. */
-   ef = eet_open(file, EET_FILE_MODE_READ);
-   fail_if(!ef);
-
-   result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
-   fail_if(!result);
-
-   eet_close(ef);
-
-   /* Test the resulting data. */
-   fail_if(_eet_test_ex_check(result, 0, EINA_TRUE) != 0);
-   fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1, EINA_TRUE) != 0);
-   fail_if(eina_list_data_get(result->ilist) == NULL);
-   fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
-   fail_if(eina_list_data_get(result->slist) == NULL);
-   fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
-   fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
-   fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
-   fail_if(strcmp(result->charray[0], "test") != 0);
-
-   test = 0;
-   _dump_call = EINA_TRUE;
-   if (result->hash)
-     eina_hash_foreach(result->hash, func, &test);
-   _dump_call = EINA_FALSE;
-
-   fail_if(test != 0);
-   if (result->ihash)
-     eina_hash_foreach(result->ihash, func7, &test);
-
-   fail_if(test != 0);
-
-   fail_if(unlink(file) != 0);
-
-   eet_shutdown();
-} /* START_TEST */
-
-END_TEST
-START_TEST(eet_image)
-{
-   Eet_File *ef;
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
-   unsigned int *data;
-   int compress;
-   int quality;
-   int result;
-   Eet_Image_Encoding lossy;
-   int alpha;
-   unsigned int w;
-   unsigned int h;
-   int tmpfd;
-
-   eet_init();
-
-   fail_if(-1 == (tmpfd = mkstemp(file)));
-   fail_if(!!close(tmpfd));
-
-   /* Save the encoded data in a file. */
-   ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
-   fail_if(!ef);
-
-   result = eet_data_image_write(ef,
-                                 EET_TEST_FILE_IMAGE "0",
-                                 test_noalpha.color,
-                                 test_noalpha.w,
-                                 test_noalpha.h,
-                                 test_noalpha.alpha,
-                                 0,
-                                 100,
-                                 0);
-   fail_if(result == 0);
-
-   result = eet_data_image_write(ef,
-                                 EET_TEST_FILE_IMAGE "1",
-                                 test_noalpha.color,
-                                 test_noalpha.w,
-                                 test_noalpha.h,
-                                 test_noalpha.alpha,
-                                 5,
-                                 100,
-                                 0);
-   fail_if(result == 0);
-
-   result = eet_data_image_write(ef,
-                                 EET_TEST_FILE_IMAGE "2",
-                                 test_noalpha.color,
-                                 test_noalpha.w,
-                                 test_noalpha.h,
-                                 test_noalpha.alpha,
-                                 9,
-                                 100,
-                                 0);
-   fail_if(result == 0);
-
-   result = eet_data_image_write(ef,
-                                 EET_TEST_FILE_IMAGE "3",
-                                 test_noalpha.color,
-                                 test_noalpha.w,
-                                 test_noalpha.h,
-                                 test_noalpha.alpha,
-                                 0,
-                                 100,
-                                 1);
-   fail_if(result == 0);
-
-   result = eet_data_image_write(ef,
-                                 EET_TEST_FILE_IMAGE "4",
-                                 test_noalpha.color,
-                                 test_noalpha.w,
-                                 test_noalpha.h,
-                                 test_noalpha.alpha,
-                                 0,
-                                 60,
-                                 1);
-   fail_if(result == 0);
-
-   result = eet_data_image_write(ef,
-                                 EET_TEST_FILE_IMAGE "5",
-                                 test_noalpha.color,
-                                 test_noalpha.w,
-                                 test_noalpha.h,
-                                 test_noalpha.alpha,
-                                 0,
-                                 10,
-                                 1);
-   fail_if(result == 0);
-
-   result = eet_data_image_write(ef,
-                                 EET_TEST_FILE_IMAGE "6",
-                                 test_noalpha.color,
-                                 test_noalpha.w,
-                                 test_noalpha.h,
-                                 test_noalpha.alpha,
-                                 0,
-                                 0,
-                                 1);
-   fail_if(result == 0);
-
-   result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "7", test_alpha.color,
-                                 test_alpha.w, test_alpha.h, test_alpha.alpha,
-                                 9, 100, 0);
-   fail_if(result == 0);
-
-   result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "8", test_alpha.color,
-                                 test_alpha.w, test_alpha.h, test_alpha.alpha,
-                                 0, 80, 1);
-   fail_if(result == 0);
-
-   result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "9", test_alpha.color,
-                                 test_alpha.w, test_alpha.h, test_alpha.alpha,
-                                 0, 100, 1);
-   fail_if(result == 0);
-
-   data = eet_data_image_read(ef,
-                              EET_TEST_FILE_IMAGE "2",
-                              &w,
-                              &h,
-                              &alpha,
-                              &compress,
-                              &quality,
-                              &lossy);
-   fail_if(data == NULL);
-   fail_if(w != test_noalpha.w);
-   fail_if(h != test_noalpha.h);
-   fail_if(alpha != test_noalpha.alpha);
-   fail_if(compress != 9);
-   fail_if(lossy != 0);
-   fail_if(data[0] != test_noalpha.color[0]);
-   free(data);
-
-   result = eet_data_image_header_read(ef,
-                                       EET_TEST_FILE_IMAGE "2",
-                                       &w,
-                                       &h,
-                                       &alpha,
-                                       &compress,
-                                       &quality,
-                                       &lossy);
-   fail_if(result == 0);
-   fail_if(w != test_noalpha.w);
-   fail_if(h != test_noalpha.h);
-   fail_if(alpha != test_noalpha.alpha);
-   fail_if(compress != 9);
-   fail_if(lossy != 0);
-
-   eet_close(ef);
-
-   /* Test read of image */
-   ef = eet_open(file, EET_FILE_MODE_READ);
-   fail_if(!ef);
-
-   result = eet_data_image_header_read(ef,
-                                       EET_TEST_FILE_IMAGE "0",
-                                       &w,
-                                       &h,
-                                       &alpha,
-                                       &compress,
-                                       &quality,
-                                       &lossy);
-   fail_if(result == 0);
-   fail_if(w != test_noalpha.w);
-   fail_if(h != test_noalpha.h);
-   fail_if(alpha != test_noalpha.alpha);
-   fail_if(compress != 0);
-   fail_if(lossy != 0);
-
-   data = malloc(w * h * 4);
-   fail_if(data == NULL);
-   result = eet_data_image_read_to_surface(ef,
-                                           EET_TEST_FILE_IMAGE "0",
-                                           4,
-                                           4,
-                                           data,
-                                           2,
-                                           2,
-                                           w * 4,
-                                           &alpha,
-                                           &compress,
-                                           &quality,
-                                           &lossy);
-   fail_if(result != 1);
-   fail_if(alpha != test_noalpha.alpha);
-   fail_if(compress != 0);
-   fail_if(quality != 100);
-   fail_if(lossy != 0);
-   fail_if(data[0] != test_noalpha.color[4 + 4 * w]);
-   free(data);
-
-   data = malloc(w * h * 4);
-   fail_if(data == NULL);
-   result = eet_data_image_read_to_surface(ef,
-                                           EET_TEST_FILE_IMAGE "0",
-                                           0,
-                                           0,
-                                           data,
-                                           w,
-                                           h,
-                                           w * 4,
-                                           &alpha,
-                                           &compress,
-                                           &quality,
-                                           &lossy);
-   fail_if(result != 1);
-   fail_if(alpha != test_noalpha.alpha);
-   fail_if(compress != 0);
-   fail_if(quality != 100);
-   fail_if(lossy != 0);
-   fail_if(data[0] != test_noalpha.color[0]);
-   free(data);
-
-   data = eet_data_image_read(ef,
-                              EET_TEST_FILE_IMAGE "1",
-                              &w,
-                              &h,
-                              &alpha,
-                              &compress,
-                              &quality,
-                              &lossy);
-   fail_if(data == NULL);
-   fail_if(w != test_noalpha.w);
-   fail_if(h != test_noalpha.h);
-   fail_if(alpha != test_noalpha.alpha);
-   fail_if(compress != 5);
-   fail_if(quality != 100);
-   fail_if(lossy != 0);
-   fail_if(data[0] != test_noalpha.color[0]);
-   free(data);
-
-   data = eet_data_image_read(ef,
-                              EET_TEST_FILE_IMAGE "2",
-                              &w,
-                              &h,
-                              &alpha,
-                              &compress,
-                              &quality,
-                              &lossy);
-   fail_if(data == NULL);
-   fail_if(w != test_noalpha.w);
-   fail_if(h != test_noalpha.h);
-   fail_if(alpha != test_noalpha.alpha);
-   fail_if(compress != 9);
-   fail_if(lossy != 0);
-   fail_if(data[0] != test_noalpha.color[0]);
-   free(data);
-
-   data = eet_data_image_read(ef,
-                              EET_TEST_FILE_IMAGE "3",
-                              &w,
-                              &h,
-                              &alpha,
-                              &compress,
-                              &quality,
-                              &lossy);
-   fail_if(data == NULL);
-   fail_if(w != test_noalpha.w);
-   fail_if(h != test_noalpha.h);
-   fail_if(alpha != test_noalpha.alpha);
-   fail_if(lossy != 1);
-   free(data);
-
-   data = eet_data_image_read(ef,
-                              EET_TEST_FILE_IMAGE "5",
-                              &w,
-                              &h,
-                              &alpha,
-                              &compress,
-                              &quality,
-                              &lossy);
-   fail_if(data == NULL);
-   fail_if(w != test_noalpha.w);
-   fail_if(h != test_noalpha.h);
-   fail_if(alpha != test_noalpha.alpha);
-   fail_if(lossy != 1);
-   free(data);
-
-   data = eet_data_image_read(ef,
-                              EET_TEST_FILE_IMAGE "6",
-                              &w,
-                              &h,
-                              &alpha,
-                              &compress,
-                              &quality,
-                              &lossy);
-   fail_if(data == NULL);
-   fail_if(w != test_noalpha.w);
-   fail_if(h != test_noalpha.h);
-   fail_if(alpha != test_noalpha.alpha);
-   fail_if(lossy != 1);
-   free(data);
-
-   result = eet_data_image_header_read(ef,
-                                       EET_TEST_FILE_IMAGE "7",
-                                       &w,
-                                       &h,
-                                       &alpha,
-                                       &compress,
-                                       &quality,
-                                       &lossy);
-   fail_if(result == 0);
-   fail_if(w != test_alpha.w);
-   fail_if(h != test_alpha.h);
-   fail_if(alpha != test_alpha.alpha);
-   fail_if(compress != 9);
-   fail_if(lossy != 0);
-
-   data = eet_data_image_read(ef,
-                              EET_TEST_FILE_IMAGE "7",
-                              &w,
-                              &h,
-                              &alpha,
-                              &compress,
-                              &quality,
-                              &lossy);
-   fail_if(data == NULL);
-   fail_if(w != test_alpha.w);
-   fail_if(h != test_alpha.h);
-   fail_if(alpha != test_alpha.alpha);
-   fail_if(compress != 9);
-   fail_if(lossy != 0);
-   fail_if(data[0] != test_alpha.color[0]);
-   free(data);
-
-   result = eet_data_image_header_read(ef,
-                                       EET_TEST_FILE_IMAGE "9",
-                                       &w,
-                                       &h,
-                                       &alpha,
-                                       &compress,
-                                       &quality,
-                                       &lossy);
-   fail_if(result == 0);
-   fail_if(w != test_alpha.w);
-   fail_if(h != test_alpha.h);
-   fail_if(alpha != test_alpha.alpha);
-   fail_if(lossy != 1);
-
-   data = eet_data_image_read(ef,
-                              EET_TEST_FILE_IMAGE "9",
-                              &w,
-                              &h,
-                              &alpha,
-                              &compress,
-                              &quality,
-                              &lossy);
-   fail_if(data == NULL);
-   fail_if(w != test_alpha.w);
-   fail_if(h != test_alpha.h);
-   fail_if(alpha != test_alpha.alpha);
-   fail_if(lossy != 1);
-   free(data);
-
-   eet_close(ef);
-
-   fail_if(unlink(file) != 0);
-
-   eet_shutdown();
-} /* START_TEST */
-
-END_TEST
-
-#define IM0 0x00112233
-#define IM1 0x44556677
-#define IM2 0x8899aabb
-#define IM3 0xccddeeff
-
-START_TEST(eet_small_image)
-{
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
-   unsigned int image[4];
-   unsigned int *data;
-   Eet_File *ef;
-   unsigned int w;
-   unsigned int h;
-   int alpha;
-   int compression;
-   int quality;
-   Eet_Image_Encoding lossy;
-   int result;
-   int tmpfd;
-
-   image[0] = IM0;
-   image[1] = IM1;
-   image[2] = IM2;
-   image[3] = IM3;
-
-   eet_init();
-
-   fail_if(-1 == (tmpfd = mkstemp(file)));
-   fail_if(!!close(tmpfd));
-
-   ef = eet_open(file, EET_FILE_MODE_WRITE);
-   fail_if(!ef);
-
-   result = eet_data_image_write(ef, "/images/test", image, 2, 2, 1, 9, 100, 0);
-   fail_if(result == 0);
-
-   eet_close(ef);
-
-   ef = eet_open(file, EET_FILE_MODE_READ);
-   fail_if(!ef);
-
-   data = (unsigned int *)eet_data_image_read(ef,
-                                              "/images/test",
-                                              &w,
-                                              &h,
-                                              &alpha,
-                                              &compression,
-                                              &quality,
-                                              &lossy);
-   fail_if(data == NULL);
-
-   eet_close(ef);
-
-   fail_if(unlink(file) != 0);
-
-   fail_if(data[0] != IM0);
-   fail_if(data[1] != IM1);
-   fail_if(data[2] != IM2);
-   fail_if(data[3] != IM3);
-
-   free(data);
-
-   eet_shutdown();
-} /* START_TEST */
-
-END_TEST
-START_TEST(eet_identity_simple)
-{
-   const char *buffer = "Here is a string of data to save !";
-   const void *tmp;
-   Eet_File *ef;
-   Eet_Key *k;
-   FILE *noread;
-   char *test;
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
-   int size;
-   int fd;
-
-   eet_init();
-
-   fail_if(-1 == (fd = mkstemp(file)));
-   fail_if(!!close(fd));
-   fail_if(!(noread = fopen("/dev/null", "wb")));
-
-   /* Sign an eet file. */
-   ef = eet_open(file, EET_FILE_MODE_WRITE);
-   fail_if(!ef);
-
-   fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 0));
-
-   k = eet_identity_open(_cert_pem, _key_pem, NULL);
-   fail_if(!k);
-
-   fail_if(eet_identity_set(ef, k) != EET_ERROR_NONE);
-   eet_identity_print(k, noread);
-
-   eet_close(ef);
-
-   /* Open a signed file. */
-   ef = eet_open(file, EET_FILE_MODE_READ);
-   fail_if(!ef);
-
-   /* check that the certificates match */
-   fail_if(!eet_identity_verify(ef, _cert_pem));
-
-   test = eet_read(ef, "keys/tests", &size);
-   fail_if(!test);
-   fail_if(size != (int)strlen(buffer) + 1);
-
-   fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
-
-   tmp = eet_identity_x509(ef, &size);
-   fail_if(tmp == NULL);
-
-   eet_identity_certificate_print(tmp, size, noread);
-
-   eet_close(ef);
-
-   /* As we are changing file contain in less than 1s, this could get unnoticed
-      by eet cache system. */
-   eet_clearcache();
-
-   /* Corrupting the file. */
-   fd = open(file, O_WRONLY | O_BINARY);
-   fail_if(fd < 0);
-
-   fail_if(lseek(fd, 200, SEEK_SET) != 200);
-   fail_if(write(fd, "42", 2) != 2);
-   fail_if(lseek(fd, 50, SEEK_SET) != 50);
-   fail_if(write(fd, "42", 2) != 2);
-   fail_if(lseek(fd, 88, SEEK_SET) != 88);
-   fail_if(write(fd, "42", 2) != 2);
-
-   close(fd);
-
-   /* Attempt to open a modified file. */
-   ef = eet_open(file, EET_FILE_MODE_READ);
-   fail_if(ef);
-
-   fail_if(unlink(file) != 0);
-
-   eet_shutdown();
-} /* START_TEST */
-
-END_TEST
-START_TEST(eet_identity_open_simple)
-{
-   Eet_Key *k = NULL;
-
-   eet_init();
-
-   k = eet_identity_open(_cert_pem, _key_pem, NULL);
-   fail_if(!k);
-
-   if (k)
-     eet_identity_close(k);
-
-   eet_shutdown();
-} /* START_TEST */
-
-END_TEST
-START_TEST(eet_identity_open_pkcs8)
-{
-   Eet_Key *k = NULL;
-
-   eet_init();
-
-   k = eet_identity_open(_cert_pem, _key_enc_none_pem, NULL);
-   fail_if(!k);
-
-   if (k)
-     eet_identity_close(k);
-
-   eet_shutdown();
-} /* START_TEST */
-
-END_TEST
-
-static int
-pass_get(char            *pass,
-         int              size,
-         EINA_UNUSED int   rwflags,
-         EINA_UNUSED void *u)
-{
-   memset(pass, 0, size);
-
-   if ((int)strlen("password") > size)
-     return 0;
-
-   snprintf(pass, size, "%s", "password");
-   return strlen(pass);
-} /* pass_get */
-
-static int
-badpass_get(char            *pass,
-            int              size,
-            EINA_UNUSED int   rwflags,
-            EINA_UNUSED void *u)
-{
-   memset(pass, 0, size);
-
-   if ((int)strlen("bad password") > size)
-     return 0;
-
-   snprintf(pass, size, "%s", "bad password");
-   return strlen(pass);
-} /* badpass_get */
-
-START_TEST(eet_identity_open_pkcs8_enc)
-{
-   Eet_Key *k = NULL;
-
-   eet_init();
-
-   k = eet_identity_open(_cert_pem, _key_enc_pem, NULL);
-   fail_if(k);
-
-   if (k)
-     eet_identity_close(k);
-
-   k = eet_identity_open(_cert_pem, _key_enc_pem, &badpass_get);
-   fail_if(k);
-
-   if (k)
-     eet_identity_close(k);
-
-   k = eet_identity_open(_cert_pem, _key_enc_pem, &pass_get);
-   fail_if(!k);
-
-   if (k)
-     eet_identity_close(k);
-
-   eet_shutdown();
-}
-END_TEST
-START_TEST(eet_cipher_decipher_simple)
-{
-   const char *buffer = "Here is a string of data to save !";
-   const char *key = "This is a crypto key";
-   const char *key_bad = "This is another crypto key";
-   Eet_File *ef;
-   char *test;
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
-   int size;
-   int tmpfd;
-
-   eet_init();
-
-   fail_if(-1 == (tmpfd = mkstemp(file)));
-   fail_if(!!close(tmpfd));
-
-   /* Crypt an eet file. */
-   ef = eet_open(file, EET_FILE_MODE_WRITE);
-   fail_if(!ef);
-
-   fail_if(!eet_write_cipher(ef, "keys/tests", buffer, strlen(buffer) + 1, 0,
-                             key));
-
-   eet_close(ef);
-
-   /* Decrypt an eet file. */
-   ef = eet_open(file, EET_FILE_MODE_READ);
-   fail_if(!ef);
-
-   test = eet_read_cipher(ef, "keys/tests", &size, key);
-   fail_if(!test);
-   fail_if(size != (int)strlen(buffer) + 1);
-
-   fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
-
-   eet_close(ef);
-
-   /* Decrypt an eet file. */
-   ef = eet_open(file, EET_FILE_MODE_READ);
-   fail_if(!ef);
-
-   test = eet_read_cipher(ef, "keys/tests", &size, key_bad);
-
-   if (size == (int)strlen(buffer) + 1)
-     fail_if(memcmp(test, buffer, strlen(buffer) + 1) == 0);
-
-   eet_close(ef);
-
-   fail_if(unlink(file) != 0);
-
-   eet_shutdown();
-} /* START_TEST */
-
-END_TEST
-
-static Eina_Bool open_worker_stop;
-static Eina_Condition open_worker_cond;
-static Eina_Lock open_worker_mutex;
-
-static void *
-open_close_worker(void *path, Eina_Thread tid EINA_UNUSED)
-{
-   static Eina_Bool first = EINA_TRUE;
-
-   while (!open_worker_stop)
-     {
-        Eet_File *ef = eet_open((char const *)path, EET_FILE_MODE_READ);
-        if (ef == NULL)
-          return "eet_open() failed";
-        else
-          {
-             Eet_Error err_code = eet_close(ef);
-             if (err_code != EET_ERROR_NONE)
-               return "eet_close() failed";
-          }
-
-        if (first)
-          {
-             eina_lock_take(&open_worker_mutex);
-             eina_condition_broadcast(&open_worker_cond);
-             eina_lock_release(&open_worker_mutex);
-             first = EINA_FALSE;
-          }
-     }
-
-   return NULL;
-}
-
-START_TEST(eet_cache_concurrency)
-{
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
-   const char *buffer = "test data";
-   Eet_File *ef;
-   void *thread_ret;
-   unsigned int n;
-   Eina_Thread thread;
-   Eina_Bool r;
-   int tmpfd;
-
-   eet_init();
-   eina_threads_init();
-
-   eina_lock_new(&open_worker_mutex);
-   eina_condition_new(&open_worker_cond, &open_worker_mutex);
-
-   /* create a file to test with */
-   fail_if(-1 == (tmpfd = mkstemp(file)));
-   fail_if(!!close(tmpfd));
-   ef = eet_open(file, EET_FILE_MODE_WRITE);
-   fail_if(!ef);
-   fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 0));
-
-   eina_lock_take(&open_worker_mutex);
-   /* start a thread that repeatedly opens and closes a file */
-   open_worker_stop = 0;
-   r = eina_thread_create(&thread, EINA_THREAD_NORMAL, -1, open_close_worker, file);
-   fail_unless(r);
-
-   eina_condition_wait(&open_worker_cond);
-   eina_lock_release(&open_worker_mutex);
-
-   /* clear the cache repeatedly in this thread */
-   for (n = 0; n < 20000; ++n)
-     {
-        eet_clearcache();
-     }
-
-   /* join the other thread, and fail if it returned an error message */
-   open_worker_stop = 1;
-   thread_ret = eina_thread_join(thread);
-   fail_unless(thread_ret == NULL, (char const *)thread_ret);
-
-   eet_close(ef);
-
-   fail_if(unlink(file) != 0);
-
-   eina_threads_shutdown();
-   eet_shutdown();
-}
-END_TEST
-
-typedef struct _Eet_Connection_Data Eet_Connection_Data;
-struct _Eet_Connection_Data
-{
-   Eet_Connection      *conn;
-   Eet_Data_Descriptor *edd;
-   Eina_Bool            test;
-};
-
-static Eina_Bool
-_eet_connection_read(const void *eet_data,
-                     size_t      size,
-                     void       *user_data)
-{
-   Eet_Connection_Data *dt = user_data;
-   Eet_Test_Ex_Type *result;
-   Eet_Node *node;
-   int test;
-
-   result = eet_data_descriptor_decode(dt->edd, eet_data, size);
-   node = eet_data_node_decode_cipher(eet_data, NULL, size);
-
-   /* Test the resulting data. */
-   fail_if(!node);
-   fail_if(_eet_test_ex_check(result, 0, _dump_call) != 0);
-   fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1, _dump_call) != 0);
-   fail_if(eina_list_data_get(result->ilist) == NULL);
-   fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
-   fail_if(eina_list_data_get(result->slist) == NULL);
-   fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
-   fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
-   fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
-   fail_if(strcmp(result->charray[0], "test") != 0);
-
-   test = 0;
-   if (result->hash)
-     eina_hash_foreach(result->hash, func, &test);
-
-   fail_if(test != 0);
-   if (result->ihash)
-     eina_hash_foreach(result->ihash, func7, &test);
-
-   fail_if(test != 0);
-
-   if (!dt->test)
-     {
-        dt->test = EINA_TRUE;
-        _dump_call = EINA_TRUE;
-        fail_if(!eet_connection_node_send(dt->conn, node, NULL));
-        _dump_call = EINA_FALSE;
-     }
-
-   return EINA_TRUE;
-} /* _eet_connection_read */
-
-static Eina_Bool
-_eet_connection_write(const void *data,
-                      size_t      size,
-                      void       *user_data)
-{
-   Eet_Connection_Data *dt = user_data;
-   int still;
-
-   if (!dt->test)
-     {
-        int step = size / 3;
-
-        eet_connection_received(dt->conn, data, step);
-        eet_connection_received(dt->conn, (char *)data + step, step);
-        size -= 2 * step;
-        still = eet_connection_received(dt->conn, (char *)data + 2 * step, size);
-     }
-   else
-     still = eet_connection_received(dt->conn, data, size);
-
-   fail_if(still);
-
-   return EINA_TRUE;
-} /* _eet_connection_write */
-
-START_TEST(eet_connection_check)
-{
-   Eet_Data_Descriptor *edd;
-   Eet_Data_Descriptor_Class eddc;
-   Eet_Connection_Data ecd;
-   Eet_Test_Ex_Type etbt;
-   Eina_Bool on_going;
-
-   eet_init();
-
-   _eet_test_ex_set(&etbt, 0);
-   etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
-   etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
-   etbt.hash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
-   eina_hash_add(etbt.hash, EET_TEST_KEY2, _eet_test_ex_set(NULL, 2));
-   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
-   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
-   etbt.ihash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
-   eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
-   etbt.slist = eina_list_prepend(NULL, "test");
-   etbt.shash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
-   memset(&etbt.charray, 0, sizeof(etbt.charray));
-   etbt.charray[0] = "test";
-
-   eet_eina_stream_data_descriptor_class_set(&eddc, sizeof (eddc),
-                                             "Eet_Test_Ex_Type",
-                                             sizeof(Eet_Test_Ex_Type));
-
-   edd = eet_data_descriptor_stream_new(&eddc);
-   fail_if(!edd);
-
-   _eet_build_ex_descriptor(edd, EINA_TRUE);
-
-   /* Init context. */
-   ecd.test = EINA_FALSE;
-   ecd.edd = edd;
-
-   /* Create a connection. */
-   ecd.conn = eet_connection_new(_eet_connection_read, _eet_connection_write, &ecd);
-   fail_if(!ecd.conn);
-
-   /* Test the connection. */
-   fail_if(!eet_connection_send(ecd.conn, edd, &etbt, NULL));
-
-   fail_if(!ecd.test);
-
-   fail_if(!eet_connection_close(ecd.conn, &on_going));
-
-   fail_if(on_going);
-
-   eet_shutdown();
-}
-END_TEST
-
-struct _Eet_5FP
-{
-   Eina_F32p32 fp32;
-   Eina_F16p16 fp16;
-   Eina_F8p24  fp8;
-   Eina_F32p32 f1;
-   Eina_F32p32 f0;
-};
-typedef struct _Eet_5FP Eet_5FP;
-
-struct _Eet_5DBL
-{
-   double fp32;
-   double fp16;
-   float  fp8;
-   double f1;
-   double f0;
-};
-typedef struct _Eet_5DBL Eet_5DBL;
-
-START_TEST(eet_fp)
-{
-   Eet_Data_Descriptor_Class eddc;
-   Eet_Data_Descriptor *edd_5FP;
-   Eet_Data_Descriptor *edd_5DBL;
-   Eet_5FP origin;
-   Eet_5DBL *convert;
-   Eet_5FP *build;
-   void *blob;
-   int size;
-
-   eet_init();
-
-   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_5FP);
-   edd_5FP = eet_data_descriptor_stream_new(&eddc);
-
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp32", fp32, EET_T_F32P32);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp16", fp16, EET_T_F16P16);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp8", fp8, EET_T_F8P24);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f1", f1, EET_T_F32P32);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f0", f0, EET_T_F32P32);
-
-   eet_eina_stream_data_descriptor_class_set(&eddc, sizeof (eddc), "Eet_5FP", sizeof (Eet_5DBL));
-   edd_5DBL = eet_data_descriptor_stream_new(&eddc);
-
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp32", fp32, EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp16", fp16, EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp8", fp8, EET_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f1", f1, EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f0", f0, EET_T_DOUBLE);
-
-   origin.fp32 = eina_f32p32_double_from(1.125);
-   origin.fp16 = eina_f16p16_int_from(2000);
-   origin.fp8 = eina_f8p24_int_from(125);
-   origin.f1 = eina_f32p32_int_from(1);
-   origin.f0 = 0;
-
-   blob = eet_data_descriptor_encode(edd_5FP, &origin, &size);
-   fail_if(!blob || size <= 0);
-
-   build = eet_data_descriptor_decode(edd_5FP, blob, size);
-   fail_if(!build);
-
-   convert = eet_data_descriptor_decode(edd_5DBL, blob, size);
-   fail_if(!convert);
-
-   fail_if(build->fp32 != eina_f32p32_double_from(1.125));
-   fail_if(build->fp16 != eina_f16p16_int_from(2000));
-   fail_if(build->fp8 != eina_f8p24_int_from(125));
-   fail_if(build->f1 != eina_f32p32_int_from(1));
-   fail_if(build->f0 != 0);
-
-   fail_if(convert->fp32 != 1.125);
-   fail_if(convert->fp16 != 2000);
-   fail_if(convert->fp8 != 125);
-   fail_if(convert->f1 != 1);
-   fail_if(convert->f0 != 0);
-
-   eet_shutdown();
-}
-END_TEST
-START_TEST(eet_file_fp)
-{
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
-   Eet_Data_Descriptor_Class eddc;
-   Eet_Data_Descriptor *edd_5FP;
-   Eet_Data_Descriptor *edd_5DBL;
-   Eet_File *ef;
-   Eet_5FP origin;
-   Eet_5DBL *convert;
-   Eet_5FP *build;
-   int tmpfd;
-
-   eet_init();
-
-   EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_5FP);
-   edd_5FP = eet_data_descriptor_file_new(&eddc);
-
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp32", fp32, EET_T_F32P32);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp16", fp16, EET_T_F16P16);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp8", fp8, EET_T_F8P24);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f1", f1, EET_T_F32P32);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f0", f0, EET_T_F32P32);
-
-   eet_eina_file_data_descriptor_class_set(&eddc, sizeof (eddc), "Eet_5FP", sizeof (Eet_5DBL));
-   edd_5DBL = eet_data_descriptor_file_new(&eddc);
-
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp32", fp32, EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp16", fp16, EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp8", fp8, EET_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f1", f1, EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f0", f0, EET_T_DOUBLE);
-
-   origin.fp32 = eina_f32p32_double_from(1.125);
-   origin.fp16 = eina_f16p16_int_from(2000);
-   origin.fp8 = eina_f8p24_int_from(125);
-   origin.f1 = eina_f32p32_int_from(1);
-   origin.f0 = 0;
-
-   fail_if(-1 == (tmpfd = mkstemp(file)));
-   fail_if(!!close(tmpfd));
-
-   ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
-   fail_if(!ef);
-
-   fail_if(!eet_data_write(ef, edd_5FP, EET_TEST_FILE_KEY1, &origin, 1));
-
-   build = eet_data_read(ef, edd_5FP, EET_TEST_FILE_KEY1);
-   fail_if(!build);
-
-   convert = eet_data_read(ef, edd_5DBL, EET_TEST_FILE_KEY1);
-   fail_if(!convert);
-
-   fail_if(build->fp32 != eina_f32p32_double_from(1.125));
-   fail_if(build->fp16 != eina_f16p16_int_from(2000));
-   fail_if(build->fp8 != eina_f8p24_int_from(125));
-   fail_if(build->f1 != eina_f32p32_int_from(1));
-   fail_if(build->f0 != 0);
-
-   fail_if(convert->fp32 != 1.125);
-   fail_if(convert->fp16 != 2000);
-   fail_if(convert->fp8 != 125);
-   fail_if(convert->f1 != 1);
-   fail_if(convert->f0 != 0);
-
-   eet_close(ef);
-
-   fail_if(unlink(file) != 0);
-
-   eet_shutdown();
-} /* START_TEST */
-
-END_TEST
-
-typedef struct _Eet_Union_Test    Eet_Union_Test;
-typedef struct _Eet_Variant_Test  Eet_Variant_Test;
-typedef struct _Eet_Variant_Type  Eet_Variant_Type;
-typedef struct _Eet_Inherit_Test1 Eet_Inherit_Test1;
-typedef struct _Eet_Inherit_Test2 Eet_Inherit_Test2;
-typedef struct _Eet_Inherit_Test3 Eet_Inherit_Test3;
-typedef struct _Eet_St1           Eet_St1;
-typedef struct _Eet_St2           Eet_St2;
-typedef struct _Eet_St3           Eet_St3;
-typedef struct _Eet_List          Eet_List;
-
-typedef enum _Eet_Union
-{
-   EET_UNKNOWN,
-   EET_ST1,
-   EET_ST2,
-   EET_ST3
-} Eet_Union;
-
-struct
-{
-   Eet_Union   u;
-   const char *name;
-} eet_mapping[] = {
-   { EET_ST1, "ST1" },
-   { EET_ST2, "ST2" },
-   { EET_ST3, "ST3" },
-   { EET_UNKNOWN, NULL }
-};
-
-struct _Eet_St1
-{
-   double val1;
-   int    stuff;
-   char  *s1;
-};
-
-struct _Eet_St2
-{
-   Eina_Bool          b1;
-   unsigned long long v1;
-};
-
-struct _Eet_St3
-{
-   int boby;
-};
-
-struct _Eet_Union_Test
-{
-   Eet_Union type;
-
-   union {
-      Eet_St1 st1;
-      Eet_St2 st2;
-      Eet_St3 st3;
-   } u;
-};
-
-struct _Eet_Variant_Type
-{
-   const char *type;
-   Eina_Bool   unknow : 1;
-};
-
-struct _Eet_Variant_Test
-{
-   Eet_Variant_Type t;
-
-   void            *data;
-   Eina_List       *data_list;
-};
-
-struct _Eet_Inherit_Test1
-{
-   Eet_Union type;
-   Eet_St1   st1;
-};
-struct _Eet_Inherit_Test2
-{
-   Eet_Union type;
-   Eet_St2   st2;
-};
-struct _Eet_Inherit_Test3
-{
-   Eet_Union type;
-   Eet_St3   st3;
-};
-
-struct _Eet_List
-{
-   Eina_List *list;
-};
-
-static const char *
-_eet_union_type_get(const void *data,
-                    Eina_Bool  *unknow)
-{
-   const Eet_Union *u = data;
-   int i;
-
-   if (unknow)
-     *unknow = EINA_FALSE;
-
-   for (i = 0; eet_mapping[i].name != NULL; ++i)
-     if (*u == eet_mapping[i].u)
-       return eet_mapping[i].name;
-
-   if (unknow)
-     *unknow = EINA_TRUE;
-
-   return NULL;
-} /* _eet_union_type_get */
-
-static Eina_Bool
-_eet_union_type_set(const char *type,
-                    void       *data,
-                    Eina_Bool   unknow)
-{
-   Eet_Union *u = data;
-   int i;
-
-   if (unknow)
-     return EINA_FALSE;
-
-   for (i = 0; eet_mapping[i].name != NULL; ++i)
-     if (strcmp(eet_mapping[i].name, type) == 0)
-       {
-          *u = eet_mapping[i].u;
-          return EINA_TRUE;
-       }
-
-   return EINA_FALSE;
-} /* _eet_union_type_set */
-
-static const char *
-_eet_variant_type_get(const void *data,
-                      Eina_Bool  *unknow)
-{
-   const Eet_Variant_Type *type = data;
-   int i;
-
-   if (unknow)
-     *unknow = type->unknow;
-
-   for (i = 0; eet_mapping[i].name != NULL; ++i)
-     if (strcmp(type->type, eet_mapping[i].name) == 0)
-       return eet_mapping[i].name;
-
-   if (unknow)
-     *unknow = EINA_FALSE;
-
-   return type->type;
-} /* _eet_variant_type_get */
-
-static Eina_Bool
-_eet_variant_type_set(const char *type,
-                      void       *data,
-                      Eina_Bool   unknow)
-{
-   Eet_Variant_Type *vt = data;
-
-   vt->type = type;
-   vt->unknow = unknow;
-   return EINA_TRUE;
-} /* _eet_variant_type_set */
-
-static Eet_Data_Descriptor *
-_eet_st1_dd(void)
-{
-   Eet_Data_Descriptor_Class eddc;
-   Eet_Data_Descriptor *res;
-
-   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_St1);
-   res = eet_data_descriptor_stream_new(&eddc);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "val1", val1, EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "stuff", stuff, EET_T_INT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "s1", s1, EET_T_STRING);
-
-   return res;
-} /* _eet_st1_dd */
-
-static void
-_eet_st1_set(Eet_St1 *st1,
-             int      i)
-{
-   st1->val1 = EET_TEST_DOUBLE;
-   st1->stuff = EET_TEST_INT + i;
-   st1->s1 = EET_TEST_STRING;
-} /* _eet_st1_set */
-
-static void
-_eet_st1_cmp(Eet_St1 *st1,
-             int      i)
-{
-   double tmp;
-
-   fail_if(!st1);
-
-   tmp = st1->val1 - EET_TEST_DOUBLE;
-   if (tmp < 0)
-     tmp = -tmp;
-
-   fail_if(tmp > 0.005);
-   fail_if(st1->stuff != EET_TEST_INT + i);
-   fail_if(strcmp(st1->s1, EET_TEST_STRING));
-} /* _eet_st1_cmp */
-
-static Eet_Data_Descriptor *
-_eet_st2_dd(void)
-{
-   Eet_Data_Descriptor_Class eddc;
-   Eet_Data_Descriptor *res;
-
-   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_St2);
-   res = eet_data_descriptor_stream_new(&eddc);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St2, "b1", b1, EET_T_UCHAR);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St2, "v1", v1, EET_T_ULONG_LONG);
-
-   return res;
-} /* _eet_st2_dd */
-
-static void
-_eet_st2_set(Eet_St2 *st2,
-             int      i)
-{
-   st2->b1 = EINA_TRUE;
-   st2->v1 = EET_TEST_LONG_LONG + i;
-} /* _eet_st2_set */
-
-static void
-_eet_st2_cmp(Eet_St2 *st2,
-             int      i)
-{
-   fail_if(!st2->b1);
-   fail_if(st2->v1 != EET_TEST_LONG_LONG + i);
-} /* _eet_st2_cmp */
-
-static Eet_Data_Descriptor *
-_eet_st3_dd(void)
-{
-   Eet_Data_Descriptor_Class eddc;
-   Eet_Data_Descriptor *res;
-
-   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_St3);
-   res = eet_data_descriptor_stream_new(&eddc);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St3, "boby", boby, EET_T_INT);
-
-   return res;
-} /* _eet_st3_dd */
-
-static void
-_eet_st3_set(Eet_St3 *st3,
-             int      i)
-{
-   st3->boby = EET_TEST_INT + i;
-} /* _eet_st3_set */
-
-static void
-_eet_st3_cmp(Eet_St3 *st3,
-             int      i)
-{
-   fail_if(st3->boby != EET_TEST_INT + i);
-} /* _eet_st3_cmp */
-
-START_TEST(eet_test_union)
-{
-   Eet_Union_Test *eut;
-   Eet_List *l;
-   Eet_Data_Descriptor_Class eddc;
-   Eet_Data_Descriptor *edd;
-   Eet_Data_Descriptor *unified;
-   Eet_Data_Descriptor *m;
-   void *blob;
-   int size;
-   int i;
-
-   eina_init();
-   eet_init();
-
-   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_Union_Test);
-   edd = eet_data_descriptor_stream_new(&eddc);
-
-   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_Union_Test);
-   m = eet_data_descriptor_stream_new(&eddc);
-
-   eddc.version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
-   eddc.func.type_get = _eet_union_type_get;
-   eddc.func.type_set = _eet_union_type_set;
-   unified = eet_data_descriptor_stream_new(&eddc);
-
-   EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST1", _eet_st1_dd());
-   EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST2", _eet_st2_dd());
-   EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST3", _eet_st3_dd());
-
-   EET_DATA_DESCRIPTOR_ADD_UNION(edd, Eet_Union_Test, "u", u, type, unified);
-
-   EET_DATA_DESCRIPTOR_ADD_LIST(m, Eet_List, "list", list, edd);
-
-   l = calloc(1, sizeof (Eet_List));
-
-#define EUT_NEW(Type_Index)                 \
-  eut = calloc(1, sizeof (Eet_Union_Test)); \
-  eut->type = EET_ST ## Type_Index;         \
-  _eet_st ## Type_Index ## _set(&(eut->u.st ## Type_Index), i);
-
-   for (i = 0; i < 3; ++i)
-     {
-        EUT_NEW(1);
-        l->list = eina_list_append(l->list, eut);
-
-        EUT_NEW(2);
-        l->list = eina_list_append(l->list, eut);
-
-        EUT_NEW(3);
-        l->list = eina_list_append(l->list, eut);
-     }
-
-   blob = eet_data_descriptor_encode(m, l, &size);
-   fail_if(!blob || size <= 0);
-
-   l = eet_data_descriptor_decode(m, blob, size);
-   fail_if(!l);
-
-   fail_if(eina_list_count(l->list) != 9);
-
-#define EUT_CMP(Type_Index)                             \
-  eut = eina_list_nth(l->list, i * 3 + Type_Index - 1); \
-  fail_if(eut->type != EET_ST ## Type_Index);           \
-  _eet_st ## Type_Index ## _cmp(&(eut->u.st ## Type_Index), i);
-
-   for (i = 0; i < 3; ++i)
-     {
-        EUT_CMP(1);
-        EUT_CMP(2);
-        EUT_CMP(3);
-     }
-
-   eet_shutdown();
-   eina_shutdown();
-}
-END_TEST
-START_TEST(eet_test_variant)
-{
-   Eet_Variant_Test *evt;
-   Eet_List *l;
-   Eet_St1 *st1;
-   Eet_St2 *st2;
-   Eet_St3 *st3;
-   Eet_Data_Descriptor_Class eddc;
-   Eet_Data_Descriptor *edd;
-   Eet_Data_Descriptor *unified;
-   Eet_Data_Descriptor *m;
-   void *blob;
-   int size;
-   int i;
-
-   eina_init();
-   eet_init();
-
-   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_Variant_Test);
-   edd = eet_data_descriptor_stream_new(&eddc);
-
-   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_Variant_Test);
-   m = eet_data_descriptor_stream_new(&eddc);
-
-   eddc.version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
-   eddc.func.type_get = _eet_variant_type_get;
-   eddc.func.type_set = _eet_variant_type_set;
-   unified = eet_data_descriptor_stream_new(&eddc);
-
-   EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST1", _eet_st1_dd());
-   EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST2", _eet_st2_dd());
-   EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST3", _eet_st3_dd());
-
-   EET_DATA_DESCRIPTOR_ADD_VARIANT(edd,
-                                   Eet_Variant_Test,
-                                   "data",
-                                   data,
-                                   t,
-                                   unified);
-
-   unified = eet_data_descriptor_stream_new(&eddc);
-   eet_data_descriptor_element_add(unified, "ST1",
-                                   EET_T_UNKNOW, EET_G_LIST,
-                                   0, 0, NULL, _eet_st1_dd());
-   eet_data_descriptor_element_add(unified, "ST2",
-                                   EET_T_UNKNOW, EET_G_LIST,
-                                   0, 0, NULL, _eet_st2_dd());
-
-   EET_DATA_DESCRIPTOR_ADD_VARIANT(edd, Eet_Variant_Test,
-                                   "data_list", data_list, t, unified);
-
-   EET_DATA_DESCRIPTOR_ADD_LIST(m, Eet_List, "list", list, edd);
-
-   l = calloc(1, sizeof (Eet_List));
-
-#define EVT_NEW(Type_Index)                                    \
-  evt = calloc(1, sizeof (Eet_Variant_Test));                  \
-  evt->t.type = eet_mapping[Type_Index - 1].name;              \
-  st ## Type_Index = calloc(1, sizeof (Eet_St ## Type_Index)); \
-  _eet_st ## Type_Index ## _set(st ## Type_Index, i);          \
-  evt->data = st ## Type_Index;
-
-   for (i = 0; i < 3; ++i)
-     {
-        EVT_NEW(1);
-        l->list = eina_list_append(l->list, evt);
-
-        st1 = calloc(1, sizeof (Eet_St1));
-        _eet_st1_set(st1, i);
-        evt->data_list = eina_list_append(evt->data_list, st1);
-
-        EVT_NEW(2);
-        l->list = eina_list_append(l->list, evt);
-
-        EVT_NEW(3);
-        l->list = eina_list_append(l->list, evt);
-     }
-
-   blob = eet_data_descriptor_encode(m, l, &size);
-   fail_if(!blob || size <= 0);
-
-   l = eet_data_descriptor_decode(m, blob, size);
-   fail_if(!l);
-
-   fail_if(eina_list_count(l->list) != 9);
-
-#define EVT_CMP(Type_Index)                                            \
-  evt = eina_list_nth(l->list, i * 3 + Type_Index - 1);                \
-  fail_if(strcmp(evt->t.type, eet_mapping[Type_Index - 1].name) != 0); \
-  _eet_st ## Type_Index ## _cmp(evt->data, i);
-
-   for (i = 0; i < 3; ++i)
-     {
-        EVT_CMP(1);
-
-        fail_if(!evt->data_list);
-        fail_if(eina_list_count(evt->data_list) != 1);
-
-        st1 = eina_list_data_get(evt->data_list);
-        _eet_st1_cmp(st1, i);
-
-        EVT_CMP(2);
-        EVT_CMP(3);
-     }
-
-   eet_shutdown();
-   eina_shutdown();
-} /* START_TEST */
-
-END_TEST
-
-Suite *
-eet_suite(void)
-{
-   Suite *s;
-   TCase *tc;
-
-   s = suite_create("Eet");
-
-   tc = tcase_create("Eet_Init");
-   tcase_add_test(tc, eet_test_init);
-   suite_add_tcase(s, tc);
+#endif
 
-   tc = tcase_create("Eet Data Encoding/Decoding");
-   tcase_add_test(tc, eet_test_basic_data_type_encoding_decoding);
-   tcase_add_test(tc, eet_test_data_type_encoding_decoding);
-   tcase_add_test(tc, eet_test_data_type_dump_undump);
-   tcase_add_test(tc, eet_test_data_type_escape_dump_undump);
-   tcase_add_test(tc, eet_fp);
-   tcase_add_test(tc, eet_test_union);
-   tcase_add_test(tc, eet_test_variant);
-   suite_add_tcase(s, tc);
+#include <Eina.h>
 
-   tc = tcase_create("Eet File");
-   tcase_add_test(tc, eet_file_simple_write);
-   tcase_add_test(tc, eet_file_data_test);
-   tcase_add_test(tc, eet_file_data_dump_test);
-   tcase_add_test(tc, eet_file_fp);
-   suite_add_tcase(s, tc);
+#include "eet_suite.h"
+#include "../efl_check.h"
 
-   tc = tcase_create("Eet Image");
-   tcase_add_test(tc, eet_image);
-   tcase_add_test(tc, eet_small_image);
-   suite_add_tcase(s, tc);
+char argv0[PATH_MAX];
 
+static const Efl_Test_Case etc[] = {
+  { "Eet Init", eet_test_init },
+  { "Eet Data Encoding/Decoding", eet_test_data },
+  { "Eet File", eet_test_file },
+  { "Eet Image", eet_test_image },
 #ifdef HAVE_SIGNATURE
-   tc = tcase_create("Eet Identity");
-   tcase_add_test(tc, eet_identity_simple);
-   tcase_add_test(tc, eet_identity_open_simple);
-   tcase_add_test(tc, eet_identity_open_pkcs8);
-   tcase_add_test(tc, eet_identity_open_pkcs8_enc);
-   suite_add_tcase(s, tc);
-#endif /* ifdef HAVE_SIGNATURE */
-
+  { "Eet Identity", eet_test_identity },
+#endif
 #ifdef HAVE_CIPHER
-   tc = tcase_create("Eet Cipher");
-   tcase_add_test(tc, eet_cipher_decipher_simple);
-   suite_add_tcase(s, tc);
-#endif /* ifdef HAVE_CIPHER */
-
-   tc = tcase_create("Eet Cache");
-   tcase_add_test(tc, eet_cache_concurrency);
-   suite_add_tcase(s, tc);
-
-   tc = tcase_create("Eet Connection");
-   tcase_add_test(tc, eet_connection_check);
-   suite_add_tcase(s, tc);
-
-   return s;
-} /* eet_suite */
-
-static const char *_cert_dir_find(const char *argv0)
-{
-   static char base[PATH_MAX] = "";
-   char path[PATH_MAX];
-   struct stat st;
-
-   eina_strlcpy(base, TESTS_SRC_DIR, sizeof(base));
-   eina_str_join(path, sizeof(path), '/', base, "key.pem");
-   if (stat(path, &st) == 0)
-     return base;
-
-   if (base[0] != '/')
-     {
-        snprintf(base, sizeof(base), "%s/%s", TESTS_WD, TESTS_SRC_DIR);
-        eina_str_join(path, sizeof(path), '/', base, "key.pem");
-        if (stat(path, &st) == 0)
-          return base;
-     }
-
-   eina_strlcpy(base, argv0, sizeof(base));
-   do
-     {
-        char *p = strrchr(base, '/');
-        if (!p)
-          {
-             base[0] = '\0';
-             break;
-          }
-        *p = '\0';
-        eina_str_join(path, sizeof(path), '/', base, "key.pem");
-     }
-   while (stat(path, &st) != 0);
-
-   return base;
-}
+  { "Eet Cipher", eet_test_cipher },
+#endif
+  { "Eet Cache", eet_test_cache },
+  { "Eet Connection", eet_test_connection },
+  { NULL, NULL }
+};
 
 int
-main(int argc EINA_UNUSED, char *argv[])
+main(int argc, char *argv[])
 {
-   Suite *s;
-   SRunner *sr;
    int failed_count;
-   const char *base = _cert_dir_find(argv[0]);
+
+   if (!_efl_test_option_disp(argc, argv, etc))
+     return 0;
 
    putenv("EFL_RUN_IN_TREE=1");
 
-   eina_str_join(_key_pem, sizeof(_key_pem), '/', base, "key.pem");
-   eina_str_join(_cert_pem, sizeof(_cert_pem), '/', base,"cert.pem");
-   eina_str_join(_key_enc, sizeof(_key_enc), '/', base, "key.enc");
-   eina_str_join(_key_enc_pem, sizeof(_key_enc_pem), '/', base, "key_enc.pem");
-   eina_str_join(_key_enc_none_pem, sizeof(_key_enc_none_pem), '/',
-                 base, "key_enc_none.pem");
+   memcpy(argv0, argv[0], strlen(argv[0]) + 1);
 
-   s = eet_suite();
-   sr = srunner_create(s);
-   srunner_set_xml(sr, TESTS_BUILD_DIR "/check-results.xml");
-   srunner_run_all(sr, CK_ENV);
-   failed_count = srunner_ntests_failed(sr);
-   srunner_free(sr);
+   failed_count = _efl_suite_build_and_run(argc - 1, (const char **)argv + 1,
+                                           "Eet", etc);
 
    return (failed_count == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-} /* main */
+}
index c5c91aa..b7c3e59 100644 (file)
@@ -1,9 +1,15 @@
 #ifndef _EET_SUITE_H
 # define _EET_SUITE_H
 
-#include "Eet.h"
+#include <check.h>
 
-void
-eet_test_setup_eddc(Eet_Data_Descriptor_Class *eddc);
+void eet_test_init(TCase *tc);
+void eet_test_data(TCase *tc);
+void eet_test_file(TCase *tc);
+void eet_test_image(TCase *tc);
+void eet_test_identity(TCase *tc);
+void eet_test_cipher(TCase *tc);
+void eet_test_cache(TCase *tc);
+void eet_test_connection(TCase *tc);
 
 #endif /* _EET_SUITE_H */
diff --git a/src/tests/eet/eet_test_cache.c b/src/tests/eet/eet_test_cache.c
new file mode 100644 (file)
index 0000000..6713c41
--- /dev/null
@@ -0,0 +1,105 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <Eina.h>
+#include <Eet.h>
+
+#include "eet_suite.h"
+#include "eet_test_common.h"
+
+static Eina_Bool open_worker_stop;
+static Eina_Condition open_worker_cond;
+static Eina_Lock open_worker_mutex;
+
+static void *
+_open_close_worker(void *path, Eina_Thread tid EINA_UNUSED)
+{
+   static Eina_Bool first = EINA_TRUE;
+
+   while (!open_worker_stop)
+     {
+        Eet_File *ef = eet_open((char const *)path, EET_FILE_MODE_READ);
+        if (ef == NULL)
+          return "eet_open() failed";
+        else
+          {
+             Eet_Error err_code = eet_close(ef);
+             if (err_code != EET_ERROR_NONE)
+               return "eet_close() failed";
+          }
+
+        if (first)
+          {
+             eina_lock_take(&open_worker_mutex);
+             eina_condition_broadcast(&open_worker_cond);
+             eina_lock_release(&open_worker_mutex);
+             first = EINA_FALSE;
+          }
+     }
+
+   return NULL;
+}
+
+START_TEST(eet_test_cache_concurrency)
+{
+   char *file;
+   const char *buffer = "test data";
+   Eet_File *ef;
+   void *thread_ret;
+   unsigned int n;
+   Eina_Thread thread;
+   Eina_Bool r;
+   int tmpfd;
+
+   file = strdup("/tmp/eet_suite_testXXXXXX");
+
+   eet_init();
+   eina_threads_init();
+
+   eina_lock_new(&open_worker_mutex);
+   eina_condition_new(&open_worker_cond, &open_worker_mutex);
+
+   /* create a file to test with */
+   fail_if(-1 == (tmpfd = mkstemp(file)));
+   fail_if(!!close(tmpfd));
+   ef = eet_open(file, EET_FILE_MODE_WRITE);
+   fail_if(!ef);
+   fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 0));
+
+   eina_lock_take(&open_worker_mutex);
+   /* start a thread that repeatedly opens and closes a file */
+   open_worker_stop = 0;
+   r = eina_thread_create(&thread, EINA_THREAD_NORMAL, -1, _open_close_worker, file);
+   fail_unless(r);
+
+   eina_condition_wait(&open_worker_cond);
+   eina_lock_release(&open_worker_mutex);
+
+   /* clear the cache repeatedly in this thread */
+   for (n = 0; n < 20000; ++n)
+     {
+        eet_clearcache();
+     }
+
+   /* join the other thread, and fail if it returned an error message */
+   open_worker_stop = 1;
+   thread_ret = eina_thread_join(thread);
+   fail_unless(thread_ret == NULL, (char const *)thread_ret);
+
+   eet_close(ef);
+
+   fail_if(unlink(file) != 0);
+
+   eina_threads_shutdown();
+   eet_shutdown();
+}
+END_TEST
+
+void eet_test_cache(TCase *tc)
+{
+   tcase_add_test(tc, eet_test_cache_concurrency);
+}
diff --git a/src/tests/eet/eet_test_cipher.c b/src/tests/eet/eet_test_cipher.c
new file mode 100644 (file)
index 0000000..2cee686
--- /dev/null
@@ -0,0 +1,72 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include <Eina.h>
+#include <Eet.h>
+
+#include "eet_suite.h"
+#include "eet_test_common.h"
+
+START_TEST(eet_test_cipher_decipher_simple)
+{
+   const char *buffer = "Here is a string of data to save !";
+   const char *key = "This is a crypto key";
+   const char *key_bad = "This is another crypto key";
+   Eet_File *ef;
+   char *test;
+   char *file = strdup("/tmp/eet_suite_testXXXXXX");
+   int size;
+   int tmpfd;
+
+   eet_init();
+
+   fail_if(-1 == (tmpfd = mkstemp(file)));
+   fail_if(!!close(tmpfd));
+
+   /* Crypt an eet file. */
+   ef = eet_open(file, EET_FILE_MODE_WRITE);
+   fail_if(!ef);
+
+   fail_if(!eet_write_cipher(ef, "keys/tests", buffer, strlen(buffer) + 1, 0,
+                             key));
+
+   eet_close(ef);
+
+   /* Decrypt an eet file. */
+   ef = eet_open(file, EET_FILE_MODE_READ);
+   fail_if(!ef);
+
+   test = eet_read_cipher(ef, "keys/tests", &size, key);
+   fail_if(!test);
+   fail_if(size != (int)strlen(buffer) + 1);
+
+   fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
+
+   eet_close(ef);
+
+   /* Decrypt an eet file. */
+   ef = eet_open(file, EET_FILE_MODE_READ);
+   fail_if(!ef);
+
+   test = eet_read_cipher(ef, "keys/tests", &size, key_bad);
+
+   if (size == (int)strlen(buffer) + 1)
+     fail_if(memcmp(test, buffer, strlen(buffer) + 1) == 0);
+
+   eet_close(ef);
+
+   fail_if(unlink(file) != 0);
+
+   eet_shutdown();
+}
+END_TEST
+
+void eet_test_cipher(TCase *tc)
+{
+   tcase_add_test(tc, eet_test_cipher_decipher_simple);
+}
diff --git a/src/tests/eet/eet_test_common.c b/src/tests/eet/eet_test_common.c
new file mode 100644 (file)
index 0000000..dba9ab1
--- /dev/null
@@ -0,0 +1,649 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+
+#include <Eina.h>
+#include <Eet.h>
+
+#include <check.h>
+
+#include "eet_test_common.h"
+
+int i42 = 42;
+int i7 = 7;
+Eina_Bool _dump_call = EINA_FALSE;
+
+void
+append_string(void       *data,
+              const char *str)
+{
+   char **string = data;
+   int length;
+
+   if (!data)
+     return;
+
+   length = *string ? strlen(*string) : 0;
+   *string = realloc(*string, strlen(str) + length + 1);
+
+   fail_unless(*string); // Fail test case if realloc fails.
+
+   memcpy((*string) + length, str, strlen(str) + 1);
+}
+
+void
+append_strbuf_string(void *data, const char *string)
+{
+   Eina_Strbuf *strbuf = data;
+   eina_strbuf_append(strbuf, string);
+}
+
+Eina_Bool
+func(EINA_UNUSED const Eina_Hash *hash,
+     const void                 *key,
+     void                       *data,
+     void                       *fdata)
+{
+   int *res = fdata;
+
+   if (strcmp(key, EET_TEST_KEY1) != 0
+       && strcmp(key, EET_TEST_KEY2) != 0)
+     *res = 1;
+
+   if (eet_test_ex_check(data, 2, _dump_call))
+     *res = 1;
+
+   return EINA_TRUE;
+} /* func */
+
+Eina_Bool
+func7(EINA_UNUSED const Eina_Hash *hash,
+      EINA_UNUSED const void      *key,
+      void                       *data,
+      void                       *fdata)
+{
+   int *res = fdata;
+   int *val;
+
+   val = data;
+   if (!val)
+     *res = 1;
+
+   if (*val != 7)
+     *res = 1;
+
+   return EINA_TRUE;
+} /* func7 */
+
+static char *
+_eet_str_direct_alloc(const char *str)
+{
+   return (char *)str;
+} /* _eet_str_direct_alloc */
+
+static void
+_eet_str_direct_free(const char *str)
+{
+   /* FIXME: Use attribute unused */
+    (void)str;
+} /* _eet_str_direct_free */
+
+static void
+_eet_eina_hash_foreach(void             *hash,
+                       Eina_Hash_Foreach cb,
+                       void             *fdata)
+{
+   if (hash)
+     eina_hash_foreach(hash, cb, fdata);
+} /* _eet_eina_hash_foreach */
+
+/* Internal wrapper for eina_hash */
+static Eina_Hash *
+_eet_eina_hash_add(Eina_Hash  *hash,
+                   const char *key,
+                   const void *data)
+{
+   if (!hash)
+     hash = eina_hash_string_superfast_new(NULL);
+
+   if (!hash)
+     return NULL;
+
+   eina_hash_add(hash, key, data);
+   return hash;
+} /* _eet_eina_hash_add */
+
+static void
+_eet_eina_hash_free(Eina_Hash *hash)
+{
+   if (hash)
+     eina_hash_free(hash);
+} /* _eet_eina_hash_free */
+
+void
+eet_test_setup_eddc(Eet_Data_Descriptor_Class *eddc)
+{
+   eddc->version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
+   eddc->func.mem_alloc = NULL;
+   eddc->func.mem_free = NULL;
+   eddc->func.str_alloc = NULL;
+   eddc->func.str_free = NULL;
+   eddc->func.list_next = (void *)eina_list_next;
+   eddc->func.list_append = (void *)eina_list_append;
+   eddc->func.list_data = (void *)eina_list_data_get;
+   eddc->func.list_free = (void *)eina_list_free;
+   eddc->func.hash_foreach = (void *)_eet_eina_hash_foreach;
+   eddc->func.hash_add = (void *)_eet_eina_hash_add;
+   eddc->func.hash_free = (void *)_eet_eina_hash_free;
+   eddc->func.str_direct_alloc = (void *)_eet_str_direct_alloc;
+   eddc->func.str_direct_free = (void *)_eet_str_direct_free;
+   eddc->func.array_alloc = NULL;
+   eddc->func.array_free = NULL;
+}
+
+void
+eet_build_basic_descriptor(Eet_Data_Descriptor *edd)
+{
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "c",
+                                 c,
+                                 EET_T_CHAR);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "s",
+                                 s,
+                                 EET_T_SHORT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "i",
+                                 i,
+                                 EET_T_INT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "l",
+                                 l,
+                                 EET_T_LONG_LONG);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "str",
+                                 str,
+                                 EET_T_STRING);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "istr",
+                                 istr,
+                                 EET_T_INLINED_STRING);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "f1",
+                                 f1,
+                                 EET_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "f2",
+                                 f2,
+                                 EET_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "d",
+                                 d,
+                                 EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "uc",
+                                 uc,
+                                 EET_T_UCHAR);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "us",
+                                 us,
+                                 EET_T_USHORT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "ui",
+                                 ui,
+                                 EET_T_UINT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "ul",
+                                 ul,
+                                 EET_T_ULONG_LONG);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "vp",
+                                 vp,
+                                 EET_T_VALUE);
+
+   EET_DATA_DESCRIPTOR_ADD_SUB(edd, Eet_Test_Basic_Type, "empty", empty, edd);
+   EET_DATA_DESCRIPTOR_ADD_SUB(edd, Eet_Test_Basic_Type, "with", with, edd);
+}
+
+void
+eet_test_basic_check(Eet_Test_Basic_Type *result,
+                     int                  i,
+                     Eina_Bool            dumper)
+{
+   int test = -1;
+   float tmp;
+
+   fail_if(result->c != EET_TEST_CHAR);
+   fail_if(result->s != EET_TEST_SHORT);
+   fail_if(result->i != EET_TEST_INT + i);
+   fail_if(result->l != (long long)EET_TEST_LONG_LONG);
+   fail_if(strcmp(result->str, EET_TEST_STRING) != 0);
+   fail_if(strcmp(result->istr, EET_TEST_STRING) != 0);
+   fail_if(result->uc != EET_TEST_CHAR);
+   fail_if(result->us != EET_TEST_SHORT);
+   fail_if(result->ui != EET_TEST_INT);
+   fail_if(result->ul != EET_TEST_LONG_LONG);
+   if (!dumper)
+     {
+        fail_if(result->vp == NULL);
+        eina_value_get(result->vp, &test);
+        fail_if(test != EET_TEST_INT + i);
+     }
+   else
+     {
+        fail_if(result->vp != NULL);
+     }
+
+   tmp = (result->f1 + EET_TEST_FLOAT);
+   if (tmp < 0)
+     tmp = -tmp;
+
+   fail_if(tmp > 0.005);
+
+   tmp = (result->f2 - EET_TEST_FLOAT4);
+   if (tmp < 0)
+     tmp = -tmp;
+
+   fail_if(tmp > 0.005);
+
+   tmp = (result->d + EET_TEST_DOUBLE);
+   if (tmp < 0)
+     tmp = -tmp;
+
+   fail_if(tmp > 0.00005);
+
+   fail_if(result->empty != NULL);
+   if (i == 0)
+     {
+        Eet_Test_Basic_Type *tmp2;
+
+        tmp2 = result->with;
+        fail_if(tmp2 == NULL);
+
+        fail_if(tmp2->c != EET_TEST_CHAR);
+        fail_if(tmp2->s != EET_TEST_SHORT);
+        fail_if(tmp2->i != EET_TEST_INT + i + 1);
+        fail_if(tmp2->l != (long long)EET_TEST_LONG_LONG);
+        fail_if(strcmp(tmp2->str, EET_TEST_STRING) != 0);
+        fail_if(strcmp(tmp2->istr, EET_TEST_STRING) != 0);
+        fail_if(tmp2->uc != EET_TEST_CHAR);
+        fail_if(tmp2->us != EET_TEST_SHORT);
+        fail_if(tmp2->ui != EET_TEST_INT);
+        fail_if(tmp2->ul != EET_TEST_LONG_LONG);
+        fail_if(tmp2->vp != NULL);
+     }
+   else
+     fail_if(result->with != NULL);
+}
+
+void
+eet_build_ex_descriptor(Eet_Data_Descriptor *edd, Eina_Bool stream)
+{
+   Eet_Data_Descriptor_Class eddc;
+   Eet_Test_Ex_Type etbt;
+   Eet_Data_Descriptor *eddb;
+
+   if (stream)
+     {
+        eet_eina_stream_data_descriptor_class_set(&eddc,
+                                                  sizeof (Eet_Data_Descriptor_Class),
+                                                  "Eet_Test_Basic_Type",
+                                                  sizeof(Eet_Test_Basic_Type));
+        eddb = eet_data_descriptor_stream_new(&eddc);
+     }
+   else
+     {
+        eet_eina_file_data_descriptor_class_set(&eddc,
+                                                sizeof (Eet_Data_Descriptor_Class),
+                                                "Eet_Test_Basic_Type",
+                                                sizeof(Eet_Test_Basic_Type));
+        eddb = eet_data_descriptor_file_new(&eddc);
+     }
+   fail_if(!eddb);
+
+   eet_build_basic_descriptor(eddb);
+
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "c",
+                                 c,
+                                 EET_T_CHAR);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "s",
+                                 s,
+                                 EET_T_SHORT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "i", i, EET_T_INT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "l",
+                                 l,
+                                 EET_T_LONG_LONG);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "str",
+                                 str,
+                                 EET_T_STRING);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "istr",
+                                 istr,
+                                 EET_T_INLINED_STRING);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "f1",
+                                 f1,
+                                 EET_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "f2",
+                                 f2,
+                                 EET_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "f3",
+                                 f3,
+                                 EET_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "f4",
+                                 f4,
+                                 EET_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "d1",
+                                 d1,
+                                 EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "d2",
+                                 d2,
+                                 EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "d3",
+                                 d3,
+                                 EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "d4",
+                                 d4,
+                                 EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "uc",
+                                 uc,
+                                 EET_T_UCHAR);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "us",
+                                 us,
+                                 EET_T_USHORT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "ui",
+                                 ui,
+                                 EET_T_UINT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "ul",
+                                 ul,
+                                 EET_T_ULONG_LONG);
+   EET_DATA_DESCRIPTOR_ADD_ARRAY(edd,
+                                 Eet_Test_Ex_Type,
+                                 "sarray1",
+                                 sarray1,
+                                 eddb);
+   EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(edd,
+                                     Eet_Test_Ex_Type,
+                                     "varray2",
+                                     varray2,
+                                     eddb);
+   eet_data_descriptor_element_add(edd,
+                                   "varray1",
+                                   EET_T_INT,
+                                   EET_G_VAR_ARRAY,
+                                   (char *)(&(etbt.varray1)) - (char *)(&(etbt)),
+                                   (char *)(&(etbt.varray1_count)) -
+                                   (char *)(&(etbt)),
+                                   /* 0,  */ NULL,
+                                   NULL);
+   eet_data_descriptor_element_add(edd, "sarray2", EET_T_INT, EET_G_ARRAY,
+                                   (char *)(&(etbt.sarray2)) - (char *)(&(etbt)),
+                                   /* 0,  */ sizeof(etbt.sarray2) /
+                                   sizeof(etbt.sarray2[0]), NULL, NULL);
+   eet_data_descriptor_element_add(edd, "charray", EET_T_STRING, EET_G_ARRAY,
+                                   (char *)(&(etbt.charray)) - (char *)(&(etbt)),
+                                   /* 0,  */ sizeof(etbt.charray) /
+                                   sizeof(etbt.charray[0]), NULL, NULL);
+   EET_DATA_DESCRIPTOR_ADD_LIST(edd, Eet_Test_Ex_Type, "list", list, edd);
+   EET_DATA_DESCRIPTOR_ADD_HASH(edd, Eet_Test_Ex_Type, "hash", hash, edd);
+   eet_data_descriptor_element_add(edd, "ilist", EET_T_INT, EET_G_LIST,
+                                   (char *)(&(etbt.ilist)) - (char *)(&(etbt)),
+                                   0, /* 0,  */ NULL, NULL);
+   eet_data_descriptor_element_add(edd, "ihash", EET_T_INT, EET_G_HASH,
+                                   (char *)(&(etbt.ihash)) - (char *)(&(etbt)),
+                                   0, /* 0,  */ NULL, NULL);
+   eet_data_descriptor_element_add(edd, "slist", EET_T_STRING, EET_G_LIST,
+                                   (char *)(&(etbt.slist)) - (char *)(&(etbt)),
+                                   0, /* 0,  */ NULL, NULL);
+   eet_data_descriptor_element_add(edd, "shash", EET_T_STRING, EET_G_HASH,
+                                   (char *)(&(etbt.shash)) - (char *)(&(etbt)),
+                                   0, /* 0,  */ NULL, NULL);
+}
+
+Eet_Test_Ex_Type *
+eet_test_ex_set(Eet_Test_Ex_Type *res,
+                int               offset)
+{
+   unsigned int i;
+
+   if (!res)
+     res = malloc(sizeof(Eet_Test_Ex_Type));
+
+   if (!res)
+     return NULL;
+
+   res->c = EET_TEST_CHAR + offset;
+   res->s = EET_TEST_SHORT + offset;
+   res->i = EET_TEST_INT + offset;
+   res->l = EET_TEST_LONG_LONG + offset;
+   res->str = EET_TEST_STRING;
+   res->istr = EET_TEST_STRING;
+   res->f1 = EET_TEST_FLOAT + offset;
+   res->f2 = -(EET_TEST_FLOAT2 + offset);
+   res->f3 = EET_TEST_FLOAT3 + offset;
+   res->f4 = EET_TEST_FLOAT2 + offset;
+   res->d1 = EET_TEST_DOUBLE + offset;
+   res->d2 = -(EET_TEST_DOUBLE2 + offset);
+   res->d3 = EET_TEST_DOUBLE3 + offset;
+   res->d4 = EET_TEST_DOUBLE2 + offset;
+   res->list = NULL;
+   res->hash = NULL;
+   res->ilist = NULL;
+   res->ihash = NULL;
+   res->slist = NULL;
+   res->shash = NULL;
+   for (i = 0; i < sizeof(res->charray) / sizeof(res->charray[0]); ++i)
+     res->charray[i] = NULL;
+
+   res->varray2 = malloc(sizeof (Eet_Test_Basic_Type) * 10);
+   res->varray1 = malloc(sizeof (int) * 5);
+   fail_if(!res->varray1 || !res->varray2);
+   for (i = 0; i < 10; ++i)
+     {
+        eet_test_basic_set(res->sarray1 + i, i);
+        eet_test_basic_set(res->varray2 + i, i);
+     }
+   res->varray2_count = 10;
+   for (i = 0; i < 5; ++i)
+     {
+        res->sarray2[i] = i * 42 + 1;
+        res->varray1[i] = i * 42 + 1;
+     }
+   res->varray1_count = 5;
+
+   res->uc = EET_TEST_CHAR + offset;
+   res->us = EET_TEST_SHORT + offset;
+   res->ui = EET_TEST_INT + offset;
+   res->ul = EET_TEST_LONG_LONG + offset;
+
+   return res;
+}
+
+int
+eet_test_ex_check(Eet_Test_Ex_Type *stuff,
+                  int               offset,
+                  Eina_Bool         dumper)
+{
+   double tmp;
+   unsigned int i;
+
+   if (!stuff)
+     return 1;
+
+   if (stuff->c != EET_TEST_CHAR + offset)
+     return 1;
+
+   if (stuff->s != EET_TEST_SHORT + offset)
+     return 1;
+
+   if (stuff->i != EET_TEST_INT + offset)
+     return 1;
+
+   if (stuff->l != EET_TEST_LONG_LONG + offset)
+     return 1;
+
+   if (strcmp(stuff->str, EET_TEST_STRING) != 0)
+     return 1;
+
+   if (strcmp(stuff->istr, EET_TEST_STRING) != 0)
+     return 1;
+
+   tmp = stuff->f1 - (EET_TEST_FLOAT + offset);
+   if (tmp < 0)
+     tmp = -tmp;
+
+   if (tmp > 0.005)
+     return 1;
+
+   tmp = stuff->d1 - (EET_TEST_DOUBLE + offset);
+   if (tmp < 0)
+     tmp = -tmp;
+
+   if (tmp > 0.00005)
+     return 1;
+
+   if (stuff->f2 != -(EET_TEST_FLOAT2 + offset))
+     return 1;
+
+   if (stuff->d2 != -(EET_TEST_DOUBLE2 + offset))
+     return 1;
+
+   if (stuff->f3 != EET_TEST_FLOAT3 + offset)
+     return 1;
+
+   if (stuff->d3 != EET_TEST_DOUBLE3 + offset)
+     return 1;
+
+   if (stuff->f4 != EET_TEST_FLOAT2 + offset)
+     return 1;
+
+   if (stuff->d4 != EET_TEST_DOUBLE2 + offset)
+     return 1;
+
+   if (stuff->uc != EET_TEST_CHAR + offset)
+     return 1;
+
+   if (stuff->us != EET_TEST_SHORT + offset)
+     return 1;
+
+   if (stuff->ui != (unsigned int)EET_TEST_INT + offset)
+     return 1;
+
+   if (stuff->ul != EET_TEST_LONG_LONG + offset)
+     return 1;
+
+   if (stuff->varray1_count != 5)
+     return 1;
+
+   if (stuff->varray2_count != 10)
+     return 1;
+
+   for (i = 0; i < 5; ++i)
+     if (stuff->sarray2[i] != i * 42 + 1 && stuff->varray1[i] != i * 42 + 1)
+       return 1;
+
+   for (i = 0; i < 10; ++i)
+     {
+        eet_test_basic_check(stuff->sarray1 + i, i, dumper);
+        eet_test_basic_check(stuff->varray2 + i, i, dumper);
+     }
+
+   return 0;
+}
+
+void
+eet_test_basic_set(Eet_Test_Basic_Type *res,
+                   int                  i)
+{
+   res->c = EET_TEST_CHAR;
+   res->s = EET_TEST_SHORT;
+   res->i = EET_TEST_INT + i;
+   res->l = EET_TEST_LONG_LONG;
+   res->str = EET_TEST_STRING;
+   res->istr = EET_TEST_STRING;
+   res->f1 = -EET_TEST_FLOAT;
+   res->d = -EET_TEST_DOUBLE;
+   res->f2 = EET_TEST_FLOAT4;
+   res->uc = EET_TEST_CHAR;
+   res->us = EET_TEST_SHORT;
+   res->ui = EET_TEST_INT;
+   res->ul = EET_TEST_LONG_LONG;
+   res->empty = NULL;
+   res->with = NULL;
+   res->vp = eina_value_new(EINA_VALUE_TYPE_INT);
+   eina_value_set(res->vp, EET_TEST_INT + i);
+
+   if (i == 0)
+     {
+        Eet_Test_Basic_Type *tmp;
+
+        tmp = malloc(sizeof (Eet_Test_Basic_Type));
+        fail_if(!tmp);
+
+        res->with = tmp;
+        tmp->c = EET_TEST_CHAR;
+        tmp->s = EET_TEST_SHORT;
+        tmp->i = EET_TEST_INT + i + 1;
+        tmp->l = EET_TEST_LONG_LONG;
+        tmp->str = EET_TEST_STRING;
+        tmp->istr = EET_TEST_STRING;
+        tmp->f1 = -EET_TEST_FLOAT;
+        tmp->d = -EET_TEST_DOUBLE;
+        tmp->f2 = EET_TEST_FLOAT4;
+        tmp->uc = EET_TEST_CHAR;
+        tmp->us = EET_TEST_SHORT;
+        tmp->ui = EET_TEST_INT;
+        tmp->ul = EET_TEST_LONG_LONG;
+        tmp->empty = NULL;
+        tmp->with = NULL;
+        tmp->vp = NULL;
+     }
+}
diff --git a/src/tests/eet/eet_test_common.h b/src/tests/eet/eet_test_common.h
new file mode 100644 (file)
index 0000000..e95b7e5
--- /dev/null
@@ -0,0 +1,139 @@
+#ifndef EET_TEST_COMMON_H
+#define EET_TEST_COMMON_H
+
+#define EET_TEST_CHAR       0x42
+#define EET_TEST_SHORT      0x4224
+#define EET_TEST_INT        0x42211224
+#define EET_TEST_LONG_LONG  0x84CB42211224BC48
+#define EET_TEST_STRING     "my little test with escape \\\""
+#define EET_TEST_KEY1       "key1"
+#define EET_TEST_KEY2       "key2"
+#define EET_TEST_FLOAT      123.45689
+#define EET_TEST_FLOAT2     1.0
+#define EET_TEST_FLOAT3     0.25
+#define EET_TEST_FLOAT4     0.0001234
+#define EET_TEST_DOUBLE     123456789.9876543210
+#define EET_TEST_DOUBLE2    1.0
+#define EET_TEST_DOUBLE3    0.25
+#define EET_TEST_FILE_KEY1  "keys/data/1"
+#define EET_TEST_FILE_KEY2  "keys/data/2"
+#define EET_TEST_FILE_IMAGE "keys/images/"
+
+typedef struct _Eet_Test_Basic_Type Eet_Test_Basic_Type;
+struct _Eet_Test_Basic_Type
+{
+   char                 c;
+   short                s;
+   int                  i;
+   long long            l;
+   char                *str;
+   char                *istr;
+   float                f1;
+   float                f2;
+   double               d;
+   unsigned char        uc;
+   unsigned short       us;
+   unsigned int         ui;
+   unsigned long long   ul;
+   Eina_Value          *vp;
+   Eet_Test_Basic_Type *empty;
+   Eet_Test_Basic_Type *with;
+};
+
+typedef struct _Eet_Test_Ex_Type Eet_Test_Ex_Type;
+struct _Eet_Test_Ex_Type
+{
+   char                 c;
+   short                s;
+   int                  i;
+   unsigned long long   l;
+   char                *str;
+   char                *istr;
+   float                f1;
+   float                f2;
+   float                f3;
+   float                f4;
+   double               d1;
+   double               d2;
+   double               d3;
+   double               d4;
+   Eina_List           *list;
+   Eina_Hash           *hash;
+   Eina_List           *ilist;
+   Eina_List           *slist;
+   Eina_Hash           *ihash;
+   Eina_Hash           *shash;
+   Eet_Test_Basic_Type  sarray1[10];
+   unsigned int         sarray2[5];
+   unsigned int         varray1_count;
+   unsigned int        *varray1;
+   unsigned int         varray2_count;
+   Eet_Test_Basic_Type *varray2;
+   unsigned char        uc;
+   unsigned short       us;
+   unsigned int         ui;
+   unsigned long long   ul;
+   char                *charray[10];
+};
+
+typedef struct _Eet_5FP Eet_5FP;
+struct _Eet_5FP
+{
+   Eina_F32p32 fp32;
+   Eina_F16p16 fp16;
+   Eina_F8p24  fp8;
+   Eina_F32p32 f1;
+   Eina_F32p32 f0;
+};
+
+typedef struct _Eet_5DBL Eet_5DBL;
+struct _Eet_5DBL
+{
+   double fp32;
+   double fp16;
+   float  fp8;
+   double f1;
+   double f0;
+};
+
+extern char argv0[PATH_MAX];
+extern int i42;
+extern int i7;
+extern Eina_Bool _dump_call;
+
+void append_string(void       *data,
+                   const char *str);
+
+void append_strbuf_string(void *data, const char *string);
+
+Eina_Bool func(EINA_UNUSED const Eina_Hash *hash,
+               const void                 *key,
+               void                       *data,
+               void                       *fdata);
+
+Eina_Bool func7(EINA_UNUSED const Eina_Hash *hash,
+                EINA_UNUSED const void      *key,
+                void                       *data,
+                void                       *fdata);
+
+void eet_test_setup_eddc(Eet_Data_Descriptor_Class *eddc);
+
+void eet_build_basic_descriptor(Eet_Data_Descriptor *edd);
+
+void eet_test_basic_check(Eet_Test_Basic_Type *result,
+                          int                  i,
+                          Eina_Bool            dumper);
+
+void eet_build_ex_descriptor(Eet_Data_Descriptor *edd, Eina_Bool stream);
+
+Eet_Test_Ex_Type *eet_test_ex_set(Eet_Test_Ex_Type *res,
+                                  int               offset);
+
+int eet_test_ex_check(Eet_Test_Ex_Type *stuff,
+                      int               offset,
+                      Eina_Bool         dumper);
+
+void eet_test_basic_set(Eet_Test_Basic_Type *res,
+                        int                  i);
+
+#endif
diff --git a/src/tests/eet/eet_test_connection.c b/src/tests/eet/eet_test_connection.c
new file mode 100644 (file)
index 0000000..28c3d5d
--- /dev/null
@@ -0,0 +1,150 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <Eina.h>
+#include <Eet.h>
+
+#include "eet_suite.h"
+#include "eet_test_common.h"
+
+typedef struct _Eet_Connection_Data Eet_Connection_Data;
+struct _Eet_Connection_Data
+{
+   Eet_Connection      *conn;
+   Eet_Data_Descriptor *edd;
+   Eina_Bool            test;
+};
+
+static Eina_Bool
+_eet_connection_read(const void *eet_data,
+                     size_t      size,
+                     void       *user_data)
+{
+   Eet_Connection_Data *dt = user_data;
+   Eet_Test_Ex_Type *result;
+   Eet_Node *node;
+   int test;
+
+   result = eet_data_descriptor_decode(dt->edd, eet_data, size);
+   node = eet_data_node_decode_cipher(eet_data, NULL, size);
+
+   /* Test the resulting data. */
+   fail_if(!node);
+   fail_if(eet_test_ex_check(result, 0, _dump_call) != 0);
+   fail_if(eet_test_ex_check(eina_list_data_get(result->list), 1, _dump_call) != 0);
+   fail_if(eina_list_data_get(result->ilist) == NULL);
+   fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
+   fail_if(eina_list_data_get(result->slist) == NULL);
+   fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
+   fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
+   fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
+   fail_if(strcmp(result->charray[0], "test") != 0);
+
+   test = 0;
+   if (result->hash)
+     eina_hash_foreach(result->hash, func, &test);
+
+   fail_if(test != 0);
+   if (result->ihash)
+     eina_hash_foreach(result->ihash, func7, &test);
+
+   fail_if(test != 0);
+
+   if (!dt->test)
+     {
+        dt->test = EINA_TRUE;
+        _dump_call = EINA_TRUE;
+        fail_if(!eet_connection_node_send(dt->conn, node, NULL));
+        _dump_call = EINA_FALSE;
+     }
+
+   return EINA_TRUE;
+}
+
+static Eina_Bool
+_eet_connection_write(const void *data,
+                      size_t      size,
+                      void       *user_data)
+{
+   Eet_Connection_Data *dt = user_data;
+   int still;
+
+   if (!dt->test)
+     {
+        int step = size / 3;
+
+        eet_connection_received(dt->conn, data, step);
+        eet_connection_received(dt->conn, (char *)data + step, step);
+        size -= 2 * step;
+        still = eet_connection_received(dt->conn, (char *)data + 2 * step, size);
+     }
+   else
+     still = eet_connection_received(dt->conn, data, size);
+
+   fail_if(still);
+
+   return EINA_TRUE;
+}
+
+START_TEST(eet_test_connection_check)
+{
+   Eet_Data_Descriptor *edd;
+   Eet_Data_Descriptor_Class eddc;
+   Eet_Connection_Data ecd;
+   Eet_Test_Ex_Type etbt;
+   Eina_Bool on_going;
+
+   eet_init();
+
+   eet_test_ex_set(&etbt, 0);
+   etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
+   etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
+   etbt.hash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.hash, EET_TEST_KEY1, eet_test_ex_set(NULL, 2));
+   eina_hash_add(etbt.hash, EET_TEST_KEY2, eet_test_ex_set(NULL, 2));
+   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
+   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
+   etbt.ihash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
+   eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
+   etbt.slist = eina_list_prepend(NULL, "test");
+   etbt.shash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
+   memset(&etbt.charray, 0, sizeof(etbt.charray));
+   etbt.charray[0] = "test";
+
+   eet_eina_stream_data_descriptor_class_set(&eddc, sizeof (eddc),
+                                             "Eet_Test_Ex_Type",
+                                             sizeof(Eet_Test_Ex_Type));
+
+   edd = eet_data_descriptor_stream_new(&eddc);
+   fail_if(!edd);
+
+   eet_build_ex_descriptor(edd, EINA_TRUE);
+
+   /* Init context. */
+   ecd.test = EINA_FALSE;
+   ecd.edd = edd;
+
+   /* Create a connection. */
+   ecd.conn = eet_connection_new(_eet_connection_read, _eet_connection_write, &ecd);
+   fail_if(!ecd.conn);
+
+   /* Test the connection. */
+   fail_if(!eet_connection_send(ecd.conn, edd, &etbt, NULL));
+
+   fail_if(!ecd.test);
+
+   fail_if(!eet_connection_close(ecd.conn, &on_going));
+
+   fail_if(on_going);
+
+   eet_shutdown();
+}
+END_TEST
+
+void eet_test_connection(TCase *tc)
+{
+   tcase_add_test(tc, eet_test_connection_check);
+}
diff --git a/src/tests/eet/eet_test_data.c b/src/tests/eet/eet_test_data.c
new file mode 100644 (file)
index 0000000..60ec027
--- /dev/null
@@ -0,0 +1,764 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <Eina.h>
+#include <Eet.h>
+
+#include "eet_suite.h"
+#include "eet_test_common.h"
+
+typedef struct _Eet_Union_Test    Eet_Union_Test;
+typedef struct _Eet_Variant_Test  Eet_Variant_Test;
+typedef struct _Eet_Variant_Type  Eet_Variant_Type;
+typedef struct _Eet_Inherit_Test1 Eet_Inherit_Test1;
+typedef struct _Eet_Inherit_Test2 Eet_Inherit_Test2;
+typedef struct _Eet_Inherit_Test3 Eet_Inherit_Test3;
+typedef struct _Eet_St1           Eet_St1;
+typedef struct _Eet_St2           Eet_St2;
+typedef struct _Eet_St3           Eet_St3;
+typedef struct _Eet_List          Eet_List;
+
+typedef enum _Eet_Union
+{
+   EET_UNKNOWN,
+   EET_ST1,
+   EET_ST2,
+   EET_ST3
+} Eet_Union;
+
+struct
+{
+   Eet_Union   u;
+   const char *name;
+} eet_mapping[] = {
+   { EET_ST1, "ST1" },
+   { EET_ST2, "ST2" },
+   { EET_ST3, "ST3" },
+   { EET_UNKNOWN, NULL }
+};
+
+struct _Eet_St1
+{
+   double val1;
+   int    stuff;
+   char  *s1;
+};
+
+struct _Eet_St2
+{
+   Eina_Bool          b1;
+   unsigned long long v1;
+};
+
+struct _Eet_St3
+{
+   int boby;
+};
+
+struct _Eet_Union_Test
+{
+   Eet_Union type;
+
+   union {
+      Eet_St1 st1;
+      Eet_St2 st2;
+      Eet_St3 st3;
+   } u;
+};
+
+struct _Eet_Variant_Type
+{
+   const char *type;
+   Eina_Bool   unknow : 1;
+};
+
+struct _Eet_Variant_Test
+{
+   Eet_Variant_Type t;
+
+   void            *data;
+   Eina_List       *data_list;
+};
+
+struct _Eet_Inherit_Test1
+{
+   Eet_Union type;
+   Eet_St1   st1;
+};
+struct _Eet_Inherit_Test2
+{
+   Eet_Union type;
+   Eet_St2   st2;
+};
+struct _Eet_Inherit_Test3
+{
+   Eet_Union type;
+   Eet_St3   st3;
+};
+
+struct _Eet_List
+{
+   Eina_List *list;
+};
+
+static const char *
+_eet_union_type_get(const void *data,
+                    Eina_Bool  *unknow)
+{
+   const Eet_Union *u = data;
+   int i;
+
+   if (unknow)
+     *unknow = EINA_FALSE;
+
+   for (i = 0; eet_mapping[i].name != NULL; ++i)
+     if (*u == eet_mapping[i].u)
+       return eet_mapping[i].name;
+
+   if (unknow)
+     *unknow = EINA_TRUE;
+
+   return NULL;
+} /* _eet_union_type_get */
+
+static Eina_Bool
+_eet_union_type_set(const char *type,
+                    void       *data,
+                    Eina_Bool   unknow)
+{
+   Eet_Union *u = data;
+   int i;
+
+   if (unknow)
+     return EINA_FALSE;
+
+   for (i = 0; eet_mapping[i].name != NULL; ++i)
+     if (strcmp(eet_mapping[i].name, type) == 0)
+       {
+          *u = eet_mapping[i].u;
+          return EINA_TRUE;
+       }
+
+   return EINA_FALSE;
+} /* _eet_union_type_set */
+
+static const char *
+_eet_variant_type_get(const void *data,
+                      Eina_Bool  *unknow)
+{
+   const Eet_Variant_Type *type = data;
+   int i;
+
+   if (unknow)
+     *unknow = type->unknow;
+
+   for (i = 0; eet_mapping[i].name != NULL; ++i)
+     if (strcmp(type->type, eet_mapping[i].name) == 0)
+       return eet_mapping[i].name;
+
+   if (unknow)
+     *unknow = EINA_FALSE;
+
+   return type->type;
+} /* _eet_variant_type_get */
+
+static Eina_Bool
+_eet_variant_type_set(const char *type,
+                      void       *data,
+                      Eina_Bool   unknow)
+{
+   Eet_Variant_Type *vt = data;
+
+   vt->type = type;
+   vt->unknow = unknow;
+   return EINA_TRUE;
+} /* _eet_variant_type_set */
+
+static Eet_Data_Descriptor *
+_eet_st1_dd(void)
+{
+   Eet_Data_Descriptor_Class eddc;
+   Eet_Data_Descriptor *res;
+
+   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_St1);
+   res = eet_data_descriptor_stream_new(&eddc);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "val1", val1, EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "stuff", stuff, EET_T_INT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "s1", s1, EET_T_STRING);
+
+   return res;
+} /* _eet_st1_dd */
+
+static void
+_eet_st1_set(Eet_St1 *st1,
+             int      i)
+{
+   st1->val1 = EET_TEST_DOUBLE;
+   st1->stuff = EET_TEST_INT + i;
+   st1->s1 = EET_TEST_STRING;
+} /* _eet_st1_set */
+
+static void
+_eet_st1_cmp(Eet_St1 *st1,
+             int      i)
+{
+   double tmp;
+
+   fail_if(!st1);
+
+   tmp = st1->val1 - EET_TEST_DOUBLE;
+   if (tmp < 0)
+     tmp = -tmp;
+
+   fail_if(tmp > 0.005);
+   fail_if(st1->stuff != EET_TEST_INT + i);
+   fail_if(strcmp(st1->s1, EET_TEST_STRING));
+} /* _eet_st1_cmp */
+
+static Eet_Data_Descriptor *
+_eet_st2_dd(void)
+{
+   Eet_Data_Descriptor_Class eddc;
+   Eet_Data_Descriptor *res;
+
+   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_St2);
+   res = eet_data_descriptor_stream_new(&eddc);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St2, "b1", b1, EET_T_UCHAR);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St2, "v1", v1, EET_T_ULONG_LONG);
+
+   return res;
+} /* _eet_st2_dd */
+
+static void
+_eet_st2_set(Eet_St2 *st2,
+             int      i)
+{
+   st2->b1 = EINA_TRUE;
+   st2->v1 = EET_TEST_LONG_LONG + i;
+} /* _eet_st2_set */
+
+static void
+_eet_st2_cmp(Eet_St2 *st2,
+             int      i)
+{
+   fail_if(!st2->b1);
+   fail_if(st2->v1 != EET_TEST_LONG_LONG + i);
+} /* _eet_st2_cmp */
+
+static Eet_Data_Descriptor *
+_eet_st3_dd(void)
+{
+   Eet_Data_Descriptor_Class eddc;
+   Eet_Data_Descriptor *res;
+
+   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_St3);
+   res = eet_data_descriptor_stream_new(&eddc);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St3, "boby", boby, EET_T_INT);
+
+   return res;
+} /* _eet_st3_dd */
+
+static void
+_eet_st3_set(Eet_St3 *st3,
+             int      i)
+{
+   st3->boby = EET_TEST_INT + i;
+} /* _eet_st3_set */
+
+static void
+_eet_st3_cmp(Eet_St3 *st3,
+             int      i)
+{
+   fail_if(st3->boby != EET_TEST_INT + i);
+} /* _eet_st3_cmp */
+
+START_TEST(eet_test_data_basic_type_encoding_decoding)
+{
+   Eet_Data_Descriptor *edd;
+   Eet_Test_Basic_Type *result;
+   Eet_Data_Descriptor_Class eddc;
+   Eet_Test_Basic_Type etbt;
+   void *transfert;
+   int size;
+
+   eet_init();
+
+   eet_test_basic_set(&etbt, 0);
+
+   eet_test_setup_eddc(&eddc);
+   eddc.name = "Eet_Test_Basic_Type";
+   eddc.size = sizeof(Eet_Test_Basic_Type);
+
+   edd = eet_data_descriptor_stream_new(&eddc);
+   fail_if(!edd);
+
+   eet_build_basic_descriptor(edd);
+
+   transfert = eet_data_descriptor_encode(edd, &etbt, &size);
+   fail_if(!transfert || size <= 0);
+
+   result = eet_data_descriptor_decode(edd, transfert, size);
+   fail_if(!result);
+
+   eet_test_basic_check(result, 0, EINA_FALSE);
+
+   free(result->str);
+   free(result);
+
+   eet_data_descriptor_free(edd);
+
+   eet_shutdown();
+}
+END_TEST
+
+START_TEST(eet_test_data_type_encoding_decoding)
+{
+   Eet_Data_Descriptor *edd;
+   Eet_Test_Ex_Type *result;
+   void *transfert;
+   Eet_Data_Descriptor_Class eddc;
+   Eet_Test_Ex_Type etbt;
+   int size;
+   int test;
+
+   eet_init();
+
+   eet_test_ex_set(&etbt, 0);
+   etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
+   etbt.hash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.hash, EET_TEST_KEY1, eet_test_ex_set(NULL, 2));
+   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
+   etbt.ihash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
+   etbt.slist = eina_list_prepend(NULL, "test");
+   etbt.shash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
+   memset(&etbt.charray, 0, sizeof(etbt.charray));
+   etbt.charray[0] = "test";
+   etbt.charray[5] = "plouf";
+
+   eet_test_setup_eddc(&eddc);
+   eddc.name = "Eet_Test_Ex_Type";
+   eddc.size = sizeof(Eet_Test_Ex_Type);
+
+   edd = eet_data_descriptor_file_new(&eddc);
+   fail_if(!edd);
+
+   eet_build_ex_descriptor(edd, EINA_FALSE);
+
+   transfert = eet_data_descriptor_encode(edd, &etbt, &size);
+   fail_if(!transfert || size <= 0);
+
+   result = eet_data_descriptor_decode(edd, transfert, size);
+   fail_if(!result);
+
+   fail_if(eet_test_ex_check(result, 0, EINA_FALSE) != 0);
+   fail_if(eet_test_ex_check(eina_list_data_get(result->list), 1, EINA_FALSE) != 0);
+   fail_if(eina_list_data_get(result->ilist) == NULL);
+   fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
+   fail_if(eina_list_data_get(result->slist) == NULL);
+   fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
+   fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
+   fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
+   fail_if(strcmp(result->charray[0], "test") != 0);
+   fail_if(strcmp(result->charray[5], "plouf") != 0);
+
+   test = 0;
+   if (result->hash)
+     eina_hash_foreach(result->hash, func, &test);
+
+   fail_if(test != 0);
+   if (result->ihash)
+     eina_hash_foreach(result->ihash, func7, &test);
+
+   fail_if(test != 0);
+
+   eet_shutdown();
+}
+END_TEST
+
+START_TEST(eet_test_data_type_dump_undump)
+{
+   Eet_Data_Descriptor *edd;
+   Eet_Test_Ex_Type *result;
+   Eet_Data_Descriptor_Class eddc;
+   Eet_Test_Ex_Type etbt;
+   char *transfert1;
+   char *transfert2;
+   char *string1;
+   char *string2;
+   int size1;
+   int size2;
+   int test;
+
+   eet_init();
+
+   eet_test_ex_set(&etbt, 0);
+   etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
+   etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
+   etbt.hash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.hash, EET_TEST_KEY1, eet_test_ex_set(NULL, 2));
+   etbt.hash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.hash, EET_TEST_KEY2, eet_test_ex_set(NULL, 2));
+   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
+   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
+   etbt.ihash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
+   etbt.ihash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
+   etbt.slist = eina_list_prepend(NULL, "test");
+   etbt.shash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
+   memset(&etbt.charray, 0, sizeof(etbt.charray));
+   etbt.charray[0] = "test";
+
+   eet_test_setup_eddc(&eddc);
+   eddc.name = "Eet_Test_Ex_Type";
+   eddc.size = sizeof(Eet_Test_Ex_Type);
+
+   edd = eet_data_descriptor_file_new(&eddc);
+   fail_if(!edd);
+
+   eet_build_ex_descriptor(edd, EINA_FALSE);
+
+   transfert1 = eet_data_descriptor_encode(edd, &etbt, &size1);
+   fail_if(!transfert1 || size1 <= 0);
+
+   string1 = NULL;
+   eet_data_text_dump(transfert1, size1, append_string, &string1);
+   fail_if(!string1);
+
+   transfert2 = eet_data_text_undump(string1, string1 ? strlen(
+                                       string1) : 0, &size2);
+   fail_if(!transfert2 && size2 <= 0);
+
+   string2 = NULL;
+   eet_data_text_dump(transfert2, size2, append_string, &string2);
+   fail_if(!string2);
+
+   fail_if(strlen(string2) != strlen(string1));
+
+   result = eet_data_descriptor_decode(edd, transfert2, size2);
+   fail_if(!result);
+
+   fail_if(eet_test_ex_check(result, 0, EINA_TRUE) != 0);
+   fail_if(eet_test_ex_check(eina_list_data_get(result->list), 1, EINA_TRUE) != 0);
+   fail_if(eina_list_data_get(result->ilist) == NULL);
+   fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
+   fail_if(eina_list_data_get(result->slist) == NULL);
+   fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
+   fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
+   fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
+   fail_if(strcmp(result->charray[0], "test") != 0);
+
+   test = 0;
+   _dump_call = EINA_TRUE;
+   if (result->hash)
+     eina_hash_foreach(result->hash, func, &test);
+   _dump_call = EINA_FALSE;
+
+   fail_if(test != 0);
+   if (result->ihash)
+     eina_hash_foreach(result->ihash, func7, &test);
+
+   fail_if(test != 0);
+
+   eet_shutdown();
+}
+END_TEST
+
+START_TEST(eet_test_data_type_escape_dump_undump)
+{
+   void *blob;
+   int blob_len;
+   int ret = 0;
+   const char *outputstr;
+   Eina_Strbuf *strbuf;
+   const char inputstr[] = ""
+     "group \"\\\\My\\\"Group\\\\\" struct {\n"
+     "    value \"\\\\My\\\\BackSlash\\\\\" string: \"\\\\\";\n"
+     "    value \"\\\\My\\\\DoubleQuote\\\\\" string: \"\\\"\";\n"
+     "    value \"\\\\My\\\\NewLine\\\\\" string: \"\\n\";\n"
+     "}\n";
+
+   eet_init();
+
+   blob = eet_data_text_undump(inputstr, strlen(inputstr), &blob_len);
+   fail_if(!blob);
+
+   strbuf = eina_strbuf_new();
+   ret = eet_data_text_dump(blob, blob_len, append_strbuf_string, strbuf);
+   ck_assert_int_eq(ret, 1);
+
+   outputstr = eina_strbuf_string_get(strbuf);
+   fail_if(!outputstr);
+   ck_assert_str_eq(inputstr, outputstr);
+
+   eina_strbuf_free(strbuf);
+   free(blob);
+
+   eet_shutdown();
+}
+END_TEST
+
+START_TEST(eet_test_data_fp)
+{
+   Eet_Data_Descriptor_Class eddc;
+   Eet_Data_Descriptor *edd_5FP;
+   Eet_Data_Descriptor *edd_5DBL;
+   Eet_5FP origin;
+   Eet_5DBL *convert;
+   Eet_5FP *build;
+   void *blob;
+   int size;
+
+   eet_init();
+
+   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_5FP);
+   edd_5FP = eet_data_descriptor_stream_new(&eddc);
+
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp32", fp32, EET_T_F32P32);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp16", fp16, EET_T_F16P16);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp8", fp8, EET_T_F8P24);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f1", f1, EET_T_F32P32);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f0", f0, EET_T_F32P32);
+
+   eet_eina_stream_data_descriptor_class_set(&eddc, sizeof (eddc), "Eet_5FP", sizeof (Eet_5DBL));
+   edd_5DBL = eet_data_descriptor_stream_new(&eddc);
+
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp32", fp32, EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp16", fp16, EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp8", fp8, EET_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f1", f1, EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f0", f0, EET_T_DOUBLE);
+
+   origin.fp32 = eina_f32p32_double_from(1.125);
+   origin.fp16 = eina_f16p16_int_from(2000);
+   origin.fp8 = eina_f8p24_int_from(125);
+   origin.f1 = eina_f32p32_int_from(1);
+   origin.f0 = 0;
+
+   blob = eet_data_descriptor_encode(edd_5FP, &origin, &size);
+   fail_if(!blob || size <= 0);
+
+   build = eet_data_descriptor_decode(edd_5FP, blob, size);
+   fail_if(!build);
+
+   convert = eet_data_descriptor_decode(edd_5DBL, blob, size);
+   fail_if(!convert);
+
+   fail_if(build->fp32 != eina_f32p32_double_from(1.125));
+   fail_if(build->fp16 != eina_f16p16_int_from(2000));
+   fail_if(build->fp8 != eina_f8p24_int_from(125));
+   fail_if(build->f1 != eina_f32p32_int_from(1));
+   fail_if(build->f0 != 0);
+
+   fail_if(convert->fp32 != 1.125);
+   fail_if(convert->fp16 != 2000);
+   fail_if(convert->fp8 != 125);
+   fail_if(convert->f1 != 1);
+   fail_if(convert->f0 != 0);
+
+   eet_shutdown();
+}
+END_TEST
+
+START_TEST(eet_test_data_union)
+{
+   Eet_Union_Test *eut;
+   Eet_List *l;
+   Eet_Data_Descriptor_Class eddc;
+   Eet_Data_Descriptor *edd;
+   Eet_Data_Descriptor *unified;
+   Eet_Data_Descriptor *m;
+   void *blob;
+   int size;
+   int i;
+
+   eina_init();
+   eet_init();
+
+   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_Union_Test);
+   edd = eet_data_descriptor_stream_new(&eddc);
+
+   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_Union_Test);
+   m = eet_data_descriptor_stream_new(&eddc);
+
+   eddc.version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
+   eddc.func.type_get = _eet_union_type_get;
+   eddc.func.type_set = _eet_union_type_set;
+   unified = eet_data_descriptor_stream_new(&eddc);
+
+   EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST1", _eet_st1_dd());
+   EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST2", _eet_st2_dd());
+   EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST3", _eet_st3_dd());
+
+   EET_DATA_DESCRIPTOR_ADD_UNION(edd, Eet_Union_Test, "u", u, type, unified);
+
+   EET_DATA_DESCRIPTOR_ADD_LIST(m, Eet_List, "list", list, edd);
+
+   l = calloc(1, sizeof (Eet_List));
+
+#define EUT_NEW(Type_Index)                 \
+  eut = calloc(1, sizeof (Eet_Union_Test)); \
+  eut->type = EET_ST ## Type_Index;         \
+  _eet_st ## Type_Index ## _set(&(eut->u.st ## Type_Index), i);
+
+   for (i = 0; i < 3; ++i)
+     {
+        EUT_NEW(1);
+        l->list = eina_list_append(l->list, eut);
+
+        EUT_NEW(2);
+        l->list = eina_list_append(l->list, eut);
+
+        EUT_NEW(3);
+        l->list = eina_list_append(l->list, eut);
+     }
+
+   blob = eet_data_descriptor_encode(m, l, &size);
+   fail_if(!blob || size <= 0);
+
+   l = eet_data_descriptor_decode(m, blob, size);
+   fail_if(!l);
+
+   fail_if(eina_list_count(l->list) != 9);
+
+#define EUT_CMP(Type_Index)                             \
+  eut = eina_list_nth(l->list, i * 3 + Type_Index - 1); \
+  fail_if(eut->type != EET_ST ## Type_Index);           \
+  _eet_st ## Type_Index ## _cmp(&(eut->u.st ## Type_Index), i);
+
+   for (i = 0; i < 3; ++i)
+     {
+        EUT_CMP(1);
+        EUT_CMP(2);
+        EUT_CMP(3);
+     }
+
+   eet_shutdown();
+   eina_shutdown();
+}
+END_TEST
+
+START_TEST(eet_test_data_variant)
+{
+   Eet_Variant_Test *evt;
+   Eet_List *l;
+   Eet_St1 *st1;
+   Eet_St2 *st2;
+   Eet_St3 *st3;
+   Eet_Data_Descriptor_Class eddc;
+   Eet_Data_Descriptor *edd;
+   Eet_Data_Descriptor *unified;
+   Eet_Data_Descriptor *m;
+   void *blob;
+   int size;
+   int i;
+
+   eina_init();
+   eet_init();
+
+   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_Variant_Test);
+   edd = eet_data_descriptor_stream_new(&eddc);
+
+   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_Variant_Test);
+   m = eet_data_descriptor_stream_new(&eddc);
+
+   eddc.version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
+   eddc.func.type_get = _eet_variant_type_get;
+   eddc.func.type_set = _eet_variant_type_set;
+   unified = eet_data_descriptor_stream_new(&eddc);
+
+   EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST1", _eet_st1_dd());
+   EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST2", _eet_st2_dd());
+   EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST3", _eet_st3_dd());
+
+   EET_DATA_DESCRIPTOR_ADD_VARIANT(edd,
+                                   Eet_Variant_Test,
+                                   "data",
+                                   data,
+                                   t,
+                                   unified);
+
+   unified = eet_data_descriptor_stream_new(&eddc);
+   eet_data_descriptor_element_add(unified, "ST1",
+                                   EET_T_UNKNOW, EET_G_LIST,
+                                   0, 0, NULL, _eet_st1_dd());
+   eet_data_descriptor_element_add(unified, "ST2",
+                                   EET_T_UNKNOW, EET_G_LIST,
+                                   0, 0, NULL, _eet_st2_dd());
+
+   EET_DATA_DESCRIPTOR_ADD_VARIANT(edd, Eet_Variant_Test,
+                                   "data_list", data_list, t, unified);
+
+   EET_DATA_DESCRIPTOR_ADD_LIST(m, Eet_List, "list", list, edd);
+
+   l = calloc(1, sizeof (Eet_List));
+
+#define EVT_NEW(Type_Index)                                    \
+  evt = calloc(1, sizeof (Eet_Variant_Test));                  \
+  evt->t.type = eet_mapping[Type_Index - 1].name;              \
+  st ## Type_Index = calloc(1, sizeof (Eet_St ## Type_Index)); \
+  _eet_st ## Type_Index ## _set(st ## Type_Index, i);          \
+  evt->data = st ## Type_Index;
+
+   for (i = 0; i < 3; ++i)
+     {
+        EVT_NEW(1);
+        l->list = eina_list_append(l->list, evt);
+
+        st1 = calloc(1, sizeof (Eet_St1));
+        _eet_st1_set(st1, i);
+        evt->data_list = eina_list_append(evt->data_list, st1);
+
+        EVT_NEW(2);
+        l->list = eina_list_append(l->list, evt);
+
+        EVT_NEW(3);
+        l->list = eina_list_append(l->list, evt);
+     }
+
+   blob = eet_data_descriptor_encode(m, l, &size);
+   fail_if(!blob || size <= 0);
+
+   l = eet_data_descriptor_decode(m, blob, size);
+   fail_if(!l);
+
+   fail_if(eina_list_count(l->list) != 9);
+
+#define EVT_CMP(Type_Index)                                            \
+  evt = eina_list_nth(l->list, i * 3 + Type_Index - 1);                \
+  fail_if(strcmp(evt->t.type, eet_mapping[Type_Index - 1].name) != 0); \
+  _eet_st ## Type_Index ## _cmp(evt->data, i);
+
+   for (i = 0; i < 3; ++i)
+     {
+        EVT_CMP(1);
+
+        fail_if(!evt->data_list);
+        fail_if(eina_list_count(evt->data_list) != 1);
+
+        st1 = eina_list_data_get(evt->data_list);
+        _eet_st1_cmp(st1, i);
+
+        EVT_CMP(2);
+        EVT_CMP(3);
+     }
+
+   eet_shutdown();
+   eina_shutdown();
+} /* START_TEST */
+END_TEST
+
+void eet_test_data(TCase *tc)
+{
+   tcase_add_test(tc, eet_test_data_basic_type_encoding_decoding);
+   tcase_add_test(tc, eet_test_data_type_encoding_decoding);
+   tcase_add_test(tc, eet_test_data_type_dump_undump);
+   tcase_add_test(tc, eet_test_data_type_escape_dump_undump);
+   tcase_add_test(tc, eet_test_data_fp);
+   tcase_add_test(tc, eet_test_data_union);
+   tcase_add_test(tc, eet_test_data_variant);
+}
diff --git a/src/tests/eet/eet_test_file.c b/src/tests/eet/eet_test_file.c
new file mode 100644 (file)
index 0000000..2c9efb6
--- /dev/null
@@ -0,0 +1,427 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <Eina.h>
+#include <Eet.h>
+
+#include "eet_suite.h"
+#include "eet_test_common.h"
+
+START_TEST(eet_test_file_simple_write)
+{
+   const char *buffer = "Here is a string of data to save !";
+   Eet_File *ef;
+   char *test;
+   char *file;
+   int size;
+   int tmpfd;
+
+   file = strdup("/tmp/eet_suite_testXXXXXX");
+
+   eet_init();
+
+   fail_if(-1 == (tmpfd = mkstemp(file)));
+   fail_if(!!close(tmpfd));
+
+   fail_if(eet_mode_get(NULL) != EET_FILE_MODE_INVALID);
+
+   ef = eet_open(file, EET_FILE_MODE_WRITE);
+   fail_if(!ef);
+
+   fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 1));
+   fail_if(!eet_alias(ef, "keys/alias", "keys/tests", 0));
+   fail_if(!eet_alias(ef, "keys/alias2", "keys/alias", 1));
+
+   fail_if(eet_mode_get(ef) != EET_FILE_MODE_WRITE);
+
+   fail_if(eet_list(ef, "*", &size) != NULL);
+   fail_if(eet_num_entries(ef) != -1);
+
+   eet_close(ef);
+
+   /* Test read of simple file */
+   ef = eet_open(file, EET_FILE_MODE_READ);
+   fail_if(!ef);
+
+   test = eet_read(ef, "keys/tests", &size);
+   fail_if(!test);
+   fail_if(size != (int)strlen(buffer) + 1);
+
+   fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
+
+   test = eet_read(ef, "keys/alias2", &size);
+   fail_if(!test);
+   fail_if(size != (int)strlen(buffer) + 1);
+
+   fail_if(eet_read_direct(ef, "key/alias2", &size));
+
+   fail_if(eet_mode_get(ef) != EET_FILE_MODE_READ);
+   fail_if(eet_num_entries(ef) != 3);
+
+   eet_close(ef);
+
+   /* Test eet cache system */
+   ef = eet_open(file, EET_FILE_MODE_READ);
+   fail_if(!ef);
+
+   test = eet_read(ef, "keys/tests", &size);
+   fail_if(!test);
+   fail_if(size != (int)strlen(buffer) + 1);
+
+   fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
+
+   eet_close(ef);
+
+   fail_if(unlink(file) != 0);
+
+   eet_shutdown();
+}
+END_TEST
+
+START_TEST(eet_test_file_data)
+{
+   Eet_Data_Descriptor *edd;
+   Eet_Test_Ex_Type *result;
+   Eet_Dictionary *ed;
+   Eet_File *ef;
+   char **list;
+   char *file;
+   Eet_Data_Descriptor_Class eddc;
+   Eet_Test_Ex_Type etbt;
+   int size;
+   int test;
+   int tmpfd;
+
+   file = strdup("/tmp/eet_suite_testXXXXXX");
+
+   eet_init();
+
+   eet_test_ex_set(&etbt, 0);
+   etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
+   etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
+   etbt.hash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.hash, EET_TEST_KEY1, eet_test_ex_set(NULL, 2));
+   etbt.hash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.hash, EET_TEST_KEY2, eet_test_ex_set(NULL, 2));
+   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
+   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
+   etbt.ihash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
+   etbt.ihash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
+   etbt.slist = eina_list_prepend(NULL, "test");
+   etbt.shash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
+   memset(&etbt.charray, 0, sizeof(etbt.charray));
+   etbt.charray[0] = "test";
+
+   eet_test_setup_eddc(&eddc);
+   eddc.name = "Eet_Test_Ex_Type";
+   eddc.size = sizeof(Eet_Test_Ex_Type);
+
+   edd = eet_data_descriptor_file_new(&eddc);
+   fail_if(!edd);
+
+   eet_build_ex_descriptor(edd, EINA_FALSE);
+
+   fail_if(-1 == (tmpfd = mkstemp(file)));
+   fail_if(!!close(tmpfd));
+
+   /* Insert an error in etbt. */
+   etbt.i = 0;
+
+   /* Save the encoded data in a file. */
+   ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
+   fail_if(!ef);
+
+   fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
+
+   result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
+   fail_if(!result);
+
+   fail_if(eet_mode_get(ef) != EET_FILE_MODE_READ_WRITE);
+
+   /* Test string space. */
+   ed = eet_dictionary_get(ef);
+
+   fail_if(!eet_dictionary_string_check(ed, result->str));
+   fail_if(eet_dictionary_string_check(ed, result->istr));
+
+   eet_close(ef);
+
+   /* Attempt to replace etbt by the correct one. */
+   etbt.i = EET_TEST_INT;
+
+   ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
+   fail_if(!ef);
+
+   fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
+
+   result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
+   fail_if(!result);
+
+   /* Test the resulting data. */
+   fail_if(eet_test_ex_check(result, 0, EINA_FALSE) != 0);
+
+   eet_close(ef);
+
+   /* Read back the data. */
+   ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
+   fail_if(!ef);
+
+   fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY2, &etbt, 0));
+
+   result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
+   fail_if(!result);
+
+   /* Test string space. */
+   ed = eet_dictionary_get(ef);
+   fail_if(!ed);
+
+   fail_if(!eet_dictionary_string_check(ed, result->str));
+   fail_if(eet_dictionary_string_check(ed, result->istr));
+
+   /* Test the resulting data. */
+   fail_if(eet_test_ex_check(result, 0, EINA_FALSE) != 0);
+   fail_if(eet_test_ex_check(eina_list_data_get(result->list), 1, EINA_FALSE) != 0);
+   fail_if(eina_list_data_get(result->ilist) == NULL);
+   fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
+   fail_if(eina_list_data_get(result->slist) == NULL);
+   fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
+   fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
+   fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
+   fail_if(strcmp(result->charray[0], "test") != 0);
+
+   test = 0;
+   if (result->hash)
+     eina_hash_foreach(result->hash, func, &test);
+
+   fail_if(test != 0);
+   if (result->ihash)
+     eina_hash_foreach(result->ihash, func7, &test);
+
+   fail_if(test != 0);
+
+   list = eet_list(ef, "keys/*", &size);
+   fail_if(eet_num_entries(ef) != 2);
+   fail_if(size != 2);
+   fail_if(!(strcmp(list[0],
+                    EET_TEST_FILE_KEY1) == 0 &&
+             strcmp(list[1], EET_TEST_FILE_KEY2) == 0)
+           && !(strcmp(list[0],
+                       EET_TEST_FILE_KEY2) == 0 &&
+                strcmp(list[1], EET_TEST_FILE_KEY1) == 0));
+   free(list);
+
+   fail_if(eet_delete(ef, NULL) != 0);
+   fail_if(eet_delete(NULL, EET_TEST_FILE_KEY1) != 0);
+   fail_if(eet_delete(ef, EET_TEST_FILE_KEY1) == 0);
+
+   list = eet_list(ef, "keys/*", &size);
+   fail_if(size != 1);
+   fail_if(eet_num_entries(ef) != 1);
+
+   /* Test some more wrong case */
+   fail_if(eet_data_read(ef, edd, "plop") != NULL);
+   fail_if(eet_data_read(ef, edd, EET_TEST_FILE_KEY1) != NULL);
+
+   /* Reinsert and reread data */
+   fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
+   fail_if(eet_data_read(ef, edd, EET_TEST_FILE_KEY1) == NULL);
+   fail_if(eet_read_direct(ef, EET_TEST_FILE_KEY1, &size) == NULL);
+
+   eet_close(ef);
+
+   fail_if(unlink(file) != 0);
+
+   eet_shutdown();
+}
+END_TEST
+
+START_TEST(eet_test_file_data_dump)
+{
+   Eet_Data_Descriptor *edd;
+   Eet_Test_Ex_Type *result;
+   Eet_Data_Descriptor_Class eddc;
+   Eet_Test_Ex_Type etbt;
+   Eet_File *ef;
+   char *string1;
+   char *file;
+   int test;
+   int tmpfd;
+
+   file = strdup("/tmp/eet_suite_testXXXXXX");
+
+   eet_init();
+
+   eet_test_ex_set(&etbt, 0);
+   etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
+   etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
+   etbt.hash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.hash, EET_TEST_KEY1, eet_test_ex_set(NULL, 2));
+   eina_hash_add(etbt.hash, EET_TEST_KEY2, eet_test_ex_set(NULL, 2));
+   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
+   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
+   etbt.ihash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
+   eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
+   etbt.slist = eina_list_prepend(NULL, "test");
+   etbt.shash = eina_hash_string_superfast_new(NULL);
+   eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
+   memset(&etbt.charray, 0, sizeof(etbt.charray));
+   etbt.charray[0] = "test";
+
+   eet_eina_file_data_descriptor_class_set(&eddc, sizeof (eddc),
+                                           "Eet_Test_Ex_Type",
+                                           sizeof(Eet_Test_Ex_Type));
+
+   edd = eet_data_descriptor_file_new(&eddc);
+   fail_if(!edd);
+
+   eet_build_ex_descriptor(edd, EINA_FALSE);
+
+   fail_if(-1 == (tmpfd = mkstemp(file)));
+   fail_if(!!close(tmpfd));
+
+   /* Save the encoded data in a file. */
+   ef = eet_open(file, EET_FILE_MODE_WRITE);
+   fail_if(!ef);
+
+   fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
+
+   eet_close(ef);
+
+   /* Use dump/undump in the middle */
+   ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
+   fail_if(!ef);
+
+   string1 = NULL;
+   fail_if(eet_data_dump(ef, EET_TEST_FILE_KEY1, append_string, &string1) != 1);
+   fail_if(eet_delete(ef, EET_TEST_FILE_KEY1) == 0);
+   fail_if(!eet_data_undump(ef, EET_TEST_FILE_KEY1, string1, strlen(string1), 1));
+
+   eet_close(ef);
+
+   /* Test the correctness of the reinsertion. */
+   ef = eet_open(file, EET_FILE_MODE_READ);
+   fail_if(!ef);
+
+   result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
+   fail_if(!result);
+
+   eet_close(ef);
+
+   /* Test the resulting data. */
+   fail_if(eet_test_ex_check(result, 0, EINA_TRUE) != 0);
+   fail_if(eet_test_ex_check(eina_list_data_get(result->list), 1, EINA_TRUE) != 0);
+   fail_if(eina_list_data_get(result->ilist) == NULL);
+   fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
+   fail_if(eina_list_data_get(result->slist) == NULL);
+   fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
+   fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
+   fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
+   fail_if(strcmp(result->charray[0], "test") != 0);
+
+   test = 0;
+   _dump_call = EINA_TRUE;
+   if (result->hash)
+     eina_hash_foreach(result->hash, func, &test);
+   _dump_call = EINA_FALSE;
+
+   fail_if(test != 0);
+   if (result->ihash)
+     eina_hash_foreach(result->ihash, func7, &test);
+
+   fail_if(test != 0);
+
+   fail_if(unlink(file) != 0);
+
+   eet_shutdown();
+}
+END_TEST
+
+START_TEST(eet_test_file_fp)
+{
+   char *file;
+   Eet_Data_Descriptor_Class eddc;
+   Eet_Data_Descriptor *edd_5FP;
+   Eet_Data_Descriptor *edd_5DBL;
+   Eet_File *ef;
+   Eet_5FP origin;
+   Eet_5DBL *convert;
+   Eet_5FP *build;
+   int tmpfd;
+
+   file = strdup("/tmp/eet_suite_testXXXXXX");
+
+   eet_init();
+
+   EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_5FP);
+   edd_5FP = eet_data_descriptor_file_new(&eddc);
+
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp32", fp32, EET_T_F32P32);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp16", fp16, EET_T_F16P16);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp8", fp8, EET_T_F8P24);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f1", f1, EET_T_F32P32);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f0", f0, EET_T_F32P32);
+
+   eet_eina_file_data_descriptor_class_set(&eddc, sizeof (eddc), "Eet_5FP", sizeof (Eet_5DBL));
+   edd_5DBL = eet_data_descriptor_file_new(&eddc);
+
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp32", fp32, EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp16", fp16, EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp8", fp8, EET_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f1", f1, EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f0", f0, EET_T_DOUBLE);
+
+   origin.fp32 = eina_f32p32_double_from(1.125);
+   origin.fp16 = eina_f16p16_int_from(2000);
+   origin.fp8 = eina_f8p24_int_from(125);
+   origin.f1 = eina_f32p32_int_from(1);
+   origin.f0 = 0;
+
+   fail_if(-1 == (tmpfd = mkstemp(file)));
+   fail_if(!!close(tmpfd));
+
+   ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
+   fail_if(!ef);
+
+   fail_if(!eet_data_write(ef, edd_5FP, EET_TEST_FILE_KEY1, &origin, 1));
+
+   build = eet_data_read(ef, edd_5FP, EET_TEST_FILE_KEY1);
+   fail_if(!build);
+
+   convert = eet_data_read(ef, edd_5DBL, EET_TEST_FILE_KEY1);
+   fail_if(!convert);
+
+   fail_if(build->fp32 != eina_f32p32_double_from(1.125));
+   fail_if(build->fp16 != eina_f16p16_int_from(2000));
+   fail_if(build->fp8 != eina_f8p24_int_from(125));
+   fail_if(build->f1 != eina_f32p32_int_from(1));
+   fail_if(build->f0 != 0);
+
+   fail_if(convert->fp32 != 1.125);
+   fail_if(convert->fp16 != 2000);
+   fail_if(convert->fp8 != 125);
+   fail_if(convert->f1 != 1);
+   fail_if(convert->f0 != 0);
+
+   eet_close(ef);
+
+   fail_if(unlink(file) != 0);
+
+   eet_shutdown();
+}
+END_TEST
+
+void eet_test_file(TCase *tc)
+{
+   tcase_add_test(tc, eet_test_file_simple_write);
+   tcase_add_test(tc, eet_test_file_data);
+   tcase_add_test(tc, eet_test_file_data_dump);
+   tcase_add_test(tc, eet_test_file_fp);
+}
diff --git a/src/tests/eet/eet_test_identity.c b/src/tests/eet/eet_test_identity.c
new file mode 100644 (file)
index 0000000..4e445d5
--- /dev/null
@@ -0,0 +1,248 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include <Eina.h>
+#include <Eet.h>
+
+#include "eet_suite.h"
+#include "eet_test_common.h"
+
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+static char _key_pem[PATH_MAX] = "";
+static char _cert_pem[PATH_MAX] = "";
+static char _key_enc[PATH_MAX] = "";
+static char _key_enc_pem[PATH_MAX] = "";
+static char _key_enc_none_pem[PATH_MAX] = "";
+
+static int
+pass_get(char            *pass,
+         int              size,
+         EINA_UNUSED int   rwflags,
+         EINA_UNUSED void *u)
+{
+   memset(pass, 0, size);
+
+   if ((int)strlen("password") > size)
+     return 0;
+
+   snprintf(pass, size, "%s", "password");
+   return strlen(pass);
+}
+
+static int
+badpass_get(char            *pass,
+            int              size,
+            EINA_UNUSED int   rwflags,
+            EINA_UNUSED void *u)
+{
+   memset(pass, 0, size);
+
+   if ((int)strlen("bad password") > size)
+     return 0;
+
+   snprintf(pass, size, "%s", "bad password");
+   return strlen(pass);
+}
+
+START_TEST(eet_test_identity_simple)
+{
+   const char *buffer = "Here is a string of data to save !";
+   const void *tmp;
+   Eet_File *ef;
+   Eet_Key *k;
+   FILE *noread;
+   char *test;
+   char *file;
+   int size;
+   int fd;
+
+   file = strdup("/tmp/eet_suite_testXXXXXX");
+
+   eet_init();
+
+   fail_if(-1 == (fd = mkstemp(file)));
+   fail_if(!!close(fd));
+   fail_if(!(noread = fopen("/dev/null", "wb")));
+
+   /* Sign an eet file. */
+   ef = eet_open(file, EET_FILE_MODE_WRITE);
+   fail_if(!ef);
+
+   fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 0));
+
+   k = eet_identity_open(_cert_pem, _key_pem, NULL);
+   fail_if(!k);
+
+   fail_if(eet_identity_set(ef, k) != EET_ERROR_NONE);
+   eet_identity_print(k, noread);
+
+   eet_close(ef);
+
+   /* Open a signed file. */
+   ef = eet_open(file, EET_FILE_MODE_READ);
+   fail_if(!ef);
+
+   /* check that the certificates match */
+   fail_if(!eet_identity_verify(ef, _cert_pem));
+
+   test = eet_read(ef, "keys/tests", &size);
+   fail_if(!test);
+   fail_if(size != (int)strlen(buffer) + 1);
+
+   fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
+
+   tmp = eet_identity_x509(ef, &size);
+   fail_if(tmp == NULL);
+
+   eet_identity_certificate_print(tmp, size, noread);
+
+   eet_close(ef);
+
+   /* As we are changing file contain in less than 1s, this could get unnoticed
+      by eet cache system. */
+   eet_clearcache();
+
+   /* Corrupting the file. */
+   fd = open(file, O_WRONLY | O_BINARY);
+   fail_if(fd < 0);
+
+   fail_if(lseek(fd, 200, SEEK_SET) != 200);
+   fail_if(write(fd, "42", 2) != 2);
+   fail_if(lseek(fd, 50, SEEK_SET) != 50);
+   fail_if(write(fd, "42", 2) != 2);
+   fail_if(lseek(fd, 88, SEEK_SET) != 88);
+   fail_if(write(fd, "42", 2) != 2);
+
+   close(fd);
+
+   /* Attempt to open a modified file. */
+   ef = eet_open(file, EET_FILE_MODE_READ);
+   fail_if(ef);
+
+   fail_if(unlink(file) != 0);
+
+   eet_shutdown();
+}
+END_TEST
+
+START_TEST(eet_test_identity_open_simple)
+{
+   Eet_Key *k = NULL;
+
+   eet_init();
+
+   k = eet_identity_open(_cert_pem, _key_pem, NULL);
+   fail_if(!k);
+
+   if (k)
+     eet_identity_close(k);
+
+   eet_shutdown();
+}
+END_TEST
+
+START_TEST(eet_test_identity_open_pkcs8)
+{
+   Eet_Key *k = NULL;
+
+   eet_init();
+
+   k = eet_identity_open(_cert_pem, _key_enc_none_pem, NULL);
+   fail_if(!k);
+
+   if (k)
+     eet_identity_close(k);
+
+   eet_shutdown();
+}
+END_TEST
+
+START_TEST(eet_test_identity_open_pkcs8_enc)
+{
+   Eet_Key *k = NULL;
+
+   eet_init();
+
+   k = eet_identity_open(_cert_pem, _key_enc_pem, NULL);
+   fail_if(k);
+
+   if (k)
+     eet_identity_close(k);
+
+   k = eet_identity_open(_cert_pem, _key_enc_pem, &badpass_get);
+   fail_if(k);
+
+   if (k)
+     eet_identity_close(k);
+
+   k = eet_identity_open(_cert_pem, _key_enc_pem, &pass_get);
+   fail_if(!k);
+
+   if (k)
+     eet_identity_close(k);
+
+   eet_shutdown();
+}
+END_TEST
+
+static const char *_cert_dir_find(const char *argv0)
+{
+   static char base[PATH_MAX] = "";
+   char path[PATH_MAX];
+   struct stat st;
+
+   eina_strlcpy(base, TESTS_SRC_DIR, sizeof(base));
+   eina_str_join(path, sizeof(path), '/', base, "key.pem");
+   if (stat(path, &st) == 0)
+     return base;
+
+   if (base[0] != '/')
+     {
+        snprintf(base, sizeof(base), "%s/%s", TESTS_WD, TESTS_SRC_DIR);
+        eina_str_join(path, sizeof(path), '/', base, "key.pem");
+        if (stat(path, &st) == 0)
+          return base;
+     }
+
+   eina_strlcpy(base, argv0, sizeof(base));
+   do
+     {
+        char *p = strrchr(base, '/');
+        if (!p)
+          {
+             base[0] = '\0';
+             break;
+          }
+        *p = '\0';
+        eina_str_join(path, sizeof(path), '/', base, "key.pem");
+     }
+   while (stat(path, &st) != 0);
+
+   return base;
+}
+
+void eet_test_identity(TCase *tc)
+{
+   const char *base;
+
+   base = _cert_dir_find(argv0);
+   eina_str_join(_key_pem, sizeof(_key_pem), '/', base, "key.pem");
+   eina_str_join(_cert_pem, sizeof(_cert_pem), '/', base,"cert.pem");
+   eina_str_join(_key_enc, sizeof(_key_enc), '/', base, "key.enc");
+   eina_str_join(_key_enc_pem, sizeof(_key_enc_pem), '/', base, "key_enc.pem");
+   eina_str_join(_key_enc_none_pem, sizeof(_key_enc_none_pem), '/',
+                 base, "key_enc_none.pem");
+
+   tcase_add_test(tc, eet_test_identity_simple);
+   tcase_add_test(tc, eet_test_identity_open_simple);
+   tcase_add_test(tc, eet_test_identity_open_pkcs8);
+   tcase_add_test(tc, eet_test_identity_open_pkcs8_enc);
+}
diff --git a/src/tests/eet/eet_test_image.c b/src/tests/eet/eet_test_image.c
new file mode 100644 (file)
index 0000000..f069697
--- /dev/null
@@ -0,0 +1,502 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <Eina.h>
+#include <Eet.h>
+
+#include "eet_suite.h"
+#include "eet_test_common.h"
+
+#define IM0 0x00112233
+#define IM1 0x44556677
+#define IM2 0x8899aabb
+#define IM3 0xccddeeff
+
+typedef struct _Eet_Test_Image Eet_Test_Image;
+struct _Eet_Test_Image
+{
+   unsigned int w;
+   unsigned int h;
+   int          alpha;
+   unsigned int color[64];
+};
+
+static const Eet_Test_Image test_noalpha = {
+   8, 8, 0,
+   {
+      0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
+      0x000000AA, 0x00110000,
+      0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
+      0x00110000, 0x00AA0000,
+      0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
+      0x00AA0000, 0x0000AA00,
+      0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
+      0x0000AA00, 0x000000AA,
+      0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
+      0x000000AA, 0x00110000,
+      0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
+      0x00110000, 0x00AA0000,
+      0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
+      0x00AA0000, 0x0000AA00,
+      0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
+      0x0000AA00, 0x000000AA
+   }
+};
+
+static const Eet_Test_Image test_alpha = {
+   8, 8, 1,
+   {
+      0x0FAA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
+      0x000000AA, 0x0F110000,
+      0x0000AA00, 0x0F0000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
+      0x0F110000, 0x00AA0000,
+      0x000000AA, 0x00110000, 0x0FAA0000, 0x0000AA00, 0x000000AA, 0x0F110000,
+      0x00AA0000, 0x0000AA00,
+      0x00110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA, 0x0F110000, 0x00AA0000,
+      0x0000AA00, 0x000000AA,
+      0x00AA0000, 0x0000AA00, 0x000000AA, 0x0F110000, 0x0FAA0000, 0x0000AA00,
+      0x000000AA, 0x00110000,
+      0x0000AA00, 0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA,
+      0x00110000, 0x00AA0000,
+      0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
+      0x0FAA0000, 0x0000AA00,
+      0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
+      0x0000AA00, 0x0F0000AA
+   }
+};
+
+START_TEST(eet_test_image_normal)
+{
+   Eet_File *ef;
+   char *file;
+   unsigned int *data;
+   int compress;
+   int quality;
+   int result;
+   Eet_Image_Encoding lossy;
+   int alpha;
+   unsigned int w;
+   unsigned int h;
+   int tmpfd;
+
+   file = strdup("/tmp/eet_suite_testXXXXXX");
+
+   eet_init();
+
+   fail_if(-1 == (tmpfd = mkstemp(file)));
+   fail_if(!!close(tmpfd));
+
+   /* Save the encoded data in a file. */
+   ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
+   fail_if(!ef);
+
+   result = eet_data_image_write(ef,
+                                 EET_TEST_FILE_IMAGE "0",
+                                 test_noalpha.color,
+                                 test_noalpha.w,
+                                 test_noalpha.h,
+                                 test_noalpha.alpha,
+                                 0,
+                                 100,
+                                 0);
+   fail_if(result == 0);
+
+   result = eet_data_image_write(ef,
+                                 EET_TEST_FILE_IMAGE "1",
+                                 test_noalpha.color,
+                                 test_noalpha.w,
+                                 test_noalpha.h,
+                                 test_noalpha.alpha,
+                                 5,
+                                 100,
+                                 0);
+   fail_if(result == 0);
+
+   result = eet_data_image_write(ef,
+                                 EET_TEST_FILE_IMAGE "2",
+                                 test_noalpha.color,
+                                 test_noalpha.w,
+                                 test_noalpha.h,
+                                 test_noalpha.alpha,
+                                 9,
+                                 100,
+                                 0);
+   fail_if(result == 0);
+
+   result = eet_data_image_write(ef,
+                                 EET_TEST_FILE_IMAGE "3",
+                                 test_noalpha.color,
+                                 test_noalpha.w,
+                                 test_noalpha.h,
+                                 test_noalpha.alpha,
+                                 0,
+                                 100,
+                                 1);
+   fail_if(result == 0);
+
+   result = eet_data_image_write(ef,
+                                 EET_TEST_FILE_IMAGE "4",
+                                 test_noalpha.color,
+                                 test_noalpha.w,
+                                 test_noalpha.h,
+                                 test_noalpha.alpha,
+                                 0,
+                                 60,
+                                 1);
+   fail_if(result == 0);
+
+   result = eet_data_image_write(ef,
+                                 EET_TEST_FILE_IMAGE "5",
+                                 test_noalpha.color,
+                                 test_noalpha.w,
+                                 test_noalpha.h,
+                                 test_noalpha.alpha,
+                                 0,
+                                 10,
+                                 1);
+   fail_if(result == 0);
+
+   result = eet_data_image_write(ef,
+                                 EET_TEST_FILE_IMAGE "6",
+                                 test_noalpha.color,
+                                 test_noalpha.w,
+                                 test_noalpha.h,
+                                 test_noalpha.alpha,
+                                 0,
+                                 0,
+                                 1);
+   fail_if(result == 0);
+
+   result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "7", test_alpha.color,
+                                 test_alpha.w, test_alpha.h, test_alpha.alpha,
+                                 9, 100, 0);
+   fail_if(result == 0);
+
+   result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "8", test_alpha.color,
+                                 test_alpha.w, test_alpha.h, test_alpha.alpha,
+                                 0, 80, 1);
+   fail_if(result == 0);
+
+   result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "9", test_alpha.color,
+                                 test_alpha.w, test_alpha.h, test_alpha.alpha,
+                                 0, 100, 1);
+   fail_if(result == 0);
+
+   data = eet_data_image_read(ef,
+                              EET_TEST_FILE_IMAGE "2",
+                              &w,
+                              &h,
+                              &alpha,
+                              &compress,
+                              &quality,
+                              &lossy);
+   fail_if(data == NULL);
+   fail_if(w != test_noalpha.w);
+   fail_if(h != test_noalpha.h);
+   fail_if(alpha != test_noalpha.alpha);
+   fail_if(compress != 9);
+   fail_if(lossy != 0);
+   fail_if(data[0] != test_noalpha.color[0]);
+   free(data);
+
+   result = eet_data_image_header_read(ef,
+                                       EET_TEST_FILE_IMAGE "2",
+                                       &w,
+                                       &h,
+                                       &alpha,
+                                       &compress,
+                                       &quality,
+                                       &lossy);
+   fail_if(result == 0);
+   fail_if(w != test_noalpha.w);
+   fail_if(h != test_noalpha.h);
+   fail_if(alpha != test_noalpha.alpha);
+   fail_if(compress != 9);
+   fail_if(lossy != 0);
+
+   eet_close(ef);
+
+   /* Test read of image */
+   ef = eet_open(file, EET_FILE_MODE_READ);
+   fail_if(!ef);
+
+   result = eet_data_image_header_read(ef,
+                                       EET_TEST_FILE_IMAGE "0",
+                                       &w,
+                                       &h,
+                                       &alpha,
+                                       &compress,
+                                       &quality,
+                                       &lossy);
+   fail_if(result == 0);
+   fail_if(w != test_noalpha.w);
+   fail_if(h != test_noalpha.h);
+   fail_if(alpha != test_noalpha.alpha);
+   fail_if(compress != 0);
+   fail_if(lossy != 0);
+
+   data = malloc(w * h * 4);
+   fail_if(data == NULL);
+   result = eet_data_image_read_to_surface(ef,
+                                           EET_TEST_FILE_IMAGE "0",
+                                           4,
+                                           4,
+                                           data,
+                                           2,
+                                           2,
+                                           w * 4,
+                                           &alpha,
+                                           &compress,
+                                           &quality,
+                                           &lossy);
+   fail_if(result != 1);
+   fail_if(alpha != test_noalpha.alpha);
+   fail_if(compress != 0);
+   fail_if(quality != 100);
+   fail_if(lossy != 0);
+   fail_if(data[0] != test_noalpha.color[4 + 4 * w]);
+   free(data);
+
+   data = malloc(w * h * 4);
+   fail_if(data == NULL);
+   result = eet_data_image_read_to_surface(ef,
+                                           EET_TEST_FILE_IMAGE "0",
+                                           0,
+                                           0,
+                                           data,
+                                           w,
+                                           h,
+                                           w * 4,
+                                           &alpha,
+                                           &compress,
+                                           &quality,
+                                           &lossy);
+   fail_if(result != 1);
+   fail_if(alpha != test_noalpha.alpha);
+   fail_if(compress != 0);
+   fail_if(quality != 100);
+   fail_if(lossy != 0);
+   fail_if(data[0] != test_noalpha.color[0]);
+   free(data);
+
+   data = eet_data_image_read(ef,
+                              EET_TEST_FILE_IMAGE "1",
+                              &w,
+                              &h,
+                              &alpha,
+                              &compress,
+                              &quality,
+                              &lossy);
+   fail_if(data == NULL);
+   fail_if(w != test_noalpha.w);
+   fail_if(h != test_noalpha.h);
+   fail_if(alpha != test_noalpha.alpha);
+   fail_if(compress != 5);
+   fail_if(quality != 100);
+   fail_if(lossy != 0);
+   fail_if(data[0] != test_noalpha.color[0]);
+   free(data);
+
+   data = eet_data_image_read(ef,
+                              EET_TEST_FILE_IMAGE "2",
+                              &w,
+                              &h,
+                              &alpha,
+                              &compress,
+                              &quality,
+                              &lossy);
+   fail_if(data == NULL);
+   fail_if(w != test_noalpha.w);
+   fail_if(h != test_noalpha.h);
+   fail_if(alpha != test_noalpha.alpha);
+   fail_if(compress != 9);
+   fail_if(lossy != 0);
+   fail_if(data[0] != test_noalpha.color[0]);
+   free(data);
+
+   data = eet_data_image_read(ef,
+                              EET_TEST_FILE_IMAGE "3",
+                              &w,
+                              &h,
+                              &alpha,
+                              &compress,
+                              &quality,
+                              &lossy);
+   fail_if(data == NULL);
+   fail_if(w != test_noalpha.w);
+   fail_if(h != test_noalpha.h);
+   fail_if(alpha != test_noalpha.alpha);
+   fail_if(lossy != 1);
+   free(data);
+
+   data = eet_data_image_read(ef,
+                              EET_TEST_FILE_IMAGE "5",
+                              &w,
+                              &h,
+                              &alpha,
+                              &compress,
+                              &quality,
+                              &lossy);
+   fail_if(data == NULL);
+   fail_if(w != test_noalpha.w);
+   fail_if(h != test_noalpha.h);
+   fail_if(alpha != test_noalpha.alpha);
+   fail_if(lossy != 1);
+   free(data);
+
+   data = eet_data_image_read(ef,
+                              EET_TEST_FILE_IMAGE "6",
+                              &w,
+                              &h,
+                              &alpha,
+                              &compress,
+                              &quality,
+                              &lossy);
+   fail_if(data == NULL);
+   fail_if(w != test_noalpha.w);
+   fail_if(h != test_noalpha.h);
+   fail_if(alpha != test_noalpha.alpha);
+   fail_if(lossy != 1);
+   free(data);
+
+   result = eet_data_image_header_read(ef,
+                                       EET_TEST_FILE_IMAGE "7",
+                                       &w,
+                                       &h,
+                                       &alpha,
+                                       &compress,
+                                       &quality,
+                                       &lossy);
+   fail_if(result == 0);
+   fail_if(w != test_alpha.w);
+   fail_if(h != test_alpha.h);
+   fail_if(alpha != test_alpha.alpha);
+   fail_if(compress != 9);
+   fail_if(lossy != 0);
+
+   data = eet_data_image_read(ef,
+                              EET_TEST_FILE_IMAGE "7",
+                              &w,
+                              &h,
+                              &alpha,
+                              &compress,
+                              &quality,
+                              &lossy);
+   fail_if(data == NULL);
+   fail_if(w != test_alpha.w);
+   fail_if(h != test_alpha.h);
+   fail_if(alpha != test_alpha.alpha);
+   fail_if(compress != 9);
+   fail_if(lossy != 0);
+   fail_if(data[0] != test_alpha.color[0]);
+   free(data);
+
+   result = eet_data_image_header_read(ef,
+                                       EET_TEST_FILE_IMAGE "9",
+                                       &w,
+                                       &h,
+                                       &alpha,
+                                       &compress,
+                                       &quality,
+                                       &lossy);
+   fail_if(result == 0);
+   fail_if(w != test_alpha.w);
+   fail_if(h != test_alpha.h);
+   fail_if(alpha != test_alpha.alpha);
+   fail_if(lossy != 1);
+
+   data = eet_data_image_read(ef,
+                              EET_TEST_FILE_IMAGE "9",
+                              &w,
+                              &h,
+                              &alpha,
+                              &compress,
+                              &quality,
+                              &lossy);
+   fail_if(data == NULL);
+   fail_if(w != test_alpha.w);
+   fail_if(h != test_alpha.h);
+   fail_if(alpha != test_alpha.alpha);
+   fail_if(lossy != 1);
+   free(data);
+
+   eet_close(ef);
+
+   fail_if(unlink(file) != 0);
+
+   eet_shutdown();
+}
+END_TEST
+
+START_TEST(eet_test_image_small)
+{
+   char *file;
+   unsigned int image[4];
+   unsigned int *data;
+   Eet_File *ef;
+   unsigned int w;
+   unsigned int h;
+   int alpha;
+   int compression;
+   int quality;
+   Eet_Image_Encoding lossy;
+   int result;
+   int tmpfd;
+
+   file = strdup("/tmp/eet_suite_testXXXXXX");
+
+   image[0] = IM0;
+   image[1] = IM1;
+   image[2] = IM2;
+   image[3] = IM3;
+
+   eet_init();
+
+   fail_if(-1 == (tmpfd = mkstemp(file)));
+   fail_if(!!close(tmpfd));
+
+   ef = eet_open(file, EET_FILE_MODE_WRITE);
+   fail_if(!ef);
+
+   result = eet_data_image_write(ef, "/images/test", image, 2, 2, 1, 9, 100, 0);
+   fail_if(result == 0);
+
+   eet_close(ef);
+
+   ef = eet_open(file, EET_FILE_MODE_READ);
+   fail_if(!ef);
+
+   data = (unsigned int *)eet_data_image_read(ef,
+                                              "/images/test",
+                                              &w,
+                                              &h,
+                                              &alpha,
+                                              &compression,
+                                              &quality,
+                                              &lossy);
+   fail_if(data == NULL);
+
+   eet_close(ef);
+
+   fail_if(unlink(file) != 0);
+
+   fail_if(data[0] != IM0);
+   fail_if(data[1] != IM1);
+   fail_if(data[2] != IM2);
+   fail_if(data[3] != IM3);
+
+   free(data);
+
+   eet_shutdown();
+}
+END_TEST
+
+void eet_test_image(TCase *tc)
+{
+   tcase_add_test(tc, eet_test_image_normal);
+   tcase_add_test(tc, eet_test_image_small);
+}
diff --git a/src/tests/eet/eet_test_init.c b/src/tests/eet/eet_test_init.c
new file mode 100644 (file)
index 0000000..9343cc1
--- /dev/null
@@ -0,0 +1,24 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <Eet.h>
+
+#include "eet_suite.h"
+
+START_TEST(_eet_test_init)
+{
+   int ret;
+
+   ret = eet_init();
+   fail_if(ret != 1);
+
+   ret = eet_shutdown();
+   fail_if(ret != 0);
+}
+END_TEST
+
+void eet_test_init(TCase *tc)
+{
+   tcase_add_test(tc, _eet_test_init);
+}