Eo: tests to check eo ptrs indirection feature.
authorDaniel Zaoui <daniel.zaoui@samsung.com>
Thu, 18 Apr 2013 10:55:55 +0000 (13:55 +0300)
committerDaniel Zaoui <daniel.zaoui@samsung.com>
Tue, 23 Apr 2013 06:50:40 +0000 (09:50 +0300)
The test doesn't fail if the feature is disabled.

src/tests/eo/suite/eo_test_class_errors.c
src/tests/eo/suite/eo_test_general.c

index 658ff6d..302b107 100644 (file)
@@ -437,7 +437,11 @@ START_TEST(eo_op_types)
    fail_if(!klass);
 
    TEST_EO_ERROR("eo_class_name_get", NULL);
+#ifdef HAVE_EO_ID
+   ctx.expected_level = EINA_LOG_LEVEL_ERR;
+#else
    ctx.expected_level = EINA_LOG_LEVEL_CRITICAL;
+#endif
    /* Add class checks here... */
    Eo *obj = eo_add(klass, NULL);
    eo_do(obj, simple_a_set(7), simple_a_print(), simple_class_hi_print());
index f3d0888..866feb1 100644 (file)
@@ -822,6 +822,80 @@ START_TEST(eo_add_do_and_custom)
 }
 END_TEST
 
+START_TEST(eo_pointers_indirection)
+{
+#ifdef HAVE_EO_ID
+   eo_init();
+
+   static const Eo_Class_Description class_desc = {
+        EO_VERSION,
+        "Simple",
+        EO_CLASS_TYPE_REGULAR,
+        EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
+        NULL,
+        0,
+        NULL,
+        NULL
+   };
+
+   const Eo_Class *klass = eo_class_new(&class_desc, EO_BASE_CLASS, NULL);
+   fail_if(!klass);
+
+   /* Check simple id validity */
+   Eo *obj = eo_add(klass, NULL);
+   fail_if(!obj);
+   fail_if(!eo_isa(obj, klass));
+   obj = (Eo *)((char *)(obj) + 1);
+   fail_if(eo_isa(obj, klass));
+   obj = (Eo *)((char *)(obj) - 1);
+   fail_if(!eo_isa(obj, klass));
+   eo_unref(obj);
+   fail_if(eo_isa(obj, klass));
+
+   /* Check id invalidity after deletion */
+   Eo *obj1 = eo_add(klass, NULL);
+   fail_if(!obj1);
+   eo_unref(obj1);
+   Eo *obj2 = eo_add(klass, NULL);
+   fail_if(!obj2);
+   fail_if(!eo_isa(obj2, klass));
+   fail_if(eo_isa(obj1, klass));
+   eo_unref(obj2);
+
+#define NB_OBJS 100
+   unsigned int obj_id;
+   Eo **objs = calloc(NB_OBJS, sizeof(Eo *));
+   fail_if(!objs);
+   /* Creation of the objects */
+   for ( obj_id = 0; obj_id < NB_OBJS; obj_id++)
+     {
+        objs[obj_id] = eo_add(klass, NULL);
+        fail_if(!objs[obj_id]);
+        fail_if(!eo_isa(objs[obj_id], klass));
+     }
+   /* Deletion of half of the objects */
+   for ( obj_id = 0; obj_id < NB_OBJS; obj_id+=2)
+     {
+        eo_unref(objs[obj_id]);
+        fail_if(eo_isa(objs[obj_id], klass));
+     }
+   /* Creation of half of the objects */
+   for ( obj_id = 0; obj_id < NB_OBJS; obj_id+=2)
+     {
+        objs[obj_id] = eo_add(klass, NULL);
+        fail_if(!objs[obj_id]);
+        fail_if(!eo_isa(objs[obj_id], klass));
+     }
+   /* Deletion of all the objects */
+   for ( obj_id = 0; obj_id < NB_OBJS; obj_id++)
+      eo_unref(objs[obj_id]);
+   free(objs);
+
+   eo_shutdown();
+#endif
+}
+END_TEST
+
 void eo_test_general(TCase *tc)
 {
    tcase_add_test(tc, eo_generic_data);
@@ -837,4 +911,5 @@ void eo_test_general(TCase *tc)
    tcase_add_test(tc, eo_multiple_do);
    tcase_add_test(tc, eo_add_do_and_custom);
    tcase_add_test(tc, eo_signals);
+   tcase_add_test(tc, eo_pointers_indirection);
 }