aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/eina/src/tests
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/eina/src/tests')
-rw-r--r--libraries/eina/src/tests/Makefile.am3
-rw-r--r--libraries/eina/src/tests/Makefile.in48
-rw-r--r--libraries/eina/src/tests/eina_suite.c3
-rw-r--r--libraries/eina/src/tests/eina_suite.h1
-rw-r--r--libraries/eina/src/tests/eina_test_clist.c2
-rw-r--r--libraries/eina/src/tests/eina_test_counter.c92
-rw-r--r--libraries/eina/src/tests/eina_test_error.c184
-rw-r--r--libraries/eina/src/tests/eina_test_file.c54
-rw-r--r--libraries/eina/src/tests/eina_test_inlist.c171
-rw-r--r--libraries/eina/src/tests/eina_test_list.c40
-rw-r--r--libraries/eina/src/tests/eina_test_log.c217
-rw-r--r--libraries/eina/src/tests/eina_test_magic.c110
-rw-r--r--libraries/eina/src/tests/eina_test_simple_xml_parser.c6
-rw-r--r--libraries/eina/src/tests/eina_test_ustr.c130
-rw-r--r--libraries/eina/src/tests/eina_test_value.c109
15 files changed, 1104 insertions, 66 deletions
diff --git a/libraries/eina/src/tests/Makefile.am b/libraries/eina/src/tests/Makefile.am
index 7e05ba9..cf500f5 100644
--- a/libraries/eina/src/tests/Makefile.am
+++ b/libraries/eina/src/tests/Makefile.am
@@ -66,7 +66,8 @@ eina_test_strbuf.c \
66eina_test_str.c \ 66eina_test_str.c \
67eina_test_quadtree.c \ 67eina_test_quadtree.c \
68eina_test_simple_xml_parser.c \ 68eina_test_simple_xml_parser.c \
69eina_test_value.c 69eina_test_value.c \
70eina_test_model.c
70 71
71eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la -lm 72eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la -lm
72 73
diff --git a/libraries/eina/src/tests/Makefile.in b/libraries/eina/src/tests/Makefile.in
index c56211a..81e58ba 100644
--- a/libraries/eina/src/tests/Makefile.in
+++ b/libraries/eina/src/tests/Makefile.in
@@ -43,20 +43,24 @@ host_triplet = @host@
43subdir = src/tests 43subdir = src/tests
44DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in 44DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
45ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 45ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
46am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ 46am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \
47 $(top_srcdir)/m4/efl_benchmark.m4 \ 47 $(top_srcdir)/m4/eina/eina_check.m4 \
48 $(top_srcdir)/m4/efl_compiler_flag.m4 \ 48 $(top_srcdir)/m4/common/efl_attribute.m4 \
49 $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ 49 $(top_srcdir)/m4/common/efl_benchmark.m4 \
50 $(top_srcdir)/m4/efl_doxygen.m4 \ 50 $(top_srcdir)/m4/common/efl_compiler_flag.m4 \
51 $(top_srcdir)/m4/efl_examples.m4 \ 51 $(top_srcdir)/m4/common/efl_coverage.m4 \
52 $(top_srcdir)/m4/efl_fnmatch.m4 \ 52 $(top_srcdir)/m4/common/efl_cpu.m4 \
53 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ 53 $(top_srcdir)/m4/common/efl_doxygen.m4 \
54 $(top_srcdir)/m4/efl_threads.m4 \ 54 $(top_srcdir)/m4/common/efl_examples.m4 \
55 $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ 55 $(top_srcdir)/m4/common/efl_fnmatch.m4 \
56 $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ 56 $(top_srcdir)/m4/common/efl_path_max.m4 \
57 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ 57 $(top_srcdir)/m4/common/efl_tests.m4 \
58 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ 58 $(top_srcdir)/m4/common/efl_threads.m4 \
59 $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac 59 $(top_srcdir)/m4/common/efl_voltron.m4 \
60 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
61 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
62 $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
63 $(top_srcdir)/configure.ac
60am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 64am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
61 $(ACLOCAL_M4) 65 $(ACLOCAL_M4)
62mkinstalldirs = $(install_sh) -d 66mkinstalldirs = $(install_sh) -d
@@ -159,7 +163,8 @@ am__eina_suite_SOURCES_DIST = eina_suite.c eina_test_fp.c \
159 eina_test_rectangle.c eina_test_list.c \ 163 eina_test_rectangle.c eina_test_list.c \
160 eina_test_matrixsparse.c eina_test_tiler.c eina_test_strbuf.c \ 164 eina_test_matrixsparse.c eina_test_tiler.c eina_test_strbuf.c \
161 eina_test_str.c eina_test_quadtree.c \ 165 eina_test_str.c eina_test_quadtree.c \
162 eina_test_simple_xml_parser.c eina_test_value.c 166 eina_test_simple_xml_parser.c eina_test_value.c \
167 eina_test_model.c
163@EFL_ENABLE_TESTS_TRUE@am_eina_suite_OBJECTS = eina_suite.$(OBJEXT) \ 168@EFL_ENABLE_TESTS_TRUE@am_eina_suite_OBJECTS = eina_suite.$(OBJEXT) \
164@EFL_ENABLE_TESTS_TRUE@ eina_test_fp.$(OBJEXT) \ 169@EFL_ENABLE_TESTS_TRUE@ eina_test_fp.$(OBJEXT) \
165@EFL_ENABLE_TESTS_TRUE@ eina_test_stringshare.$(OBJEXT) \ 170@EFL_ENABLE_TESTS_TRUE@ eina_test_stringshare.$(OBJEXT) \
@@ -195,7 +200,8 @@ am__eina_suite_SOURCES_DIST = eina_suite.c eina_test_fp.c \
195@EFL_ENABLE_TESTS_TRUE@ eina_test_str.$(OBJEXT) \ 200@EFL_ENABLE_TESTS_TRUE@ eina_test_str.$(OBJEXT) \
196@EFL_ENABLE_TESTS_TRUE@ eina_test_quadtree.$(OBJEXT) \ 201@EFL_ENABLE_TESTS_TRUE@ eina_test_quadtree.$(OBJEXT) \
197@EFL_ENABLE_TESTS_TRUE@ eina_test_simple_xml_parser.$(OBJEXT) \ 202@EFL_ENABLE_TESTS_TRUE@ eina_test_simple_xml_parser.$(OBJEXT) \
198@EFL_ENABLE_TESTS_TRUE@ eina_test_value.$(OBJEXT) 203@EFL_ENABLE_TESTS_TRUE@ eina_test_value.$(OBJEXT) \
204@EFL_ENABLE_TESTS_TRUE@ eina_test_model.$(OBJEXT)
199eina_suite_OBJECTS = $(am_eina_suite_OBJECTS) 205eina_suite_OBJECTS = $(am_eina_suite_OBJECTS)
200@EFL_ENABLE_TESTS_TRUE@eina_suite_DEPENDENCIES = \ 206@EFL_ENABLE_TESTS_TRUE@eina_suite_DEPENDENCIES = \
201@EFL_ENABLE_TESTS_TRUE@ $(top_builddir)/src/lib/libeina.la 207@EFL_ENABLE_TESTS_TRUE@ $(top_builddir)/src/lib/libeina.la
@@ -296,13 +302,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
296EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ 302EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
297EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ 303EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
298EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ 304EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
305EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
299EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ 306EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
300EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ 307EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
301EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ 308EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
302EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ 309EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
303EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ 310EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
304EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ 311EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
305EINA_CPPFLAGS = @EINA_CPPFLAGS@
306EINA_LIBS = @EINA_LIBS@ 312EINA_LIBS = @EINA_LIBS@
307EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ 313EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
308EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ 314EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
@@ -312,6 +318,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@
312EVIL_CFLAGS = @EVIL_CFLAGS@ 318EVIL_CFLAGS = @EVIL_CFLAGS@
313EVIL_LIBS = @EVIL_LIBS@ 319EVIL_LIBS = @EVIL_LIBS@
314EXEEXT = @EXEEXT@ 320EXEEXT = @EXEEXT@
321EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
322EXOTIC_LIBS = @EXOTIC_LIBS@
315FGREP = @FGREP@ 323FGREP = @FGREP@
316GLIB_CFLAGS = @GLIB_CFLAGS@ 324GLIB_CFLAGS = @GLIB_CFLAGS@
317GLIB_LIBS = @GLIB_LIBS@ 325GLIB_LIBS = @GLIB_LIBS@
@@ -347,6 +355,8 @@ PACKAGE_URL = @PACKAGE_URL@
347PACKAGE_VERSION = @PACKAGE_VERSION@ 355PACKAGE_VERSION = @PACKAGE_VERSION@
348PATH_SEPARATOR = @PATH_SEPARATOR@ 356PATH_SEPARATOR = @PATH_SEPARATOR@
349PKG_CONFIG = @PKG_CONFIG@ 357PKG_CONFIG = @PKG_CONFIG@
358PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
359PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
350RANLIB = @RANLIB@ 360RANLIB = @RANLIB@
351SED = @SED@ 361SED = @SED@
352SET_MAKE = @SET_MAKE@ 362SET_MAKE = @SET_MAKE@
@@ -465,7 +475,8 @@ AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_srcdir)/src/include \
465@EFL_ENABLE_TESTS_TRUE@eina_test_str.c \ 475@EFL_ENABLE_TESTS_TRUE@eina_test_str.c \
466@EFL_ENABLE_TESTS_TRUE@eina_test_quadtree.c \ 476@EFL_ENABLE_TESTS_TRUE@eina_test_quadtree.c \
467@EFL_ENABLE_TESTS_TRUE@eina_test_simple_xml_parser.c \ 477@EFL_ENABLE_TESTS_TRUE@eina_test_simple_xml_parser.c \
468@EFL_ENABLE_TESTS_TRUE@eina_test_value.c 478@EFL_ENABLE_TESTS_TRUE@eina_test_value.c \
479@EFL_ENABLE_TESTS_TRUE@eina_test_model.c
469 480
470@EFL_ENABLE_TESTS_TRUE@eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la -lm 481@EFL_ENABLE_TESTS_TRUE@eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la -lm
471@EFL_ENABLE_TESTS_TRUE@cxx_compile_test_SOURCES = cxx_compile_test.cxx 482@EFL_ENABLE_TESTS_TRUE@cxx_compile_test_SOURCES = cxx_compile_test.cxx
@@ -704,6 +715,7 @@ distclean-compile:
704@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_main.Po@am__quote@ 715@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_main.Po@am__quote@
705@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_matrixsparse.Po@am__quote@ 716@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_matrixsparse.Po@am__quote@
706@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_mempool.Po@am__quote@ 717@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_mempool.Po@am__quote@
718@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_model.Po@am__quote@
707@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_module.Po@am__quote@ 719@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_module.Po@am__quote@
708@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_quadtree.Po@am__quote@ 720@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_quadtree.Po@am__quote@
709@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_rbtree.Po@am__quote@ 721@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_rbtree.Po@am__quote@
diff --git a/libraries/eina/src/tests/eina_suite.c b/libraries/eina/src/tests/eina_suite.c
index 648a717..b34d016 100644
--- a/libraries/eina/src/tests/eina_suite.c
+++ b/libraries/eina/src/tests/eina_suite.c
@@ -68,6 +68,7 @@ static const Eina_Test_Case etc[] = {
68 { "Sched", eina_test_sched }, 68 { "Sched", eina_test_sched },
69 { "Simple Xml Parser", eina_test_simple_xml_parser}, 69 { "Simple Xml Parser", eina_test_simple_xml_parser},
70 { "Value", eina_test_value }, 70 { "Value", eina_test_value },
71 { "Model", eina_test_model },
71 { NULL, NULL } 72 { NULL, NULL }
72}; 73};
73 74
@@ -137,6 +138,8 @@ static void _mempool_init(void)
137static void _mempool_shutdown(void) 138static void _mempool_shutdown(void)
138{ 139{
139 eina_module_list_free(_modules); 140 eina_module_list_free(_modules);
141 if (_modules)
142 eina_array_free(_modules);
140 /* TODO delete the list */ 143 /* TODO delete the list */
141 eina_shutdown(); 144 eina_shutdown();
142} 145}
diff --git a/libraries/eina/src/tests/eina_suite.h b/libraries/eina/src/tests/eina_suite.h
index 6eaaec7..d399298 100644
--- a/libraries/eina/src/tests/eina_suite.h
+++ b/libraries/eina/src/tests/eina_suite.h
@@ -56,5 +56,6 @@ void eina_test_fp(TCase *tc);
56void eina_test_sched(TCase *tc); 56void eina_test_sched(TCase *tc);
57void eina_test_simple_xml_parser(TCase *tc); 57void eina_test_simple_xml_parser(TCase *tc);
58void eina_test_value(TCase *tc); 58void eina_test_value(TCase *tc);
59void eina_test_model(TCase *tc);
59 60
60#endif /* EINA_SUITE_H_ */ 61#endif /* EINA_SUITE_H_ */
diff --git a/libraries/eina/src/tests/eina_test_clist.c b/libraries/eina/src/tests/eina_test_clist.c
index 901c0e8..115afc2 100644
--- a/libraries/eina/src/tests/eina_test_clist.c
+++ b/libraries/eina/src/tests/eina_test_clist.c
@@ -6,7 +6,7 @@
6#include <string.h> 6#include <string.h>
7#include <assert.h> 7#include <assert.h>
8 8
9#include <Eina.h> 9#include "Eina.h"
10#include "eina_suite.h" 10#include "eina_suite.h"
11 11
12Eina_Clist string_list = EINA_CLIST_INIT(string_list); 12Eina_Clist string_list = EINA_CLIST_INIT(string_list);
diff --git a/libraries/eina/src/tests/eina_test_counter.c b/libraries/eina/src/tests/eina_test_counter.c
index 2a3f30d..4d956fd 100644
--- a/libraries/eina/src/tests/eina_test_counter.c
+++ b/libraries/eina/src/tests/eina_test_counter.c
@@ -27,6 +27,43 @@
27#include "Eina.h" 27#include "Eina.h"
28#include "eina_safety_checks.h" 28#include "eina_safety_checks.h"
29 29
30#ifdef EINA_SAFETY_CHECKS
31struct log_ctx {
32 const char *msg;
33 const char *fnc;
34 Eina_Bool did;
35};
36
37/* tests should not output on success, just uncomment this for debugging */
38//#define SHOW_LOG 1
39
40static void
41_eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
42{
43 struct log_ctx *ctx = data;
44 va_list cp_args;
45 const char *str;
46
47 va_copy(cp_args, args);
48 str = va_arg(cp_args, const char *);
49 va_end(cp_args);
50
51 ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR);
52 ck_assert_str_eq(fmt, "%s");
53 ck_assert_str_eq(ctx->msg, str);
54 ck_assert_str_eq(ctx->fnc, fnc);
55 ctx->did = EINA_TRUE;
56
57#ifdef SHOW_LOG
58 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
59#else
60 (void)d;
61 (void)file;
62 (void)line;
63#endif
64}
65#endif
66
30START_TEST(eina_counter_simple) 67START_TEST(eina_counter_simple)
31{ 68{
32 Eina_Counter *cnt; 69 Eina_Counter *cnt;
@@ -61,6 +98,7 @@ START_TEST(eina_counter_simple)
61 dump = eina_counter_dump(cnt); 98 dump = eina_counter_dump(cnt);
62 fail_if(!dump); 99 fail_if(!dump);
63 100
101 /* TODO: parse dump and check if it's right */
64 fprintf(stderr, "%s", dump); 102 fprintf(stderr, "%s", dump);
65 103
66 free(dump); 104 free(dump);
@@ -86,13 +124,65 @@ START_TEST(eina_counter_break)
86 124
87#ifdef EINA_SAFETY_CHECKS 125#ifdef EINA_SAFETY_CHECKS
88 { 126 {
127 struct log_ctx ctx;
89 char *dump; 128 char *dump;
90 129
130#define TEST_MAGIC_SAFETY(fn, _msg) \
131 ctx.msg = _msg; \
132 ctx.fnc = fn; \
133 ctx.did = EINA_FALSE
134
135 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
136
137#ifdef SHOW_LOG
91 fprintf(stderr, "you should have a safety check failure below:\n"); 138 fprintf(stderr, "you should have a safety check failure below:\n");
139#endif
140 TEST_MAGIC_SAFETY("eina_counter_new",
141 "safety check failed: name == NULL");
142 cnt = eina_counter_new(NULL);
143 fail_if(cnt);
144 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
145 fail_unless(ctx.did);
146
147#ifdef SHOW_LOG
148 fprintf(stderr, "you should have a safety check failure below:\n");
149#endif
150 TEST_MAGIC_SAFETY("eina_counter_free",
151 "safety check failed: counter == NULL");
152 eina_counter_free(NULL);
153 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
154 fail_unless(ctx.did);
155
156#ifdef SHOW_LOG
157 fprintf(stderr, "you should have a safety check failure below:\n");
158#endif
159 TEST_MAGIC_SAFETY("eina_counter_start",
160 "safety check failed: counter == NULL");
161 eina_counter_start(NULL);
162 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
163 fail_unless(ctx.did);
164
165#ifdef SHOW_LOG
166 fprintf(stderr, "you should have a safety check failure below:\n");
167#endif
168 TEST_MAGIC_SAFETY("eina_counter_stop",
169 "safety check failed: counter == NULL");
170 eina_counter_stop(NULL, 0);
171 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
172 fail_unless(ctx.did);
173
174
175#ifdef SHOW_LOG
176 fprintf(stderr, "you should have a safety check failure below:\n");
177#endif
178 TEST_MAGIC_SAFETY("eina_counter_dump",
179 "safety check failed: counter == NULL");
92 dump = eina_counter_dump(NULL); 180 dump = eina_counter_dump(NULL);
93 fail_if(dump); 181 fail_if(dump);
94 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); 182 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
95 free(dump); 183 fail_unless(ctx.did);
184
185 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
96 } 186 }
97#endif 187#endif
98 188
diff --git a/libraries/eina/src/tests/eina_test_error.c b/libraries/eina/src/tests/eina_test_error.c
index 506f406..57f6950 100644
--- a/libraries/eina/src/tests/eina_test_error.c
+++ b/libraries/eina/src/tests/eina_test_error.c
@@ -33,6 +33,41 @@
33 33
34#define TEST_TEXT "The big test\n" 34#define TEST_TEXT "The big test\n"
35 35
36struct log_ctx {
37 const char *msg;
38 const char *fnc;
39 Eina_Bool did;
40};
41
42/* tests should not output on success, just uncomment this for debugging */
43//#define SHOW_LOG 1
44
45static void
46_eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
47{
48 struct log_ctx *ctx = data;
49 va_list cp_args;
50 const char *str;
51
52 va_copy(cp_args, args);
53 str = va_arg(cp_args, const char *);
54 va_end(cp_args);
55
56 ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR);
57 ck_assert_str_eq(fmt, "%s");
58 ck_assert_str_eq(ctx->msg, str);
59 ck_assert_str_eq(ctx->fnc, fnc);
60 ctx->did = EINA_TRUE;
61
62#ifdef SHOW_LOG
63 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
64#else
65 (void)d;
66 (void)file;
67 (void)line;
68#endif
69}
70
36START_TEST(eina_error_errno) 71START_TEST(eina_error_errno)
37{ 72{
38 int test; 73 int test;
@@ -52,8 +87,157 @@ START_TEST(eina_error_errno)
52} 87}
53END_TEST 88END_TEST
54 89
90START_TEST(eina_error_test_find)
91{
92 int test, r;
93 const char *str;
94
95 eina_init();
96
97 test = eina_error_msg_register(TEST_TEXT);
98 ck_assert_int_ne(test, 0);
99
100 str = eina_error_msg_get(test);
101 fail_unless(str != NULL);
102 ck_assert_str_eq(str, TEST_TEXT);
103
104 eina_error_set(test);
105 fail_if(eina_error_get() != test);
106
107 r = eina_error_find(TEST_TEXT);
108 ck_assert_int_eq(r, test);
109
110 eina_shutdown();
111}
112END_TEST
113
114START_TEST(eina_error_test_modify)
115{
116 int test, r;
117 const char *str, smsg[] = "Do not copy this string";
118
119 eina_init();
120
121 test = eina_error_msg_register("Some Test Error");
122 ck_assert_int_ne(test, 0);
123
124 str = eina_error_msg_get(test);
125 fail_unless(str != NULL);
126 ck_assert_str_eq(str, "Some Test Error");
127
128 eina_error_set(test);
129 fail_if(eina_error_get() != test);
130
131 fail_unless(eina_error_msg_modify(test, "ABCDE"));
132
133 r = eina_error_find("ABCDE");
134 ck_assert_int_eq(r, test);
135
136 test = eina_error_msg_static_register(smsg);
137 ck_assert_int_ne(test, 0);
138
139 str = eina_error_msg_get(test);
140 fail_unless(str != NULL);
141 fail_unless(str == smsg);
142
143 fail_unless(eina_error_msg_modify(test, "Change that!"));
144 r = eina_error_find("Change that!");
145 ck_assert_int_eq(r, test);
146
147 eina_shutdown();
148}
149END_TEST
150
151START_TEST(eina_error_test_lots)
152{
153 char buf[64];
154 int codes[512];
155 unsigned int i;
156
157 eina_init();
158
159 for (i = 0; i < sizeof(codes)/sizeof(codes[0]); i++)
160 {
161 snprintf(buf, sizeof(buf), "myerr-%d", i);
162 codes[i] = eina_error_msg_register(buf);
163 ck_assert_int_ne(codes[i], 0);
164 }
165
166 for (i = 0; i < sizeof(codes)/sizeof(codes[0]); i++)
167 {
168 int found;
169
170 snprintf(buf, sizeof(buf), "myerr-%d", i);
171
172 found = eina_error_find(buf);
173 ck_assert_int_eq(codes[i], found);
174 }
175
176 eina_shutdown();
177}
178END_TEST
179
180#ifdef EINA_SAFETY_CHECKS
181START_TEST(eina_error_test_failures)
182{
183 struct log_ctx ctx;
184
185 eina_init();
186
187 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
188
189#define TEST_MAGIC_SAFETY(fn, _msg) \
190 ctx.msg = _msg; \
191 ctx.fnc = fn; \
192 ctx.did = EINA_FALSE
193
194 TEST_MAGIC_SAFETY("eina_error_msg_register",
195 "safety check failed: msg == NULL");
196 ck_assert_int_eq(eina_error_msg_register(NULL), 0);
197 fail_unless(ctx.did);
198
199 TEST_MAGIC_SAFETY("eina_error_msg_static_register",
200 "safety check failed: msg == NULL");
201 ck_assert_int_eq(eina_error_msg_static_register(NULL), 0);
202 fail_unless(ctx.did);
203
204 ck_assert_int_eq(eina_error_msg_modify(0, "X"), EINA_FALSE);
205 ck_assert_int_eq(eina_error_msg_modify(4096, "X"), EINA_FALSE);
206
207 TEST_MAGIC_SAFETY("eina_error_msg_modify",
208 "safety check failed: msg == NULL");
209 ck_assert_int_eq(eina_error_msg_modify(EINA_ERROR_OUT_OF_MEMORY, NULL),
210 EINA_FALSE);
211 fail_unless(ctx.did);
212
213 ck_assert_str_eq(eina_error_msg_get(EINA_ERROR_OUT_OF_MEMORY),
214 "Out of memory");
215
216 TEST_MAGIC_SAFETY("eina_error_find",
217 "safety check failed: msg == NULL");
218 ck_assert_int_eq(eina_error_find(NULL), 0);
219 fail_unless(ctx.did);
220
221 ck_assert_int_eq(eina_error_find("Non-existent Error..."), 0);
222
223 fail_if(eina_error_msg_get(0));
224 fail_if(eina_error_msg_get(4096));
225
226 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
227
228 eina_shutdown();
229}
230END_TEST
231#endif
232
55void 233void
56eina_test_error(TCase *tc) 234eina_test_error(TCase *tc)
57{ 235{
58 tcase_add_test(tc, eina_error_errno); 236 tcase_add_test(tc, eina_error_errno);
237 tcase_add_test(tc, eina_error_test_find);
238 tcase_add_test(tc, eina_error_test_modify);
239 tcase_add_test(tc, eina_error_test_lots);
240#ifdef EINA_SAFETY_CHECKS
241 tcase_add_test(tc, eina_error_test_failures);
242#endif
59} 243}
diff --git a/libraries/eina/src/tests/eina_test_file.c b/libraries/eina/src/tests/eina_test_file.c
index 55e9976..a3ba998 100644
--- a/libraries/eina/src/tests/eina_test_file.c
+++ b/libraries/eina/src/tests/eina_test_file.c
@@ -28,6 +28,44 @@
28#include "Eina.h" 28#include "Eina.h"
29#include "eina_safety_checks.h" 29#include "eina_safety_checks.h"
30 30
31#ifdef EINA_SAFETY_CHECKS
32struct log_ctx {
33 const char *msg;
34 const char *fnc;
35 Eina_Bool did;
36};
37
38/* tests should not output on success, just uncomment this for debugging */
39//#define SHOW_LOG 1
40
41static void
42_eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
43{
44 struct log_ctx *ctx = data;
45 va_list cp_args;
46 const char *str;
47
48 va_copy(cp_args, args);
49 str = va_arg(cp_args, const char *);
50 va_end(cp_args);
51
52 ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR);
53 ck_assert_str_eq(fmt, "%s");
54 ck_assert_str_eq(ctx->msg, str);
55 ck_assert_str_eq(ctx->fnc, fnc);
56 ctx->did = EINA_TRUE;
57
58#ifdef SHOW_LOG
59 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
60#else
61 (void)d;
62 (void)file;
63 (void)line;
64#endif
65}
66#endif
67
68
31START_TEST(eina_file_split_simple) 69START_TEST(eina_file_split_simple)
32{ 70{
33 Eina_Array *ea; 71 Eina_Array *ea;
@@ -35,10 +73,26 @@ START_TEST(eina_file_split_simple)
35 eina_init(); 73 eina_init();
36 74
37#ifdef EINA_SAFETY_CHECKS 75#ifdef EINA_SAFETY_CHECKS
76#ifdef SHOW_LOG
38 fprintf(stderr, "you should have a safety check failure below:\n"); 77 fprintf(stderr, "you should have a safety check failure below:\n");
78#endif
79 struct log_ctx ctx;
80
81#define TEST_MAGIC_SAFETY(fn, _msg) \
82 ctx.msg = _msg; \
83 ctx.fnc = fn; \
84 ctx.did = EINA_FALSE
85
86 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
87
88 TEST_MAGIC_SAFETY("eina_file_split", "safety check failed: path == NULL");
39 ea = eina_file_split(NULL); 89 ea = eina_file_split(NULL);
40 fail_if(ea); 90 fail_if(ea);
41 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); 91 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
92 fail_unless(ctx.did);
93
94 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
95#undef TEST_MAGIC_SAFETY
42#endif 96#endif
43 97
44#ifdef _WIN32 98#ifdef _WIN32
diff --git a/libraries/eina/src/tests/eina_test_inlist.c b/libraries/eina/src/tests/eina_test_inlist.c
index c27f393..a8631e7 100644
--- a/libraries/eina/src/tests/eina_test_inlist.c
+++ b/libraries/eina/src/tests/eina_test_inlist.c
@@ -34,6 +34,43 @@ struct _Eina_Test_Inlist
34 EINA_INLIST; 34 EINA_INLIST;
35}; 35};
36 36
37#ifdef EINA_SAFETY_CHECKS
38struct log_ctx {
39 const char *msg;
40 const char *fnc;
41 Eina_Bool did;
42};
43
44/* tests should not output on success, just uncomment this for debugging */
45//#define SHOW_LOG 1
46
47static void
48_eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
49{
50 struct log_ctx *ctx = data;
51 va_list cp_args;
52 const char *str;
53
54 va_copy(cp_args, args);
55 str = va_arg(cp_args, const char *);
56 va_end(cp_args);
57
58 ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR);
59 ck_assert_str_eq(fmt, "%s");
60 ck_assert_str_eq(ctx->msg, str);
61 ck_assert_str_eq(ctx->fnc, fnc);
62 ctx->did = EINA_TRUE;
63
64#ifdef SHOW_LOG
65 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
66#else
67 (void)d;
68 (void)file;
69 (void)line;
70#endif
71}
72#endif
73
37static Eina_Test_Inlist * 74static Eina_Test_Inlist *
38_eina_test_inlist_build(int i) 75_eina_test_inlist_build(int i)
39{ 76{
@@ -52,6 +89,10 @@ START_TEST(eina_inlist_simple)
52 Eina_Test_Inlist *tmp; 89 Eina_Test_Inlist *tmp;
53 Eina_Test_Inlist *prev; 90 Eina_Test_Inlist *prev;
54 int i = 0; 91 int i = 0;
92#ifdef EINA_SAFETY_CHECKS
93 Eina_Inlist *bkp;
94 struct log_ctx ctx;
95#endif
55 96
56 fail_if(!eina_init()); 97 fail_if(!eina_init());
57 98
@@ -106,16 +147,142 @@ START_TEST(eina_inlist_simple)
106 } 147 }
107 148
108#ifdef EINA_SAFETY_CHECKS 149#ifdef EINA_SAFETY_CHECKS
150 bkp = lst;
151 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
152
153#define TEST_MAGIC_SAFETY(fn, _msg) \
154 ctx.msg = _msg; \
155 ctx.fnc = fn; \
156 ctx.did = EINA_FALSE
157
158#ifdef SHOW_LOG
109 fprintf(stderr, "you should have a safety check failure below:\n"); 159 fprintf(stderr, "you should have a safety check failure below:\n");
160#endif
110 { 161 {
111 Eina_Inlist *tmp2 = eina_inlist_remove(NULL, EINA_INLIST_GET(tmp)); 162 Eina_Inlist *tmp2;
163
164 TEST_MAGIC_SAFETY("eina_inlist_remove",
165 "safety check failed: list == NULL");
166
167 tmp2 = eina_inlist_remove(NULL, EINA_INLIST_GET(tmp));
112 fail_if(tmp2 != NULL); 168 fail_if(tmp2 != NULL);
113 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); 169 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
170 fail_unless(ctx.did);
114 } 171 }
115 172
116 fprintf(stderr, "you should have a safety check failure below:\n"); 173#ifdef SHOW_LOG
174 fprintf(stderr, "you should have a safety check failure below:\n");
175#endif
176 TEST_MAGIC_SAFETY("eina_inlist_remove",
177 "safety check failed: item == NULL");
117 lst = eina_inlist_remove(lst, NULL); 178 lst = eina_inlist_remove(lst, NULL);
118 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); 179 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
180 fail_unless(ctx.did);
181
182#ifdef SHOW_LOG
183 fprintf(stderr, "you should have a safety check failure below:\n");
184#endif
185 TEST_MAGIC_SAFETY("eina_inlist_append",
186 "safety check failed: new_l == NULL");
187 lst = eina_inlist_append(lst, NULL);
188 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
189 fail_unless(ctx.did);
190
191#ifdef SHOW_LOG
192 fprintf(stderr, "you should have a safety check failure below:\n");
193#endif
194 TEST_MAGIC_SAFETY("eina_inlist_append_relative",
195 "safety check failed: new_l == NULL");
196 lst = eina_inlist_append_relative(lst, NULL, NULL);
197 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
198 fail_unless(ctx.did);
199
200#ifdef SHOW_LOG
201 fprintf(stderr, "you should have a safety check failure below:\n");
202#endif
203 TEST_MAGIC_SAFETY("eina_inlist_prepend",
204 "safety check failed: new_l == NULL");
205 lst = eina_inlist_prepend(lst, NULL);
206 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
207 fail_unless(ctx.did);
208
209#ifdef SHOW_LOG
210 fprintf(stderr, "you should have a safety check failure below:\n");
211#endif
212 TEST_MAGIC_SAFETY("eina_inlist_prepend_relative",
213 "safety check failed: new_l == NULL");
214 lst = eina_inlist_prepend_relative(lst, NULL, NULL);
215 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
216 fail_unless(ctx.did);
217
218#ifdef SHOW_LOG
219 fprintf(stderr, "you should have a safety check failure below:\n");
220#endif
221 TEST_MAGIC_SAFETY("eina_inlist_find",
222 "safety check failed: item == NULL");
223 lst = eina_inlist_find(lst, NULL);
224 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
225 fail_unless(ctx.did);
226
227#ifdef SHOW_LOG
228 fprintf(stderr, "you should have a safety check failure below:\n");
229#endif
230 TEST_MAGIC_SAFETY("eina_inlist_demote",
231 "safety check failed: list == NULL");
232 lst = eina_inlist_demote(NULL, NULL);
233 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
234 fail_unless(ctx.did);
235
236#ifdef SHOW_LOG
237 fprintf(stderr, "you should have a safety check failure below:\n");
238#endif
239 TEST_MAGIC_SAFETY("eina_inlist_demote",
240 "safety check failed: item == NULL");
241 lst = eina_inlist_demote((void*)1L, NULL);
242 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
243 fail_unless(ctx.did);
244 lst = NULL;
245
246#ifdef SHOW_LOG
247 fprintf(stderr, "you should have a safety check failure below:\n");
248#endif
249 TEST_MAGIC_SAFETY("eina_inlist_promote",
250 "safety check failed: list == NULL");
251 lst = eina_inlist_promote(NULL, NULL);
252 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
253 fail_unless(ctx.did);
254
255#ifdef SHOW_LOG
256 fprintf(stderr, "you should have a safety check failure below:\n");
257#endif
258 TEST_MAGIC_SAFETY("eina_inlist_promote",
259 "safety check failed: item == NULL");
260 lst = eina_inlist_promote((void*)1L, NULL);
261 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
262 fail_unless(ctx.did);
263 lst = NULL;
264
265#ifdef SHOW_LOG
266 fprintf(stderr, "you should have a safety check failure below:\n");
267#endif
268 TEST_MAGIC_SAFETY("eina_inlist_sorted_insert",
269 "safety check failed: item == NULL");
270 lst = eina_inlist_sorted_insert(NULL, NULL, NULL);
271 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
272 fail_unless(ctx.did);
273
274#ifdef SHOW_LOG
275 fprintf(stderr, "you should have a safety check failure below:\n");
276#endif
277 TEST_MAGIC_SAFETY("eina_inlist_sorted_insert",
278 "safety check failed: func == NULL");
279 lst = eina_inlist_sorted_insert(NULL, (void*)1L, NULL);
280 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
281 fail_unless(ctx.did);
282 lst = NULL;
283
284 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
285 lst = bkp;
119#endif 286#endif
120 287
121 tmp = EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist); 288 tmp = EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist);
diff --git a/libraries/eina/src/tests/eina_test_list.c b/libraries/eina/src/tests/eina_test_list.c
index 6e08847..ce70d03 100644
--- a/libraries/eina/src/tests/eina_test_list.c
+++ b/libraries/eina/src/tests/eina_test_list.c
@@ -338,10 +338,50 @@ START_TEST(eina_test_sorted_insert)
338} 338}
339END_TEST 339END_TEST
340 340
341START_TEST(eina_test_list_split)
342{
343 Eina_List *left = NULL, *right = NULL ;
344 Eina_List *list = NULL;
345 Eina_List *l;
346 void *list_data;
347 int i;
348
349 eina_init();
350
351 list = eina_list_append(list, "tigh");
352 list = eina_list_append(list, "adar");
353 list = eina_list_append(list, "baltar");
354 list = eina_list_append(list, "roslin");
355 list = eina_list_append(list, "baltar");
356 list = eina_list_append(list, "roslin");
357 list = eina_list_append(list, "baltar");
358 list = eina_list_append(list, "roslin");
359
360 fail_if(list == NULL);
361 fail_if(eina_list_count(list) != 8);
362
363 for ( i = 0; i < 200; i++)
364 {
365 left = eina_list_split_list(list, eina_list_nth_list(list, i % 2), &right);
366
367 if (i % 2 == 0)
368 fail_if(eina_list_count(left) == 1 && eina_list_count(right) + eina_list_count(left) == i + 7);
369 else
370 fail_if(eina_list_count(left) == 2 && eina_list_count(right) + eina_list_count(left) == i + 7);
371
372 list = eina_list_merge(left, right);
373 list = eina_list_append(list, "roslin");
374 }
375
376 eina_shutdown();
377}
378END_TEST
379
341void 380void
342eina_test_list(TCase *tc) 381eina_test_list(TCase *tc)
343{ 382{
344 tcase_add_test(tc, eina_test_simple); 383 tcase_add_test(tc, eina_test_simple);
345 tcase_add_test(tc, eina_test_merge); 384 tcase_add_test(tc, eina_test_merge);
346 tcase_add_test(tc, eina_test_sorted_insert); 385 tcase_add_test(tc, eina_test_sorted_insert);
386 tcase_add_test(tc, eina_test_list_split);
347} 387}
diff --git a/libraries/eina/src/tests/eina_test_log.c b/libraries/eina/src/tests/eina_test_log.c
index ba17d5f..e0f0363 100644
--- a/libraries/eina/src/tests/eina_test_log.c
+++ b/libraries/eina/src/tests/eina_test_log.c
@@ -27,18 +27,119 @@
27#include "eina_suite.h" 27#include "eina_suite.h"
28#include "Eina.h" 28#include "Eina.h"
29 29
30 START_TEST(eina_log_macro) 30struct log_ctx {
31 int level;
32 int line;
33 const char *msg;
34 const char *fnc;
35 const char *dom;
36 Eina_Bool did;
37};
38
39/* tests should not output on success, just uncomment this for debugging */
40//#define SHOW_LOG 1
41
42static void
43_eina_test_log(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
31{ 44{
45 struct log_ctx *ctx = data;
46 ck_assert_int_eq(ctx->level, level);
47 ck_assert_int_eq(ctx->line, line);
48 ck_assert_str_eq(ctx->msg, fmt);
49 ck_assert_str_eq(ctx->fnc, fnc);
50 ck_assert_str_eq(file, __FILE__);
51 ctx->did = EINA_TRUE;
52#ifdef SHOW_LOG
53 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
54#else
55 (void)d;
56#endif
57}
58
59static void
60_eina_test_log_domain(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
61{
62 struct log_ctx *ctx = data;
63 ck_assert_int_eq(ctx->level, level);
64 ck_assert_int_eq(ctx->line, line);
65 ck_assert_str_eq(ctx->msg, fmt);
66 ck_assert_str_eq(ctx->fnc, fnc);
67 ck_assert_str_eq(file, __FILE__);
68 ck_assert_str_eq(ctx->dom, d->name);
69 ctx->did = EINA_TRUE;
70#ifdef SHOW_LOG
71 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
72#endif
73}
74
75static void
76_eina_test_log_safety(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
77{
78 struct log_ctx *ctx = data;
79 va_list cp_args;
80 const char *str;
81
82 va_copy(cp_args, args);
83 str = va_arg(cp_args, const char *);
84 va_end(cp_args);
85
86 ck_assert_int_eq(ctx->level, level);
87 ck_assert_str_eq(fmt, "%s");
88 ck_assert_str_eq(ctx->msg, str);
89 ck_assert_str_eq(ctx->fnc, fnc);
90 ctx->did = EINA_TRUE;
91
92#ifdef SHOW_LOG
93 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
94#else
95 (void)d;
96 (void)file;
97 (void)line;
98#endif
99}
100
101START_TEST(eina_log_macro)
102{
103 struct log_ctx ctx;
104 int oldlevel;
105
32 fail_if(!eina_init()); 106 fail_if(!eina_init());
33 107
108 oldlevel = eina_log_level_get();
34 eina_log_level_set(EINA_LOG_LEVEL_DBG); 109 eina_log_level_set(EINA_LOG_LEVEL_DBG);
35 eina_log_print_cb_set(eina_log_print_cb_file, stderr); 110 eina_log_print_cb_set(_eina_test_log, &ctx);
111
112#define TEST_LOG_CTX(lvl, _msg) \
113 ctx.level = lvl; \
114 ctx.line = __LINE__ + 1; \
115 ctx.msg = _msg; \
116 ctx.fnc = __FUNCTION__; \
117 ctx.did = EINA_FALSE
118
119 TEST_LOG_CTX(EINA_LOG_LEVEL_CRITICAL, "Critical message");
120 EINA_LOG_CRIT("Critical message");
121 fail_unless(ctx.did);
122
123 TEST_LOG_CTX(EINA_LOG_LEVEL_ERR, "An error");
124 EINA_LOG_ERR("An error");
125 fail_unless(ctx.did);
36 126
37 EINA_LOG_CRIT("Critical message\n"); 127 TEST_LOG_CTX(EINA_LOG_LEVEL_WARN, "A warning");
38 EINA_LOG_ERR("An error\n"); 128 EINA_LOG_WARN("A warning");
39 EINA_LOG_INFO("An info\n"); 129 fail_unless(ctx.did);
40 EINA_LOG_WARN("A warning\n"); 130
41 EINA_LOG_DBG("A debug\n"); 131 TEST_LOG_CTX(EINA_LOG_LEVEL_INFO, "An info");
132 EINA_LOG_INFO("An info");
133 fail_unless(ctx.did);
134
135 TEST_LOG_CTX(EINA_LOG_LEVEL_DBG, "A debug");
136 EINA_LOG_DBG("A debug");
137 fail_unless(ctx.did);
138
139#undef TEST_LOG_CTX
140
141 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
142 eina_log_level_set(oldlevel);
42 143
43 eina_shutdown(); 144 eina_shutdown();
44} 145}
@@ -46,16 +147,54 @@ END_TEST
46 147
47START_TEST(eina_log_domains_macros) 148START_TEST(eina_log_domains_macros)
48{ 149{
150 struct log_ctx ctx;
151 int oldlevel;
152
49 fail_if(!eina_init()); 153 fail_if(!eina_init());
50 154
155 /* make global log level blocker */
156 oldlevel = eina_log_level_get();
157 eina_log_level_set(EINA_LOG_LEVEL_CRITICAL);
158 eina_log_print_cb_set(_eina_test_log_domain, &ctx);
159
51 int d = eina_log_domain_register("MyDomain", EINA_COLOR_GREEN); 160 int d = eina_log_domain_register("MyDomain", EINA_COLOR_GREEN);
52 fail_if(d < 0); 161 fail_if(d < 0);
53 162
54 EINA_LOG_DOM_CRIT(d, "A critical message\n"); 163 /* make specific domain permissive */
55 EINA_LOG_DOM_ERR(d, "An error\n"); 164 eina_log_domain_level_set("MyDomain", EINA_LOG_LEVEL_DBG);
56 EINA_LOG_DOM_WARN(d, "A warning\n"); 165
57 EINA_LOG_DOM_DBG(d, "A debug\n"); 166#define TEST_LOG_CTX(lvl, _msg) \
58 EINA_LOG_DOM_INFO(d, "An info\n"); 167 ctx.level = lvl; \
168 ctx.line = __LINE__ + 1; \
169 ctx.msg = _msg; \
170 ctx.fnc = __FUNCTION__; \
171 ctx.dom = "MyDomain"; \
172 ctx.did = EINA_FALSE
173
174 TEST_LOG_CTX(EINA_LOG_LEVEL_CRITICAL, "A critical message");
175 EINA_LOG_DOM_CRIT(d, "A critical message");
176 fail_unless(ctx.did);
177
178 TEST_LOG_CTX(EINA_LOG_LEVEL_ERR, "An error");
179 EINA_LOG_DOM_ERR(d, "An error");
180 fail_unless(ctx.did);
181
182 TEST_LOG_CTX(EINA_LOG_LEVEL_WARN, "A warning");
183 EINA_LOG_DOM_WARN(d, "A warning");
184 fail_unless(ctx.did);
185
186 TEST_LOG_CTX(EINA_LOG_LEVEL_INFO, "An info");
187 EINA_LOG_DOM_INFO(d, "An info");
188 fail_unless(ctx.did);
189
190 TEST_LOG_CTX(EINA_LOG_LEVEL_DBG, "A debug");
191 EINA_LOG_DOM_DBG(d, "A debug");
192 fail_unless(ctx.did);
193
194#undef TEST_LOG_CTX
195
196 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
197 eina_log_level_set(oldlevel);
59 198
60 eina_shutdown(); 199 eina_shutdown();
61} 200}
@@ -120,6 +259,8 @@ END_TEST
120 259
121START_TEST(eina_log_level_indexes) 260START_TEST(eina_log_level_indexes)
122{ 261{
262 struct log_ctx ctx;
263
123 fail_if(!eina_init()); 264 fail_if(!eina_init());
124 fail_if(!eina_threads_init()); 265 fail_if(!eina_threads_init());
125 fail_if(!eina_threads_init()); 266 fail_if(!eina_threads_init());
@@ -127,11 +268,41 @@ START_TEST(eina_log_level_indexes)
127 int d = eina_log_domain_register("Levels", EINA_COLOR_GREEN); 268 int d = eina_log_domain_register("Levels", EINA_COLOR_GREEN);
128 fail_if(d < 0); 269 fail_if(d < 0);
129 270
271 eina_log_print_cb_set(_eina_test_log_domain, &ctx);
272
273#define TEST_LOG_CTX(lvl, _msg) \
274 ctx.level = lvl; \
275 ctx.line = __LINE__ + 1; \
276 ctx.msg = _msg; \
277 ctx.fnc = __FUNCTION__; \
278 ctx.dom = "Levels"; \
279 ctx.did = EINA_FALSE;
280
130 // Displayed unless user sets level lower than -1 281 // Displayed unless user sets level lower than -1
131 EINA_LOG(d, -1, "Negative index message\n"); 282 eina_log_domain_level_set("Levels", -1);
283 TEST_LOG_CTX(-1, "Negative index message");
284 EINA_LOG(d, -1, "Negative index message");
285 fail_unless(ctx.did);
286
287 eina_log_domain_level_set("Levels", -2);
288 TEST_LOG_CTX(-1, "Negative index message");
289 EINA_LOG(d, -1, "Negative index message");
290 fail_if(ctx.did);
132 291
133 // Displayed only if user sets level 6 or higher 292 // Displayed only if user sets level 6 or higher
134 EINA_LOG(d, 6, "Higher level debug\n"); 293 eina_log_domain_level_set("Levels", 6);
294 TEST_LOG_CTX(6, "Higher level debug");
295 EINA_LOG(d, 6, "Higher level debug");
296 fail_unless(ctx.did);
297
298 eina_log_domain_level_set("Levels", 5);
299 TEST_LOG_CTX(6, "Higher level debug");
300 EINA_LOG(d, 6, "Higher level debug");
301 fail_if(ctx.did);
302
303#undef TEST_LOG_CTX
304
305 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
135 306
136 eina_threads_shutdown(); 307 eina_threads_shutdown();
137 eina_threads_shutdown(); 308 eina_threads_shutdown();
@@ -141,6 +312,7 @@ END_TEST
141 312
142START_TEST(eina_log_customize) 313START_TEST(eina_log_customize)
143{ 314{
315 struct log_ctx ctx;
144 int d; 316 int d;
145 317
146 /* please don't define EINA_LOG_LEVELS for it */ 318 /* please don't define EINA_LOG_LEVELS for it */
@@ -182,11 +354,28 @@ START_TEST(eina_log_customize)
182 fail_if(eina_log_domain_registered_level_get(d) != 890); 354 fail_if(eina_log_domain_registered_level_get(d) != 890);
183 355
184 eina_log_domain_unregister(d); 356 eina_log_domain_unregister(d);
357
358#ifdef EINA_SAFETY_CHECKS
359#ifdef SHOW_LOG
185 fputs("NOTE: You should see a failed safety check or " 360 fputs("NOTE: You should see a failed safety check or "
186 "a crash if compiled without safety checks support.\n", 361 "a crash if compiled without safety checks support.\n",
187 stderr); 362 stderr);
363#endif
188 eina_log_abort_on_critical_set(EINA_FALSE); 364 eina_log_abort_on_critical_set(EINA_FALSE);
365 eina_log_function_disable_set(EINA_FALSE);
366
367 eina_log_print_cb_set(_eina_test_log_safety, &ctx);
368 ctx.level = EINA_LOG_LEVEL_ERR;
369 ctx.msg = "safety check failed: _log_domains[domain].deleted is true";
370 ctx.fnc = "eina_log_domain_registered_level_get";
371 ctx.did = EINA_FALSE;
189 fail_if(eina_log_domain_registered_level_get(d) != EINA_LOG_LEVEL_UNKNOWN); 372 fail_if(eina_log_domain_registered_level_get(d) != EINA_LOG_LEVEL_UNKNOWN);
373 fail_unless(ctx.did);
374
375 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
376#else
377#warning "Compiled without safety checks"
378#endif
190 379
191#undef test_set_get_bool 380#undef test_set_get_bool
192#undef test_set_get 381#undef test_set_get
diff --git a/libraries/eina/src/tests/eina_test_magic.c b/libraries/eina/src/tests/eina_test_magic.c
index d2c3d49..d0a374e 100644
--- a/libraries/eina/src/tests/eina_test_magic.c
+++ b/libraries/eina/src/tests/eina_test_magic.c
@@ -40,21 +40,95 @@ struct _Eina_Magic_Struct
40 EINA_MAGIC 40 EINA_MAGIC
41}; 41};
42 42
43struct log_ctx {
44 const char *msg;
45 const char *fnc;
46 Eina_Bool did;
47};
48
49/* tests should not output on success, just uncomment this for debugging */
50//#define SHOW_LOG 1
51
52static void
53_eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
54{
55 struct log_ctx *ctx = data;
56 va_list cp_args;
57 const char *str;
58
59 va_copy(cp_args, args);
60 str = va_arg(cp_args, const char *);
61 va_end(cp_args);
62
63 ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR);
64 ck_assert_str_eq(fmt, "%s");
65 ck_assert_str_eq(ctx->msg, str);
66 ck_assert_str_eq(ctx->fnc, fnc);
67 ctx->did = EINA_TRUE;
68
69#ifdef SHOW_LOG
70 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
71#else
72 (void)d;
73 (void)file;
74 (void)line;
75#endif
76}
77
78static void
79_eina_test_magic_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
80{
81 struct log_ctx *ctx = data;
82
83 ck_assert_int_eq(level, EINA_LOG_LEVEL_CRITICAL);
84 ck_assert_str_eq(ctx->msg, fmt);
85 ck_assert_str_eq(ctx->fnc, fnc);
86 ctx->did = EINA_TRUE;
87
88#ifdef SHOW_LOG
89 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
90#else
91 (void)d;
92 (void)file;
93 (void)line;
94#endif
95}
96
97#ifdef EINA_SAFETY_CHECKS
98#define TEST_MAGIC_SAFETY(fn, _msg) \
99 ctx.msg = _msg; \
100 ctx.fnc = fn; \
101 ctx.did = EINA_FALSE
102#endif
103
43START_TEST(eina_magic_simple) 104START_TEST(eina_magic_simple)
44{ 105{
45 Eina_Magic_Struct *ems = NULL; 106 Eina_Magic_Struct *ems = NULL;
107 struct log_ctx ctx;
46 108
47 eina_init(); 109 eina_init();
48 110
111 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
112
49 eina_magic_string_set(EINA_MAGIC_TEST, EINA_MAGIC_STRING); 113 eina_magic_string_set(EINA_MAGIC_TEST, EINA_MAGIC_STRING);
50 114
51#ifdef EINA_SAFETY_CHECKS 115#ifdef EINA_SAFETY_CHECKS
116#ifdef SHOW_LOG
52 fprintf(stderr, "you should have a safety check failure below:\n"); 117 fprintf(stderr, "you should have a safety check failure below:\n");
118#endif
119 TEST_MAGIC_SAFETY("eina_magic_string_set",
120 "safety check failed: magic_name == NULL");
53 eina_magic_string_set(EINA_MAGIC_TEST2, NULL); 121 eina_magic_string_set(EINA_MAGIC_TEST2, NULL);
54 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); 122 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
123 fail_unless(ctx.did);
55 124
125#ifdef SHOW_LOG
56 fprintf(stderr, "you should have a safety check failure below:\n"); 126 fprintf(stderr, "you should have a safety check failure below:\n");
127#endif
128 TEST_MAGIC_SAFETY("eina_magic_string_set",
129 "safety check failed: magic_name == NULL");
57 eina_magic_string_set(EINA_MAGIC_TEST2, NULL); 130 eina_magic_string_set(EINA_MAGIC_TEST2, NULL);
131 fail_unless(ctx.did);
58 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); 132 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
59#endif 133#endif
60 134
@@ -64,10 +138,22 @@ START_TEST(eina_magic_simple)
64 fail_if(strcmp(eina_magic_string_get( 138 fail_if(strcmp(eina_magic_string_get(
65 EINA_MAGIC_TEST), EINA_MAGIC_STRING) != 0); 139 EINA_MAGIC_TEST), EINA_MAGIC_STRING) != 0);
66 140
141 eina_log_print_cb_set(_eina_test_magic_print_cb, &ctx);
142
67#ifdef EINA_MAGIC_DEBUG 143#ifdef EINA_MAGIC_DEBUG
68 fail_if(EINA_MAGIC_CHECK(ems, EINA_MAGIC_TEST)); 144 fail_if(EINA_MAGIC_CHECK(ems, EINA_MAGIC_TEST));
145#ifdef SHOW_LOG
69 fprintf(stderr, "you should see 'Input handle pointer is NULL' below\n"); 146 fprintf(stderr, "you should see 'Input handle pointer is NULL' below\n");
147#endif
148 TEST_MAGIC_SAFETY(__FUNCTION__,
149 "*** Eina Magic Check Failed !!!\n"
150 " Input handle pointer is NULL !\n"
151 "*** NAUGHTY PROGRAMMER!!!\n"
152 "*** SPANK SPANK SPANK!!!\n"
153 "*** Now go fix your code. Tut tut tut!\n"
154 "\n");
70 EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST); 155 EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST);
156 fail_unless(ctx.did);
71 157
72 ems = malloc(sizeof (Eina_Magic_Struct)); 158 ems = malloc(sizeof (Eina_Magic_Struct));
73 fail_if(!ems); 159 fail_if(!ems);
@@ -76,15 +162,39 @@ START_TEST(eina_magic_simple)
76 fail_if(!EINA_MAGIC_CHECK(ems, EINA_MAGIC_TEST)); 162 fail_if(!EINA_MAGIC_CHECK(ems, EINA_MAGIC_TEST));
77 163
78 EINA_MAGIC_SET(ems, EINA_MAGIC_NONE); 164 EINA_MAGIC_SET(ems, EINA_MAGIC_NONE);
165#ifdef SHOW_LOG
79 fprintf(stderr, 166 fprintf(stderr,
80 "you should see 'Input handle has already been freed' below\n"); 167 "you should see 'Input handle has already been freed' below\n");
168#endif
169 TEST_MAGIC_SAFETY(__FUNCTION__,
170 "*** Eina Magic Check Failed !!!\n"
171 " Input handle has already been freed!\n"
172 "*** NAUGHTY PROGRAMMER!!!\n"
173 "*** SPANK SPANK SPANK!!!\n"
174 "*** Now go fix your code. Tut tut tut!\n"
175 "\n");
81 EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST); 176 EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST);
177 fail_unless(ctx.did);
82 178
83 EINA_MAGIC_SET(ems, 42424242); 179 EINA_MAGIC_SET(ems, 42424242);
180#ifdef SHOW_LOG
84 fprintf(stderr, "you should see 'Input handle is wrong type' below\n"); 181 fprintf(stderr, "you should see 'Input handle is wrong type' below\n");
182#endif
183 TEST_MAGIC_SAFETY(__FUNCTION__,
184 "*** Eina Magic Check Failed !!!\n"
185 " Input handle is wrong type\n"
186 " Expected: %08x - %s\n"
187 " Supplied: %08x - %s\n"
188 "*** NAUGHTY PROGRAMMER!!!\n"
189 "*** SPANK SPANK SPANK!!!\n"
190 "*** Now go fix your code. Tut tut tut!\n"
191 "\n");
85 EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST); 192 EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST);
193 fail_unless(ctx.did);
86#endif 194#endif
87 195
196 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
197
88 eina_shutdown(); 198 eina_shutdown();
89} 199}
90END_TEST 200END_TEST
diff --git a/libraries/eina/src/tests/eina_test_simple_xml_parser.c b/libraries/eina/src/tests/eina_test_simple_xml_parser.c
index 94e6a2a..7093019 100644
--- a/libraries/eina/src/tests/eina_test_simple_xml_parser.c
+++ b/libraries/eina/src/tests/eina_test_simple_xml_parser.c
@@ -44,15 +44,17 @@ START_TEST(eina_simple_xml_parser_node_dump)
44 char *buf; 44 char *buf;
45 45
46 fseek(f, 0, SEEK_SET); 46 fseek(f, 0, SEEK_SET);
47 buf = malloc(sz); 47 buf = malloc(sz + 1);
48 if (buf) 48 if (buf)
49 { 49 {
50 if (fread(buf, 1, sz, f)) 50 if (fread(buf, 1, sz, f))
51 { 51 {
52 Eina_Simple_XML_Node_Root *root = eina_simple_xml_node_load 52 Eina_Simple_XML_Node_Root *root = eina_simple_xml_node_load
53 (buf, sz, EINA_TRUE); 53 (buf, sz, EINA_TRUE);
54 buf[sz] = '\0';
54 char *out = eina_simple_xml_node_dump(&root->base, " "); 55 char *out = eina_simple_xml_node_dump(&root->base, " ");
55 puts(out); 56 //puts(out);
57 ck_assert_str_eq(out, buf);
56 free(out); 58 free(out);
57 eina_simple_xml_node_root_free(root); 59 eina_simple_xml_node_root_free(root);
58 free(buf); 60 free(buf);
diff --git a/libraries/eina/src/tests/eina_test_ustr.c b/libraries/eina/src/tests/eina_test_ustr.c
index eaeba9d..75126cc 100644
--- a/libraries/eina/src/tests/eina_test_ustr.c
+++ b/libraries/eina/src/tests/eina_test_ustr.c
@@ -28,6 +28,43 @@
28#include "eina_suite.h" 28#include "eina_suite.h"
29#include "Eina.h" 29#include "Eina.h"
30 30
31#ifdef EINA_SAFETY_CHECKS
32struct log_ctx {
33 const char *msg;
34 const char *fnc;
35 Eina_Bool did;
36};
37
38/* tests should not output on success, just uncomment this for debugging */
39//#define SHOW_LOG 1
40
41static void
42_eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
43{
44 struct log_ctx *ctx = data;
45 va_list cp_args;
46 const char *str;
47
48 va_copy(cp_args, args);
49 str = va_arg(cp_args, const char *);
50 va_end(cp_args);
51
52 ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR);
53 ck_assert_str_eq(fmt, "%s");
54 ck_assert_str_eq(ctx->msg, str);
55 ck_assert_str_eq(ctx->fnc, fnc);
56 ctx->did = EINA_TRUE;
57
58#ifdef SHOW_LOG
59 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
60#else
61 (void)d;
62 (void)file;
63 (void)line;
64#endif
65}
66#endif
67
31static const Eina_Unicode STR1[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0}; 68static const Eina_Unicode STR1[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0};
32static const Eina_Unicode STR2[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'f', 'f', 0}; 69static const Eina_Unicode STR2[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'f', 'f', 0};
33static const Eina_Unicode STR3[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0}; 70static const Eina_Unicode STR3[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0};
@@ -126,14 +163,42 @@ START_TEST(eina_unicode_strncpy_test)
126 rv = eina_unicode_strncpy(buf, STR1, 0); 163 rv = eina_unicode_strncpy(buf, STR1, 0);
127 fail_if(buf[0] != '7'); 164 fail_if(buf[0] != '7');
128 165
129 /* may segfault */ 166#ifdef EINA_SAFETY_CHECKS
130 buf[0] = '7'; 167 {
131 rv = eina_unicode_strncpy(buf, NULL, 0); 168 struct log_ctx ctx;
132 fail_if(buf[0] != '7'); 169
170#define TEST_MAGIC_SAFETY(fn, _msg) \
171 ctx.msg = _msg; \
172 ctx.fnc = fn; \
173 ctx.did = EINA_FALSE
174
175 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
133 176
134 /* Hopefully won't segfault */ 177 /* may segfault */
135 rv = eina_unicode_strncpy(NULL, STR1, 0); 178 buf[0] = '7';
136 fail_if(rv != NULL); 179#ifdef SHOW_LOG
180 fprintf(stderr, "you should have a safety check failure below:\n");
181#endif
182 TEST_MAGIC_SAFETY("eina_unicode_strncpy",
183 "safety check failed: source == NULL");
184 rv = eina_unicode_strncpy(buf, NULL, 0);
185 fail_if(buf[0] != '7');
186 fail_unless(ctx.did);
187
188 /* Hopefully won't segfault */
189#ifdef SHOW_LOG
190 fprintf(stderr, "you should have a safety check failure below:\n");
191#endif
192 TEST_MAGIC_SAFETY("eina_unicode_strncpy",
193 "safety check failed: dest == NULL");
194 rv = eina_unicode_strncpy(NULL, STR1, 0);
195 fail_if(rv != NULL);
196 fail_unless(ctx.did);
197
198 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
199#undef TEST_MAGIC_SAFETY
200 }
201#endif
137 202
138 eina_shutdown(); 203 eina_shutdown();
139} 204}
@@ -151,8 +216,30 @@ START_TEST(eina_ustr_strlen_test)
151 fail_if(eina_unicode_strlen(STR3) != 8); 216 fail_if(eina_unicode_strlen(STR3) != 8);
152 fail_if(eina_unicode_strlen(STR4) != 1); 217 fail_if(eina_unicode_strlen(STR4) != 1);
153 fail_if(eina_unicode_strlen(EMPTYSTR) != 0); 218 fail_if(eina_unicode_strlen(EMPTYSTR) != 0);
154 /* Eina unicode doesn't take NULL */ 219
155 // fail_if(eina_unicode_strlen(NULL)); 220#ifdef EINA_SAFETY_CHECKS
221 {
222 struct log_ctx ctx;
223
224#define TEST_MAGIC_SAFETY(fn, _msg) \
225 ctx.msg = _msg; \
226 ctx.fnc = fn; \
227 ctx.did = EINA_FALSE
228
229 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
230
231#ifdef SHOW_LOG
232 fprintf(stderr, "you should have a safety check failure below:\n");
233#endif
234 TEST_MAGIC_SAFETY("eina_unicode_strlen",
235 "safety check failed: ustr == NULL");
236 fail_if(eina_unicode_strlen(NULL));
237 fail_unless(ctx.did);
238
239 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
240#undef TEST_MAGIC_SAFETY
241 }
242#endif
156 243
157 eina_shutdown(); 244 eina_shutdown();
158} 245}
@@ -174,7 +261,30 @@ START_TEST(eina_unicode_strnlen_test)
174 fail_if(eina_unicode_strnlen(STR2,3) != 3); 261 fail_if(eina_unicode_strnlen(STR2,3) != 3);
175 fail_if(eina_unicode_strnlen(STR3,3) != 3); 262 fail_if(eina_unicode_strnlen(STR3,3) != 3);
176 fail_if(eina_unicode_strnlen(EMPTYSTR,1) != 0); 263 fail_if(eina_unicode_strnlen(EMPTYSTR,1) != 0);
177 fail_if(eina_unicode_strnlen(NULL,0) != 0); 264
265#ifdef EINA_SAFETY_CHECKS
266 {
267 struct log_ctx ctx;
268
269#define TEST_MAGIC_SAFETY(fn, _msg) \
270 ctx.msg = _msg; \
271 ctx.fnc = fn; \
272 ctx.did = EINA_FALSE
273
274 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
275
276#ifdef SHOW_LOG
277 fprintf(stderr, "you should have a safety check failure below:\n");
278#endif
279 TEST_MAGIC_SAFETY("eina_unicode_strnlen",
280 "safety check failed: ustr == NULL");
281 fail_if(eina_unicode_strnlen(NULL,0) != 0);
282 fail_unless(ctx.did);
283
284 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
285#undef TEST_MAGIC_SAFETY
286 }
287#endif
178 288
179 eina_shutdown(); 289 eina_shutdown();
180} 290}
diff --git a/libraries/eina/src/tests/eina_test_value.c b/libraries/eina/src/tests/eina_test_value.c
index 2d04c2f..94a5ab7 100644
--- a/libraries/eina/src/tests/eina_test_value.c
+++ b/libraries/eina/src/tests/eina_test_value.c
@@ -1140,8 +1140,10 @@ START_TEST(eina_value_test_array)
1140 fail_unless(eina_inarray_append(inarray, &c) >= 0); 1140 fail_unless(eina_inarray_append(inarray, &c) >= 0);
1141 desc.subtype = EINA_VALUE_TYPE_CHAR; 1141 desc.subtype = EINA_VALUE_TYPE_CHAR;
1142 desc.step = 0; 1142 desc.step = 0;
1143 desc.array = inarray; /* will be adopted and freed by value */ 1143 desc.array = inarray;
1144 fail_unless(eina_value_set(value, desc)); /* manually configure */ 1144 fail_unless(eina_value_set(value, desc)); /* manually configure */
1145 eina_inarray_free(inarray);
1146
1145 fail_unless(eina_value_array_get(value, 0, &c)); 1147 fail_unless(eina_value_array_get(value, 0, &c));
1146 fail_unless(c == 11); 1148 fail_unless(c == 11);
1147 fail_unless(eina_value_array_get(value, 1, &c)); 1149 fail_unless(eina_value_array_get(value, 1, &c));
@@ -1242,11 +1244,13 @@ START_TEST(eina_value_test_list)
1242 1244
1243 desc.subtype = EINA_VALUE_TYPE_STRING; 1245 desc.subtype = EINA_VALUE_TYPE_STRING;
1244 desc.list = NULL; 1246 desc.list = NULL;
1245 desc.list = eina_list_append(desc.list, strdup("hello")); 1247 desc.list = eina_list_append(desc.list, "hello");
1246 desc.list = eina_list_append(desc.list, strdup("world")); 1248 desc.list = eina_list_append(desc.list, "world");
1247 desc.list = eina_list_append(desc.list, strdup("eina")); 1249 desc.list = eina_list_append(desc.list, "eina");
1248 fail_unless(eina_list_count(desc.list) == 3); 1250 fail_unless(eina_list_count(desc.list) == 3);
1249 fail_unless(eina_value_set(value, desc)); 1251 fail_unless(eina_value_set(value, desc));
1252 eina_list_free(desc.list);
1253
1250 fail_unless(eina_value_list_get(value, 0, &s)); 1254 fail_unless(eina_value_list_get(value, 0, &s));
1251 fail_unless(s != NULL); 1255 fail_unless(s != NULL);
1252 fail_unless(strcmp(s, "hello") == 0); 1256 fail_unless(strcmp(s, "hello") == 0);
@@ -1351,14 +1355,17 @@ START_TEST(eina_value_test_hash)
1351 fail_unless(desc.hash != NULL); 1355 fail_unless(desc.hash != NULL);
1352 /* watch out hash pointer is to a size of subtype->value_size! */ 1356 /* watch out hash pointer is to a size of subtype->value_size! */
1353 ptr = malloc(sizeof(char *)); 1357 ptr = malloc(sizeof(char *));
1354 *ptr = strdup("there"); 1358 *ptr = "there";
1355 fail_unless(eina_hash_add(desc.hash, "hi", ptr)); 1359 fail_unless(eina_hash_add(desc.hash, "hi", ptr));
1356 ptr = malloc(sizeof(char *)); 1360 ptr = malloc(sizeof(char *));
1357 *ptr = strdup("y"); 1361 *ptr = "y";
1358 fail_unless(eina_hash_add(desc.hash, "x", ptr)); 1362 fail_unless(eina_hash_add(desc.hash, "x", ptr));
1359
1360 fail_unless(eina_value_set(value, desc)); 1363 fail_unless(eina_value_set(value, desc));
1361 1364
1365 free(eina_hash_find(desc.hash, "hi"));
1366 free(eina_hash_find(desc.hash, "x"));
1367 eina_hash_free(desc.hash);
1368
1362 fail_unless(eina_value_hash_get(value, "hi", &s)); 1369 fail_unless(eina_value_hash_get(value, "hi", &s));
1363 fail_unless(s != NULL); 1370 fail_unless(s != NULL);
1364 fail_unless(strcmp(s, "there") == 0); 1371 fail_unless(strcmp(s, "there") == 0);
@@ -1606,6 +1613,20 @@ START_TEST(eina_value_test_struct)
1606 fail_unless(eina_value_struct_get(value, "c", &c)); 1613 fail_unless(eina_value_struct_get(value, "c", &c));
1607 fail_unless(c == 0xf); 1614 fail_unless(c == 0xf);
1608 1615
1616 fail_unless(eina_value_struct_member_value_get
1617 (value, myst_members + 0, &other));
1618 fail_unless(other.type == EINA_VALUE_TYPE_INT);
1619 fail_unless(eina_value_get(&other, &i));
1620 fail_unless(i == 5678);
1621 eina_value_flush(&other);
1622
1623 fail_unless(eina_value_struct_member_value_get
1624 (value, myst_members + 1, &other));
1625 fail_unless(other.type == EINA_VALUE_TYPE_CHAR);
1626 fail_unless(eina_value_get(&other, &c));
1627 fail_unless(c = 0xf);
1628 eina_value_flush(&other);
1629
1609 str = eina_value_to_string(value); 1630 str = eina_value_to_string(value);
1610 fail_unless(str != NULL); 1631 fail_unless(str != NULL);
1611 fail_unless(strcmp(str, "{i: 5678, c: 15}") == 0); 1632 fail_unless(strcmp(str, "{i: 5678, c: 15}") == 0);
@@ -1704,6 +1725,7 @@ START_TEST(eina_value_test_struct)
1704 fail_unless(strcmp(str, "{a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10, k: 12, l: 13, m: 14, n: 15, o: 16, p: 17, q: 18, r: 19, s: 20, t: 21, u: 22, v: 23, x: 24}") == 0); 1725 fail_unless(strcmp(str, "{a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10, k: 12, l: 13, m: 14, n: 15, o: 16, p: 17, q: 18, r: 19, s: 20, t: 21, u: 22, v: 23, x: 24}") == 0);
1705 free(str); 1726 free(str);
1706 1727
1728 eina_value_flush(&other);
1707 eina_value_free(value); 1729 eina_value_free(value);
1708 eina_shutdown(); 1730 eina_shutdown();
1709} 1731}
@@ -1728,7 +1750,7 @@ START_TEST(eina_value_test_array_of_struct)
1728 EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH, 1750 EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH,
1729 myst_members, 4, sizeof(struct myst) 1751 myst_members, 4, sizeof(struct myst)
1730 }; 1752 };
1731 Eina_Value *value; 1753 Eina_Value *value, array_item;
1732 char *str; 1754 char *str;
1733 int i; 1755 int i;
1734 1756
@@ -1740,20 +1762,17 @@ START_TEST(eina_value_test_array_of_struct)
1740 for (i = 0; i < 10; i++) 1762 for (i = 0; i < 10; i++)
1741 { 1763 {
1742 Eina_Value_Struct desc; 1764 Eina_Value_Struct desc;
1743 struct myst *st; 1765 struct myst st;
1744 char buf[64]; 1766 char buf[64];
1745 1767
1746 snprintf(buf, sizeof(buf), "item%02d", i); 1768 snprintf(buf, sizeof(buf), "item%02d", i);
1747 st = malloc(sizeof(struct myst)); 1769 st.a = i;
1748 fail_unless(st != NULL); 1770 st.b = i * 10;
1749 st->a = i; 1771 st.c = i * 100;
1750 st->b = i * 10; 1772 st.s = buf;
1751 st->c = i * 100;
1752 st->s = strdup(buf);
1753 fail_unless(st->s != NULL);
1754 1773
1755 desc.desc = &myst_desc; 1774 desc.desc = &myst_desc;
1756 desc.memory = st; 1775 desc.memory = &st;
1757 fail_unless(eina_value_array_append(value, desc)); 1776 fail_unless(eina_value_array_append(value, desc));
1758 } 1777 }
1759 1778
@@ -1773,11 +1792,66 @@ START_TEST(eina_value_test_array_of_struct)
1773 "]") == 0); 1792 "]") == 0);
1774 free(str); 1793 free(str);
1775 1794
1795 eina_value_array_value_get(value, 2, &array_item);
1796 eina_value_struct_get(&array_item, "a", &i);
1797 ck_assert_int_eq(i, 2);
1798 eina_value_struct_get(&array_item, "b", &i);
1799 ck_assert_int_eq(i, 20);
1800 eina_value_struct_get(&array_item, "c", &i);
1801 ck_assert_int_eq(i, 200);
1802 eina_value_struct_get(&array_item, "s", &str);
1803 ck_assert_str_eq(str, "item02");
1804 eina_value_flush(&array_item);
1805
1776 eina_value_free(value); 1806 eina_value_free(value);
1777 eina_shutdown(); 1807 eina_shutdown();
1778} 1808}
1779END_TEST 1809END_TEST
1780 1810
1811
1812START_TEST(eina_value_test_model)
1813{
1814 Eina_Value *value, inv;
1815 Eina_Model *model, *m;
1816 char *str;
1817
1818 eina_init();
1819
1820 value = eina_value_new(EINA_VALUE_TYPE_MODEL);
1821 fail_unless(value != NULL);
1822
1823 model = eina_model_new(EINA_MODEL_TYPE_GENERIC);
1824 fail_unless(model != NULL);
1825
1826 fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_INT));
1827 fail_unless(eina_value_set(&inv, 1234));
1828 fail_unless(eina_model_property_set(model, "i", &inv));
1829 eina_value_flush(&inv);
1830
1831 fail_unless(eina_value_set(value, model));
1832 fail_unless(eina_model_refcount(model) == 2);
1833
1834 fail_unless(eina_value_get(value, &m));
1835 fail_unless(m == model);
1836 fail_unless(eina_model_refcount(m) == 2);
1837
1838 fail_unless(eina_value_pset(value, &model));
1839 fail_unless(eina_model_refcount(model) == 2);
1840
1841 str = eina_value_to_string(value);
1842 fail_unless(str != NULL);
1843 fail_unless(strcmp(str, "Eina_Model_Type_Generic({i: 1234}, [])") == 0);
1844 free(str);
1845
1846 eina_value_free(value);
1847
1848 fail_unless(eina_model_refcount(model) == 1);
1849 eina_model_unref(model);
1850
1851 eina_shutdown();
1852}
1853END_TEST
1854
1781void 1855void
1782eina_test_value(TCase *tc) 1856eina_test_value(TCase *tc)
1783{ 1857{
@@ -1796,4 +1870,5 @@ eina_test_value(TCase *tc)
1796 tcase_add_test(tc, eina_value_test_blob); 1870 tcase_add_test(tc, eina_value_test_blob);
1797 tcase_add_test(tc, eina_value_test_struct); 1871 tcase_add_test(tc, eina_value_test_struct);
1798 tcase_add_test(tc, eina_value_test_array_of_struct); 1872 tcase_add_test(tc, eina_value_test_array_of_struct);
1873 tcase_add_test(tc, eina_value_test_model);
1799} 1874}