summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Zaoui <daniel.zaoui@samsung.com>2014-05-21 13:56:31 +0300
committerDaniel Zaoui <daniel.zaoui@samsung.com>2014-05-26 08:43:50 +0300
commitbb0d6a59d3c8d966a6dfa64f77404ad05e2ef4b0 (patch)
treebc5a24fe683a51e17a2bca93ac9ac45c1acdd7c3
parente13bec0681543073ddaa542a7d14004e486e5516 (diff)
downloadefl-bb0d6a59d3c8d966a6dfa64f77404ad05e2ef4b0.tar.gz
Eolian/Tests: add test for overriding functions
-rw-r--r--src/Makefile_Eolian.am3
-rw-r--r--src/tests/eolian/data/override.eo19
-rw-r--r--src/tests/eolian/eolian_parsing.c38
3 files changed, 59 insertions, 1 deletions
diff --git a/src/Makefile_Eolian.am b/src/Makefile_Eolian.am
index e4a189fe0f..1e44ce2cb4 100644
--- a/src/Makefile_Eolian.am
+++ b/src/Makefile_Eolian.am
@@ -94,5 +94,6 @@ tests/eolian/data/object_impl.eo \
tests/eolian/data/object_impl_ref.c \
tests/eolian/data/object_impl_add.eo \
tests/eolian/data/object_impl_add_ref.c \
-tests/eolian/data/consts.eo
+tests/eolian/data/consts.eo \
+tests/eolian/data/override.eo
diff --git a/src/tests/eolian/data/override.eo b/src/tests/eolian/data/override.eo
new file mode 100644
index 0000000000..2a0033fab2
--- /dev/null
+++ b/src/tests/eolian/data/override.eo
@@ -0,0 +1,19 @@
+class Simple (Base) {
+ properties {
+ a {
+ set {
+ }
+ get {
+ }
+ }
+ }
+ methods {
+ foo {
+ }
+ }
+ implements {
+ Base::constructor;
+ virtual::a::set;
+ virtual::foo;
+ }
+};
diff --git a/src/tests/eolian/eolian_parsing.c b/src/tests/eolian/eolian_parsing.c
index 3589c88d51..7ad4baf9bd 100644
--- a/src/tests/eolian/eolian_parsing.c
+++ b/src/tests/eolian/eolian_parsing.c
@@ -9,6 +9,43 @@
#include "Eolian.h"
#include "eolian_suite.h"
+START_TEST(eolian_override)
+{
+ Eolian_Function fid = NULL;
+ const char *class_name = "Simple";
+ const char *base_name = "Base";
+ const Eina_List *impls = NULL;
+ const char *impl_class = NULL, *impl_func = NULL;
+
+ eolian_init();
+ /* Parsing */
+ fail_if(!eolian_directory_scan(PACKAGE_DATA_DIR"/data"));
+ fail_if(!eolian_eo_file_parse(PACKAGE_DATA_DIR"/data/override.eo"));
+
+ /* Class */
+ fail_if(!eolian_class_exists(class_name));
+
+ /* Base ctor */
+ fail_if(!(fid = eolian_class_function_find_by_name(base_name, "constructor", EOLIAN_UNRESOLVED)));
+ fail_if(!eolian_function_is_virtual_pure(fid, EOLIAN_UNRESOLVED));
+ fail_if(!(impls = eolian_class_implements_list_get(class_name)));
+ 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"));
+
+ /* Property */
+ fail_if(!(fid = eolian_class_function_find_by_name(class_name, "a", EOLIAN_PROPERTY)));
+ fail_if(!eolian_function_is_virtual_pure(fid, EOLIAN_PROP_SET));
+ fail_if(eolian_function_is_virtual_pure(fid, EOLIAN_PROP_GET));
+
+ /* Method */
+ fail_if(!(fid = eolian_class_function_find_by_name(class_name, "foo", EOLIAN_METHOD)));
+ fail_if(!eolian_function_is_virtual_pure(fid, EOLIAN_METHOD));
+
+ eolian_shutdown();
+}
+END_TEST
+
START_TEST(eolian_consts)
{
Eolian_Function fid = NULL;
@@ -305,5 +342,6 @@ void eolian_parsing_test(TCase *tc)
tcase_add_test(tc, eolian_complex_type);
tcase_add_test(tc, eolian_typedef);
tcase_add_test(tc, eolian_consts);
+ tcase_add_test(tc, eolian_override);
}