From 5ba58353f006d54f096c371e9c773d24cf4263cc Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Mon, 9 May 2016 14:37:22 +0900 Subject: [PATCH] Edje: Fix test case to show proper use of part APIs The one and only valid use case is calling a function directly on the part handle, like: func(part_get(obj, "part"), args). This does not change the actual proxy object lifecycle or resolve any potential issues, but this should clear up things in terms of scope for proper (supported) use. efl_content_get may become efl_part() and return a temporary object, valid for a single function call. Those are "details" still to be refined. --- src/tests/edje/edje_test_edje.c | 88 ++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 45 deletions(-) diff --git a/src/tests/edje/edje_test_edje.c b/src/tests/edje/edje_test_edje.c index 71969b0..bcd36f1 100644 --- a/src/tests/edje/edje_test_edje.c +++ b/src/tests/edje/edje_test_edje.c @@ -499,7 +499,6 @@ START_TEST(edje_test_box_eoapi) Evas *evas; Evas_Object *obj, *sobj, *sobjs[5]; Eina_Iterator *it; - Eo *box; int i; evas = EDJE_TEST_INIT_EVAS(); @@ -514,17 +513,14 @@ START_TEST(edje_test_box_eoapi) } /* same test case as legacy api above */ - box = efl_content_get(obj, "box"); - fail_if(!box); - - efl_pack_end(box, sobjs[3]); - efl_pack_begin(box, sobjs[1]); - efl_pack_before(box, sobjs[0], sobjs[1]); - efl_pack_after(box, sobjs[4], sobjs[3]); - efl_pack_at(box, sobjs[2], 2); - fail_if(efl_content_count(box) != 5); - - it = efl_content_iterate(box); + efl_pack_end(efl_content_get(obj, "box"), sobjs[3]); + efl_pack_begin(efl_content_get(obj, "box"), sobjs[1]); + efl_pack_before(efl_content_get(obj, "box"), sobjs[0], sobjs[1]); + efl_pack_after(efl_content_get(obj, "box"), sobjs[4], sobjs[3]); + efl_pack_at(efl_content_get(obj, "box"), sobjs[2], 2); + fail_if(efl_content_count(efl_content_get(obj, "box")) != 5); + + it = efl_content_iterate(efl_content_get(obj, "box")); i = 0; EINA_ITERATOR_FOREACH(it, sobj) fail_if(sobj != sobjs[i++]); @@ -532,29 +528,27 @@ START_TEST(edje_test_box_eoapi) eina_iterator_free(it); /* clear up and test a bit more */ - efl_pack_unpack_all(box); - fail_if(efl_content_count(box) != 0); + efl_pack_unpack_all(efl_content_get(obj, "box")); + fail_if(efl_content_count(efl_content_get(obj, "box")) != 0); - efl_pack(box, sobjs[1]); - efl_pack_at(box, sobjs[0], 0); - efl_pack_at(box, sobjs[2], -1); - it = efl_content_iterate(box); + efl_pack(efl_content_get(obj, "box"), sobjs[1]); + efl_pack_at(efl_content_get(obj, "box"), sobjs[0], 0); + efl_pack_at(efl_content_get(obj, "box"), sobjs[2], -1); + it = efl_content_iterate(efl_content_get(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(box, sobjs[0])); - fail_if(efl_content_count(box) != 2); - fail_if(!efl_pack_unpack_at(box, 1)); - fail_if(efl_content_count(box) != 1); - fail_if(efl_pack_index_get(box, sobjs[1]) != 0); + fail_if(!efl_content_remove(efl_content_get(obj, "box"), sobjs[0])); + fail_if(efl_content_count(efl_content_get(obj, "box")) != 2); + fail_if(!efl_pack_unpack_at(efl_content_get(obj, "box"), 1)); + fail_if(efl_content_count(efl_content_get(obj, "box")) != 1); + fail_if(efl_pack_index_get(efl_content_get(obj, "box"), sobjs[1]) != 0); - efl_pack_clear(box); - fail_if(efl_content_count(box) != 0); - - eo_del(box); + efl_pack_clear(efl_content_get(obj, "box")); + fail_if(efl_content_count(efl_content_get(obj, "box")) != 0); EDJE_TEST_FREE_EVAS(); } @@ -640,7 +634,6 @@ START_TEST(edje_test_table_eoapi) Evas *evas; Evas_Object *obj, *sobj, *sobjs[4]; Eina_Iterator *it; - Eo *table, *other; int i, k, l, cs, rs, cols, rows; evas = EDJE_TEST_INIT_EVAS(); @@ -648,11 +641,8 @@ START_TEST(edje_test_table_eoapi) obj = edje_object_add(evas); fail_unless(edje_object_file_set(obj, test_layout_get("test_table.edj"), "test_group")); - table = efl_content_get(obj, "table"); - fail_if(!table); - /* check items from EDC */ - fail_if(efl_content_count(table) != 4); + fail_if(efl_content_count(efl_content_get(obj, "table")) != 4); for (l = 0; l < 2; l++) for (k = 0; k < 2; k++) { @@ -661,7 +651,7 @@ START_TEST(edje_test_table_eoapi) /* items have a text part "text" containing their position */ sprintf(buf, "%d,%d", k, l); - sobj = efl_pack_grid_content_get(table, k, l); + sobj = efl_pack_grid_content_get(efl_content_get(obj, "table"), k, l); fail_if(!sobj); //txt = efl_part_text_get(sobj, "text"); txt = edje_object_part_text_get(sobj, "text"); @@ -676,16 +666,16 @@ START_TEST(edje_test_table_eoapi) i = l*2 + k; sobjs[i] = eo_add(EVAS_RECTANGLE_CLASS, evas); fail_if(!sobjs[i]); - efl_pack_grid(table, sobjs[i], k, l + 2, 1, 1); + efl_pack_grid(efl_content_get(obj, "table"), sobjs[i], k, l + 2, 1, 1); } - fail_if(efl_content_count(table) != 8); + fail_if(efl_content_count(efl_content_get(obj, "table")) != 8); i = 0; - it = efl_content_iterate(table); + it = efl_content_iterate(efl_content_get(obj, "table")); EINA_ITERATOR_FOREACH(it, sobj) { - efl_pack_grid_position_get(table, sobj, &k, &l, &cs, &rs); + efl_pack_grid_position_get(efl_content_get(obj, "table"), sobj, &k, &l, &cs, &rs); fail_if(cs != 1); fail_if(rs != 1); if (l >= 2) @@ -696,24 +686,32 @@ START_TEST(edje_test_table_eoapi) fail_if(i != 8); /* table size and clear */ - efl_pack_grid_size_get(table, &cols, &rows); + efl_pack_grid_size_get(efl_content_get(obj, "table"), &cols, &rows); fail_if(cols != 2); fail_if(rows != 4); - efl_pack_clear(table); - fail_if(efl_content_count(table) != 4); + efl_pack_clear(efl_content_get(obj, "table")); + fail_if(efl_content_count(efl_content_get(obj, "table")) != 4); - efl_pack_grid_size_get(table, &cols, &rows); + efl_pack_grid_size_get(efl_content_get(obj, "table"), &cols, &rows); fail_if(cols != 2); fail_if(rows != 2); - /* test proxy object references - * exact reference count is not part of API, - * only lifecycle of object matters + /* Test proxy object lifecycle. + * + * Note: Some things below this point may break if the implementation + * changes, that's OK. We only want to provide a certain level of safety + * against misuse. Only the above use case is correct. * - * very ugly code below - test case only! + * Pretty much everything below this point is a misuse of the API. */ + + Eo *table, *other; + + table = efl_content_get(obj, "table"); + fail_if(!table); + i = eo_ref_get(table); fail_if(i != 1); eo_del(table); -- 2.7.4