2 * Tested interface: AtkObject
4 * Tested AtkObject: EailIndex
6 * Description: Test AtkObject interface
8 * Test input: accessible object representing EailIndex
10 * Expected test result: test should return 0 (success)
13 #include <Elementary.h>
16 #include "eail_test_utils.h"
18 #define INDEX_NAME "index"
20 INIT_TEST("EailIndex")
23 _test_index_child_for_object(AtkObject *obj, int index)
25 g_assert(0 == atk_selection_get_selection_count(ATK_SELECTION(obj)));
26 g_assert(atk_selection_add_selection(ATK_SELECTION(obj), index));
28 g_assert(atk_selection_is_child_selected(ATK_SELECTION(obj), index));
29 g_assert(1 == atk_selection_get_selection_count(ATK_SELECTION(obj)));
31 g_assert(atk_selection_clear_selection(ATK_SELECTION(obj)));
32 g_assert(0 == atk_selection_get_selection_count(ATK_SELECTION(obj)));
35 _do_test(AtkObject *obj)
37 int n_children = 0, i = 0;
39 g_assert(ATK_IS_OBJECT(obj));
40 atk_object_set_name(obj, INDEX_NAME"test");
41 g_assert_cmpstr(atk_object_get_name(obj), ==, INDEX_NAME"test");
42 atk_object_set_description(obj, "test");
43 g_assert_cmpstr(atk_object_get_description(obj), ==, "test");
45 g_assert(atk_object_get_role(obj) == ATK_ROLE_LIST);
47 eailu_test_atk_focus(obj, FALSE);
48 n_children = atk_object_get_n_accessible_children(obj);
49 /* there should be 13 index entries */
50 g_assert(13 == n_children);
51 for (i = 0; i < n_children; ++i)
53 _test_index_child_for_object(obj, i);
56 eailu_test_code_called = 1;
61 Evas_Object *id; /* Pointer to Index */
62 Elm_Object_Item *item; /* Item we use for search */
64 typedef struct _Idx_Data_Type Idx_Data_Type;
68 unsigned int state; /* What state we are testing */
71 typedef struct _api_data api_data;
77 INDEX_APPEND_RELATIVE,
82 INDEX_INDICATOR_DISABLED,
86 typedef enum _api_state api_state;
88 static Elm_Genlist_Item_Class itci;
89 char *gli_text_get(void *data, Evas_Object *obj, const char *part )
92 int j = (uintptr_t)data;
93 g_snprintf(buf, sizeof(buf), "%c%c",
94 'A' + ((j >> 4) & 0xf),
101 _index_delay_changed_cb(void *data, Evas_Object *obj, void *event_info)
103 // called on a change but delayed in case multiple changes happen in a
105 elm_genlist_item_bring_in(elm_object_item_data_get(event_info),
106 ELM_GENLIST_ITEM_SCROLLTO_TOP);
110 _index_changed_cb(void *data, Evas_Object *obj, void *event_info)
112 // this is called on every change, no matter how often
116 _index_selected_cb(void *data, Evas_Object *obj, void *event_info)
118 // called on final select
119 const Elm_Object_Item *item = elm_index_selected_item_get(obj, 0);
120 _printf("Index selected %s\n", elm_index_item_letter_get(item));
121 elm_genlist_item_bring_in(elm_object_item_data_get(event_info),
122 ELM_GENLIST_ITEM_SCROLLTO_TOP);
126 _cleanup_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
132 id_cb(void *data, Evas_Object *obj, void *event_info)
134 printf("Current Index : %s\n", elm_index_item_letter_get((const Elm_Object_Item *)event_info));
138 _init_index(Evas_Object *win)
140 Evas_Object *bxx, *gl, *id;
141 Elm_Object_Item *glit;
143 api_data *api = calloc(1, sizeof(api_data));
145 evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _cleanup_cb, api);
147 bxx = elm_box_add(win);
148 elm_win_resize_object_add(win, bxx);
149 evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
150 evas_object_show(bxx);
152 gl = elm_genlist_add(win);
153 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
154 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
155 evas_object_show(gl);
157 api->dt.id = id = elm_index_add(win);
158 evas_object_size_hint_weight_set(id, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
159 evas_object_size_hint_align_set(id, EVAS_HINT_FILL, EVAS_HINT_FILL);
160 elm_win_resize_object_add(win, id);
162 evas_object_show(id);
164 itci.item_style = "default";
165 itci.func.text_get = gli_text_get;
166 itci.func.content_get = NULL;
167 itci.func.state_get = NULL;
168 itci.func.del = NULL;
171 for (i = 0; i < 100; i++)
173 glit = elm_genlist_item_append(gl, &itci,
174 (void *)(uintptr_t)j/* item data */,
176 ELM_GENLIST_ITEM_NONE,
177 NULL/* func */, NULL/* func data */);
182 g_snprintf(buf, sizeof(buf), "%c", 'A' + ((j >> 4) & 0xf));
183 elm_index_item_append(id, buf, id_cb, glit);
184 if (*buf == 'G') /* Just init dt->item later used in API test */
189 evas_object_smart_callback_add(id, "delay,changed", _index_delay_changed_cb, NULL);
190 evas_object_smart_callback_add(id, "changed", _index_changed_cb, NULL);
191 evas_object_smart_callback_add(id, "selected", _index_selected_cb, NULL);
192 elm_index_level_go(id, 0);
194 elm_box_pack_end(bxx, gl);
196 evas_object_show(id);
198 evas_object_resize(win, 320, 250);
202 elm_main(int argc, char **argv)
206 win = eailu_create_test_window_with_glib_init(_on_done, _on_focus_in);
209 evas_object_show(win);