beef eina_error tests.
authorbarbieri <barbieri@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 23 Jan 2012 00:25:12 +0000 (00:25 +0000)
committerbarbieri <barbieri@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 23 Jan 2012 00:25:12 +0000 (00:25 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/eina@67461 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/tests/eina_test_error.c

index 506f406..57f6950 100644 (file)
 
 #define TEST_TEXT "The big test\n"
 
+struct log_ctx {
+   const char *msg;
+   const char *fnc;
+   Eina_Bool did;
+};
+
+/* tests should not output on success, just uncomment this for debugging */
+//#define SHOW_LOG 1
+
+static void
+_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__)
+{
+   struct log_ctx *ctx = data;
+   va_list cp_args;
+   const char *str;
+
+   va_copy(cp_args, args);
+   str = va_arg(cp_args, const char *);
+   va_end(cp_args);
+
+   ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR);
+   ck_assert_str_eq(fmt, "%s");
+   ck_assert_str_eq(ctx->msg, str);
+   ck_assert_str_eq(ctx->fnc, fnc);
+   ctx->did = EINA_TRUE;
+
+#ifdef SHOW_LOG
+   eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
+#else
+   (void)d;
+   (void)file;
+   (void)line;
+#endif
+}
+
 START_TEST(eina_error_errno)
 {
    int test;
@@ -52,8 +87,157 @@ START_TEST(eina_error_errno)
 }
 END_TEST
 
+START_TEST(eina_error_test_find)
+{
+   int test, r;
+   const char *str;
+
+   eina_init();
+
+   test = eina_error_msg_register(TEST_TEXT);
+   ck_assert_int_ne(test, 0);
+
+   str = eina_error_msg_get(test);
+   fail_unless(str != NULL);
+   ck_assert_str_eq(str, TEST_TEXT);
+
+   eina_error_set(test);
+   fail_if(eina_error_get() != test);
+
+   r = eina_error_find(TEST_TEXT);
+   ck_assert_int_eq(r, test);
+
+   eina_shutdown();
+}
+END_TEST
+
+START_TEST(eina_error_test_modify)
+{
+   int test, r;
+   const char *str, smsg[] = "Do not copy this string";
+
+   eina_init();
+
+   test = eina_error_msg_register("Some Test Error");
+   ck_assert_int_ne(test, 0);
+
+   str = eina_error_msg_get(test);
+   fail_unless(str != NULL);
+   ck_assert_str_eq(str, "Some Test Error");
+
+   eina_error_set(test);
+   fail_if(eina_error_get() != test);
+
+   fail_unless(eina_error_msg_modify(test, "ABCDE"));
+
+   r = eina_error_find("ABCDE");
+   ck_assert_int_eq(r, test);
+
+   test = eina_error_msg_static_register(smsg);
+   ck_assert_int_ne(test, 0);
+
+   str = eina_error_msg_get(test);
+   fail_unless(str != NULL);
+   fail_unless(str == smsg);
+
+   fail_unless(eina_error_msg_modify(test, "Change that!"));
+   r = eina_error_find("Change that!");
+   ck_assert_int_eq(r, test);
+
+   eina_shutdown();
+}
+END_TEST
+
+START_TEST(eina_error_test_lots)
+{
+   char buf[64];
+   int codes[512];
+   unsigned int i;
+
+   eina_init();
+
+   for (i = 0; i < sizeof(codes)/sizeof(codes[0]); i++)
+     {
+        snprintf(buf, sizeof(buf), "myerr-%d", i);
+        codes[i] = eina_error_msg_register(buf);
+        ck_assert_int_ne(codes[i], 0);
+     }
+
+   for (i = 0; i < sizeof(codes)/sizeof(codes[0]); i++)
+     {
+        int found;
+
+        snprintf(buf, sizeof(buf), "myerr-%d", i);
+
+        found = eina_error_find(buf);
+        ck_assert_int_eq(codes[i], found);
+     }
+
+   eina_shutdown();
+}
+END_TEST
+
+#ifdef EINA_SAFETY_CHECKS
+START_TEST(eina_error_test_failures)
+{
+   struct log_ctx ctx;
+
+   eina_init();
+
+   eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
+
+#define TEST_MAGIC_SAFETY(fn, _msg)              \
+  ctx.msg = _msg;                                \
+  ctx.fnc = fn;                                  \
+  ctx.did = EINA_FALSE
+
+   TEST_MAGIC_SAFETY("eina_error_msg_register",
+                     "safety check failed: msg == NULL");
+   ck_assert_int_eq(eina_error_msg_register(NULL), 0);
+   fail_unless(ctx.did);
+
+   TEST_MAGIC_SAFETY("eina_error_msg_static_register",
+                     "safety check failed: msg == NULL");
+   ck_assert_int_eq(eina_error_msg_static_register(NULL), 0);
+   fail_unless(ctx.did);
+
+   ck_assert_int_eq(eina_error_msg_modify(0, "X"), EINA_FALSE);
+   ck_assert_int_eq(eina_error_msg_modify(4096, "X"), EINA_FALSE);
+
+   TEST_MAGIC_SAFETY("eina_error_msg_modify",
+                     "safety check failed: msg == NULL");
+   ck_assert_int_eq(eina_error_msg_modify(EINA_ERROR_OUT_OF_MEMORY, NULL),
+                    EINA_FALSE);
+   fail_unless(ctx.did);
+
+   ck_assert_str_eq(eina_error_msg_get(EINA_ERROR_OUT_OF_MEMORY),
+                    "Out of memory");
+
+   TEST_MAGIC_SAFETY("eina_error_find",
+                     "safety check failed: msg == NULL");
+   ck_assert_int_eq(eina_error_find(NULL), 0);
+   fail_unless(ctx.did);
+
+   ck_assert_int_eq(eina_error_find("Non-existent Error..."), 0);
+
+   fail_if(eina_error_msg_get(0));
+   fail_if(eina_error_msg_get(4096));
+
+   eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
+
+   eina_shutdown();
+}
+END_TEST
+#endif
+
 void
 eina_test_error(TCase *tc)
 {
    tcase_add_test(tc, eina_error_errno);
+   tcase_add_test(tc, eina_error_test_find);
+   tcase_add_test(tc, eina_error_test_modify);
+   tcase_add_test(tc, eina_error_test_lots);
+#ifdef EINA_SAFETY_CHECKS
+   tcase_add_test(tc, eina_error_test_failures);
+#endif
 }