1 #ifdef HAVE_CONFIG_H
2 # include <config.h>
3 #endif
4 
5 #include <unistd.h>
6 #include <stdio.h>
7 
8 #define EFL_GFX_FILTER_BETA
9 #define EFL_CANVAS_LAYOUT_BETA
10 
11 #include "edje_suite.h"
12 
13 #define EVAS_DATA_DIR TESTS_SRC_DIR "/../../lib/evas"
14 
15 
EFL_START_TEST(edje_test_swallows)16 EFL_START_TEST(edje_test_swallows)
17 {
18    Evas *evas = _setup_evas();
19    Evas_Object *ly, *o1, *o2;
20 
21    ly = efl_add(EFL_CANVAS_LAYOUT_CLASS, evas);
22    fail_unless(edje_object_file_set(ly, test_layout_get("test_swallows.edj"), "test_group"));
23 
24    fail_unless(edje_object_part_exists(ly, "swallow"));
25 
26 
27    o1 = efl_add(EFL_CANVAS_LAYOUT_CLASS, ly);
28    fail_if(!edje_object_part_swallow(ly, "swallow", o1));
29    ck_assert_ptr_eq(efl_parent_get(o1), ly);
30 
31    edje_object_part_unswallow(ly, o1);
32    ck_assert_ptr_eq(efl_parent_get(o1), evas_object_evas_get(o1));
33 
34    fail_if(!edje_object_part_swallow(ly, "swallow", o1));
35    ck_assert_ptr_eq(efl_parent_get(o1), ly);
36 
37    o2 = efl_add(EFL_CANVAS_LAYOUT_CLASS, ly);
38    fail_if(!edje_object_part_swallow(ly, "swallow", o2));
39    ck_assert_ptr_eq(efl_parent_get(o2), ly);
40    /* o1 is deleted at this point. */
41    ck_assert_ptr_eq(efl_parent_get(o1), evas_object_evas_get(o1));
42 
43 }
44 EFL_END_TEST
45 
EFL_START_TEST(edje_test_swallows_lifetime)46 EFL_START_TEST(edje_test_swallows_lifetime)
47 {
48    Evas *evas = _setup_evas();
49    Evas_Object *ly, *o1;
50 
51    ly = edje_object_add(evas);
52    fail_unless(edje_object_file_set(ly, test_layout_get("test_swallows.edj"), "test_group"));
53 
54    fail_unless(edje_object_part_exists(ly, "swallow"));
55 
56    o1 = edje_object_add(evas);
57    fail_if(!edje_object_part_swallow(ly, "swallow", o1));
58 
59    evas_object_del(ly);
60    fail_if(!efl_parent_get(o1));
61 
62 }
63 EFL_END_TEST
64 
65 static void
edje_test_swallows_invalidate_del(void * data,Evas * e EINA_UNUSED,Evas_Object * obj,void * event_info EINA_UNUSED)66 edje_test_swallows_invalidate_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
67 {
68    ck_assert(data == edje_object_part_swallow_get(obj, "swallow"));
69 }
70 
EFL_START_TEST(edje_test_swallows_invalidate)71 EFL_START_TEST(edje_test_swallows_invalidate)
72 {
73    Evas *evas = _setup_evas();
74    Evas_Object *ly, *o1;
75 
76    ly = edje_object_add(evas);
77    fail_unless(edje_object_file_set(ly, test_layout_get("test_swallows.edj"), "test_group"));
78 
79    fail_unless(edje_object_part_exists(ly, "swallow"));
80 
81    o1 = edje_object_add(evas);
82    fail_if(!edje_object_part_swallow(ly, "swallow", o1));
83 
84    evas_object_event_callback_add(ly, EVAS_CALLBACK_DEL, edje_test_swallows_invalidate_del, o1);
85 
86    evas_object_del(ly);
87    fail_if(!efl_parent_get(o1));
88 
89 }
90 EFL_END_TEST
91 
EFL_START_TEST(edje_test_swallows_eoapi)92 EFL_START_TEST(edje_test_swallows_eoapi)
93 {
94    Evas *evas = _setup_evas();
95    Evas_Object *ly, *o1, *o2;
96 
97    ly = efl_add(EFL_CANVAS_LAYOUT_CLASS, evas);
98    fail_unless(edje_object_file_set(ly, test_layout_get("test_swallows.edj"), "test_group"));
99 
100    fail_unless(edje_object_part_exists(ly, "swallow"));
101 
102 
103    o1 = efl_add(EFL_CANVAS_LAYOUT_CLASS, ly);
104    fail_if(!efl_content_set(efl_part(ly, "swallow"), o1));
105    ck_assert_ptr_eq(efl_parent_get(o1), ly);
106 
107    efl_canvas_layout_content_remove(ly, o1);
108    ck_assert_ptr_eq(efl_parent_get(o1), evas_object_evas_get(o1));
109 
110    fail_if(!efl_content_set(efl_part(ly, "swallow"), o1));
111    ck_assert_ptr_eq(efl_parent_get(o1), ly);
112 
113    o2 = efl_add(EFL_CANVAS_LAYOUT_CLASS, ly);
114    fail_if(!efl_content_set(efl_part(ly, "swallow"), o2));
115    ck_assert_ptr_eq(efl_parent_get(o2), ly);
116    /* o1 is deleted at this point. */
117    ck_assert_ptr_eq(efl_parent_get(o1), evas_object_evas_get(o1));
118 
119 }
120 EFL_END_TEST
121 
EFL_START_TEST(edje_test_swallows_container_api)122 EFL_START_TEST(edje_test_swallows_container_api)
123 {
124    Evas *evas = _setup_evas();
125    Evas_Object *ly, *o1;
126 
127    ly = efl_add(EFL_CANVAS_LAYOUT_CLASS, evas);
128    fail_unless(edje_object_file_set(ly, test_layout_get("test_swallows.edj"), "test_group"));
129 
130    fail_unless(edje_object_part_exists(ly, "swallow"));
131 
132    o1 = efl_add(EFL_CANVAS_LAYOUT_CLASS, ly);
133    fail_if(!efl_content_set(efl_part(ly, "swallow"), o1));
134 
135    ck_assert_int_eq(efl_content_count(ly), 1);
136 
137    {
138       Eina_Array *arr = eina_array_new(1);
139       Eina_Iterator *iter = efl_content_iterate(ly);
140       Eo *content;
141 
142       EINA_ITERATOR_FOREACH(iter, content)
143         {
144            eina_array_push(arr, content);
145         }
146 
147       ck_assert_int_eq(eina_array_count(arr), 1);
148       ck_assert_ptr_eq(eina_array_data_get(arr, 0), o1);
149       eina_array_free(arr);
150    }
151 
152 }
153 EFL_END_TEST
154 
edje_test_swallow(TCase * tc)155 void edje_test_swallow(TCase *tc)
156 {
157    tcase_add_test(tc, edje_test_swallows);
158    tcase_add_test(tc, edje_test_swallows_lifetime);
159    tcase_add_test(tc, edje_test_swallows_invalidate);
160    tcase_add_test(tc, edje_test_swallows_eoapi);
161    tcase_add_test(tc, edje_test_swallows_container_api);
162 }
163