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/devel-api/actors/actor-devel.h>
15 #include <dali/devel-api/common/stage.h>
18 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
20 using namespace Dali::Toolkit;
22 void utc_dali_accessibility_controls_bridge_up_startup(void)
24 test_return_value = TET_UNDEF;
25 DBusWrapper::Install(std::unique_ptr<DBusWrapper>(new TestDBusWrapper));
28 void utc_dali_accessibility_controls_bridge_up_cleanup(void)
30 test_return_value = TET_PASS;
31 //DBusWrapper::Install({}) is a de-install
32 DBusWrapper::Install({});
36 namespace Accessibility {
37 std::ostream & operator<< (std::ostream & stream, const Address & address)
39 stream << address.ToString();
45 int UtcDaliControlAccessibilityRaiseBridge(void)
47 DALI_TEST_CHECK(!Accessibility::IsUp());
49 ToolkitTestApplication application;
51 Dali::Accessibility::TestEnableSC(true);
53 DALI_TEST_CHECK(Accessibility::IsUp());
55 // auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
56 // for(auto &a : wr->daliMethods) {
58 // if (std::get<3>(a.first) == MethodType::Method) mt = "MethodType::Method";
59 // else if (std::get<3>(a.first) == MethodType::Getter) mt = "MethodType::Getter";
60 // else if (std::get<3>(a.first) == MethodType::Setter) mt = "MethodType::Setter";
62 // 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);
65 Dali::Accessibility::TestEnableSC(false);
67 DALI_TEST_CHECK(!Accessibility::IsUp());
72 int UtcDaliControlAccessibilityName(void)
74 ToolkitTestApplication application;
76 auto control = Control::New();
77 Stage::GetCurrent().Add( control );
79 auto q = Dali::Accessibility::Accessible::Get( control );
82 DALI_TEST_EQUALS( "" , q->GetName(), TEST_LOCATION );
84 control.SetProperty( DevelControl::Property::ACCESSIBILITY_NAME, "Accessibility_Name" );
85 DALI_TEST_EQUALS( "Accessibility_Name" , q->GetName(), TEST_LOCATION );
86 DALI_TEST_EQUALS( control.GetProperty( DevelControl::Property::ACCESSIBILITY_NAME ).Get< std::string >() , "Accessibility_Name", TEST_LOCATION );
88 DevelControl::AccessibilityGetNameSignal(control).Connect( [] (std::string &accessibility_name) {
89 accessibility_name = "Accessibility_Name_With_Callback"; } );
91 DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , q->GetName(), TEST_LOCATION );
93 Dali::Accessibility::TestEnableSC(true);
95 DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , TestGetName( q->GetAddress()), TEST_LOCATION );
97 //TODO test emission of name change signal
98 Dali::Accessibility::TestEnableSC( false );
103 int UtcDaliControlAccessibilityDescription(void)
105 ToolkitTestApplication application;
107 auto control = Control::New();
109 auto q = Dali::Accessibility::Accessible::Get( control );
110 DALI_TEST_CHECK( q );
112 DALI_TEST_EQUALS( "" , q->GetDescription(), TEST_LOCATION );
114 control.SetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION, "Accessibility_Description" );
115 DALI_TEST_EQUALS( "Accessibility_Description" , q->GetDescription(), TEST_LOCATION );
117 auto property = control.GetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION ).Get<std::string>();
118 DALI_TEST_EQUALS( "Accessibility_Description", property, TEST_LOCATION );
120 DevelControl::AccessibilityGetDescriptionSignal(control).Connect( [] (std::string &accessibility_description) {
121 accessibility_description = "Accessibility_Description_With_Callback"; } );
123 DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , q->GetDescription(), TEST_LOCATION );
125 Dali::Accessibility::TestEnableSC( true );
127 DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , TestGetDescription( q->GetAddress()), TEST_LOCATION );
129 //TODO test emission of description change signal
130 Dali::Accessibility::TestEnableSC( false );
135 int UtcDaliControlAccessibilityRole(void)
137 ToolkitTestApplication application;
139 auto control = Control::New();
140 auto role_unknown = Dali::Accessibility::Role::UNKNOWN;
141 auto role_pushbutton = Dali::Accessibility::Role::PUSH_BUTTON;
143 DALI_TEST_EQUALS( role_unknown,control.GetProperty( DevelControl::Property::ACCESSIBILITY_ROLE ).Get< Dali::Accessibility::Role >(), TEST_LOCATION );
145 auto q = Dali::Accessibility::Accessible::Get( control );
146 DALI_TEST_EQUALS( role_unknown , q->GetRole(), TEST_LOCATION);
147 DALI_TEST_EQUALS( "unknown" , q->GetRoleName(), TEST_LOCATION );
149 Dali::Accessibility::TestEnableSC( true );
150 DALI_TEST_CHECK( q );
151 DALI_TEST_EQUALS( static_cast< uint32_t >( role_unknown ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
152 DALI_TEST_EQUALS( "unknown" , TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
153 DALI_TEST_EQUALS( "unknown" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
155 control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, role_pushbutton );
157 DALI_TEST_EQUALS( static_cast< uint32_t >( role_pushbutton ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
158 DALI_TEST_EQUALS( "push button" ,TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
159 DALI_TEST_EQUALS( "push button" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
161 Dali::Accessibility::TestEnableSC( false );
163 DALI_TEST_EQUALS( role_pushbutton , q->GetRole(), TEST_LOCATION);
164 DALI_TEST_EQUALS( "push button" , q->GetRoleName(), TEST_LOCATION );
169 int UtcDaliControlAccessibilityRoleToggleButton(void)
171 ToolkitTestApplication application;
173 auto control = Dali::Toolkit::ToggleButton::New();
174 auto button = Dali::Accessibility::Role::TOGGLE_BUTTON;
176 control.SetProperty(Toolkit::ToggleButton::Property::TOOLTIPS,
177 Property::Array{"option1", "option2"});
179 Dali::Accessibility::TestEnableSC( true );
181 control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, button );
182 auto q = Dali::Accessibility::Accessible::Get( control );
184 DALI_TEST_EQUALS( button , q->GetRole(), TEST_LOCATION);
185 DALI_TEST_EQUALS( "toggle button" , q->GetRoleName(), TEST_LOCATION );
187 Dali::Accessibility::States states = q->GetStates();
188 DALI_TEST_EQUALS( true , (bool)states[Dali::Accessibility::State::VISIBLE], TEST_LOCATION);
190 DALI_TEST_EQUALS( "option1", q->GetDescription(), TEST_LOCATION );
192 auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
196 control.SetProperty( Toolkit::Button::Property::LABEL, "ToggleButton2" );
197 DALI_TEST_EQUALS( "ToggleButton2", TestGetName( q->GetAddress() ), TEST_LOCATION );
199 Dali::Accessibility::TestEnableSC( false );
204 int UtcDaliControlAccessibilityButtonLabel(void)
206 ToolkitTestApplication application;
208 auto control = Dali::Toolkit::PushButton::New();
209 auto button = Dali::Accessibility::Role::PUSH_BUTTON;
211 Dali::Accessibility::TestEnableSC( true );
213 control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, button );
215 auto q = Dali::Accessibility::Accessible::Get( control );
216 auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
221 control.SetProperty( Toolkit::Button::Property::LABEL, "Button2" );
223 DALI_TEST_EQUALS( "Button2" , TestGetName( q->GetAddress() ), TEST_LOCATION );
225 Dali::Accessibility::TestEnableSC( false );
230 int UtcDaliControlAccessibilityState(void)
232 ToolkitTestApplication application;
234 auto control = Control::New();
235 auto q = Dali::Accessibility::Accessible::Get( control );
237 Dali::Accessibility::TestEnableSC( true );
239 auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
240 auto states = DevelControl::GetAccessibilityStates(control);
241 DALI_TEST_CHECK( states_by_bridge == states );
243 Dali::Accessibility::TestEnableSC( false );
248 int UtcDaliControlAccessibilityModal(void)
250 ToolkitTestApplication application;
252 auto control = Dali::Toolkit::Popup::New();
253 auto q = Dali::Accessibility::Accessible::Get( control );
255 Dali::Accessibility::TestEnableSC( true );
257 auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
258 DALI_TEST_CHECK( states_by_bridge[Dali::Accessibility::State::MODAL] );
260 Dali::Accessibility::TestEnableSC( false );
265 int UtcDaliControlAccessibilityHighlightable(void)
267 ToolkitTestApplication application;
268 auto control = Control::New();
270 auto noneset = control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE );
271 DALI_TEST_EQUALS( Property::NONE, noneset.GetType(), TEST_LOCATION );
273 // negative testcase - trying to set unconvertible value
274 control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, "deadbeef" );
275 noneset = control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE );
276 DALI_TEST_EQUALS( Property::NONE, noneset.GetType(), TEST_LOCATION );
278 auto q = Dali::Accessibility::Accessible::Get( control );
280 Dali::Accessibility::TestEnableSC( true );
282 auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
283 DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
285 control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
286 DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
287 DALI_TEST_EQUALS( true, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).Get< bool >(), TEST_LOCATION );
289 states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
290 DALI_TEST_CHECK( states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
292 control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false );
293 DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
294 DALI_TEST_EQUALS( false, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).Get< bool >(), TEST_LOCATION );
296 states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
297 DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
299 Dali::Accessibility::TestEnableSC( false );
304 int UtcDaliControlAccessibilityHighlightBridgeUp(void)
306 ToolkitTestApplication application;
308 auto controla = Control::New();
309 auto controlb = Control::New();
310 controla.Add(controlb);
312 controla.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
313 controlb.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
315 Dali::Accessibility::TestEnableSC( true );
317 auto accessible_a = Dali::Accessibility::Accessible::Get( controla );
318 auto accessible_b = Dali::Accessibility::Accessible::Get( controlb );
320 auto a = dynamic_cast<Dali::Accessibility::Component*>( accessible_a );
321 auto b = dynamic_cast<Dali::Accessibility::Component*>( accessible_b );
323 auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
324 auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
326 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
327 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
329 DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controla), TEST_LOCATION );
331 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
332 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
334 DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
335 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
337 DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
338 DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
340 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
341 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
343 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
344 DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
346 DALI_TEST_EQUALS( false, DevelControl::ClearAccessibilityHighlight(controla), TEST_LOCATION );
348 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
349 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
351 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
352 DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
354 DALI_TEST_EQUALS( true, DevelControl::ClearAccessibilityHighlight(controlb), TEST_LOCATION );
356 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
357 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
359 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
360 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
362 DALI_TEST_CHECK( TestGrabHighlight( a -> GetAddress() ) );
364 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
365 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
367 DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
368 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
370 DALI_TEST_CHECK( TestGrabHighlight( b -> GetAddress() ) );
372 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
373 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
375 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
376 DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
378 DALI_TEST_CHECK( TestClearHighlight( b -> GetAddress() ) );
380 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
381 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
383 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
384 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
387 Dali::Accessibility::TestEnableSC( false );
392 int utcDaliAccessibilityControlAttributes(void)
394 ToolkitTestApplication application;
395 auto check_box_button = Toolkit::Control::New();
400 auto attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
401 auto attributes_map = attributes.GetMap();
403 auto position = attributes_map->Find( "access_key1" );
404 DALI_TEST_CHECK( !position );
406 DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key1", "access_value1" );
407 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
408 attributes_map = attributes.GetMap();
410 DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
412 DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_a" );
413 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
414 attributes_map = attributes.GetMap();
416 DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
417 DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_a", TEST_LOCATION );
419 DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_b" );
420 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
421 attributes_map = attributes.GetMap();
423 DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_b", TEST_LOCATION );
425 DevelControl::RemoveAccessibilityAttribute( check_box_button, "access_key2" );
426 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
427 attributes_map = attributes.GetMap();
429 // In case when we are removing one of attributes the property is setting for NONE type.
430 DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->GetType(), Property::NONE, TEST_LOCATION );
432 Dali::Accessibility::TestEnableSC( true );
434 auto ptr = Dali::Accessibility::Accessible::Get( check_box_button );
435 auto attribute_map_bridge = TestGetAttributes( ptr->GetAddress() );
437 for (auto i = 0u; i<attributes_map->Count();++i)
438 if((attributes_map->GetValue(i)).GetType() != Property::NONE )
441 DALI_TEST_EQUALS( counter, attribute_map_bridge.size(), TEST_LOCATION );
443 for (auto it : attribute_map_bridge)
444 DALI_TEST_EQUALS( (attributes_map->Find( it.first ))->Get<std::string>(), it.second, TEST_LOCATION );
446 DevelControl::ClearAccessibilityAttributes(check_box_button);
447 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
448 attributes_map = attributes.GetMap();
450 position = attributes_map->Find( "access_key1" );
451 DALI_TEST_CHECK( !position );
453 position = attributes_map->Find( "access_key2" );
454 DALI_TEST_CHECK( !position );
456 Dali::Accessibility::TestEnableSC( false );
461 int UtcDaliControlReadingInfoType(void)
463 ToolkitTestApplication application;
464 auto control = Control::New();
466 auto reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
468 for ( auto i = 0u; i < 4; ++i)
469 DALI_TEST_CHECK ( reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
471 reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = false;
472 reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = false;
473 reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = false;
474 reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = false;
476 DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
478 reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
480 for ( auto i = 0u; i < 4; ++i)
481 DALI_TEST_CHECK ( false == reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
483 reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = true;
484 reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = true;
485 reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = true;
486 reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = true;
488 DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
490 auto q = control.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
493 DALI_TEST_EQUALS( (z->Find( "reading_info_type" ))->Get<std::string>(), "name|role|description|state", TEST_LOCATION );
494 reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
495 for ( auto i = 0u; i < 4; ++i)
496 DALI_TEST_CHECK ( reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
501 int UtcDaliControlDoGesture(void)
503 ToolkitTestApplication application;
504 auto control = Control::New();
505 Dali::Accessibility::TestEnableSC( true );
507 auto accessible = Dali::Accessibility::Accessible::Get( control );
508 auto gesture_one = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
509 auto gesture_two = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
511 DALI_TEST_CHECK( !accessible->DoGesture( gesture_one ) );
512 DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
514 DevelControl::AccessibilityDoGestureSignal(control).Connect( [] ( std::pair< Dali::Accessibility::GestureInfo, bool > &gesture ) {
515 if ( gesture.first.type == Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT )
516 gesture.second = true;
518 gesture.second = false;
521 DALI_TEST_CHECK( accessible->DoGesture( gesture_one ) );
522 DALI_TEST_CHECK( TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
524 DALI_TEST_CHECK( !accessible->DoGesture( gesture_two ) );
525 DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
527 Dali::Accessibility::TestEnableSC( false );
532 int UtcDaliAccessibilityRelation(void)
534 ToolkitTestApplication application;
535 Dali::Accessibility::TestEnableSC( true );
537 auto rel = Accessibility::RelationType::FLOWS_TO;
538 auto number = static_cast< size_t >( rel );
539 auto control = Control::New();
540 auto destination1 = Control::New();
541 auto destination2 = Control::New();
543 DevelControl::AppendAccessibilityRelation( control, destination1, rel );
544 auto relations = DevelControl::GetAccessibilityRelations(control);
545 DALI_TEST_CHECK( relations[ number ].size() == 1 );
547 DevelControl::AppendAccessibilityRelation( control, destination2, rel );
548 relations = DevelControl::GetAccessibilityRelations(control);
549 DALI_TEST_CHECK( relations[ number ].size() == 2 );
551 auto accessible = Dali::Accessibility::Accessible::Get( control );
552 auto accessible_destination1 = Dali::Accessibility::Accessible::Get( destination1 );
553 auto accessible_destination2 = Dali::Accessibility::Accessible::Get( destination2 );
554 auto relationset = accessible->GetRelationSet();
556 DALI_TEST_CHECK( relationset[0].relationType == rel );
557 DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination1->GetAddress() || relationset[0].targets[1] == accessible_destination1->GetAddress() );
558 DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination2->GetAddress() || relationset[0].targets[1] == accessible_destination2->GetAddress() );
560 auto relationset_bridge = TestGetRelationSet( accessible -> GetAddress() );
561 DALI_TEST_CHECK( static_cast< uint32_t >( relationset[0].relationType ) == std::get<0>( relationset_bridge[0] ) );
563 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] );
564 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] );
566 DevelControl::RemoveAccessibilityRelation(control,destination2,rel);
567 relations = DevelControl::GetAccessibilityRelations(control);
568 DALI_TEST_CHECK( relations[ number ].size() == 1 );
570 DevelControl::ClearAccessibilityRelations(control);
571 relations = DevelControl::GetAccessibilityRelations(control);
572 DALI_TEST_CHECK( relations[ number ].size() == 0 );
574 Dali::Accessibility::TestEnableSC( false );
579 int UtcDaliAccessibilityParentChildren(void)
581 ToolkitTestApplication application;
582 Dali::Accessibility::TestEnableSC( true );
584 auto parent = Control::New();
585 auto child_1 = Control::New();
586 auto child_2 = Control::New();
588 auto parent_accessible = Dali::Accessibility::Accessible::Get( parent );
589 auto child_1_accessible = Dali::Accessibility::Accessible::Get( child_1 );
590 auto child_2_accessible = Dali::Accessibility::Accessible::Get( child_2 );
592 auto children = TestGetChildren( parent_accessible -> GetAddress() );
593 DALI_TEST_EQUALS( children.size(), 0, TEST_LOCATION );
597 TestGetIndexInParent( child_1_accessible -> GetAddress() );
598 DALI_ABORT("Object has parent, test abort");
600 catch(TestDBusWrapper::error &){}
604 TestGetChildAtIndex( parent_accessible -> GetAddress(), -1 );
605 DALI_ABORT("Positive index, test abort");
607 catch(TestDBusWrapper::error &){}
609 DALI_TEST_EQUALS( parent_accessible -> GetChildCount(), 0, TEST_LOCATION );
613 child_1_accessible -> GetIndexInParent();
614 DALI_ABORT("Object has parent, test abort");
616 catch (const std::domain_error&){}
621 children = TestGetChildren( parent_accessible -> GetAddress() );
622 DALI_TEST_EQUALS( children.size(), 2, TEST_LOCATION );
624 DALI_TEST_EQUALS( parent_accessible -> GetAddress(), TestGetParent( child_1_accessible -> GetAddress() ), TEST_LOCATION );
625 DALI_TEST_EQUALS( child_2_accessible -> GetAddress(), TestGetChildAtIndex( parent_accessible -> GetAddress(), TestGetIndexInParent( child_2_accessible -> GetAddress() ) ), TEST_LOCATION );
627 DALI_TEST_EQUALS( parent_accessible, child_1_accessible -> GetParent(), TEST_LOCATION );
628 DALI_TEST_EQUALS( child_2_accessible, parent_accessible -> GetChildAtIndex( child_2_accessible -> GetIndexInParent() ) , TEST_LOCATION );
630 Dali::Accessibility::TestEnableSC( false );
635 int UtcDaliAccessibilityGetLayer(void)
637 ToolkitTestApplication application;
639 Dali::Accessibility::TestEnableSC( true );
641 auto control = Control::New();
642 auto accessible_obj = Dali::Accessibility::Accessible::Get( control );
643 auto accessible_component = dynamic_cast<Dali::Accessibility::Component*>(accessible_obj);
644 DALI_TEST_CHECK( accessible_component );
645 DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, accessible_component -> GetLayer(), TEST_LOCATION );
646 DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, TestGetLayer( accessible_component -> GetAddress() ), TEST_LOCATION );
648 Dali::Accessibility::TestEnableSC( false );
653 int UtcDaliAccessibilityGrabFocus(void)
655 ToolkitTestApplication application;
657 Dali::Accessibility::TestEnableSC( true );
659 auto controla = Control::New();
660 auto controlb = Control::New();
662 Stage::GetCurrent().Add( controla );
663 Stage::GetCurrent().Add( controlb );
665 controla.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
666 controlb.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
668 auto a = Dali::Accessibility::Accessible::Get( controla );
669 auto b = Dali::Accessibility::Accessible::Get( controlb );
671 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
672 auto b_component = dynamic_cast<Dali::Accessibility::Component*>( b );
674 auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
675 auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
677 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
678 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
680 DALI_TEST_CHECK( a_component -> GrabFocus() );
682 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
683 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
685 DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
686 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
688 DALI_TEST_CHECK( TestGrabFocus( b_component -> GetAddress() ) );
690 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
691 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
693 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
694 DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
696 Dali::Accessibility::TestEnableSC( false );
701 int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch(void)
703 ToolkitTestApplication application;
704 tet_infoline( "UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch" );
706 Dali::Accessibility::TestEnableSC( true );
708 auto control = Control::New();
709 Stage::GetCurrent().GetRootLayer().Add( control );
711 auto window = Dali::DevelWindow::Get( control );
712 DALI_TEST_CHECK( window );
714 //window.SetPosition({0,0});
715 DevelWindow::SetPositionSize( window, PositionSize( 0,0,480, 240 ) );
717 control.SetProperty( Actor::Property::POSITION, Vector3( 10, 10, 100 ) );
718 control.SetProperty( Actor::Property::SIZE, Vector2( 10, 10 ) );
720 application.SendNotification();
721 application.Render( 1 );
723 auto a = Dali::Accessibility::Accessible::Get( control );
724 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
726 auto extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
727 DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
728 DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
729 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
730 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
732 auto bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
733 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
734 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
735 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
736 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
738 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
739 DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
740 DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
741 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
742 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
744 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
745 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
746 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
747 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
748 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
750 control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false );
751 application.SendNotification();
752 application.Render( 1 );
754 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
755 DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
756 DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
757 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
758 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
760 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
761 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
762 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
763 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
764 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
766 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
767 DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
768 DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
769 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
770 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
772 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
773 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
774 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
775 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
776 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
778 Dali::Accessibility::TestEnableSC( false );
783 int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionDoNotMatch(void)
785 ToolkitTestApplication application;
787 Dali::Accessibility::TestEnableSC( true );
789 auto control = Control::New();
790 Stage::GetCurrent().GetRootLayer().Add( control );
791 auto window = Dali::DevelWindow::Get( control );
792 //window.SetPosition({33,33});
793 DevelWindow::SetPositionSize( window, PositionSize( 33,33,480, 240 ) );
795 control.SetProperty( Actor::Property::POSITION, Vector3( 10, 10, 100 ) );
796 control.SetProperty( Actor::Property::SIZE, Vector2( 10, 10 ) );
798 application.SendNotification();
799 application.Render( 1 );
801 auto a = Dali::Accessibility::Accessible::Get( control );
802 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
804 auto extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
805 DALI_TEST_EQUALS( extents.x, 38.0f, TEST_LOCATION );
806 DALI_TEST_EQUALS( extents.y, 38.0f, TEST_LOCATION );
807 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
808 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
810 auto bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
811 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 38, TEST_LOCATION );
812 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 38, TEST_LOCATION );
813 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
814 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
816 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
817 DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
818 DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
819 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
820 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
822 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
823 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
824 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
825 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
826 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
828 control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false );
829 application.SendNotification();
830 application.Render( 1 );
832 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
833 DALI_TEST_EQUALS( extents.x, 43.0f, TEST_LOCATION );
834 DALI_TEST_EQUALS( extents.y, 43.0f, TEST_LOCATION );
835 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
836 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
838 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
839 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 43, TEST_LOCATION );
840 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 43, TEST_LOCATION );
841 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
842 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
844 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
845 DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
846 DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
847 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
848 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
850 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
851 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
852 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
853 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
854 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
856 Dali::Accessibility::TestEnableSC( false );
861 int UtcDaliAccessibilityGetAlpha(void)
863 ToolkitTestApplication application;
865 Dali::Accessibility::TestEnableSC( true );
867 auto control = Control::New();
868 auto a = Dali::Accessibility::Accessible::Get( control );
869 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
871 DALI_TEST_EQUALS( 0.0, a_component -> GetAlpha(), TEST_LOCATION );
872 DALI_TEST_EQUALS( 0.0, TestGetAlpha( a_component -> GetAddress() ), TEST_LOCATION );
874 Dali::Accessibility::TestEnableSC( false );
879 int UtcDaliAccessibilityGetMdiZOrder(void)
881 ToolkitTestApplication application;
883 Dali::Accessibility::TestEnableSC( true );
885 auto control = Control::New();
886 auto a = Dali::Accessibility::Accessible::Get( control );
887 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
889 DALI_TEST_EQUALS( 0, static_cast< int >( a_component -> GetMdiZOrder() ), TEST_LOCATION );
890 DALI_TEST_EQUALS( 0, TestGetMdiZOrder( a_component -> GetAddress() ), TEST_LOCATION );
892 Dali::Accessibility::TestEnableSC( false );
897 int UtcDaliAccessibilityAction(void)
899 ToolkitTestApplication application;
901 Dali::Accessibility::TestEnableSC( true );
903 auto control = Control::New( );
904 auto a = Dali::Accessibility::Accessible::Get( control );
905 auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
907 std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
908 auto count = b -> GetActionCount();
910 DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
912 for (auto i = 0u; i<count; ++i)
914 DALI_TEST_CHECK( Dali::Accessibility::Find( actions, b -> GetActionName( i ) ) );
915 DALI_TEST_EQUALS( b -> GetActionName( i ), b -> GetLocalizedActionName( i ), TEST_LOCATION );
916 DALI_TEST_EQUALS( b -> GetActionDescription( i ), "", TEST_LOCATION );
917 DALI_TEST_EQUALS( b -> GetActionKeyBinding( i ), "", TEST_LOCATION );
920 // Empty strings should be returned for invalid indices
921 DALI_TEST_EQUALS(b->GetActionDescription(count), "", TEST_LOCATION);
922 DALI_TEST_EQUALS(b->GetActionName(count), "", TEST_LOCATION);
923 DALI_TEST_EQUALS(b->GetLocalizedActionName(count), "", TEST_LOCATION);
924 DALI_TEST_EQUALS(b->GetActionKeyBinding(count), "", TEST_LOCATION);
926 count = TestGetActionCount(b -> GetAddress());
928 DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
930 for (auto i = 0u; i<count; ++i)
932 DALI_TEST_CHECK( Dali::Accessibility::Find( actions, TestGetActionName( b->GetAddress(), i ) ) );
933 DALI_TEST_EQUALS( TestGetActionName( b->GetAddress(), i ), TestGetLocalizedActionName( b->GetAddress(), i ), TEST_LOCATION );
934 DALI_TEST_EQUALS( TestGetActionDescription( b->GetAddress(), i ), "", TEST_LOCATION );
935 DALI_TEST_EQUALS( TestGetActionKeyBinding( b->GetAddress(), i ), "", TEST_LOCATION );
938 DALI_TEST_EQUALS(TestGetActionDescription(b->GetAddress(), count), "", TEST_LOCATION);
939 DALI_TEST_EQUALS(TestGetActionName(b->GetAddress(), count), "", TEST_LOCATION);
940 DALI_TEST_EQUALS(TestGetLocalizedActionName(b->GetAddress(), count), "", TEST_LOCATION);
941 DALI_TEST_EQUALS(TestGetActionKeyBinding(b->GetAddress(), count), "", TEST_LOCATION);
943 Dali::Accessibility::TestEnableSC( false );
948 int UtcDaliAccessibilityDoAction(void)
950 ToolkitTestApplication application;
952 Dali::Accessibility::TestEnableSC( true );
953 thread_local std::vector< bool > actions_done { false, false, false, false, false, false };
955 auto control = Control::New( );
956 auto a = Dali::Accessibility::Accessible::Get( control );
957 auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
958 std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
960 // Test calling action by name
961 DALI_TEST_CHECK( b -> DoAction( actions[2] ) ); // ReadingSkipped
962 DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
963 DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
965 // Negative test of calling action with not defined name
966 DALI_TEST_CHECK( !b -> DoAction( "undefined" ) );
968 DevelControl::AccessibilityReadingSkippedSignal(control).Connect( [] () {
969 actions_done[ 1 ] = true;
971 DevelControl::AccessibilityReadingCancelledSignal(control).Connect( [] () {
972 actions_done[ 2 ] = true;
974 DevelControl::AccessibilityReadingStoppedSignal(control).Connect( [] () {
975 actions_done[ 3 ] = true;
977 DevelControl::AccessibilityReadingPausedSignal(control).Connect( [] () {
978 actions_done[ 4 ] = true;
980 DevelControl::AccessibilityReadingResumedSignal(control).Connect( [] () {
981 actions_done[ 5 ] = true;
983 DevelControl::AccessibilityActivateSignal(control).Connect( [] () {
984 actions_done[ 0 ] = true;
987 // Test calling action by index
988 DALI_TEST_CHECK( b -> DoAction( 1 ) );
989 DALI_TEST_CHECK( b -> DoAction( 2 ) );
990 DALI_TEST_CHECK( b -> DoAction( 3 ) );
991 DALI_TEST_CHECK( b -> DoAction( 4 ) );
992 DALI_TEST_CHECK( b -> DoAction( 5 ) );
993 DALI_TEST_CHECK( b -> DoAction( 6 ) );
995 for ( auto i = 0u; i < actions_done.size(); ++i )
997 DALI_TEST_CHECK( actions_done[ i ] );
998 actions_done[ i ] = false;
1001 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 1 ) );
1002 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 2 ) );
1003 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 3 ) );
1004 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 4 ) );
1005 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 5 ) );
1006 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 6 ) );
1008 for ( auto i = 0u; i < actions_done.size(); ++i )
1010 DALI_TEST_CHECK( actions_done[ i ] );
1011 actions_done[ i ] = false;
1014 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 1 ] ) );
1015 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 2 ] ) );
1016 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 3 ] ) );
1017 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 4 ] ) );
1018 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 5 ] ) );
1019 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 6 ] ) );
1021 for ( auto i = 0u; i < actions_done.size(); ++i )
1022 DALI_TEST_CHECK( actions_done[ i ] );
1024 Dali::Accessibility::TestEnableSC( false );
1029 void TestVoidCallback()
1033 int UtcDaliAccessibilitySignals(void)
1035 ToolkitTestApplication application;
1036 ConnectionTracker connectionTracker;
1037 Control control = Control::New();
1039 DALI_TEST_CHECK( DevelControl::AccessibilityGetNameSignal(control).Empty() );
1040 control.ConnectSignal( &connectionTracker, "getName", &TestVoidCallback );
1041 DALI_TEST_CHECK( !DevelControl::AccessibilityGetNameSignal(control).Empty() );
1043 DALI_TEST_CHECK( DevelControl::AccessibilityGetDescriptionSignal(control).Empty() );
1044 control.ConnectSignal( &connectionTracker, "getDescription", &TestVoidCallback );
1045 DALI_TEST_CHECK( !DevelControl::AccessibilityGetDescriptionSignal(control).Empty() );
1047 DALI_TEST_CHECK( DevelControl::AccessibilityDoGestureSignal(control).Empty() );
1048 control.ConnectSignal( &connectionTracker, "doGesture", &TestVoidCallback );
1049 DALI_TEST_CHECK( !DevelControl::AccessibilityDoGestureSignal(control).Empty() );
1054 static void Wait(ToolkitTestApplication& application)
1056 application.SendNotification();
1057 application.Render(16);
1060 int UtcDaliAccessibilityScrollToChildScrollView(void)
1062 ToolkitTestApplication application;
1063 Dali::Accessibility::TestEnableSC( true );
1065 ScrollView scrollView = ScrollView::New();
1066 application.GetScene().Add( scrollView );
1068 PushButton actorA = PushButton::New();
1069 const Dali::Vector3 positionA = Vector3(100.0f, 400.0f, 0.0f);
1070 actorA.SetProperty( Dali::Actor::Property::POSITION, positionA );
1071 scrollView.Add(actorA);
1073 PushButton actorB = PushButton::New();
1074 const Dali::Vector3 positionB = Vector3(500.0f, 200.0f, 0.0f);
1075 actorB.SetProperty( Dali::Actor::Property::POSITION, positionB );
1076 scrollView.Add(actorB);
1080 auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(scrollView));
1081 DALI_TEST_CHECK(accessibleParent);
1082 auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorA));
1083 DALI_TEST_CHECK(accessibleA);
1084 auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorB));
1085 DALI_TEST_CHECK(accessibleB);
1087 accessibleA->GrabHighlight(); // == scrollView.ScrollTo(actorA)
1089 accessibleB->GrabHighlight(); // == scrollView.ScrollTo(actorB)
1092 Dali::Accessibility::TestEnableSC( false );
1097 class TestItemFactory : public ItemFactory
1104 unsigned int GetNumberOfItems() override
1109 Dali::Actor NewItem(unsigned int itemId) override
1111 return TextLabel::New(std::to_string(itemId));
1116 int UtcDaliAccessibilityScrollToChildItemView(void)
1118 ToolkitTestApplication application;
1119 Dali::Accessibility::TestEnableSC( true );
1121 TestItemFactory factory;
1122 ItemView view = ItemView::New(factory);
1123 Dali::Vector3 vec(480.0f, 800.0f, 0.0f);
1124 ItemLayoutPtr layout = DefaultItemLayout::New( DefaultItemLayout::DEPTH );
1126 view.AddLayout(*layout);
1127 view.SetProperty( Actor::Property::SIZE, vec );
1129 application.GetScene().Add(view);
1130 layout->SetOrientation(ControlOrientation::Down);
1131 view.ActivateLayout(0, vec, 0.0f);
1135 auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view));
1136 DALI_TEST_CHECK(accessibleParent);
1137 auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view.GetItem(0)));
1138 DALI_TEST_CHECK(accessibleA);
1139 auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view.GetItem(1)));
1140 DALI_TEST_CHECK(accessibleB);
1142 accessibleA->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorA))
1144 accessibleB->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorB))
1147 Dali::Accessibility::TestEnableSC( false );
1151 int UtcDaliAccessibilityScrollToChildNonScrollable(void)
1153 ToolkitTestApplication application;
1154 Dali::Accessibility::TestEnableSC( true );
1156 TextLabel label = TextLabel::New("123");
1158 auto* accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(label));
1159 DALI_TEST_CHECK(accessible);
1161 DALI_TEST_EQUALS(accessible->IsScrollable(), false, TEST_LOCATION);
1162 DALI_TEST_EQUALS(accessible->ScrollToChild({}), false, TEST_LOCATION);
1163 DALI_TEST_EQUALS(accessible->GetInternalActor(), label, TEST_LOCATION);
1165 Dali::Accessibility::TestEnableSC( false );
1169 int UtcDaliAccessibilityCheckHighlight(void)
1171 ToolkitTestApplication application;
1172 Dali::Accessibility::TestEnableSC( true );
1173 Dali::Accessibility::TestResetMoveOutedCalled();
1175 // Make precondition two children exist in parent area
1176 PushButton parentButton = PushButton::New();
1177 parentButton.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
1178 parentButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1179 parentButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1180 parentButton.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f));
1181 parentButton.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 200.0f));
1182 application.GetScene().Add( parentButton );
1184 PushButton buttonA = PushButton::New();
1185 buttonA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1186 buttonA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1187 buttonA.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f));
1188 buttonA.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f));
1189 parentButton.Add(buttonA);
1191 PushButton buttonB = PushButton::New();
1192 buttonB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1193 buttonB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1194 buttonB.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f));
1195 buttonB.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f));
1196 parentButton.Add(buttonB);
1199 // Set highlight to first child (A) to enable movement tracking
1200 auto* accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonA));
1201 DALI_TEST_CHECK(accessible);
1202 accessible->GrabHighlight();
1205 // 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
1206 buttonA.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, -200.0f));
1208 // Need one more notificaiton to get correct updated position
1209 application.SendNotification();
1210 DALI_TEST_EQUALS( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1212 // Reset verdict data
1213 Dali::Accessibility::TestResetMoveOutedCalled();
1215 // 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
1216 buttonA.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, -300.0f) );
1218 // Need one more notificaiton to get correct updated position
1219 application.SendNotification();
1220 DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1222 // Reset verdict data
1223 Dali::Accessibility::TestResetMoveOutedCalled();
1225 // Set highlight to second child (B) to enable movement tracking
1226 accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonB));
1227 DALI_TEST_CHECK(accessible);
1228 accessible->GrabHighlight();
1231 // 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
1232 // B: (0,100) --> (0, 50)
1233 buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 50.0f) );
1235 // Need one more notificaiton to get correct updated position
1236 application.SendNotification();
1237 DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1239 // Reset verdict data
1240 Dali::Accessibility::TestResetMoveOutedCalled();
1242 // 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
1243 buttonB.SetProperty(Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f));
1245 // Need one more notificaiton to get correct updated position
1246 application.SendNotification();
1247 DALI_TEST_EQUALS( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1249 // Reset verdict data
1250 Dali::Accessibility::TestResetMoveOutedCalled();
1252 // 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
1253 // B: (300,100) --> (0, 100)
1254 buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f) );
1256 // Need one more seding notificaiton to get correct updated position
1257 application.SendNotification();
1258 DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1260 // Reset verdict data
1261 Dali::Accessibility::TestResetMoveOutedCalled();
1263 // Disable movement tracking on B by giving highlight to A
1264 accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonA));
1265 DALI_TEST_CHECK(accessible);
1266 accessible->GrabHighlight();
1269 // Move B (untracked) out of parent area through the parent's area right edge - no move outed event expected for B object
1270 // B: (0,100) --> (300, 100)
1271 buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f) );
1273 // Need one more seding notificaiton to get correct updated position
1274 application.SendNotification();
1275 DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1277 Dali::Accessibility::TestEnableSC( false );