tests/edje: split edje tests into separate files
authorMike Blumenkrantz <zmike@samsung.com>
Thu, 12 Jul 2018 07:25:15 +0000 (16:25 +0900)
committerShinwoo Kim <cinoo.kim@samsung.com>
Tue, 24 Jul 2018 05:37:18 +0000 (14:37 +0900)
Summary:
this will speed up tests and make it slightly less intimidating to
add new tests

Reviewers: devilhorns

Subscribers: cedric, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D6554

src/Makefile_Edje.am
src/tests/edje/edje_suite.c
src/tests/edje/edje_suite.h
src/tests/edje/edje_test_container.c [new file with mode: 0644]
src/tests/edje/edje_test_edje.c
src/tests/edje/edje_test_features.c [new file with mode: 0644]
src/tests/edje/edje_test_signal.c [new file with mode: 0644]
src/tests/edje/edje_test_swallow.c [new file with mode: 0644]
src/tests/edje/edje_test_text.c [new file with mode: 0644]
src/tests/edje/edje_tests_helpers.h [deleted file]

index f546fa1..5c5d189 100644 (file)
@@ -301,7 +301,6 @@ bin/edje/edje_convert.c \
 bin/edje/edje_data_convert.c \
 bin/edje/edje_convert_main.c \
 lib/edje/edje_convert.c \
-tests/edje/edje_tests_helpers.h \
 tests/edje/data/complex_layout.edc \
 tests/edje/data/test_layout.edc \
 tests/edje/data/test_parens.edc \
@@ -336,7 +335,12 @@ TESTS += tests/edje/edje_suite
 
 tests_edje_edje_suite_SOURCES = \
 tests/edje/edje_suite.c \
+tests/edje/edje_test_container.c \
 tests/edje/edje_test_edje.c \
+tests/edje/edje_test_features.c \
+tests/edje/edje_test_signal.c \
+tests/edje/edje_test_swallow.c \
+tests/edje/edje_test_text.c \
 tests/edje/edje_suite.h
 
 tests/edje/data/%.edj: tests/edje/data/%.edc bin/edje/edje_cc${EXEEXT}
index 80cb84a..e8f39cf 100644 (file)
@@ -4,21 +4,56 @@
 
 #include "edje_suite.h"
 #include "../efl_check.h"
-#include <Edje.h>
+#include <Ecore_Evas.h>
 
 static const Efl_Test_Case etc[] = {
   { "Edje", edje_test_edje },
+  { "Container", edje_test_container },
+  { "Features", edje_test_features },
+  { "Signal", edje_test_signal },
+  { "Swallow", edje_test_swallow },
+  { "Text", edje_test_text },
   { NULL, NULL }
 };
 
+const char *
+test_layout_get(const char *name)
+{
+   static char filename[PATH_MAX];
+
+   snprintf(filename, PATH_MAX, TESTS_BUILD_DIR"/data/%s", name);
+
+   return filename;
+}
+
+Evas *
+_setup_evas(void)
+{
+   Evas *evas;
+   Evas_Engine_Info *einfo;
+
+   evas = evas_new();
+
+   evas_output_method_set(evas, evas_render_method_lookup("buffer"));
+   einfo = evas_engine_info_get(evas);
+   evas_engine_info_set(evas, einfo);
+
+   evas_output_size_set(evas, 500, 500);
+   evas_output_viewport_set(evas, 0, 0, 500, 500);
+
+   return evas;
+}
+
 SUITE_INIT(edje)
 {
+   ck_assert_int_eq(ecore_evas_init(), 1);
    ck_assert_int_eq(edje_init(), 1);
 }
 
 SUITE_SHUTDOWN(edje)
 {
    ck_assert_int_eq(edje_shutdown(), 0);
+   ck_assert_int_eq(ecore_evas_shutdown(), 0);
 }
 
 int
index a6f1354..6f4ee5b 100644 (file)
@@ -3,7 +3,16 @@
 
 #include <check.h>
 #include "../efl_check.h"
+#include <Edje.h>
+Evas *_setup_evas(void);
+const char *test_layout_get(const char *name);
+
 void edje_test_edje(TCase *tc);
+void edje_test_container(TCase *tc);
+void edje_test_features(TCase *tc);
+void edje_test_signal(TCase *tc);
+void edje_test_swallow(TCase *tc);
+void edje_test_text(TCase *tc);
 
 
 #endif /* _EDJE_SUITE_H */
diff --git a/src/tests/edje/edje_test_container.c b/src/tests/edje/edje_test_container.c
new file mode 100644 (file)
index 0000000..018de4d
--- /dev/null
@@ -0,0 +1,282 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <unistd.h>
+#include <stdio.h>
+
+#define EFL_GFX_FILTER_BETA
+#define EFL_CANVAS_LAYOUT_BETA
+
+#include "edje_suite.h"
+
+#define EVAS_DATA_DIR TESTS_SRC_DIR "/../../lib/evas"
+
+
+
+EFL_START_TEST(edje_test_box)
+{
+   Evas *evas;
+   Evas_Object *obj, *sobj, *sobjs[5];
+   const Evas_Object *box;
+   Eina_Iterator *it;
+   int i;
+
+   evas = _setup_evas();
+
+   obj = edje_object_add(evas);
+   fail_unless(edje_object_file_set(obj, test_layout_get("test_box.edj"), "test_group"));
+
+   for (i = 0; i < 5; i++)
+     {
+        sobjs[i] = evas_object_rectangle_add(evas);
+        fail_if(!sobjs[i]);
+     }
+
+   edje_object_part_box_append(obj, "box", sobjs[3]);
+   edje_object_part_box_prepend(obj, "box", sobjs[1]);
+   edje_object_part_box_insert_before(obj, "box", sobjs[0], sobjs[1]);
+   edje_object_part_box_insert_after(obj, "box", sobjs[4], sobjs[3]);
+   edje_object_part_box_insert_at(obj, "box", sobjs[2], 2);
+
+   edje_object_freeze(obj);
+   box = edje_object_part_object_get(obj, "box");
+   edje_object_thaw(obj);
+   it = evas_object_box_iterator_new(box);
+
+   i = 0;
+   EINA_ITERATOR_FOREACH(it, sobj)
+     {
+        fail_if(sobj != sobjs[i++]);
+     }
+   eina_iterator_free(it);
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+EFL_START_TEST(edje_test_box_eoapi)
+{
+   Evas *evas;
+   Evas_Object *obj, *sobj, *sobjs[5];
+   Eina_Iterator *it;
+   int i;
+
+   evas = _setup_evas();
+
+   obj = edje_object_add(evas);
+   fail_unless(edje_object_file_set(obj, test_layout_get("test_box.edj"), "test_group"));
+
+   for (i = 0; i < 5; i++)
+     {
+        sobjs[i] = evas_object_rectangle_add(evas);
+        fail_if(!sobjs[i]);
+     }
+
+   /* same test case as legacy api above */
+   efl_pack_end(efl_part(obj, "box"), sobjs[3]);
+   efl_pack_begin(efl_part(obj, "box"), sobjs[1]);
+   efl_pack_before(efl_part(obj, "box"), sobjs[0], sobjs[1]);
+   efl_pack_after(efl_part(obj, "box"), sobjs[4], sobjs[3]);
+   efl_pack_at(efl_part(obj, "box"), sobjs[2], 2);
+   fail_if(efl_content_count(efl_part(obj, "box")) != 5);
+
+   it = efl_content_iterate(efl_part(obj, "box"));
+   i = 0;
+   EINA_ITERATOR_FOREACH(it, sobj)
+     fail_if(sobj != sobjs[i++]);
+   fail_if(i != 5);
+   eina_iterator_free(it);
+
+   /* clear up and test a bit more */
+   efl_pack_unpack_all(efl_part(obj, "box"));
+   fail_if(efl_content_count(efl_part(obj, "box")) != 0);
+
+   efl_pack(efl_part(obj, "box"), sobjs[1]);
+   efl_pack_at(efl_part(obj, "box"), sobjs[0], 0);
+   efl_pack_at(efl_part(obj, "box"), sobjs[2], -1);
+   it = efl_content_iterate(efl_part(obj, "box"));
+   i = 0;
+   EINA_ITERATOR_FOREACH(it, sobj)
+     fail_if(sobj != sobjs[i++]);
+   fail_if(i != 3);
+   eina_iterator_free(it);
+
+   fail_if(!efl_content_remove(efl_part(obj, "box"), sobjs[0]));
+   fail_if(efl_content_count(efl_part(obj, "box")) != 2);
+   fail_if(!efl_pack_unpack_at(efl_part(obj, "box"), 1));
+   fail_if(efl_content_count(efl_part(obj, "box")) != 1);
+   fail_if(efl_pack_index_get(efl_part(obj, "box"), sobjs[1]) != 0);
+
+   efl_pack_clear(efl_part(obj, "box"));
+   fail_if(efl_content_count(efl_part(obj, "box")) != 0);
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+EFL_START_TEST(edje_test_table)
+{
+   Evas *evas;
+   Evas_Object *obj, *sobj, *sobjs[4];
+   int i, k, l, cols, rows;
+
+   evas = _setup_evas();
+
+   obj = edje_object_add(evas);
+   fail_unless(edje_object_file_set(obj, test_layout_get("test_table.edj"), "test_group"));
+
+   /* check items from EDC */
+   for (l = 0; l < 2; l++)
+     for (k = 0; k < 2; k++)
+       {
+          const char *txt;
+          char buf[20];
+
+          /* items have a text part "text" containing their position */
+          sprintf(buf, "%d,%d", k, l);
+          sobj = edje_object_part_table_child_get(obj, "table", k, l);
+          fail_if(!sobj);
+          txt = edje_object_part_text_get(sobj, "text");
+          fail_if(!txt);
+          fail_if(strcmp(txt, buf) != 0);
+       }
+
+   /* Add more items */
+   for (l = 0; l < 2; l++)
+     for (k = 0; k < 2; k++)
+       {
+          i = l*2 + k;
+          sobjs[i] = evas_object_rectangle_add(evas);
+          fail_if(!sobjs[i]);
+          edje_object_part_table_pack(obj, "table", sobjs[i], k, l + 2, 1, 1);
+       }
+
+   for (l = 0; l < 2; l++)
+     for (k = 0; k < 2; k++)
+       {
+          i = l*2 + k;
+          sobj = edje_object_part_table_child_get(obj, "table", k, l + 2);
+          fail_if(sobj != sobjs[i]);
+       }
+
+   /* table size and clear */
+   edje_object_part_table_col_row_size_get(obj, "table", &cols, &rows);
+   fail_if(cols != 2);
+   fail_if(rows != 4);
+
+   edje_object_part_table_clear(obj, "table", EINA_TRUE);
+
+   edje_object_part_table_col_row_size_get(obj, "table", &cols, &rows);
+   fail_if(cols != 2);
+   fail_if(rows != 2);
+
+   for (l = 0; l < 2; l++)
+     for (k = 0; k < 2; k++)
+       {
+          const char *txt;
+          char buf[20];
+
+          /* items have a text part "text" containing their position */
+          sprintf(buf, "%d,%d", k, l);
+          sobj = edje_object_part_table_child_get(obj, "table", k, l);
+          fail_if(!sobj);
+          txt = edje_object_part_text_get(sobj, "text");
+          fail_if(!txt);
+          fail_if(strcmp(txt, buf) != 0);
+       }
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+EFL_START_TEST(edje_test_table_eoapi)
+{
+   Evas *evas;
+   Evas_Object *obj, *sobj, *sobjs[4], *proxy;
+   Eina_Iterator *it;
+   int i, k, l, cs, rs, cols, rows;
+
+   evas = _setup_evas();
+
+   obj = edje_object_add(evas);
+   fail_unless(edje_object_file_set(obj, test_layout_get("test_table.edj"), "test_group"));
+
+   /* check items from EDC */
+   fail_if(efl_content_count(efl_part(obj, "table")) != 4);
+   for (l = 0; l < 2; l++)
+     for (k = 0; k < 2; k++)
+       {
+          const char *txt;
+          char buf[20];
+
+          /* items have a text part "text" containing their position */
+          sprintf(buf, "%d,%d", k, l);
+          sobj = efl_pack_table_content_get(efl_part(obj, "table"), k, l);
+          fail_if(!sobj);
+          //txt = efl_part_text_get(sobj, "text");
+          txt = edje_object_part_text_get(sobj, "text");
+          fail_if(!txt);
+          fail_if(strcmp(txt, buf) != 0);
+       }
+
+   /* Add more items */
+   for (l = 0; l < 2; l++)
+     for (k = 0; k < 2; k++)
+       {
+          i = l*2 + k;
+          sobjs[i] = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
+          fail_if(!sobjs[i]);
+          efl_pack_table(efl_part(obj, "table"), sobjs[i], k, l + 2, 1, 1);
+       }
+
+   fail_if(efl_content_count(efl_part(obj, "table")) != 8);
+
+   i = 0;
+   it = efl_content_iterate(efl_part(obj, "table"));
+   EINA_ITERATOR_FOREACH(it, sobj)
+     {
+        efl_pack_table_position_get(efl_part(obj, "table"), sobj, &k, &l, &cs, &rs);
+        fail_if(cs != 1);
+        fail_if(rs != 1);
+        if (l >= 2)
+          fail_if(sobj != sobjs[(l - 2)*2 + k]);
+        i++;
+     }
+   eina_iterator_free(it);
+   fail_if(i != 8);
+
+   /* table size and clear */
+   efl_pack_table_size_get(efl_part(obj, "table"), &cols, &rows);
+   fail_if(cols != 2);
+   fail_if(rows != 4);
+
+   efl_pack_clear(efl_part(obj, "table"));
+   fail_if(efl_content_count(efl_part(obj, "table")) != 4);
+
+   efl_pack_table_size_get(efl_part(obj, "table"), &cols, &rows);
+   fail_if(cols != 2);
+   fail_if(rows != 2);
+
+   /* test multiple ops on a proxy object */
+   proxy = efl_ref(efl_part(obj, "table"));
+   fail_if(!proxy);
+   fail_if(!efl_pack_clear(proxy));
+   fail_if(efl_content_count(efl_part(obj, "table")) != 4);
+   fail_if(!efl_pack_clear(proxy));
+   fail_if(efl_content_count(efl_part(obj, "table2")) != 1);
+   fail_if(efl_content_count(proxy) != 4);
+   efl_del(proxy);
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+
+void edje_test_container(TCase *tc)
+{
+   tcase_add_test(tc, edje_test_box);
+   tcase_add_test(tc, edje_test_box_eoapi);
+   tcase_add_test(tc, edje_test_table);
+   tcase_add_test(tc, edje_test_table_eoapi);
+}
index b8c8179..15e42f1 100644 (file)
@@ -8,11 +8,7 @@
 #define EFL_GFX_FILTER_BETA
 #define EFL_CANVAS_LAYOUT_BETA
 
-#include <Eina.h>
-#include <Edje.h>
-
 #include "edje_suite.h"
-#include "edje_tests_helpers.h"
 
 #define EVAS_DATA_DIR TESTS_SRC_DIR "/../../lib/evas"
 
@@ -23,7 +19,7 @@ EFL_END_TEST
 
 EFL_START_TEST(edje_test_edje_load)
 {
-   Evas *evas = EDJE_TEST_INIT_EVAS();
+   Evas *evas = _setup_evas();
    Edje_Load_Error error;
    Evas_Object *obj;
 
@@ -32,23 +28,13 @@ EFL_START_TEST(edje_test_edje_load)
    error = edje_object_load_error_get(obj);
    fail_if(error != EDJE_LOAD_ERROR_DOES_NOT_EXIST);
 
-   EDJE_TEST_FREE_EVAS();
+   evas_free(evas);
 }
 EFL_END_TEST
 
-static const char *
-test_layout_get(const char *name)
-{
-   static char filename[PATH_MAX];
-
-   snprintf(filename, PATH_MAX, TESTS_BUILD_DIR"/data/%s", name);
-
-   return filename;
-}
-
 EFL_START_TEST(edje_test_load_simple_layout)
 {
-   Evas *evas = EDJE_TEST_INIT_EVAS();
+   Evas *evas = _setup_evas();
    Evas_Object *obj;
 
    obj = edje_object_add(evas);
@@ -58,7 +44,7 @@ EFL_START_TEST(edje_test_load_simple_layout)
    fail_unless(edje_object_part_exists(obj, "background"));
 
 
-   EDJE_TEST_FREE_EVAS();
+   evas_free(evas);
 }
 EFL_END_TEST
 
@@ -66,7 +52,7 @@ EFL_START_TEST(edje_test_simple_layout_geometry)
 {
    int x, y, w, h;
    int r, g, b, a;
-   Evas *evas = EDJE_TEST_INIT_EVAS();
+   Evas *evas = _setup_evas();
    Evas_Object *obj;
    const Evas_Object *bg;
 
@@ -87,14 +73,14 @@ EFL_START_TEST(edje_test_simple_layout_geometry)
    evas_object_color_get(bg, &r, &g, &b, &a);
    fail_if(r != 255 || g != 255 || b != 255 || a != 255);
 
-   EDJE_TEST_FREE_EVAS();
+   evas_free(evas);
 }
 EFL_END_TEST
 
 EFL_START_TEST(edje_test_complex_layout)
 {
    int x, y, w, h;
-   Evas *evas = EDJE_TEST_INIT_EVAS();
+   Evas *evas = _setup_evas();
    Evas_Object *obj;
 
    obj = edje_object_add(evas);
@@ -135,14 +121,14 @@ EFL_START_TEST(edje_test_complex_layout)
    fail_if(x != 5 || y != 500+2);
    fail_if(w != 1000-5-5 + 1 || h != 500-5-2 + 1);
 
-   EDJE_TEST_FREE_EVAS();
+   evas_free(evas);
 }
 EFL_END_TEST
 
 EFL_START_TEST(edje_test_calculate_parens)
 {
    int x, y, w, h;
-   Evas *evas = EDJE_TEST_INIT_EVAS();
+   Evas *evas = _setup_evas();
    Evas_Object *obj;
    Eina_Rect rect;
 
@@ -158,301 +144,13 @@ EFL_START_TEST(edje_test_calculate_parens)
    edje_object_part_geometry_get(obj, "background", &x, &y, &w, &h);
    fail_if(x != 0 || y != 0 || w != 100 || h != 100);
 
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-EFL_START_TEST(edje_test_masking)
-{
-   int x, y, w, h;
-   Evas *evas = EDJE_TEST_INIT_EVAS();
-   const Evas_Object *sub, *clip2, *clip;
-   Evas_Object *obj;
-
-   obj = edje_object_add(evas);
-   fail_unless(edje_object_file_set(obj, test_layout_get("test_masking.edj"), "test_group"));
-
-   evas_object_resize(obj, 100, 100);
-   edje_object_part_geometry_get(obj, "background", &x, &y, &w, &h);
-   fail_if(x != 0 || y != 0 || w != 100 || h != 100);
-
-   edje_object_freeze(obj);
-   clip = edje_object_part_object_get(obj, "clip2");
-   edje_object_thaw(obj);
-   fail_if(!clip);
-
-   /* check value of no_render flag as seen from evas land */
-   edje_object_freeze(obj);
-   sub = edje_object_part_object_get(obj, "mask");
-   edje_object_thaw(obj);
-   fail_if(!efl_canvas_object_no_render_get(sub));
-
-   /* check that text has a clip (based on description.clip_to) */
-   edje_object_freeze(obj);
-   sub = edje_object_part_object_get(obj, "text");
-   edje_object_thaw(obj);
-   fail_if(!efl_canvas_object_clip_get(sub));
-
-   /* test description.clip_to override */
-   edje_object_freeze(obj);
-   sub = edje_object_part_object_get(obj, "noclip");
-   edje_object_thaw(obj);
-   clip2 = efl_canvas_object_clip_get(sub);
-   fail_if(clip != clip2);
-
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-EFL_START_TEST(edje_test_filters)
-{
-   Evas *evas = EDJE_TEST_INIT_EVAS();
-   const Evas_Object *text, *sub;
-   Evas_Object *obj, *src = NULL;
-   const char *prg, *name;
-
-   setenv("EVAS_DATA_DIR", EVAS_DATA_DIR, 1);
-
-   obj = edje_object_add(evas);
-   fail_unless(edje_object_file_set(obj, test_layout_get("test_filters.edj"), "test_group"));
-
-   evas_object_resize(obj, 200, 200);
-
-   /* check value of no_render flag as seen from evas land */
-   edje_object_freeze(obj);
-   sub = edje_object_part_object_get(obj, "mask");
-   edje_object_thaw(obj);
-   fail_if(!efl_canvas_object_no_render_get(sub));
-
-   /* check no_render inheritance */
-   edje_object_freeze(obj);
-   sub = edje_object_part_object_get(obj, "mask2");
-   edje_object_thaw(obj);
-   fail_if(efl_canvas_object_no_render_get(sub));
-   edje_object_freeze(obj);
-   sub = edje_object_part_object_get(obj, "mask3");
-   edje_object_thaw(obj);
-   fail_if(!efl_canvas_object_no_render_get(sub));
-
-   /* text part: check filter status */
-   edje_object_freeze(obj);
-   text = edje_object_part_object_get(obj, "text");
-   edje_object_thaw(obj);
-   fail_if(!text);
-
-   efl_gfx_filter_program_get(text, &prg, &name);
-   fail_if(!prg);
-   fail_if(!name || strcmp(name, "filterfile"));
-
-   src = efl_gfx_filter_source_get(text, "mask");
-   fail_if(!src);
-
-   // TODO: Verify properly that the filter runs well
-
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-EFL_START_TEST(edje_test_snapshot)
-{
-   Evas *evas = EDJE_TEST_INIT_EVAS();
-   const Evas_Object *sub;
-   Evas_Object *obj;
-
-   setenv("EVAS_DATA_DIR", EVAS_DATA_DIR, 1);
-
-   obj = edje_object_add(evas);
-   fail_unless(edje_object_file_set(obj, test_layout_get("test_snapshot.edj"), "test_group"));
-
-   evas_object_resize(obj, 200, 200);
-
-   /* check value of no_render flag as seen from evas land */
-   edje_object_freeze(obj);
-   sub = edje_object_part_object_get(obj, "snap");
-   edje_object_thaw(obj);
-   fail_if(!efl_isa(sub, EFL_CANVAS_SNAPSHOT_CLASS) &&
-           !evas_object_image_snapshot_get(sub));
-
-   // TODO: Verify that evas snapshot actually works (and has a filter)
-
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-EFL_START_TEST(edje_test_size_class)
-{
-   int minw, minh, minw2, minh2;
-   Evas *evas = EDJE_TEST_INIT_EVAS();
-   Eina_List *l;
-   Eina_Stringshare *name;
-   Evas_Object *obj, *obj2;
-   Eina_Bool b;
-
-   obj = edje_object_add(evas);
-   fail_unless(edje_object_file_set(obj, test_layout_get("test_size_class.edj"), "test_group"));
-
-   obj2 = edje_object_add(evas);
-   fail_unless(edje_object_file_set(obj2, test_layout_get("test_size_class.edj"), "test_group"));
-
-   evas_object_resize(obj, 200, 200);
-   evas_object_resize(obj2, 200, 200);
-
-   /* check predefined min size of rect part by edc */
-   edje_object_part_geometry_get(obj, "rect", NULL, NULL, &minw, &minh);
-   fail_if(minw != 50 || minh != 50);
-
-   /* check that edje_size_class_set works */
-   b = edje_size_class_set("rect_size", 100, 100, -1, -1);
-   edje_object_part_geometry_get(obj, "rect", NULL, NULL, &minw, &minh);
-   edje_object_part_geometry_get(obj2, "rect", NULL, NULL, &minw2, &minh2);
-   fail_if(!b || minw != 100 || minh != 100 || minw2 != 100 || minh2 != 100);
-
-   /* check that edje_size_class_get works */
-   b = edje_size_class_get("rect_size", &minw, &minh, NULL, NULL);
-   fail_if(!b || minw != 100 || minh != 100);
-
-   /* check that edje_size_class_list works */
-   l = edje_size_class_list();
-   EINA_LIST_FREE(l, name)
-     {
-        fail_if(strcmp(name, "rect_size"));
-        eina_stringshare_del(name);
-     }
-
-   /* check that edje_object_size_class_set works */
-   b = edje_object_size_class_set(obj, "rect_size", 150, 150, -1, -1);
-   edje_object_part_geometry_get(obj, "rect", NULL, NULL, &minw, &minh);
-   edje_object_part_geometry_get(obj2, "rect", NULL, NULL, &minw2, &minh2);
-   fail_if(!b || minw != 150 || minh != 150 || minw2 != 100 || minh2 != 100);
-
-   /* check that edje_object_size_class_get works */
-   b = edje_object_size_class_get(obj, "rect_size", &minw, &minh, NULL, NULL);
-   fail_if(!b || minw != 150 || minh != 150);
-
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-EFL_START_TEST(edje_test_color_class)
-{
-   Evas *evas = EDJE_TEST_INIT_EVAS();
-
-   Eina_File *f;
-   Eina_Iterator *it;
-   Edje_Color_Class *itcc, *cc = NULL;
-   char *filename;
-
-   filename = realpath(test_layout_get("test_color_class.edj"), NULL);
-   fail_if(!filename);
-
-   f = eina_file_open(filename, EINA_FALSE);
-   fail_if(!f);
-
-   it = edje_mmap_color_class_iterator_new(f);
-   fail_if(!it);
-   EINA_ITERATOR_FOREACH(it, itcc)
-     {
-        if (!strcmp(itcc->name, "test_color_class"))
-          {
-             cc = itcc;
-             break;
-          }
-     }
-   fail_if((!cc) || (cc->r != 100) || (cc->g != 100) || (cc->b != 100) || (cc->a != 100));
-
-   eina_iterator_free(it);
-   eina_file_close(f);
-   free(filename);
-
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-EFL_START_TEST(edje_test_swallows)
-{
-   Evas *evas = EDJE_TEST_INIT_EVAS();
-   Evas_Object *ly, *o1, *o2;
-
-   ly = efl_add(EFL_CANVAS_LAYOUT_CLASS, evas);
-   fail_unless(edje_object_file_set(ly, test_layout_get("test_swallows.edj"), "test_group"));
-
-   fail_unless(edje_object_part_exists(ly, "swallow"));
-
-
-   o1 = efl_add(EFL_CANVAS_LAYOUT_CLASS, ly);
-   fail_if(!edje_object_part_swallow(ly, "swallow", o1));
-   ck_assert_ptr_eq(efl_parent_get(o1), ly);
-
-   edje_object_part_unswallow(ly, o1);
-   ck_assert_ptr_eq(efl_parent_get(o1), evas_object_evas_get(o1));
-
-   fail_if(!edje_object_part_swallow(ly, "swallow", o1));
-   ck_assert_ptr_eq(efl_parent_get(o1), ly);
-
-   o2 = efl_add(EFL_CANVAS_LAYOUT_CLASS, ly);
-   fail_if(!edje_object_part_swallow(ly, "swallow", o2));
-   ck_assert_ptr_eq(efl_parent_get(o2), ly);
-   /* o1 is deleted at this point. */
-   ck_assert_ptr_eq(efl_parent_get(o1), evas_object_evas_get(o1));
-
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-EFL_START_TEST(edje_test_swallows_lifetime)
-{
-   Evas *evas = EDJE_TEST_INIT_EVAS();
-   Evas_Object *ly, *o1;
-
-   ly = edje_object_add(evas);
-   fail_unless(edje_object_file_set(ly, test_layout_get("test_swallows.edj"), "test_group"));
-
-   fail_unless(edje_object_part_exists(ly, "swallow"));
-
-   o1 = edje_object_add(ly);
-   fail_if(!edje_object_part_swallow(ly, "swallow", o1));
-
-   evas_object_del(ly);
-   fail_if(!efl_parent_get(o1));
-
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-EFL_START_TEST(edje_test_swallows_eoapi)
-{
-   Evas *evas = EDJE_TEST_INIT_EVAS();
-   Evas_Object *ly, *o1, *o2;
-
-   ly = efl_add(EFL_CANVAS_LAYOUT_CLASS, evas);
-   fail_unless(edje_object_file_set(ly, test_layout_get("test_swallows.edj"), "test_group"));
-
-   fail_unless(edje_object_part_exists(ly, "swallow"));
-
-
-   o1 = efl_add(EFL_CANVAS_LAYOUT_CLASS, ly);
-   fail_if(!efl_content_set(efl_part(ly, "swallow"), o1));
-   ck_assert_ptr_eq(efl_parent_get(o1), ly);
-
-   efl_content_remove(ly, o1);
-   ck_assert_ptr_eq(efl_parent_get(o1), evas_object_evas_get(o1));
-
-   fail_if(!efl_content_set(efl_part(ly, "swallow"), o1));
-   ck_assert_ptr_eq(efl_parent_get(o1), ly);
-
-   o2 = efl_add(EFL_CANVAS_LAYOUT_CLASS, ly);
-   fail_if(!efl_content_set(efl_part(ly, "swallow"), o2));
-   ck_assert_ptr_eq(efl_parent_get(o2), ly);
-   /* o1 is deleted at this point. */
-   ck_assert_ptr_eq(efl_parent_get(o1), evas_object_evas_get(o1));
-
-   EDJE_TEST_FREE_EVAS();
+   evas_free(evas);
 }
 EFL_END_TEST
 
 EFL_START_TEST(edje_test_access)
 {
-   Evas *evas = EDJE_TEST_INIT_EVAS();
+   Evas *evas = _setup_evas();
    const char *name;
    Evas_Object *obj;
    Eina_Iterator *it;
@@ -489,265 +187,7 @@ EFL_START_TEST(edje_test_access)
      }
    fail_if(i != 2);
 
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-EFL_START_TEST(edje_test_box)
-{
-   Evas *evas;
-   Evas_Object *obj, *sobj, *sobjs[5];
-   const Evas_Object *box;
-   Eina_Iterator *it;
-   int i;
-
-   evas = EDJE_TEST_INIT_EVAS();
-
-   obj = edje_object_add(evas);
-   fail_unless(edje_object_file_set(obj, test_layout_get("test_box.edj"), "test_group"));
-
-   for (i = 0; i < 5; i++)
-     {
-        sobjs[i] = evas_object_rectangle_add(evas);
-        fail_if(!sobjs[i]);
-     }
-
-   edje_object_part_box_append(obj, "box", sobjs[3]);
-   edje_object_part_box_prepend(obj, "box", sobjs[1]);
-   edje_object_part_box_insert_before(obj, "box", sobjs[0], sobjs[1]);
-   edje_object_part_box_insert_after(obj, "box", sobjs[4], sobjs[3]);
-   edje_object_part_box_insert_at(obj, "box", sobjs[2], 2);
-
-   edje_object_freeze(obj);
-   box = edje_object_part_object_get(obj, "box");
-   edje_object_thaw(obj);
-   it = evas_object_box_iterator_new(box);
-
-   i = 0;
-   EINA_ITERATOR_FOREACH(it, sobj)
-     {
-        fail_if(sobj != sobjs[i++]);
-     }
-   eina_iterator_free(it);
-
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-EFL_START_TEST(edje_test_box_eoapi)
-{
-   Evas *evas;
-   Evas_Object *obj, *sobj, *sobjs[5];
-   Eina_Iterator *it;
-   int i;
-
-   evas = EDJE_TEST_INIT_EVAS();
-
-   obj = edje_object_add(evas);
-   fail_unless(edje_object_file_set(obj, test_layout_get("test_box.edj"), "test_group"));
-
-   for (i = 0; i < 5; i++)
-     {
-        sobjs[i] = evas_object_rectangle_add(evas);
-        fail_if(!sobjs[i]);
-     }
-
-   /* same test case as legacy api above */
-   efl_pack_end(efl_part(obj, "box"), sobjs[3]);
-   efl_pack_begin(efl_part(obj, "box"), sobjs[1]);
-   efl_pack_before(efl_part(obj, "box"), sobjs[0], sobjs[1]);
-   efl_pack_after(efl_part(obj, "box"), sobjs[4], sobjs[3]);
-   efl_pack_at(efl_part(obj, "box"), sobjs[2], 2);
-   fail_if(efl_content_count(efl_part(obj, "box")) != 5);
-
-   it = efl_content_iterate(efl_part(obj, "box"));
-   i = 0;
-   EINA_ITERATOR_FOREACH(it, sobj)
-     fail_if(sobj != sobjs[i++]);
-   fail_if(i != 5);
-   eina_iterator_free(it);
-
-   /* clear up and test a bit more */
-   efl_pack_unpack_all(efl_part(obj, "box"));
-   fail_if(efl_content_count(efl_part(obj, "box")) != 0);
-
-   efl_pack(efl_part(obj, "box"), sobjs[1]);
-   efl_pack_at(efl_part(obj, "box"), sobjs[0], 0);
-   efl_pack_at(efl_part(obj, "box"), sobjs[2], -1);
-   it = efl_content_iterate(efl_part(obj, "box"));
-   i = 0;
-   EINA_ITERATOR_FOREACH(it, sobj)
-     fail_if(sobj != sobjs[i++]);
-   fail_if(i != 3);
-   eina_iterator_free(it);
-
-   fail_if(!efl_content_remove(efl_part(obj, "box"), sobjs[0]));
-   fail_if(efl_content_count(efl_part(obj, "box")) != 2);
-   fail_if(!efl_pack_unpack_at(efl_part(obj, "box"), 1));
-   fail_if(efl_content_count(efl_part(obj, "box")) != 1);
-   fail_if(efl_pack_index_get(efl_part(obj, "box"), sobjs[1]) != 0);
-
-   efl_pack_clear(efl_part(obj, "box"));
-   fail_if(efl_content_count(efl_part(obj, "box")) != 0);
-
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-EFL_START_TEST(edje_test_table)
-{
-   Evas *evas;
-   Evas_Object *obj, *sobj, *sobjs[4];
-   int i, k, l, cols, rows;
-
-   evas = EDJE_TEST_INIT_EVAS();
-
-   obj = edje_object_add(evas);
-   fail_unless(edje_object_file_set(obj, test_layout_get("test_table.edj"), "test_group"));
-
-   /* check items from EDC */
-   for (l = 0; l < 2; l++)
-     for (k = 0; k < 2; k++)
-       {
-          const char *txt;
-          char buf[20];
-
-          /* items have a text part "text" containing their position */
-          sprintf(buf, "%d,%d", k, l);
-          sobj = edje_object_part_table_child_get(obj, "table", k, l);
-          fail_if(!sobj);
-          txt = edje_object_part_text_get(sobj, "text");
-          fail_if(!txt);
-          fail_if(strcmp(txt, buf) != 0);
-       }
-
-   /* Add more items */
-   for (l = 0; l < 2; l++)
-     for (k = 0; k < 2; k++)
-       {
-          i = l*2 + k;
-          sobjs[i] = evas_object_rectangle_add(evas);
-          fail_if(!sobjs[i]);
-          edje_object_part_table_pack(obj, "table", sobjs[i], k, l + 2, 1, 1);
-       }
-
-   for (l = 0; l < 2; l++)
-     for (k = 0; k < 2; k++)
-       {
-          i = l*2 + k;
-          sobj = edje_object_part_table_child_get(obj, "table", k, l + 2);
-          fail_if(sobj != sobjs[i]);
-       }
-
-   /* table size and clear */
-   edje_object_part_table_col_row_size_get(obj, "table", &cols, &rows);
-   fail_if(cols != 2);
-   fail_if(rows != 4);
-
-   edje_object_part_table_clear(obj, "table", EINA_TRUE);
-
-   edje_object_part_table_col_row_size_get(obj, "table", &cols, &rows);
-   fail_if(cols != 2);
-   fail_if(rows != 2);
-
-   for (l = 0; l < 2; l++)
-     for (k = 0; k < 2; k++)
-       {
-          const char *txt;
-          char buf[20];
-
-          /* items have a text part "text" containing their position */
-          sprintf(buf, "%d,%d", k, l);
-          sobj = edje_object_part_table_child_get(obj, "table", k, l);
-          fail_if(!sobj);
-          txt = edje_object_part_text_get(sobj, "text");
-          fail_if(!txt);
-          fail_if(strcmp(txt, buf) != 0);
-       }
-
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-EFL_START_TEST(edje_test_table_eoapi)
-{
-   Evas *evas;
-   Evas_Object *obj, *sobj, *sobjs[4], *proxy;
-   Eina_Iterator *it;
-   int i, k, l, cs, rs, cols, rows;
-
-   evas = EDJE_TEST_INIT_EVAS();
-
-   obj = edje_object_add(evas);
-   fail_unless(edje_object_file_set(obj, test_layout_get("test_table.edj"), "test_group"));
-
-   /* check items from EDC */
-   fail_if(efl_content_count(efl_part(obj, "table")) != 4);
-   for (l = 0; l < 2; l++)
-     for (k = 0; k < 2; k++)
-       {
-          const char *txt;
-          char buf[20];
-
-          /* items have a text part "text" containing their position */
-          sprintf(buf, "%d,%d", k, l);
-          sobj = efl_pack_table_content_get(efl_part(obj, "table"), k, l);
-          fail_if(!sobj);
-          //txt = efl_part_text_get(sobj, "text");
-          txt = edje_object_part_text_get(sobj, "text");
-          fail_if(!txt);
-          fail_if(strcmp(txt, buf) != 0);
-       }
-
-   /* Add more items */
-   for (l = 0; l < 2; l++)
-     for (k = 0; k < 2; k++)
-       {
-          i = l*2 + k;
-          sobjs[i] = efl_add(EFL_CANVAS_RECTANGLE_CLASS, evas);
-          fail_if(!sobjs[i]);
-          efl_pack_table(efl_part(obj, "table"), sobjs[i], k, l + 2, 1, 1);
-       }
-
-   fail_if(efl_content_count(efl_part(obj, "table")) != 8);
-
-   i = 0;
-   it = efl_content_iterate(efl_part(obj, "table"));
-   EINA_ITERATOR_FOREACH(it, sobj)
-     {
-        efl_pack_table_position_get(efl_part(obj, "table"), sobj, &k, &l, &cs, &rs);
-        fail_if(cs != 1);
-        fail_if(rs != 1);
-        if (l >= 2)
-          fail_if(sobj != sobjs[(l - 2)*2 + k]);
-        i++;
-     }
-   eina_iterator_free(it);
-   fail_if(i != 8);
-
-   /* table size and clear */
-   efl_pack_table_size_get(efl_part(obj, "table"), &cols, &rows);
-   fail_if(cols != 2);
-   fail_if(rows != 4);
-
-   efl_pack_clear(efl_part(obj, "table"));
-   fail_if(efl_content_count(efl_part(obj, "table")) != 4);
-
-   efl_pack_table_size_get(efl_part(obj, "table"), &cols, &rows);
-   fail_if(cols != 2);
-   fail_if(rows != 2);
-
-   /* test multiple ops on a proxy object */
-   proxy = efl_ref(efl_part(obj, "table"));
-   fail_if(!proxy);
-   fail_if(!efl_pack_clear(proxy));
-   fail_if(efl_content_count(efl_part(obj, "table")) != 4);
-   fail_if(!efl_pack_clear(proxy));
-   fail_if(efl_content_count(efl_part(obj, "table2")) != 1);
-   fail_if(efl_content_count(proxy) != 4);
-   efl_del(proxy);
-
-   EDJE_TEST_FREE_EVAS();
+   evas_free(evas);
 }
 EFL_END_TEST
 
@@ -756,316 +196,18 @@ EFL_START_TEST(edje_test_combine_keywords)
    Evas *evas;
    Evas_Object *obj;
 
-   evas = EDJE_TEST_INIT_EVAS();
+   evas = _setup_evas();
 
    obj = edje_object_add(evas);
    fail_unless(edje_object_file_set(obj, test_layout_get("test_combine_keywords.edj"), "test_group"));
 
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-static void
-_message_signal_reply_cb(void *data, Evas_Object *obj EINA_UNUSED,
-                         const char *emission, const char *source)
-{
-   int *id = data;
-
-   fprintf(stderr, "source %s emit %s id %d\n", source, emission, *id);
-   fflush(stderr);
-   ck_assert_str_eq(source, "edc");
-   ck_assert_ptr_ne(emission, NULL);
-
-   if (!strncmp(emission, "int set", 7))
-     ck_assert_str_eq(emission, "int set 7 12 42 255");
-   else if (!strncmp(emission, "int", 3))
-     ck_assert_str_eq(emission, "int 42");
-   else if (!strncmp(emission, "float", 5))
-     {
-        char buf[64];
-        sprintf(buf, "float %f", 0.12);
-        ck_assert_str_eq(emission, buf);
-     }
-   else if (!strncmp(emission, "str", 3))
-     ck_assert_str_eq(emission, "str hello world");
-   else ck_abort_msg("Invalid emission!");
-
-   (*id)++;
-}
-
-EFL_START_TEST(edje_test_message_send_legacy)
-{
-   Evas *evas;
-   Evas_Object *obj;
-   Edje_Message_Int msgi;
-   Edje_Message_Float msgf;
-   Edje_Message_String msgs;
-   Edje_Message_Int_Set *msgis;
-   int id = 0;
-
-   /* Ugly calls to process:
-    *
-    * 1. Send edje message (async)
-    * 2. Process edje message (sync)
-    * 3. EDC program emits edje signal (async)
-    * 4. Process edje signal (sync)
-    * 5. Finally reached signal cb
-    */
-
-   evas = EDJE_TEST_INIT_EVAS();
-
-   obj = edje_object_add(evas);
-   fail_unless(edje_object_file_set(obj, test_layout_get("test_messages.edj"), "test_group"));
-   edje_object_signal_callback_add(obj, "*", "edc", _message_signal_reply_cb, &id);
-
-   msgs.str = "hello world";
-   edje_object_message_send(obj, EDJE_MESSAGE_STRING, 0, &msgs);
-   edje_message_signal_process();
-   ck_assert_int_eq(id, 1);
-
-   msgi.val = 42;
-   edje_object_message_send(obj, EDJE_MESSAGE_INT, 1, &msgi);
-   edje_message_signal_process();
-   ck_assert_int_eq(id, 2);
-
-   msgf.val = 0.12;
-   edje_object_message_send(obj, EDJE_MESSAGE_FLOAT, 2, &msgf);
-   edje_message_signal_process();
-   ck_assert_int_eq(id, 3);
-
-   msgis = alloca(sizeof(*msgis) + 4 * sizeof(msgis->val));
-   msgis->count = 4;
-   msgis->val[0] = 7;
-   msgis->val[1] = 12;
-   msgis->val[2] = 42;
-   msgis->val[3] = 255;
-   edje_object_message_send(obj, EDJE_MESSAGE_INT_SET, 3, msgis);
-   edje_message_signal_process();
-   ck_assert_int_eq(id, 4);
-
-   evas_object_del(obj);
-
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-EFL_START_TEST(edje_test_message_send_eo)
-{
-   Evas *evas;
-   Evas_Object *obj;
-   Eina_Value v, *va;
-   int id = 0;
-
-   evas = EDJE_TEST_INIT_EVAS();
-
-   obj = efl_add(EFL_CANVAS_LAYOUT_CLASS, evas,
-                 efl_file_set(efl_added, test_layout_get("test_messages.edj"), "test_group"));
-
-   // FIXME: EO API HERE
-   edje_object_signal_callback_add(obj, "*", "edc", _message_signal_reply_cb, &id);
-
-   // NOTE: edje_object_message_signal_process may or may not be in EO (TBD)
-
-   eina_value_setup(&v, EINA_VALUE_TYPE_STRING);
-   eina_value_set(&v, "hello world");
-   efl_layout_signal_message_send(obj, 0, v);
-   eina_value_flush(&v);
-   edje_message_signal_process();
-   edje_object_calc_force(obj);
-   ck_assert_int_eq(id, 1);
-
-   eina_value_setup(&v, EINA_VALUE_TYPE_INT);
-   eina_value_set(&v, 42);
-   efl_layout_signal_message_send(obj, 1, v);
-   eina_value_flush(&v);
-   edje_message_signal_process();
-   edje_object_calc_force(obj);
-   ck_assert_int_eq(id, 2);
-
-   eina_value_setup(&v, EINA_VALUE_TYPE_FLOAT);
-   eina_value_set(&v, 0.12);
-   efl_layout_signal_message_send(obj, 2, v);
-   eina_value_flush(&v);
-   edje_message_signal_process();
-   edje_object_calc_force(obj);
-   ck_assert_int_eq(id, 3);
-
-   va = eina_value_array_new(EINA_VALUE_TYPE_INT, 4);
-   eina_value_array_append(va, 7);
-   eina_value_array_append(va, 12);
-   eina_value_array_append(va, 42);
-   eina_value_array_append(va, 255);
-   efl_layout_signal_message_send(obj, 3, *va);
-   eina_value_free(va);
-   edje_message_signal_process();
-   edje_object_calc_force(obj);
-   ck_assert_int_eq(id, 4);
-
-   efl_del(obj);
-
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-EFL_START_TEST(edje_test_signals)
-{
-   Evas *evas;
-   Evas_Object *obj;
-   const char *state;
-
-   evas = EDJE_TEST_INIT_EVAS();
-
-   obj = efl_add(EFL_CANVAS_LAYOUT_CLASS, evas,
-                 efl_file_set(efl_added, test_layout_get("test_signals.edj"), "level1"),
-                 efl_gfx_entity_size_set(efl_added, EINA_SIZE2D(320, 240)),
-                 efl_gfx_entity_visible_set(efl_added, 1));
-
-   edje_object_signal_emit(obj, "mouse,in", "text");
-
-   edje_object_message_signal_process(obj);
-   state = edje_object_part_state_get(obj, "group:group:text", NULL);
-   ck_assert_str_eq(state, "default");
-
-   edje_object_message_signal_process(obj);
-   state = edje_object_part_state_get(obj, "group:group:text", NULL);
-   ck_assert_str_eq(state, "default");
-
-   edje_object_message_signal_recursive_process(obj);
-   state = edje_object_part_state_get(obj, "group:group:text", NULL);
-   ck_assert_str_eq(state, "over");
-
-   efl_del(obj);
-
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-static int _signal_count;
-
-static void
-_signal_callback_count_cb(void *data, Evas_Object *obj EINA_UNUSED,
-                         const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
-{
-   int *_data = data;
-   _signal_count += *_data;
-}
-
-EFL_START_TEST(edje_test_signal_callback_del_full)
-{
-   Evas *evas;
-   Evas_Object *obj;
-   int data[4] = { 1, 2, 4, 8 };
-
-   evas = EDJE_TEST_INIT_EVAS();
-
-   obj = efl_add(EFL_CANVAS_LAYOUT_CLASS, evas,
-                 efl_file_set(efl_added,
-                 test_layout_get("test_signal_callback_del_full.edj"), "test"),
-                 efl_gfx_entity_size_set(efl_added, EINA_SIZE2D(320, 240)),
-                 efl_gfx_entity_visible_set(efl_added, 1));
-
-   edje_object_signal_callback_add(obj, "some_signal", "event", _signal_callback_count_cb, &data[0]);
-   edje_object_signal_callback_add(obj, "some_signal", "event", _signal_callback_count_cb, &data[1]);
-   edje_object_signal_callback_add(obj, "some_signal", "event", _signal_callback_count_cb, &data[2]);
-   edje_object_signal_callback_add(obj, "some_signal", "event", _signal_callback_count_cb, &data[3]);
-
-   edje_object_signal_callback_del_full(obj, "some_signal", "event", _signal_callback_count_cb, &data[0]);
-   edje_object_signal_callback_del_full(obj, "some_signal", "event", _signal_callback_count_cb, &data[3]);
-
-   edje_object_signal_emit(obj, "some_signal", "event");
-
-   edje_object_message_signal_process(obj);
-   ck_assert_int_eq(_signal_count, (data[1] + data[2]));
-
-   efl_del(obj);
-
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-EFL_START_TEST(edje_test_text_cursor)
-{
-   Evas *evas;
-   Evas_Object *obj;
-   const char *buf = "ABC<br/>DEF";
-   const char *txt;
-   int i, old_pos, new_pos;
-
-   evas = EDJE_TEST_INIT_EVAS();
-
-   obj = edje_object_add(evas);
-   fail_unless(edje_object_file_set(obj, test_layout_get("test_text_cursor.edj"), "test_text_cursor"));
-   edje_object_part_text_set(obj, "text", buf);
-   txt = edje_object_part_text_get(obj, "text");
-   fail_if(!txt || strcmp(txt, buf));
-
-   edje_object_part_text_cursor_pos_set(obj, "text", EDJE_CURSOR_MAIN, 0);
-   ck_assert_int_eq(edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN), 0);
-   edje_object_part_text_cursor_pos_set(obj, "text", EDJE_CURSOR_MAIN, 1);
-   ck_assert_int_eq(edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN), 1);
-
-   /* Move cursor to the 0 pos from 1 pos */
-   old_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
-   ck_assert(edje_object_part_text_cursor_prev(obj, "text", EDJE_CURSOR_MAIN));
-   new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
-   ck_assert_int_ne(old_pos, new_pos);
-
-   /* Move cursor to the -1 pos from 0 pos. It has to fail. */
-   old_pos = new_pos;
-   ck_assert(!edje_object_part_text_cursor_prev(obj, "text", EDJE_CURSOR_MAIN));
-   new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
-   ck_assert_int_eq(old_pos, new_pos);
-
-   /* Jump to 2nd line from 1st line.
-    * It has to return EINA_TRUE which means success. */
-   old_pos = new_pos;
-   ck_assert(edje_object_part_text_cursor_down(obj, "text", EDJE_CURSOR_MAIN));
-   new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
-   ck_assert_int_ne(old_pos, new_pos);
-
-   /* Try to jump to 3rd line from 2nd line. But, 3rd line does not exist.
-    * So, it has to return EINA_FALSE which means failure. */
-   old_pos = new_pos;
-   ck_assert(!edje_object_part_text_cursor_down(obj, "text", EDJE_CURSOR_MAIN));
-   new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
-   ck_assert_int_eq(old_pos, new_pos);
-
-   /* Move cursor to the end of 2nd line. */
-   for (i = 0; i < 3; i++)
-     {
-        old_pos = new_pos;
-        ck_assert(edje_object_part_text_cursor_next(obj, "text", EDJE_CURSOR_MAIN));
-        new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
-        ck_assert_int_ne(old_pos, new_pos);
-     }
-
-   /* Move cursor to the next of the end of 2nd line which does not exist. */
-   old_pos = new_pos;
-   ck_assert(!edje_object_part_text_cursor_next(obj, "text", EDJE_CURSOR_MAIN));
-   new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
-   ck_assert_int_eq(old_pos, new_pos);
-
-   /* Jump to 1st line from 2nd line.
-    * It has to return EINA_TRUE which means success. */
-   old_pos = new_pos;
-   ck_assert(edje_object_part_text_cursor_up(obj, "text", EDJE_CURSOR_MAIN));
-   new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
-   ck_assert_int_ne(old_pos, new_pos);
-
-   /* Try to jump to the above of 1st line from 1st line. But, there is no such line.
-    * So, it has to return EINA_FALSE which means failure. */
-   old_pos = new_pos;
-   ck_assert(!edje_object_part_text_cursor_up(obj, "text", EDJE_CURSOR_MAIN));
-   new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
-   ck_assert_int_eq(old_pos, new_pos);
-
-   EDJE_TEST_FREE_EVAS();
+   evas_free(evas);
 }
 EFL_END_TEST
 
 EFL_START_TEST(edje_test_part_caching)
 {
-   Evas *evas = EDJE_TEST_INIT_EVAS();
+   Evas *evas = _setup_evas();
    Evas_Object *ly, *o1, *global_p = NULL;
 
    ly = efl_add(EFL_CANVAS_LAYOUT_CLASS, evas,
@@ -1088,26 +230,7 @@ EFL_START_TEST(edje_test_part_caching)
 
      }
 
-   EDJE_TEST_FREE_EVAS();
-}
-EFL_END_TEST
-
-EFL_START_TEST(edje_test_textblock)
-{
-   Evas *evas;
-   Evas_Object *obj;
-   const char *buf = "Hello";
-   const char *txt;
-
-   evas = EDJE_TEST_INIT_EVAS();
-
-   obj = edje_object_add(evas);
-   fail_unless(edje_object_file_set(obj, test_layout_get("test_textblock.edj"), "test_textblock"));
-   edje_object_part_text_set(obj, "text", buf);
-   txt = edje_object_part_text_get(obj, "text");
-   fail_if(!txt || strcmp(txt, buf));
-
-   EDJE_TEST_FREE_EVAS();
+   evas_free(evas);
 }
 EFL_END_TEST
 
@@ -1119,25 +242,7 @@ void edje_test_edje(TCase *tc)
    tcase_add_test(tc, edje_test_simple_layout_geometry);
    tcase_add_test(tc, edje_test_complex_layout);
    tcase_add_test(tc, edje_test_calculate_parens);
-   tcase_add_test(tc, edje_test_masking);
-   tcase_add_test(tc, edje_test_filters);
-   tcase_add_test(tc, edje_test_snapshot);
-   tcase_add_test(tc, edje_test_size_class);
-   tcase_add_test(tc, edje_test_color_class);
-   tcase_add_test(tc, edje_test_swallows);
-   tcase_add_test(tc, edje_test_swallows_lifetime);
-   tcase_add_test(tc, edje_test_swallows_eoapi);
    tcase_add_test(tc, edje_test_access);
-   tcase_add_test(tc, edje_test_box);
-   tcase_add_test(tc, edje_test_box_eoapi);
-   tcase_add_test(tc, edje_test_table);
-   tcase_add_test(tc, edje_test_table_eoapi);
    tcase_add_test(tc, edje_test_combine_keywords);
-   tcase_add_test(tc, edje_test_message_send_legacy);
-   tcase_add_test(tc, edje_test_message_send_eo);
-   tcase_add_test(tc, edje_test_signals);
-   tcase_add_test(tc, edje_test_signal_callback_del_full);
-   tcase_add_test(tc, edje_test_text_cursor);
    tcase_add_test(tc, edje_test_part_caching);
-   tcase_add_test(tc, edje_test_textblock);
 }
diff --git a/src/tests/edje/edje_test_features.c b/src/tests/edje/edje_test_features.c
new file mode 100644 (file)
index 0000000..1cff283
--- /dev/null
@@ -0,0 +1,229 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <unistd.h>
+#include <stdio.h>
+
+#define EFL_GFX_FILTER_BETA
+#define EFL_CANVAS_LAYOUT_BETA
+
+#include "edje_suite.h"
+
+#define EVAS_DATA_DIR TESTS_SRC_DIR "/../../lib/evas"
+
+
+EFL_START_TEST(edje_test_masking)
+{
+   int x, y, w, h;
+   Evas *evas = _setup_evas();
+   const Evas_Object *sub, *clip2, *clip;
+   Evas_Object *obj;
+
+   obj = edje_object_add(evas);
+   fail_unless(edje_object_file_set(obj, test_layout_get("test_masking.edj"), "test_group"));
+
+   evas_object_resize(obj, 100, 100);
+   edje_object_part_geometry_get(obj, "background", &x, &y, &w, &h);
+   fail_if(x != 0 || y != 0 || w != 100 || h != 100);
+
+   edje_object_freeze(obj);
+   clip = edje_object_part_object_get(obj, "clip2");
+   edje_object_thaw(obj);
+   fail_if(!clip);
+
+   /* check value of no_render flag as seen from evas land */
+   edje_object_freeze(obj);
+   sub = edje_object_part_object_get(obj, "mask");
+   edje_object_thaw(obj);
+   fail_if(!efl_canvas_object_no_render_get(sub));
+
+   /* check that text has a clip (based on description.clip_to) */
+   edje_object_freeze(obj);
+   sub = edje_object_part_object_get(obj, "text");
+   edje_object_thaw(obj);
+   fail_if(!efl_canvas_object_clip_get(sub));
+
+   /* test description.clip_to override */
+   edje_object_freeze(obj);
+   sub = edje_object_part_object_get(obj, "noclip");
+   edje_object_thaw(obj);
+   clip2 = efl_canvas_object_clip_get(sub);
+   fail_if(clip != clip2);
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+EFL_START_TEST(edje_test_filters)
+{
+   Evas *evas = _setup_evas();
+   const Evas_Object *text, *sub;
+   Evas_Object *obj, *src = NULL;
+   const char *prg, *name;
+
+   setenv("EVAS_DATA_DIR", EVAS_DATA_DIR, 1);
+
+   obj = edje_object_add(evas);
+   fail_unless(edje_object_file_set(obj, test_layout_get("test_filters.edj"), "test_group"));
+
+   evas_object_resize(obj, 200, 200);
+
+   /* check value of no_render flag as seen from evas land */
+   edje_object_freeze(obj);
+   sub = edje_object_part_object_get(obj, "mask");
+   edje_object_thaw(obj);
+   fail_if(!efl_canvas_object_no_render_get(sub));
+
+   /* check no_render inheritance */
+   edje_object_freeze(obj);
+   sub = edje_object_part_object_get(obj, "mask2");
+   edje_object_thaw(obj);
+   fail_if(efl_canvas_object_no_render_get(sub));
+   edje_object_freeze(obj);
+   sub = edje_object_part_object_get(obj, "mask3");
+   edje_object_thaw(obj);
+   fail_if(!efl_canvas_object_no_render_get(sub));
+
+   /* text part: check filter status */
+   edje_object_freeze(obj);
+   text = edje_object_part_object_get(obj, "text");
+   edje_object_thaw(obj);
+   fail_if(!text);
+
+   efl_gfx_filter_program_get(text, &prg, &name);
+   fail_if(!prg);
+   fail_if(!name || strcmp(name, "filterfile"));
+
+   src = efl_gfx_filter_source_get(text, "mask");
+   fail_if(!src);
+
+   // TODO: Verify properly that the filter runs well
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+EFL_START_TEST(edje_test_snapshot)
+{
+   Evas *evas = _setup_evas();
+   const Evas_Object *sub;
+   Evas_Object *obj;
+
+   setenv("EVAS_DATA_DIR", EVAS_DATA_DIR, 1);
+
+   obj = edje_object_add(evas);
+   fail_unless(edje_object_file_set(obj, test_layout_get("test_snapshot.edj"), "test_group"));
+
+   evas_object_resize(obj, 200, 200);
+
+   /* check value of no_render flag as seen from evas land */
+   edje_object_freeze(obj);
+   sub = edje_object_part_object_get(obj, "snap");
+   edje_object_thaw(obj);
+   fail_if(!efl_isa(sub, EFL_CANVAS_SNAPSHOT_CLASS) &&
+           !evas_object_image_snapshot_get(sub));
+
+   // TODO: Verify that evas snapshot actually works (and has a filter)
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+EFL_START_TEST(edje_test_size_class)
+{
+   int minw, minh, minw2, minh2;
+   Evas *evas = _setup_evas();
+   Eina_List *l;
+   Eina_Stringshare *name;
+   Evas_Object *obj, *obj2;
+   Eina_Bool b;
+
+   obj = edje_object_add(evas);
+   fail_unless(edje_object_file_set(obj, test_layout_get("test_size_class.edj"), "test_group"));
+
+   obj2 = edje_object_add(evas);
+   fail_unless(edje_object_file_set(obj2, test_layout_get("test_size_class.edj"), "test_group"));
+
+   evas_object_resize(obj, 200, 200);
+   evas_object_resize(obj2, 200, 200);
+
+   /* check predefined min size of rect part by edc */
+   edje_object_part_geometry_get(obj, "rect", NULL, NULL, &minw, &minh);
+   fail_if(minw != 50 || minh != 50);
+
+   /* check that edje_size_class_set works */
+   b = edje_size_class_set("rect_size", 100, 100, -1, -1);
+   edje_object_part_geometry_get(obj, "rect", NULL, NULL, &minw, &minh);
+   edje_object_part_geometry_get(obj2, "rect", NULL, NULL, &minw2, &minh2);
+   fail_if(!b || minw != 100 || minh != 100 || minw2 != 100 || minh2 != 100);
+
+   /* check that edje_size_class_get works */
+   b = edje_size_class_get("rect_size", &minw, &minh, NULL, NULL);
+   fail_if(!b || minw != 100 || minh != 100);
+
+   /* check that edje_size_class_list works */
+   l = edje_size_class_list();
+   EINA_LIST_FREE(l, name)
+     {
+        fail_if(strcmp(name, "rect_size"));
+        eina_stringshare_del(name);
+     }
+
+   /* check that edje_object_size_class_set works */
+   b = edje_object_size_class_set(obj, "rect_size", 150, 150, -1, -1);
+   edje_object_part_geometry_get(obj, "rect", NULL, NULL, &minw, &minh);
+   edje_object_part_geometry_get(obj2, "rect", NULL, NULL, &minw2, &minh2);
+   fail_if(!b || minw != 150 || minh != 150 || minw2 != 100 || minh2 != 100);
+
+   /* check that edje_object_size_class_get works */
+   b = edje_object_size_class_get(obj, "rect_size", &minw, &minh, NULL, NULL);
+   fail_if(!b || minw != 150 || minh != 150);
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+EFL_START_TEST(edje_test_color_class)
+{
+   Evas *evas = _setup_evas();
+
+   Eina_File *f;
+   Eina_Iterator *it;
+   Edje_Color_Class *itcc, *cc = NULL;
+   char *filename;
+
+   filename = realpath(test_layout_get("test_color_class.edj"), NULL);
+   fail_if(!filename);
+
+   f = eina_file_open(filename, EINA_FALSE);
+   fail_if(!f);
+
+   it = edje_mmap_color_class_iterator_new(f);
+   fail_if(!it);
+   EINA_ITERATOR_FOREACH(it, itcc)
+     {
+        if (!strcmp(itcc->name, "test_color_class"))
+          {
+             cc = itcc;
+             break;
+          }
+     }
+   fail_if((!cc) || (cc->r != 100) || (cc->g != 100) || (cc->b != 100) || (cc->a != 100));
+
+   eina_iterator_free(it);
+   eina_file_close(f);
+   free(filename);
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+void edje_test_features(TCase *tc)
+{
+   tcase_add_test(tc, edje_test_masking);
+   tcase_add_test(tc, edje_test_filters);
+   tcase_add_test(tc, edje_test_snapshot);
+   tcase_add_test(tc, edje_test_size_class);
+   tcase_add_test(tc, edje_test_color_class);
+}
diff --git a/src/tests/edje/edje_test_signal.c b/src/tests/edje/edje_test_signal.c
new file mode 100644 (file)
index 0000000..2dc42b0
--- /dev/null
@@ -0,0 +1,240 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <unistd.h>
+#include <stdio.h>
+
+#define EFL_GFX_FILTER_BETA
+#define EFL_CANVAS_LAYOUT_BETA
+
+#include "edje_suite.h"
+
+#define EVAS_DATA_DIR TESTS_SRC_DIR "/../../lib/evas"
+
+static void
+_message_signal_reply_cb(void *data, Evas_Object *obj EINA_UNUSED,
+                         const char *emission, const char *source)
+{
+   int *id = data;
+
+   fprintf(stderr, "source %s emit %s id %d\n", source, emission, *id);
+   fflush(stderr);
+   ck_assert_str_eq(source, "edc");
+   ck_assert_ptr_ne(emission, NULL);
+
+   if (!strncmp(emission, "int set", 7))
+     ck_assert_str_eq(emission, "int set 7 12 42 255");
+   else if (!strncmp(emission, "int", 3))
+     ck_assert_str_eq(emission, "int 42");
+   else if (!strncmp(emission, "float", 5))
+     {
+        char buf[64];
+        sprintf(buf, "float %f", 0.12);
+        ck_assert_str_eq(emission, buf);
+     }
+   else if (!strncmp(emission, "str", 3))
+     ck_assert_str_eq(emission, "str hello world");
+   else ck_abort_msg("Invalid emission!");
+
+   (*id)++;
+}
+
+EFL_START_TEST(edje_test_message_send_legacy)
+{
+   Evas *evas;
+   Evas_Object *obj;
+   Edje_Message_Int msgi;
+   Edje_Message_Float msgf;
+   Edje_Message_String msgs;
+   Edje_Message_Int_Set *msgis;
+   int id = 0;
+
+   /* Ugly calls to process:
+    *
+    * 1. Send edje message (async)
+    * 2. Process edje message (sync)
+    * 3. EDC program emits edje signal (async)
+    * 4. Process edje signal (sync)
+    * 5. Finally reached signal cb
+    */
+
+   evas = _setup_evas();
+
+   obj = edje_object_add(evas);
+   fail_unless(edje_object_file_set(obj, test_layout_get("test_messages.edj"), "test_group"));
+   edje_object_signal_callback_add(obj, "*", "edc", _message_signal_reply_cb, &id);
+
+   msgs.str = "hello world";
+   edje_object_message_send(obj, EDJE_MESSAGE_STRING, 0, &msgs);
+   edje_message_signal_process();
+   ck_assert_int_eq(id, 1);
+
+   msgi.val = 42;
+   edje_object_message_send(obj, EDJE_MESSAGE_INT, 1, &msgi);
+   edje_message_signal_process();
+   ck_assert_int_eq(id, 2);
+
+   msgf.val = 0.12;
+   edje_object_message_send(obj, EDJE_MESSAGE_FLOAT, 2, &msgf);
+   edje_message_signal_process();
+   ck_assert_int_eq(id, 3);
+
+   msgis = alloca(sizeof(*msgis) + 4 * sizeof(msgis->val));
+   msgis->count = 4;
+   msgis->val[0] = 7;
+   msgis->val[1] = 12;
+   msgis->val[2] = 42;
+   msgis->val[3] = 255;
+   edje_object_message_send(obj, EDJE_MESSAGE_INT_SET, 3, msgis);
+   edje_message_signal_process();
+   ck_assert_int_eq(id, 4);
+
+   evas_object_del(obj);
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+EFL_START_TEST(edje_test_message_send_eo)
+{
+   Evas *evas;
+   Evas_Object *obj;
+   Eina_Value v, *va;
+   int id = 0;
+
+   evas = _setup_evas();
+
+   obj = efl_add(EFL_CANVAS_LAYOUT_CLASS, evas,
+                 efl_file_set(efl_added, test_layout_get("test_messages.edj"), "test_group"));
+
+   // FIXME: EO API HERE
+   edje_object_signal_callback_add(obj, "*", "edc", _message_signal_reply_cb, &id);
+
+   // NOTE: edje_object_message_signal_process may or may not be in EO (TBD)
+
+   eina_value_setup(&v, EINA_VALUE_TYPE_STRING);
+   eina_value_set(&v, "hello world");
+   efl_layout_signal_message_send(obj, 0, v);
+   eina_value_flush(&v);
+   edje_message_signal_process();
+   edje_object_calc_force(obj);
+   ck_assert_int_eq(id, 1);
+
+   eina_value_setup(&v, EINA_VALUE_TYPE_INT);
+   eina_value_set(&v, 42);
+   efl_layout_signal_message_send(obj, 1, v);
+   eina_value_flush(&v);
+   edje_message_signal_process();
+   edje_object_calc_force(obj);
+   ck_assert_int_eq(id, 2);
+
+   eina_value_setup(&v, EINA_VALUE_TYPE_FLOAT);
+   eina_value_set(&v, 0.12);
+   efl_layout_signal_message_send(obj, 2, v);
+   eina_value_flush(&v);
+   edje_message_signal_process();
+   edje_object_calc_force(obj);
+   ck_assert_int_eq(id, 3);
+
+   va = eina_value_array_new(EINA_VALUE_TYPE_INT, 4);
+   eina_value_array_append(va, 7);
+   eina_value_array_append(va, 12);
+   eina_value_array_append(va, 42);
+   eina_value_array_append(va, 255);
+   efl_layout_signal_message_send(obj, 3, *va);
+   eina_value_free(va);
+   edje_message_signal_process();
+   edje_object_calc_force(obj);
+   ck_assert_int_eq(id, 4);
+
+   efl_del(obj);
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+EFL_START_TEST(edje_test_signals)
+{
+   Evas *evas;
+   Evas_Object *obj;
+   const char *state;
+
+   evas = _setup_evas();
+
+   obj = efl_add(EFL_CANVAS_LAYOUT_CLASS, evas,
+                 efl_file_set(efl_added, test_layout_get("test_signals.edj"), "level1"),
+                 efl_gfx_entity_size_set(efl_added, EINA_SIZE2D(320, 240)),
+                 efl_gfx_entity_visible_set(efl_added, 1));
+
+   edje_object_signal_emit(obj, "mouse,in", "text");
+
+   edje_object_message_signal_process(obj);
+   state = edje_object_part_state_get(obj, "group:group:text", NULL);
+   ck_assert_str_eq(state, "default");
+
+   edje_object_message_signal_process(obj);
+   state = edje_object_part_state_get(obj, "group:group:text", NULL);
+   ck_assert_str_eq(state, "default");
+
+   edje_object_message_signal_recursive_process(obj);
+   state = edje_object_part_state_get(obj, "group:group:text", NULL);
+   ck_assert_str_eq(state, "over");
+
+   efl_del(obj);
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+static int _signal_count;
+
+static void
+_signal_callback_count_cb(void *data, Evas_Object *obj EINA_UNUSED,
+                         const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
+{
+   int *_data = data;
+   _signal_count += *_data;
+}
+
+EFL_START_TEST(edje_test_signal_callback_del_full)
+{
+   Evas *evas;
+   Evas_Object *obj;
+   int data[4] = { 1, 2, 4, 8 };
+
+   evas = _setup_evas();
+
+   obj = efl_add(EFL_CANVAS_LAYOUT_CLASS, evas,
+                 efl_file_set(efl_added,
+                 test_layout_get("test_signal_callback_del_full.edj"), "test"),
+                 efl_gfx_entity_size_set(efl_added, EINA_SIZE2D(320, 240)),
+                 efl_gfx_entity_visible_set(efl_added, 1));
+
+   edje_object_signal_callback_add(obj, "some_signal", "event", _signal_callback_count_cb, &data[0]);
+   edje_object_signal_callback_add(obj, "some_signal", "event", _signal_callback_count_cb, &data[1]);
+   edje_object_signal_callback_add(obj, "some_signal", "event", _signal_callback_count_cb, &data[2]);
+   edje_object_signal_callback_add(obj, "some_signal", "event", _signal_callback_count_cb, &data[3]);
+
+   edje_object_signal_callback_del_full(obj, "some_signal", "event", _signal_callback_count_cb, &data[0]);
+   edje_object_signal_callback_del_full(obj, "some_signal", "event", _signal_callback_count_cb, &data[3]);
+
+   edje_object_signal_emit(obj, "some_signal", "event");
+
+   edje_object_message_signal_process(obj);
+   ck_assert_int_eq(_signal_count, (data[1] + data[2]));
+
+   efl_del(obj);
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+void edje_test_signal(TCase *tc)
+{
+   tcase_add_test(tc, edje_test_message_send_legacy);
+   tcase_add_test(tc, edje_test_message_send_eo);
+   tcase_add_test(tc, edje_test_signals);
+   tcase_add_test(tc, edje_test_signal_callback_del_full);
+
+}
diff --git a/src/tests/edje/edje_test_swallow.c b/src/tests/edje/edje_test_swallow.c
new file mode 100644 (file)
index 0000000..d255937
--- /dev/null
@@ -0,0 +1,104 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <unistd.h>
+#include <stdio.h>
+
+#define EFL_GFX_FILTER_BETA
+#define EFL_CANVAS_LAYOUT_BETA
+
+#include "edje_suite.h"
+
+#define EVAS_DATA_DIR TESTS_SRC_DIR "/../../lib/evas"
+
+
+EFL_START_TEST(edje_test_swallows)
+{
+   Evas *evas = _setup_evas();
+   Evas_Object *ly, *o1, *o2;
+
+   ly = efl_add(EFL_CANVAS_LAYOUT_CLASS, evas);
+   fail_unless(edje_object_file_set(ly, test_layout_get("test_swallows.edj"), "test_group"));
+
+   fail_unless(edje_object_part_exists(ly, "swallow"));
+
+
+   o1 = efl_add(EFL_CANVAS_LAYOUT_CLASS, ly);
+   fail_if(!edje_object_part_swallow(ly, "swallow", o1));
+   ck_assert_ptr_eq(efl_parent_get(o1), ly);
+
+   edje_object_part_unswallow(ly, o1);
+   ck_assert_ptr_eq(efl_parent_get(o1), evas_object_evas_get(o1));
+
+   fail_if(!edje_object_part_swallow(ly, "swallow", o1));
+   ck_assert_ptr_eq(efl_parent_get(o1), ly);
+
+   o2 = efl_add(EFL_CANVAS_LAYOUT_CLASS, ly);
+   fail_if(!edje_object_part_swallow(ly, "swallow", o2));
+   ck_assert_ptr_eq(efl_parent_get(o2), ly);
+   /* o1 is deleted at this point. */
+   ck_assert_ptr_eq(efl_parent_get(o1), evas_object_evas_get(o1));
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+EFL_START_TEST(edje_test_swallows_lifetime)
+{
+   Evas *evas = _setup_evas();
+   Evas_Object *ly, *o1;
+
+   ly = edje_object_add(evas);
+   fail_unless(edje_object_file_set(ly, test_layout_get("test_swallows.edj"), "test_group"));
+
+   fail_unless(edje_object_part_exists(ly, "swallow"));
+
+   o1 = edje_object_add(ly);
+   fail_if(!edje_object_part_swallow(ly, "swallow", o1));
+
+   evas_object_del(ly);
+   fail_if(!efl_parent_get(o1));
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+EFL_START_TEST(edje_test_swallows_eoapi)
+{
+   Evas *evas = _setup_evas();
+   Evas_Object *ly, *o1, *o2;
+
+   ly = efl_add(EFL_CANVAS_LAYOUT_CLASS, evas);
+   fail_unless(edje_object_file_set(ly, test_layout_get("test_swallows.edj"), "test_group"));
+
+   fail_unless(edje_object_part_exists(ly, "swallow"));
+
+
+   o1 = efl_add(EFL_CANVAS_LAYOUT_CLASS, ly);
+   fail_if(!efl_content_set(efl_part(ly, "swallow"), o1));
+   ck_assert_ptr_eq(efl_parent_get(o1), ly);
+
+   efl_content_remove(ly, o1);
+   ck_assert_ptr_eq(efl_parent_get(o1), evas_object_evas_get(o1));
+
+   fail_if(!efl_content_set(efl_part(ly, "swallow"), o1));
+   ck_assert_ptr_eq(efl_parent_get(o1), ly);
+
+   o2 = efl_add(EFL_CANVAS_LAYOUT_CLASS, ly);
+   fail_if(!efl_content_set(efl_part(ly, "swallow"), o2));
+   ck_assert_ptr_eq(efl_parent_get(o2), ly);
+   /* o1 is deleted at this point. */
+   ck_assert_ptr_eq(efl_parent_get(o1), evas_object_evas_get(o1));
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+
+void edje_test_swallow(TCase *tc)
+{
+   tcase_add_test(tc, edje_test_swallows);
+   tcase_add_test(tc, edje_test_swallows_lifetime);
+   tcase_add_test(tc, edje_test_swallows_eoapi);
+}
diff --git a/src/tests/edje/edje_test_text.c b/src/tests/edje/edje_test_text.c
new file mode 100644 (file)
index 0000000..d87ab48
--- /dev/null
@@ -0,0 +1,120 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <unistd.h>
+#include <stdio.h>
+
+#define EFL_GFX_FILTER_BETA
+#define EFL_CANVAS_LAYOUT_BETA
+
+#include "edje_suite.h"
+
+#define EVAS_DATA_DIR TESTS_SRC_DIR "/../../lib/evas"
+
+
+EFL_START_TEST(edje_test_text_cursor)
+{
+   Evas *evas;
+   Evas_Object *obj;
+   const char *buf = "ABC<br/>DEF";
+   const char *txt;
+   int i, old_pos, new_pos;
+
+   evas = _setup_evas();
+
+   obj = edje_object_add(evas);
+   fail_unless(edje_object_file_set(obj, test_layout_get("test_text_cursor.edj"), "test_text_cursor"));
+   edje_object_part_text_set(obj, "text", buf);
+   txt = edje_object_part_text_get(obj, "text");
+   fail_if(!txt || strcmp(txt, buf));
+
+   edje_object_part_text_cursor_pos_set(obj, "text", EDJE_CURSOR_MAIN, 0);
+   ck_assert_int_eq(edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN), 0);
+   edje_object_part_text_cursor_pos_set(obj, "text", EDJE_CURSOR_MAIN, 1);
+   ck_assert_int_eq(edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN), 1);
+
+   /* Move cursor to the 0 pos from 1 pos */
+   old_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
+   ck_assert(edje_object_part_text_cursor_prev(obj, "text", EDJE_CURSOR_MAIN));
+   new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
+   ck_assert_int_ne(old_pos, new_pos);
+
+   /* Move cursor to the -1 pos from 0 pos. It has to fail. */
+   old_pos = new_pos;
+   ck_assert(!edje_object_part_text_cursor_prev(obj, "text", EDJE_CURSOR_MAIN));
+   new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
+   ck_assert_int_eq(old_pos, new_pos);
+
+   /* Jump to 2nd line from 1st line.
+    * It has to return EINA_TRUE which means success. */
+   old_pos = new_pos;
+   ck_assert(edje_object_part_text_cursor_down(obj, "text", EDJE_CURSOR_MAIN));
+   new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
+   ck_assert_int_ne(old_pos, new_pos);
+
+   /* Try to jump to 3rd line from 2nd line. But, 3rd line does not exist.
+    * So, it has to return EINA_FALSE which means failure. */
+   old_pos = new_pos;
+   ck_assert(!edje_object_part_text_cursor_down(obj, "text", EDJE_CURSOR_MAIN));
+   new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
+   ck_assert_int_eq(old_pos, new_pos);
+
+   /* Move cursor to the end of 2nd line. */
+   for (i = 0; i < 3; i++)
+     {
+        old_pos = new_pos;
+        ck_assert(edje_object_part_text_cursor_next(obj, "text", EDJE_CURSOR_MAIN));
+        new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
+        ck_assert_int_ne(old_pos, new_pos);
+     }
+
+   /* Move cursor to the next of the end of 2nd line which does not exist. */
+   old_pos = new_pos;
+   ck_assert(!edje_object_part_text_cursor_next(obj, "text", EDJE_CURSOR_MAIN));
+   new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
+   ck_assert_int_eq(old_pos, new_pos);
+
+   /* Jump to 1st line from 2nd line.
+    * It has to return EINA_TRUE which means success. */
+   old_pos = new_pos;
+   ck_assert(edje_object_part_text_cursor_up(obj, "text", EDJE_CURSOR_MAIN));
+   new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
+   ck_assert_int_ne(old_pos, new_pos);
+
+   /* Try to jump to the above of 1st line from 1st line. But, there is no such line.
+    * So, it has to return EINA_FALSE which means failure. */
+   old_pos = new_pos;
+   ck_assert(!edje_object_part_text_cursor_up(obj, "text", EDJE_CURSOR_MAIN));
+   new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
+   ck_assert_int_eq(old_pos, new_pos);
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+
+EFL_START_TEST(edje_test_textblock)
+{
+   Evas *evas;
+   Evas_Object *obj;
+   const char *buf = "Hello";
+   const char *txt;
+
+   evas = _setup_evas();
+
+   obj = edje_object_add(evas);
+   fail_unless(edje_object_file_set(obj, test_layout_get("test_textblock.edj"), "test_textblock"));
+   edje_object_part_text_set(obj, "text", buf);
+   txt = edje_object_part_text_get(obj, "text");
+   fail_if(!txt || strcmp(txt, buf));
+
+   evas_free(evas);
+}
+EFL_END_TEST
+
+void edje_test_text(TCase *tc)
+{
+   tcase_add_test(tc, edje_test_text_cursor);
+   tcase_add_test(tc, edje_test_textblock);
+}
diff --git a/src/tests/edje/edje_tests_helpers.h b/src/tests/edje/edje_tests_helpers.h
deleted file mode 100644 (file)
index 530d10e..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef EDJE_TEST_HELPERS_H
-#define EDJE_TEST_HELPERS_H
-
-#include <Ecore_Evas.h>
-
-/* FIXME: Currently depends on the buffer engine, should we do anything
- * fancier? */
-
-#define EDJE_TEST_INIT_EVAS() _setup_evas()
-
-#define EDJE_TEST_FREE_EVAS() \
-  do                         \
-    {                        \
-      edje_shutdown();       \
-      evas_free(evas);       \
-      ecore_evas_shutdown();  \
-    }                        \
-  while (0)
-
-static Evas *
-_setup_evas()
-{
-   Evas *evas;
-   Evas_Engine_Info *einfo;
-
-   ecore_evas_init();
-   edje_init();
-
-   evas = evas_new();
-
-   evas_output_method_set(evas, evas_render_method_lookup("buffer"));
-   einfo = evas_engine_info_get(evas);
-   evas_engine_info_set(evas, einfo);
-
-   evas_output_size_set(evas, 500, 500);
-   evas_output_viewport_set(evas, 0, 0, 500, 500);
-
-   return evas;
-}
-
-#endif
-