+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif /* ifdef HAVE_CONFIG_H */
+
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
-#include <check.h>
+#include <Eina.h>
-#ifdef HAVE_CONFIG_H
-# include <config.h>
+#ifdef EINA_HAVE_THREADS
+#if ((!defined(_WIN32_WCE)) && (!defined(_WIN32)))
+# include <pthread.h>
+# define _EET_INCLUDED_PTHREAD
#endif
+#endif /* ifdef EINA_HAVE_THREADS */
-#include <Eina.h>
+#include <check.h>
#include "eet_suite.h"
+#define CERT_DIR "src/tests/" TESTS_SRC_DIR
+
START_TEST(eet_test_init)
{
int ret;
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;
+ 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;
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_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;
{
unsigned int w;
unsigned int h;
- int alpha;
- unsigned int color[];
+ 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
- }
+ 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
- }
+ 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)
+_eet_test_basic_set(Eet_Test_Basic_Type *res,
+ int i)
{
res->c = EET_TEST_CHAR;
res->s = EET_TEST_SHORT;
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->f1 = -EET_TEST_FLOAT;
+ res->d = -EET_TEST_DOUBLE;
res->f2 = EET_TEST_FLOAT4;
res->uc = EET_TEST_CHAR;
res->us = EET_TEST_SHORT;
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;
+ 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;
}
-}
+} /* _eet_test_basic_set */
static void
-_eet_test_basic_check(Eet_Test_Basic_Type *result, int i)
+_eet_test_basic_check(Eet_Test_Basic_Type *result,
+ int i)
{
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(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->ul != EET_TEST_LONG_LONG);
tmp = (result->f1 + EET_TEST_FLOAT);
- if (tmp < 0) tmp = -tmp;
+ if (tmp < 0)
+ tmp = -tmp;
+
fail_if(tmp > 0.005);
tmp = (result->f2 - EET_TEST_FLOAT4);
- if (tmp < 0) tmp = -tmp;
+ if (tmp < 0)
+ tmp = -tmp;
+
fail_if(tmp > 0.005);
tmp = (result->d + EET_TEST_DOUBLE);
- if (tmp < 0) tmp = -tmp;
+ if (tmp < 0)
+ tmp = -tmp;
+
fail_if(tmp > 0.00005);
fail_if(result->empty != NULL);
if (i == 0)
{
- Eet_Test_Basic_Type *tmp;
-
- tmp = result->with;
- fail_if(tmp == NULL);
-
- fail_if(tmp->c != EET_TEST_CHAR);
- fail_if(tmp->s != EET_TEST_SHORT);
- fail_if(tmp->i != EET_TEST_INT + i + 1);
- fail_if(tmp->l != (long long) EET_TEST_LONG_LONG);
- fail_if(strcmp(tmp->str, EET_TEST_STRING) != 0);
- fail_if(strcmp(tmp->istr, EET_TEST_STRING) != 0);
- fail_if(tmp->uc != EET_TEST_CHAR);
- fail_if(tmp->us != EET_TEST_SHORT);
- fail_if(tmp->ui != EET_TEST_INT);
- fail_if(tmp->ul != EET_TEST_LONG_LONG);
+ 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);
}
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,
+ "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_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)
{
eddc.name = "Eet_Test_Basic_Type";
eddc.size = sizeof(Eet_Test_Basic_Type);
- edd = eet_data_descriptor2_new(&eddc);
+ edd = eet_data_descriptor_stream_new(&eddc);
fail_if(!edd);
_eet_build_basic_descriptor(edd);
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;
+ 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;
+ 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)
{
eet_test_setup_eddc(&eddc);
eddc.name = "Eet_Test_Basic_Type";
eddc.size = sizeof(Eet_Test_Basic_Type);
- eddb = eet_data_descriptor3_new(&eddc);
+ 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,
+ "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_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);
+ (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);
+ (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);
+ (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);
+ (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);
-}
+ (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)
+static Eet_Test_Ex_Type *
+_eet_test_ex_set(Eet_Test_Ex_Type *res,
+ int offset)
{
- int i;
+ unsigned int i;
- if (!res) res = malloc( sizeof(Eet_Test_Ex_Type));
- if (!res) return NULL;
+ 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->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);
+ _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->sarray2[i] = i * 42 + 1;
+ res->varray1[i] = i * 42 + 1;
}
res->varray1_count = 5;
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)
+_eet_test_ex_check(Eet_Test_Ex_Type *stuff,
+ int offset)
{
double tmp;
unsigned int i;
- if (!stuff) return 1;
+ if (!stuff)
+ return 1;
+
+ if (stuff->c != EET_TEST_CHAR + offset)
+ return 1;
+
+ if (stuff->s != EET_TEST_SHORT + offset)
+ 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;
+ 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;
+ 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 (tmp < 0)
+ tmp = -tmp;
- if (stuff->f2 != - (EET_TEST_FLOAT2 + offset)) return 1;
- if (stuff->d2 != - (EET_TEST_DOUBLE2 + offset)) return 1;
+ if (tmp > 0.00005)
+ return 1;
- if (stuff->f3 != EET_TEST_FLOAT3 + offset) return 1;
- if (stuff->d3 != EET_TEST_DOUBLE3 + offset) return 1;
+ if (stuff->f2 != -(EET_TEST_FLOAT2 + offset))
+ return 1;
- if (stuff->f4 != EET_TEST_FLOAT2 + offset) return 1;
- if (stuff->d4 != EET_TEST_DOUBLE2 + offset) return 1;
+ if (stuff->d2 != -(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->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)
+ 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);
+ {
+ _eet_test_basic_check(stuff->sarray1 + i, i);
+ _eet_test_basic_check(stuff->varray2 + i, i);
+ }
return 0;
-}
+} /* _eet_test_ex_check */
static Eina_Bool
-func(__UNUSED__ const Eina_Hash *hash, const char *key, void *data, void *fdata)
+func(__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)) *res = 1;
+ && strcmp(key, EET_TEST_KEY2) != 0)
+ *res = 1;
+
+ if (_eet_test_ex_check(data, 2))
+ *res = 1;
return EINA_TRUE;
-}
+} /* func */
static Eina_Bool
-func7(__UNUSED__ const Eina_Hash *hash, __UNUSED__ const char *key, void *data, void *fdata)
+func7(__UNUSED__ const Eina_Hash *hash,
+ __UNUSED__ const void *key,
+ void *data,
+ void *fdata)
{
int *res = fdata;
int *val;
val = data;
- if (!val) *res = 1;
- if (*val != 7) *res = 1;
+ if (!val)
+ *res = 1;
+
+ if (*val != 7)
+ *res = 1;
return EINA_TRUE;
-}
+} /* func7 */
START_TEST(eet_test_data_type_encoding_decoding)
{
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_descriptor3_new(&eddc);
+ edd = eet_data_descriptor_file_new(&eddc);
fail_if(!edd);
_eet_build_ex_descriptor(edd);
fail_if(_eet_test_ex_check(result, 0) != 0);
fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
fail_if(eina_list_data_get(result->ilist) == NULL);
- fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
+ 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;
- eina_hash_foreach(result->hash, func, &test);
+ if (result->hash)
+ eina_hash_foreach(result->hash, func, &test);
+
fail_if(test != 0);
- eina_hash_foreach(result->ihash, func7, &test);
+ 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)
+append_string(void *data,
+ const char *str)
{
char **string = data;
int length;
- if (!data) return ;
+ if (!data)
+ return;
length = *string ? strlen(*string) : 0;
*string = realloc(*string, strlen(str) + length + 1);
memcpy((*string) + length, str, strlen(str) + 1);
-}
+} /* append_string */
START_TEST(eet_test_data_type_dump_undump)
{
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_descriptor3_new(&eddc);
+ edd = eet_data_descriptor_file_new(&eddc);
fail_if(!edd);
_eet_build_ex_descriptor(edd);
eet_data_text_dump(transfert1, size1, append_string, &string1);
fail_if(!string1);
- transfert2 = eet_data_text_undump(string1, strlen(string1), &size2);
+ transfert2 = eet_data_text_undump(string1, string1 ? strlen(
+ string1) : 0, &size2);
fail_if(!transfert2 && size2 <= 0);
- fail_if(size1 != size2);
string2 = NULL;
eet_data_text_dump(transfert2, size2, append_string, &string2);
fail_if(!string2);
- fail_if(memcmp(transfert1, transfert2, size1) != 0);
+ 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) != 0);
fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
fail_if(eina_list_data_get(result->ilist) == NULL);
- fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
+ 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;
- eina_hash_foreach(result->hash, func, &test);
+ if (result->hash)
+ eina_hash_foreach(result->hash, func, &test);
+
fail_if(test != 0);
- eina_hash_foreach(result->ihash, func7, &test);
+ if (result->ihash)
+ eina_hash_foreach(result->ihash, func7, &test);
+
fail_if(test != 0);
eet_shutdown();
}
END_TEST
-
START_TEST(eet_file_simple_write)
{
const char *buffer = "Here is a string of data to save !";
eet_init();
- mktemp(file);
+ fail_if(!(file = tmpnam(file)));
fail_if(eet_mode_get(NULL) != EET_FILE_MODE_INVALID);
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);
test = eet_read(ef, "keys/tests", &size);
fail_if(!test);
- fail_if(size != (int) strlen(buffer) + 1);
+ 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) != 1);
+ fail_if(eet_num_entries(ef) != 3);
eet_close(ef);
test = eet_read(ef, "keys/tests", &size);
fail_if(!test);
- fail_if(size != (int) strlen(buffer) + 1);
+ fail_if(size != (int)strlen(buffer) + 1);
fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
fail_if(unlink(file) != 0);
eet_shutdown();
-}
-END_TEST
+} /* START_TEST */
+END_TEST
START_TEST(eet_file_data_test)
{
Eet_Data_Descriptor *edd;
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_descriptor3_new(&eddc);
+ edd = eet_data_descriptor_file_new(&eddc);
fail_if(!edd);
_eet_build_ex_descriptor(edd);
- mktemp(file);
+ fail_if(!(file = tmpnam(file)));
/* Insert an error in etbt. */
etbt.i = 0;
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) != 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, 1));
+ 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);
fail_if(_eet_test_ex_check(result, 0) != 0);
fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
fail_if(eina_list_data_get(result->ilist) == NULL);
- fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
+ 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;
- eina_hash_foreach(result->hash, func, &test);
+ if (result->hash)
+ eina_hash_foreach(result->hash, func, &test);
+
fail_if(test != 0);
- eina_hash_foreach(result->ihash, func7, &test);
+ 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));
+ 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(unlink(file) != 0);
eet_shutdown();
-}
-END_TEST
+} /* START_TEST */
+END_TEST
START_TEST(eet_file_data_dump_test)
{
Eet_Data_Descriptor *edd;
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.hash = eina_hash_string_superfast_new(NULL);
+ 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);
+ eet_eina_file_data_descriptor_class_set(&eddc, sizeof (eddc),
+ "Eet_Test_Ex_Type",
+ sizeof(Eet_Test_Ex_Type));
- edd = eet_data_descriptor3_new(&eddc);
+ edd = eet_data_descriptor_file_new(&eddc);
fail_if(!edd);
_eet_build_ex_descriptor(edd);
- mktemp(file);
+ fail_if(!(file = tmpnam(file)));
/* 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, 1));
+ fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));
eet_close(ef);
fail_if(_eet_test_ex_check(result, 0) != 0);
fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
fail_if(eina_list_data_get(result->ilist) == NULL);
- fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
+ 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;
- eina_hash_foreach(result->hash, func, &test);
+ if (result->hash)
+ eina_hash_foreach(result->hash, func, &test);
+
fail_if(test != 0);
- eina_hash_foreach(result->ihash, func7, &test);
+ 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 */
+END_TEST
START_TEST(eet_image)
{
Eet_File *ef;
unsigned int w;
unsigned int h;
- mktemp(file);
+ eet_init();
+
+ fail_if(!(file = tmpnam(file)));
/* 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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(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);
+ 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);
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);
+ 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);
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);
+ 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);
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);
+ 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(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);
+ 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(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);
+ 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(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);
+ 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(lossy != 1);
free(data);
- data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "5", &w, &h, &alpha, &compress, &quality, &lossy);
+ 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(lossy != 1);
free(data);
- data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "6", &w, &h, &alpha, &compress, &quality, &lossy);
+ 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(lossy != 1);
free(data);
- result = eet_data_image_header_read(ef, EET_TEST_FILE_IMAGE "7", &w, &h, &alpha, &compress, &quality, &lossy);
+ 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(compress != 9);
fail_if(lossy != 0);
- data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "7", &w, &h, &alpha, &compress, &quality, &lossy);
+ 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(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);
+ 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);
+ 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);
eet_close(ef);
+ fail_if(unlink(file) != 0);
+
eet_shutdown();
-}
+} /* START_TEST */
+
END_TEST
#define IM0 0x00112233
eet_init();
- mktemp(file);
+ fail_if(!(file = tmpnam(file)));
ef = eet_open(file, EET_FILE_MODE_WRITE);
fail_if(!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);
+ 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);
free(data);
eet_shutdown();
-}
-END_TEST
+} /* 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;
eet_init();
- mktemp(file);
- chdir("src/tests");
+ fail_if(!(file = tmpnam(file)));
+ /* Hack to fix issue in buildbot. */
+ int chret = chdir(CERT_DIR);
+ if (chret)
+ {
+ static char CWD[1024];
+ getcwd(CWD, 1024);
+ perror(NULL);
+ printf("TAsn: '%s' '%s'\n", CWD, CERT_DIR);
+ }
+ fail_if(chret);
+ fail_if(!(noread = fopen("/dev/null", "w")));
/* Sign an eet file. */
ef = eet_open(file, EET_FILE_MODE_WRITE);
fail_if(!k);
fail_if(eet_identity_set(ef, k) != EET_ERROR_NONE);
+ eet_identity_print(k, noread);
eet_close(ef);
test = eet_read(ef, "keys/tests", &size);
fail_if(!test);
- fail_if(size != (int) strlen(buffer) + 1);
+ 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
fail_if(unlink(file) != 0);
eet_shutdown();
-}
+} /* START_TEST */
+
END_TEST
+START_TEST(eet_identity_open_simple)
+{
+ Eet_Key *k = NULL;
-Suite *
-eet_suite(void)
+ eet_init();
+
+ fail_if(chdir(CERT_DIR));
+
+ 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)
{
- Suite *s;
- TCase *tc;
+ Eet_Key *k = NULL;
- s = suite_create("Eet");
+ eet_init();
- tc = tcase_create("Eet_Init");
- tcase_add_test(tc, eet_test_init);
- suite_add_tcase(s, tc);
+ fail_if(chdir(CERT_DIR));
- 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);
- suite_add_tcase(s, tc);
+ k = eet_identity_open("cert.pem", "key_enc_none.pem", NULL);
+ fail_if(!k);
- 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);
- suite_add_tcase(s, tc);
+ if (k)
+ eet_identity_close(k);
- tc = tcase_create("Eet Image");
- tcase_add_test(tc, eet_image);
- tcase_add_test(tc, eet_small_image);
- suite_add_tcase(s, tc);
+ eet_shutdown();
+} /* START_TEST */
-#ifdef HAVE_SIGNATURE
- tc = tcase_create("Eet Identity");
- tcase_add_test(tc, eet_identity_simple);
- suite_add_tcase(s, tc);
-#endif
+END_TEST
- return s;
+static int
+pass_get(char *pass,
+ int size,
+ __UNUSED__ int rwflags,
+ __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,
+ __UNUSED__ int rwflags,
+ __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();
+
+ fail_if(chdir(CERT_DIR));
+
+ 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
-main(void)
+ eet_init();
+
+ fail_if(!(file = tmpnam(file)));
+ fail_if(chdir(CERT_DIR));
+
+ /* 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
+
+#ifdef EINA_HAVE_THREADS
+
+static Eina_Bool open_worker_stop;
+
+# ifdef _EET_INCLUDED_PTHREAD
+
+static void *
+open_close_worker(void *path)
{
- Suite *s;
- SRunner *sr;
- int failed_count;
+ while (!open_worker_stop)
+ {
+ Eet_File *ef = eet_open((char const *)path, EET_FILE_MODE_READ);
+ if (ef == NULL)
+ pthread_exit("eet_open() failed");
+ else
+ {
+ Eet_Error err_code = eet_close(ef);
+ if (err_code != EET_ERROR_NONE)
+ pthread_exit("eet_close() failed");
+ }
+ }
- s = eet_suite();
- sr = srunner_create(s);
- srunner_run_all(sr, CK_NORMAL);
- failed_count = srunner_ntests_failed(sr);
- srunner_free(sr);
+ pthread_exit(NULL);
+} /* open_close_worker */
- return (failed_count == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+# else /* ifdef _EET_INCLUDED_PTHREAD */
+
+static unsigned int __stdcall
+open_close_worker(void *path)
+{
+ while (!open_worker_stop)
+ {
+ Eet_File *ef = eet_open((char const *)path, EET_FILE_MODE_READ);
+ if (ef == NULL)
+ _endthreadex(-1);
+ else
+ {
+ Eet_Error err_code = eet_close(ef);
+ if (err_code != EET_ERROR_NONE)
+ _endthreadex(-2);
+ }
+ }
+
+ _endthreadex(0);
+} /* open_close_worker */
+
+# endif /* ifdef _EET_INCLUDED_PTHREAD */
+
+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;
+# ifdef _EET_INCLUDED_PTHREAD
+ pthread_t thread;
+# else /* ifdef _EET_INCLUDED_PTHREAD */
+ uintptr_t thread;
+ unsigned int thread_id;
+ DWORD ret;
+# endif /* ifdef _EET_INCLUDED_PTHREAD */
+
+ eet_init();
+ eina_threads_init();
+
+ /* create a file to test with */
+ fail_if(!(file = tmpnam(file)));
+ ef = eet_open(file, EET_FILE_MODE_WRITE);
+ fail_if(!ef);
+ fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 0));
+
+ /* start a thread that repeatedly opens and closes a file */
+ open_worker_stop = 0;
+# ifdef _EET_INCLUDED_PTHREAD
+ pthread_create(&thread, NULL, open_close_worker, file);
+# else /* ifdef _EET_INCLUDED_PTHREAD */
+ thread = _beginthreadex(NULL, 0, open_close_worker, file, 0, &thread_id);
+# endif /* ifdef _EET_INCLUDED_PTHREAD */
+ /* clear the cache repeatedly in this thread */
+ for (n = 0; n < 50000; ++n)
+ {
+ eet_clearcache();
+ }
+
+ /* join the other thread, and fail if it returned an error message */
+ open_worker_stop = 1;
+# ifdef _EET_INCLUDED_PTHREAD
+ fail_if(pthread_join(thread, &thread_ret) != 0);
+ fail_unless(thread_ret == NULL, (char const *)thread_ret);
+# else /* ifdef _EET_INCLUDED_PTHREAD */
+ ret = WaitForSingleObject((HANDLE)thread, INFINITE);
+ fail_if(ret != WAIT_OBJECT_0);
+ fail_if(GetExitCodeThread((HANDLE)thread, &ret) == FALSE);
+ fail_if(ret != 0);
+# endif /* ifdef _EET_INCLUDED_PTHREAD */
+
+ fail_if(unlink(file) != 0);
+
+ eina_threads_shutdown();
+ eet_shutdown();
}
+END_TEST
+
+#endif /* EINA_HAVE_THREADS */
+
+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) != 0);
+ fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 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;
+ fail_if(!eet_connection_node_send(dt->conn, node, NULL));
+ }
+
+ 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_Connection *conn;
+ 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_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);
+
+ /* Create a connection. */
+ conn = eet_connection_new(_eet_connection_read, _eet_connection_write, &ecd);
+ fail_if(!conn);
+
+ /* Init context. */
+ ecd.test = EINA_FALSE;
+ ecd.conn = conn;
+ ecd.edd = edd;
+
+ /* Test the connection. */
+ fail_if(!eet_connection_send(conn, edd, &etbt, NULL));
+
+ fail_if(!ecd.test);
+
+ fail_if(!eet_connection_close(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;
+
+ 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(!(file = tmpnam(file)));
+
+ 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);
+
+ 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_fp);
+ tcase_add_test(tc, eet_test_union);
+ tcase_add_test(tc, eet_test_variant);
+ suite_add_tcase(s, tc);
+
+ 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);
+
+ tc = tcase_create("Eet Image");
+ tcase_add_test(tc, eet_image);
+ tcase_add_test(tc, eet_small_image);
+ suite_add_tcase(s, tc);
+
+#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 */
+
+#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 */
+
+#ifdef EINA_HAVE_THREADS
+ tc = tcase_create("Eet Cache");
+ tcase_add_test(tc, eet_cache_concurrency);
+ suite_add_tcase(s, tc);
+#endif /* ifdef EFL_HAVE_THREADS */
+
+ tc = tcase_create("Eet Connection");
+ tcase_add_test(tc, eet_connection_check);
+ suite_add_tcase(s, tc);
+
+ return s;
+} /* eet_suite */
+
+int
+main(void)
+{
+ Suite *s;
+ SRunner *sr;
+ int failed_count;
+
+ s = eet_suite();
+ sr = srunner_create(s);
+ srunner_run_all(sr, CK_ENV);
+ failed_count = srunner_ntests_failed(sr);
+ srunner_free(sr);
+
+ return (failed_count == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+} /* main */
+