From 79e21e90e0595d250394a0443cc81af20a85c79a Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Fri, 22 Sep 2017 22:56:31 +0200 Subject: [PATCH] eolian: add tests for the new owning functions --- src/tests/eolian/data/owning.eo | 25 ++++++++++++ src/tests/eolian/data/owning.eo.c | 77 ++++++++++++++++++++++++++++++++++++ src/tests/eolian/eolian_generation.c | 13 ++++++ 3 files changed, 115 insertions(+) create mode 100644 src/tests/eolian/data/owning.eo create mode 100644 src/tests/eolian/data/owning.eo.c diff --git a/src/tests/eolian/data/owning.eo b/src/tests/eolian/data/owning.eo new file mode 100644 index 0000000..7330375 --- /dev/null +++ b/src/tests/eolian/data/owning.eo @@ -0,0 +1,25 @@ +struct @free(free_a) Test.A { + t : int; +} + +class Owning { + methods { + test1 { + params { + test1 : list @owned; + test2 : iterator @owned; + test3 : hash @owned; + test4 : accessor @owned; + } + } + test2 { + params { + test1 : list @owned; + test2 : iterator @owned; + test3 : hash @owned; + test4 : accessor @owned; + } + } + + } +} diff --git a/src/tests/eolian/data/owning.eo.c b/src/tests/eolian/data/owning.eo.c new file mode 100644 index 0000000..0c0d03a --- /dev/null +++ b/src/tests/eolian/data/owning.eo.c @@ -0,0 +1,77 @@ + +void _owning_test1(Eo *obj, Owning_Data *pd, Eina_List *test1, Eina_Iterator *test2, Eina_Hash *test3, Eina_Accessor *test4); + +static void +_owning_test1_ownership_fallback(Eina_List *test1, Eina_Iterator *test2, Eina_Hash *test3, Eina_Accessor *test4) +{ + eina_list_free(test1); + eina_iterator_free(test2); + eina_hash_free_cb_set(test3,NULL); + eina_hash_free(test3); + eina_accessor_free(test4); +} + +EOAPI EFL_VOID_FUNC_BODYV_FALLBACK(owning_test1, _owning_test1_ownership_fallback(test1, test2, test3, test4);, EFL_FUNC_CALL(test1, test2, test3, test4), Eina_List *test1, Eina_Iterator *test2, Eina_Hash *test3, Eina_Accessor *test4); + +void _owning_test2(Eo *obj, Owning_Data *pd, Eina_List *test1, Eina_Iterator *test2, Eina_Hash *test3, Eina_Accessor *test4); + +static void +_owning_test2_ownership_fallback(Eina_List *test1, Eina_Iterator *test2, Eina_Hash *test3, Eina_Accessor *test4) +{ + Test_A *test1_iter; + EINA_LIST_FREE(test1,test1_iter) + { + free_a(test1_iter); + } + Test_A *test2_iter; + EINA_ITERATOR_FOREACH(test2,test2_iter) + { + free_a(test2_iter); + } + eina_hash_free_cb_set(test3,NULL); + eina_hash_free(test3); + Test_A *test4_iter; + unsigned int test4_i = 0; + EINA_ACCESSOR_FOREACH(test4,test4_i,test4_iter) + { + free_a(test4_iter); + } +} + +EOAPI EFL_VOID_FUNC_BODYV_FALLBACK(owning_test2, _owning_test2_ownership_fallback(test1, test2, test3, test4);, EFL_FUNC_CALL(test1, test2, test3, test4), Eina_List *test1, Eina_Iterator *test2, Eina_Hash *test3, Eina_Accessor *test4); + +static Eina_Bool +_owning_class_initializer(Efl_Class *klass) +{ + const Efl_Object_Ops *opsp = NULL, *copsp = NULL; + +#ifndef OWNING_EXTRA_OPS +#define OWNING_EXTRA_OPS +#endif + + EFL_OPS_DEFINE(ops, + EFL_OBJECT_OP_FUNC(owning_test1, _owning_test1), + EFL_OBJECT_OP_FUNC(owning_test2, _owning_test2), + OWNING_EXTRA_OPS + ); + opsp = &ops; + +#ifdef OWNING_EXTRA_CLASS_OPS + EFL_OPS_DEFINE(cops, OWNING_EXTRA_CLASS_OPS); + copsp = &cops; +#endif + + return efl_class_functions_set(klass, opsp, copsp); +} + +static const Efl_Class_Description _owning_class_desc = { + EO_VERSION, + "Owning", + EFL_CLASS_TYPE_REGULAR, + sizeof(Owning_Data), + _owning_class_initializer, + NULL, + NULL +}; + +EFL_DEFINE_CLASS(owning_class_get, &_owning_class_desc, NULL, NULL); diff --git a/src/tests/eolian/eolian_generation.c b/src/tests/eolian/eolian_generation.c index ee19d22..d1d0616 100644 --- a/src/tests/eolian/eolian_generation.c +++ b/src/tests/eolian/eolian_generation.c @@ -217,6 +217,18 @@ START_TEST(eolian_function_pointers) } END_TEST +START_TEST(owning) +{ + char output_filepath[PATH_MAX] = ""; + snprintf(output_filepath, PATH_MAX, "%s/eolian_owning", + eina_environment_tmp_get()); + _remove_ref(output_filepath, "c"); + fail_if(0 != _eolian_gen_execute(PACKAGE_DATA_DIR"/data/owning.eo", "-gc", output_filepath)); + fail_if(!_files_compare(PACKAGE_DATA_DIR"/data/owning.eo.c", output_filepath, "c")); + +} +END_TEST + void eolian_generation_test(TCase *tc) { tcase_add_test(tc, eolian_types_generation); @@ -227,4 +239,5 @@ void eolian_generation_test(TCase *tc) tcase_add_test(tc, eolian_import); tcase_add_test(tc, eolian_docs); tcase_add_test(tc, eolian_function_pointers); + tcase_add_test(tc, owning); } -- 2.7.4