Eo tests: Beginning of test output cleanup.

SVN revision: 83635
This commit is contained in:
Tom Hacohen 2013-02-05 14:37:28 +00:00
parent e5675179b4
commit f9cf5bb374
1 changed files with 101 additions and 0 deletions

View File

@ -8,9 +8,71 @@
#include "eo_suite.h"
#include "eo_test_class_simple.h"
struct log_ctx {
const char *msg;
const char *fnc;
Eina_Bool did;
int expected_level;
};
static struct log_ctx ctx;
static void
_eo_test_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 EINA_UNUSED)
{
struct log_ctx *myctx = data;
ck_assert_int_eq(level, myctx->expected_level);
if (myctx->msg)
ck_assert_str_eq(myctx->msg, fmt);
ck_assert_str_eq(myctx->fnc, fnc);
myctx->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
_eo_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 EINA_UNUSED)
{
struct log_ctx *myctx = 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, myctx->expected_level);
ck_assert_str_eq(fmt, "%s");
ck_assert_str_eq(myctx->msg, str);
ck_assert_str_eq(myctx->fnc, fnc);
myctx->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
}
#define TEST_EO_ERROR(fn, _msg) \
ctx.msg = _msg; \
ctx.fnc = fn; \
ctx.did = EINA_FALSE; \
ctx.expected_level = EINA_LOG_LEVEL_ERR
START_TEST(eo_incomplete_desc)
{
eo_init();
eina_log_print_cb_set(_eo_test_print_cb, &ctx);
const Eo_Class *klass;
static Eo_Op TMP_BASE_ID = EO_NOOP;
@ -45,49 +107,66 @@ START_TEST(eo_incomplete_desc)
NULL
};
TEST_EO_ERROR("_eo_class_check_op_descs", "Class '%s' has a non-zero ops count, but base_id is NULL.");
klass = eo_class_new(&class_desc, NULL, NULL);
fail_if(klass);
fail_unless(ctx.did);
class_desc.ops.base_op_id = &TMP_BASE_ID;
class_desc.ops.descs = NULL;
TEST_EO_ERROR("_eo_class_check_op_descs", "Class '%s' has a non-zero ops count, but there are no descs.");
klass = eo_class_new(&class_desc, NULL, NULL);
fail_if(klass);
fail_unless(ctx.did);
class_desc.ops.descs = op_desc;
class_desc.ops.count = TEST_SUB_ID_LAST + 1;
TEST_EO_ERROR("_eo_class_check_op_descs", "Found too few Ops description for class '%s'. Expected %lx descriptions, but found %lx.");
klass = eo_class_new(&class_desc, NULL, NULL);
fail_if(klass);
fail_unless(ctx.did);
class_desc.ops.count = 0;
TEST_EO_ERROR("_eo_class_check_op_descs", "Found extra Ops description for class '%s'. Expected %lu descriptions, but found more.");
klass = eo_class_new(&class_desc, NULL, NULL);
fail_if(klass);
fail_unless(ctx.did);
class_desc.ops.count = TEST_SUB_ID_LAST;
class_desc.ops.descs = op_desc_wrong;
TEST_EO_ERROR("_eo_class_check_op_descs", "Wrong order in Ops description for class '%s'. Expected %lx and got %lx");
klass = eo_class_new(&class_desc, NULL, NULL);
fail_if(klass);
fail_unless(ctx.did);
class_desc.ops.descs = op_desc;
class_desc.name = NULL;
eina_log_print_cb_set(_eo_test_safety_print_cb, &ctx);
TEST_EO_ERROR("eo_class_new", "safety check failed: desc->name == NULL");
klass = eo_class_new(&class_desc, NULL, NULL);
fail_if(klass);
fail_unless(ctx.did);
class_desc.name = "Simple";
TEST_EO_ERROR("eo_class_new", "safety check failed: desc == NULL");
klass = eo_class_new(NULL, NULL, NULL);
fail_if(klass);
fail_unless(ctx.did);
/* Should create a class. */
klass = eo_class_new(&class_desc, EO_BASE_CLASS, NULL);
fail_if(!klass);
(void) klass;
eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
eo_shutdown();
}
@ -96,6 +175,7 @@ END_TEST
START_TEST(eo_inherit_errors)
{
eo_init();
eina_log_print_cb_set(_eo_test_print_cb, &ctx);
const Eo_Class *klass;
const Eo_Class *klass_mixin;
@ -140,15 +220,20 @@ START_TEST(eo_inherit_errors)
klass_simple = eo_class_new(&class_desc_simple, EO_BASE_CLASS, NULL);
fail_if(!klass_simple);
TEST_EO_ERROR("eo_class_new", "Non-regular classes ('%s') aren't allowed to inherit from regular classes ('%s').");
klass = eo_class_new(&class_desc, klass_simple, NULL);
fail_if(klass);
fail_unless(ctx.did);
class_desc.type = EO_CLASS_TYPE_REGULAR;
TEST_EO_ERROR("eo_class_new", "Regular classes ('%s') aren't allowed to inherit from non-regular classes ('%s').");
klass = eo_class_new(&class_desc, klass_mixin, NULL);
fail_if(klass);
fail_unless(ctx.did);
(void) klass;
eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
eo_shutdown();
}
@ -157,6 +242,7 @@ END_TEST
START_TEST(eo_inconsistent_mro)
{
eo_init();
eina_log_print_cb_set(_eo_test_print_cb, &ctx);
const Eo_Class *klass;
const Eo_Class *klass_mixin;
@ -216,8 +302,10 @@ START_TEST(eo_inconsistent_mro)
klass_mixin3 = eo_class_new(&class_desc_mixin3, klass_mixin, NULL);
fail_if(!klass_mixin3);
TEST_EO_ERROR("_eo_class_mro_add", "Cannot create a consistent method resolution order for class '%s' because of '%s'.");
klass = eo_class_new(&class_desc_simple, EO_BASE_CLASS, klass_mixin, klass_mixin2, NULL);
fail_if(klass);
fail_unless(ctx.did);
klass = eo_class_new(&class_desc_simple, EO_BASE_CLASS, klass_mixin2, klass_mixin, NULL);
fail_if(!klass);
@ -225,6 +313,8 @@ START_TEST(eo_inconsistent_mro)
klass = eo_class_new(&class_desc_simple, EO_BASE_CLASS, klass_mixin2, klass_mixin3, NULL);
fail_if(!klass);
eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
eo_shutdown();
}
END_TEST
@ -234,6 +324,7 @@ static void _stub_class_constructor(Eo_Class *klass EINA_UNUSED) {}
START_TEST(eo_bad_interface)
{
eo_init();
eina_log_print_cb_set(_eo_test_safety_print_cb, &ctx);
const Eo_Class *klass;
@ -248,8 +339,10 @@ START_TEST(eo_bad_interface)
NULL
};
TEST_EO_ERROR("eo_class_new", "safety check failed: !desc->data_size is false");
klass = eo_class_new(&class_desc, NULL, NULL);
fail_if(klass);
fail_unless(ctx.did);
class_desc.data_size = 0;
class_desc.class_constructor = _stub_class_constructor;
@ -268,6 +361,8 @@ START_TEST(eo_bad_interface)
klass = eo_class_new(&class_desc, NULL, NULL);
fail_if(!klass);
eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
eo_shutdown();
}
END_TEST
@ -313,6 +408,7 @@ _const_ops_class_constructor(Eo_Class *klass)
START_TEST(eo_op_types)
{
eo_init();
eina_log_print_cb_set(_eo_test_print_cb, &ctx);
const Eo_Class *klass;
@ -327,15 +423,20 @@ START_TEST(eo_op_types)
NULL
};
TEST_EO_ERROR("eo_class_funcs_set", "Set function's op type (%x) is different than the one in the op description (%d) for op '%s:%s'. Func index: %lu");
klass = eo_class_new(&class_desc, SIMPLE_CLASS, NULL);
fail_if(!klass);
TEST_EO_ERROR("eo_class_name_get", NULL);
ctx.expected_level = EINA_LOG_LEVEL_CRITICAL;
/* Add class checks here... */
Eo *obj = eo_add(klass, NULL);
eo_do(obj, simple_a_set(7), simple_a_print(), simple_class_hi_print());
eo_unref(obj);
eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
eo_shutdown();
}
END_TEST