efl_ui_suite: fix errors in focus tests

Summary:
there have been a few cases where things were just wrong. Like missing
regular nodes in a focus manager that received focus, and stuff like
this. This now fixes all those cases.

Reviewers: zmike, cedric, segfaultxavi

Reviewed By: zmike

Subscribers: #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D9021
This commit is contained in:
Marcel Hollerbach 2019-05-28 12:01:50 -04:00 committed by Mike Blumenkrantz
parent a21974367c
commit 52b2701bc3
7 changed files with 146 additions and 153 deletions

View File

@ -158,6 +158,7 @@ elm_private_eolian_files = \
lib/elementary/efl_ui_focus_parent_provider_standard.eo \
lib/elementary/efl_ui_state_model.eo \
tests/elementary/focus_test.eo \
tests/elementary/focus_manager_test.eo \
tests/elementary/focus_test_sub_main.eo \
lib/elementary/efl_ui_selection_manager.eo \
lib/elementary/efl_datetime_manager.eo \

View File

@ -152,6 +152,7 @@ typedef Eo Efl_Ui_Focus_Manager;
# ifdef EFL_BETA_API_SUPPORT
EAPI void efl_ui_focus_relation_free(Efl_Ui_Focus_Relations *rel);
# endif
# include <efl_ui_focus_manager_window_root.eo.h>
# include <efl_ui_focus_manager_calc.eo.h>
# include <efl_ui_focus_manager_sub.eo.h>
# include <efl_ui_focus_manager_root_focus.eo.h>

View File

@ -2,13 +2,11 @@
EFL_START_TEST(focus_unregister_twice)
{
Efl_Ui_Focus_Object *r1 = efl_add_ref(FOCUS_TEST_CLASS, NULL);
Efl_Ui_Focus_Object *r2 = efl_add_ref(FOCUS_TEST_CLASS, NULL);
Efl_Ui_Focus_Object *r1, *r2;
Efl_Ui_Focus_Manager *m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, r1)
);
Efl_Ui_Focus_Manager *m = focus_test_manager_new(&r1, EINA_TRUE);
r2 = efl_add_ref(FOCUS_TEST_CLASS, NULL);
fail_if(!efl_ui_focus_manager_calc_register(m, r2, r1, NULL));
efl_ui_focus_manager_calc_unregister(m, r1);
@ -16,7 +14,6 @@ EFL_START_TEST(focus_unregister_twice)
efl_ui_focus_manager_calc_unregister(m, r1);
efl_unref(r2);
efl_unref(r1);
efl_unref(m);
}
@ -24,20 +21,22 @@ EFL_END_TEST
EFL_START_TEST(focus_register_twice)
{
Efl_Ui_Focus_Object *r1 = focus_test_object_new("r1", 0, 0, 10, 10);
Efl_Ui_Focus_Object *r2 = focus_test_object_new("r2", 0, 10, 10, 10);
Efl_Ui_Focus_Object *r1, *r2, *r3;
Efl_Ui_Focus_Manager *m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, r1)
);
Efl_Ui_Focus_Manager *m = focus_test_manager_new(&r1, EINA_TRUE);
Efl_Ui_Focus_Manager *m2 = focus_test_manager_new(&r3, EINA_TRUE);
r2 = efl_add_ref(FOCUS_TEST_CLASS, NULL);
fail_if(!efl_ui_focus_manager_calc_register(m, r2, r1, NULL));
//same confguration don't error out
fail_if(!efl_ui_focus_manager_calc_register(m, r2, r1, NULL));
//different confidurations error out
fail_if(efl_ui_focus_manager_calc_register(m, r2, r1, r1));
efl_unref(r1);
EXPECT_ERROR_START;
//different confidurations error out
fail_if(efl_ui_focus_manager_calc_register(m, r2, r1, m2));
EXPECT_ERROR_END;
efl_unref(m);
}
@ -50,7 +49,7 @@ EFL_START_TEST(pos_check)
focus_test_setup_cross(&middle, &south, &north, &east, &west);
m = focus_test_manager_new(&root);
m = focus_test_manager_new(&root, EINA_TRUE);
efl_ui_focus_manager_calc_register(m, middle, root, NULL);
efl_ui_focus_manager_calc_register(m, north, root, NULL);
efl_ui_focus_manager_calc_register(m, south, root, NULL);
@ -122,7 +121,7 @@ EFL_START_TEST(pos_check2)
south_east = focus_test_object_new("south_east", 60, 60, 5, 5);
south_west = focus_test_object_new("south_west", 20, 60, 5, 5);
m = focus_test_manager_new(&root);
m = focus_test_manager_new(&root, EINA_TRUE);
efl_ui_focus_manager_calc_register(m, middle, root, NULL);
efl_ui_focus_manager_calc_register(m, north_east, root, NULL);
efl_ui_focus_manager_calc_register(m, north_west, root, NULL);
@ -156,18 +155,12 @@ EFL_START_TEST(pos_check2)
EFL_END_TEST
EFL_START_TEST(redirect)
{
TEST_OBJ_NEW(root, 0, 0, 20, 20);
TEST_OBJ_NEW(root2, 0, 0, 20, 20);
Efl_Ui_Focus_Object *root, *root2;
TEST_OBJ_NEW(one, 0, 0, 20, 20);
TEST_OBJ_NEW(two, 20, 0, 20, 20);
Efl_Ui_Focus_Manager *m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, root)
);
Efl_Ui_Focus_Manager *m2 = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, root2)
);
Efl_Ui_Focus_Manager *m = focus_test_manager_new(&root, EINA_TRUE);
Efl_Ui_Focus_Manager *m2 = focus_test_manager_new(&root2, EINA_TRUE);
efl_ui_focus_manager_calc_register(m2, one, root2, NULL);
efl_ui_focus_manager_calc_register(m2, two, root2, NULL);
@ -192,7 +185,7 @@ EFL_START_TEST(border_check)
focus_test_setup_cross(&middle, &south, &north, &east, &west);
m = focus_test_manager_new(&root);
m = focus_test_manager_new(&root, EINA_TRUE);
efl_ui_focus_manager_calc_register(m, middle, root, NULL);
efl_ui_focus_manager_calc_register(m, south, root, NULL);
efl_ui_focus_manager_calc_register(m, north, root, NULL);
@ -226,7 +219,7 @@ EFL_START_TEST(logical_chain)
TEST_OBJ_NEW(root, 0, 0, 20, 20);
m = focus_test_manager_new(&lroot);
m = focus_test_manager_new(&lroot, EINA_TRUE);
fail_if(!m);
@ -326,32 +319,31 @@ _check_chain(Efl_Ui_Focus_Manager *m, Efl_Ui_Focus_Object *objects[])
EFL_START_TEST(logical_chain_multi_redirect)
{
Efl_Ui_Focus_Manager *m, *m2, *m3, *m4;
Efl_Ui_Focus_Object *root,*root2, *root3, *root4, *c1_1, *c1_2, *c1_3, *c2, *c3, *c4;
Efl_Ui_Focus_Object *root,*root2, *root3, *root4, *c2, *c3, *c4;
m = focus_test_manager_new(&root, EINA_TRUE);
//Create 3 linked focus managers
m2 = focus_test_manager_new(&root2, EINA_FALSE);
efl_ui_focus_manager_calc_register_logical(m, root2, root, m2);
focus_test_manager_set(root2, m);
m3 = focus_test_manager_new(&root3, EINA_FALSE);
efl_ui_focus_manager_calc_register_logical(m, root3, root, m3);
focus_test_manager_set(root3, m);
m4 = focus_test_manager_new(&root4, EINA_FALSE);
efl_ui_focus_manager_calc_register_logical(m, root4, root, m4);
focus_test_manager_set(root4, m);
m = focus_test_manager_new(&root);
m2 = focus_test_manager_new(&root2);
m3 = focus_test_manager_new(&root3);
m4 = focus_test_manager_new(&root4);
c1_1 = focus_test_object_new("child1", 0, 0, 20, 20);
c1_2 = focus_test_object_new("child2", 0, 0, 20, 20);
c1_3 = focus_test_object_new("child3", 0, 0, 20, 20);
focus_test_manager_set(c1_1, m2);
focus_test_manager_set(c1_2, m3);
focus_test_manager_set(c1_3, m4);
c2 = focus_test_object_new("child1", 0, 0, 20, 20);
c3 = focus_test_object_new("child2", 0, 0, 20, 20);
c4 = focus_test_object_new("child3", 0, 0, 20, 20);
Efl_Ui_Focus_Object *objects[] = {c2, c3, c4, NULL};
efl_ui_focus_manager_calc_register(m, c1_1, root, m2);
efl_ui_focus_manager_calc_register(m, c1_2, root, m3);
efl_ui_focus_manager_calc_register(m, c1_3, root, m4);
efl_ui_focus_manager_calc_register(m2, c2, root2, NULL);
efl_ui_focus_manager_calc_register(m3, c3, root3, NULL);
efl_ui_focus_manager_calc_register(m4, c4, root4, NULL);
Efl_Ui_Focus_Object *objects[] = {c2, c3, c4, NULL};
_check_chain(m, objects);
efl_unref(m2);
@ -364,11 +356,11 @@ EFL_START_TEST(logical_chain_single_redirect)
Efl_Ui_Focus_Manager *m, *m2;
Efl_Ui_Focus_Object *root,*root2, *c1_1, *c1_2, *c1_3, *c2_1, *c2_2, *c2_3;
m = focus_test_manager_new(&root);
m2 = focus_test_manager_new(&root2);
m = focus_test_manager_new(&root, EINA_TRUE);
m2 = focus_test_manager_new(&root2, EINA_FALSE);
focus_test_manager_set(root2, m);
c1_1 = focus_test_object_new("child1", 0, 0, 20, 20);
c1_2 = focus_test_object_new("child2", 0, 0, 20, 20);
focus_test_manager_set(c1_2, m2);
c1_2 = root2;
c1_3 = focus_test_object_new("child3", 0, 0, 20, 20);
c2_1 = focus_test_object_new("child1", 0, 0, 20, 20);
c2_2 = focus_test_object_new("child2", 0, 0, 20, 20);
@ -395,7 +387,9 @@ EFL_START_TEST(finalize_check)
{
Efl_Ui_Focus_Manager *m;
EXPECT_ERROR_START;
m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL);
EXPECT_ERROR_END;
fail_if(m);
efl_unref(m);
@ -405,21 +399,19 @@ EFL_END_TEST
EFL_START_TEST(redirect_param)
{
Efl_Ui_Focus_Manager *m, *m2;
Efl_Ui_Focus_Object *root,*root2;
TEST_OBJ_NEW(root, 0, 20, 20, 20);
TEST_OBJ_NEW(root2, 0, 20, 20, 20);
TEST_OBJ_NEW(child, 0, 20, 20, 20);
TEST_OBJ_NEW(child2, 0, 20, 20, 20);
m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, root)
);
m2 = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, root2)
);
m = focus_test_manager_new(&root, EINA_TRUE);
m2 = focus_test_manager_new(&root2, EINA_FALSE);
efl_ui_focus_manager_calc_register_logical(m, root2, root, m2);
focus_test_manager_set(root2, m);
efl_ui_focus_manager_calc_register(m, child, root, m2);
efl_ui_focus_manager_focus_set(m, child);
efl_ui_focus_manager_calc_register(m2, child2, root2, NULL);
efl_ui_focus_manager_focus_set(m, root2);
ck_assert_ptr_eq(efl_ui_focus_manager_redirect_get(m), m2);
@ -431,29 +423,35 @@ EFL_END_TEST
EFL_START_TEST(invalid_args_check)
{
Efl_Ui_Focus_Manager *m;
Efl_Ui_Focus_Object *root;
TEST_OBJ_NEW(root, 0, 20, 20, 20);
TEST_OBJ_NEW(child, 0, 20, 20, 20);
TEST_OBJ_NEW(child2, 0, 20, 20, 20);
m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, root)
);
m = focus_test_manager_new(&root, EINA_TRUE);
//no child and no parent
EXPECT_ERROR_START;
ck_assert_int_eq(efl_ui_focus_manager_calc_register(m, NULL, NULL, NULL), 0);
EXPECT_ERROR_END;
EXPECT_ERROR_START;
ck_assert_int_eq(efl_ui_focus_manager_calc_register(m, child, NULL, NULL), 0);
EXPECT_ERROR_END;
EXPECT_ERROR_START;
ck_assert_int_eq(efl_ui_focus_manager_calc_register(m, NULL, root, NULL), 0);
EXPECT_ERROR_END;
ck_assert_int_eq(efl_ui_focus_manager_calc_register(m, child, root, NULL), 1);
EXPECT_ERROR_START;
ck_assert_int_eq(efl_ui_focus_manager_calc_update_parent(m, child, NULL), 0);
EXPECT_ERROR_END;
EXPECT_ERROR_START;
ck_assert_int_eq(efl_ui_focus_manager_calc_update_parent(m, NULL, NULL), 0);
EXPECT_ERROR_END;
EXPECT_ERROR_START;
ck_assert_int_eq(efl_ui_focus_manager_calc_update_parent(m, child, child2), 0);
EXPECT_ERROR_END;
ck_assert_int_eq(efl_ui_focus_manager_calc_register(m, child2, root, NULL), 1);
ck_assert_int_eq(efl_ui_focus_manager_calc_update_parent(m, child, child2), 1);
efl_unref(m);
}
EFL_END_TEST
@ -462,15 +460,13 @@ EFL_START_TEST(order_check)
{
Efl_Ui_Focus_Manager *m;
Eina_List *order = NULL;
Efl_Ui_Focus_Object *root;
TEST_OBJ_NEW(root, 0, 20, 20, 20);
TEST_OBJ_NEW(child1, 0, 20, 20, 20);
TEST_OBJ_NEW(child2, 0, 20, 20, 20);
TEST_OBJ_NEW(child3, 0, 20, 20, 20);
m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, root)
);
m = focus_test_manager_new(&root, EINA_TRUE);
//no child and no parent
efl_ui_focus_manager_calc_register(m, child1, root, NULL);
@ -488,8 +484,9 @@ EFL_START_TEST(order_check)
//negativ check
order = eina_list_append(order, child1);
order = eina_list_append(order, child2);
EXPECT_ERROR_START;
ck_assert_int_eq(efl_ui_focus_manager_calc_update_children(m, root, order), 0);
EXPECT_ERROR_END;
efl_unref(m);
}
EFL_END_TEST
@ -497,16 +494,14 @@ EFL_END_TEST
EFL_START_TEST(logical_shift)
{
Efl_Ui_Focus_Manager *m;
Efl_Ui_Focus_Object *root;
TEST_OBJ_NEW(root, 0, 0, 10, 10);
TEST_OBJ_NEW(child, 0, 0, 10, 10);
TEST_OBJ_NEW(sub, 0, 0, 10, 10);
TEST_OBJ_NEW(sub_sub, 0, 0, 10, 10);
TEST_OBJ_NEW(sub_child, 0, 0, 10, 10);
m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, root)
);
m = focus_test_manager_new(&root, EINA_TRUE);
efl_ui_focus_manager_calc_register(m, child, root, NULL);
efl_ui_focus_manager_calc_register_logical(m, sub, root, NULL);
@ -519,9 +514,10 @@ EFL_START_TEST(logical_shift)
efl_ui_focus_manager_focus_set(m, sub);
ck_assert_ptr_eq(efl_ui_focus_manager_focus_get(m), sub_child);
EXPECT_ERROR_START;
efl_ui_focus_manager_focus_set(m, sub_sub);
ck_assert_ptr_eq(efl_ui_focus_manager_focus_get(m), sub_child);
EXPECT_ERROR_END;
efl_unref(m);
}
EFL_END_TEST
@ -529,21 +525,14 @@ EFL_END_TEST
EFL_START_TEST(root_redirect_chain)
{
Efl_Ui_Focus_Manager *m, *m2;
Efl_Ui_Focus_Object *root, *root2;
TEST_OBJ_NEW(root, 0, 20, 20, 20);
TEST_OBJ_NEW(root2, 0, 20, 20, 20);
TEST_OBJ_NEW(child, 0, 20, 20, 20);
m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, root)
);
m = focus_test_manager_new(&root, EINA_TRUE);
m2 = focus_test_manager_new(&root2, EINA_TRUE);
focus_test_manager_set(root2, m);
m2 = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, root2)
);
efl_ui_focus_manager_calc_register(m, root2, root, m2);
efl_ui_focus_manager_calc_register(m2, child, root2, NULL);
efl_ui_focus_manager_focus_set(m2, child);
@ -558,35 +547,30 @@ EFL_END_TEST
EFL_START_TEST(root_redirect_chain_unset)
{
Efl_Ui_Focus_Manager *m, *m2, *m3, *m4;
Efl_Ui_Focus_Object *root, *root2, *root3, *root4;
TEST_OBJ_NEW(root, 0, 20, 20, 20);
TEST_OBJ_NEW(root2, 0, 20, 20, 20);
TEST_OBJ_NEW(child, 0, 20, 20, 20);
TEST_OBJ_NEW(child2, 0, 20, 20, 20);
TEST_OBJ_NEW(child3, 0, 20, 20, 20);
m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, root)
);
m = focus_test_manager_new(&root, EINA_TRUE);
m2 = focus_test_manager_new(&root2, EINA_FALSE);
m3 = focus_test_manager_new(&root3, EINA_FALSE);
m4 = focus_test_manager_new(&root4, EINA_FALSE);
focus_test_manager_set(root2, m);
focus_test_manager_set(root3, m);
focus_test_manager_set(root4, m3);
m2 = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, root2)
);
m3 = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, root2)
);
m4 = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, root2)
);
efl_ui_focus_manager_calc_register(m, root2, root, m2);
efl_ui_focus_manager_calc_register(m, root3, root, m3);
efl_ui_focus_manager_calc_register(m2, child, root2, NULL);
efl_ui_focus_manager_calc_register(m3, child2, root3, NULL);
efl_ui_focus_manager_calc_register(m3, root4, root3, NULL);
efl_ui_focus_manager_calc_register(m4, child3, root4, NULL);
efl_ui_focus_manager_redirect_set(m, m3);
efl_ui_focus_manager_redirect_set(m3, m4);
efl_ui_focus_manager_redirect_set(m4, m2);
efl_ui_focus_manager_calc_register(m, root2, root, m2);
efl_ui_focus_manager_calc_register(m2, child, root2, NULL);
efl_ui_focus_manager_focus_set(m2, child);
ck_assert_ptr_eq(efl_ui_focus_manager_redirect_get(m), m2);
@ -605,16 +589,11 @@ static Efl_Ui_Focus_Manager_Calc*
_recursive_triangle_manager(int recusion_depth, Efl_Ui_Focus_Object **most_right, Efl_Ui_Focus_Object **most_left, Eina_List **managers)
{
Efl_Ui_Focus_Manager *m, *m_child1 = NULL, *m_child3 = NULL;
Efl_Ui_Focus_Object *child1, *child3;
Efl_Ui_Focus_Object *child1, *child3, *root;
TEST_OBJ_NEW(root, 0, 20, 20, 20);
TEST_OBJ_NEW(child2, 0, 20, 20, 20);
m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, root)
);
printf("New manaager %p\n", m);
m = focus_test_manager_new(&root, recusion_depth == 0);
if (recusion_depth < 3)
{
@ -636,20 +615,14 @@ _recursive_triangle_manager(int recusion_depth, Efl_Ui_Focus_Object **most_right
if (most_left)
{
*most_left = child1;
printf("SETTING %p\n", child1);
}
if (most_right)
{
*most_right = child3;
printf("SETTING %p\n", child3);
}
}
printf("Child 1 %p\n", child1);
printf("Child 2 %p\n", child2);
printf("Child 3 %p\n", child3);
efl_ui_focus_manager_calc_register(m, child1, root, m_child1);
efl_ui_focus_manager_calc_register(m, child2, root, NULL);
efl_ui_focus_manager_calc_register(m, child3, root, m_child3);
@ -681,14 +654,12 @@ EFL_START_TEST(first_touch_check)
m = _recursive_triangle_manager(0, &most_right, &most_left, &managers);
efl_ui_focus_manager_setup_on_first_touch(m, EFL_UI_FOCUS_DIRECTION_NEXT, efl_ui_focus_manager_root_get(m));
printf("%p %p\n", most_left, most_right);
ck_assert_ptr_eq(efl_ui_focus_manager_focus_get(_get_highest_redirect(m)), most_left);
efl_ui_focus_manager_reset_history(m);
efl_ui_focus_manager_setup_on_first_touch(m, EFL_UI_FOCUS_DIRECTION_PREVIOUS, efl_ui_focus_manager_root_get(m));
printf("%s\n", efl_name_get(efl_ui_focus_manager_focus_get(_get_highest_redirect(m))));
ck_assert_ptr_eq(efl_ui_focus_manager_focus_get(_get_highest_redirect(m)), most_right);
EINA_LIST_FREE(managers, m)
@ -701,7 +672,7 @@ EFL_START_TEST(test_request_subchild_empty)
Efl_Ui_Focus_Manager *m;
Efl_Ui_Focus_Object *root;
m = focus_test_manager_new(&root);
m = focus_test_manager_new(&root, EINA_TRUE);
ck_assert_ptr_eq(efl_ui_focus_manager_request_subchild(m, root), NULL);
@ -714,7 +685,7 @@ EFL_START_TEST(test_request_subchild_one_element)
Efl_Ui_Focus_Manager *m;
Efl_Ui_Focus_Object *root, *c1;
m = focus_test_manager_new(&root);
m = focus_test_manager_new(&root, EINA_TRUE);
c1 = focus_test_object_new("child1", 0, 0, 20, 20);
efl_ui_focus_manager_calc_register(m, c1, root, NULL);
@ -730,7 +701,7 @@ EFL_START_TEST(test_request_subchild_child_alongside)
Efl_Ui_Focus_Manager *m;
Efl_Ui_Focus_Object *root, *c1, *c2;
m = focus_test_manager_new(&root);
m = focus_test_manager_new(&root, EINA_TRUE);
c1 = focus_test_object_new("child1", 0, 0, 20, 20);
c2 = focus_test_object_new("child2", 0, 0, 20, 20);
efl_ui_focus_manager_calc_register(m, c1, root, NULL);
@ -749,7 +720,7 @@ EFL_START_TEST(test_request_subchild_child_logical_regular)
Efl_Ui_Focus_Manager *m;
Efl_Ui_Focus_Object *root, *c1, *c2;
m = focus_test_manager_new(&root);
m = focus_test_manager_new(&root, EINA_TRUE);
c1 = focus_test_object_new("child1", 0, 0, 20, 20);
c2 = focus_test_object_new("child2", 0, 0, 20, 20);
efl_ui_focus_manager_calc_register_logical(m, c1, root, NULL);
@ -768,7 +739,7 @@ EFL_START_TEST(test_request_subchild_child_regular_regular)
Efl_Ui_Focus_Manager *m;
Efl_Ui_Focus_Object *root, *c1, *c2;
m = focus_test_manager_new(&root);
m = focus_test_manager_new(&root, EINA_TRUE);
c1 = focus_test_object_new("child1", 0, 0, 20, 20);
c2 = focus_test_object_new("child2", 0, 0, 20, 20);
efl_ui_focus_manager_calc_register(m, c1, root, NULL);
@ -787,7 +758,7 @@ EFL_START_TEST(test_unregister_last_focused_no_history)
Efl_Ui_Focus_Manager *m;
Efl_Ui_Focus_Object *root, *c1, *c2, *c3;
m = focus_test_manager_new(&root);
m = focus_test_manager_new(&root, EINA_TRUE);
c1 = focus_test_object_new("child1", 0, 0, 20, 20);
c2 = focus_test_object_new("child2", 0, 0, 20, 20);
c3 = focus_test_object_new("child3", 0, 0, 20, 20);
@ -810,7 +781,7 @@ EFL_START_TEST(test_unregister_last_focused)
Efl_Ui_Focus_Manager *m;
Efl_Ui_Focus_Object *root, *c1, *c2, *c3;
m = focus_test_manager_new(&root);
m = focus_test_manager_new(&root, EINA_TRUE);
c1 = focus_test_object_new("child1", 0, 0, 20, 20);
c2 = focus_test_object_new("child2", 0, 0, 20, 20);
c3 = focus_test_object_new("child3", 0, 0, 20, 20);
@ -835,7 +806,7 @@ EFL_START_TEST(test_unregister_last_focused_no_child)
Efl_Ui_Focus_Manager *m;
Efl_Ui_Focus_Object *root, *c1;
m = focus_test_manager_new(&root);
m = focus_test_manager_new(&root, EINA_TRUE);
c1 = focus_test_object_new("child1", 0, 0, 20, 20);
efl_ui_focus_manager_calc_register(m, c1, root, NULL);
@ -853,7 +824,7 @@ EFL_START_TEST(test_pop_history_element)
Efl_Ui_Focus_Manager *m;
Efl_Ui_Focus_Object *root, *c1, *c2, *c3;
m = focus_test_manager_new(&root);
m = focus_test_manager_new(&root, EINA_TRUE);
c1 = focus_test_object_new("child1", 0, 0, 20, 20);
c2 = focus_test_object_new("child2", 0, 0, 20, 20);
c3 = focus_test_object_new("child3", 0, 0, 20, 20);
@ -902,7 +873,7 @@ EFL_START_TEST(test_request_move)
Efl_Ui_Focus_Manager *m;
Efl_Ui_Focus_Object *root, *c1, *c2, *c3, *c4, *c5, *c6;
m = focus_test_manager_new(&root);
m = focus_test_manager_new(&root, EINA_TRUE);
c1 = focus_test_object_new("child1", 0, 0, 20, 20);
c2 = focus_test_object_new("child2", 0, 0, 20, 20);
c3 = focus_test_object_new("child3", 0, 0, 20, 20);
@ -936,21 +907,14 @@ EFL_END_TEST
EFL_START_TEST(redirect_unregister_entrypoint)
{
Efl_Ui_Focus_Manager *m, *m2;
Efl_Ui_Focus_Object *root, *root2;
TEST_OBJ_NEW(root, 0, 20, 20, 20);
TEST_OBJ_NEW(root2, 0, 20, 20, 20);
TEST_OBJ_NEW(child, 0, 20, 20, 20);
TEST_OBJ_NEW(child2, 0, 20, 20, 20);
TEST_OBJ_NEW(child3, 0, 20, 20, 20);
m = efl_add(EFL_UI_FOCUS_MANAGER_CALC_CLASS, efl_main_loop_get(),
efl_ui_focus_manager_root_set(efl_added, root)
);
m2 = efl_add(EFL_UI_FOCUS_MANAGER_CALC_CLASS, efl_main_loop_get(),
efl_ui_focus_manager_root_set(efl_added, root2)
);
m = focus_test_manager_new(&root, EINA_TRUE);
m2 = focus_test_manager_new(&root2, EINA_TRUE);
efl_ui_focus_manager_calc_register(m2, child3, root2, m2);
@ -963,19 +927,17 @@ EFL_START_TEST(redirect_unregister_entrypoint)
ck_assert_ptr_eq(efl_ui_focus_manager_redirect_get(m), m2);
ck_assert_ptr_eq(efl_ui_focus_manager_focus_get(m), NULL);
efl_del(m);
efl_del(m2);
efl_unref(m);
efl_unref(m2);
}
EFL_END_TEST
static void
_child_focus_changed(void *data, const Efl_Event *ev)
_child_focus_changed(void *data, const Efl_Event *ev EINA_UNUSED)
{
Eina_Bool *flag = data;
*flag = EINA_TRUE;
printf("%s\n", efl_class_name_get(ev->object));
}
EFL_START_TEST(test_events_child_focus)
@ -985,7 +947,7 @@ EFL_START_TEST(test_events_child_focus)
Eina_Bool froot = EINA_FALSE, fc1 = EINA_FALSE, fc2 = EINA_FALSE,
fc3 = EINA_FALSE, fc4 = EINA_FALSE, fc5 = EINA_FALSE, fc6 = EINA_FALSE;
m = focus_test_manager_new(&root);
m = focus_test_manager_new(&root, EINA_TRUE);
c1 = focus_test_object_new("child1", 0, 0, 20, 20);
efl_parent_set(c1, root);
c2 = focus_test_object_new("child2", 0, 0, 20, 20);
@ -1087,7 +1049,7 @@ EFL_START_TEST(viewport_check)
focus_test_setup_cross(&middle, &south, &north, &east, &west);
m = focus_test_manager_new(&root);
m = focus_test_manager_new(&root, EINA_TRUE);
efl_ui_focus_manager_calc_register(m, middle, root, NULL);
efl_ui_focus_manager_calc_register(m, south, root, NULL);
efl_ui_focus_manager_calc_register(m, north, root, NULL);

View File

@ -2,6 +2,8 @@
#include "efl_ui_test_focus_common.h"
//#define DEBUG
#define Q(o,_x,_y,_w,_h) \
do {\
Eina_Rect rect; \
@ -42,15 +44,28 @@ focus_test_setup_cross(Efl_Ui_Focus_Object **middle,
Efl_Ui_Focus_Manager*
focus_test_manager_new(Efl_Ui_Focus_Object **middle)
focus_test_manager_new(Efl_Ui_Focus_Object **middle, Eina_Bool is_root)
{
Efl_Ui_Focus_Object *root;
Efl_Ui_Focus_Manager *m;
root = focus_test_object_new("middle", 40, 40, 20, 20);
if (!is_root)
{
root = focus_test_object_new("middle", 40, 40, 20, 20);
}
else
{
root = efl_add_ref(FOCUS_MANAGER_TEST_CLASS, NULL,
efl_name_set(efl_added, "middle")
);
Q(root, 40,40,20,20);
}
m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
efl_ui_focus_manager_root_set(efl_added, root)
);
if (middle)
*middle = root;
@ -79,7 +94,9 @@ EOLIAN static void
_focus_test_efl_ui_focus_object_focus_set(Eo *obj, Focus_Test_Data *pd, Eina_Bool focus)
{
pd->focus = focus;
#ifdef DEBUG
printf("Object %p now focused\n", obj);
#endif
efl_ui_focus_object_focus_set(efl_super(obj, FOCUS_TEST_CLASS), focus);
}
@ -121,3 +138,9 @@ _focus_test_manager_set(Eo *obj EINA_UNUSED, Focus_Test_Data *pd, Efl_Ui_Focus_M
#include "focus_test.eo.c"
typedef struct {
} Focus_Manager_Test_Data;
#include "focus_manager_test.eo.c"

View File

@ -10,6 +10,7 @@
#include <Efl_Ui.h>
#include "efl_ui_suite.h"
#include "focus_test.eo.h"
#include "focus_manager_test.eo.h"
#define TEST_OBJ_NEW(name, x, y, w, h) \
Efl_Ui_Focus_Object* name; \
@ -24,5 +25,5 @@ void focus_test_setup_cross(Efl_Ui_Focus_Object **middle,
Efl_Ui_Focus_Object **east,
Efl_Ui_Focus_Object **west);
Efl_Ui_Focus_Manager *focus_test_manager_new(Efl_Ui_Focus_Object **middle);
Efl_Ui_Focus_Manager *focus_test_manager_new(Efl_Ui_Focus_Object **middle, Eina_Bool);
#endif

View File

@ -0,0 +1,4 @@
class @beta Focus_Manager_Test extends Focus.Test implements Efl.Ui.Focus.Manager_Window_Root
{
}

View File

@ -1,6 +1,7 @@
priv_eo_files = [
'focus_test.eo',
'focus_test_sub_main.eo'
'focus_test_sub_main.eo',
'focus_manager_test.eo'
]
priv_eo_file_target = []