1 /* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
31 #include "eina_suite.h"
34 #define TEST_TEXT "The big test\n"
42 /* tests should not output on success, just uncomment this for debugging */
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__)
48 struct log_ctx *ctx = data;
52 va_copy(cp_args, args);
53 str = va_arg(cp_args, const char *);
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);
63 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
71 START_TEST(eina_error_errno)
75 setenv("EINA_ERROR_LEVEL", "1", 0);
79 test = eina_error_msg_register(TEST_TEXT);
80 fail_if(!eina_error_msg_get(test));
81 fail_if(strcmp(eina_error_msg_get(test), TEST_TEXT) != 0);
84 fail_if(eina_error_get() != test);
90 START_TEST(eina_error_test_find)
97 test = eina_error_msg_register(TEST_TEXT);
98 ck_assert_int_ne(test, 0);
100 str = eina_error_msg_get(test);
101 fail_unless(str != NULL);
102 ck_assert_str_eq(str, TEST_TEXT);
104 eina_error_set(test);
105 fail_if(eina_error_get() != test);
107 r = eina_error_find(TEST_TEXT);
108 ck_assert_int_eq(r, test);
114 START_TEST(eina_error_test_modify)
117 const char *str, smsg[] = "Do not copy this string";
121 test = eina_error_msg_register("Some Test Error");
122 ck_assert_int_ne(test, 0);
124 str = eina_error_msg_get(test);
125 fail_unless(str != NULL);
126 ck_assert_str_eq(str, "Some Test Error");
128 eina_error_set(test);
129 fail_if(eina_error_get() != test);
131 fail_unless(eina_error_msg_modify(test, "ABCDE"));
133 r = eina_error_find("ABCDE");
134 ck_assert_int_eq(r, test);
136 test = eina_error_msg_static_register(smsg);
137 ck_assert_int_ne(test, 0);
139 str = eina_error_msg_get(test);
140 fail_unless(str != NULL);
141 fail_unless(str == smsg);
143 fail_unless(eina_error_msg_modify(test, "Change that!"));
144 r = eina_error_find("Change that!");
145 ck_assert_int_eq(r, test);
151 START_TEST(eina_error_test_lots)
159 for (i = 0; i < sizeof(codes)/sizeof(codes[0]); i++)
161 snprintf(buf, sizeof(buf), "myerr-%d", i);
162 codes[i] = eina_error_msg_register(buf);
163 ck_assert_int_ne(codes[i], 0);
166 for (i = 0; i < sizeof(codes)/sizeof(codes[0]); i++)
170 snprintf(buf, sizeof(buf), "myerr-%d", i);
172 found = eina_error_find(buf);
173 ck_assert_int_eq(codes[i], found);
180 #ifdef EINA_SAFETY_CHECKS
181 START_TEST(eina_error_test_failures)
187 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
189 #define TEST_MAGIC_SAFETY(fn, _msg) \
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);
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);
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);
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),
211 fail_unless(ctx.did);
213 ck_assert_str_eq(eina_error_msg_get(EINA_ERROR_OUT_OF_MEMORY),
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);
221 ck_assert_int_eq(eina_error_find("Non-existent Error..."), 0);
223 fail_if(eina_error_msg_get(0));
224 fail_if(eina_error_msg_get(4096));
226 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
234 eina_test_error(TCase *tc)
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);