From f9cf5bb374a361b7b14bae8b191365ad5961e1c0 Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Tue, 5 Feb 2013 14:37:28 +0000 Subject: [PATCH] Eo tests: Beginning of test output cleanup. SVN revision: 83635 --- src/tests/eo/suite/eo_test_class_errors.c | 101 ++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/src/tests/eo/suite/eo_test_class_errors.c b/src/tests/eo/suite/eo_test_class_errors.c index 77d9ef9c7a..5336ed3095 100644 --- a/src/tests/eo/suite/eo_test_class_errors.c +++ b/src/tests/eo/suite/eo_test_class_errors.c @@ -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