efl
613 строк · 17.3 Кб
1#ifdef HAVE_CONFIG_H2# include "elementary_config.h"3#endif4
5
6#define EFL_ACCESS_OBJECT_BETA7#define EFL_ACCESS_OBJECT_PROTECTED8
9#include <Efl_Ui.h>10#include <Elementary.h>11#include "elm_priv.h"12#include "efl_ui_suite.h"13
14static Evas_Object *g_win, *g_btn, *g_bg;15
16void generate_app(void)17{
18g_win = win_add(NULL, "Title", ELM_WIN_BASIC);19efl_gfx_entity_position_set(g_win, EINA_POSITION2D(100, 100));20efl_gfx_entity_size_set(g_win, EINA_SIZE2D(100, 100));21
22g_bg = efl_add(EFL_UI_BG_CLASS, g_win);23
24g_btn = efl_add(EFL_UI_BUTTON_CLASS, g_win);25
26efl_gfx_entity_visible_set(g_btn, EINA_TRUE);27efl_gfx_entity_visible_set(g_bg, EINA_TRUE);28efl_gfx_entity_visible_set(g_win, EINA_TRUE);29}
30
31EFL_START_TEST(test_efl_access_app_obj_name_get)32{
33Eo* root = efl_add_ref(ELM_ATSPI_APP_OBJECT_CLASS, NULL);34
35ck_assert(root != NULL);36
37const char *ret = NULL;38
39elm_app_name_set("Test name");40
41ret = efl_access_object_i18n_name_get(root);42
43ck_assert_str_eq(ret, "Test name");44
45efl_unref(root);46}
47EFL_END_TEST
48
49EFL_START_TEST(test_efl_access_object_i18n_name_get)50{
51generate_app();52
53const char *name;54
55name = efl_access_object_i18n_name_get(g_btn);56
57if (name && name[0]) {58ck_assert(0);59}60
61// Set name with additional text tags62efl_text_set(g_btn, "Some<br>text");63
64name = efl_access_object_i18n_name_get(g_btn);65
66// Accessible name should have cleared tags67ck_assert(name != NULL);68ck_assert_str_eq(name, "Some\ntext");69
70}
71EFL_END_TEST
72
73EFL_START_TEST(test_efl_access_object_i18n_name_set)74{
75generate_app();76
77const char *name;78
79efl_text_set(g_btn, "Other text");80efl_access_object_i18n_name_set(g_btn, "Test name");81
82name = efl_access_object_i18n_name_get(g_btn);83
84ck_assert(name != NULL);85ck_assert_str_eq(name, "Test name");86
87efl_access_object_i18n_name_set(g_btn, NULL);88name = efl_access_object_i18n_name_get(g_btn);89
90ck_assert(name != NULL);91ck_assert_str_eq(name, "Other text");92
93}
94EFL_END_TEST
95
96EFL_START_TEST(test_efl_access_object_role_get)97{
98Eo* root = efl_add_ref(ELM_ATSPI_APP_OBJECT_CLASS, NULL);99
100Efl_Access_Role role;101
102role = efl_access_object_role_get(root);103
104ck_assert(role == EFL_ACCESS_ROLE_APPLICATION);105
106efl_unref(root);107}
108EFL_END_TEST
109
110EFL_START_TEST(test_efl_access_object_role_set)111{
112generate_app();113Efl_Access_Role role;114
115efl_access_object_role_set(g_btn, EFL_ACCESS_ROLE_ACCELERATOR_LABEL);116role = efl_access_object_role_get(g_btn);117
118if (role != EFL_ACCESS_ROLE_ACCELERATOR_LABEL)119ck_assert(0);120
121efl_access_object_role_set(g_btn, EFL_ACCESS_ROLE_ENTRY);122role = efl_access_object_role_get(g_btn);123
124if (role != EFL_ACCESS_ROLE_ENTRY)125ck_assert(0);126
127}
128EFL_END_TEST
129
130EFL_START_TEST(test_efl_access_object_role_name_get)131{
132Eo* root = efl_add_ref(ELM_ATSPI_APP_OBJECT_CLASS, NULL);133
134const char *ret = NULL;135
136ret = efl_access_object_role_name_get(root);137
138ck_assert(ret != NULL);139
140efl_unref(root);141}
142EFL_END_TEST
143
144EFL_START_TEST(test_efl_access_object_localized_role_name_get)145{
146Eo* root = efl_add_ref(ELM_ATSPI_APP_OBJECT_CLASS, NULL);147
148const char *ret = NULL;149
150ret = efl_access_object_localized_role_name_get(root);151
152ck_assert(ret != NULL);153
154efl_unref(root);155}
156EFL_END_TEST
157
158EFL_START_TEST(test_efl_access_object_description_set)159{
160Eo* root = efl_add_ref(ELM_ATSPI_APP_OBJECT_CLASS, NULL);161
162const char *ret = NULL;163
164const char *desc = "Test description";165
166ret = efl_access_object_description_get(root);167
168ck_assert(ret == NULL);169
170efl_access_object_description_set(root, desc);171ret = efl_access_object_description_get(root);172
173ck_assert(ret != NULL);174ck_assert_str_eq(ret, "Test description");175
176efl_access_object_description_set(root, NULL);177ret = efl_access_object_description_get(root);178
179ck_assert(ret == NULL);180
181efl_unref(root);182}
183EFL_END_TEST
184
185/* Test if initial description value is NULL */
186EFL_START_TEST(test_efl_access_object_description_get)187{
188generate_app();189
190const char *descr;191descr = efl_access_object_description_get(g_bg);192
193ck_assert(descr == NULL);194
195}
196EFL_END_TEST
197
198EFL_START_TEST(test_efl_access_children_and_parent)199{
200generate_app();201Eo* root = efl_add_ref(ELM_ATSPI_APP_OBJECT_CLASS, NULL);202
203Eina_List *child_list = NULL;204
205child_list = efl_access_object_access_children_get(root);206
207//bg_child_list = efl_access_object_access_children_get(eina_list_nth(child_list, 0));208
209ck_assert_int_eq(eina_list_count(child_list), 1);210
211Eo *win = NULL;212
213win = eina_list_nth(child_list, 0);214
215ck_assert_ptr_ne(win, NULL);216ck_assert_ptr_eq(win, g_win);217
218efl_unref(root);219}
220EFL_END_TEST
221
222EFL_START_TEST(test_efl_access_children_and_parent2)223{
224generate_app();225Eo* root = efl_add_ref(ELM_ATSPI_APP_OBJECT_CLASS, NULL);226
227Eo *win = NULL;228
229Eina_List *root_children;230root_children = efl_access_object_access_children_get(root);231win = eina_list_nth(root_children, 0);232
233Eina_List *win_children;234win_children = efl_access_object_access_children_get(win);235
236ck_assert(eina_list_count(win_children) == 1);237
238Eo *btn = NULL;239
240btn = eina_list_nth(win_children, 0);241ck_assert(btn != NULL);242ck_assert(btn == g_btn);243
244efl_unref(root);245}
246EFL_END_TEST
247
248/* Initial value of translation domain should be NULL */
249EFL_START_TEST(test_efl_access_object_translation_domain_get)250{
251generate_app();252
253const char *domain;254
255domain = efl_access_object_translation_domain_get(g_btn);256
257ck_assert(domain == NULL);258
259}
260EFL_END_TEST
261
262EFL_START_TEST(test_efl_access_object_translation_domain_set)263{
264generate_app();265
266const char *domain;267
268efl_access_object_translation_domain_set(g_btn, "Test translation_domain");269domain = efl_access_object_translation_domain_get(g_btn);270
271ck_assert(domain != NULL);272ck_assert_str_eq(domain, "Test translation_domain");273
274efl_access_object_translation_domain_set(g_btn, NULL);275domain = efl_access_object_translation_domain_get(g_btn);276
277ck_assert(domain == NULL);278
279}
280EFL_END_TEST
281
282EFL_START_TEST(test_efl_access_object_relationship_append)283{
284generate_app();285
286Efl_Access_Relation *rel, *rel_to, *rel_from;287Eina_Iterator *it;288unsigned int i = 0;289
290efl_access_object_relationship_append(g_btn, EFL_ACCESS_RELATION_TYPE_FLOWS_TO, g_bg);291efl_access_object_relationship_append(g_btn, EFL_ACCESS_RELATION_TYPE_FLOWS_FROM, g_win);292it = efl_access_object_relations_get(g_btn);293
294ck_assert(it != NULL);295
296rel_to = rel_from = NULL;297EINA_ITERATOR_FOREACH(it, rel)298{299i++;300
301if (rel->type == EFL_ACCESS_RELATION_TYPE_FLOWS_TO)302rel_to = rel;303if (rel->type == EFL_ACCESS_RELATION_TYPE_FLOWS_FROM)304rel_from = rel;305}306
307ck_assert(i >= 2);308ck_assert(rel_to != NULL);309ck_assert(eina_list_data_find(rel_to->objects, g_bg) != NULL);310
311ck_assert(rel_from != NULL);312ck_assert(eina_list_data_find(rel_from->objects, g_win) != NULL);313
314eina_iterator_free(it);315
316/* Check if append do not procude duplicated relations */317efl_access_object_relationship_append(g_btn, EFL_ACCESS_RELATION_TYPE_FLOWS_TO, g_bg);318efl_access_object_relationship_append(g_btn, EFL_ACCESS_RELATION_TYPE_FLOWS_FROM, g_win);319it = efl_access_object_relations_get(g_btn); i = 0;320
321rel_to = rel_from = NULL;322EINA_ITERATOR_FOREACH(it, rel)323{324i++;325
326if (rel->type == EFL_ACCESS_RELATION_TYPE_FLOWS_TO)327rel_to = rel;328if (rel->type == EFL_ACCESS_RELATION_TYPE_FLOWS_FROM)329rel_from = rel;330}331
332ck_assert(rel_to != NULL);333ck_assert(rel_to->objects != NULL);334rel_to->objects = eina_list_remove(rel_to->objects, g_bg);335ck_assert(eina_list_data_find(rel_to->objects, g_bg) == NULL);336
337ck_assert(rel_from != NULL);338ck_assert(rel_from->objects != NULL);339rel_from->objects = eina_list_remove(rel_from->objects, g_win);340ck_assert(eina_list_data_find(rel_from->objects, g_win) == NULL);341
342eina_iterator_free(it);343}
344EFL_END_TEST
345
346EFL_START_TEST(test_efl_access_object_relationship_remove)347{
348generate_app();349
350Efl_Access_Relation *rel, *rel_to, *rel_from;351Eina_Iterator *it;352unsigned int i = 0;353
354/* Test if removal of single relationship works */355efl_access_object_relationship_append(g_btn, EFL_ACCESS_RELATION_TYPE_FLOWS_TO, g_bg);356efl_access_object_relationship_append(g_btn, EFL_ACCESS_RELATION_TYPE_FLOWS_FROM, g_win);357efl_access_object_relationship_remove(g_btn, EFL_ACCESS_RELATION_TYPE_FLOWS_TO, g_bg);358it = efl_access_object_relations_get(g_btn);359
360ck_assert(it != NULL);361
362rel_to = rel_from = NULL;363EINA_ITERATOR_FOREACH(it, rel)364{365i++;366
367if (rel->type == EFL_ACCESS_RELATION_TYPE_FLOWS_TO)368rel_to = rel;369if (rel->type == EFL_ACCESS_RELATION_TYPE_FLOWS_FROM)370rel_from = rel;371}372
373ck_assert(i >= 1);374
375if (rel_to) ck_assert(eina_list_data_find(rel_to->objects, g_bg) == NULL);376ck_assert(rel_from != NULL);377ck_assert(eina_list_data_find(rel_from->objects, g_win) != NULL);378
379eina_iterator_free(it);380
381/* Test if removal of type relationship works */382efl_access_object_relationship_append(g_btn, EFL_ACCESS_RELATION_TYPE_FLOWS_TO, g_bg);383efl_access_object_relationship_append(g_btn, EFL_ACCESS_RELATION_TYPE_FLOWS_TO, g_win);384efl_access_object_relationship_remove(g_btn, EFL_ACCESS_RELATION_TYPE_FLOWS_TO, NULL);385it = efl_access_object_relations_get(g_btn); i = 0;386
387rel_to = rel_from = NULL;388EINA_ITERATOR_FOREACH(it, rel)389{390i++;391
392if (rel->type == EFL_ACCESS_RELATION_TYPE_FLOWS_TO)393rel_to = rel;394if (rel->type == EFL_ACCESS_RELATION_TYPE_FLOWS_FROM)395rel_from = rel;396}397
398ck_assert(rel_to == NULL);399ck_assert(rel_from != NULL);400ck_assert(eina_list_data_find(rel_from->objects, g_win) != NULL);401
402eina_iterator_free(it);403
404/* Test if relationship is implicity removed when object is deleted */405efl_access_object_relationship_append(g_btn, EFL_ACCESS_RELATION_TYPE_FLOWS_TO, g_bg);406efl_access_object_relationship_append(g_btn, EFL_ACCESS_RELATION_TYPE_FLOWS_FROM, g_bg);407efl_del(g_bg);408it = efl_access_object_relations_get(g_btn); i = 0;409
410rel_to = rel_from = NULL;411EINA_ITERATOR_FOREACH(it, rel)412{413i++;414
415if (rel->type == EFL_ACCESS_RELATION_TYPE_FLOWS_TO)416rel_to = rel;417if (rel->type == EFL_ACCESS_RELATION_TYPE_FLOWS_FROM)418rel_from = rel;419}420
421if (rel_to) ck_assert(eina_list_data_find(rel_to->objects, g_bg) == NULL);422if (rel_from) ck_assert(eina_list_data_find(rel_from->objects, g_bg) == NULL);423
424eina_iterator_free(it);425}
426EFL_END_TEST
427
428EFL_START_TEST(test_efl_access_object_relationships_clear)429{
430Efl_Access_Relation *rel;431Eina_Iterator *it;432
433generate_app();434
435efl_access_object_relationship_append(g_btn, EFL_ACCESS_RELATION_TYPE_FLOWS_TO, g_bg);436efl_access_object_relationship_append(g_btn, EFL_ACCESS_RELATION_TYPE_FLOWS_FROM, g_bg);437efl_access_object_relationship_append(g_btn, EFL_ACCESS_RELATION_TYPE_FLOWS_TO, g_win);438efl_access_object_relationship_append(g_btn, EFL_ACCESS_RELATION_TYPE_FLOWS_FROM, g_win);439
440efl_access_object_relationships_clear(g_btn);441
442it = efl_access_object_relations_get(g_btn);443EINA_ITERATOR_FOREACH(it, rel)444{445ck_assert(!((rel->type == EFL_ACCESS_RELATION_TYPE_FLOWS_TO) && eina_list_data_find(rel->objects, g_bg)));446ck_assert(!((rel->type == EFL_ACCESS_RELATION_TYPE_FLOWS_FROM) && eina_list_data_find(rel->objects, g_bg)));447ck_assert(!((rel->type == EFL_ACCESS_RELATION_TYPE_FLOWS_TO) && eina_list_data_find(rel->objects, g_win)));448ck_assert(!((rel->type == EFL_ACCESS_RELATION_TYPE_FLOWS_FROM) && eina_list_data_find(rel->objects, g_win)));449}450eina_iterator_free(it);451}
452EFL_END_TEST
453
454EFL_START_TEST(test_efl_access_object_attribute_append)455{
456Eina_List *attr_list = NULL, *l = NULL;457Efl_Access_Attribute *attr = NULL;458generate_app();459efl_access_object_attribute_append(g_btn, "color1", "red");460efl_access_object_attribute_append(g_btn, "color2", "blue");461efl_access_object_attribute_append(g_btn, "color3", "green");462attr_list = efl_access_object_attributes_get(g_btn);463
464ck_assert(attr_list != NULL);465EINA_LIST_FOREACH(attr_list, l, attr)466{467if (!strcmp(attr->key, "color1"))468ck_assert_str_eq(attr->value, "red");469else if (!strcmp(attr->key, "color2"))470ck_assert_str_eq(attr->value, "blue");471else if (!strcmp(attr->key, "color3"))472ck_assert_str_eq(attr->value, "green");473}474EINA_LIST_FREE(attr_list, attr)475{476eina_stringshare_del(attr->key);477eina_stringshare_del(attr->value);478free(attr);479}480}
481EFL_END_TEST
482
483EFL_START_TEST(test_efl_access_object_attributes_get)484{
485Eina_List *attr_list = NULL, *l = NULL;486Efl_Access_Attribute *attr = NULL;487generate_app();488efl_access_object_attribute_append(g_btn, "color1", "red");489efl_access_object_attribute_append(g_btn, "color2", "blue");490efl_access_object_attribute_append(g_btn, "color3", "green");491attr_list = efl_access_object_attributes_get(g_btn);492
493ck_assert(attr_list != NULL);494EINA_LIST_FOREACH(attr_list, l, attr)495{496if (!strcmp(attr->key, "color1"))497ck_assert_str_eq(attr->value, "red");498else if (!strcmp(attr->key, "color2"))499ck_assert_str_eq(attr->value, "blue");500else if (!strcmp(attr->key, "color3"))501ck_assert_str_eq(attr->value, "green");502}503EINA_LIST_FREE(attr_list, attr)504{505eina_stringshare_del(attr->key);506eina_stringshare_del(attr->value);507free(attr);508}509}
510EFL_END_TEST
511
512EFL_START_TEST(test_efl_access_object_attribute_del)513{
514Eina_List *attr_list = NULL;515Efl_Access_Attribute *attr = NULL;516int count1 = 0;517int count2 = 0;518generate_app();519efl_access_object_attribute_append(g_btn, "color1", "red");520efl_access_object_attribute_append(g_btn, "color2", "blue");521efl_access_object_attribute_append(g_btn, "color3", "green");522attr_list = efl_access_object_attributes_get(g_btn);//default attributes are added again523ck_assert(attr_list != NULL);524count1 = eina_list_count(attr_list);525EINA_LIST_FREE(attr_list, attr)526{527eina_stringshare_del(attr->key);528eina_stringshare_del(attr->value);529free(attr);530}531attr_list = NULL;532efl_access_object_attribute_del(g_btn, "color4");//non existent key deletion533efl_access_object_attribute_del(g_btn, "color3");//existing key deletion534attr_list = efl_access_object_attributes_get(g_btn);535ck_assert(attr_list != NULL);536count2 = eina_list_count(attr_list);537ck_assert(count1 == (count2+1));538EINA_LIST_FREE(attr_list, attr)539{540eina_stringshare_del(attr->key);541eina_stringshare_del(attr->value);542free(attr);543}544}
545EFL_END_TEST
546
547EFL_START_TEST(test_efl_access_object_attributes_clear)548{
549Eina_List *attr_list = NULL;550Efl_Access_Attribute *attr = NULL;551generate_app();552efl_access_object_attribute_append(g_btn, "color1", "red");553efl_access_object_attribute_append(g_btn, "color2", "blue");554efl_access_object_attribute_append(g_btn, "color3", "green");555efl_access_object_attributes_clear(g_btn);556attr_list = efl_access_object_attributes_get(g_btn);//default attributes are added again557ck_assert(attr_list != NULL);558ck_assert(eina_list_count(attr_list) <= 2);559EINA_LIST_FREE(attr_list, attr)560{561eina_stringshare_del(attr->key);562eina_stringshare_del(attr->value);563free(attr);564}565}
566EFL_END_TEST
567
568EFL_START_TEST(test_efl_access_object_reading_info_type_set)569{
570Efl_Access_Reading_Info_Type reading_info;571generate_app();572efl_access_object_reading_info_type_set(g_btn, EFL_ACCESS_READING_INFO_TYPE_NAME|573EFL_ACCESS_READING_INFO_TYPE_ROLE);574reading_info = efl_access_object_reading_info_type_get(g_btn);575ck_assert(reading_info & EFL_ACCESS_READING_INFO_TYPE_NAME);576ck_assert(reading_info & EFL_ACCESS_READING_INFO_TYPE_ROLE);577}
578EFL_END_TEST
579
580EFL_START_TEST(test_efl_access_object_reading_info_type_get)581{
582Efl_Access_Reading_Info_Type reading_info;583generate_app();584reading_info = efl_access_object_reading_info_type_get(g_btn);585ck_assert(reading_info == 0);586}
587EFL_END_TEST
588
589void efl_ui_test_atspi(TCase *tc)590{
591tcase_add_test(tc, test_efl_access_app_obj_name_get);592tcase_add_test(tc, test_efl_access_object_i18n_name_get);593tcase_add_test(tc, test_efl_access_object_i18n_name_set);594tcase_add_test(tc, test_efl_access_object_role_get);595tcase_add_test(tc, test_efl_access_object_role_set);596tcase_add_test(tc, test_efl_access_object_role_name_get);597tcase_add_test(tc, test_efl_access_object_localized_role_name_get);598tcase_add_test(tc, test_efl_access_object_description_set);599tcase_add_test(tc, test_efl_access_object_description_get);600tcase_add_test(tc, test_efl_access_children_and_parent);601tcase_add_test(tc, test_efl_access_children_and_parent2);602tcase_add_test(tc, test_efl_access_object_translation_domain_get);603tcase_add_test(tc, test_efl_access_object_translation_domain_set);604tcase_add_test(tc, test_efl_access_object_relationship_append);605tcase_add_test(tc, test_efl_access_object_relationship_remove);606tcase_add_test(tc, test_efl_access_object_relationships_clear);607tcase_add_test(tc, test_efl_access_object_attribute_append);608tcase_add_test(tc, test_efl_access_object_attributes_get);609tcase_add_test(tc, test_efl_access_object_attribute_del);610tcase_add_test(tc, test_efl_access_object_attributes_clear);611tcase_add_test(tc, test_efl_access_object_reading_info_type_set);612tcase_add_test(tc, test_efl_access_object_reading_info_type_get);613}
614