eo2: add test cases for class construction errors

it covers: NULL API func, overriding non-existing fct,
API redefined, dich func override.
This commit is contained in:
Jérémy Zurcher 2014-01-08 11:30:44 +01:00 committed by Tom Hacohen
parent 9d2eeb7a8b
commit 5dc95bb50c
1 changed files with 141 additions and 0 deletions

View File

@ -273,9 +273,150 @@ START_TEST(eo_bad_interface)
}
END_TEST
static void _null_fct(Eo *eo_obj EINA_UNUSED, void *d EINA_UNUSED) { }
void null_fct (void) {}
START_TEST(eo_null_api)
{
eo_init();
eina_log_print_cb_set(_eo_test_print_cb, &ctx);
const Eo_Class *klass;
static Eo2_Op_Description op_descs[] = {
EO2_OP_FUNC(NULL, _null_fct, "NULL API function"),
EO2_OP_SENTINEL
};
static Eo_Class_Description class_desc = {
EO2_VERSION,
"Simple",
EO_CLASS_TYPE_REGULAR,
EO2_CLASS_DESCRIPTION_OPS(op_descs),
NULL,
0,
NULL,
NULL
};
TEST_EO_ERROR("_eo2_class_funcs_set", "Ignore %d NULL->%p '%s'. Can't set implementation for NULL API.");
klass = eo_class_new(&class_desc, NULL, NULL);
fail_if(!klass);
fail_unless(ctx.did);
eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
eo_shutdown();
}
END_TEST
START_TEST(eo_wrong_override)
{
eo_init();
eina_log_print_cb_set(_eo_test_print_cb, &ctx);
const Eo_Class *klass;
static Eo2_Op_Description op_descs[] = {
EO2_OP_FUNC_OVERRIDE(null_fct, _null_fct),
EO2_OP_SENTINEL
};
static Eo_Class_Description class_desc = {
EO2_VERSION,
"Simple",
EO_CLASS_TYPE_REGULAR,
EO2_CLASS_DESCRIPTION_OPS(op_descs),
NULL,
0,
NULL,
NULL
};
TEST_EO_ERROR("_eo2_class_funcs_set", "Ignore override %p->%p. Can't find api func description in class hierarchy.");
klass = eo_class_new(&class_desc, NULL, NULL);
fail_if(!klass);
fail_unless(ctx.did);
eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
eo_shutdown();
}
END_TEST
START_TEST(eo_api_redefined)
{
eo_init();
eina_log_print_cb_set(_eo_test_print_cb, &ctx);
const Eo_Class *klass;
static Eo2_Op_Description op_descs[] = {
EO2_OP_FUNC(null_fct, _null_fct, "API function"),
EO2_OP_FUNC(null_fct, NULL, "Redefining API function"),
EO2_OP_SENTINEL
};
static Eo_Class_Description class_desc = {
EO2_VERSION,
"Simple",
EO_CLASS_TYPE_REGULAR,
EO2_CLASS_DESCRIPTION_OPS(op_descs),
NULL,
0,
NULL,
NULL
};
TEST_EO_ERROR("_eo2_class_funcs_set", "API already defined %d %p->%p '%s'. Expect undefined behaviour.");
klass = eo_class_new(&class_desc, NULL, NULL);
fail_if(!klass);
fail_unless(ctx.did);
eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
eo_shutdown();
}
END_TEST
START_TEST(eo_dich_func_override)
{
eo_init();
eina_log_print_cb_set(_eo_test_print_cb, &ctx);
const Eo_Class *klass;
static Eo2_Op_Description op_descs[] = {
EO2_OP_FUNC_OVERRIDE(simple_a_set, _null_fct),
EO2_OP_FUNC_OVERRIDE(simple_a_set, NULL),
EO2_OP_SENTINEL
};
static Eo_Class_Description class_desc = {
EO2_VERSION,
"Simple",
EO_CLASS_TYPE_REGULAR,
EO2_CLASS_DESCRIPTION_OPS(op_descs),
NULL,
0,
NULL,
NULL
};
TEST_EO_ERROR("_dich_func_set", "Already set function for op %d (%s:'%s'). Overriding %p with %p.");
klass = eo_class_new(&class_desc, SIMPLE_CLASS, NULL);
fail_if(!klass);
fail_unless(ctx.did);
eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
eo_shutdown();
}
END_TEST
void eo_test_class_errors(TCase *tc)
{
tcase_add_test(tc, eo_inherit_errors);
tcase_add_test(tc, eo_inconsistent_mro);
tcase_add_test(tc, eo_bad_interface);
tcase_add_test(tc, eo_null_api);
tcase_add_test(tc, eo_wrong_override);
tcase_add_test(tc, eo_api_redefined);
tcase_add_test(tc, eo_dich_func_override);
}