focus_tests: fix the test suite

this brings back the working testsuite and fixes a bug in the
submanager.
This commit is contained in:
Marcel Hollerbach 2016-12-23 20:11:12 +01:00
parent 3dfc546a2f
commit 800390bcb0
6 changed files with 65 additions and 38 deletions

View File

@ -1346,7 +1346,7 @@ tests_elementary_elm_suite_SOURCES = \
tests/elementary/tests_elementary_elm_suite-elm_test_focus.$(OBJEXT): tests/elementary/focus_test.eo.c tests/elementary/focus_test.eo.h
tests/elementary/tests_elementary_elm_suite-elm_test_focus_sub.$(OBJEXT): tests/elementary/focus_test_sub.eo.c tests/elementary/focus_test_sub.eo.h
tests/elementary/tests_elementary_elm_suite-elm_test_focus_sub.$(OBJEXT): tests/elementary/focus_test_sub_main.eo.c tests/elementary/focus_test_sub_main.eo.h
tests_elementary_elm_suite_CPPFLAGS = \
-DTESTS_BUILD_DIR=\"${top_builddir}/src/tests/elementary\" \

View File

@ -175,33 +175,41 @@ _logical_manager_change(void *data EINA_UNUSED, const Efl_Event *ev)
}
static void
_manager_change(void *data, const Efl_Event *ev)
_flush_manager(Eo *obj, Efl_Ui_Focus_Manager_Sub_Data *pd)
{
MY_DATA(data, pd);
Efl_Ui_Focus_Manager *manager;
Efl_Ui_Focus_Object *logical;
Efl_Ui_Focus_Object *logical, *real_object;
Efl_Ui_Focus_User *b;
Eina_List *n;
logical = efl_ui_focus_user_parent_get(ev->object);
manager = efl_ui_focus_user_manager_get(ev->object);
real_object = efl_parent_get(obj);
logical = efl_ui_focus_user_parent_get(real_object);
manager = efl_ui_focus_user_manager_get(real_object);
//unregister from the old
efl_event_callback_array_del(pd->manager, parent_manager(), data);
efl_event_callback_array_add(manager, parent_manager(), data);
efl_event_callback_array_del(pd->manager, parent_manager(), obj);
efl_event_callback_array_add(manager, parent_manager(), obj);
EINA_LIST_FOREACH(pd->current_border , n, b)
{
if (b == ev->object) continue;
if (b == real_object) continue;
_unregister(data, manager, b);
_register(data, manager, b, logical);
_unregister(obj, manager, b);
_register(obj, manager, b, logical);
}
//unregister the old manager, use the new
pd->manager = manager;
}
static void
_manager_change(void *data, const Efl_Event *ev EINA_UNUSED)
{
MY_DATA(data, pd);
_flush_manager(data, pd);
}
EFL_CALLBACKS_ARRAY_DEFINE(self_manager,
{EFL_UI_FOCUS_MANAGER_EVENT_COORDS_DIRTY, _self_manager_dirty},
{EFL_UI_FOCUS_USER_EVENT_LOGICAL_CHANGED, _logical_manager_change},
@ -223,6 +231,8 @@ _efl_ui_focus_manager_sub_efl_object_parent_set(Eo *obj, Efl_Ui_Focus_Manager_Su
new_parent = efl_parent_get(obj);
_efl_ui_focus_manager_redirect_events_add(obj, new_parent);
efl_event_callback_array_add(new_parent, self_manager(), obj);
_flush_manager(obj, pd);
}
EOLIAN static Efl_Object*

View File

@ -93,6 +93,7 @@ START_TEST(redirect)
elm_init(1, NULL);
TEST_OBJ_NEW(root, 0, 0, 20, 20);
TEST_OBJ_NEW(root2, 0, 0, 20, 20);
TEST_OBJ_NEW(one, 0, 0, 20, 20);
TEST_OBJ_NEW(two, 20, 0, 20, 20);
@ -101,10 +102,11 @@ START_TEST(redirect)
);
Efl_Ui_Focus_Manager *m2 = efl_add(EFL_UI_FOCUS_MANAGER_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, one)
efl_ui_focus_manager_root_set(efl_added, root2)
);
efl_ui_focus_manager_register(m2, two, one, NULL);
efl_ui_focus_manager_register(m2, one, root2, NULL);
efl_ui_focus_manager_register(m2, two, root2, NULL);
efl_ui_focus_manager_redirect_set(m, m2);
efl_ui_focus_manager_focus(m2, one);
@ -205,7 +207,7 @@ START_TEST(logical_chain)
Efl_Object *logical_chain[] = {
child1, subchild11, subchild12, subchild13,
child2, subchild21, subchild22, subchild23, root, NULL
child2, subchild21, subchild22, subchild23, NULL
};
for (i = 0; logical_chain[i]; ++i)
{
@ -319,7 +321,6 @@ START_TEST(order_check)
order = eina_list_append(order, child1);
ck_assert_int_eq(efl_ui_focus_manager_update_children(m, root, order), 1);
eina_list_free(order);
order = NULL;
//negativ check

View File

@ -1,23 +1,30 @@
#include "elm_test_focus_common.h"
#include "focus_test_sub.eo.h"
#include "focus_test_sub_main.eo.h"
typedef struct {
} Focus_Test_Sub_Data;
} Focus_Test_Sub_Main_Data;
EOLIAN static void
_focus_test_sub_efl_ui_focus_object_geometry_get(Eo *obj EINA_UNUSED, Focus_Test_Sub_Data *pd EINA_UNUSED, Eina_Rectangle *rect EINA_UNUSED)
_focus_test_sub_main_efl_ui_focus_object_geometry_get(Eo *obj EINA_UNUSED, Focus_Test_Sub_Main_Data *pd EINA_UNUSED, Eina_Rectangle *rect)
{
rect->y = rect->x = 0;
rect->w = rect->h = 20;
EINA_RECTANGLE_SET(rect, 0, 0, 20, 20);
}
EOLIAN static Eina_Bool
_focus_test_sub_efl_ui_focus_object_focus_get(Eo *obj EINA_UNUSED, Focus_Test_Sub_Data *pd EINA_UNUSED)
EOLIAN static Efl_Ui_Focus_Manager*
_focus_test_sub_main_efl_ui_focus_user_manager_get(Eo *obj, Focus_Test_Sub_Main_Data *pd EINA_UNUSED)
{
return EINA_FALSE;
return efl_key_data_get(obj, "__user_manager");
}
EOLIAN static Efl_Ui_Focus_Object*
_focus_test_sub_main_efl_ui_focus_user_parent_get(Eo *obj, Focus_Test_Sub_Main_Data *pd EINA_UNUSED)
{
return efl_key_data_get(obj, "__user_parent");
}
static Eina_List *registered;
static Eina_List *unregistered;
@ -54,7 +61,7 @@ _set_equal(Eina_List *a, Eina_List *b)
return EINA_TRUE;
}
#include "focus_test_sub.eo.c"
#include "focus_test_sub_main.eo.c"
static void
_setup(Efl_Ui_Focus_Manager **m, Efl_Ui_Focus_Manager_Sub **sub, Efl_Ui_Focus_Object **r)
@ -78,13 +85,19 @@ _setup(Efl_Ui_Focus_Manager **m, Efl_Ui_Focus_Manager_Sub **sub, Efl_Ui_Focus_Ob
efl_object_override(manager, &manager_tracker);
Efl_Ui_Focus_Manager_Sub *subm = efl_add(FOCUS_TEST_SUB_CLASS, manager,
Focus_Test_Sub_Main *main = efl_add(FOCUS_TEST_SUB_MAIN_CLASS, NULL);
efl_key_data_set(main, "__user_manager", manager);
efl_key_data_set(main, "__user_parent", root_manager);
Efl_Ui_Focus_Manager_Sub *subm = efl_add(EFL_UI_FOCUS_MANAGER_SUB_CLASS, main,
efl_ui_focus_manager_root_set(efl_added, root)
);
efl_event_callback_call(manager, EFL_UI_FOCUS_MANAGER_EVENT_PRE_FLUSH, NULL);
efl_composite_attach(main, subm);
efl_ui_focus_manager_register_logical(manager, main, root_manager, subm);
*sub = subm;
*sub = main;
*m = manager;
*r = root;
}
@ -102,7 +115,7 @@ START_TEST(correct_register)
TEST_OBJ_NEW(child2, 10, 0, 10, 10);
TEST_OBJ_NEW(child3, 0, 10, 10, 10);
set1 = eina_list_append(set1, sub);
//set1 = eina_list_append(set1, sub);
//set1 = eina_list_append(set1, root);
set1 = eina_list_append(set1, child1);
set1 = eina_list_append(set1, child2);
@ -117,12 +130,14 @@ START_TEST(correct_register)
ck_assert_ptr_eq(unregistered, NULL);
fail_if(!_set_equal(registered, set1));
efl_del(sub);
efl_del(manager);
efl_del(root);
efl_ui_focus_manager_unregister(sub, child1);
efl_ui_focus_manager_unregister(sub, child2);
efl_ui_focus_manager_unregister(sub, child3);
efl_del(child1);
efl_del(child2);
efl_del(child3);
efl_del(sub);
efl_del(manager);
elm_shutdown();
}
END_TEST

View File

@ -1,6 +0,0 @@
class Focus.Test.Sub(Efl.Ui.Focus.Manager.Sub) {
implements {
Efl.Ui.Focus.Object.geometry_get;
Efl.Ui.Focus.Object.focus.get;
}
}

View File

@ -0,0 +1,7 @@
class Focus.Test.Sub.Main(Efl.Object, Efl.Ui.Focus.User, Efl.Ui.Focus.Object, Efl.Ui.Focus.Manager) {
implements {
Efl.Ui.Focus.User.manager.get;
Efl.Ui.Focus.User.parent.get;
Efl.Ui.Focus.Object.geometry_get;
}
}