2 #include <Elementary.h>
5 #include "eail_test_utils.h"
7 #define EAILU_WINDOW_TEST_TITLE "Eail test window"
8 #define EAILU_TEST_WINDOW_WIDTH 420
9 #define EAILU_TEST_WINDOW_HEIGHT 420
12 eailu_is_object_with_type(AtkObject *obj, gchar *type_name)
14 const char *obj_type = g_type_name(G_TYPE_FROM_INSTANCE(obj));
16 if ((!type_name) || (!obj)) return FALSE;
18 return !(strcmp(obj_type, type_name));
22 eailu_is_object_with_name(AtkObject *obj, gchar *name)
24 const char *obj_name = NULL;
26 if (!ATK_IS_OBJECT(obj))
29 obj_name = atk_object_get_name(obj);
30 if ((!obj_name) || (!name))
33 return !(strcmp(obj_name, name));
37 eailu_is_object_with_role(AtkObject *obj, AtkRole role)
39 AtkRole obj_role = ATK_ROLE_INVALID;
41 if (!ATK_IS_OBJECT(obj))
44 obj_role = atk_object_get_role(obj);
46 return (obj_role == role);
50 eailu_find_child_with_name(AtkObject *obj, gchar *name)
52 int child_count = 0, i = 0;
54 if (eailu_is_object_with_name(obj, name))
57 child_count = atk_object_get_n_accessible_children(obj);
58 for (i = 0; i < child_count; i++)
60 AtkObject *found_obj = NULL;
61 AtkObject *child = atk_object_ref_accessible_child(obj, i);
63 found_obj = eailu_find_child_with_name(child, name);
64 if (found_obj != NULL)
67 g_object_unref(child);
74 eailu_traverse_children_for_type_call_cb(AtkObject *obj,
76 Eailu_Test_Func_Cb test_cb)
78 int child_count = atk_object_get_n_accessible_children(obj);
80 for (i = 0; i < child_count; i++)
82 AtkObject *child = atk_object_ref_accessible_child(obj, i);
83 if (ATK_IS_OBJECT(child))
85 if (type_name == NULL ||
86 eailu_is_object_with_type(child, type_name))
90 eailu_traverse_children_for_type_call_cb(child, type_name, test_cb);
92 g_object_unref(child);
97 eailu_traverse_children_for_role_call_cb(AtkObject *obj,
99 Eailu_Test_Func_Cb test_cb)
101 gint number_of_children = atk_object_get_n_accessible_children(obj);
104 for (children_count = 0; number_of_children > children_count; children_count++)
106 AtkObject *child = atk_object_ref_accessible_child(obj, children_count);
108 if (eailu_is_object_with_role(child, role))
111 eailu_traverse_children_for_role_call_cb(child, role, test_cb);
112 g_object_unref(child);
117 eailu_create_test_window_with_glib_init(Evas_Smart_Cb on_done,
118 Evas_Smart_Cb on_focus_in)
122 if (!ecore_main_loop_glib_integrate())
124 fprintf(stderr, "Cannot integrate with glib main loop");
128 #if !GLIB_CHECK_VERSION(2,35,0)
132 win = elm_win_add(NULL, EAILU_WINDOW_TEST_TITLE, ELM_WIN_BASIC);
133 elm_win_title_set(win, EAILU_WINDOW_TEST_TITLE);
134 elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
135 evas_object_smart_callback_add(win, "delete,request", on_done, NULL);
136 elm_win_autodel_set(win, EINA_TRUE);
138 evas_object_smart_callback_add(win, "focus,in", on_focus_in, NULL);
139 evas_object_resize(win, EAILU_TEST_WINDOW_WIDTH, EAILU_TEST_WINDOW_HEIGHT);
145 eailu_test_atk_focus(AtkObject *obj, gboolean focusable)
147 AtkStateSet *state_set = NULL;
151 /* checking is setting focus works properly */
152 state_set = atk_object_ref_state_set(obj);
154 g_assert(atk_state_set_contains_state(state_set, ATK_STATE_FOCUSABLE));
155 g_assert(!atk_state_set_contains_state(state_set, ATK_STATE_FOCUSED));
158 g_assert(ATK_IS_COMPONENT(obj));
160 atk_component_grab_focus(ATK_COMPONENT(obj));
161 state_set = atk_object_ref_state_set(obj);
163 atk_state_set_contains_state(state_set, ATK_STATE_FOCUSED));
167 state_set = atk_object_ref_state_set(obj);
169 !atk_state_set_contains_state(state_set, ATK_STATE_FOCUSABLE));
171 !atk_state_set_contains_state(state_set, ATK_STATE_FOCUSED));
176 _eailu_print_atk_text_obj(AtkText *atk_text)
178 int count = 0, i = 0;
179 char *text = atk_text_get_text(atk_text, 0, -1);
181 printf("ATK TEXT:\n");
182 printf("atk_text_get_text: %s\n", text ? text : "NULL");
183 count = atk_text_get_character_count(atk_text);
184 printf("atk_text_get_character_count: %d\n", count);
186 printf("Text from offset single chars: ");
187 for (i = 0; i < count; ++i)
189 printf("%c", atk_text_get_character_at_offset(atk_text, i));
195 eailu_print_atk_object_info(AtkObject *obj)
197 const char *name = NULL;
198 const char *type_name = NULL;
199 const char *role_name = NULL;
200 AtkRole atk_role = ATK_ROLE_INVALID;
202 name = atk_object_get_name(ATK_OBJECT(obj));
203 type_name = g_type_name(G_TYPE_FROM_INSTANCE(ATK_OBJECT(obj)));
204 atk_role = atk_object_get_role(ATK_OBJECT(obj));
205 role_name = atk_role_get_name(atk_role);
207 printf("atk_object_get_name: %s\n", name ? name : "NULL");
208 printf("atk_object_get_role: %s\n", role_name ? role_name : "NULL");
209 printf("atk_object_get_type_name: %s\n", type_name ? type_name : "NULL");
211 if (ATK_IS_TEXT(obj))
213 _eailu_print_atk_text_obj(ATK_TEXT(obj));
220 * @return returns action index number or -1 if action with given name has
224 eailu_get_action_number(AtkAction *action_obj, const gchar *action_name)
227 int action_index = -1;
228 const int actions_num = atk_action_get_n_actions(action_obj);
230 for (i = 0; i < actions_num; i++)
232 const char *local_name = atk_action_get_name(action_obj, i);
233 if ((strcmp(action_name, local_name)) == 0)
241 eailu_test_action_activate(AtkAction *action_obj, const gchar *action_name)
243 int action_index = -1;
245 action_index = eailu_get_action_number(action_obj, action_name);
246 g_assert(-1 != action_index);
247 g_assert(TRUE == atk_action_do_action(action_obj, action_index));
251 eailu_test_action_description_all(AtkAction *action_obj)
253 int actions_num = atk_action_get_n_actions(action_obj);
254 const char *desc_set = "description test";
255 const char *desc_get;
258 for (count = 0; count < actions_num; ++count)
260 g_assert(atk_action_get_name(action_obj, count));
261 g_assert(atk_action_set_description(action_obj, count, desc_set));
262 desc_get = atk_action_get_description(action_obj, count);
264 g_assert(!strcmp(desc_set, desc_get));
267 g_assert(NULL == atk_action_get_name(action_obj, actions_num));
268 g_assert(FALSE == atk_action_set_description(action_obj, actions_num, desc_set));
269 g_assert(NULL == atk_action_get_description(action_obj, actions_num));