eolian: add test for class methods/properties

This also fixes a bug in the Eolian parser that handles class properties.
This commit is contained in:
Daniel Kolesa 2014-07-24 14:01:33 +01:00
parent 94404b403c
commit e2c51100c7
4 changed files with 60 additions and 0 deletions

View File

@ -105,6 +105,7 @@ tests/eolian/data/events.eo \
tests/eolian/data/namespace.eo \
tests/eolian/data/extern.eo \
tests/eolian/data/struct.eo \
tests/eolian/data/class_funcs.eo \
tests/eolian/data/typedef_ref.c \
tests/eolian/data/struct_ref.c

View File

@ -734,6 +734,8 @@ parse_property(Eo_Lexer *ls)
case KW_at_class:
CASE_LOCK(ls, class, "class qualifier");
prop->is_class = EINA_TRUE;
eo_lexer_get(ls);
break;
default:
goto body;
}

View File

@ -0,0 +1,22 @@
class Simple {
properties {
a @class {
get {
}
}
b {
get {
}
}
}
methods {
foo @class {
}
bar {
}
baz @protected @class {
}
bah @protected {
}
}
}

View File

@ -647,6 +647,40 @@ START_TEST(eolian_extern)
}
END_TEST
START_TEST(eolian_class_funcs)
{
const Eolian_Function *fid = NULL;
const Eolian_Class *class;
eolian_init();
/* Parsing */
fail_if(!eolian_eo_file_parse(PACKAGE_DATA_DIR"/data/class_funcs.eo"));
fail_if(!(class = eolian_class_get_by_name("Simple")));
/* Class properties */
fail_if(!(fid = eolian_class_function_get_by_name(class, "a", EOLIAN_PROPERTY)));
fail_if(!eolian_function_is_class(fid));
fail_if(!(fid = eolian_class_function_get_by_name(class, "b", EOLIAN_PROPERTY)));
fail_if(eolian_function_is_class(fid));
/* Class methods */
fail_if(!(fid = eolian_class_function_get_by_name(class, "foo", EOLIAN_METHOD)));
fail_if(!eolian_function_is_class(fid));
fail_if(eolian_function_scope_get(fid) != EOLIAN_SCOPE_PUBLIC);
fail_if(!(fid = eolian_class_function_get_by_name(class, "bar", EOLIAN_METHOD)));
fail_if(eolian_function_is_class(fid));
fail_if(eolian_function_scope_get(fid) != EOLIAN_SCOPE_PUBLIC);
fail_if(!(fid = eolian_class_function_get_by_name(class, "baz", EOLIAN_METHOD)));
fail_if(!eolian_function_is_class(fid));
fail_if(eolian_function_scope_get(fid) != EOLIAN_SCOPE_PROTECTED);
fail_if(!(fid = eolian_class_function_get_by_name(class, "bah", EOLIAN_METHOD)));
fail_if(eolian_function_is_class(fid));
fail_if(eolian_function_scope_get(fid) != EOLIAN_SCOPE_PROTECTED);
eolian_shutdown();
}
END_TEST
void eolian_parsing_test(TCase *tc)
{
tcase_add_test(tc, eolian_simple_parsing);
@ -660,5 +694,6 @@ void eolian_parsing_test(TCase *tc)
tcase_add_test(tc, eolian_namespaces);
tcase_add_test(tc, eolian_struct);
tcase_add_test(tc, eolian_extern);
tcase_add_test(tc, eolian_class_funcs);
}