efl/src/tests/eolian/eolian_aux.c

147 lines
3.9 KiB
C

#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <Eolian_Aux.h>
#include "eolian_suite.h"
EFL_START_TEST(eolian_aux_children)
{
Eolian_State *eos = eolian_state_new();
fail_if(!eolian_state_directory_add(eos, TESTS_SRC_DIR"/data_aux"));
fail_if(!eolian_state_file_parse(eos, "aux_a.eo"));
fail_if(!eolian_state_file_parse(eos, "aux_b.eo"));
Eina_Hash *chash = eolian_aux_state_class_children_find(eos);
fail_if(!chash);
const Eolian_Class *acl = eolian_state_class_by_name_get(eos, "Aux_A");
fail_if(!acl);
const Eolian_Class *bcl = eolian_state_class_by_name_get(eos, "Aux_B");
fail_if(!bcl);
const Eolian_Class *ccl = eolian_state_class_by_name_get(eos, "Aux_C");
fail_if(!ccl);
Eina_List *cl = eina_hash_find(chash, &ccl);
fail_if(!cl);
fail_if(eina_list_count(cl) != 2);
if (eina_list_nth(cl, 0) == bcl)
fail_if(eina_list_nth(cl, 1) != acl);
else
{
fail_if(eina_list_nth(cl, 0) != acl);
fail_if(eina_list_nth(cl, 1) != bcl);
}
eina_hash_free(chash);
eolian_state_free(eos);
}
EFL_END_TEST
EFL_START_TEST(eolian_aux_implements)
{
Eolian_State *eos = eolian_state_new();
fail_if(!eolian_state_directory_add(eos, TESTS_SRC_DIR"/data_aux"));
fail_if(!eolian_state_file_parse(eos, "aux_a.eo"));
fail_if(!eolian_state_file_parse(eos, "aux_b.eo"));
Eina_Hash *chash = eolian_aux_state_class_children_find(eos);
fail_if(!chash);
const Eolian_Class *ccl = eolian_state_class_by_name_get(eos, "Aux_C");
fail_if(!ccl);
const Eolian_Function *fn = eolian_class_function_by_name_get(ccl, "foo", EOLIAN_METHOD);
fail_if(!fn);
Eina_List *imps = eolian_aux_function_all_implements_get(fn, chash);
fail_if(!imps);
fail_if(eina_list_count(imps) != 2);
eina_list_free(imps);
eina_hash_free(chash);
eolian_state_free(eos);
}
EFL_END_TEST
EFL_START_TEST(eolian_aux_callables)
{
Eolian_State *eos = eolian_state_new();
fail_if(!eolian_state_directory_add(eos, TESTS_SRC_DIR"/data_aux"));
fail_if(!eolian_state_file_parse(eos, "aux_a.eo"));
const Eolian_Class *acl = eolian_state_class_by_name_get(eos, "Aux_A");
fail_if(!acl);
Eina_List *funcs = NULL;
Eina_List *evs = NULL;
size_t ofuncs = 0;
size_t oevs = 0;
size_t clbls = eolian_aux_class_callables_get(acl, &funcs, &evs, &ofuncs, &oevs);
fail_if(clbls != 5);
fail_if(ofuncs != 3);
fail_if(oevs != 1);
fail_if(eina_list_count(funcs) != 3);
fail_if(eina_list_count(evs) != 2);
eina_list_free(funcs);
eina_list_free(evs);
eolian_state_free(eos);
}
EFL_END_TEST
EFL_START_TEST(eolian_aux_implparent)
{
Eolian_State *eos = eolian_state_new();
fail_if(!eolian_state_directory_add(eos, TESTS_SRC_DIR"/data_aux"));
fail_if(!eolian_state_file_parse(eos, "aux_a.eo"));
const Eolian_Class *acl = eolian_state_class_by_name_get(eos, "Aux_A");
fail_if(!acl);
const Eolian_Class *ccl = eolian_state_class_by_name_get(eos, "Aux_C");
fail_if(!ccl);
const Eolian_Function *fn = eolian_class_function_by_name_get(ccl, "foo", EOLIAN_METHOD);
fail_if(!fn);
const Eolian_Implement *impl = NULL;
Eina_Iterator *itr = eolian_class_implements_get(acl);
EINA_ITERATOR_FOREACH(itr, impl)
{
if (eolian_implement_function_get(impl, NULL) == fn)
break;
}
eina_iterator_free(itr);
fail_if(!impl);
fail_if(eolian_implement_function_get(impl, NULL) != fn);
fail_if(eolian_implement_class_get(impl) != ccl);
fail_if(eolian_implement_implementing_class_get(impl) != acl);
const Eolian_Implement *pimpl = eolian_aux_implement_parent_get(impl);
fail_if(eolian_implement_class_get(pimpl) != ccl);
fail_if(eolian_implement_implementing_class_get(pimpl) != ccl);
eolian_state_free(eos);
}
EFL_END_TEST
void eolian_aux_test(TCase *tc)
{
tcase_add_test(tc, eolian_aux_children);
tcase_add_test(tc, eolian_aux_implements);
tcase_add_test(tc, eolian_aux_callables);
tcase_add_test(tc, eolian_aux_implparent);
}