1 #include <dali-toolkit-test-suite-utils.h>
2 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/accessibility-test-utils.h>
3 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
4 #include <dali-toolkit/dali-toolkit.h>
5 #include <dali/devel-api/adaptor-framework/accessibility.h>
6 #include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
7 #include <dali/devel-api/adaptor-framework/window-devel.h>
8 #include <dali/devel-api/atspi-interfaces/accessible.h>
9 #include <dali/devel-api/atspi-interfaces/action.h>
10 #include <dali/devel-api/atspi-interfaces/component.h>
11 #include <dali-toolkit/devel-api/controls/buttons/toggle-button.h>
12 #include <dali-toolkit/devel-api/controls/control-devel.h>
13 #include <dali-toolkit/devel-api/controls/popup/popup.h>
14 #include <dali-toolkit/devel-api/controls/table-view/table-view.h>
15 #include <dali-toolkit/devel-api/controls/web-view/web-view.h>
16 #include <dali/devel-api/actors/actor-devel.h>
17 #include <dali/devel-api/common/stage.h>
20 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
22 using namespace Dali::Toolkit;
24 void utc_dali_accessibility_controls_bridge_up_startup(void)
26 test_return_value = TET_UNDEF;
27 DBusWrapper::Install(std::unique_ptr<DBusWrapper>(new TestDBusWrapper));
30 void utc_dali_accessibility_controls_bridge_up_cleanup(void)
32 test_return_value = TET_PASS;
33 //DBusWrapper::Install({}) is a de-install
34 DBusWrapper::Install({});
38 namespace Accessibility {
39 std::ostream & operator<< (std::ostream & stream, const Address & address)
41 stream << address.ToString();
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 DevelControl::AccessibilityGetNameSignal(control).Connect( [] (std::string &accessibility_name) {
91 accessibility_name = "Accessibility_Name_With_Callback"; } );
93 DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , q->GetName(), TEST_LOCATION );
95 Dali::Accessibility::TestEnableSC(true);
97 DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , TestGetName( q->GetAddress()), TEST_LOCATION );
99 //TODO test emission of name change signal
100 Dali::Accessibility::TestEnableSC( false );
105 int UtcDaliControlAccessibilityDescription(void)
107 ToolkitTestApplication application;
109 auto control = Control::New();
111 auto q = Dali::Accessibility::Accessible::Get( control );
112 DALI_TEST_CHECK( q );
114 DALI_TEST_EQUALS( "" , q->GetDescription(), TEST_LOCATION );
116 control.SetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION, "Accessibility_Description" );
117 DALI_TEST_EQUALS( "Accessibility_Description" , q->GetDescription(), TEST_LOCATION );
119 auto property = control.GetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION ).Get<std::string>();
120 DALI_TEST_EQUALS( "Accessibility_Description", property, TEST_LOCATION );
122 DevelControl::AccessibilityGetDescriptionSignal(control).Connect( [] (std::string &accessibility_description) {
123 accessibility_description = "Accessibility_Description_With_Callback"; } );
125 DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , q->GetDescription(), TEST_LOCATION );
127 Dali::Accessibility::TestEnableSC( true );
129 DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , TestGetDescription( q->GetAddress()), TEST_LOCATION );
131 //TODO test emission of description change signal
132 Dali::Accessibility::TestEnableSC( false );
137 int UtcDaliControlAccessibilityRole(void)
139 ToolkitTestApplication application;
141 auto control = Control::New();
142 auto role_unknown = Dali::Accessibility::Role::UNKNOWN;
143 auto role_pushbutton = Dali::Accessibility::Role::PUSH_BUTTON;
145 DALI_TEST_EQUALS( role_unknown,control.GetProperty( DevelControl::Property::ACCESSIBILITY_ROLE ).Get< Dali::Accessibility::Role >(), TEST_LOCATION );
147 auto q = Dali::Accessibility::Accessible::Get( control );
148 DALI_TEST_EQUALS( role_unknown , q->GetRole(), TEST_LOCATION);
149 DALI_TEST_EQUALS( "unknown" , q->GetRoleName(), TEST_LOCATION );
151 Dali::Accessibility::TestEnableSC( true );
152 DALI_TEST_CHECK( q );
153 DALI_TEST_EQUALS( static_cast< uint32_t >( role_unknown ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
154 DALI_TEST_EQUALS( "unknown" , TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
155 DALI_TEST_EQUALS( "unknown" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
157 control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, role_pushbutton );
159 DALI_TEST_EQUALS( static_cast< uint32_t >( role_pushbutton ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
160 DALI_TEST_EQUALS( "push button" ,TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
161 DALI_TEST_EQUALS( "push button" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
163 Dali::Accessibility::TestEnableSC( false );
165 DALI_TEST_EQUALS( role_pushbutton , q->GetRole(), TEST_LOCATION);
166 DALI_TEST_EQUALS( "push button" , q->GetRoleName(), TEST_LOCATION );
171 int UtcDaliControlAccessibilityRoleToggleButton(void)
173 ToolkitTestApplication application;
175 auto control = Dali::Toolkit::ToggleButton::New();
176 auto button = Dali::Accessibility::Role::TOGGLE_BUTTON;
178 control.SetProperty(Toolkit::ToggleButton::Property::TOOLTIPS,
179 Property::Array{"option1", "option2"});
181 Dali::Accessibility::TestEnableSC( true );
183 control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, button );
184 auto q = Dali::Accessibility::Accessible::Get( control );
186 DALI_TEST_EQUALS( button , q->GetRole(), TEST_LOCATION);
187 DALI_TEST_EQUALS( "toggle button" , q->GetRoleName(), TEST_LOCATION );
189 Dali::Accessibility::States states = q->GetStates();
190 DALI_TEST_EQUALS( true , (bool)states[Dali::Accessibility::State::VISIBLE], TEST_LOCATION);
192 DALI_TEST_EQUALS( "option1", q->GetDescription(), TEST_LOCATION );
194 auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
198 control.SetProperty( Toolkit::Button::Property::LABEL, "ToggleButton2" );
199 DALI_TEST_EQUALS( "ToggleButton2", TestGetName( q->GetAddress() ), TEST_LOCATION );
201 Dali::Accessibility::TestEnableSC( false );
206 int UtcDaliControlAccessibilityButtonLabel(void)
208 ToolkitTestApplication application;
210 auto control = Dali::Toolkit::PushButton::New();
211 auto button = Dali::Accessibility::Role::PUSH_BUTTON;
213 Dali::Accessibility::TestEnableSC( true );
215 control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, button );
217 auto q = Dali::Accessibility::Accessible::Get( control );
218 auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
223 control.SetProperty( Toolkit::Button::Property::LABEL, "Button2" );
225 DALI_TEST_EQUALS( "Button2" , TestGetName( q->GetAddress() ), TEST_LOCATION );
227 Dali::Accessibility::TestEnableSC( false );
232 int UtcDaliControlAccessibilityState(void)
234 ToolkitTestApplication application;
236 auto control = Control::New();
237 auto q = Dali::Accessibility::Accessible::Get( control );
239 Dali::Accessibility::TestEnableSC( true );
241 auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
242 auto states = DevelControl::GetAccessibilityStates(control);
243 DALI_TEST_CHECK( states_by_bridge == states );
245 Dali::Accessibility::TestEnableSC( false );
250 int UtcDaliControlAccessibilityModal(void)
252 ToolkitTestApplication application;
254 auto control = Dali::Toolkit::Popup::New();
255 auto q = Dali::Accessibility::Accessible::Get( control );
257 Dali::Accessibility::TestEnableSC( true );
259 auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
260 DALI_TEST_CHECK( states_by_bridge[Dali::Accessibility::State::MODAL] );
262 Dali::Accessibility::TestEnableSC( false );
267 int UtcDaliControlAccessibilityHighlightable(void)
269 ToolkitTestApplication application;
270 auto control = Control::New();
272 auto highlightable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE);
273 DALI_TEST_EQUALS(highlightable, false, TEST_LOCATION);
275 // negative testcase - trying to set unconvertible value
276 control.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, "deadbeef");
277 highlightable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE);
278 DALI_TEST_EQUALS(highlightable, false, TEST_LOCATION);
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::HIGHLIGHTABLE ] );
287 control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
288 DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
289 DALI_TEST_EQUALS( true, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).Get< bool >(), TEST_LOCATION );
291 states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
292 DALI_TEST_CHECK( states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
294 control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false );
295 DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
296 DALI_TEST_EQUALS( false, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).Get< bool >(), TEST_LOCATION );
298 states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
299 DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
301 Dali::Accessibility::TestEnableSC( false );
306 int UtcDaliControlAccessibilityHighlightBridgeUp(void)
308 ToolkitTestApplication application;
310 auto controla = Control::New();
311 auto controlb = Control::New();
312 controla.Add(controlb);
314 controla.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
315 controlb.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
317 Dali::Accessibility::TestEnableSC( true );
319 auto accessible_a = Dali::Accessibility::Accessible::Get( controla );
320 auto accessible_b = Dali::Accessibility::Accessible::Get( controlb );
322 auto a = dynamic_cast<Dali::Accessibility::Component*>( accessible_a );
323 auto b = dynamic_cast<Dali::Accessibility::Component*>( accessible_b );
325 auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
326 auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
328 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
329 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
331 DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controla), TEST_LOCATION );
333 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
334 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
336 DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
337 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
339 DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
340 DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
342 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
343 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
345 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
346 DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
348 DALI_TEST_EQUALS( false, DevelControl::ClearAccessibilityHighlight(controla), TEST_LOCATION );
350 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
351 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::ClearAccessibilityHighlight(controlb), 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_CHECK( TestGrabHighlight( a -> GetAddress() ) );
366 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
367 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
369 DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
370 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
372 DALI_TEST_CHECK( TestGrabHighlight( b -> GetAddress() ) );
374 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
375 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
377 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
378 DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
380 DALI_TEST_CHECK( TestClearHighlight( b -> GetAddress() ) );
382 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
383 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
385 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
386 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
389 Dali::Accessibility::TestEnableSC( false );
394 int utcDaliAccessibilityControlAttributes(void)
396 ToolkitTestApplication application;
397 auto check_box_button = Toolkit::Control::New();
402 auto attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
403 auto attributes_map = attributes.GetMap();
405 auto position = attributes_map->Find( "access_key1" );
406 DALI_TEST_CHECK( !position );
408 DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key1", "access_value1" );
409 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
410 attributes_map = attributes.GetMap();
412 DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
414 DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_a" );
415 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
416 attributes_map = attributes.GetMap();
418 DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
419 DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_a", TEST_LOCATION );
421 DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_b" );
422 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
423 attributes_map = attributes.GetMap();
425 DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_b", TEST_LOCATION );
427 DevelControl::RemoveAccessibilityAttribute( check_box_button, "access_key2" );
428 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
429 attributes_map = attributes.GetMap();
431 // In case when we are removing one of attributes the property is setting for NONE type.
432 DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->GetType(), Property::NONE, TEST_LOCATION );
434 Dali::Accessibility::TestEnableSC( true );
436 auto ptr = Dali::Accessibility::Accessible::Get( check_box_button );
437 auto attribute_map_bridge = TestGetAttributes( ptr->GetAddress() );
439 for (auto i = 0u; i<attributes_map->Count();++i)
440 if((attributes_map->GetValue(i)).GetType() != Property::NONE )
443 DALI_TEST_EQUALS( counter, attribute_map_bridge.size(), TEST_LOCATION );
445 for (auto it : attribute_map_bridge)
446 DALI_TEST_EQUALS( (attributes_map->Find( it.first ))->Get<std::string>(), it.second, TEST_LOCATION );
448 DevelControl::ClearAccessibilityAttributes(check_box_button);
449 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
450 attributes_map = attributes.GetMap();
452 position = attributes_map->Find( "access_key1" );
453 DALI_TEST_CHECK( !position );
455 position = attributes_map->Find( "access_key2" );
456 DALI_TEST_CHECK( !position );
458 Dali::Accessibility::TestEnableSC( false );
463 int UtcDaliControlReadingInfoType(void)
465 ToolkitTestApplication application;
466 auto control = Control::New();
468 auto reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
470 for ( auto i = 0u; i < 4; ++i)
471 DALI_TEST_CHECK ( reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
473 reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = false;
474 reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = false;
475 reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = false;
476 reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = false;
478 DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
480 reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
482 for ( auto i = 0u; i < 4; ++i)
483 DALI_TEST_CHECK ( false == reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
485 reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = true;
486 reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = true;
487 reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = true;
488 reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = true;
490 DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
492 auto q = control.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
495 DALI_TEST_EQUALS( (z->Find( "reading_info_type" ))->Get<std::string>(), "name|role|description|state", TEST_LOCATION );
496 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 ) ]);
503 int UtcDaliControlDoGesture(void)
505 ToolkitTestApplication application;
506 auto control = Control::New();
507 Dali::Accessibility::TestEnableSC( true );
509 auto accessible = Dali::Accessibility::Accessible::Get( control );
510 auto gesture_one = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
511 auto gesture_two = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
513 DALI_TEST_CHECK( !accessible->DoGesture( gesture_one ) );
514 DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
516 DevelControl::AccessibilityDoGestureSignal(control).Connect( [] ( std::pair< Dali::Accessibility::GestureInfo, bool > &gesture ) {
517 if ( gesture.first.type == Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT )
518 gesture.second = true;
520 gesture.second = false;
523 DALI_TEST_CHECK( accessible->DoGesture( gesture_one ) );
524 DALI_TEST_CHECK( TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
526 DALI_TEST_CHECK( !accessible->DoGesture( gesture_two ) );
527 DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
529 Dali::Accessibility::TestEnableSC( false );
534 int UtcDaliAccessibilityRelation(void)
536 ToolkitTestApplication application;
537 Dali::Accessibility::TestEnableSC( true );
539 auto rel = Accessibility::RelationType::FLOWS_TO;
540 auto control = Control::New();
541 auto destination1 = Control::New();
542 auto destination2 = Control::New();
544 DevelControl::AppendAccessibilityRelation( control, destination1, rel );
545 auto relations = DevelControl::GetAccessibilityRelations(control);
546 DALI_TEST_EQUALS(relations.size(), 1u, TEST_LOCATION);
547 DALI_TEST_EQUALS(relations[0].mRelationType, rel, TEST_LOCATION);
548 DALI_TEST_EQUALS(relations[0].mTargets.size(), 1u, TEST_LOCATION);
550 DevelControl::AppendAccessibilityRelation( control, destination2, rel );
551 relations = DevelControl::GetAccessibilityRelations(control);
552 DALI_TEST_EQUALS(relations.size(), 1u, TEST_LOCATION);
553 DALI_TEST_EQUALS(relations[0].mRelationType, rel, TEST_LOCATION);
554 DALI_TEST_EQUALS(relations[0].mTargets.size(), 2u, TEST_LOCATION);
556 auto accessible = Dali::Accessibility::Accessible::Get( control );
557 auto accessible_destination1 = Dali::Accessibility::Accessible::Get( destination1 );
558 auto accessible_destination2 = Dali::Accessibility::Accessible::Get( destination2 );
559 auto relationset = accessible->GetRelationSet();
561 DALI_TEST_CHECK( relationset[0].mRelationType == rel );
562 DALI_TEST_CHECK( relationset[0].mTargets[0] == accessible_destination1 || relationset[0].mTargets[1] == accessible_destination1 );
563 DALI_TEST_CHECK( relationset[0].mTargets[0] == accessible_destination2 || relationset[0].mTargets[1] == accessible_destination2 );
565 auto relationset_bridge = TestGetRelationSet( accessible -> GetAddress() );
566 DALI_TEST_CHECK( static_cast< uint32_t >( relationset[0].mRelationType ) == std::get<0>( relationset_bridge[0] ) );
568 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] );
569 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] );
571 DevelControl::RemoveAccessibilityRelation(control, destination2, rel);
572 relations = DevelControl::GetAccessibilityRelations(control);
573 DALI_TEST_EQUALS(relations.size(), 1u, TEST_LOCATION);
574 DALI_TEST_EQUALS(relations[0].mTargets.size(), 1u, TEST_LOCATION);
576 DevelControl::ClearAccessibilityRelations(control);
577 relations = DevelControl::GetAccessibilityRelations(control);
578 DALI_TEST_EQUALS(relations.size(), 0u, TEST_LOCATION);
580 Dali::Accessibility::TestEnableSC( false );
585 int UtcDaliAccessibilityParentChildren(void)
587 ToolkitTestApplication application;
588 Dali::Accessibility::TestEnableSC( true );
590 auto parent = Control::New();
591 auto child_1 = Control::New();
592 auto child_2 = Control::New();
594 auto parent_accessible = Dali::Accessibility::Accessible::Get( parent );
595 auto child_1_accessible = Dali::Accessibility::Accessible::Get( child_1 );
596 auto child_2_accessible = Dali::Accessibility::Accessible::Get( child_2 );
598 auto children = TestGetChildren( parent_accessible -> GetAddress() );
599 DALI_TEST_EQUALS( children.size(), 0, TEST_LOCATION );
603 TestGetIndexInParent( child_1_accessible -> GetAddress() );
604 DALI_ABORT("Object has parent, test abort");
606 catch(TestDBusWrapper::error &){}
610 TestGetChildAtIndex( parent_accessible -> GetAddress(), -1 );
611 DALI_ABORT("Positive index, test abort");
613 catch(TestDBusWrapper::error &){}
615 DALI_TEST_EQUALS( parent_accessible -> GetChildCount(), 0, TEST_LOCATION );
619 child_1_accessible -> GetIndexInParent();
620 DALI_ABORT("Object has parent, test abort");
622 catch (const std::domain_error&){}
627 children = TestGetChildren( parent_accessible -> GetAddress() );
628 DALI_TEST_EQUALS( children.size(), 2, TEST_LOCATION );
630 DALI_TEST_EQUALS( parent_accessible -> GetAddress(), TestGetParent( child_1_accessible -> GetAddress() ), TEST_LOCATION );
631 DALI_TEST_EQUALS( child_2_accessible -> GetAddress(), TestGetChildAtIndex( parent_accessible -> GetAddress(), TestGetIndexInParent( child_2_accessible -> GetAddress() ) ), TEST_LOCATION );
633 DALI_TEST_EQUALS( parent_accessible, child_1_accessible -> GetParent(), TEST_LOCATION );
634 DALI_TEST_EQUALS( child_2_accessible, parent_accessible -> GetChildAtIndex( child_2_accessible -> GetIndexInParent() ) , TEST_LOCATION );
636 Dali::Accessibility::TestEnableSC( false );
641 int UtcDaliAccessibilityGetLayer(void)
643 ToolkitTestApplication application;
645 Dali::Accessibility::TestEnableSC( true );
647 auto control = Control::New();
648 auto accessible_obj = Dali::Accessibility::Accessible::Get( control );
649 auto accessible_component = dynamic_cast<Dali::Accessibility::Component*>(accessible_obj);
650 DALI_TEST_CHECK( accessible_component );
651 DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, accessible_component -> GetLayer(), TEST_LOCATION );
652 DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, TestGetLayer( accessible_component -> GetAddress() ), TEST_LOCATION );
654 Dali::Accessibility::TestEnableSC( false );
659 int UtcDaliAccessibilityGrabFocus(void)
661 ToolkitTestApplication application;
663 Dali::Accessibility::TestEnableSC( true );
665 auto controla = Control::New();
666 auto controlb = Control::New();
668 Stage::GetCurrent().Add( controla );
669 Stage::GetCurrent().Add( controlb );
671 controla.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
672 controlb.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
674 auto a = Dali::Accessibility::Accessible::Get( controla );
675 auto b = Dali::Accessibility::Accessible::Get( controlb );
677 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
678 auto b_component = dynamic_cast<Dali::Accessibility::Component*>( b );
680 auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
681 auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
683 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
684 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
686 DALI_TEST_CHECK( a_component -> GrabFocus() );
688 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
689 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
691 DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
692 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
694 DALI_TEST_CHECK( TestGrabFocus( b_component -> GetAddress() ) );
696 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
697 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
699 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
700 DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
702 Dali::Accessibility::TestEnableSC( false );
707 int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch(void)
709 ToolkitTestApplication application;
710 tet_infoline( "UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch" );
712 Dali::Accessibility::TestEnableSC( true );
714 auto control = Control::New();
715 Stage::GetCurrent().GetRootLayer().Add( control );
717 auto window = Dali::DevelWindow::Get( control );
718 DALI_TEST_CHECK( window );
720 //window.SetPosition({0,0});
721 DevelWindow::SetPositionSize( window, PositionSize( 0,0,480, 240 ) );
723 control.SetProperty( Actor::Property::POSITION, Vector3( 10, 10, 100 ) );
724 control.SetProperty( Actor::Property::SIZE, Vector2( 10, 10 ) );
726 application.SendNotification();
727 application.Render( 1 );
729 auto a = Dali::Accessibility::Accessible::Get( control );
730 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
732 auto extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
733 DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
734 DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
735 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
736 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
738 auto bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
739 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
740 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
741 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
742 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
744 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
745 DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
746 DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
747 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
748 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
750 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
751 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
752 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
753 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
754 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
756 control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false );
757 application.SendNotification();
758 application.Render( 1 );
760 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
761 DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
762 DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
763 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
764 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
766 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
767 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
768 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
769 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
770 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
772 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
773 DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
774 DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
775 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
776 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
778 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
779 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
780 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
781 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
782 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
784 Dali::Accessibility::TestEnableSC( false );
789 int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionDoNotMatch(void)
791 ToolkitTestApplication application;
793 Dali::Accessibility::TestEnableSC( true );
795 auto control = Control::New();
796 Stage::GetCurrent().GetRootLayer().Add( control );
797 auto window = Dali::DevelWindow::Get( control );
798 //window.SetPosition({33,33});
799 DevelWindow::SetPositionSize( window, PositionSize( 33,33,480, 240 ) );
801 control.SetProperty( Actor::Property::POSITION, Vector3( 10, 10, 100 ) );
802 control.SetProperty( Actor::Property::SIZE, Vector2( 10, 10 ) );
804 application.SendNotification();
805 application.Render( 1 );
807 auto a = Dali::Accessibility::Accessible::Get( control );
808 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
810 auto extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
811 DALI_TEST_EQUALS( extents.x, 38.0f, TEST_LOCATION );
812 DALI_TEST_EQUALS( extents.y, 38.0f, TEST_LOCATION );
813 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
814 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
816 auto bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
817 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 38, TEST_LOCATION );
818 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 38, TEST_LOCATION );
819 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
820 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
822 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
823 DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
824 DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
825 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
826 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
828 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
829 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
830 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
831 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
832 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
834 control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false );
835 application.SendNotification();
836 application.Render( 1 );
838 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
839 DALI_TEST_EQUALS( extents.x, 43.0f, TEST_LOCATION );
840 DALI_TEST_EQUALS( extents.y, 43.0f, TEST_LOCATION );
841 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
842 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
844 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
845 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 43, TEST_LOCATION );
846 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 43, TEST_LOCATION );
847 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
848 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
850 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
851 DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
852 DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
853 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
854 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
856 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
857 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
858 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
859 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
860 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
862 Dali::Accessibility::TestEnableSC( false );
867 int UtcDaliAccessibilityGetAlpha(void)
869 ToolkitTestApplication application;
871 Dali::Accessibility::TestEnableSC( true );
873 auto control = Control::New();
874 auto a = Dali::Accessibility::Accessible::Get( control );
875 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
877 DALI_TEST_EQUALS( 0.0, a_component -> GetAlpha(), TEST_LOCATION );
878 DALI_TEST_EQUALS( 0.0, TestGetAlpha( a_component -> GetAddress() ), TEST_LOCATION );
880 Dali::Accessibility::TestEnableSC( false );
885 int UtcDaliAccessibilityGetMdiZOrder(void)
887 ToolkitTestApplication application;
889 Dali::Accessibility::TestEnableSC( true );
891 auto control = Control::New();
892 auto a = Dali::Accessibility::Accessible::Get( control );
893 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
895 DALI_TEST_EQUALS( 0, static_cast< int >( a_component -> GetMdiZOrder() ), TEST_LOCATION );
896 DALI_TEST_EQUALS( 0, TestGetMdiZOrder( a_component -> GetAddress() ), TEST_LOCATION );
898 Dali::Accessibility::TestEnableSC( false );
903 int UtcDaliAccessibilityAction(void)
905 ToolkitTestApplication application;
907 Dali::Accessibility::TestEnableSC( true );
909 auto control = Control::New( );
910 auto a = Dali::Accessibility::Accessible::Get( control );
911 auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
913 std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
914 auto count = b -> GetActionCount();
916 DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
918 for (auto i = 0u; i<count; ++i)
920 DALI_TEST_CHECK( Dali::Accessibility::Find( actions, b -> GetActionName( i ) ) );
921 DALI_TEST_EQUALS( b -> GetActionName( i ), b -> GetLocalizedActionName( i ), TEST_LOCATION );
922 DALI_TEST_EQUALS( b -> GetActionDescription( i ), "", TEST_LOCATION );
923 DALI_TEST_EQUALS( b -> GetActionKeyBinding( i ), "", TEST_LOCATION );
926 // Empty strings should be returned for invalid indices
927 DALI_TEST_EQUALS(b->GetActionDescription(count), "", TEST_LOCATION);
928 DALI_TEST_EQUALS(b->GetActionName(count), "", TEST_LOCATION);
929 DALI_TEST_EQUALS(b->GetLocalizedActionName(count), "", TEST_LOCATION);
930 DALI_TEST_EQUALS(b->GetActionKeyBinding(count), "", TEST_LOCATION);
932 count = TestGetActionCount(b -> GetAddress());
934 DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
936 for (auto i = 0u; i<count; ++i)
938 DALI_TEST_CHECK( Dali::Accessibility::Find( actions, TestGetActionName( b->GetAddress(), i ) ) );
939 DALI_TEST_EQUALS( TestGetActionName( b->GetAddress(), i ), TestGetLocalizedActionName( b->GetAddress(), i ), TEST_LOCATION );
940 DALI_TEST_EQUALS( TestGetActionDescription( b->GetAddress(), i ), "", TEST_LOCATION );
941 DALI_TEST_EQUALS( TestGetActionKeyBinding( b->GetAddress(), i ), "", TEST_LOCATION );
944 DALI_TEST_EQUALS(TestGetActionDescription(b->GetAddress(), count), "", TEST_LOCATION);
945 DALI_TEST_EQUALS(TestGetActionName(b->GetAddress(), count), "", TEST_LOCATION);
946 DALI_TEST_EQUALS(TestGetLocalizedActionName(b->GetAddress(), count), "", TEST_LOCATION);
947 DALI_TEST_EQUALS(TestGetActionKeyBinding(b->GetAddress(), count), "", TEST_LOCATION);
949 Dali::Accessibility::TestEnableSC( false );
954 int UtcDaliAccessibilityDoAction(void)
956 ToolkitTestApplication application;
958 Dali::Accessibility::TestEnableSC( true );
959 thread_local std::vector< bool > actions_done { false, false, false, false, false, false };
961 auto control = Control::New( );
962 auto a = Dali::Accessibility::Accessible::Get( control );
963 auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
964 std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
966 // Test calling action by name
967 DALI_TEST_CHECK( b -> DoAction( actions[2] ) ); // ReadingSkipped
968 DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
969 DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
971 // Negative test of calling action with not defined name
972 DALI_TEST_CHECK( !b -> DoAction( "undefined" ) );
974 DevelControl::AccessibilityReadingSkippedSignal(control).Connect( [] () {
975 actions_done[ 1 ] = true;
977 DevelControl::AccessibilityReadingCancelledSignal(control).Connect( [] () {
978 actions_done[ 2 ] = true;
980 DevelControl::AccessibilityReadingStoppedSignal(control).Connect( [] () {
981 actions_done[ 3 ] = true;
983 DevelControl::AccessibilityReadingPausedSignal(control).Connect( [] () {
984 actions_done[ 4 ] = true;
986 DevelControl::AccessibilityReadingResumedSignal(control).Connect( [] () {
987 actions_done[ 5 ] = true;
989 DevelControl::AccessibilityActivateSignal(control).Connect( [] () {
990 actions_done[ 0 ] = true;
993 // Test calling action by index
994 DALI_TEST_CHECK( b -> DoAction( 1 ) );
995 DALI_TEST_CHECK( b -> DoAction( 2 ) );
996 DALI_TEST_CHECK( b -> DoAction( 3 ) );
997 DALI_TEST_CHECK( b -> DoAction( 4 ) );
998 DALI_TEST_CHECK( b -> DoAction( 5 ) );
999 DALI_TEST_CHECK( b -> DoAction( 6 ) );
1001 for ( auto i = 0u; i < actions_done.size(); ++i )
1003 DALI_TEST_CHECK( actions_done[ i ] );
1004 actions_done[ i ] = false;
1007 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 1 ) );
1008 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 2 ) );
1009 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 3 ) );
1010 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 4 ) );
1011 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 5 ) );
1012 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 6 ) );
1014 for ( auto i = 0u; i < actions_done.size(); ++i )
1016 DALI_TEST_CHECK( actions_done[ i ] );
1017 actions_done[ i ] = false;
1020 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 1 ] ) );
1021 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 2 ] ) );
1022 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 3 ] ) );
1023 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 4 ] ) );
1024 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 5 ] ) );
1025 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 6 ] ) );
1027 for ( auto i = 0u; i < actions_done.size(); ++i )
1028 DALI_TEST_CHECK( actions_done[ i ] );
1030 Dali::Accessibility::TestEnableSC( false );
1035 void TestVoidCallback()
1039 int UtcDaliAccessibilitySignals(void)
1041 ToolkitTestApplication application;
1042 ConnectionTracker connectionTracker;
1043 Control control = Control::New();
1045 DALI_TEST_CHECK( DevelControl::AccessibilityGetNameSignal(control).Empty() );
1046 control.ConnectSignal( &connectionTracker, "getName", &TestVoidCallback );
1047 DALI_TEST_CHECK( !DevelControl::AccessibilityGetNameSignal(control).Empty() );
1049 DALI_TEST_CHECK( DevelControl::AccessibilityGetDescriptionSignal(control).Empty() );
1050 control.ConnectSignal( &connectionTracker, "getDescription", &TestVoidCallback );
1051 DALI_TEST_CHECK( !DevelControl::AccessibilityGetDescriptionSignal(control).Empty() );
1053 DALI_TEST_CHECK( DevelControl::AccessibilityDoGestureSignal(control).Empty() );
1054 control.ConnectSignal( &connectionTracker, "doGesture", &TestVoidCallback );
1055 DALI_TEST_CHECK( !DevelControl::AccessibilityDoGestureSignal(control).Empty() );
1060 static void Wait(ToolkitTestApplication& application)
1062 application.SendNotification();
1063 application.Render(16);
1066 int UtcDaliAccessibilityScrollToChildScrollView(void)
1068 ToolkitTestApplication application;
1069 Dali::Accessibility::TestEnableSC( true );
1071 ScrollView scrollView = ScrollView::New();
1072 application.GetScene().Add( scrollView );
1074 PushButton actorA = PushButton::New();
1075 const Dali::Vector3 positionA = Vector3(100.0f, 400.0f, 0.0f);
1076 actorA.SetProperty( Dali::Actor::Property::POSITION, positionA );
1077 scrollView.Add(actorA);
1079 PushButton actorB = PushButton::New();
1080 const Dali::Vector3 positionB = Vector3(500.0f, 200.0f, 0.0f);
1081 actorB.SetProperty( Dali::Actor::Property::POSITION, positionB );
1082 scrollView.Add(actorB);
1084 TableView tableView = TableView::New( 2, 2 ); // 2 by 2 grid.
1085 tableView.SetProperty( Actor::Property::SIZE, Vector2(100.0f, 100.0f) );
1086 scrollView.Add(tableView);
1088 PushButton actorC = PushButton::New();
1089 actorC.SetProperty( Actor::Property::SIZE, Vector2(50.0f, 50.0f) );
1090 tableView.AddChild( actorC, TableView::CellPosition( 0, 0 ) );
1092 PushButton actorD = PushButton::New();
1093 application.GetScene().Add( actorD );
1097 auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(scrollView));
1098 DALI_TEST_CHECK(accessibleParent);
1099 auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorA));
1100 DALI_TEST_CHECK(accessibleA);
1101 auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorB));
1102 DALI_TEST_CHECK(accessibleB);
1103 auto* accessibleC = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorC));
1104 DALI_TEST_CHECK(accessibleC);
1106 accessibleA->GrabHighlight(); // == scrollView.ScrollTo(actorA)
1108 accessibleB->GrabHighlight(); // == scrollView.ScrollTo(actorB)
1111 // scrollView is ancestor of actorC
1112 // This should work without a crash
1113 accessibleC->GrabHighlight(); // == scrollView.ScrollTo(actorC)
1116 // negative testcase calling ScrollToChild using non-child actor
1117 accessibleParent->ScrollToChild(actorD);
1119 Dali::Accessibility::TestEnableSC( false );
1124 class TestItemFactory : public ItemFactory
1131 unsigned int GetNumberOfItems() override
1136 Dali::Actor NewItem(unsigned int itemId) override
1138 return TextLabel::New(std::to_string(itemId));
1143 int UtcDaliAccessibilityScrollToChildItemView(void)
1145 ToolkitTestApplication application;
1146 Dali::Accessibility::TestEnableSC( true );
1148 TestItemFactory factory;
1149 ItemView view = ItemView::New(factory);
1150 Dali::Vector3 vec(480.0f, 800.0f, 0.0f);
1151 ItemLayoutPtr layout = DefaultItemLayout::New( DefaultItemLayout::DEPTH );
1153 view.AddLayout(*layout);
1154 view.SetProperty( Actor::Property::SIZE, vec );
1156 application.GetScene().Add(view);
1157 layout->SetOrientation(ControlOrientation::Down);
1158 view.ActivateLayout(0, vec, 0.0f);
1162 auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view));
1163 DALI_TEST_CHECK(accessibleParent);
1164 auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view.GetItem(0)));
1165 DALI_TEST_CHECK(accessibleA);
1166 auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view.GetItem(1)));
1167 DALI_TEST_CHECK(accessibleB);
1169 accessibleA->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorA))
1171 accessibleB->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorB))
1174 Dali::Accessibility::TestEnableSC( false );
1178 int UtcDaliAccessibilityScrollToChildNonScrollable(void)
1180 ToolkitTestApplication application;
1181 Dali::Accessibility::TestEnableSC( true );
1183 TextLabel label = TextLabel::New("123");
1185 auto* accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(label));
1186 DALI_TEST_CHECK(accessible);
1188 DALI_TEST_EQUALS(accessible->IsScrollable(), false, TEST_LOCATION);
1189 DALI_TEST_EQUALS(accessible->ScrollToChild({}), false, TEST_LOCATION);
1190 DALI_TEST_EQUALS(accessible->GetInternalActor(), label, TEST_LOCATION);
1192 Dali::Accessibility::TestEnableSC( false );
1196 int UtcDaliAccessibilityCheckHighlight(void)
1198 ToolkitTestApplication application;
1199 Dali::Accessibility::TestEnableSC( true );
1200 Dali::Accessibility::TestResetMoveOutedCalled();
1202 // Make precondition two children exist in parent area
1203 PushButton parentButton = PushButton::New();
1204 parentButton.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
1205 parentButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1206 parentButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1207 parentButton.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f));
1208 parentButton.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 200.0f));
1209 application.GetScene().Add( parentButton );
1211 PushButton buttonA = PushButton::New();
1212 buttonA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1213 buttonA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1214 buttonA.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f));
1215 buttonA.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f));
1216 parentButton.Add(buttonA);
1218 PushButton buttonB = PushButton::New();
1219 buttonB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1220 buttonB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1221 buttonB.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f));
1222 buttonB.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f));
1223 parentButton.Add(buttonB);
1226 // Set highlight to first child (A) to enable movement tracking
1227 auto* accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonA));
1228 DALI_TEST_CHECK(accessible);
1229 accessible->GrabHighlight();
1232 // 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
1233 buttonA.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, -200.0f));
1235 // Need one more notificaiton to get correct updated position
1236 application.SendNotification();
1237 DALI_TEST_EQUALS( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1239 // Reset verdict data
1240 Dali::Accessibility::TestResetMoveOutedCalled();
1242 // 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
1243 buttonA.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, -300.0f) );
1245 // Need one more notificaiton to get correct updated position
1246 application.SendNotification();
1247 DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1249 // Reset verdict data
1250 Dali::Accessibility::TestResetMoveOutedCalled();
1252 // Set highlight to second child (B) to enable movement tracking
1253 accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonB));
1254 DALI_TEST_CHECK(accessible);
1255 accessible->GrabHighlight();
1258 // 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
1259 // B: (0,100) --> (0, 50)
1260 buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 50.0f) );
1262 // Need one more notificaiton to get correct updated position
1263 application.SendNotification();
1264 DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1266 // Reset verdict data
1267 Dali::Accessibility::TestResetMoveOutedCalled();
1269 // 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
1270 buttonB.SetProperty(Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f));
1272 // Need one more notificaiton to get correct updated position
1273 application.SendNotification();
1274 DALI_TEST_EQUALS( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1276 // Reset verdict data
1277 Dali::Accessibility::TestResetMoveOutedCalled();
1279 // 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
1280 // B: (300,100) --> (0, 100)
1281 buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f) );
1283 // Need one more seding notificaiton to get correct updated position
1284 application.SendNotification();
1285 DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1287 // Reset verdict data
1288 Dali::Accessibility::TestResetMoveOutedCalled();
1290 // Disable movement tracking on B by giving highlight to A
1291 accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonA));
1292 DALI_TEST_CHECK(accessible);
1293 accessible->GrabHighlight();
1296 // Move B (untracked) out of parent area through the parent's area right edge - no move outed event expected for B object
1297 // B: (0,100) --> (300, 100)
1298 buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f) );
1300 // Need one more seding notificaiton to get correct updated position
1301 application.SendNotification();
1302 DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1304 Dali::Accessibility::TestEnableSC( false );
1308 int UtcDaliWebViewAccessible(void)
1310 ToolkitTestApplication application;
1312 auto webView = Dali::Toolkit::WebView::New();
1313 auto webViewAccessible = Dali::Accessibility::Accessible::Get(webView);
1315 DALI_TEST_CHECK(webViewAccessible);
1317 auto children = webViewAccessible->GetChildren();
1319 DALI_TEST_CHECK(children.empty());
1321 Dali::Accessibility::TestEnableSC(true);
1323 children = webViewAccessible->GetChildren();
1325 DALI_TEST_EQUALS(children.size(), 1u, TEST_LOCATION);
1327 auto* child = children[0];
1329 DALI_TEST_CHECK(child);
1330 DALI_TEST_CHECK(child->IsProxy());
1331 DALI_TEST_EQUALS(child->GetParent(), webViewAccessible, TEST_LOCATION);
1333 auto address = child->GetAddress();
1335 DALI_TEST_CHECK(address);
1336 DALI_TEST_NOT_EQUALS(address.GetBus(), webViewAccessible->GetAddress().GetBus(), 0.0f, TEST_LOCATION);
1338 Dali::Accessibility::TestEnableSC(false);
1340 children = webViewAccessible->GetChildren();
1342 DALI_TEST_CHECK(children.empty());