Eobj: add a "class errors" test.
authortasn <tasn>
Tue, 17 Apr 2012 10:27:34 +0000 (10:27 +0000)
committertasn <tasn@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 17 Apr 2012 10:27:34 +0000 (10:27 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/PROTO/eobj@70262 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

tests/CMakeLists.txt
tests/eobj_suite.c
tests/eobj_suite.h
tests/eobj_test_class_errors.c [new file with mode: 0644]

index ad920d6..82221e2 100644 (file)
@@ -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
       )
 
index 8c579b4..acd06ae 100644 (file)
@@ -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 }
 };
 
index b9f6e89..252cd6e 100644 (file)
@@ -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/tests/eobj_test_class_errors.c b/tests/eobj_test_class_errors.c
new file mode 100644 (file)
index 0000000..b4e0af8
--- /dev/null
@@ -0,0 +1,166 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+
+#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);
+}