summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2014-01-08 11:30:44 +0100
committerJérémy Zurcher <jeremy@asynk.ch>2014-01-08 11:30:44 +0100
commit239877e081d5abe9c79591d1a343daeb34122dc2 (patch)
treeb3d0339f51153d3194ba8a1d05be7e57ec58f9d7
parentd8408ea079b94c37414278a30f783040780c48ab (diff)
downloadefl-239877e081d5abe9c79591d1a343daeb34122dc2.tar.gz
eo2: add test cases for class construction errors
it covers: NULL API func, overriding non-existing fct, API redefined, dich func override.
-rw-r--r--src/tests/eo/suite/eo_test_class_errors.c141
1 files changed, 141 insertions, 0 deletions
diff --git a/src/tests/eo/suite/eo_test_class_errors.c b/src/tests/eo/suite/eo_test_class_errors.c
index 9f08b5e1e7..abc839eacd 100644
--- a/src/tests/eo/suite/eo_test_class_errors.c
+++ b/src/tests/eo/suite/eo_test_class_errors.c
@@ -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);
}