From 39eb7acec63ec2366565e3526cd23862e7e684b1 Mon Sep 17 00:00:00 2001 From: Lukasz Stanislawski Date: Wed, 28 May 2014 17:12:34 +0900 Subject: [PATCH] atspi: add accessible default relations and attributes Summary: Tests added for accessibile interface Differential Revision: https://phab.enlightenment.org/D900 --- .../elementary/src/lib/elm_atspi_app_object.c | 29 +- .../src/lib/elm_atspi_app_object.eo | 4 +- legacy/elementary/src/lib/elm_atspi_bridge.c | 29 +- .../src/lib/elm_interface_atspi_accessible.c | 21 +- .../src/lib/elm_interface_atspi_accessible.eo | 16 +- .../src/lib/elm_interface_atspi_accessible.h | 46 ++ .../src/lib/elm_interface_atspi_component.c | 4 +- .../src/lib/elm_interface_atspi_widget.c | 50 +++ .../src/lib/elm_interface_atspi_widget.eo | 2 + legacy/elementary/src/tests/Makefile.am | 1 + legacy/elementary/src/tests/elm_suite.c | 1 + legacy/elementary/src/tests/elm_suite.h | 1 + legacy/elementary/src/tests/elm_test_atspi.c | 419 ++++++++++++++++++ 13 files changed, 607 insertions(+), 16 deletions(-) create mode 100644 legacy/elementary/src/tests/elm_test_atspi.c diff --git a/legacy/elementary/src/lib/elm_atspi_app_object.c b/legacy/elementary/src/lib/elm_atspi_app_object.c index 0f9d5e7185..60a4485879 100644 --- a/legacy/elementary/src/lib/elm_atspi_app_object.c +++ b/legacy/elementary/src/lib/elm_atspi_app_object.c @@ -16,8 +16,21 @@ extern Eina_List *_elm_win_list; static Eo *_atspi_root; static int _init; +typedef struct _Elm_Atspi_App_Object_Data Elm_Atspi_App_Object_Data; + +struct _Elm_Atspi_App_Object_Data +{ + const char *descr; +}; + +EOLIAN static void +_elm_atspi_app_object_eo_base_destructor(Eo *obj EINA_UNUSED, Elm_Atspi_App_Object_Data *_pd) +{ + if (_pd->descr) eina_stringshare_del(_pd->descr); +} + EOLIAN static Eina_List* -_elm_atspi_app_object_elm_interface_atspi_accessible_children_get(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED) +_elm_atspi_app_object_elm_interface_atspi_accessible_children_get(Eo *obj EINA_UNUSED, Elm_Atspi_App_Object_Data *_pd EINA_UNUSED) { Eina_List *l, *accs = NULL; Evas_Object *win; @@ -33,19 +46,25 @@ _elm_atspi_app_object_elm_interface_atspi_accessible_children_get(Eo *obj EINA_U } EOLIAN static const char* -_elm_atspi_app_object_elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED) +_elm_atspi_app_object_elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, Elm_Atspi_App_Object_Data *_pd EINA_UNUSED) { return elm_app_name_get(); } EOLIAN static const char* -_elm_atspi_app_object_elm_interface_atspi_accessible_description_get(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED) +_elm_atspi_app_object_elm_interface_atspi_accessible_description_get(Eo *obj EINA_UNUSED, Elm_Atspi_App_Object_Data *_pd) { - return NULL; + return _pd->descr; +} + +EOLIAN static void +_elm_atspi_app_object_elm_interface_atspi_accessible_description_set(Eo *obj EINA_UNUSED, Elm_Atspi_App_Object_Data *_pd EINA_UNUSED, const char *descr) +{ + eina_stringshare_replace(&_pd->descr, descr); } EOLIAN static Elm_Atspi_Role -_elm_atspi_app_object_elm_interface_atspi_accessible_role_get(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED) +_elm_atspi_app_object_elm_interface_atspi_accessible_role_get(Eo *obj EINA_UNUSED, Elm_Atspi_App_Object_Data *_pd EINA_UNUSED) { return ELM_ATSPI_ROLE_APPLICATION; } diff --git a/legacy/elementary/src/lib/elm_atspi_app_object.eo b/legacy/elementary/src/lib/elm_atspi_app_object.eo index 0cdfccdb7a..8a9b12270c 100644 --- a/legacy/elementary/src/lib/elm_atspi_app_object.eo +++ b/legacy/elementary/src/lib/elm_atspi_app_object.eo @@ -1,9 +1,11 @@ class Elm_Atspi_App_Object (Eo_Base, Elm_Interface_Atspi_Accessible) { - data: null; + data: Elm_Atspi_App_Object_Data; implements { + Eo_Base::destructor; Elm_Interface_Atspi_Accessible::name::get; Elm_Interface_Atspi_Accessible::description::get; + Elm_Interface_Atspi_Accessible::description::set; Elm_Interface_Atspi_Accessible::role::get; Elm_Interface_Atspi_Accessible::children::get; } diff --git a/legacy/elementary/src/lib/elm_atspi_bridge.c b/legacy/elementary/src/lib/elm_atspi_bridge.c index a488c62834..157041a9a9 100644 --- a/legacy/elementary/src/lib/elm_atspi_bridge.c +++ b/legacy/elementary/src/lib/elm_atspi_bridge.c @@ -435,6 +435,33 @@ _accessible_get_application(const Eldbus_Service_Interface *iface EINA_UNUSED, c return ret; } +static Eldbus_Message * +_accessible_attributes_get(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg) +{ + Eina_List *attrs, *l; + Elm_Atspi_Attribute *attr; + Eldbus_Message_Iter *iter, *iter_array; + + Eldbus_Message *ret = eldbus_message_method_return_new(msg); + EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL); + + const char *obj_path = eldbus_service_object_path_get(iface); + Eo *obj = _access_object_from_path(obj_path); + + eo_do(obj, attrs = elm_interface_atspi_accessible_attributes_get()); + + iter = eldbus_message_iter_get(ret); + iter_array = eldbus_message_iter_container_new(iter, 'a', "ss"); + + EINA_LIST_FOREACH(attrs, l, attr) + eldbus_message_iter_arguments_get(iter_array, "ss", attr->key, attr->value); + + eldbus_message_iter_container_close(iter, iter_array); + elm_atspi_attributes_list_free(attrs); + + return ret; +} + static uint64_t _elm_atspi_state_set_to_atspi_state_set(Elm_Atspi_State_Set states) { @@ -552,7 +579,7 @@ static const Eldbus_Method accessible_methods[] = { { "GetLocalizedRoleName", NULL, ELDBUS_ARGS({"s", "LocalizedName"}), _accessible_get_localized_role_name, 0}, { "GetState", NULL, ELDBUS_ARGS({"au", NULL}), _accessible_get_state, 0}, { "GetApplication", NULL, ELDBUS_ARGS({"(so)", NULL}), _accessible_get_application, 0}, - //{ "GetAttributes", NULL, ELDBUS_ARGS({"a{ss}", NULL}), NULL, 0}, + { "GetAttributes", NULL, ELDBUS_ARGS({"a{ss}", NULL}), _accessible_attributes_get, 0}, { NULL, NULL, NULL, NULL, 0 } }; diff --git a/legacy/elementary/src/lib/elm_interface_atspi_accessible.c b/legacy/elementary/src/lib/elm_interface_atspi_accessible.c index 1670b4ca55..9a5fe75e2e 100644 --- a/legacy/elementary/src/lib/elm_interface_atspi_accessible.c +++ b/legacy/elementary/src/lib/elm_interface_atspi_accessible.c @@ -166,11 +166,12 @@ _elm_interface_atspi_accessible_parent_set(Eo *obj, void *priv EINA_UNUSED, Eo * eo_class_name_get(eo_class_get(obj))); } -EOLIAN void +EOLIAN Eina_List* _elm_interface_atspi_accessible_attributes_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED) { WRN("The %s object does not implement the \"accessible_attributes_set\" function.", eo_class_name_get(eo_class_get(obj))); + return NULL; } EOLIAN static Elm_Atspi_Role @@ -264,4 +265,22 @@ _elm_interface_atspi_accessible_state_set_get(Eo *obj EINA_UNUSED, void *pd EINA return ret; } +EOLIAN Eina_List* +_elm_interface_atspi_accessible_relation_set_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED) +{ + WRN("The %s object does not implement the \"accessible_relation_set\" function.", + eo_class_name_get(eo_class_get(obj))); + return NULL; +} + +void elm_atspi_attributes_list_free(Eina_List *list) +{ + Elm_Atspi_Attribute *attr; + EINA_LIST_FREE(list, attr) + { + eina_stringshare_del(attr->key); + eina_stringshare_del(attr->value); + } +} + #include "elm_interface_atspi_accessible.eo.c" diff --git a/legacy/elementary/src/lib/elm_interface_atspi_accessible.eo b/legacy/elementary/src/lib/elm_interface_atspi_accessible.eo index 2b0f0340d7..6f9b2e1973 100644 --- a/legacy/elementary/src/lib/elm_interface_atspi_accessible.eo +++ b/legacy/elementary/src/lib/elm_interface_atspi_accessible.eo @@ -24,7 +24,11 @@ mixin Elm_Interface_Atspi_Accessible () } protected relation_set { get { - /*@ Gets an string describing ATSPI widget role name. */ + /*@ Gets an string describing ATSPI widget role name. Lists and + * elements Should be free by a user. */ + } + values { + Eina_List *relations; } } protected role { @@ -56,8 +60,11 @@ mixin Elm_Interface_Atspi_Accessible () } protected attributes { get { - /*@ Gets human-readable string indentifying widget accessibility - * role. */ + /*@ Gets key-value pairs indentifying widget extra + * attributes. Must be free by a user. */ + } + values { + Eina_List *attributes; } } protected index_in_parent { @@ -99,9 +106,6 @@ mixin Elm_Interface_Atspi_Accessible () } } } - implements { - virtual::relation_set::get; - } events { property,changed (const char *); children,changed (Elm_Atspi_Event_Children_Changed_Data); diff --git a/legacy/elementary/src/lib/elm_interface_atspi_accessible.h b/legacy/elementary/src/lib/elm_interface_atspi_accessible.h index e0c01ff2c4..88c38560fe 100644 --- a/legacy/elementary/src/lib/elm_interface_atspi_accessible.h +++ b/legacy/elementary/src/lib/elm_interface_atspi_accessible.h @@ -186,6 +186,31 @@ enum _Elm_Atspi_State_Type ELM_ATSPI_STATE_LAST_DEFINED, }; +typedef enum _Elm_Atspi_Relation_Type Elm_Atspi_Relation_Type; + +enum _Elm_Atspi_Relation_Type { + ELM_ATSPI_RELATION_NULL, + ELM_ATSPI_RELATION_LABEL_FOR, + ELM_ATSPI_RELATION_LABELLED_BY, + ELM_ATSPI_RELATION_CONTROLLER_FOR, + ELM_ATSPI_RELATION_CONTROLLED_BY, + ELM_ATSPI_RELATION_MEMBER_OF, + ELM_ATSPI_RELATION_TOOLTIP_FOR, + ELM_ATSPI_RELATION_NODE_CHILD_OF, + ELM_ATSPI_RELATION_NODE_PARENT_OF, + ELM_ATSPI_RELATION_EXTENDED, + ELM_ATSPI_RELATION_FLOWS_TO, + ELM_ATSPI_RELATION_FLOWS_FROM, + ELM_ATSPI_RELATION_SUBWINDOW_OF, + ELM_ATSPI_RELATION_EMBEDS, + ELM_ATSPI_RELATION_EMBEDDED_BY, + ELM_ATSPI_RELATION_POPUP_FOR, + ELM_ATSPI_RELATION_PARENT_WINDOW_OF, + ELM_ATSPI_RELATION_DESCRIPTION_FOR, + ELM_ATSPI_RELATION_DESCRIBED_BY, + ELM_ATSPI_RELATION_LAST_DEFINED, +}; + typedef struct _Elm_Atspi_Event_State_Changed_Data Elm_Atspi_Event_State_Changed_Data; @@ -203,6 +228,27 @@ struct _Elm_Atspi_Event_Children_Changed_Data Eo *child; }; +typedef struct _Elm_Atspi_Attribute Elm_Atspi_Attribute; + +struct _Elm_Atspi_Attribute +{ + const char *key; + const char *value; +}; + +typedef struct _Elm_Atspi_Relation Elm_Atspi_Relation; + +struct _Elm_Atspi_Relation +{ + Elm_Atspi_Relation_Type type; + const Eo *obj; +}; + +/** + * Free Elm_Atspi_Attributes_List + */ +void elm_atspi_attributes_list_free(Eina_List *list); + /** * Emits ATSPI 'StateChanged' dbus signal. */ diff --git a/legacy/elementary/src/lib/elm_interface_atspi_component.c b/legacy/elementary/src/lib/elm_interface_atspi_component.c index 6783ede5d1..8817e012d8 100644 --- a/legacy/elementary/src/lib/elm_interface_atspi_component.c +++ b/legacy/elementary/src/lib/elm_interface_atspi_component.c @@ -34,11 +34,11 @@ _elm_interface_atspi_component_position_set(Eo *obj EINA_UNUSED, void *_pd EINA_ EOLIAN static Eina_Bool _elm_interface_atspi_component_size_set(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, int w, int h) { - Eina_Bool ret = EINA_FALSE; + Eina_Bool ret; int c_x = 0, c_y = 0; eo_do(obj, elm_interface_atspi_component_extents_get(EINA_FALSE, &c_x, &c_y, NULL, NULL)); - eo_do(obj, elm_interface_atspi_component_extents_set(EINA_FALSE, c_x, c_y, w, h)); + eo_do(obj, ret = elm_interface_atspi_component_extents_set(EINA_FALSE, c_x, c_y, w, h)); return ret; } diff --git a/legacy/elementary/src/lib/elm_interface_atspi_widget.c b/legacy/elementary/src/lib/elm_interface_atspi_widget.c index 5f2c3eef75..a8a814383a 100644 --- a/legacy/elementary/src/lib/elm_interface_atspi_widget.c +++ b/legacy/elementary/src/lib/elm_interface_atspi_widget.c @@ -155,4 +155,54 @@ _elm_interface_atspi_widget_elm_interface_atspi_accessible_state_set_get(Eo *obj return states; } +EOLIAN static Eina_List* +_elm_interface_atspi_widget_elm_interface_atspi_accessible_attributes_get(Eo *obj, Elm_Interface_Atspi_Widget_Data *pd EINA_UNUSED) +{ + Eina_List *ret = NULL; + Elm_Atspi_Attribute *attr = calloc(1, sizeof(Elm_Atspi_Attribute)); + if (!attr) return NULL; + + attr->key = eina_stringshare_add("type"); + attr->value = eina_stringshare_add(evas_object_type_get(obj)); + + ret = eina_list_append(ret, attr); + return ret; +} + +static Elm_Atspi_Relation* +_relation_new(Elm_Atspi_Relation_Type type, Eo *obj) +{ + Elm_Atspi_Relation *rel = calloc(1, sizeof(Elm_Atspi_Relation)); + if (!rel) return NULL; + + rel->type = type; + rel->obj = obj; + + return rel; +} + +EOLIAN static Eina_List* +_elm_interface_atspi_widget_elm_interface_atspi_accessible_relation_set_get(Eo *obj, Elm_Interface_Atspi_Widget_Data *pd EINA_UNUSED) +{ + Eina_List *list = NULL; + Elm_Atspi_Relation *rel; + Evas_Object *rel_obj; + + rel_obj = elm_object_focus_next_object_get(obj, ELM_FOCUS_NEXT); + if (eo_isa(rel_obj, ELM_INTERFACE_ATSPI_ACCESSIBLE_CLASS)) + { + rel = _relation_new(ELM_ATSPI_RELATION_FLOWS_TO, rel_obj); + list = eina_list_append(list, rel); + } + + rel_obj = elm_object_focus_next_object_get(obj, ELM_FOCUS_PREVIOUS); + if (eo_isa(rel_obj, ELM_INTERFACE_ATSPI_ACCESSIBLE_CLASS)) + { + rel = _relation_new(ELM_ATSPI_RELATION_FLOWS_FROM, rel_obj); + list = eina_list_append(list, rel); + } + + return list; +} + #include "elm_interface_atspi_widget.eo.c" diff --git a/legacy/elementary/src/lib/elm_interface_atspi_widget.eo b/legacy/elementary/src/lib/elm_interface_atspi_widget.eo index d5b0e6c677..2d2294a189 100644 --- a/legacy/elementary/src/lib/elm_interface_atspi_widget.eo +++ b/legacy/elementary/src/lib/elm_interface_atspi_widget.eo @@ -12,6 +12,8 @@ mixin Elm_Interface_Atspi_Widget (Elm_Interface_Atspi_Accessible, Elm_Interface_ Elm_Interface_Atspi_Accessible::role::set; Elm_Interface_Atspi_Accessible::state_set::get; Elm_Interface_Atspi_Accessible::children::get; + Elm_Interface_Atspi_Accessible::attributes::get; + Elm_Interface_Atspi_Accessible::relation_set::get; Elm_Interface_Atspi_Component::focus_grab; } } diff --git a/legacy/elementary/src/tests/Makefile.am b/legacy/elementary/src/tests/Makefile.am index 200ada7fa8..4fbbd68da5 100644 --- a/legacy/elementary/src/tests/Makefile.am +++ b/legacy/elementary/src/tests/Makefile.am @@ -6,6 +6,7 @@ TESTS = elm_suite check_PROGRAMS = elm_suite elm_suite_SOURCES = \ elm_suite.c \ + elm_test_atspi.c \ elm_test_check.c \ elm_test_colorselector.c \ elm_test_entry.c \ diff --git a/legacy/elementary/src/tests/elm_suite.c b/legacy/elementary/src/tests/elm_suite.c index f5868335b2..6072ebbd67 100644 --- a/legacy/elementary/src/tests/elm_suite.c +++ b/legacy/elementary/src/tests/elm_suite.c @@ -18,6 +18,7 @@ static const Elementary_Test_Case etc[] = { { "elm_check", elm_test_check }, { "elm_colorselector", elm_test_colorselector }, { "elm_entry", elm_test_entry}, + { "elm_atspi", elm_test_atspi}, { NULL, NULL } }; diff --git a/legacy/elementary/src/tests/elm_suite.h b/legacy/elementary/src/tests/elm_suite.h index bac0a5692d..30c3a929bc 100644 --- a/legacy/elementary/src/tests/elm_suite.h +++ b/legacy/elementary/src/tests/elm_suite.h @@ -7,5 +7,6 @@ void elm_test_init(TCase *tc); void elm_test_check(TCase *tc); void elm_test_colorselector(TCase *tc); void elm_test_entry(TCase *tc); +void elm_test_atspi(TCase *tc); #endif /* _ELM_SUITE_H */ diff --git a/legacy/elementary/src/tests/elm_test_atspi.c b/legacy/elementary/src/tests/elm_test_atspi.c new file mode 100644 index 0000000000..7ff6712bc5 --- /dev/null +++ b/legacy/elementary/src/tests/elm_test_atspi.c @@ -0,0 +1,419 @@ +#ifdef HAVE_CONFIG_H +# include "elementary_config.h" +#endif + +#define ELM_INTERNAL_API_ARGESFSDFEFC + +#include +#include "elm_priv.h" +#include "elm_suite.h" + +#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED +#include "elm_interface_atspi_accessible.h" +#include "elm_interface_atspi_accessible.eo.h" + +#define ELM_INTERFACE_ATSPI_COMPONENT_PROTECTED +#include "elm_interface_atspi_component.eo.h" + +static Evas_Object *g_win, *g_btn, *g_bg; + +Eo* generate_app(void) +{ + g_win = elm_win_add(NULL, "Title", ELM_WIN_BASIC); + evas_object_geometry_set(g_win, 100, 100, 100, 100); + + g_bg = elm_bg_add(g_win); + + g_btn = elm_button_add(g_win); + + evas_object_show(g_btn); + evas_object_show(g_bg); + evas_object_show(g_win); + + Eo *obj = NULL; + + _elm_atspi_init(); + + obj = _elm_atspi_root_get(); + + return obj; +} + +START_TEST (elm_atspi_root_get) +{ + elm_init(0, NULL); + + Eo* obj = generate_app(); + + ck_assert(obj != NULL); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_atspi_name_get) +{ + elm_init(0, NULL); + + Eo* obj = generate_app(); + + const char *ret = NULL; + + elm_app_name_set("Test name"); + + eo_do(obj, ret = elm_interface_atspi_accessible_name_get()); + + ck_assert_str_eq(ret, "Test name"); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_atspi_role_get) +{ + elm_init(0, NULL); + + Eo *obj = generate_app(); + + Elm_Atspi_Role role; + + eo_do(obj, role = elm_interface_atspi_accessible_role_get()); + + ck_assert(role == ELM_ATSPI_ROLE_APPLICATION); + + elm_shutdown(); +} +END_TEST + + +START_TEST (elm_atspi_role_name_get) +{ + elm_init(0, NULL); + + Eo *obj = generate_app(); + + const char *ret = NULL; + + eo_do(obj, ret = elm_interface_atspi_accessible_role_name_get()); + + ck_assert(ret != NULL); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_atspi_localized_role_name_get) +{ + elm_init(0, NULL); + + Eo *obj = generate_app(); + + const char *ret = NULL; + + eo_do(obj, ret = elm_interface_atspi_accessible_localized_role_name_get()); + + ck_assert(ret != NULL); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_atspi_description_set) +{ + elm_init(0, NULL); + + Eo *obj = generate_app(); + + const char *ret = NULL; + + const char *desc = "Test description"; + + eo_do(obj, ret = elm_interface_atspi_accessible_description_get()); + + ck_assert(ret == NULL); + + eo_do(obj, elm_interface_atspi_accessible_description_set(desc)); + + eo_do(obj, ret = elm_interface_atspi_accessible_description_get()); + + ck_assert(ret != NULL); + ck_assert_str_eq(ret, "Test description"); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_atspi_children_and_parent) +{ + elm_init(0, NULL); + + Eo *root = generate_app(); + + Eina_List *child_list = NULL; + + eo_do(root, child_list = elm_interface_atspi_accessible_children_get()); + + //eo_do(eina_list_nth(child_list, 0), bg_child_list = elm_interface_atspi_accessible_children_get()); + + ck_assert(eina_list_count(child_list) == 1); + + Eo *win = NULL; + + win = eina_list_nth(child_list, 0); + + ck_assert(win != NULL); + ck_assert(win == g_win); + + Eo *win_parent = NULL; + + eo_do(win, win_parent = elm_interface_atspi_accessible_parent_get()); + + ck_assert(root == win_parent); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_atspi_component_position) +{ + Eina_List *child_list = NULL; + elm_init(0, NULL); + + Eo *root = generate_app(); + + Eo *win = NULL; + + eo_do(root, child_list = elm_interface_atspi_accessible_children_get()); + + win = eina_list_nth(child_list, 0); + + Eina_Bool ret = EINA_FALSE; + + eo_do(win, ret = elm_interface_atspi_component_position_set(EINA_TRUE, 100, 100)); + + ck_assert(ret == EINA_TRUE); + + int x, y; + + eo_do(win, elm_interface_atspi_component_position_get(EINA_TRUE, &x, &y)); + + ck_assert((x == 100) && (y == 100)); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_atspi_component_size) +{ + Eina_List *child_list = NULL; + elm_init(0, NULL); + + Eo *root = generate_app(); + + Eo *win = NULL; + + eo_do(root, child_list = elm_interface_atspi_accessible_children_get()); + + win = eina_list_nth(child_list, 0); + + Eina_Bool ret = EINA_FALSE; + + eo_do(win, ret = elm_interface_atspi_component_size_set(100, 100)); + + ck_assert(ret == EINA_TRUE); + + int w, h; + + eo_do(win, elm_interface_atspi_component_size_get(&w, &h)); + + ck_assert((w == 100) && (h == 100)); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_atspi_component_focus) +{ + Eina_List *child_list = NULL; + elm_init(0, NULL); + + Eo *root = generate_app(); + + Eo *win = NULL; + + eo_do(root, child_list = elm_interface_atspi_accessible_children_get()); + + win = eina_list_nth(child_list, 0); + + Eina_Bool ret = EINA_FALSE; + + eo_do(win, ret = elm_interface_atspi_component_focus_grab()); + + ck_assert(ret == EINA_TRUE); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_test_atspi_object_children_get) +{ + elm_init(0, NULL); + + Eo *root = _elm_atspi_root_get(); + + Eina_List *children = NULL; + eo_do(root, children = elm_interface_atspi_accessible_children_get()); + + ck_assert(children == NULL); + + eina_list_free(children); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_test_atspi_obj_index_in_parent_get) +{ + elm_init(0, NULL); + + Eo *root = generate_app(); + + int ret = 0; + + Eina_List *children = NULL; + eo_do(root, children = elm_interface_atspi_accessible_children_get()); + + Evas_Object *win = eina_list_nth(children, 0); + ck_assert(win != NULL); + + eo_do(win, ret = elm_interface_atspi_accessible_index_in_parent_get()); + + ck_assert(ret == 0); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_atspi_component_z_order) +{ + elm_init(0, NULL); + + Eo *root = generate_app(); + + Eo *win = NULL; + + Eina_List *children; + eo_do(root, children = elm_interface_atspi_accessible_children_get()); + + win = eina_list_nth(children, 0); + int z_order = -1; + + eo_do(win, z_order = elm_interface_atspi_component_z_order_get()); + + ck_assert(z_order != -1); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_atspi_component_layer) +{ + elm_init(0, NULL); + + Eo *root = generate_app(); + + Eo *win = NULL; + + Eina_List *children; + eo_do(root, children = elm_interface_atspi_accessible_children_get()); + + win = eina_list_nth(children, 0); + + int layer = -1; + + eo_do(win, layer = elm_interface_atspi_component_layer_get()); + + ck_assert(layer != -1); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_atspi_component_alpha) +{ + elm_init(0, NULL); + + Eo *root = generate_app(); + + Eo *win = NULL; + + Eina_List *children; + eo_do(root, children = elm_interface_atspi_accessible_children_get()); + win = eina_list_nth(children, 0); + + double alpha = -1.0; + + eo_do(win, alpha = elm_interface_atspi_component_alpha_get()); + + ck_assert(alpha >= 0.0); + ck_assert(alpha <= 1.0); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_atspi_children_and_parent2) +{ + elm_init(0, NULL); + + Eo *root = generate_app(); + + Eo *win = NULL; + + Eina_List *root_children; + eo_do(root, root_children = elm_interface_atspi_accessible_children_get()); + win = eina_list_nth(root_children, 0); + + Eina_List *win_children; + eo_do(win, win_children = elm_interface_atspi_accessible_children_get()); + + ck_assert(eina_list_count(win_children) == 2); + + Eo *btn = NULL; + + btn = eina_list_nth(win_children, 1); + ck_assert(btn != NULL); + ck_assert(btn == g_btn); + + elm_shutdown(); +} +END_TEST + +void elm_test_atspi(TCase *tc) +{ + tcase_add_test(tc, elm_atspi_root_get); + tcase_add_test(tc, elm_atspi_name_get); + tcase_add_test(tc, elm_atspi_role_get); + tcase_add_test(tc, elm_atspi_role_name_get); + tcase_add_test(tc, elm_atspi_localized_role_name_get); + tcase_add_test(tc, elm_atspi_description_set); + tcase_add_test(tc, elm_atspi_children_and_parent); + tcase_add_test(tc, elm_atspi_component_position); + tcase_add_test(tc, elm_atspi_component_size); + tcase_add_test(tc, elm_atspi_component_focus); + tcase_add_test(tc, elm_test_atspi_object_children_get); + tcase_add_test(tc, elm_test_atspi_obj_index_in_parent_get); + tcase_add_test(tc, elm_atspi_component_z_order); + tcase_add_test(tc, elm_atspi_component_layer); + tcase_add_test(tc, elm_atspi_component_alpha); + tcase_add_test(tc, elm_atspi_children_and_parent2); +} + +/* + * TO DO + * elm_interface_atspi_accessible_relation_set_get + * elm_interface_atspi_accessible_relation_set_set + * elm_interface_atspi_accessible_state_get + * elm_interface_atspi_accessible_attributes_get + * elm_interface_atspi_component_contains +*/