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-impl.h>
7 #include <dali-toolkit/devel-api/controls/control-devel.h>
8 #include <dali-toolkit/devel-api/controls/popup/popup.h>
9 #include <dali/devel-api/actors/actor-devel.h>
10 #include <dali/devel-api/common/stage.h>
13 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
15 using namespace Dali::Toolkit;
17 void utc_dali_accessibility_controls_bridge_up_startup(void)
19 test_return_value = TET_UNDEF;
20 DBusWrapper::Install(std::unique_ptr<DBusWrapper>(new TestDBusWrapper));
23 void utc_dali_accessibility_controls_bridge_up_cleanup(void)
25 test_return_value = TET_PASS;
26 //DBusWrapper::Install({}) is a de-install
27 DBusWrapper::Install({});
31 namespace Accessibility {
32 std::ostream & operator<< (std::ostream & stream, const Address & address)
34 stream << address.ToString();
40 int UtcDaliControlAccessibilityRaiseBridge(void)
42 DALI_TEST_CHECK(!Accessibility::IsUp());
44 ToolkitTestApplication application;
46 Dali::Accessibility::TestEnableSC(true);
48 DALI_TEST_CHECK(Accessibility::IsUp());
50 // auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
51 // for(auto &a : wr->daliMethods) {
53 // if (std::get<3>(a.first) == MethodType::Method) mt = "MethodType::Method";
54 // else if (std::get<3>(a.first) == MethodType::Getter) mt = "MethodType::Getter";
55 // else if (std::get<3>(a.first) == MethodType::Setter) mt = "MethodType::Setter";
57 // 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);
60 Dali::Accessibility::TestEnableSC(false);
62 DALI_TEST_CHECK(!Accessibility::IsUp());
67 int UtcDaliControlAccessibilityName(void)
69 ToolkitTestApplication application;
71 auto control = Control::New();
72 Stage::GetCurrent().Add( control );
74 auto q = Dali::Accessibility::Accessible::Get( control );
77 DALI_TEST_EQUALS( "" , q->GetName(), TEST_LOCATION );
79 control.SetProperty( DevelControl::Property::ACCESSIBILITY_NAME, "Accessibility_Name" );
80 DALI_TEST_EQUALS( "Accessibility_Name" , q->GetName(), TEST_LOCATION );
81 DALI_TEST_EQUALS( control.GetProperty( DevelControl::Property::ACCESSIBILITY_NAME ).Get< std::string >() , "Accessibility_Name", TEST_LOCATION );
83 DevelControl::AccessibilityGetNameSignal(control).Connect( [] (std::string &accessibility_name) {
84 accessibility_name = "Accessibility_Name_With_Callback"; } );
86 DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , q->GetName(), TEST_LOCATION );
88 Dali::Accessibility::TestEnableSC(true);
90 DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , TestGetName( q->GetAddress()), TEST_LOCATION );
92 //TODO test emission of name change signal
93 Dali::Accessibility::TestEnableSC( false );
98 int UtcDaliControlAccessibilityDescription(void)
100 ToolkitTestApplication application;
102 auto control = Control::New();
104 auto q = Dali::Accessibility::Accessible::Get( control );
105 DALI_TEST_CHECK( q );
107 DALI_TEST_EQUALS( "" , q->GetDescription(), TEST_LOCATION );
109 control.SetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION, "Accessibility_Description" );
110 DALI_TEST_EQUALS( "Accessibility_Description" , q->GetDescription(), TEST_LOCATION );
112 auto property = control.GetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION ).Get<std::string>();
113 DALI_TEST_EQUALS( "Accessibility_Description", property, TEST_LOCATION );
115 DevelControl::AccessibilityGetDescriptionSignal(control).Connect( [] (std::string &accessibility_description) {
116 accessibility_description = "Accessibility_Description_With_Callback"; } );
118 DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , q->GetDescription(), TEST_LOCATION );
120 Dali::Accessibility::TestEnableSC( true );
122 DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , TestGetDescription( q->GetAddress()), TEST_LOCATION );
124 //TODO test emission of description change signal
125 Dali::Accessibility::TestEnableSC( false );
130 int UtcDaliControlAccessibilityRole(void)
132 ToolkitTestApplication application;
134 auto control = Control::New();
135 auto role_unknown = Dali::Accessibility::Role::UNKNOWN;
136 auto role_pushbutton = Dali::Accessibility::Role::PUSH_BUTTON;
138 DALI_TEST_EQUALS( role_unknown,control.GetProperty( DevelControl::Property::ACCESSIBILITY_ROLE ).Get< Dali::Accessibility::Role >(), TEST_LOCATION );
140 auto q = Dali::Accessibility::Accessible::Get( control );
141 DALI_TEST_EQUALS( role_unknown , q->GetRole(), TEST_LOCATION);
142 DALI_TEST_EQUALS( "unknown" , q->GetRoleName(), TEST_LOCATION );
144 Dali::Accessibility::TestEnableSC( true );
145 DALI_TEST_CHECK( q );
146 DALI_TEST_EQUALS( static_cast< uint32_t >( role_unknown ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
147 DALI_TEST_EQUALS( "unknown" , TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
148 DALI_TEST_EQUALS( "unknown" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
150 control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, role_pushbutton );
152 DALI_TEST_EQUALS( static_cast< uint32_t >( role_pushbutton ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
153 DALI_TEST_EQUALS( "push button" ,TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
154 DALI_TEST_EQUALS( "push button" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
156 Dali::Accessibility::TestEnableSC( false );
158 DALI_TEST_EQUALS( role_pushbutton , q->GetRole(), TEST_LOCATION);
159 DALI_TEST_EQUALS( "push button" , q->GetRoleName(), TEST_LOCATION );
164 int UtcDaliControlAccessibilityState(void)
166 ToolkitTestApplication application;
168 auto control = Control::New();
169 auto q = Dali::Accessibility::Accessible::Get( control );
171 Dali::Accessibility::TestEnableSC( true );
173 auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
174 auto states = DevelControl::GetAccessibilityStates(control);
175 DALI_TEST_CHECK( states_by_bridge == states );
177 Dali::Accessibility::TestEnableSC( false );
182 int UtcDaliControlAccessibilityModal(void)
184 ToolkitTestApplication application;
186 auto control = Dali::Toolkit::Popup::New();
187 auto q = Dali::Accessibility::Accessible::Get( control );
189 Dali::Accessibility::TestEnableSC( true );
191 auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
192 DALI_TEST_CHECK( states_by_bridge[Dali::Accessibility::State::MODAL] );
194 Dali::Accessibility::TestEnableSC( false );
199 int UtcDaliControlAccessibilityHighlightable(void)
201 ToolkitTestApplication application;
202 auto control = Control::New();
204 auto noneset = control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE );
205 DALI_TEST_EQUALS( Property::NONE, noneset.GetType(), TEST_LOCATION );
207 // negative testcase - trying to set unconvertible value
208 control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, "deadbeef" );
209 noneset = control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE );
210 DALI_TEST_EQUALS( Property::NONE, noneset.GetType(), TEST_LOCATION );
212 auto q = Dali::Accessibility::Accessible::Get( control );
214 Dali::Accessibility::TestEnableSC( true );
216 auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
217 DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
219 control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
220 DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
221 DALI_TEST_EQUALS( true, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).Get< bool >(), TEST_LOCATION );
223 states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
224 DALI_TEST_CHECK( states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
226 control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false );
227 DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
228 DALI_TEST_EQUALS( false, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).Get< bool >(), TEST_LOCATION );
230 states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
231 DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
233 Dali::Accessibility::TestEnableSC( false );
238 int UtcDaliControlAccessibilityHighlightBridgeUp(void)
240 ToolkitTestApplication application;
242 auto controla = Control::New();
243 auto controlb = Control::New();
244 controla.Add(controlb);
246 controla.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
247 controlb.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
249 Dali::Accessibility::TestEnableSC( true );
251 auto accessible_a = Dali::Accessibility::Accessible::Get( controla );
252 auto accessible_b = Dali::Accessibility::Accessible::Get( controlb );
254 auto a = dynamic_cast<Dali::Accessibility::Component*>( accessible_a );
255 auto b = dynamic_cast<Dali::Accessibility::Component*>( accessible_b );
257 auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
258 auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
260 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
261 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
263 DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controla), TEST_LOCATION );
265 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
266 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
268 DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
269 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
271 DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
272 DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
274 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
275 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
277 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
278 DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
280 DALI_TEST_EQUALS( false, DevelControl::ClearAccessibilityHighlight(controla), TEST_LOCATION );
282 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
283 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
285 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
286 DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
288 DALI_TEST_EQUALS( true, DevelControl::ClearAccessibilityHighlight(controlb), TEST_LOCATION );
290 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
291 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
293 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
294 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
296 DALI_TEST_CHECK( TestGrabHighlight( a -> GetAddress() ) );
298 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
299 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
301 DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
302 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
304 DALI_TEST_CHECK( TestGrabHighlight( b -> GetAddress() ) );
306 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
307 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
309 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
310 DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
312 DALI_TEST_CHECK( TestClearHighlight( b -> GetAddress() ) );
314 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
315 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
317 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
318 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
321 Dali::Accessibility::TestEnableSC( false );
326 int utcDaliAccessibilityControlAttributes(void)
328 ToolkitTestApplication application;
329 auto check_box_button = Toolkit::Control::New();
334 auto attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
335 auto attributes_map = attributes.GetMap();
337 auto position = attributes_map->Find( "access_key1" );
338 DALI_TEST_CHECK( !position );
340 DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key1", "access_value1" );
341 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
342 attributes_map = attributes.GetMap();
344 DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
346 DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_a" );
347 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
348 attributes_map = attributes.GetMap();
350 DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
351 DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_a", TEST_LOCATION );
353 DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_b" );
354 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
355 attributes_map = attributes.GetMap();
357 DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_b", TEST_LOCATION );
359 DevelControl::RemoveAccessibilityAttribute( check_box_button, "access_key2" );
360 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
361 attributes_map = attributes.GetMap();
363 // In case when we are removing one of attributes the property is setting for NONE type.
364 DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->GetType(), Property::NONE, TEST_LOCATION );
366 Dali::Accessibility::TestEnableSC( true );
368 auto ptr = Dali::Accessibility::Accessible::Get( check_box_button );
369 auto attribute_map_bridge = TestGetAttributes( ptr->GetAddress() );
371 for (auto i = 0u; i<attributes_map->Count();++i)
372 if((attributes_map->GetValue(i)).GetType() != Property::NONE )
375 DALI_TEST_EQUALS( counter, attribute_map_bridge.size(), TEST_LOCATION );
377 for (auto it : attribute_map_bridge)
378 DALI_TEST_EQUALS( (attributes_map->Find( it.first ))->Get<std::string>(), it.second, TEST_LOCATION );
380 DevelControl::ClearAccessibilityAttributes(check_box_button);
381 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
382 attributes_map = attributes.GetMap();
384 position = attributes_map->Find( "access_key1" );
385 DALI_TEST_CHECK( !position );
387 position = attributes_map->Find( "access_key2" );
388 DALI_TEST_CHECK( !position );
390 Dali::Accessibility::TestEnableSC( false );
395 int UtcDaliControlReadingInfoType(void)
397 ToolkitTestApplication application;
398 auto control = Control::New();
400 auto reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
401 reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = true;
402 reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = true;
403 reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = true;
404 reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = true;
406 DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
408 auto q = control.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
411 DALI_TEST_EQUALS( (z->Find( "reading_info_type" ))->Get<std::string>(), "name|role|description|state", TEST_LOCATION );
412 reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
413 for ( auto i = 0u; i < 4; ++i)
414 DALI_TEST_CHECK ( reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
419 int UtcDaliControlDoGesture(void)
421 ToolkitTestApplication application;
422 auto control = Control::New();
423 Dali::Accessibility::TestEnableSC( true );
425 auto accessible = Dali::Accessibility::Accessible::Get( control );
426 auto gesture_one = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
427 auto gesture_two = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
429 DALI_TEST_CHECK( !accessible->DoGesture( gesture_one ) );
430 DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
432 DevelControl::AccessibilityDoGestureSignal(control).Connect( [] ( std::pair< Dali::Accessibility::GestureInfo, bool > &gesture ) {
433 if ( gesture.first.type == Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT )
434 gesture.second = true;
436 gesture.second = false;
439 DALI_TEST_CHECK( accessible->DoGesture( gesture_one ) );
440 DALI_TEST_CHECK( TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
442 DALI_TEST_CHECK( !accessible->DoGesture( gesture_two ) );
443 DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
445 Dali::Accessibility::TestEnableSC( false );
450 int UtcDaliAccessibilityRelation(void)
452 ToolkitTestApplication application;
453 Dali::Accessibility::TestEnableSC( true );
455 auto rel = Accessibility::RelationType::FLOWS_TO;
456 auto number = static_cast< size_t >( rel );
457 auto control = Control::New();
458 auto destination1 = Control::New();
459 auto destination2 = Control::New();
461 DevelControl::AppendAccessibilityRelation( control, destination1, rel );
462 auto relations = DevelControl::GetAccessibilityRelations(control);
463 DALI_TEST_CHECK( relations[ number ].size() == 1 );
465 DevelControl::AppendAccessibilityRelation( control, destination2, rel );
466 relations = DevelControl::GetAccessibilityRelations(control);
467 DALI_TEST_CHECK( relations[ number ].size() == 2 );
469 auto accessible = Dali::Accessibility::Accessible::Get( control );
470 auto accessible_destination1 = Dali::Accessibility::Accessible::Get( destination1 );
471 auto accessible_destination2 = Dali::Accessibility::Accessible::Get( destination2 );
472 auto relationset = accessible->GetRelationSet();
474 DALI_TEST_CHECK( relationset[0].relationType == rel );
475 DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination1->GetAddress() || relationset[0].targets[1] == accessible_destination1->GetAddress() );
476 DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination2->GetAddress() || relationset[0].targets[1] == accessible_destination2->GetAddress() );
478 auto relationset_bridge = TestGetRelationSet( accessible -> GetAddress() );
479 DALI_TEST_CHECK( static_cast< uint32_t >( relationset[0].relationType ) == std::get<0>( relationset_bridge[0] ) );
481 DALI_TEST_CHECK( relationset[0].targets[0] == std::get<1>( relationset_bridge[0] )[0] || relationset[0].targets[1] == std::get<1>( relationset_bridge[0] )[0] );
482 DALI_TEST_CHECK( relationset[0].targets[0] == std::get<1>( relationset_bridge[0] )[1] || relationset[0].targets[1] == std::get<1>( relationset_bridge[0] )[1] );
484 DevelControl::RemoveAccessibilityRelation(control,destination2,rel);
485 relations = DevelControl::GetAccessibilityRelations(control);
486 DALI_TEST_CHECK( relations[ number ].size() == 1 );
488 DevelControl::ClearAccessibilityRelations(control);
489 relations = DevelControl::GetAccessibilityRelations(control);
490 DALI_TEST_CHECK( relations[ number ].size() == 0 );
492 Dali::Accessibility::TestEnableSC( false );
497 int UtcDaliAccessibilityParentChildren(void)
499 ToolkitTestApplication application;
500 Dali::Accessibility::TestEnableSC( true );
502 auto parent = Control::New();
503 auto child_1 = Control::New();
504 auto child_2 = Control::New();
506 auto parent_accessible = Dali::Accessibility::Accessible::Get( parent );
507 auto child_1_accessible = Dali::Accessibility::Accessible::Get( child_1 );
508 auto child_2_accessible = Dali::Accessibility::Accessible::Get( child_2 );
510 auto children = TestGetChildren( parent_accessible -> GetAddress() );
511 DALI_TEST_EQUALS( children.size(), 0, TEST_LOCATION );
515 TestGetIndexInParent( child_1_accessible -> GetAddress() );
516 DALI_ABORT("Object has parent, test abort");
518 catch(TestDBusWrapper::error &){}
522 TestGetChildAtIndex( parent_accessible -> GetAddress(), -1 );
523 DALI_ABORT("Positive index, test abort");
525 catch(TestDBusWrapper::error &){}
527 DALI_TEST_EQUALS( parent_accessible -> GetChildCount(), 0, TEST_LOCATION );
531 child_1_accessible -> GetIndexInParent();
532 DALI_ABORT("Object has parent, test abort");
534 catch (Dali::DaliException &){}
539 children = TestGetChildren( parent_accessible -> GetAddress() );
540 DALI_TEST_EQUALS( children.size(), 2, TEST_LOCATION );
542 DALI_TEST_EQUALS( parent_accessible -> GetAddress(), TestGetParent( child_1_accessible -> GetAddress() ), TEST_LOCATION );
543 DALI_TEST_EQUALS( child_2_accessible -> GetAddress(), TestGetChildAtIndex( parent_accessible -> GetAddress(), TestGetIndexInParent( child_2_accessible -> GetAddress() ) ), TEST_LOCATION );
545 DALI_TEST_EQUALS( parent_accessible, child_1_accessible -> GetParent(), TEST_LOCATION );
546 DALI_TEST_EQUALS( child_2_accessible, parent_accessible -> GetChildAtIndex( child_2_accessible -> GetIndexInParent() ) , TEST_LOCATION );
548 Dali::Accessibility::TestEnableSC( false );
553 int UtcDaliAccessibilityGetLayer(void)
555 ToolkitTestApplication application;
557 Dali::Accessibility::TestEnableSC( true );
559 auto control = Control::New();
560 auto accessible_obj = Dali::Accessibility::Accessible::Get( control );
561 auto accessible_component = dynamic_cast<Dali::Accessibility::Component*>(accessible_obj);
562 DALI_TEST_CHECK( accessible_component );
563 DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, accessible_component -> GetLayer(), TEST_LOCATION );
564 DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, TestGetLayer( accessible_component -> GetAddress() ), TEST_LOCATION );
566 Dali::Accessibility::TestEnableSC( false );
571 int UtcDaliAccessibilityGrabFocus(void)
573 ToolkitTestApplication application;
575 Dali::Accessibility::TestEnableSC( true );
577 auto controla = Control::New();
578 auto controlb = Control::New();
580 Stage::GetCurrent().Add( controla );
581 Stage::GetCurrent().Add( controlb );
583 controla.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
584 controlb.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
586 auto a = Dali::Accessibility::Accessible::Get( controla );
587 auto b = Dali::Accessibility::Accessible::Get( controlb );
589 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
590 auto b_component = dynamic_cast<Dali::Accessibility::Component*>( b );
592 auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
593 auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
595 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
596 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
598 DALI_TEST_CHECK( a_component -> GrabFocus() );
600 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
601 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
603 DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
604 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
606 DALI_TEST_CHECK( TestGrabFocus( b_component -> GetAddress() ) );
608 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
609 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
611 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
612 DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
614 Dali::Accessibility::TestEnableSC( false );
619 int UtcDaliAccessibilityGetExtents(void)
621 ToolkitTestApplication application;
623 Dali::Accessibility::TestEnableSC( true );
625 auto control = Control::New();
626 Stage::GetCurrent().GetRootLayer().Add( control );
628 control.SetProperty(Actor::Property::POSITION, Vector3(10, 10, 100));
629 control.SetProperty(Actor::Property::SIZE, Vector2(10, 10));
631 application.SendNotification();
632 application.Render( 1 );
634 auto a = Dali::Accessibility::Accessible::Get( control );
635 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
637 auto extents = a_component->GetExtents(Dali::Accessibility::CoordType::SCREEN);
638 DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
639 DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
640 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
641 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
643 auto bridge_extents = TestGetExtents( a_component -> GetAddress() );
644 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
645 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
646 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
647 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
649 control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false );
650 application.SendNotification();
651 application.Render( 1 );
653 extents = a_component->GetExtents(Dali::Accessibility::CoordType::SCREEN);
654 DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
655 DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
656 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
657 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
659 bridge_extents = TestGetExtents( a_component -> GetAddress() );
660 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
661 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
662 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
663 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
665 Dali::Accessibility::TestEnableSC( false );
670 int UtcDaliAccessibilityGetAlpha(void)
672 ToolkitTestApplication application;
674 Dali::Accessibility::TestEnableSC( true );
676 auto control = Control::New();
677 auto a = Dali::Accessibility::Accessible::Get( control );
678 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
680 DALI_TEST_EQUALS( 0.0, a_component -> GetAlpha(), TEST_LOCATION );
681 DALI_TEST_EQUALS( 0.0, TestGetAlpha( a_component -> GetAddress() ), TEST_LOCATION );
683 Dali::Accessibility::TestEnableSC( false );
688 int UtcDaliAccessibilityGetMdiZOrder(void)
690 ToolkitTestApplication application;
692 Dali::Accessibility::TestEnableSC( true );
694 auto control = Control::New();
695 auto a = Dali::Accessibility::Accessible::Get( control );
696 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
698 DALI_TEST_EQUALS( 0, static_cast< int >( a_component -> GetMdiZOrder() ), TEST_LOCATION );
699 DALI_TEST_EQUALS( 0, TestGetMdiZOrder( a_component -> GetAddress() ), TEST_LOCATION );
701 Dali::Accessibility::TestEnableSC( false );
706 int UtcDaliAccessibilityAction(void)
708 ToolkitTestApplication application;
710 Dali::Accessibility::TestEnableSC( true );
712 auto control = Control::New( );
713 auto a = Dali::Accessibility::Accessible::Get( control );
714 auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
716 std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
717 auto count = b -> GetActionCount();
719 DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
721 for (auto i = 0u; i<count; ++i)
723 DALI_TEST_CHECK( Dali::Accessibility::Find( actions, b -> GetActionName( i ) ) );
724 DALI_TEST_EQUALS( b -> GetActionName( i ), b -> GetLocalizedActionName( i ), TEST_LOCATION );
725 DALI_TEST_EQUALS( b -> GetActionDescription( i ), "", TEST_LOCATION );
726 DALI_TEST_EQUALS( b -> GetActionKeyBinding( i ), "", TEST_LOCATION );
729 // Empty strings should be returned for invalid indices
730 DALI_TEST_EQUALS(b->GetActionDescription(count), "", TEST_LOCATION);
731 DALI_TEST_EQUALS(b->GetActionName(count), "", TEST_LOCATION);
732 DALI_TEST_EQUALS(b->GetLocalizedActionName(count), "", TEST_LOCATION);
733 DALI_TEST_EQUALS(b->GetActionKeyBinding(count), "", TEST_LOCATION);
735 count = TestGetActionCount(b -> GetAddress());
737 DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
739 for (auto i = 0u; i<count; ++i)
741 DALI_TEST_CHECK( Dali::Accessibility::Find( actions, TestGetActionName( b->GetAddress(), i ) ) );
742 DALI_TEST_EQUALS( TestGetActionName( b->GetAddress(), i ), TestGetLocalizedActionName( b->GetAddress(), i ), TEST_LOCATION );
743 DALI_TEST_EQUALS( TestGetActionDescription( b->GetAddress(), i ), "", TEST_LOCATION );
744 DALI_TEST_EQUALS( TestGetActionKeyBinding( b->GetAddress(), i ), "", TEST_LOCATION );
747 DALI_TEST_EQUALS(TestGetActionDescription(b->GetAddress(), count), "", TEST_LOCATION);
748 DALI_TEST_EQUALS(TestGetActionName(b->GetAddress(), count), "", TEST_LOCATION);
749 DALI_TEST_EQUALS(TestGetLocalizedActionName(b->GetAddress(), count), "", TEST_LOCATION);
750 DALI_TEST_EQUALS(TestGetActionKeyBinding(b->GetAddress(), count), "", TEST_LOCATION);
752 Dali::Accessibility::TestEnableSC( false );
757 int UtcDaliAccessibilityDoAction(void)
759 ToolkitTestApplication application;
761 Dali::Accessibility::TestEnableSC( true );
762 thread_local std::vector< bool > actions_done { false, false, false, false, false, false };
764 auto control = Control::New( );
765 auto a = Dali::Accessibility::Accessible::Get( control );
766 auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
767 std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
769 // Test calling action by name
770 DALI_TEST_CHECK( b -> DoAction( actions[2] ) ); // ReadingSkipped
771 DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
772 DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
774 // Negative test of calling action with not defined name
775 DALI_TEST_CHECK( !b -> DoAction( "undefined" ) );
777 DevelControl::AccessibilityReadingSkippedSignal(control).Connect( [] () {
778 actions_done[ 1 ] = true;
780 DevelControl::AccessibilityReadingCancelledSignal(control).Connect( [] () {
781 actions_done[ 2 ] = true;
783 DevelControl::AccessibilityReadingStoppedSignal(control).Connect( [] () {
784 actions_done[ 3 ] = true;
786 DevelControl::AccessibilityReadingPausedSignal(control).Connect( [] () {
787 actions_done[ 4 ] = true;
789 DevelControl::AccessibilityReadingResumedSignal(control).Connect( [] () {
790 actions_done[ 5 ] = true;
792 DevelControl::AccessibilityActivateSignal(control).Connect( [] () {
793 actions_done[ 0 ] = true;
796 // Test calling action by index
797 DALI_TEST_CHECK( b -> DoAction( 1 ) );
798 DALI_TEST_CHECK( b -> DoAction( 2 ) );
799 DALI_TEST_CHECK( b -> DoAction( 3 ) );
800 DALI_TEST_CHECK( b -> DoAction( 4 ) );
801 DALI_TEST_CHECK( b -> DoAction( 5 ) );
802 DALI_TEST_CHECK( b -> DoAction( 6 ) );
804 for ( auto i = 0u; i < actions_done.size(); ++i )
806 DALI_TEST_CHECK( actions_done[ i ] );
807 actions_done[ i ] = false;
810 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 1 ) );
811 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 2 ) );
812 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 3 ) );
813 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 4 ) );
814 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 5 ) );
815 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 6 ) );
817 for ( auto i = 0u; i < actions_done.size(); ++i )
819 DALI_TEST_CHECK( actions_done[ i ] );
820 actions_done[ i ] = false;
823 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 1 ] ) );
824 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 2 ] ) );
825 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 3 ] ) );
826 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 4 ] ) );
827 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 5 ] ) );
828 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 6 ] ) );
830 for ( auto i = 0u; i < actions_done.size(); ++i )
831 DALI_TEST_CHECK( actions_done[ i ] );
833 Dali::Accessibility::TestEnableSC( false );
838 void TestVoidCallback()
842 int UtcDaliAccessibilitySignals(void)
844 ToolkitTestApplication application;
845 ConnectionTracker connectionTracker;
846 Control control = Control::New();
848 DALI_TEST_CHECK( DevelControl::AccessibilityGetNameSignal(control).Empty() );
849 control.ConnectSignal( &connectionTracker, "getName", &TestVoidCallback );
850 DALI_TEST_CHECK( !DevelControl::AccessibilityGetNameSignal(control).Empty() );
852 DALI_TEST_CHECK( DevelControl::AccessibilityGetDescriptionSignal(control).Empty() );
853 control.ConnectSignal( &connectionTracker, "getDescription", &TestVoidCallback );
854 DALI_TEST_CHECK( !DevelControl::AccessibilityGetDescriptionSignal(control).Empty() );
856 DALI_TEST_CHECK( DevelControl::AccessibilityDoGestureSignal(control).Empty() );
857 control.ConnectSignal( &connectionTracker, "doGesture", &TestVoidCallback );
858 DALI_TEST_CHECK( !DevelControl::AccessibilityDoGestureSignal(control).Empty() );