1 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/accessibility-test-utils.h>
2 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
3 #include <dali-toolkit-test-suite-utils.h>
4 #include <dali-toolkit/dali-toolkit.h>
5 #include <dali-toolkit/devel-api/controls/buttons/toggle-button.h>
6 #include <dali-toolkit/devel-api/controls/control-devel.h>
7 #include <dali-toolkit/devel-api/controls/popup/popup.h>
8 #include <dali-toolkit/devel-api/controls/table-view/table-view.h>
9 #include <dali-toolkit/devel-api/controls/web-view/web-view.h>
10 #include <dali/devel-api/actors/actor-devel.h>
11 #include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
12 #include <dali/devel-api/adaptor-framework/accessibility.h>
13 #include <dali/devel-api/adaptor-framework/window-devel.h>
14 #include <dali/devel-api/atspi-interfaces/accessible.h>
15 #include <dali/devel-api/atspi-interfaces/action.h>
16 #include <dali/devel-api/atspi-interfaces/component.h>
17 #include <dali/devel-api/common/stage.h>
20 using namespace Dali::Toolkit;
22 void utc_dali_accessibility_controls_bridge_up_startup(void)
24 test_return_value = TET_UNDEF;
25 DBusWrapper::Install(std::unique_ptr<DBusWrapper>(new TestDBusWrapper));
28 void utc_dali_accessibility_controls_bridge_up_cleanup(void)
30 test_return_value = TET_PASS;
31 //DBusWrapper::Install({}) is a de-install
32 DBusWrapper::Install({});
37 namespace Accessibility
39 std::ostream& operator<<(std::ostream& stream, const Address& address)
41 stream << address.ToString();
44 } // namespace Accessibility
47 int UtcDaliControlAccessibilityRaiseBridge(void)
49 DALI_TEST_CHECK(!Accessibility::IsUp());
51 ToolkitTestApplication application;
53 Dali::Accessibility::TestEnableSC(true);
55 DALI_TEST_CHECK(Accessibility::IsUp());
57 // auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
58 // for(auto &a : wr->daliMethods) {
60 // if (std::get<3>(a.first) == MethodType::Method) mt = "MethodType::Method";
61 // else if (std::get<3>(a.first) == MethodType::Getter) mt = "MethodType::Getter";
62 // else if (std::get<3>(a.first) == MethodType::Setter) mt = "MethodType::Setter";
64 // printf("%s %s %s %s\n", std::get<0>(a.first).c_str(), std::get<1>(a.first).c_str(), std::get<2>(a.first).c_str(), mt);
67 Dali::Accessibility::TestEnableSC(false);
69 DALI_TEST_CHECK(!Accessibility::IsUp());
74 int UtcDaliControlAccessibilityName(void)
76 ToolkitTestApplication application;
78 auto control = Control::New();
79 Stage::GetCurrent().Add(control);
81 auto q = Dali::Accessibility::Accessible::Get(control);
84 DALI_TEST_EQUALS("", q->GetName(), TEST_LOCATION);
86 control.SetProperty(DevelControl::Property::ACCESSIBILITY_NAME, "Accessibility_Name");
87 DALI_TEST_EQUALS("Accessibility_Name", q->GetName(), TEST_LOCATION);
88 DALI_TEST_EQUALS(control.GetProperty(DevelControl::Property::ACCESSIBILITY_NAME).Get<std::string>(), "Accessibility_Name", TEST_LOCATION);
90 auto nameChangeCallback = [](std::string& accessibilityName) { accessibilityName = "Accessibility_Name_With_Callback"; };
92 DevelControl::AccessibilityGetNameSignal(control).Connect(nameChangeCallback);
94 DALI_TEST_EQUALS("Accessibility_Name_With_Callback", q->GetName(), TEST_LOCATION);
96 Dali::Accessibility::TestEnableSC(true);
98 DALI_TEST_EQUALS("Accessibility_Name_With_Callback", TestGetName(q->GetAddress()), TEST_LOCATION);
100 DevelControl::AccessibilityGetNameSignal(control).Disconnect(nameChangeCallback);
102 auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
107 control.SetProperty(DevelControl::Property::ACCESSIBILITY_NAME, "Changed_Accessiblity_Name");
108 DALI_TEST_EQUALS("Changed_Accessiblity_Name", q->GetName(), TEST_LOCATION);
109 DALI_TEST_EQUALS(control.GetProperty(DevelControl::Property::ACCESSIBILITY_NAME).Get<std::string>(), "Changed_Accessiblity_Name", TEST_LOCATION);
111 //TODO test emission of name change signal
112 Dali::Accessibility::TestEnableSC(false);
117 int UtcDaliControlAccessibilityDescription(void)
119 ToolkitTestApplication application;
121 auto control = Control::New();
123 auto q = Dali::Accessibility::Accessible::Get(control);
126 DALI_TEST_EQUALS("", q->GetDescription(), TEST_LOCATION);
128 control.SetProperty(DevelControl::Property::ACCESSIBILITY_DESCRIPTION, "Accessibility_Description");
129 DALI_TEST_EQUALS("Accessibility_Description", q->GetDescription(), TEST_LOCATION);
131 auto property = control.GetProperty(DevelControl::Property::ACCESSIBILITY_DESCRIPTION).Get<std::string>();
132 DALI_TEST_EQUALS("Accessibility_Description", property, TEST_LOCATION);
134 auto descriptionChangeCallback = [](std::string& accessibilityDescription) { accessibilityDescription = "Accessibility_Description_With_Callback"; };
136 DevelControl::AccessibilityGetDescriptionSignal(control).Connect(descriptionChangeCallback);
138 DALI_TEST_EQUALS("Accessibility_Description_With_Callback", q->GetDescription(), TEST_LOCATION);
140 Dali::Accessibility::TestEnableSC(true);
142 DALI_TEST_EQUALS("Accessibility_Description_With_Callback", TestGetDescription(q->GetAddress()), TEST_LOCATION);
144 DevelControl::AccessibilityGetDescriptionSignal(control).Disconnect(descriptionChangeCallback);
146 auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
151 control.SetProperty(DevelControl::Property::ACCESSIBILITY_DESCRIPTION, "Changed_Accessiblity_Description");
152 DALI_TEST_EQUALS("Changed_Accessiblity_Description", q->GetDescription(), TEST_LOCATION);
153 DALI_TEST_EQUALS(control.GetProperty(DevelControl::Property::ACCESSIBILITY_DESCRIPTION).Get<std::string>(), "Changed_Accessiblity_Description", TEST_LOCATION);
155 //TODO test emission of description change signal
156 Dali::Accessibility::TestEnableSC(false);
161 int UtcDaliControlAccessibilityRole(void)
163 ToolkitTestApplication application;
165 auto control = Control::New();
166 auto role_unknown = Dali::Accessibility::Role::UNKNOWN;
167 auto role_pushbutton = Dali::Accessibility::Role::PUSH_BUTTON;
169 DALI_TEST_EQUALS(role_unknown, control.GetProperty(DevelControl::Property::ACCESSIBILITY_ROLE).Get<Dali::Accessibility::Role>(), TEST_LOCATION);
171 auto q = Dali::Accessibility::Accessible::Get(control);
172 DALI_TEST_EQUALS(role_unknown, q->GetRole(), TEST_LOCATION);
173 DALI_TEST_EQUALS("unknown", q->GetRoleName(), TEST_LOCATION);
175 Dali::Accessibility::TestEnableSC(true);
177 DALI_TEST_EQUALS(static_cast<uint32_t>(role_unknown), TestGetRole(q->GetAddress()), TEST_LOCATION);
178 DALI_TEST_EQUALS("unknown", TestGetRoleName(q->GetAddress()), TEST_LOCATION);
179 DALI_TEST_EQUALS("unknown", TestGetLocalizedRoleName(q->GetAddress()), TEST_LOCATION);
181 control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, role_pushbutton);
183 DALI_TEST_EQUALS(static_cast<uint32_t>(role_pushbutton), TestGetRole(q->GetAddress()), TEST_LOCATION);
184 DALI_TEST_EQUALS("push button", TestGetRoleName(q->GetAddress()), TEST_LOCATION);
185 DALI_TEST_EQUALS("push button", TestGetLocalizedRoleName(q->GetAddress()), TEST_LOCATION);
187 Dali::Accessibility::TestEnableSC(false);
189 DALI_TEST_EQUALS(role_pushbutton, q->GetRole(), TEST_LOCATION);
190 DALI_TEST_EQUALS("push button", q->GetRoleName(), TEST_LOCATION);
195 int UtcDaliControlAccessibilityRoleToggleButton(void)
197 ToolkitTestApplication application;
199 auto control = Dali::Toolkit::ToggleButton::New();
200 auto button = Dali::Accessibility::Role::TOGGLE_BUTTON;
202 control.SetProperty(Toolkit::ToggleButton::Property::TOOLTIPS,
203 Property::Array{"option1", "option2"});
205 Dali::Accessibility::TestEnableSC(true);
207 control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, button);
208 auto q = Dali::Accessibility::Accessible::Get(control);
210 DALI_TEST_EQUALS(button, q->GetRole(), TEST_LOCATION);
211 DALI_TEST_EQUALS("toggle button", q->GetRoleName(), TEST_LOCATION);
213 Dali::Accessibility::States states = q->GetStates();
214 DALI_TEST_EQUALS(true, (bool)states[Dali::Accessibility::State::VISIBLE], TEST_LOCATION);
216 DALI_TEST_EQUALS("option1", q->GetDescription(), TEST_LOCATION);
218 auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
223 control.SetProperty(Toolkit::Button::Property::LABEL, "ToggleButton2");
224 DALI_TEST_EQUALS("ToggleButton2", TestGetName(q->GetAddress()), TEST_LOCATION);
226 Dali::Accessibility::TestEnableSC(false);
231 int UtcDaliControlAccessibilityButtonLabel(void)
233 ToolkitTestApplication application;
235 auto control = Dali::Toolkit::PushButton::New();
236 auto button = Dali::Accessibility::Role::PUSH_BUTTON;
238 Dali::Accessibility::TestEnableSC(true);
240 control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, button);
242 auto q = Dali::Accessibility::Accessible::Get(control);
243 auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
248 control.SetProperty(Toolkit::Button::Property::LABEL, "Button2");
250 DALI_TEST_EQUALS("Button2", TestGetName(q->GetAddress()), TEST_LOCATION);
252 Dali::Accessibility::TestEnableSC(false);
257 int UtcDaliControlAccessibilityState(void)
259 ToolkitTestApplication application;
261 auto control = Control::New();
262 auto q = Dali::Accessibility::Accessible::Get(control);
264 Dali::Accessibility::TestEnableSC(true);
266 auto states_by_bridge = Dali::Accessibility::States{TestGetStates(q->GetAddress())};
267 auto states = DevelControl::GetAccessibilityStates(control);
268 DALI_TEST_CHECK(states_by_bridge == states);
270 Dali::Accessibility::TestEnableSC(false);
275 int UtcDaliControlAccessibilityModal(void)
277 ToolkitTestApplication application;
279 auto control = Dali::Toolkit::Popup::New();
280 auto q = Dali::Accessibility::Accessible::Get(control);
282 Dali::Accessibility::TestEnableSC(true);
284 auto states_by_bridge = Dali::Accessibility::States{TestGetStates(q->GetAddress())};
285 DALI_TEST_CHECK(states_by_bridge[Dali::Accessibility::State::MODAL]);
287 Dali::Accessibility::TestEnableSC(false);
292 int UtcDaliControlAccessibilityHighlightable(void)
294 ToolkitTestApplication application;
295 auto control = Control::New();
297 auto highlightable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE);
298 DALI_TEST_EQUALS(highlightable, false, TEST_LOCATION);
300 // negative testcase - trying to set unconvertible value
301 control.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, "deadbeef");
302 highlightable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE);
303 DALI_TEST_EQUALS(highlightable, false, TEST_LOCATION);
305 auto q = Dali::Accessibility::Accessible::Get(control);
307 Dali::Accessibility::TestEnableSC(true);
309 auto states_by_bridge = Dali::Accessibility::States{TestGetStates(q->GetAddress())};
310 DALI_TEST_CHECK(!states_by_bridge[Dali::Accessibility::State::HIGHLIGHTABLE]);
312 control.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
313 DALI_TEST_EQUALS(Property::BOOLEAN, control.GetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).GetType(), TEST_LOCATION);
314 DALI_TEST_EQUALS(true, control.GetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).Get<bool>(), TEST_LOCATION);
316 states_by_bridge = Dali::Accessibility::States{TestGetStates(q->GetAddress())};
317 DALI_TEST_CHECK(states_by_bridge[Dali::Accessibility::State::HIGHLIGHTABLE]);
319 control.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false);
320 DALI_TEST_EQUALS(Property::BOOLEAN, control.GetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).GetType(), TEST_LOCATION);
321 DALI_TEST_EQUALS(false, control.GetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).Get<bool>(), TEST_LOCATION);
323 states_by_bridge = Dali::Accessibility::States{TestGetStates(q->GetAddress())};
324 DALI_TEST_CHECK(!states_by_bridge[Dali::Accessibility::State::HIGHLIGHTABLE]);
326 Dali::Accessibility::TestEnableSC(false);
331 int UtcDaliControlAccessibilityHighlightBridgeUp(void)
333 ToolkitTestApplication application;
335 auto controla = Control::New();
336 auto controlb = Control::New();
337 controla.Add(controlb);
339 controla.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
340 controlb.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
342 Dali::Accessibility::TestEnableSC(true);
344 auto accessible_a = Dali::Accessibility::Accessible::Get(controla);
345 auto accessible_b = Dali::Accessibility::Accessible::Get(controlb);
347 auto a = dynamic_cast<Dali::Accessibility::Component*>(accessible_a);
348 auto b = dynamic_cast<Dali::Accessibility::Component*>(accessible_b);
350 auto states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
351 auto states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
353 DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
354 DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
356 DALI_TEST_EQUALS(true, DevelControl::GrabAccessibilityHighlight(controla), TEST_LOCATION);
358 states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
359 states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
361 DALI_TEST_CHECK(states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
362 DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
364 DALI_TEST_EQUALS(true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION);
365 DALI_TEST_EQUALS(true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION);
367 states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
368 states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
370 DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
371 DALI_TEST_CHECK(states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
373 DALI_TEST_EQUALS(false, DevelControl::ClearAccessibilityHighlight(controla), TEST_LOCATION);
375 states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
376 states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
378 DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
379 DALI_TEST_CHECK(states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
381 DALI_TEST_EQUALS(true, DevelControl::ClearAccessibilityHighlight(controlb), TEST_LOCATION);
383 states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
384 states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
386 DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
387 DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
389 DALI_TEST_CHECK(TestGrabHighlight(a->GetAddress()));
391 states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
392 states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
394 DALI_TEST_CHECK(states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
395 DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
397 DALI_TEST_CHECK(TestGrabHighlight(b->GetAddress()));
399 states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
400 states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
402 DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
403 DALI_TEST_CHECK(states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
405 DALI_TEST_CHECK(TestClearHighlight(b->GetAddress()));
407 states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
408 states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
410 DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
411 DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
413 Dali::Accessibility::TestEnableSC(false);
418 int utcDaliAccessibilityControlAttributes(void)
420 ToolkitTestApplication application;
421 auto check_box_button = Toolkit::Control::New();
425 auto attributes = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
426 auto attributes_map = attributes.GetMap();
428 auto position = attributes_map->Find("access_key1");
429 DALI_TEST_CHECK(!position);
431 DevelControl::AppendAccessibilityAttribute(check_box_button, "access_key1", "access_value1");
432 attributes = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
433 attributes_map = attributes.GetMap();
435 DALI_TEST_EQUALS((attributes_map->Find("access_key1"))->Get<std::string>(), "access_value1", TEST_LOCATION);
437 DevelControl::AppendAccessibilityAttribute(check_box_button, "access_key2", "access_value2_a");
438 attributes = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
439 attributes_map = attributes.GetMap();
441 DALI_TEST_EQUALS((attributes_map->Find("access_key1"))->Get<std::string>(), "access_value1", TEST_LOCATION);
442 DALI_TEST_EQUALS((attributes_map->Find("access_key2"))->Get<std::string>(), "access_value2_a", TEST_LOCATION);
444 DevelControl::AppendAccessibilityAttribute(check_box_button, "access_key2", "access_value2_b");
445 attributes = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
446 attributes_map = attributes.GetMap();
448 DALI_TEST_EQUALS((attributes_map->Find("access_key2"))->Get<std::string>(), "access_value2_b", TEST_LOCATION);
450 DevelControl::RemoveAccessibilityAttribute(check_box_button, "access_key2");
451 attributes = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
452 attributes_map = attributes.GetMap();
454 // In case when we are removing one of attributes the property is setting for NONE type.
455 DALI_TEST_EQUALS((attributes_map->Find("access_key2"))->GetType(), Property::NONE, TEST_LOCATION);
457 Dali::Accessibility::TestEnableSC(true);
459 auto ptr = Dali::Accessibility::Accessible::Get(check_box_button);
460 auto attribute_map_bridge = TestGetAttributes(ptr->GetAddress());
463 // Refresh the attributes since ControlAccessible::GetAttributes() might have added something
464 attributes = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
465 attributes_map = attributes.GetMap();
466 for(auto i = 0u; i < attributes_map->Count(); ++i)
467 if((attributes_map->GetValue(i)).GetType() != Property::NONE)
470 DALI_TEST_EQUALS(counter, attribute_map_bridge.size(), TEST_LOCATION);
472 for(auto it : attribute_map_bridge)
473 DALI_TEST_EQUALS((attributes_map->Find(it.first))->Get<std::string>(), it.second, TEST_LOCATION);
475 DevelControl::ClearAccessibilityAttributes(check_box_button);
476 attributes = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
477 attributes_map = attributes.GetMap();
479 position = attributes_map->Find("access_key1");
480 DALI_TEST_CHECK(!position);
482 position = attributes_map->Find("access_key2");
483 DALI_TEST_CHECK(!position);
485 Dali::Accessibility::TestEnableSC(false);
490 int UtcDaliControlReadingInfoType(void)
492 ToolkitTestApplication application;
493 auto control = Control::New();
495 auto reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
497 for(auto i = 0u; i < 4; ++i)
498 DALI_TEST_CHECK(reading_info_type[static_cast<Dali::Accessibility::ReadingInfoType>(i)]);
500 reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = false;
501 reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = false;
502 reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = false;
503 reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = false;
505 DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
507 reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
509 for(auto i = 0u; i < 4; ++i)
510 DALI_TEST_CHECK(false == reading_info_type[static_cast<Dali::Accessibility::ReadingInfoType>(i)]);
512 reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = true;
513 reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = true;
514 reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = true;
515 reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = true;
517 DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
519 auto q = control.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
522 DALI_TEST_EQUALS((z->Find("reading_info_type"))->Get<std::string>(), "name|role|description|state", TEST_LOCATION);
523 reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
524 for(auto i = 0u; i < 4; ++i)
525 DALI_TEST_CHECK(reading_info_type[static_cast<Dali::Accessibility::ReadingInfoType>(i)]);
530 int UtcDaliControlDoGesture(void)
532 ToolkitTestApplication application;
533 auto control = Control::New();
534 Dali::Accessibility::TestEnableSC(true);
536 auto accessible = Dali::Accessibility::Accessible::Get(control);
537 auto gesture_one = Dali::Accessibility::GestureInfo{Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000};
538 auto gesture_two = Dali::Accessibility::GestureInfo{Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000};
540 DALI_TEST_CHECK(!accessible->DoGesture(gesture_one));
541 DALI_TEST_CHECK(!TestDoGesture(accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000));
543 DevelControl::AccessibilityDoGestureSignal(control).Connect([](std::pair<Dali::Accessibility::GestureInfo, bool>& gesture) {
544 if(gesture.first.type == Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT)
545 gesture.second = true;
547 gesture.second = false;
550 DALI_TEST_CHECK(accessible->DoGesture(gesture_one));
551 DALI_TEST_CHECK(TestDoGesture(accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000));
553 DALI_TEST_CHECK(!accessible->DoGesture(gesture_two));
554 DALI_TEST_CHECK(!TestDoGesture(accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000));
556 Dali::Accessibility::TestEnableSC(false);
561 int UtcDaliAccessibilityRelation(void)
563 ToolkitTestApplication application;
564 Dali::Accessibility::TestEnableSC(true);
566 auto rel = Accessibility::RelationType::FLOWS_TO;
567 auto control = Control::New();
568 auto destination1 = Control::New();
569 auto destination2 = Control::New();
571 DevelControl::AppendAccessibilityRelation(control, destination1, rel);
572 auto relations = DevelControl::GetAccessibilityRelations(control);
573 DALI_TEST_EQUALS(relations.size(), 1u, TEST_LOCATION);
574 DALI_TEST_EQUALS(relations[0].mRelationType, rel, TEST_LOCATION);
575 DALI_TEST_EQUALS(relations[0].mTargets.size(), 1u, TEST_LOCATION);
577 DevelControl::AppendAccessibilityRelation(control, destination2, rel);
578 relations = DevelControl::GetAccessibilityRelations(control);
579 DALI_TEST_EQUALS(relations.size(), 1u, TEST_LOCATION);
580 DALI_TEST_EQUALS(relations[0].mRelationType, rel, TEST_LOCATION);
581 DALI_TEST_EQUALS(relations[0].mTargets.size(), 2u, TEST_LOCATION);
583 auto accessible = Dali::Accessibility::Accessible::Get(control);
584 auto accessible_destination1 = Dali::Accessibility::Accessible::Get(destination1);
585 auto accessible_destination2 = Dali::Accessibility::Accessible::Get(destination2);
586 auto relationset = accessible->GetRelationSet();
588 DALI_TEST_CHECK(relationset[0].mRelationType == rel);
589 DALI_TEST_CHECK(relationset[0].mTargets[0] == accessible_destination1 || relationset[0].mTargets[1] == accessible_destination1);
590 DALI_TEST_CHECK(relationset[0].mTargets[0] == accessible_destination2 || relationset[0].mTargets[1] == accessible_destination2);
592 auto relationset_bridge = TestGetRelationSet(accessible->GetAddress());
593 DALI_TEST_CHECK(static_cast<uint32_t>(relationset[0].mRelationType) == std::get<0>(relationset_bridge[0]));
595 DALI_TEST_CHECK(relationset[0].mTargets[0]->GetAddress() == std::get<1>(relationset_bridge[0])[0] || relationset[0].mTargets[1]->GetAddress() == std::get<1>(relationset_bridge[0])[0]);
596 DALI_TEST_CHECK(relationset[0].mTargets[0]->GetAddress() == std::get<1>(relationset_bridge[0])[1] || relationset[0].mTargets[1]->GetAddress() == std::get<1>(relationset_bridge[0])[1]);
598 DevelControl::RemoveAccessibilityRelation(control, destination2, rel);
599 relations = DevelControl::GetAccessibilityRelations(control);
600 DALI_TEST_EQUALS(relations.size(), 1u, TEST_LOCATION);
601 DALI_TEST_EQUALS(relations[0].mTargets.size(), 1u, TEST_LOCATION);
603 DevelControl::ClearAccessibilityRelations(control);
604 relations = DevelControl::GetAccessibilityRelations(control);
605 DALI_TEST_EQUALS(relations.size(), 0u, TEST_LOCATION);
607 Dali::Accessibility::TestEnableSC(false);
612 int UtcDaliAccessibilityParentChildren(void)
614 ToolkitTestApplication application;
615 Dali::Accessibility::TestEnableSC(true);
617 auto parent = Control::New();
618 auto child_1 = Control::New();
619 auto child_2 = Control::New();
621 auto parent_accessible = Dali::Accessibility::Accessible::Get(parent);
622 auto child_1_accessible = Dali::Accessibility::Accessible::Get(child_1);
623 auto child_2_accessible = Dali::Accessibility::Accessible::Get(child_2);
625 auto children = TestGetChildren(parent_accessible->GetAddress());
626 DALI_TEST_EQUALS(children.size(), 0, TEST_LOCATION);
630 TestGetIndexInParent(child_1_accessible->GetAddress());
631 DALI_ABORT("Object has parent, test abort");
633 catch(TestDBusWrapper::error&)
639 TestGetChildAtIndex(parent_accessible->GetAddress(), -1);
640 DALI_ABORT("Positive index, test abort");
642 catch(TestDBusWrapper::error&)
646 DALI_TEST_EQUALS(parent_accessible->GetChildCount(), 0, TEST_LOCATION);
650 child_1_accessible->GetIndexInParent();
651 DALI_ABORT("Object has parent, test abort");
653 catch(const std::domain_error&)
660 children = TestGetChildren(parent_accessible->GetAddress());
661 DALI_TEST_EQUALS(children.size(), 2, TEST_LOCATION);
663 DALI_TEST_EQUALS(parent_accessible->GetAddress(), TestGetParent(child_1_accessible->GetAddress()), TEST_LOCATION);
664 DALI_TEST_EQUALS(child_2_accessible->GetAddress(), TestGetChildAtIndex(parent_accessible->GetAddress(), TestGetIndexInParent(child_2_accessible->GetAddress())), TEST_LOCATION);
666 DALI_TEST_EQUALS(parent_accessible, child_1_accessible->GetParent(), TEST_LOCATION);
667 DALI_TEST_EQUALS(child_2_accessible, parent_accessible->GetChildAtIndex(child_2_accessible->GetIndexInParent()), TEST_LOCATION);
669 Dali::Accessibility::TestEnableSC(false);
674 int UtcDaliAccessibilityGetLayer(void)
676 ToolkitTestApplication application;
678 Dali::Accessibility::TestEnableSC(true);
680 auto control = Control::New();
681 auto accessible_obj = Dali::Accessibility::Accessible::Get(control);
682 auto accessible_component = dynamic_cast<Dali::Accessibility::Component*>(accessible_obj);
683 DALI_TEST_CHECK(accessible_component);
684 DALI_TEST_EQUALS(Dali::Accessibility::ComponentLayer::WINDOW, accessible_component->GetLayer(), TEST_LOCATION);
685 DALI_TEST_EQUALS(Dali::Accessibility::ComponentLayer::WINDOW, TestGetLayer(accessible_component->GetAddress()), TEST_LOCATION);
687 Dali::Accessibility::TestEnableSC(false);
692 int UtcDaliAccessibilityGrabFocus(void)
694 ToolkitTestApplication application;
696 Dali::Accessibility::TestEnableSC(true);
698 auto controla = Control::New();
699 auto controlb = Control::New();
701 Stage::GetCurrent().Add(controla);
702 Stage::GetCurrent().Add(controlb);
704 controla.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
705 controlb.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
707 auto a = Dali::Accessibility::Accessible::Get(controla);
708 auto b = Dali::Accessibility::Accessible::Get(controlb);
710 auto a_component = dynamic_cast<Dali::Accessibility::Component*>(a);
711 auto b_component = dynamic_cast<Dali::Accessibility::Component*>(b);
713 auto states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a_component->GetAddress())};
714 auto states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b_component->GetAddress())};
716 DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::FOCUSED]);
717 DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::FOCUSED]);
719 DALI_TEST_CHECK(a_component->GrabFocus());
721 states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a_component->GetAddress())};
722 states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b_component->GetAddress())};
724 DALI_TEST_CHECK(states_by_bridge_a[Dali::Accessibility::State::FOCUSED]);
725 DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::FOCUSED]);
727 DALI_TEST_CHECK(TestGrabFocus(b_component->GetAddress()));
729 states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a_component->GetAddress())};
730 states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b_component->GetAddress())};
732 DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::FOCUSED]);
733 DALI_TEST_CHECK(states_by_bridge_b[Dali::Accessibility::State::FOCUSED]);
735 Dali::Accessibility::TestEnableSC(false);
740 int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch(void)
742 ToolkitTestApplication application;
743 tet_infoline("UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch");
745 Dali::Accessibility::TestEnableSC(true);
747 auto control = Control::New();
748 Stage::GetCurrent().GetRootLayer().Add(control);
750 auto window = Dali::DevelWindow::Get(control);
751 DALI_TEST_CHECK(window);
753 //window.SetPosition({0,0});
754 DevelWindow::SetPositionSize(window, PositionSize(0, 0, 480, 240));
756 control.SetProperty(Actor::Property::POSITION, Vector3(10, 10, 100));
757 control.SetProperty(Actor::Property::SIZE, Vector2(10, 10));
759 application.SendNotification();
760 application.Render(1);
762 auto a = Dali::Accessibility::Accessible::Get(control);
763 auto a_component = dynamic_cast<Dali::Accessibility::Component*>(a);
765 auto extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::SCREEN);
766 DALI_TEST_EQUALS(extents.x, 5.0f, TEST_LOCATION);
767 DALI_TEST_EQUALS(extents.y, 5.0f, TEST_LOCATION);
768 DALI_TEST_EQUALS(extents.height, 10.0f, TEST_LOCATION);
769 DALI_TEST_EQUALS(extents.width, 10.0f, TEST_LOCATION);
771 auto bridge_extents = TestGetExtents(a_component->GetAddress(), Dali::Accessibility::CoordinateType::SCREEN);
772 DALI_TEST_EQUALS(std::get<0>(bridge_extents), 5, TEST_LOCATION);
773 DALI_TEST_EQUALS(std::get<1>(bridge_extents), 5, TEST_LOCATION);
774 DALI_TEST_EQUALS(std::get<2>(bridge_extents), 10, TEST_LOCATION);
775 DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
777 extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::WINDOW);
778 DALI_TEST_EQUALS(extents.x, 5.0f, TEST_LOCATION);
779 DALI_TEST_EQUALS(extents.y, 5.0f, TEST_LOCATION);
780 DALI_TEST_EQUALS(extents.height, 10.0f, TEST_LOCATION);
781 DALI_TEST_EQUALS(extents.width, 10.0f, TEST_LOCATION);
783 bridge_extents = TestGetExtents(a_component->GetAddress(), Dali::Accessibility::CoordinateType::WINDOW);
784 DALI_TEST_EQUALS(std::get<0>(bridge_extents), 5, TEST_LOCATION);
785 DALI_TEST_EQUALS(std::get<1>(bridge_extents), 5, TEST_LOCATION);
786 DALI_TEST_EQUALS(std::get<2>(bridge_extents), 10, TEST_LOCATION);
787 DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
789 control.SetProperty(Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false);
790 application.SendNotification();
791 application.Render(1);
793 extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::SCREEN);
794 DALI_TEST_EQUALS(extents.x, 10.0f, TEST_LOCATION);
795 DALI_TEST_EQUALS(extents.y, 10.0f, TEST_LOCATION);
796 DALI_TEST_EQUALS(extents.height, 10.0f, TEST_LOCATION);
797 DALI_TEST_EQUALS(extents.width, 10.0f, TEST_LOCATION);
799 bridge_extents = TestGetExtents(a_component->GetAddress(), Dali::Accessibility::CoordinateType::SCREEN);
800 DALI_TEST_EQUALS(std::get<0>(bridge_extents), 10, TEST_LOCATION);
801 DALI_TEST_EQUALS(std::get<1>(bridge_extents), 10, TEST_LOCATION);
802 DALI_TEST_EQUALS(std::get<2>(bridge_extents), 10, TEST_LOCATION);
803 DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
805 extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::WINDOW);
806 DALI_TEST_EQUALS(extents.x, 10.0f, TEST_LOCATION);
807 DALI_TEST_EQUALS(extents.y, 10.0f, TEST_LOCATION);
808 DALI_TEST_EQUALS(extents.height, 10.0f, TEST_LOCATION);
809 DALI_TEST_EQUALS(extents.width, 10.0f, TEST_LOCATION);
811 bridge_extents = TestGetExtents(a_component->GetAddress(), Dali::Accessibility::CoordinateType::WINDOW);
812 DALI_TEST_EQUALS(std::get<0>(bridge_extents), 10, TEST_LOCATION);
813 DALI_TEST_EQUALS(std::get<1>(bridge_extents), 10, TEST_LOCATION);
814 DALI_TEST_EQUALS(std::get<2>(bridge_extents), 10, TEST_LOCATION);
815 DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
817 Dali::Accessibility::TestEnableSC(false);
822 int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionDoNotMatch(void)
824 ToolkitTestApplication application;
826 Dali::Accessibility::TestEnableSC(true);
828 auto control = Control::New();
829 Stage::GetCurrent().GetRootLayer().Add(control);
830 auto window = Dali::DevelWindow::Get(control);
831 //window.SetPosition({33,33});
832 DevelWindow::SetPositionSize(window, PositionSize(33, 33, 480, 240));
834 control.SetProperty(Actor::Property::POSITION, Vector3(10, 10, 100));
835 control.SetProperty(Actor::Property::SIZE, Vector2(10, 10));
837 application.SendNotification();
838 application.Render(1);
840 auto a = Dali::Accessibility::Accessible::Get(control);
841 auto a_component = dynamic_cast<Dali::Accessibility::Component*>(a);
843 auto extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::SCREEN);
844 DALI_TEST_EQUALS(extents.x, 38.0f, TEST_LOCATION);
845 DALI_TEST_EQUALS(extents.y, 38.0f, TEST_LOCATION);
846 DALI_TEST_EQUALS(extents.height, 10.0f, TEST_LOCATION);
847 DALI_TEST_EQUALS(extents.width, 10.0f, TEST_LOCATION);
849 auto bridge_extents = TestGetExtents(a_component->GetAddress(), Dali::Accessibility::CoordinateType::SCREEN);
850 DALI_TEST_EQUALS(std::get<0>(bridge_extents), 38, TEST_LOCATION);
851 DALI_TEST_EQUALS(std::get<1>(bridge_extents), 38, TEST_LOCATION);
852 DALI_TEST_EQUALS(std::get<2>(bridge_extents), 10, TEST_LOCATION);
853 DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
855 extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::WINDOW);
856 DALI_TEST_EQUALS(extents.x, 5.0f, TEST_LOCATION);
857 DALI_TEST_EQUALS(extents.y, 5.0f, TEST_LOCATION);
858 DALI_TEST_EQUALS(extents.height, 10.0f, TEST_LOCATION);
859 DALI_TEST_EQUALS(extents.width, 10.0f, TEST_LOCATION);
861 bridge_extents = TestGetExtents(a_component->GetAddress(), Dali::Accessibility::CoordinateType::WINDOW);
862 DALI_TEST_EQUALS(std::get<0>(bridge_extents), 5, TEST_LOCATION);
863 DALI_TEST_EQUALS(std::get<1>(bridge_extents), 5, TEST_LOCATION);
864 DALI_TEST_EQUALS(std::get<2>(bridge_extents), 10, TEST_LOCATION);
865 DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
867 control.SetProperty(Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false);
868 application.SendNotification();
869 application.Render(1);
871 extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::SCREEN);
872 DALI_TEST_EQUALS(extents.x, 43.0f, TEST_LOCATION);
873 DALI_TEST_EQUALS(extents.y, 43.0f, TEST_LOCATION);
874 DALI_TEST_EQUALS(extents.height, 10.0f, TEST_LOCATION);
875 DALI_TEST_EQUALS(extents.width, 10.0f, TEST_LOCATION);
877 bridge_extents = TestGetExtents(a_component->GetAddress(), Dali::Accessibility::CoordinateType::SCREEN);
878 DALI_TEST_EQUALS(std::get<0>(bridge_extents), 43, TEST_LOCATION);
879 DALI_TEST_EQUALS(std::get<1>(bridge_extents), 43, TEST_LOCATION);
880 DALI_TEST_EQUALS(std::get<2>(bridge_extents), 10, TEST_LOCATION);
881 DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
883 extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::WINDOW);
884 DALI_TEST_EQUALS(extents.x, 10.0f, TEST_LOCATION);
885 DALI_TEST_EQUALS(extents.y, 10.0f, TEST_LOCATION);
886 DALI_TEST_EQUALS(extents.height, 10.0f, TEST_LOCATION);
887 DALI_TEST_EQUALS(extents.width, 10.0f, TEST_LOCATION);
889 bridge_extents = TestGetExtents(a_component->GetAddress(), Dali::Accessibility::CoordinateType::WINDOW);
890 DALI_TEST_EQUALS(std::get<0>(bridge_extents), 10, TEST_LOCATION);
891 DALI_TEST_EQUALS(std::get<1>(bridge_extents), 10, TEST_LOCATION);
892 DALI_TEST_EQUALS(std::get<2>(bridge_extents), 10, TEST_LOCATION);
893 DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
895 Dali::Accessibility::TestEnableSC(false);
900 int UtcDaliAccessibilityGetAlpha(void)
902 ToolkitTestApplication application;
904 Dali::Accessibility::TestEnableSC(true);
906 auto control = Control::New();
907 auto a = Dali::Accessibility::Accessible::Get(control);
908 auto a_component = dynamic_cast<Dali::Accessibility::Component*>(a);
910 DALI_TEST_EQUALS(0.0, a_component->GetAlpha(), TEST_LOCATION);
911 DALI_TEST_EQUALS(0.0, TestGetAlpha(a_component->GetAddress()), TEST_LOCATION);
913 Dali::Accessibility::TestEnableSC(false);
918 int UtcDaliAccessibilityGetMdiZOrder(void)
920 ToolkitTestApplication application;
922 Dali::Accessibility::TestEnableSC(true);
924 auto control = Control::New();
925 auto a = Dali::Accessibility::Accessible::Get(control);
926 auto a_component = dynamic_cast<Dali::Accessibility::Component*>(a);
928 DALI_TEST_EQUALS(0, static_cast<int>(a_component->GetMdiZOrder()), TEST_LOCATION);
929 DALI_TEST_EQUALS(0, TestGetMdiZOrder(a_component->GetAddress()), TEST_LOCATION);
931 Dali::Accessibility::TestEnableSC(false);
936 int UtcDaliAccessibilityAction(void)
938 ToolkitTestApplication application;
940 Dali::Accessibility::TestEnableSC(true);
942 auto control = Control::New();
943 auto a = Dali::Accessibility::Accessible::Get(control);
944 auto b = dynamic_cast<Dali::Accessibility::Action*>(a);
946 std::vector<std::string> actions{"activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide"};
947 auto count = b->GetActionCount();
949 DALI_TEST_EQUALS(count, 9, TEST_LOCATION);
951 for(auto i = 0u; i < count; ++i)
953 DALI_TEST_CHECK(Dali::Accessibility::Find(actions, b->GetActionName(i)));
954 DALI_TEST_EQUALS(b->GetActionName(i), b->GetLocalizedActionName(i), TEST_LOCATION);
955 DALI_TEST_EQUALS(b->GetActionDescription(i), "", TEST_LOCATION);
956 DALI_TEST_EQUALS(b->GetActionKeyBinding(i), "", TEST_LOCATION);
959 // Empty strings should be returned for invalid indices
960 DALI_TEST_EQUALS(b->GetActionDescription(count), "", TEST_LOCATION);
961 DALI_TEST_EQUALS(b->GetActionName(count), "", TEST_LOCATION);
962 DALI_TEST_EQUALS(b->GetLocalizedActionName(count), "", TEST_LOCATION);
963 DALI_TEST_EQUALS(b->GetActionKeyBinding(count), "", TEST_LOCATION);
965 count = TestGetActionCount(b->GetAddress());
967 DALI_TEST_EQUALS(count, 9, TEST_LOCATION);
969 for(auto i = 0u; i < count; ++i)
971 DALI_TEST_CHECK(Dali::Accessibility::Find(actions, TestGetActionName(b->GetAddress(), i)));
972 DALI_TEST_EQUALS(TestGetActionName(b->GetAddress(), i), TestGetLocalizedActionName(b->GetAddress(), i), TEST_LOCATION);
973 DALI_TEST_EQUALS(TestGetActionDescription(b->GetAddress(), i), "", TEST_LOCATION);
974 DALI_TEST_EQUALS(TestGetActionKeyBinding(b->GetAddress(), i), "", TEST_LOCATION);
977 DALI_TEST_EQUALS(TestGetActionDescription(b->GetAddress(), count), "", TEST_LOCATION);
978 DALI_TEST_EQUALS(TestGetActionName(b->GetAddress(), count), "", TEST_LOCATION);
979 DALI_TEST_EQUALS(TestGetLocalizedActionName(b->GetAddress(), count), "", TEST_LOCATION);
980 DALI_TEST_EQUALS(TestGetActionKeyBinding(b->GetAddress(), count), "", TEST_LOCATION);
982 Dali::Accessibility::TestEnableSC(false);
987 int UtcDaliAccessibilityDoAction(void)
989 ToolkitTestApplication application;
991 Dali::Accessibility::TestEnableSC(true);
992 thread_local std::vector<bool> actions_done{false, false, false, false, false, false};
994 auto control = Control::New();
995 auto a = Dali::Accessibility::Accessible::Get(control);
996 auto b = dynamic_cast<Dali::Accessibility::Action*>(a);
997 std::vector<std::string> actions{"activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide"};
999 // Test calling action by name
1000 DALI_TEST_CHECK(b->DoAction(actions[2])); // ReadingSkipped
1001 DALI_TEST_CHECK(b->DoAction(actions[4])); // ReadingStopped
1002 DALI_TEST_CHECK(b->DoAction(actions[4])); // ReadingStopped
1004 // Negative test of calling action with not defined name
1005 DALI_TEST_CHECK(!b->DoAction("undefined"));
1007 DevelControl::AccessibilityReadingSkippedSignal(control).Connect([]() {
1008 actions_done[1] = true;
1010 DevelControl::AccessibilityReadingCancelledSignal(control).Connect([]() {
1011 actions_done[2] = true;
1013 DevelControl::AccessibilityReadingStoppedSignal(control).Connect([]() {
1014 actions_done[3] = true;
1016 DevelControl::AccessibilityReadingPausedSignal(control).Connect([]() {
1017 actions_done[4] = true;
1019 DevelControl::AccessibilityReadingResumedSignal(control).Connect([]() {
1020 actions_done[5] = true;
1022 DevelControl::AccessibilityActivateSignal(control).Connect([]() {
1023 actions_done[0] = true;
1026 // Test calling action by index
1027 DALI_TEST_CHECK(b->DoAction(1));
1028 DALI_TEST_CHECK(b->DoAction(2));
1029 DALI_TEST_CHECK(b->DoAction(3));
1030 DALI_TEST_CHECK(b->DoAction(4));
1031 DALI_TEST_CHECK(b->DoAction(5));
1032 DALI_TEST_CHECK(b->DoAction(6));
1034 for(auto i = 0u; i < actions_done.size(); ++i)
1036 DALI_TEST_CHECK(actions_done[i]);
1037 actions_done[i] = false;
1040 DALI_TEST_CHECK(TestDoAction(b->GetAddress(), 1));
1041 DALI_TEST_CHECK(TestDoAction(b->GetAddress(), 2));
1042 DALI_TEST_CHECK(TestDoAction(b->GetAddress(), 3));
1043 DALI_TEST_CHECK(TestDoAction(b->GetAddress(), 4));
1044 DALI_TEST_CHECK(TestDoAction(b->GetAddress(), 5));
1045 DALI_TEST_CHECK(TestDoAction(b->GetAddress(), 6));
1047 for(auto i = 0u; i < actions_done.size(); ++i)
1049 DALI_TEST_CHECK(actions_done[i]);
1050 actions_done[i] = false;
1053 DALI_TEST_CHECK(TestDoAction(b->GetAddress(), actions[1]));
1054 DALI_TEST_CHECK(TestDoAction(b->GetAddress(), actions[2]));
1055 DALI_TEST_CHECK(TestDoAction(b->GetAddress(), actions[3]));
1056 DALI_TEST_CHECK(TestDoAction(b->GetAddress(), actions[4]));
1057 DALI_TEST_CHECK(TestDoAction(b->GetAddress(), actions[5]));
1058 DALI_TEST_CHECK(TestDoAction(b->GetAddress(), actions[6]));
1060 for(auto i = 0u; i < actions_done.size(); ++i)
1061 DALI_TEST_CHECK(actions_done[i]);
1063 Dali::Accessibility::TestEnableSC(false);
1068 void TestVoidCallback()
1072 int UtcDaliAccessibilitySignals(void)
1074 ToolkitTestApplication application;
1075 ConnectionTracker connectionTracker;
1076 Control control = Control::New();
1078 DALI_TEST_CHECK(DevelControl::AccessibilityGetNameSignal(control).Empty());
1079 control.ConnectSignal(&connectionTracker, "getName", &TestVoidCallback);
1080 DALI_TEST_CHECK(!DevelControl::AccessibilityGetNameSignal(control).Empty());
1082 DALI_TEST_CHECK(DevelControl::AccessibilityGetDescriptionSignal(control).Empty());
1083 control.ConnectSignal(&connectionTracker, "getDescription", &TestVoidCallback);
1084 DALI_TEST_CHECK(!DevelControl::AccessibilityGetDescriptionSignal(control).Empty());
1086 DALI_TEST_CHECK(DevelControl::AccessibilityDoGestureSignal(control).Empty());
1087 control.ConnectSignal(&connectionTracker, "doGesture", &TestVoidCallback);
1088 DALI_TEST_CHECK(!DevelControl::AccessibilityDoGestureSignal(control).Empty());
1093 static void Wait(ToolkitTestApplication& application)
1095 application.SendNotification();
1096 application.Render(16);
1099 int UtcDaliAccessibilityScrollToChildScrollView(void)
1101 ToolkitTestApplication application;
1102 Dali::Accessibility::TestEnableSC(true);
1104 ScrollView scrollView = ScrollView::New();
1105 application.GetScene().Add(scrollView);
1107 PushButton actorA = PushButton::New();
1108 const Dali::Vector3 positionA = Vector3(100.0f, 400.0f, 0.0f);
1109 actorA.SetProperty(Dali::Actor::Property::POSITION, positionA);
1110 scrollView.Add(actorA);
1112 PushButton actorB = PushButton::New();
1113 const Dali::Vector3 positionB = Vector3(500.0f, 200.0f, 0.0f);
1114 actorB.SetProperty(Dali::Actor::Property::POSITION, positionB);
1115 scrollView.Add(actorB);
1117 TableView tableView = TableView::New(2, 2); // 2 by 2 grid.
1118 tableView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
1119 scrollView.Add(tableView);
1121 PushButton actorC = PushButton::New();
1122 actorC.SetProperty(Actor::Property::SIZE, Vector2(50.0f, 50.0f));
1123 tableView.AddChild(actorC, TableView::CellPosition(0, 0));
1125 PushButton actorD = PushButton::New();
1126 application.GetScene().Add(actorD);
1130 auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(scrollView));
1131 DALI_TEST_CHECK(accessibleParent);
1132 auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorA));
1133 DALI_TEST_CHECK(accessibleA);
1134 auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorB));
1135 DALI_TEST_CHECK(accessibleB);
1136 auto* accessibleC = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorC));
1137 DALI_TEST_CHECK(accessibleC);
1139 accessibleA->GrabHighlight(); // == scrollView.ScrollTo(actorA)
1141 accessibleB->GrabHighlight(); // == scrollView.ScrollTo(actorB)
1144 // scrollView is ancestor of actorC
1145 // This should work without a crash
1146 accessibleC->GrabHighlight(); // == scrollView.ScrollTo(actorC)
1149 // negative testcase calling ScrollToChild using non-child actor
1150 accessibleParent->ScrollToChild(actorD);
1152 Dali::Accessibility::TestEnableSC(false);
1158 class TestItemFactory : public ItemFactory
1165 unsigned int GetNumberOfItems() override
1170 Dali::Actor NewItem(unsigned int itemId) override
1172 return TextLabel::New(std::to_string(itemId));
1177 int UtcDaliAccessibilityScrollToChildItemView(void)
1179 ToolkitTestApplication application;
1180 Dali::Accessibility::TestEnableSC(true);
1182 TestItemFactory factory;
1183 ItemView view = ItemView::New(factory);
1184 Dali::Vector3 vec(480.0f, 800.0f, 0.0f);
1185 ItemLayoutPtr layout = DefaultItemLayout::New(DefaultItemLayout::DEPTH);
1187 view.AddLayout(*layout);
1188 view.SetProperty(Actor::Property::SIZE, vec);
1190 application.GetScene().Add(view);
1191 layout->SetOrientation(ControlOrientation::Down);
1192 view.ActivateLayout(0, vec, 0.0f);
1196 auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view));
1197 DALI_TEST_CHECK(accessibleParent);
1198 auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view.GetItem(0)));
1199 DALI_TEST_CHECK(accessibleA);
1200 auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view.GetItem(1)));
1201 DALI_TEST_CHECK(accessibleB);
1203 accessibleA->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorA))
1205 accessibleB->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorB))
1208 Dali::Accessibility::TestEnableSC(false);
1212 int UtcDaliAccessibilityScrollToChildNonScrollable(void)
1214 ToolkitTestApplication application;
1215 Dali::Accessibility::TestEnableSC(true);
1217 TextLabel label = TextLabel::New("123");
1219 auto* accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(label));
1220 DALI_TEST_CHECK(accessible);
1222 DALI_TEST_EQUALS(accessible->IsScrollable(), false, TEST_LOCATION);
1223 DALI_TEST_EQUALS(accessible->ScrollToChild({}), false, TEST_LOCATION);
1224 DALI_TEST_EQUALS(accessible->GetInternalActor(), label, TEST_LOCATION);
1226 Dali::Accessibility::TestEnableSC(false);
1230 int UtcDaliAccessibilityCheckHighlight(void)
1232 ToolkitTestApplication application;
1233 Dali::Accessibility::TestEnableSC(true);
1234 Dali::Accessibility::TestResetMoveOutedCalled();
1236 // Make precondition two children exist in parent area
1237 PushButton parentButton = PushButton::New();
1238 parentButton.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
1239 parentButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1240 parentButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1241 parentButton.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f));
1242 parentButton.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 200.0f));
1243 application.GetScene().Add(parentButton);
1245 PushButton buttonA = PushButton::New();
1246 buttonA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1247 buttonA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1248 buttonA.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f));
1249 buttonA.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f));
1250 parentButton.Add(buttonA);
1252 PushButton buttonB = PushButton::New();
1253 buttonB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1254 buttonB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1255 buttonB.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f));
1256 buttonB.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f));
1257 parentButton.Add(buttonB);
1260 // Set highlight to first child (A) to enable movement tracking
1261 auto* accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonA));
1262 DALI_TEST_CHECK(accessible);
1263 accessible->GrabHighlight();
1266 // Move first child (A) out of parent area through the parent's area top edge - single move outed event expected for A object and OUTGOING_TOP_LEFT direction
1267 buttonA.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, -200.0f));
1269 // Need one more notificaiton to get correct updated position
1270 application.SendNotification();
1271 DALI_TEST_EQUALS(true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION);
1273 // Reset verdict data
1274 Dali::Accessibility::TestResetMoveOutedCalled();
1276 // Move first child (A) outside of parent area (both start and end position are outside of parent area) - no move outed event expected for A object
1277 buttonA.SetProperty(Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, -300.0f));
1279 // Need one more notificaiton to get correct updated position
1280 application.SendNotification();
1281 DALI_TEST_EQUALS(false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION);
1283 // Reset verdict data
1284 Dali::Accessibility::TestResetMoveOutedCalled();
1286 // Set highlight to second child (B) to enable movement tracking
1287 accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonB));
1288 DALI_TEST_CHECK(accessible);
1289 accessible->GrabHighlight();
1292 // Move second child (B) inside of parent area (both start and end position are inside of parent area) - no move outed event expected for B object
1293 // B: (0,100) --> (0, 50)
1294 buttonB.SetProperty(Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 50.0f));
1296 // Need one more notificaiton to get correct updated position
1297 application.SendNotification();
1298 DALI_TEST_EQUALS(false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION);
1300 // Reset verdict data
1301 Dali::Accessibility::TestResetMoveOutedCalled();
1303 // Move second child (B) out of parent area through the parent's area right edge - single move outed event expected for B object and OUTGOING_BOTTOM_RIGHT direction
1304 buttonB.SetProperty(Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f));
1306 // Need one more notificaiton to get correct updated position
1307 application.SendNotification();
1308 DALI_TEST_EQUALS(true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION);
1310 // Reset verdict data
1311 Dali::Accessibility::TestResetMoveOutedCalled();
1313 // Move second child (B) back into parent area (start position is outside but end position is inside of parent area) - no move outed event expected for B object
1314 // B: (300,100) --> (0, 100)
1315 buttonB.SetProperty(Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f));
1317 // Need one more seding notificaiton to get correct updated position
1318 application.SendNotification();
1319 DALI_TEST_EQUALS(false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION);
1321 // Reset verdict data
1322 Dali::Accessibility::TestResetMoveOutedCalled();
1324 // Disable movement tracking on B by giving highlight to A
1325 accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonA));
1326 DALI_TEST_CHECK(accessible);
1327 accessible->GrabHighlight();
1330 // Move B (untracked) out of parent area through the parent's area right edge - no move outed event expected for B object
1331 // B: (0,100) --> (300, 100)
1332 buttonB.SetProperty(Dali::Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f));
1334 // Need one more seding notificaiton to get correct updated position
1335 application.SendNotification();
1336 DALI_TEST_EQUALS(false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION);
1338 Dali::Accessibility::TestEnableSC(false);
1342 int UtcDaliWebViewAccessible(void)
1344 ToolkitTestApplication application;
1346 auto webView = Dali::Toolkit::WebView::New();
1347 auto webViewAccessible = Dali::Accessibility::Accessible::Get(webView);
1349 DALI_TEST_CHECK(webViewAccessible);
1351 auto children = webViewAccessible->GetChildren();
1353 DALI_TEST_CHECK(children.empty());
1355 // Enables accessibility
1356 Dali::Accessibility::TestEnableSC(true);
1358 // Assuming the webengine lazy sets accessibility address on LoadUrl
1359 children = webViewAccessible->GetChildren();
1360 DALI_TEST_CHECK(children.empty());
1362 // our test webengine sets accessibility address here
1363 webView.LoadUrl("http://www.somewhere.valid1.com");
1365 children = webViewAccessible->GetChildren();
1366 DALI_TEST_EQUALS(children.size(), 1u, TEST_LOCATION);
1368 auto* child = children[0];
1370 DALI_TEST_CHECK(child);
1371 DALI_TEST_CHECK(child->IsProxy());
1372 DALI_TEST_EQUALS(child->GetParent(), webViewAccessible, TEST_LOCATION);
1374 auto address = child->GetAddress();
1376 DALI_TEST_CHECK(address);
1377 DALI_TEST_NOT_EQUALS(address.GetBus(), webViewAccessible->GetAddress().GetBus(), 0.0f, TEST_LOCATION);
1379 Dali::Accessibility::TestEnableSC(false);
1381 children = webViewAccessible->GetChildren();
1383 DALI_TEST_CHECK(children.empty());