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.
This commit is contained in:
Jean-Philippe Andre 2016-05-09 14:37:22 +09:00
parent 290b3d8926
commit 5ba58353f0
1 changed files with 42 additions and 44 deletions

View File

@ -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(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);
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);
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.
*
* very ugly code below - test case only!
* 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.
*
* 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);