Eo: add autotools tests. I have plenty of errors with the unit tests on Windows
[profile/ivi/eobj.git] / src / tests / eo_suite / eo_test_general.c
index e784afb..0de71dc 100644 (file)
@@ -4,9 +4,8 @@
 
 #include <stdio.h>
 
-#include "eo_suite.h"
 #include "Eo.h"
-
+#include "eo_suite.h"
 #include "class_simple.h"
 
 START_TEST(eo_simple)
@@ -31,6 +30,7 @@ START_TEST(eo_data_fetch)
 
    /* Usually should be const, not const only for the test... */
    static Eo_Class_Description class_desc = {
+        EO_VERSION,
         "Simple2",
         EO_CLASS_TYPE_REGULAR,
         EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
@@ -40,7 +40,7 @@ START_TEST(eo_data_fetch)
         NULL
    };
 
-   const Eo_Class *klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL);
+   const Eo_Class *klass = eo_class_new(&class_desc, EO_BASE_CLASS, NULL);
    fail_if(!klass);
 
    Eo *obj = eo_add(klass, NULL);
@@ -51,7 +51,7 @@ START_TEST(eo_data_fetch)
    eo_unref(obj);
 
    class_desc.data_size = 0;
-   klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL);
+   klass = eo_class_new(&class_desc, EO_BASE_CLASS, NULL);
    fail_if(!klass);
 
    obj = eo_add(klass, NULL);
@@ -63,54 +63,101 @@ START_TEST(eo_data_fetch)
 }
 END_TEST
 
-START_TEST(eo_composite_tests)
+START_TEST(eo_isa_tests)
 {
    eo_init();
 
-   Eo *obj = eo_add(SIMPLE_CLASS, NULL);
-   fail_if(!obj);
-   Eo *obj2 = eo_add(SIMPLE_CLASS, NULL);
-   fail_if(!obj2);
+   const Eo_Class *klass, *iface, *mixin;
 
-   eo_composite_object_attach(obj, obj2);
-   eo_parent_set(obj2, NULL);
-   fail_if(eo_composite_is(obj2));
+     {
+        /* Usually should be const, not const only for the test... */
+        static Eo_Class_Description class_desc = {
+             EO_VERSION,
+             "Iface",
+             EO_CLASS_TYPE_INTERFACE,
+             EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
+             NULL,
+             0,
+             NULL,
+             NULL
+        };
+
+        iface = eo_class_new(&class_desc, NULL, NULL);
+        fail_if(!iface);
+     }
 
-   eo_unref(obj2);
+     {
+        /* Usually should be const, not const only for the test... */
+        static Eo_Class_Description class_desc = {
+             EO_VERSION,
+             "Mixin",
+             EO_CLASS_TYPE_MIXIN,
+             EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
+             NULL,
+             0,
+             NULL,
+             NULL
+        };
+
+        mixin = eo_class_new(&class_desc, NULL, NULL);
+        fail_if(!mixin);
+     }
+
+     {
+        /* Usually should be const, not const only for the test... */
+        static Eo_Class_Description class_desc = {
+             EO_VERSION,
+             "Simple2",
+             EO_CLASS_TYPE_REGULAR,
+             EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
+             NULL,
+             10,
+             NULL,
+             NULL
+        };
+
+        klass = eo_class_new(&class_desc, EO_BASE_CLASS, iface, mixin, NULL);
+        fail_if(!klass);
+     }
+
+   Eo *obj = eo_add(klass, NULL);
+   fail_if(!obj);
+   fail_if(eo_isa(obj, SIMPLE_CLASS));
+   fail_if(!eo_isa(obj, iface));
+   fail_if(!eo_isa(obj, mixin));
+   fail_if(!eo_isa(obj, klass));
+   fail_if(!eo_isa(obj, EO_BASE_CLASS));
+   eo_unref(obj);
+
+   obj = eo_add(SIMPLE_CLASS, NULL);
+   fail_if(!obj);
+   fail_if(eo_isa(obj, klass));
+   fail_if(eo_isa(obj, iface));
+   fail_if(eo_isa(obj, mixin));
+   fail_if(!eo_isa(obj, SIMPLE_CLASS));
+   fail_if(!eo_isa(obj, EO_BASE_CLASS));
    eo_unref(obj);
 
    eo_shutdown();
 }
 END_TEST
 
-START_TEST(eo_static_classes)
+
+START_TEST(eo_composite_tests)
 {
    eo_init();
 
-   static const Eo_Op_Description op_desc[] = {
-        EO_OP_DESCRIPTION(SIMPLE_SUB_ID_A_SET, "Set property A"),
-        EO_OP_DESCRIPTION_SENTINEL
-   };
-
-   /* Usually should be const, not const only for the test... */
-   static Eo_Class_Description class_desc = {
-        "Simple2",
-        EO_CLASS_TYPE_REGULAR,
-        EO_CLASS_DESCRIPTION_OPS(NULL, op_desc, 1),
-        NULL,
-        0,
-        NULL,
-        NULL
-   };
-
-   const Eo_Class *klass = eo_class_new(&class_desc, 1, EO_BASE_CLASS, NULL);
-   fail_if(klass);
+   Eo *obj = eo_add(SIMPLE_CLASS, NULL);
+   fail_if(!obj);
+   Eo *obj2 = eo_add(SIMPLE_CLASS, NULL);
+   fail_if(!obj2);
 
-   klass = eo_class_new(&class_desc, 1000, EO_BASE_CLASS, NULL);
-   fail_if(klass);
+   eo_composite_attach(obj2, obj);
+   eo_parent_set(obj2, NULL);
+   fail_if(eo_composite_is(obj2));
 
-   klass = eo_class_new(&class_desc, 2, EO_BASE_CLASS, NULL);
-   fail_if(!klass);
+   eo_unref(obj2);
+   eo_unref(obj);
 
    eo_shutdown();
 }
@@ -142,6 +189,7 @@ _man_class_constructor(Eo_Class *klass)
    const Eo_Op_Func_Description func_desc[] = {
         EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _man_con),
         EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _man_des),
+        EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _man_des),
         EO_OP_FUNC_SENTINEL
    };
 
@@ -154,6 +202,7 @@ START_TEST(eo_man_free)
 
    /* Usually should be const, not const only for the test... */
    static Eo_Class_Description class_desc = {
+        EO_VERSION,
         "Simple2",
         EO_CLASS_TYPE_REGULAR,
         EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
@@ -163,7 +212,7 @@ START_TEST(eo_man_free)
         NULL
    };
 
-   const Eo_Class *klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL);
+   const Eo_Class *klass = eo_class_new(&class_desc, EO_BASE_CLASS, NULL);
    fail_if(!klass);
 
    Eo *obj = eo_add(klass, NULL);
@@ -176,7 +225,7 @@ START_TEST(eo_man_free)
    eo_unref(obj);
 
    _man_should_des = EINA_FALSE;
-   klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL);
+   klass = eo_class_new(&class_desc, EO_BASE_CLASS, NULL);
    fail_if(!klass);
 
    obj = eo_add(klass, NULL);
@@ -191,7 +240,7 @@ START_TEST(eo_man_free)
    eo_manual_free(obj);
 
    _man_should_con = EINA_FALSE;
-   klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL);
+   klass = eo_class_new(&class_desc, EO_BASE_CLASS, NULL);
    fail_if(!klass);
 
    obj = eo_add(klass, NULL);
@@ -208,6 +257,17 @@ START_TEST(eo_man_free)
    eo_unref(obj);
    eo_manual_free(obj);
 
+   obj = eo_add(klass, NULL);
+   fail_if(!obj);
+   eo_manual_free_set(obj, EINA_TRUE);
+   eo_unref(obj);
+   eo_ref(obj);
+   eo_unref(obj);
+   eo_unref(obj);
+   eo_unref(obj);
+   eo_unref(obj);
+   eo_manual_free(obj);
+
    eo_shutdown();
 }
 END_TEST
@@ -373,6 +433,7 @@ START_TEST(eo_op_errors)
    eo_init();
 
    static const Eo_Class_Description class_desc = {
+        EO_VERSION,
         "Simple",
         EO_CLASS_TYPE_REGULAR,
         EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
@@ -382,7 +443,7 @@ START_TEST(eo_op_errors)
         NULL
    };
 
-   const Eo_Class *klass = eo_class_new(&class_desc, 0, SIMPLE_CLASS, NULL);
+   const Eo_Class *klass = eo_class_new(&class_desc, SIMPLE_CLASS, NULL);
    fail_if(!klass);
 
    Eo *obj = eo_add(klass, NULL);
@@ -411,8 +472,8 @@ START_TEST(eo_op_errors)
 
    obj = eo_add(SIMPLE_CLASS, NULL);
    fail_if(!eo_do(obj, simple_a_print()));
-   fail_if(!eo_query(obj, simple_a_print()));
-   fail_if(eo_query(obj, simple_a_set(1)));
+   fail_if(!eo_do(obj, simple_a_print()));
+   fail_if(!eo_do(obj, simple_a_set(1)));
    eo_unref(obj);
 
    eo_shutdown();
@@ -520,7 +581,7 @@ START_TEST(eo_magic_checks)
         eo_class_do((Eo_Class *) buf, NULL);
         eo_class_do_super((Eo_Class *) buf, EO_NOOP);
 
-        fail_if(eo_class_new(NULL, 0, (Eo_Class *) buf), NULL);
+        fail_if(eo_class_new(NULL, (Eo_Class *) buf), NULL);
 
         eo_xref(obj, (Eo *) buf);
         eo_xunref(obj, (Eo *) buf);
@@ -531,6 +592,9 @@ START_TEST(eo_magic_checks)
         eo_unref((Eo *) buf);
         eo_del((Eo *) buf);
 
+        eo_isa((Eo *) buf, SIMPLE_CLASS);
+        eo_isa(obj, (Eo_Class *) buf);
+
         fail_if(0 != eo_ref_get((Eo *) buf));
 
         Eo *wref = NULL;
@@ -543,10 +607,10 @@ START_TEST(eo_magic_checks)
 
         fail_if(eo_data_get((Eo *) buf, SIMPLE_CLASS));
 
-        eo_composite_object_attach((Eo *) buf, obj);
-        eo_composite_object_attach(obj, (Eo *) buf);
-        eo_composite_object_detach((Eo *) buf, obj);
-        eo_composite_object_detach(obj, (Eo *) buf);
+        eo_composite_attach((Eo *) buf, obj);
+        eo_composite_attach(obj, (Eo *) buf);
+        eo_composite_detach((Eo *) buf, obj);
+        eo_composite_detach(obj, (Eo *) buf);
         eo_composite_is((Eo *) buf);
 
         eo_do(obj, eo_event_callback_forwarder_add(NULL, (Eo *) buf));
@@ -567,6 +631,106 @@ START_TEST(eo_magic_checks)
 }
 END_TEST
 
+/* MULTI */
+static Eo_Op MULTI_BASE_ID;
+#define MULTI_ID(sub_id) (MULTI_BASE_ID + sub_id)
+#define multi_a_print() MULTI_ID(MULTI_SUB_ID_A_PRINT)
+#define multi_class_hi_print() MULTI_ID(MULTI_SUB_ID_CLASS_HI_PRINT)
+
+static void
+_a_print(Eo *obj EINA_UNUSED, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED)
+{
+   printf("Hey\n");
+}
+
+static void
+_class_hi_print(const Eo_Class *klass EINA_UNUSED, va_list *list EINA_UNUSED)
+{
+   printf("Hi\n");
+}
+
+enum {
+     MULTI_SUB_ID_A_PRINT,
+     MULTI_SUB_ID_CLASS_HI_PRINT,
+     MULTI_SUB_ID_LAST
+};
+
+static void
+_eo_multiple_do_class_constructor(Eo_Class *klass)
+{
+   const Eo_Op_Func_Description func_desc[] = {
+        EO_OP_FUNC(MULTI_ID(MULTI_SUB_ID_A_PRINT), _a_print),
+        EO_OP_FUNC_CLASS(MULTI_ID(MULTI_SUB_ID_CLASS_HI_PRINT), _class_hi_print),
+        EO_OP_FUNC_SENTINEL
+   };
+
+   eo_class_funcs_set(klass, func_desc);
+}
+
+static const Eo_Op_Description _eo_multiple_do_op_desc[] = {
+     EO_OP_DESCRIPTION(MULTI_SUB_ID_A_PRINT, "Print property A"),
+     EO_OP_DESCRIPTION_CLASS(MULTI_SUB_ID_CLASS_HI_PRINT, "Print Hi"),
+     EO_OP_DESCRIPTION_SENTINEL
+};
+
+
+START_TEST(eo_multiple_do)
+{
+   eo_init();
+
+   /* Usually should be const, not const only for the test... */
+   static Eo_Class_Description class_desc = {
+        EO_VERSION,
+        "Inherit",
+        EO_CLASS_TYPE_REGULAR,
+        EO_CLASS_DESCRIPTION_OPS(&MULTI_BASE_ID, _eo_multiple_do_op_desc, MULTI_SUB_ID_LAST),
+        NULL,
+        0,
+        _eo_multiple_do_class_constructor,
+        NULL
+   };
+
+   const Eo_Class *klass = eo_class_new(&class_desc, SIMPLE_CLASS, NULL);
+   fail_if(!klass);
+
+   Eo *obj = eo_add(klass, NULL);
+   fail_if(!obj);
+
+   fail_if(!eo_do(obj, simple_a_print(), multi_a_print(), multi_a_print()));
+   fail_if(!eo_class_do(klass, simple_class_hi_print(), multi_class_hi_print(), multi_class_hi_print()));
+
+   eo_unref(obj);
+
+   eo_shutdown();
+}
+END_TEST
+
+START_TEST(eo_add_do_and_custom)
+{
+   Simple_Public_Data *pd = NULL;
+   Eo *obj = NULL;
+   eo_init();
+
+   obj = eo_add_custom(SIMPLE_CLASS, NULL, eo_constructor());
+   fail_if(!obj);
+   eo_unref(obj);
+
+   obj = eo_add(SIMPLE_CLASS, NULL, simple_a_set(7));
+   fail_if(!obj);
+   pd = eo_data_get(obj, SIMPLE_CLASS);
+   fail_if(pd->a != 7);
+   eo_unref(obj);
+
+   obj = eo_add_custom(SIMPLE_CLASS, NULL, eo_constructor(), simple_a_set(7));
+   fail_if(!obj);
+   pd = eo_data_get(obj, SIMPLE_CLASS);
+   fail_if(pd->a != 7);
+   eo_unref(obj);
+
+   eo_shutdown();
+}
+END_TEST
+
 void eo_test_general(TCase *tc)
 {
    tcase_add_test(tc, eo_generic_data);
@@ -577,6 +741,8 @@ void eo_test_general(TCase *tc)
    tcase_add_test(tc, eo_magic_checks);
    tcase_add_test(tc, eo_data_fetch);
    tcase_add_test(tc, eo_man_free);
-   tcase_add_test(tc, eo_static_classes);
    tcase_add_test(tc, eo_composite_tests);
+   tcase_add_test(tc, eo_isa_tests);
+   tcase_add_test(tc, eo_multiple_do);
+   tcase_add_test(tc, eo_add_do_and_custom);
 }