From eb5bb9b35bdaf9d66deee4460291b65b20616a18 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 8 Aug 2018 09:36:33 -0400 Subject: [PATCH] tests/genlist: add full test for expanding and contracting a genlist item Summary: this adds a fairly complete test for simulating the expand and contract of a tree item in a genlist, as triggered by a user clicking the expand arrow on an item presently this test fails, as it is set to abort if any error messages are logged and there are a number of focus manager errors ref D6737 ref T6837 Reviewers: bu5hm4n, Hermet Reviewed By: Hermet Subscribers: SanghyeonLee, cedric, #committers Tags: #efl_tests, #efl_widgets Maniphest Tasks: T6837 Differential Revision: https://phab.enlightenment.org/D6750 --- src/tests/elementary/elm_test_genlist.c | 149 +++++++++++++++++++++++- 1 file changed, 148 insertions(+), 1 deletion(-) diff --git a/src/tests/elementary/elm_test_genlist.c b/src/tests/elementary/elm_test_genlist.c index aa85ff7336..9bddd26e7f 100644 --- a/src/tests/elementary/elm_test_genlist.c +++ b/src/tests/elementary/elm_test_genlist.c @@ -8,12 +8,15 @@ #include "elm_suite.h" static Evas_Object *win, *genlist; -static Elm_Gen_Item_Class itc; +static Elm_Gen_Item_Class itc = { .version = ELM_GENLIST_ITEM_CLASS_VERSION }; static Eo *current; static int counter; static Efl_Access_Event_Children_Changed_Data ev_data; Evas_Object *content; +static int tree_abort_level; +static int tree_abort; + static void verify_item_iteration_api(Elm_Object_Item *parent) { @@ -327,6 +330,148 @@ EFL_START_TEST(elm_genlist_test_item_destroy) } EFL_END_TEST +#define NUM_TREE_ITEMS 10 + +static Evas_Object * +genlist_tree_test_content_get(void *data EINA_UNUSED, Evas_Object *obj, const char *part) +{ + if (!strcmp(part, "elm.swallow.icon")) + { + Evas_Object *ic = elm_icon_add(obj); + elm_image_file_set(ic, ELM_IMAGE_DATA_DIR "/images/logo_small.png", NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + evas_object_show(ic); + return ic; + } + else if (!strcmp(part, "elm.swallow.end")) + { + Evas_Object *ck; + ck = elm_check_add(obj); + evas_object_propagate_events_set(ck, EINA_FALSE); + evas_object_show(ck); + return ck; + } + return NULL; +} + +static void +_focus_set(void *data) +{ + elm_genlist_item_selected_set(data, 1); + elm_object_item_focus_set(data, 1); +} + +static void +genlist_tree_test_realize(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + evas_object_smart_callback_del(genlist, "realized", genlist_tree_test_realize); + ecore_job_add(_focus_set, event_info); + elm_object_item_signal_emit(event_info, "elm,action,expand,toggle", "elm"); +} + +static void +genlist_tree_test_realize2(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + static unsigned int count; + + if (!elm_genlist_item_parent_get(event_info)) return; + if (++count != NUM_TREE_ITEMS) return; + evas_object_smart_callback_del(genlist, "realized", genlist_tree_test_realize2); + elm_object_item_signal_emit(elm_genlist_first_item_get(genlist), "elm,action,expand,toggle", "elm"); +} + +static void +genlist_tree_test_expand(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Elm_Object_Item *glit = event_info; + Evas_Object *gl = elm_object_item_widget_get(glit); + int i = 0; + + evas_object_smart_callback_add(genlist, "realized", genlist_tree_test_realize2, NULL); + for (i = 0; i < NUM_TREE_ITEMS; i++) + { + elm_genlist_item_append(gl, &itc, + NULL/* item data */, + glit/* parent */, + ELM_GENLIST_ITEM_TREE, NULL/* func */, + NULL/* func data */); + } +} + +static void +_do_quit() +{ + itc.func.content_get = NULL; + eina_log_abort_on_critical_set(tree_abort); + eina_log_abort_on_critical_level_set(tree_abort_level); + ecore_main_loop_quit(); +} + +static void +genlist_tree_test_contract(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Elm_Object_Item *glit = event_info; + ck_assert_int_eq(elm_genlist_item_subitems_count(glit), NUM_TREE_ITEMS); + elm_genlist_item_subitems_clear(glit); + ecore_job_add(_do_quit, NULL); +} + +static void +genlist_tree_test_expand_request(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Elm_Object_Item *glit = event_info; + elm_genlist_item_expanded_set(glit, EINA_TRUE); +} + +static void +genlist_tree_test_contract_request(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Elm_Object_Item *glit = event_info; + elm_genlist_item_expanded_set(glit, EINA_FALSE); +} + +EFL_START_TEST(elm_genlist_test_tree_expand) +{ + int i; + win = win_add(NULL, "genlist", ELM_WIN_BASIC); + + itc.func.content_get = genlist_tree_test_content_get; + + genlist = elm_genlist_add(win); + elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS); + elm_genlist_multi_select_set(genlist, EINA_TRUE); + + evas_object_smart_callback_add(genlist, "expand,request", genlist_tree_test_expand_request, NULL); + evas_object_smart_callback_add(genlist, "contract,request", genlist_tree_test_contract_request, NULL); + evas_object_smart_callback_add(genlist, "expanded", genlist_tree_test_expand, NULL); + evas_object_smart_callback_add(genlist, "contracted", genlist_tree_test_contract, NULL); + evas_object_smart_callback_add(genlist, "realized", genlist_tree_test_realize, NULL); + + evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_genlist_item_append(genlist, &itc, + NULL/* item data */, NULL/* parent */, + ELM_GENLIST_ITEM_TREE, NULL/* func */, + NULL/* func data */); + for (i = 0; i < 30; i++) + elm_genlist_item_append(genlist, &itc, + NULL/* item data */, NULL/* parent */, + 0, NULL/* func */, + NULL/* func data */); + + evas_object_show(genlist); + evas_object_resize(genlist, 100, 10 + 10 * NUM_TREE_ITEMS); + evas_object_show(win); + evas_object_resize(win, 100, 10 + 10 * NUM_TREE_ITEMS); + tree_abort = eina_log_abort_on_critical_get(); + tree_abort_level = eina_log_abort_on_critical_level_get(); + /* this should never trigger errors */ + eina_log_abort_on_critical_level_set(2); + eina_log_abort_on_critical_set(1); + ecore_main_loop_begin(); +} +EFL_END_TEST + void elm_test_genlist(TCase *tc) { tcase_add_test(tc, elm_genlist_test_legacy_type_check); @@ -338,4 +483,6 @@ void elm_test_genlist(TCase *tc) tcase_add_test(tc, elm_genlist_test_atspi_children_events_add); tcase_add_test(tc, elm_genlist_test_atspi_children_events_del1); tcase_add_test(tc, elm_genlist_test_atspi_children_events_del2); + + tcase_add_test(tc, elm_genlist_test_tree_expand); }