forked from enlightenment/efl
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:
parent
94404b403c
commit
e2c51100c7
|
@ -105,6 +105,7 @@ tests/eolian/data/events.eo \
|
||||||
tests/eolian/data/namespace.eo \
|
tests/eolian/data/namespace.eo \
|
||||||
tests/eolian/data/extern.eo \
|
tests/eolian/data/extern.eo \
|
||||||
tests/eolian/data/struct.eo \
|
tests/eolian/data/struct.eo \
|
||||||
|
tests/eolian/data/class_funcs.eo \
|
||||||
tests/eolian/data/typedef_ref.c \
|
tests/eolian/data/typedef_ref.c \
|
||||||
tests/eolian/data/struct_ref.c
|
tests/eolian/data/struct_ref.c
|
||||||
|
|
||||||
|
|
|
@ -734,6 +734,8 @@ parse_property(Eo_Lexer *ls)
|
||||||
case KW_at_class:
|
case KW_at_class:
|
||||||
CASE_LOCK(ls, class, "class qualifier");
|
CASE_LOCK(ls, class, "class qualifier");
|
||||||
prop->is_class = EINA_TRUE;
|
prop->is_class = EINA_TRUE;
|
||||||
|
eo_lexer_get(ls);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
goto body;
|
goto body;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
class Simple {
|
||||||
|
properties {
|
||||||
|
a @class {
|
||||||
|
get {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
b {
|
||||||
|
get {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
methods {
|
||||||
|
foo @class {
|
||||||
|
}
|
||||||
|
bar {
|
||||||
|
}
|
||||||
|
baz @protected @class {
|
||||||
|
}
|
||||||
|
bah @protected {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -647,6 +647,40 @@ START_TEST(eolian_extern)
|
||||||
}
|
}
|
||||||
END_TEST
|
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)
|
void eolian_parsing_test(TCase *tc)
|
||||||
{
|
{
|
||||||
tcase_add_test(tc, eolian_simple_parsing);
|
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_namespaces);
|
||||||
tcase_add_test(tc, eolian_struct);
|
tcase_add_test(tc, eolian_struct);
|
||||||
tcase_add_test(tc, eolian_extern);
|
tcase_add_test(tc, eolian_extern);
|
||||||
|
tcase_add_test(tc, eolian_class_funcs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue