forked from enlightenment/efl
parent
f702826a90
commit
d49c544e81
|
@ -30,6 +30,7 @@ lib_eolian_libeolian_la_SOURCES = \
|
|||
lib/eolian/database_event.c \
|
||||
lib/eolian/database_event_api.c \
|
||||
lib/eolian/database_part.c \
|
||||
lib/eolian/database_part_api.c \
|
||||
lib/eolian/database_expr.c \
|
||||
lib/eolian/database_expr_api.c \
|
||||
lib/eolian/database_var.c \
|
||||
|
@ -94,6 +95,7 @@ tests/eolian/data/object_impl.eo \
|
|||
tests/eolian/data/object_impl_add.eo \
|
||||
tests/eolian/data/override.eo \
|
||||
tests/eolian/data/owning.eo \
|
||||
tests/eolian/data/parts.eo \
|
||||
tests/eolian/data/scope.eo \
|
||||
tests/eolian/data/struct.eo \
|
||||
tests/eolian/data/typedef.eo \
|
||||
|
|
|
@ -1253,7 +1253,7 @@ EAPI Eina_Iterator *eolian_class_constructors_get(const Eolian_Class *klass);
|
|||
* @brief Get an iterator to the events defined in a class.
|
||||
*
|
||||
* @param[in] klass the class.
|
||||
* @return the iterator
|
||||
* @return an iterator over const Eolian_Event* objects
|
||||
*
|
||||
* @ingroup Eolian
|
||||
*/
|
||||
|
@ -1333,6 +1333,46 @@ EAPI Eina_Bool eolian_event_is_hot(const Eolian_Event *event);
|
|||
*/
|
||||
EAPI Eina_Bool eolian_event_is_restart(const Eolian_Event *event);
|
||||
|
||||
/*
|
||||
* @brief Get an iterator to the parts defined in a class.
|
||||
*
|
||||
* @param[in] klass the class.
|
||||
* @return an iterator over const Eolian_Part* objects
|
||||
*
|
||||
* @ingroup Eolian
|
||||
*/
|
||||
EAPI Eina_Iterator *eolian_class_parts_get(const Eolian_Class *klass);
|
||||
|
||||
/*
|
||||
* @brief Get the name of a part.
|
||||
*
|
||||
* @param[in] part the part handle
|
||||
* @return the name or NULL
|
||||
*
|
||||
* @ingroup Eolian
|
||||
*/
|
||||
EAPI Eina_Stringshare *eolian_part_name_get(const Eolian_Part *part);
|
||||
|
||||
/*
|
||||
* @brief Get the type of a part.
|
||||
*
|
||||
* @param[in] part the part handle
|
||||
* @return the type or NULL
|
||||
*
|
||||
* @ingroup Eolian
|
||||
*/
|
||||
EAPI const Eolian_Class *eolian_part_class_get(const Eolian_Part *part);
|
||||
|
||||
/*
|
||||
* @brief Get the documentation of an part.
|
||||
*
|
||||
* @param[in] part the part handle
|
||||
* @return the documentation or NULL
|
||||
*
|
||||
* @ingroup Eolian
|
||||
*/
|
||||
EAPI const Eolian_Documentation *eolian_part_documentation_get(const Eolian_Part *part);
|
||||
|
||||
/*
|
||||
* @brief Returns the C name of an event
|
||||
*
|
||||
|
|
|
@ -173,6 +173,13 @@ eolian_class_events_get(const Eolian_Class *cl)
|
|||
return (cl->events ? eina_list_iterator_new(cl->events) : NULL);
|
||||
}
|
||||
|
||||
EAPI Eina_Iterator *
|
||||
eolian_class_parts_get(const Eolian_Class *cl)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
|
||||
return (cl->parts ? eina_list_iterator_new(cl->parts) : NULL);
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
eolian_class_ctor_enable_get(const Eolian_Class *cl)
|
||||
{
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <Eina.h>
|
||||
#include "eolian_database.h"
|
||||
|
||||
EAPI Eina_Stringshare *
|
||||
eolian_part_name_get(const Eolian_Part *part)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
|
||||
return part->name;
|
||||
}
|
||||
|
||||
EAPI const Eolian_Class *
|
||||
eolian_part_class_get(const Eolian_Part *part)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
|
||||
return part->klass;
|
||||
}
|
||||
|
||||
EAPI const Eolian_Documentation *
|
||||
eolian_part_documentation_get(const Eolian_Part *part)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
|
||||
return part->doc;
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
class Parts (Override, Base) {
|
||||
parts {
|
||||
part1: Override; [[Part 1]]
|
||||
part2: Base; [[Part 2]]
|
||||
part3: Parts; [[Part 3]]
|
||||
}
|
||||
}
|
|
@ -1544,6 +1544,51 @@ START_TEST(eolian_function_as_arguments)
|
|||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(eolian_parts)
|
||||
{
|
||||
const Eolian_Unit *unit;
|
||||
const Eolian_Class *cls;
|
||||
Eina_Iterator *iter;
|
||||
Eolian_Part *part;
|
||||
int i = 0;
|
||||
|
||||
static const char *part_classes[] = {
|
||||
"Override", "Base", "Parts"
|
||||
};
|
||||
|
||||
eolian_init();
|
||||
|
||||
fail_if(!eolian_directory_scan(PACKAGE_DATA_DIR"/data"));
|
||||
|
||||
fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/parts.eo")));
|
||||
|
||||
fail_if(!(cls = eolian_class_get_by_name(unit, "Parts")));
|
||||
|
||||
fail_if(!(iter = eolian_class_parts_get(cls)));
|
||||
|
||||
EINA_ITERATOR_FOREACH(iter, part)
|
||||
{
|
||||
const Eolian_Documentation *doc;
|
||||
const Eolian_Class *klass;
|
||||
char pattern[24];
|
||||
|
||||
sprintf(pattern, "part%d", i + 1);
|
||||
ck_assert_str_eq(pattern, eolian_part_name_get(part));
|
||||
|
||||
sprintf(pattern, "Part %d", i + 1);
|
||||
fail_if(!(doc = eolian_part_documentation_get(part)));
|
||||
ck_assert_str_eq(pattern, eolian_documentation_summary_get(doc));
|
||||
|
||||
fail_if(!(klass = eolian_part_class_get(part)));
|
||||
ck_assert_str_eq(part_classes[i], eolian_class_name_get(klass));
|
||||
i++;
|
||||
}
|
||||
eina_iterator_free(iter);
|
||||
|
||||
eolian_shutdown();
|
||||
}
|
||||
END_TEST
|
||||
|
||||
void eolian_parsing_test(TCase *tc)
|
||||
{
|
||||
tcase_add_test(tc, eolian_simple_parsing);
|
||||
|
@ -1567,4 +1612,5 @@ void eolian_parsing_test(TCase *tc)
|
|||
tcase_add_test(tc, eolian_docs);
|
||||
tcase_add_test(tc, eolian_function_types);
|
||||
tcase_add_test(tc, eolian_function_as_arguments);
|
||||
tcase_add_test(tc, eolian_parts);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue