Eolian/Tests: add test for ctors and dtors.
authorDaniel Zaoui <daniel.zaoui@samsung.com>
Thu, 24 Apr 2014 12:43:37 +0000 (15:43 +0300)
committerDaniel Zaoui <daniel.zaoui@samsung.com>
Thu, 24 Apr 2014 12:47:51 +0000 (15:47 +0300)
src/Makefile_Eolian.am
src/tests/eolian/data/base.eo [new file with mode: 0644]
src/tests/eolian/data/ctor_dtor.eo [new file with mode: 0644]
src/tests/eolian/eolian_suite.c

index 89f169e..f9155fe 100644 (file)
@@ -79,5 +79,8 @@ tests_eolian_eolian_suite_DEPENDENCIES = @USE_EOLIAN_INTERNAL_LIBS@
 endif
 
 EXTRA_DIST += \
+tests/eolian/data/base.eo \
 tests/eolian/data/class_simple.eo \
-tests/eolian/data/scope.eo
+tests/eolian/data/scope.eo \
+tests/eolian/data/ctor_dtor.eo
+
diff --git a/src/tests/eolian/data/base.eo b/src/tests/eolian/data/base.eo
new file mode 100644 (file)
index 0000000..e8132b8
--- /dev/null
@@ -0,0 +1,8 @@
+class Base {
+   methods {
+      constructor {
+      }
+      destructor {
+      }
+   }
+}
diff --git a/src/tests/eolian/data/ctor_dtor.eo b/src/tests/eolian/data/ctor_dtor.eo
new file mode 100644 (file)
index 0000000..b0b1fea
--- /dev/null
@@ -0,0 +1,18 @@
+class Ctor_Dtor (Base) {
+   constructors {
+      custom_constructor_1 {
+         params {
+            @in int a;
+            @in char b;
+         }
+      }
+      custom_constructor_2 {
+      }
+   }
+   implements {
+      class::constructor;
+      class::destructor;
+      Base::constructor;
+      Base::destructor;
+   }
+}
index da1a73b..a324199 100644 (file)
@@ -16,6 +16,42 @@ struct _Eolian_Test_Case
    void      (*build)(TCase *tc);
 };
 
+START_TEST(eolian_ctor_dtor)
+{
+   const char *class_name = "Ctor_Dtor";
+   const char *base_name = "Base";
+   const Eina_List *impls = NULL;
+   const char *impl_class = NULL, *impl_func = NULL;
+
+   eolian_init();
+   /* Parsing */
+   fail_if(!eolian_eo_file_parse(PACKAGE_DATA_DIR"/data/base.eo"));
+   fail_if(!eolian_eo_file_parse(PACKAGE_DATA_DIR"/data/ctor_dtor.eo"));
+
+   /* Class ctor/dtor */
+   fail_if(!eolian_class_ctor_enable_get(class_name));
+   fail_if(!eolian_class_dtor_enable_get(class_name));
+
+   /* Base ctor/dtor */
+   fail_if(!(impls = eolian_class_implements_list_get(class_name)));
+   fail_if(eina_list_count(impls) != 2);
+   fail_if(!eolian_implement_information_get(eina_list_nth(impls, 0), &impl_class, &impl_func, NULL));
+   fail_if(strcmp(impl_class, base_name));
+   fail_if(strcmp(impl_func, "constructor"));
+   fail_if(!eolian_implement_information_get(eina_list_nth(impls, 1), &impl_class, &impl_func, NULL));
+   fail_if(strcmp(impl_class, base_name));
+   fail_if(strcmp(impl_func, "destructor"));
+
+   /* Custom ctors/dtors */
+   fail_if(!eolian_class_function_find_by_name(base_name, "constructor", EOLIAN_METHOD));
+   fail_if(!eolian_class_function_find_by_name(base_name, "destructor", EOLIAN_METHOD));
+   fail_if(!eolian_class_function_find_by_name(class_name, "custom_constructor_1", EOLIAN_CTOR));
+   fail_if(!eolian_class_function_find_by_name(class_name, "custom_constructor_2", EOLIAN_CTOR));
+
+   eolian_shutdown();
+}
+END_TEST
+
 START_TEST(eolian_scope)
 {
    Eolian_Function fid = NULL;
@@ -149,6 +185,7 @@ END_TEST
 static void eolian_parsing_test(TCase *tc)
 {
    tcase_add_test(tc, eolian_simple_parsing);
+   tcase_add_test(tc, eolian_ctor_dtor);
    tcase_add_test(tc, eolian_scope);
 }