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 number = static_cast< size_t >( rel );
541 auto control = Control::New();
542 auto destination1 = Control::New();
543 auto destination2 = Control::New();
545 DevelControl::AppendAccessibilityRelation( control, destination1, rel );
546 auto relations = DevelControl::GetAccessibilityRelations(control);
547 DALI_TEST_CHECK( relations[ number ].size() == 1 );
549 DevelControl::AppendAccessibilityRelation( control, destination2, rel );
550 relations = DevelControl::GetAccessibilityRelations(control);
551 DALI_TEST_CHECK( relations[ number ].size() == 2 );
553 auto accessible = Dali::Accessibility::Accessible::Get( control );
554 auto accessible_destination1 = Dali::Accessibility::Accessible::Get( destination1 );
555 auto accessible_destination2 = Dali::Accessibility::Accessible::Get( destination2 );
556 auto relationset = accessible->GetRelationSet();
558 DALI_TEST_CHECK( relationset[0].relationType == rel );
559 DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination1->GetAddress() || relationset[0].targets[1] == accessible_destination1->GetAddress() );
560 DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination2->GetAddress() || relationset[0].targets[1] == accessible_destination2->GetAddress() );
562 auto relationset_bridge = TestGetRelationSet( accessible -> GetAddress() );
563 DALI_TEST_CHECK( static_cast< uint32_t >( relationset[0].relationType ) == std::get<0>( relationset_bridge[0] ) );
565 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] );
566 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] );
568 DevelControl::RemoveAccessibilityRelation(control,destination2,rel);
569 relations = DevelControl::GetAccessibilityRelations(control);
570 DALI_TEST_CHECK( relations[ number ].size() == 1 );
572 DevelControl::ClearAccessibilityRelations(control);
573 relations = DevelControl::GetAccessibilityRelations(control);
574 DALI_TEST_CHECK( relations[ number ].size() == 0 );
576 Dali::Accessibility::TestEnableSC( false );
581 int UtcDaliAccessibilityParentChildren(void)
583 ToolkitTestApplication application;
584 Dali::Accessibility::TestEnableSC( true );
586 auto parent = Control::New();
587 auto child_1 = Control::New();
588 auto child_2 = Control::New();
590 auto parent_accessible = Dali::Accessibility::Accessible::Get( parent );
591 auto child_1_accessible = Dali::Accessibility::Accessible::Get( child_1 );
592 auto child_2_accessible = Dali::Accessibility::Accessible::Get( child_2 );
594 auto children = TestGetChildren( parent_accessible -> GetAddress() );
595 DALI_TEST_EQUALS( children.size(), 0, TEST_LOCATION );
599 TestGetIndexInParent( child_1_accessible -> GetAddress() );
600 DALI_ABORT("Object has parent, test abort");
602 catch(TestDBusWrapper::error &){}
606 TestGetChildAtIndex( parent_accessible -> GetAddress(), -1 );
607 DALI_ABORT("Positive index, test abort");
609 catch(TestDBusWrapper::error &){}
611 DALI_TEST_EQUALS( parent_accessible -> GetChildCount(), 0, TEST_LOCATION );
615 child_1_accessible -> GetIndexInParent();
616 DALI_ABORT("Object has parent, test abort");
618 catch (const std::domain_error&){}
623 children = TestGetChildren( parent_accessible -> GetAddress() );
624 DALI_TEST_EQUALS( children.size(), 2, TEST_LOCATION );
626 DALI_TEST_EQUALS( parent_accessible -> GetAddress(), TestGetParent( child_1_accessible -> GetAddress() ), TEST_LOCATION );
627 DALI_TEST_EQUALS( child_2_accessible -> GetAddress(), TestGetChildAtIndex( parent_accessible -> GetAddress(), TestGetIndexInParent( child_2_accessible -> GetAddress() ) ), TEST_LOCATION );
629 DALI_TEST_EQUALS( parent_accessible, child_1_accessible -> GetParent(), TEST_LOCATION );
630 DALI_TEST_EQUALS( child_2_accessible, parent_accessible -> GetChildAtIndex( child_2_accessible -> GetIndexInParent() ) , TEST_LOCATION );
632 Dali::Accessibility::TestEnableSC( false );
637 int UtcDaliAccessibilityGetLayer(void)
639 ToolkitTestApplication application;
641 Dali::Accessibility::TestEnableSC( true );
643 auto control = Control::New();
644 auto accessible_obj = Dali::Accessibility::Accessible::Get( control );
645 auto accessible_component = dynamic_cast<Dali::Accessibility::Component*>(accessible_obj);
646 DALI_TEST_CHECK( accessible_component );
647 DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, accessible_component -> GetLayer(), TEST_LOCATION );
648 DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, TestGetLayer( accessible_component -> GetAddress() ), TEST_LOCATION );
650 Dali::Accessibility::TestEnableSC( false );
655 int UtcDaliAccessibilityGrabFocus(void)
657 ToolkitTestApplication application;
659 Dali::Accessibility::TestEnableSC( true );
661 auto controla = Control::New();
662 auto controlb = Control::New();
664 Stage::GetCurrent().Add( controla );
665 Stage::GetCurrent().Add( controlb );
667 controla.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
668 controlb.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
670 auto a = Dali::Accessibility::Accessible::Get( controla );
671 auto b = Dali::Accessibility::Accessible::Get( controlb );
673 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
674 auto b_component = dynamic_cast<Dali::Accessibility::Component*>( b );
676 auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
677 auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
679 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
680 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
682 DALI_TEST_CHECK( a_component -> GrabFocus() );
684 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
685 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
687 DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
688 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
690 DALI_TEST_CHECK( TestGrabFocus( b_component -> GetAddress() ) );
692 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
693 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
695 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
696 DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
698 Dali::Accessibility::TestEnableSC( false );
703 int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch(void)
705 ToolkitTestApplication application;
706 tet_infoline( "UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch" );
708 Dali::Accessibility::TestEnableSC( true );
710 auto control = Control::New();
711 Stage::GetCurrent().GetRootLayer().Add( control );
713 auto window = Dali::DevelWindow::Get( control );
714 DALI_TEST_CHECK( window );
716 //window.SetPosition({0,0});
717 DevelWindow::SetPositionSize( window, PositionSize( 0,0,480, 240 ) );
719 control.SetProperty( Actor::Property::POSITION, Vector3( 10, 10, 100 ) );
720 control.SetProperty( Actor::Property::SIZE, Vector2( 10, 10 ) );
722 application.SendNotification();
723 application.Render( 1 );
725 auto a = Dali::Accessibility::Accessible::Get( control );
726 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
728 auto extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
729 DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
730 DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
731 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
732 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
734 auto bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
735 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
736 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
737 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
738 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
740 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
741 DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
742 DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
743 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
744 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
746 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
747 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
748 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
749 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
750 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
752 control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false );
753 application.SendNotification();
754 application.Render( 1 );
756 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
757 DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
758 DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
759 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
760 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
762 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
763 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
764 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
765 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
766 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
768 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
769 DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
770 DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
771 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
772 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
774 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
775 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
776 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
777 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
778 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
780 Dali::Accessibility::TestEnableSC( false );
785 int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionDoNotMatch(void)
787 ToolkitTestApplication application;
789 Dali::Accessibility::TestEnableSC( true );
791 auto control = Control::New();
792 Stage::GetCurrent().GetRootLayer().Add( control );
793 auto window = Dali::DevelWindow::Get( control );
794 //window.SetPosition({33,33});
795 DevelWindow::SetPositionSize( window, PositionSize( 33,33,480, 240 ) );
797 control.SetProperty( Actor::Property::POSITION, Vector3( 10, 10, 100 ) );
798 control.SetProperty( Actor::Property::SIZE, Vector2( 10, 10 ) );
800 application.SendNotification();
801 application.Render( 1 );
803 auto a = Dali::Accessibility::Accessible::Get( control );
804 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
806 auto extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
807 DALI_TEST_EQUALS( extents.x, 38.0f, TEST_LOCATION );
808 DALI_TEST_EQUALS( extents.y, 38.0f, TEST_LOCATION );
809 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
810 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
812 auto bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
813 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 38, TEST_LOCATION );
814 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 38, TEST_LOCATION );
815 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
816 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
818 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
819 DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
820 DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
821 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
822 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
824 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
825 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
826 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
827 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
828 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
830 control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false );
831 application.SendNotification();
832 application.Render( 1 );
834 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
835 DALI_TEST_EQUALS( extents.x, 43.0f, TEST_LOCATION );
836 DALI_TEST_EQUALS( extents.y, 43.0f, TEST_LOCATION );
837 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
838 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
840 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
841 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 43, TEST_LOCATION );
842 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 43, TEST_LOCATION );
843 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
844 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
846 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
847 DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
848 DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
849 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
850 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
852 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
853 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
854 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
855 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
856 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
858 Dali::Accessibility::TestEnableSC( false );
863 int UtcDaliAccessibilityGetAlpha(void)
865 ToolkitTestApplication application;
867 Dali::Accessibility::TestEnableSC( true );
869 auto control = Control::New();
870 auto a = Dali::Accessibility::Accessible::Get( control );
871 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
873 DALI_TEST_EQUALS( 0.0, a_component -> GetAlpha(), TEST_LOCATION );
874 DALI_TEST_EQUALS( 0.0, TestGetAlpha( a_component -> GetAddress() ), TEST_LOCATION );
876 Dali::Accessibility::TestEnableSC( false );
881 int UtcDaliAccessibilityGetMdiZOrder(void)
883 ToolkitTestApplication application;
885 Dali::Accessibility::TestEnableSC( true );
887 auto control = Control::New();
888 auto a = Dali::Accessibility::Accessible::Get( control );
889 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
891 DALI_TEST_EQUALS( 0, static_cast< int >( a_component -> GetMdiZOrder() ), TEST_LOCATION );
892 DALI_TEST_EQUALS( 0, TestGetMdiZOrder( a_component -> GetAddress() ), TEST_LOCATION );
894 Dali::Accessibility::TestEnableSC( false );
899 int UtcDaliAccessibilityAction(void)
901 ToolkitTestApplication application;
903 Dali::Accessibility::TestEnableSC( true );
905 auto control = Control::New( );
906 auto a = Dali::Accessibility::Accessible::Get( control );
907 auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
909 std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
910 auto count = b -> GetActionCount();
912 DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
914 for (auto i = 0u; i<count; ++i)
916 DALI_TEST_CHECK( Dali::Accessibility::Find( actions, b -> GetActionName( i ) ) );
917 DALI_TEST_EQUALS( b -> GetActionName( i ), b -> GetLocalizedActionName( i ), TEST_LOCATION );
918 DALI_TEST_EQUALS( b -> GetActionDescription( i ), "", TEST_LOCATION );
919 DALI_TEST_EQUALS( b -> GetActionKeyBinding( i ), "", TEST_LOCATION );
922 // Empty strings should be returned for invalid indices
923 DALI_TEST_EQUALS(b->GetActionDescription(count), "", TEST_LOCATION);
924 DALI_TEST_EQUALS(b->GetActionName(count), "", TEST_LOCATION);
925 DALI_TEST_EQUALS(b->GetLocalizedActionName(count), "", TEST_LOCATION);
926 DALI_TEST_EQUALS(b->GetActionKeyBinding(count), "", TEST_LOCATION);
928 count = TestGetActionCount(b -> GetAddress());
930 DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
932 for (auto i = 0u; i<count; ++i)
934 DALI_TEST_CHECK( Dali::Accessibility::Find( actions, TestGetActionName( b->GetAddress(), i ) ) );
935 DALI_TEST_EQUALS( TestGetActionName( b->GetAddress(), i ), TestGetLocalizedActionName( b->GetAddress(), i ), TEST_LOCATION );
936 DALI_TEST_EQUALS( TestGetActionDescription( b->GetAddress(), i ), "", TEST_LOCATION );
937 DALI_TEST_EQUALS( TestGetActionKeyBinding( b->GetAddress(), i ), "", TEST_LOCATION );
940 DALI_TEST_EQUALS(TestGetActionDescription(b->GetAddress(), count), "", TEST_LOCATION);
941 DALI_TEST_EQUALS(TestGetActionName(b->GetAddress(), count), "", TEST_LOCATION);
942 DALI_TEST_EQUALS(TestGetLocalizedActionName(b->GetAddress(), count), "", TEST_LOCATION);
943 DALI_TEST_EQUALS(TestGetActionKeyBinding(b->GetAddress(), count), "", TEST_LOCATION);
945 Dali::Accessibility::TestEnableSC( false );
950 int UtcDaliAccessibilityDoAction(void)
952 ToolkitTestApplication application;
954 Dali::Accessibility::TestEnableSC( true );
955 thread_local std::vector< bool > actions_done { false, false, false, false, false, false };
957 auto control = Control::New( );
958 auto a = Dali::Accessibility::Accessible::Get( control );
959 auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
960 std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
962 // Test calling action by name
963 DALI_TEST_CHECK( b -> DoAction( actions[2] ) ); // ReadingSkipped
964 DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
965 DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
967 // Negative test of calling action with not defined name
968 DALI_TEST_CHECK( !b -> DoAction( "undefined" ) );
970 DevelControl::AccessibilityReadingSkippedSignal(control).Connect( [] () {
971 actions_done[ 1 ] = true;
973 DevelControl::AccessibilityReadingCancelledSignal(control).Connect( [] () {
974 actions_done[ 2 ] = true;
976 DevelControl::AccessibilityReadingStoppedSignal(control).Connect( [] () {
977 actions_done[ 3 ] = true;
979 DevelControl::AccessibilityReadingPausedSignal(control).Connect( [] () {
980 actions_done[ 4 ] = true;
982 DevelControl::AccessibilityReadingResumedSignal(control).Connect( [] () {
983 actions_done[ 5 ] = true;
985 DevelControl::AccessibilityActivateSignal(control).Connect( [] () {
986 actions_done[ 0 ] = true;
989 // Test calling action by index
990 DALI_TEST_CHECK( b -> DoAction( 1 ) );
991 DALI_TEST_CHECK( b -> DoAction( 2 ) );
992 DALI_TEST_CHECK( b -> DoAction( 3 ) );
993 DALI_TEST_CHECK( b -> DoAction( 4 ) );
994 DALI_TEST_CHECK( b -> DoAction( 5 ) );
995 DALI_TEST_CHECK( b -> DoAction( 6 ) );
997 for ( auto i = 0u; i < actions_done.size(); ++i )
999 DALI_TEST_CHECK( actions_done[ i ] );
1000 actions_done[ i ] = false;
1003 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 1 ) );
1004 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 2 ) );
1005 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 3 ) );
1006 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 4 ) );
1007 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 5 ) );
1008 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 6 ) );
1010 for ( auto i = 0u; i < actions_done.size(); ++i )
1012 DALI_TEST_CHECK( actions_done[ i ] );
1013 actions_done[ i ] = false;
1016 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 1 ] ) );
1017 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 2 ] ) );
1018 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 3 ] ) );
1019 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 4 ] ) );
1020 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 5 ] ) );
1021 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 6 ] ) );
1023 for ( auto i = 0u; i < actions_done.size(); ++i )
1024 DALI_TEST_CHECK( actions_done[ i ] );
1026 Dali::Accessibility::TestEnableSC( false );
1031 void TestVoidCallback()
1035 int UtcDaliAccessibilitySignals(void)
1037 ToolkitTestApplication application;
1038 ConnectionTracker connectionTracker;
1039 Control control = Control::New();
1041 DALI_TEST_CHECK( DevelControl::AccessibilityGetNameSignal(control).Empty() );
1042 control.ConnectSignal( &connectionTracker, "getName", &TestVoidCallback );
1043 DALI_TEST_CHECK( !DevelControl::AccessibilityGetNameSignal(control).Empty() );
1045 DALI_TEST_CHECK( DevelControl::AccessibilityGetDescriptionSignal(control).Empty() );
1046 control.ConnectSignal( &connectionTracker, "getDescription", &TestVoidCallback );
1047 DALI_TEST_CHECK( !DevelControl::AccessibilityGetDescriptionSignal(control).Empty() );
1049 DALI_TEST_CHECK( DevelControl::AccessibilityDoGestureSignal(control).Empty() );
1050 control.ConnectSignal( &connectionTracker, "doGesture", &TestVoidCallback );
1051 DALI_TEST_CHECK( !DevelControl::AccessibilityDoGestureSignal(control).Empty() );
1056 static void Wait(ToolkitTestApplication& application)
1058 application.SendNotification();
1059 application.Render(16);
1062 int UtcDaliAccessibilityScrollToChildScrollView(void)
1064 ToolkitTestApplication application;
1065 Dali::Accessibility::TestEnableSC( true );
1067 ScrollView scrollView = ScrollView::New();
1068 application.GetScene().Add( scrollView );
1070 PushButton actorA = PushButton::New();
1071 const Dali::Vector3 positionA = Vector3(100.0f, 400.0f, 0.0f);
1072 actorA.SetProperty( Dali::Actor::Property::POSITION, positionA );
1073 scrollView.Add(actorA);
1075 PushButton actorB = PushButton::New();
1076 const Dali::Vector3 positionB = Vector3(500.0f, 200.0f, 0.0f);
1077 actorB.SetProperty( Dali::Actor::Property::POSITION, positionB );
1078 scrollView.Add(actorB);
1080 TableView tableView = TableView::New( 2, 2 ); // 2 by 2 grid.
1081 tableView.SetProperty( Actor::Property::SIZE, Vector2(100.0f, 100.0f) );
1082 scrollView.Add(tableView);
1084 PushButton actorC = PushButton::New();
1085 actorC.SetProperty( Actor::Property::SIZE, Vector2(50.0f, 50.0f) );
1086 tableView.AddChild( actorC, TableView::CellPosition( 0, 0 ) );
1088 PushButton actorD = PushButton::New();
1089 application.GetScene().Add( actorD );
1093 auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(scrollView));
1094 DALI_TEST_CHECK(accessibleParent);
1095 auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorA));
1096 DALI_TEST_CHECK(accessibleA);
1097 auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorB));
1098 DALI_TEST_CHECK(accessibleB);
1099 auto* accessibleC = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorC));
1100 DALI_TEST_CHECK(accessibleC);
1102 accessibleA->GrabHighlight(); // == scrollView.ScrollTo(actorA)
1104 accessibleB->GrabHighlight(); // == scrollView.ScrollTo(actorB)
1107 // scrollView is ancestor of actorC
1108 // This should work without a crash
1109 accessibleC->GrabHighlight(); // == scrollView.ScrollTo(actorC)
1112 // negative testcase calling ScrollToChild using non-child actor
1113 accessibleParent->ScrollToChild(actorD);
1115 Dali::Accessibility::TestEnableSC( false );
1120 class TestItemFactory : public ItemFactory
1127 unsigned int GetNumberOfItems() override
1132 Dali::Actor NewItem(unsigned int itemId) override
1134 return TextLabel::New(std::to_string(itemId));
1139 int UtcDaliAccessibilityScrollToChildItemView(void)
1141 ToolkitTestApplication application;
1142 Dali::Accessibility::TestEnableSC( true );
1144 TestItemFactory factory;
1145 ItemView view = ItemView::New(factory);
1146 Dali::Vector3 vec(480.0f, 800.0f, 0.0f);
1147 ItemLayoutPtr layout = DefaultItemLayout::New( DefaultItemLayout::DEPTH );
1149 view.AddLayout(*layout);
1150 view.SetProperty( Actor::Property::SIZE, vec );
1152 application.GetScene().Add(view);
1153 layout->SetOrientation(ControlOrientation::Down);
1154 view.ActivateLayout(0, vec, 0.0f);
1158 auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view));
1159 DALI_TEST_CHECK(accessibleParent);
1160 auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view.GetItem(0)));
1161 DALI_TEST_CHECK(accessibleA);
1162 auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view.GetItem(1)));
1163 DALI_TEST_CHECK(accessibleB);
1165 accessibleA->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorA))
1167 accessibleB->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorB))
1170 Dali::Accessibility::TestEnableSC( false );
1174 int UtcDaliAccessibilityScrollToChildNonScrollable(void)
1176 ToolkitTestApplication application;
1177 Dali::Accessibility::TestEnableSC( true );
1179 TextLabel label = TextLabel::New("123");
1181 auto* accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(label));
1182 DALI_TEST_CHECK(accessible);
1184 DALI_TEST_EQUALS(accessible->IsScrollable(), false, TEST_LOCATION);
1185 DALI_TEST_EQUALS(accessible->ScrollToChild({}), false, TEST_LOCATION);
1186 DALI_TEST_EQUALS(accessible->GetInternalActor(), label, TEST_LOCATION);
1188 Dali::Accessibility::TestEnableSC( false );
1192 int UtcDaliAccessibilityCheckHighlight(void)
1194 ToolkitTestApplication application;
1195 Dali::Accessibility::TestEnableSC( true );
1196 Dali::Accessibility::TestResetMoveOutedCalled();
1198 // Make precondition two children exist in parent area
1199 PushButton parentButton = PushButton::New();
1200 parentButton.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
1201 parentButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1202 parentButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1203 parentButton.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f));
1204 parentButton.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 200.0f));
1205 application.GetScene().Add( parentButton );
1207 PushButton buttonA = PushButton::New();
1208 buttonA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1209 buttonA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1210 buttonA.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f));
1211 buttonA.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f));
1212 parentButton.Add(buttonA);
1214 PushButton buttonB = PushButton::New();
1215 buttonB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1216 buttonB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1217 buttonB.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f));
1218 buttonB.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f));
1219 parentButton.Add(buttonB);
1222 // Set highlight to first child (A) to enable movement tracking
1223 auto* accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonA));
1224 DALI_TEST_CHECK(accessible);
1225 accessible->GrabHighlight();
1228 // 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
1229 buttonA.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, -200.0f));
1231 // Need one more notificaiton to get correct updated position
1232 application.SendNotification();
1233 DALI_TEST_EQUALS( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1235 // Reset verdict data
1236 Dali::Accessibility::TestResetMoveOutedCalled();
1238 // 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
1239 buttonA.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, -300.0f) );
1241 // Need one more notificaiton to get correct updated position
1242 application.SendNotification();
1243 DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1245 // Reset verdict data
1246 Dali::Accessibility::TestResetMoveOutedCalled();
1248 // Set highlight to second child (B) to enable movement tracking
1249 accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonB));
1250 DALI_TEST_CHECK(accessible);
1251 accessible->GrabHighlight();
1254 // 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
1255 // B: (0,100) --> (0, 50)
1256 buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 50.0f) );
1258 // Need one more notificaiton to get correct updated position
1259 application.SendNotification();
1260 DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1262 // Reset verdict data
1263 Dali::Accessibility::TestResetMoveOutedCalled();
1265 // 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
1266 buttonB.SetProperty(Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f));
1268 // Need one more notificaiton to get correct updated position
1269 application.SendNotification();
1270 DALI_TEST_EQUALS( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1272 // Reset verdict data
1273 Dali::Accessibility::TestResetMoveOutedCalled();
1275 // 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
1276 // B: (300,100) --> (0, 100)
1277 buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f) );
1279 // Need one more seding 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 // Disable movement tracking on B by giving highlight to A
1287 accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonA));
1288 DALI_TEST_CHECK(accessible);
1289 accessible->GrabHighlight();
1292 // Move B (untracked) out of parent area through the parent's area right edge - no move outed event expected for B object
1293 // B: (0,100) --> (300, 100)
1294 buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f) );
1296 // Need one more seding notificaiton to get correct updated position
1297 application.SendNotification();
1298 DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1300 Dali::Accessibility::TestEnableSC( false );
1304 int UtcDaliWebViewAccessible(void)
1306 ToolkitTestApplication application;
1308 auto webView = Dali::Toolkit::WebView::New();
1309 auto webViewAccessible = Dali::Accessibility::Accessible::Get(webView);
1311 DALI_TEST_CHECK(webViewAccessible);
1313 auto children = webViewAccessible->GetChildren();
1315 DALI_TEST_CHECK(children.empty());
1317 Dali::Accessibility::TestEnableSC(true);
1319 children = webViewAccessible->GetChildren();
1321 DALI_TEST_EQUALS(children.size(), 1u, TEST_LOCATION);
1323 auto address = children[0]->GetAddress();
1325 DALI_TEST_CHECK(address);
1326 DALI_TEST_NOT_EQUALS(address.GetBus(), webViewAccessible->GetAddress().GetBus(), 0.0f, TEST_LOCATION);
1328 Dali::Accessibility::TestEnableSC(false);
1330 children = webViewAccessible->GetChildren();
1332 DALI_TEST_CHECK(children.empty());