summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@samsung.com>2014-07-30 15:35:57 +0100
committerDaniel Kolesa <d.kolesa@samsung.com>2014-08-04 16:29:13 +0100
commitc0c73dc29dc3130397e887cd8cf98b9afbff2b0c (patch)
treed842d14b82e86afb675be075000577551cfeb813
parent2f175156b8520e9dfcdc1b818f194ff5792a9a12 (diff)
downloadefl-c0c73dc29dc3130397e887cd8cf98b9afbff2b0c.tar.gz
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.
-rw-r--r--src/lib/eolian/eo_parser.c28
-rw-r--r--src/tests/eolian/data/class_funcs.eo2
-rw-r--r--src/tests/eolian/data/class_simple.eo2
-rw-r--r--src/tests/eolian/data/consts.eo2
-rw-r--r--src/tests/eolian/data/extern.eo2
-rw-r--r--src/tests/eolian/data/namespace.eo33
-rw-r--r--src/tests/eolian/data/nmsp1_class1.eo8
-rw-r--r--src/tests/eolian/data/nmsp1_nmsp11_class2.eo12
-rw-r--r--src/tests/eolian/data/nmsp2_class1.eo3
-rw-r--r--src/tests/eolian/data/no_nmsp.eo7
-rw-r--r--src/tests/eolian/data/object_impl.eo2
-rw-r--r--src/tests/eolian/data/object_impl_add.eo4
-rw-r--r--src/tests/eolian/data/override.eo2
-rw-r--r--src/tests/eolian/data/scope.eo2
-rw-r--r--src/tests/eolian/data/struct.eo2
-rw-r--r--src/tests/eolian/data/typedef.eo2
-rw-r--r--src/tests/eolian/eolian_parsing.c19
17 files changed, 70 insertions, 62 deletions
diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c
index a9d089cedb..f8d7bd6f1d 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 94b66bab6f..b65c19718b 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 ae7a9328ef..ad23b2e710 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 0dff005e9f..f82e1aee41 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 2c6b47243d..b8ff807718 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 a5f0b96d26..0000000000
--- 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 0000000000..635bcab5da
--- /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 0000000000..9b042afad1
--- /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 0000000000..91e9de6fb1
--- /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 0000000000..740cd64212
--- /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 16dc2952d4..079a475265 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 213b4ef81c..0aafb0acc1 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 de54316241..d4aa199029 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 fe5045cce7..8fe360e96b 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 9b0209dd02..c2ae0c0076 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 e5c691f85b..a9595422f6 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 60a12d7645..57bdd8236b 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)));