From ceca1938c4b85101c6d1854be697b1dbd1515e5e Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Tue, 17 Apr 2012 10:27:34 +0000 Subject: [PATCH] Eobj: add a "class errors" test. SVN revision: 70262 --- legacy/eobj/tests/CMakeLists.txt | 1 + legacy/eobj/tests/eobj_suite.c | 1 + legacy/eobj/tests/eobj_suite.h | 1 + legacy/eobj/tests/eobj_test_class_errors.c | 166 +++++++++++++++++++++ 4 files changed, 169 insertions(+) create mode 100644 legacy/eobj/tests/eobj_test_class_errors.c diff --git a/legacy/eobj/tests/CMakeLists.txt b/legacy/eobj/tests/CMakeLists.txt index ad920d61da..82221e2676 100644 --- a/legacy/eobj/tests/CMakeLists.txt +++ b/legacy/eobj/tests/CMakeLists.txt @@ -4,6 +4,7 @@ if (CHECK_ENABLED) eobj_suite.c eobj_test_init.c eobj_test_general.c + eobj_test_class_errors.c class_simple.c ) diff --git a/legacy/eobj/tests/eobj_suite.c b/legacy/eobj/tests/eobj_suite.c index 8c579b4951..acd06ae85f 100644 --- a/legacy/eobj/tests/eobj_suite.c +++ b/legacy/eobj/tests/eobj_suite.c @@ -20,6 +20,7 @@ struct _Eobj_Test_Case static const Eobj_Test_Case etc[] = { { "Eobj init", eobj_test_init }, { "Eobj general", eobj_test_general }, + { "Eobj class errors", eobj_test_class_errors }, { NULL, NULL } }; diff --git a/legacy/eobj/tests/eobj_suite.h b/legacy/eobj/tests/eobj_suite.h index b9f6e89fc4..252cd6e172 100644 --- a/legacy/eobj/tests/eobj_suite.h +++ b/legacy/eobj/tests/eobj_suite.h @@ -5,6 +5,7 @@ void eobj_test_init(TCase *tc); void eobj_test_general(TCase *tc); +void eobj_test_class_errors(TCase *tc); #endif /* _EOBJ_SUITE_H */ diff --git a/legacy/eobj/tests/eobj_test_class_errors.c b/legacy/eobj/tests/eobj_test_class_errors.c new file mode 100644 index 0000000000..b4e0af818e --- /dev/null +++ b/legacy/eobj/tests/eobj_test_class_errors.c @@ -0,0 +1,166 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eobj_suite.h" +#include "Eobj.h" + +#include "class_simple.h" + +START_TEST(eobj_incomplete_desc) +{ + eobj_init(); + + const Eobj_Class *klass; + static Eobj_Op TMP_BASE_ID = EOBJ_NOOP; + + enum { + TEST_SUB_ID_FOO, + TEST_SUB_ID_FOO2, + TEST_SUB_ID_LAST + }; + + static const Eobj_Op_Description op_desc[] = { + EOBJ_OP_DESCRIPTION(TEST_SUB_ID_FOO, "i", "Foo"), + EOBJ_OP_DESCRIPTION(TEST_SUB_ID_FOO2, "i", "Foo2"), + EOBJ_OP_DESCRIPTION_SENTINEL + }; + + static const Eobj_Op_Description op_desc_wrong[] = { + EOBJ_OP_DESCRIPTION(TEST_SUB_ID_FOO2, "i", "Foo2"), + EOBJ_OP_DESCRIPTION(TEST_SUB_ID_FOO, "i", "Foo"), + EOBJ_OP_DESCRIPTION_SENTINEL + }; + + /* XXX: In real life this should be const, this is just for testing. */ + static Eobj_Class_Description class_desc = { + "Simple", + EOBJ_CLASS_TYPE_REGULAR, + EOBJ_CLASS_DESCRIPTION_OPS(NULL, op_desc, 1), + NULL, + 0, + NULL, + NULL, + NULL, + NULL + }; + + klass = eobj_class_new(&class_desc, NULL, NULL); + fail_if(klass); + + class_desc.ops.base_op_id = &TMP_BASE_ID; + class_desc.ops.descs = NULL; + + klass = eobj_class_new(&class_desc, NULL, NULL); + fail_if(klass); + + class_desc.ops.descs = op_desc; + class_desc.ops.count = TEST_SUB_ID_LAST + 1; + + klass = eobj_class_new(&class_desc, NULL, NULL); + fail_if(klass); + + class_desc.ops.count = 0; + + klass = eobj_class_new(&class_desc, NULL, NULL); + fail_if(klass); + + class_desc.ops.count = TEST_SUB_ID_LAST; + class_desc.ops.descs = op_desc_wrong; + + klass = eobj_class_new(&class_desc, NULL, NULL); + fail_if(klass); + + class_desc.ops.descs = op_desc; + class_desc.name = NULL; + + klass = eobj_class_new(&class_desc, NULL, NULL); + fail_if(klass); + + class_desc.name = "Simple"; + + + klass = eobj_class_new(NULL, NULL, NULL); + fail_if(klass); + + /* Should create a class. */ + klass = eobj_class_new(&class_desc, NULL, NULL); + fail_if(!klass); + + (void) klass; + + eobj_shutdown(); +} +END_TEST + +START_TEST(eobj_inherit_errors) +{ + eobj_init(); + + const Eobj_Class *klass; + const Eobj_Class *klass_mixin; + const Eobj_Class *klass_simple; + + static const Eobj_Class_Description class_desc_simple = { + "Simple", + EOBJ_CLASS_TYPE_REGULAR, + EOBJ_CLASS_DESCRIPTION_OPS(NULL, NULL, 0), + NULL, + 0, + NULL, + NULL, + NULL, + NULL + }; + + static const Eobj_Class_Description class_desc_mixin = { + "Mixin", + EOBJ_CLASS_TYPE_MIXIN, + EOBJ_CLASS_DESCRIPTION_OPS(NULL, NULL, 0), + NULL, + 0, + NULL, + NULL, + NULL, + NULL + }; + + static Eobj_Class_Description class_desc = { + "General", + EOBJ_CLASS_TYPE_MIXIN, + EOBJ_CLASS_DESCRIPTION_OPS(NULL, NULL, 0), + NULL, + 0, + NULL, + NULL, + NULL, + NULL + }; + + klass_mixin = eobj_class_new(&class_desc_mixin, NULL, NULL); + fail_if(!klass_mixin); + + klass_simple = eobj_class_new(&class_desc_simple, NULL, NULL); + fail_if(!klass_simple); + + klass = eobj_class_new(&class_desc, klass_simple, NULL); + fail_if(klass); + + class_desc.type = EOBJ_CLASS_TYPE_REGULAR; + + klass = eobj_class_new(&class_desc, klass_mixin, NULL); + fail_if(klass); + + (void) klass; + + eobj_shutdown(); +} +END_TEST + +void eobj_test_class_errors(TCase *tc) +{ + tcase_add_test(tc, eobj_incomplete_desc); + tcase_add_test(tc, eobj_inherit_errors); +}