From e877d6617d85a37723c0f4d9776f06ed5c1a6c9c Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Sat, 21 Jan 2012 03:59:03 +0000 Subject: [PATCH] improve magic tests, check output to see if it happened SVN revision: 67408 --- legacy/eina/src/tests/eina_test_magic.c | 112 +++++++++++++++++++++++- 1 file changed, 111 insertions(+), 1 deletion(-) diff --git a/legacy/eina/src/tests/eina_test_magic.c b/legacy/eina/src/tests/eina_test_magic.c index d2c3d49284..d0a374e77c 100644 --- a/legacy/eina/src/tests/eina_test_magic.c +++ b/legacy/eina/src/tests/eina_test_magic.c @@ -40,21 +40,95 @@ struct _Eina_Magic_Struct EINA_MAGIC }; +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 +} + +static void +_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__) +{ + struct log_ctx *ctx = data; + + ck_assert_int_eq(level, EINA_LOG_LEVEL_CRITICAL); + ck_assert_str_eq(ctx->msg, fmt); + 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 +} + +#ifdef EINA_SAFETY_CHECKS +#define TEST_MAGIC_SAFETY(fn, _msg) \ + ctx.msg = _msg; \ + ctx.fnc = fn; \ + ctx.did = EINA_FALSE +#endif + START_TEST(eina_magic_simple) { Eina_Magic_Struct *ems = NULL; + struct log_ctx ctx; eina_init(); + eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx); + eina_magic_string_set(EINA_MAGIC_TEST, EINA_MAGIC_STRING); #ifdef EINA_SAFETY_CHECKS +#ifdef SHOW_LOG fprintf(stderr, "you should have a safety check failure below:\n"); +#endif + TEST_MAGIC_SAFETY("eina_magic_string_set", + "safety check failed: magic_name == NULL"); eina_magic_string_set(EINA_MAGIC_TEST2, NULL); fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); + fail_unless(ctx.did); +#ifdef SHOW_LOG fprintf(stderr, "you should have a safety check failure below:\n"); +#endif + TEST_MAGIC_SAFETY("eina_magic_string_set", + "safety check failed: magic_name == NULL"); eina_magic_string_set(EINA_MAGIC_TEST2, NULL); + fail_unless(ctx.did); fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); #endif @@ -64,10 +138,22 @@ START_TEST(eina_magic_simple) fail_if(strcmp(eina_magic_string_get( EINA_MAGIC_TEST), EINA_MAGIC_STRING) != 0); + eina_log_print_cb_set(_eina_test_magic_print_cb, &ctx); + #ifdef EINA_MAGIC_DEBUG fail_if(EINA_MAGIC_CHECK(ems, EINA_MAGIC_TEST)); +#ifdef SHOW_LOG fprintf(stderr, "you should see 'Input handle pointer is NULL' below\n"); +#endif + TEST_MAGIC_SAFETY(__FUNCTION__, + "*** Eina Magic Check Failed !!!\n" + " Input handle pointer is NULL !\n" + "*** NAUGHTY PROGRAMMER!!!\n" + "*** SPANK SPANK SPANK!!!\n" + "*** Now go fix your code. Tut tut tut!\n" + "\n"); EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST); + fail_unless(ctx.did); ems = malloc(sizeof (Eina_Magic_Struct)); fail_if(!ems); @@ -76,14 +162,38 @@ START_TEST(eina_magic_simple) fail_if(!EINA_MAGIC_CHECK(ems, EINA_MAGIC_TEST)); EINA_MAGIC_SET(ems, EINA_MAGIC_NONE); +#ifdef SHOW_LOG fprintf(stderr, "you should see 'Input handle has already been freed' below\n"); +#endif + TEST_MAGIC_SAFETY(__FUNCTION__, + "*** Eina Magic Check Failed !!!\n" + " Input handle has already been freed!\n" + "*** NAUGHTY PROGRAMMER!!!\n" + "*** SPANK SPANK SPANK!!!\n" + "*** Now go fix your code. Tut tut tut!\n" + "\n"); EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST); + fail_unless(ctx.did); EINA_MAGIC_SET(ems, 42424242); +#ifdef SHOW_LOG fprintf(stderr, "you should see 'Input handle is wrong type' below\n"); - EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST); #endif + TEST_MAGIC_SAFETY(__FUNCTION__, + "*** Eina Magic Check Failed !!!\n" + " Input handle is wrong type\n" + " Expected: %08x - %s\n" + " Supplied: %08x - %s\n" + "*** NAUGHTY PROGRAMMER!!!\n" + "*** SPANK SPANK SPANK!!!\n" + "*** Now go fix your code. Tut tut tut!\n" + "\n"); + EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST); + fail_unless(ctx.did); +#endif + + eina_log_print_cb_set(eina_log_print_cb_stderr, NULL); eina_shutdown(); }