From: Daniel Kolesa Date: Wed, 30 Jul 2014 14:35:57 +0000 (+0100) Subject: eolian: fix tests and fix class name comparison in parser X-Git-Tag: upstream/1.11.0+73+gfce1e61~68 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c88c0d9347e152e27b46ab6ed71b88ed31630cab;p=platform%2Fupstream%2Fefl.git eolian: fix tests and fix class name comparison in parser This fixes the Eolian testsuite as well as adds a better way to compare where a class comes from, allowing us to guess EOLIAN_TYPE_CLASS correctly. --- diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index a9d089c..f8d7bd6 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -442,23 +442,31 @@ parse_type_struct_void(Eo_Lexer *ls, Eina_Bool allow_struct) } else { - const char *nm, *fpath; - char *fname; + const char *bnm, *nm; + char *fnm; buf = push_strbuf(ls); parse_name(ls, buf); nm = eina_strbuf_string_get(buf); - fname = database_class_to_filename(nm); - fpath = eina_hash_find(_filenames, fname); - free(fname); - if (fpath) + bnm = get_filename(ls); + fnm = database_class_to_filename(nm); + if (strncmp(bnm, fnm, strlen(bnm) - 3)) { - def->type = EOLIAN_TYPE_CLASS; - if (strcmp(ls->source, fpath)) + const char *fname = eina_hash_find(_filenames, fnm); + eina_stringshare_del(bnm); + free(fnm); + if (fname) { - if (!eolian_class_get_by_name(nm) && !eolian_eo_file_parse(fpath)) + if (!eolian_class_get_by_name(nm) && !eolian_eo_file_parse(fname)) eo_lexer_syntax_error(ls, "failed to parse dependency"); + def->type = EOLIAN_TYPE_CLASS; } } + else + { + eina_stringshare_del(bnm); + free(fnm); + def->type = EOLIAN_TYPE_CLASS; + } _fill_type_name(def, eina_stringshare_add(nm)); pop_strbuf(ls); } @@ -1173,7 +1181,7 @@ parse_class(Eo_Lexer *ls, Eina_Bool allow_ctors, Eolian_Class_Type type) parse_name(ls, buf); bnm = get_filename(ls); fnm = database_class_to_filename(eina_strbuf_string_get(buf)); - same = !!strcmp(bnm, fnm); + same = !strncmp(bnm, fnm, strlen(bnm) - 3); eina_stringshare_del(bnm); free(fnm); if (!same) diff --git a/src/tests/eolian/data/class_funcs.eo b/src/tests/eolian/data/class_funcs.eo index 94b66ba..b65c197 100644 --- a/src/tests/eolian/data/class_funcs.eo +++ b/src/tests/eolian/data/class_funcs.eo @@ -1,4 +1,4 @@ -class Simple { +class Class_Funcs { properties { a @class { get { diff --git a/src/tests/eolian/data/class_simple.eo b/src/tests/eolian/data/class_simple.eo index ae7a932..ad23b2e 100644 --- a/src/tests/eolian/data/class_simple.eo +++ b/src/tests/eolian/data/class_simple.eo @@ -1,4 +1,4 @@ -class Simple { +class Class_Simple { /*@ Class Desc Simple */ legacy_prefix: evas_object_simple; eo_prefix: evas_obj_simple; diff --git a/src/tests/eolian/data/consts.eo b/src/tests/eolian/data/consts.eo index 0dff005..f82e1ae 100644 --- a/src/tests/eolian/data/consts.eo +++ b/src/tests/eolian/data/consts.eo @@ -1,4 +1,4 @@ -class Const { +class Consts { properties { a { set { diff --git a/src/tests/eolian/data/extern.eo b/src/tests/eolian/data/extern.eo index 2c6b472..b8ff807 100644 --- a/src/tests/eolian/data/extern.eo +++ b/src/tests/eolian/data/extern.eo @@ -16,7 +16,7 @@ struct @extern Y field: int; } -class Dummy { +class Extern { methods { foo { params { diff --git a/src/tests/eolian/data/namespace.eo b/src/tests/eolian/data/namespace.eo deleted file mode 100644 index a5f0b96..0000000 --- a/src/tests/eolian/data/namespace.eo +++ /dev/null @@ -1,33 +0,0 @@ -class nmsp1.nmsp11.class2 -{ - properties { - a { - set { - } - } - } - implements { - virtual.a.set; - } -} - -class nmsp2.class1 -{ -} - -class no_nmsp -{ - methods { - foo { - } - } -} - -class nmsp1.class1 (nmsp1.nmsp11.class2, nmsp2.class1, no_nmsp) -{ - implements { - nmsp1.nmsp11.class2.a.set; - nmsp1.bad_class.a.set; - no_nmsp.foo; - } -} diff --git a/src/tests/eolian/data/nmsp1_class1.eo b/src/tests/eolian/data/nmsp1_class1.eo new file mode 100644 index 0000000..635bcab --- /dev/null +++ b/src/tests/eolian/data/nmsp1_class1.eo @@ -0,0 +1,8 @@ +class nmsp1.class1 (nmsp1.nmsp11.class2, nmsp2.class1, no_nmsp) +{ + implements { + nmsp1.nmsp11.class2.a.set; + nmsp1.bad_class.a.set; + no_nmsp.foo; + } +} diff --git a/src/tests/eolian/data/nmsp1_nmsp11_class2.eo b/src/tests/eolian/data/nmsp1_nmsp11_class2.eo new file mode 100644 index 0000000..9b042af --- /dev/null +++ b/src/tests/eolian/data/nmsp1_nmsp11_class2.eo @@ -0,0 +1,12 @@ +class nmsp1.nmsp11.class2 +{ + properties { + a { + set { + } + } + } + implements { + virtual.a.set; + } +} diff --git a/src/tests/eolian/data/nmsp2_class1.eo b/src/tests/eolian/data/nmsp2_class1.eo new file mode 100644 index 0000000..91e9de6 --- /dev/null +++ b/src/tests/eolian/data/nmsp2_class1.eo @@ -0,0 +1,3 @@ +class nmsp2.class1 +{ +} diff --git a/src/tests/eolian/data/no_nmsp.eo b/src/tests/eolian/data/no_nmsp.eo new file mode 100644 index 0000000..740cd64 --- /dev/null +++ b/src/tests/eolian/data/no_nmsp.eo @@ -0,0 +1,7 @@ +class no_nmsp +{ + methods { + foo { + } + } +} diff --git a/src/tests/eolian/data/object_impl.eo b/src/tests/eolian/data/object_impl.eo index 16dc295..079a475 100644 --- a/src/tests/eolian/data/object_impl.eo +++ b/src/tests/eolian/data/object_impl.eo @@ -1,4 +1,4 @@ -class Object (Base) { +class Object_Impl (Base) { constructors { constructor_1 { params { diff --git a/src/tests/eolian/data/object_impl_add.eo b/src/tests/eolian/data/object_impl_add.eo index 213b4ef..0aafb0a 100644 --- a/src/tests/eolian/data/object_impl_add.eo +++ b/src/tests/eolian/data/object_impl_add.eo @@ -1,4 +1,6 @@ -class Object (Base) { +class Object_Impl_Add (Base) { + data: Object_Impl_Data; + properties { c { set { diff --git a/src/tests/eolian/data/override.eo b/src/tests/eolian/data/override.eo index de54316..d4aa199 100644 --- a/src/tests/eolian/data/override.eo +++ b/src/tests/eolian/data/override.eo @@ -1,4 +1,4 @@ -class Simple (Base) { +class Override (Base) { properties { a { set { diff --git a/src/tests/eolian/data/scope.eo b/src/tests/eolian/data/scope.eo index fe5045c..8fe360e 100644 --- a/src/tests/eolian/data/scope.eo +++ b/src/tests/eolian/data/scope.eo @@ -1,4 +1,4 @@ -class Simple { +class Scope { properties { a @protected { get { diff --git a/src/tests/eolian/data/struct.eo b/src/tests/eolian/data/struct.eo index 9b0209d..c2ae0c0 100644 --- a/src/tests/eolian/data/struct.eo +++ b/src/tests/eolian/data/struct.eo @@ -19,7 +19,7 @@ type Bar: struct { b: struct _Foo; }; -class Dummy { +class Struct { methods { foo { params { diff --git a/src/tests/eolian/data/typedef.eo b/src/tests/eolian/data/typedef.eo index e5c691f..a959542 100644 --- a/src/tests/eolian/data/typedef.eo +++ b/src/tests/eolian/data/typedef.eo @@ -1,7 +1,7 @@ type Evas.Coord: int; /* Simple type definition */ type List_Objects: own(Eina.List*)< Eo *>; /* A little more complex */ -class Dummy { +class Typedef { methods { foo { params { diff --git a/src/tests/eolian/eolian_parsing.c b/src/tests/eolian/eolian_parsing.c index 60a12d7..57bdd82 100644 --- a/src/tests/eolian/eolian_parsing.c +++ b/src/tests/eolian/eolian_parsing.c @@ -21,7 +21,8 @@ START_TEST(eolian_namespaces) eolian_init(); /* Parsing */ - fail_if(!eolian_eo_file_parse(PACKAGE_DATA_DIR"/data/namespace.eo")); + fail_if(!eolian_directory_scan(PACKAGE_DATA_DIR"/data")); + fail_if(!eolian_eo_file_parse(PACKAGE_DATA_DIR"/data/nmsp1_class1.eo")); /* Classes existence */ fail_if(!(class11 = eolian_class_get_by_name("nmsp1.class1"))); @@ -151,7 +152,7 @@ START_TEST(eolian_override) fail_if(!eolian_eo_file_parse(PACKAGE_DATA_DIR"/data/override.eo")); /* Class */ - fail_if(!(class = eolian_class_get_by_name("Simple"))); + fail_if(!(class = eolian_class_get_by_name("Override"))); fail_if(!(base = eolian_class_get_by_name("Base"))); /* Base ctor */ @@ -186,7 +187,7 @@ START_TEST(eolian_consts) eolian_init(); /* Parsing */ fail_if(!eolian_eo_file_parse(PACKAGE_DATA_DIR"/data/consts.eo")); - fail_if(!(class = eolian_class_get_by_name("Const"))); + fail_if(!(class = eolian_class_get_by_name("Consts"))); /* Property */ fail_if(!(fid = eolian_class_function_get_by_name(class, "a", EOLIAN_PROPERTY))); @@ -258,7 +259,7 @@ START_TEST(eolian_typedef) fail_if(!eolian_eo_file_parse(PACKAGE_DATA_DIR"/data/typedef.eo")); /* Check that the class Dummy is still readable */ - fail_if(!(class = eolian_class_get_by_name("Dummy"))); + fail_if(!(class = eolian_class_get_by_name("Typedef"))); fail_if(!eolian_class_function_get_by_name(class, "foo", EOLIAN_METHOD)); /* Basic type */ @@ -410,7 +411,7 @@ START_TEST(eolian_scope) eolian_init(); /* Parsing */ fail_if(!eolian_eo_file_parse(PACKAGE_DATA_DIR"/data/scope.eo")); - fail_if(!(class = eolian_class_get_by_name("Simple"))); + fail_if(!(class = eolian_class_get_by_name("Scope"))); /* Property scope */ fail_if(!(fid = eolian_class_function_get_by_name(class, "a", EOLIAN_PROPERTY))); @@ -447,7 +448,7 @@ START_TEST(eolian_simple_parsing) eolian_init(); /* Parsing */ fail_if(!eolian_eo_file_parse(PACKAGE_DATA_DIR"/data/class_simple.eo")); - fail_if(!(class = eolian_class_get_by_name("Simple"))); + fail_if(!(class = eolian_class_get_by_name("Class_Simple"))); fail_if(eolian_class_get_by_file("class_simple.eo") != class); fail_if(strcmp(eolian_class_file_get(class), "class_simple.eo")); @@ -557,7 +558,7 @@ START_TEST(eolian_struct) fail_if(!eolian_eo_file_parse(PACKAGE_DATA_DIR"/data/struct.eo")); /* Check that the class Dummy is still readable */ - fail_if(!(class = eolian_class_get_by_name("Dummy"))); + fail_if(!(class = eolian_class_get_by_name("Struct"))); fail_if(!eolian_class_function_get_by_name(class, "foo", EOLIAN_METHOD)); /* named struct */ @@ -624,7 +625,7 @@ START_TEST(eolian_extern) fail_if(!eolian_eo_file_parse(PACKAGE_DATA_DIR"/data/extern.eo")); /* Check that the class Dummy is still readable */ - fail_if(!(class = eolian_class_get_by_name("Dummy"))); + fail_if(!(class = eolian_class_get_by_name("Extern"))); fail_if(!eolian_class_function_get_by_name(class, "foo", EOLIAN_METHOD)); /* regular type */ @@ -655,7 +656,7 @@ START_TEST(eolian_class_funcs) 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"))); + fail_if(!(class = eolian_class_get_by_name("Class_Funcs"))); /* Class properties */ fail_if(!(fid = eolian_class_function_get_by_name(class, "a", EOLIAN_PROPERTY)));