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/devel-api/actors/actor-devel.h>
16 #include <dali/devel-api/common/stage.h>
19 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
21 using namespace Dali::Toolkit;
23 void utc_dali_accessibility_controls_bridge_up_startup(void)
25 test_return_value = TET_UNDEF;
26 DBusWrapper::Install(std::unique_ptr<DBusWrapper>(new TestDBusWrapper));
29 void utc_dali_accessibility_controls_bridge_up_cleanup(void)
31 test_return_value = TET_PASS;
32 //DBusWrapper::Install({}) is a de-install
33 DBusWrapper::Install({});
37 namespace Accessibility {
38 std::ostream & operator<< (std::ostream & stream, const Address & address)
40 stream << address.ToString();
46 int UtcDaliControlAccessibilityRaiseBridge(void)
48 DALI_TEST_CHECK(!Accessibility::IsUp());
50 ToolkitTestApplication application;
52 Dali::Accessibility::TestEnableSC(true);
54 DALI_TEST_CHECK(Accessibility::IsUp());
56 // auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
57 // for(auto &a : wr->daliMethods) {
59 // if (std::get<3>(a.first) == MethodType::Method) mt = "MethodType::Method";
60 // else if (std::get<3>(a.first) == MethodType::Getter) mt = "MethodType::Getter";
61 // else if (std::get<3>(a.first) == MethodType::Setter) mt = "MethodType::Setter";
63 // 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);
66 Dali::Accessibility::TestEnableSC(false);
68 DALI_TEST_CHECK(!Accessibility::IsUp());
73 int UtcDaliControlAccessibilityName(void)
75 ToolkitTestApplication application;
77 auto control = Control::New();
78 Stage::GetCurrent().Add( control );
80 auto q = Dali::Accessibility::Accessible::Get( control );
83 DALI_TEST_EQUALS( "" , q->GetName(), TEST_LOCATION );
85 control.SetProperty( DevelControl::Property::ACCESSIBILITY_NAME, "Accessibility_Name" );
86 DALI_TEST_EQUALS( "Accessibility_Name" , q->GetName(), TEST_LOCATION );
87 DALI_TEST_EQUALS( control.GetProperty( DevelControl::Property::ACCESSIBILITY_NAME ).Get< std::string >() , "Accessibility_Name", TEST_LOCATION );
89 DevelControl::AccessibilityGetNameSignal(control).Connect( [] (std::string &accessibility_name) {
90 accessibility_name = "Accessibility_Name_With_Callback"; } );
92 DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , q->GetName(), TEST_LOCATION );
94 Dali::Accessibility::TestEnableSC(true);
96 DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , TestGetName( q->GetAddress()), TEST_LOCATION );
98 //TODO test emission of name change signal
99 Dali::Accessibility::TestEnableSC( false );
104 int UtcDaliControlAccessibilityDescription(void)
106 ToolkitTestApplication application;
108 auto control = Control::New();
110 auto q = Dali::Accessibility::Accessible::Get( control );
111 DALI_TEST_CHECK( q );
113 DALI_TEST_EQUALS( "" , q->GetDescription(), TEST_LOCATION );
115 control.SetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION, "Accessibility_Description" );
116 DALI_TEST_EQUALS( "Accessibility_Description" , q->GetDescription(), TEST_LOCATION );
118 auto property = control.GetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION ).Get<std::string>();
119 DALI_TEST_EQUALS( "Accessibility_Description", property, TEST_LOCATION );
121 DevelControl::AccessibilityGetDescriptionSignal(control).Connect( [] (std::string &accessibility_description) {
122 accessibility_description = "Accessibility_Description_With_Callback"; } );
124 DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , q->GetDescription(), TEST_LOCATION );
126 Dali::Accessibility::TestEnableSC( true );
128 DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , TestGetDescription( q->GetAddress()), TEST_LOCATION );
130 //TODO test emission of description change signal
131 Dali::Accessibility::TestEnableSC( false );
136 int UtcDaliControlAccessibilityRole(void)
138 ToolkitTestApplication application;
140 auto control = Control::New();
141 auto role_unknown = Dali::Accessibility::Role::UNKNOWN;
142 auto role_pushbutton = Dali::Accessibility::Role::PUSH_BUTTON;
144 DALI_TEST_EQUALS( role_unknown,control.GetProperty( DevelControl::Property::ACCESSIBILITY_ROLE ).Get< Dali::Accessibility::Role >(), TEST_LOCATION );
146 auto q = Dali::Accessibility::Accessible::Get( control );
147 DALI_TEST_EQUALS( role_unknown , q->GetRole(), TEST_LOCATION);
148 DALI_TEST_EQUALS( "unknown" , q->GetRoleName(), TEST_LOCATION );
150 Dali::Accessibility::TestEnableSC( true );
151 DALI_TEST_CHECK( q );
152 DALI_TEST_EQUALS( static_cast< uint32_t >( role_unknown ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
153 DALI_TEST_EQUALS( "unknown" , TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
154 DALI_TEST_EQUALS( "unknown" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
156 control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, role_pushbutton );
158 DALI_TEST_EQUALS( static_cast< uint32_t >( role_pushbutton ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
159 DALI_TEST_EQUALS( "push button" ,TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
160 DALI_TEST_EQUALS( "push button" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
162 Dali::Accessibility::TestEnableSC( false );
164 DALI_TEST_EQUALS( role_pushbutton , q->GetRole(), TEST_LOCATION);
165 DALI_TEST_EQUALS( "push button" , q->GetRoleName(), TEST_LOCATION );
170 int UtcDaliControlAccessibilityRoleToggleButton(void)
172 ToolkitTestApplication application;
174 auto control = Dali::Toolkit::ToggleButton::New();
175 auto button = Dali::Accessibility::Role::TOGGLE_BUTTON;
177 control.SetProperty(Toolkit::ToggleButton::Property::TOOLTIPS,
178 Property::Array{"option1", "option2"});
180 Dali::Accessibility::TestEnableSC( true );
182 control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, button );
183 auto q = Dali::Accessibility::Accessible::Get( control );
185 DALI_TEST_EQUALS( button , q->GetRole(), TEST_LOCATION);
186 DALI_TEST_EQUALS( "toggle button" , q->GetRoleName(), TEST_LOCATION );
188 Dali::Accessibility::States states = q->GetStates();
189 DALI_TEST_EQUALS( true , (bool)states[Dali::Accessibility::State::VISIBLE], TEST_LOCATION);
191 DALI_TEST_EQUALS( "option1", q->GetDescription(), TEST_LOCATION );
193 auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
197 control.SetProperty( Toolkit::Button::Property::LABEL, "ToggleButton2" );
198 DALI_TEST_EQUALS( "ToggleButton2", TestGetName( q->GetAddress() ), TEST_LOCATION );
200 Dali::Accessibility::TestEnableSC( false );
205 int UtcDaliControlAccessibilityButtonLabel(void)
207 ToolkitTestApplication application;
209 auto control = Dali::Toolkit::PushButton::New();
210 auto button = Dali::Accessibility::Role::PUSH_BUTTON;
212 Dali::Accessibility::TestEnableSC( true );
214 control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, button );
216 auto q = Dali::Accessibility::Accessible::Get( control );
217 auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
222 control.SetProperty( Toolkit::Button::Property::LABEL, "Button2" );
224 DALI_TEST_EQUALS( "Button2" , TestGetName( q->GetAddress() ), TEST_LOCATION );
226 Dali::Accessibility::TestEnableSC( false );
231 int UtcDaliControlAccessibilityState(void)
233 ToolkitTestApplication application;
235 auto control = Control::New();
236 auto q = Dali::Accessibility::Accessible::Get( control );
238 Dali::Accessibility::TestEnableSC( true );
240 auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
241 auto states = DevelControl::GetAccessibilityStates(control);
242 DALI_TEST_CHECK( states_by_bridge == states );
244 Dali::Accessibility::TestEnableSC( false );
249 int UtcDaliControlAccessibilityModal(void)
251 ToolkitTestApplication application;
253 auto control = Dali::Toolkit::Popup::New();
254 auto q = Dali::Accessibility::Accessible::Get( control );
256 Dali::Accessibility::TestEnableSC( true );
258 auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
259 DALI_TEST_CHECK( states_by_bridge[Dali::Accessibility::State::MODAL] );
261 Dali::Accessibility::TestEnableSC( false );
266 int UtcDaliControlAccessibilityHighlightable(void)
268 ToolkitTestApplication application;
269 auto control = Control::New();
271 auto highlightable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE);
272 DALI_TEST_EQUALS(highlightable, false, TEST_LOCATION);
274 // negative testcase - trying to set unconvertible value
275 control.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, "deadbeef");
276 highlightable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE);
277 DALI_TEST_EQUALS(highlightable, false, TEST_LOCATION);
279 auto q = Dali::Accessibility::Accessible::Get( control );
281 Dali::Accessibility::TestEnableSC( true );
283 auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
284 DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
286 control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
287 DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
288 DALI_TEST_EQUALS( true, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).Get< bool >(), TEST_LOCATION );
290 states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
291 DALI_TEST_CHECK( states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
293 control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false );
294 DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
295 DALI_TEST_EQUALS( false, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).Get< bool >(), TEST_LOCATION );
297 states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
298 DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
300 Dali::Accessibility::TestEnableSC( false );
305 int UtcDaliControlAccessibilityHighlightBridgeUp(void)
307 ToolkitTestApplication application;
309 auto controla = Control::New();
310 auto controlb = Control::New();
311 controla.Add(controlb);
313 controla.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
314 controlb.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
316 Dali::Accessibility::TestEnableSC( true );
318 auto accessible_a = Dali::Accessibility::Accessible::Get( controla );
319 auto accessible_b = Dali::Accessibility::Accessible::Get( controlb );
321 auto a = dynamic_cast<Dali::Accessibility::Component*>( accessible_a );
322 auto b = dynamic_cast<Dali::Accessibility::Component*>( accessible_b );
324 auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
325 auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
327 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
328 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
330 DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controla), TEST_LOCATION );
332 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
333 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
335 DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
336 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
338 DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
339 DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
341 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
342 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
344 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
345 DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
347 DALI_TEST_EQUALS( false, DevelControl::ClearAccessibilityHighlight(controla), TEST_LOCATION );
349 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
350 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
352 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
353 DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
355 DALI_TEST_EQUALS( true, DevelControl::ClearAccessibilityHighlight(controlb), TEST_LOCATION );
357 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
358 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
360 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
361 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
363 DALI_TEST_CHECK( TestGrabHighlight( a -> GetAddress() ) );
365 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
366 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
368 DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
369 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
371 DALI_TEST_CHECK( TestGrabHighlight( b -> GetAddress() ) );
373 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
374 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
376 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
377 DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
379 DALI_TEST_CHECK( TestClearHighlight( b -> GetAddress() ) );
381 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
382 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
384 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
385 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
388 Dali::Accessibility::TestEnableSC( false );
393 int utcDaliAccessibilityControlAttributes(void)
395 ToolkitTestApplication application;
396 auto check_box_button = Toolkit::Control::New();
401 auto attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
402 auto attributes_map = attributes.GetMap();
404 auto position = attributes_map->Find( "access_key1" );
405 DALI_TEST_CHECK( !position );
407 DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key1", "access_value1" );
408 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
409 attributes_map = attributes.GetMap();
411 DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
413 DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_a" );
414 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
415 attributes_map = attributes.GetMap();
417 DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
418 DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_a", TEST_LOCATION );
420 DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_b" );
421 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
422 attributes_map = attributes.GetMap();
424 DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_b", TEST_LOCATION );
426 DevelControl::RemoveAccessibilityAttribute( check_box_button, "access_key2" );
427 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
428 attributes_map = attributes.GetMap();
430 // In case when we are removing one of attributes the property is setting for NONE type.
431 DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->GetType(), Property::NONE, TEST_LOCATION );
433 Dali::Accessibility::TestEnableSC( true );
435 auto ptr = Dali::Accessibility::Accessible::Get( check_box_button );
436 auto attribute_map_bridge = TestGetAttributes( ptr->GetAddress() );
438 for (auto i = 0u; i<attributes_map->Count();++i)
439 if((attributes_map->GetValue(i)).GetType() != Property::NONE )
442 DALI_TEST_EQUALS( counter, attribute_map_bridge.size(), TEST_LOCATION );
444 for (auto it : attribute_map_bridge)
445 DALI_TEST_EQUALS( (attributes_map->Find( it.first ))->Get<std::string>(), it.second, TEST_LOCATION );
447 DevelControl::ClearAccessibilityAttributes(check_box_button);
448 attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
449 attributes_map = attributes.GetMap();
451 position = attributes_map->Find( "access_key1" );
452 DALI_TEST_CHECK( !position );
454 position = attributes_map->Find( "access_key2" );
455 DALI_TEST_CHECK( !position );
457 Dali::Accessibility::TestEnableSC( false );
462 int UtcDaliControlReadingInfoType(void)
464 ToolkitTestApplication application;
465 auto control = Control::New();
467 auto reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
469 for ( auto i = 0u; i < 4; ++i)
470 DALI_TEST_CHECK ( reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
472 reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = false;
473 reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = false;
474 reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = false;
475 reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = false;
477 DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
479 reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
481 for ( auto i = 0u; i < 4; ++i)
482 DALI_TEST_CHECK ( false == reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
484 reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = true;
485 reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = true;
486 reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = true;
487 reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = true;
489 DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
491 auto q = control.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
494 DALI_TEST_EQUALS( (z->Find( "reading_info_type" ))->Get<std::string>(), "name|role|description|state", TEST_LOCATION );
495 reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
496 for ( auto i = 0u; i < 4; ++i)
497 DALI_TEST_CHECK ( reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
502 int UtcDaliControlDoGesture(void)
504 ToolkitTestApplication application;
505 auto control = Control::New();
506 Dali::Accessibility::TestEnableSC( true );
508 auto accessible = Dali::Accessibility::Accessible::Get( control );
509 auto gesture_one = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
510 auto gesture_two = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
512 DALI_TEST_CHECK( !accessible->DoGesture( gesture_one ) );
513 DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
515 DevelControl::AccessibilityDoGestureSignal(control).Connect( [] ( std::pair< Dali::Accessibility::GestureInfo, bool > &gesture ) {
516 if ( gesture.first.type == Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT )
517 gesture.second = true;
519 gesture.second = false;
522 DALI_TEST_CHECK( accessible->DoGesture( gesture_one ) );
523 DALI_TEST_CHECK( TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
525 DALI_TEST_CHECK( !accessible->DoGesture( gesture_two ) );
526 DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
528 Dali::Accessibility::TestEnableSC( false );
533 int UtcDaliAccessibilityRelation(void)
535 ToolkitTestApplication application;
536 Dali::Accessibility::TestEnableSC( true );
538 auto rel = Accessibility::RelationType::FLOWS_TO;
539 auto number = static_cast< size_t >( rel );
540 auto control = Control::New();
541 auto destination1 = Control::New();
542 auto destination2 = Control::New();
544 DevelControl::AppendAccessibilityRelation( control, destination1, rel );
545 auto relations = DevelControl::GetAccessibilityRelations(control);
546 DALI_TEST_CHECK( relations[ number ].size() == 1 );
548 DevelControl::AppendAccessibilityRelation( control, destination2, rel );
549 relations = DevelControl::GetAccessibilityRelations(control);
550 DALI_TEST_CHECK( relations[ number ].size() == 2 );
552 auto accessible = Dali::Accessibility::Accessible::Get( control );
553 auto accessible_destination1 = Dali::Accessibility::Accessible::Get( destination1 );
554 auto accessible_destination2 = Dali::Accessibility::Accessible::Get( destination2 );
555 auto relationset = accessible->GetRelationSet();
557 DALI_TEST_CHECK( relationset[0].relationType == rel );
558 DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination1->GetAddress() || relationset[0].targets[1] == accessible_destination1->GetAddress() );
559 DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination2->GetAddress() || relationset[0].targets[1] == accessible_destination2->GetAddress() );
561 auto relationset_bridge = TestGetRelationSet( accessible -> GetAddress() );
562 DALI_TEST_CHECK( static_cast< uint32_t >( relationset[0].relationType ) == std::get<0>( relationset_bridge[0] ) );
564 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] );
565 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] );
567 DevelControl::RemoveAccessibilityRelation(control,destination2,rel);
568 relations = DevelControl::GetAccessibilityRelations(control);
569 DALI_TEST_CHECK( relations[ number ].size() == 1 );
571 DevelControl::ClearAccessibilityRelations(control);
572 relations = DevelControl::GetAccessibilityRelations(control);
573 DALI_TEST_CHECK( relations[ number ].size() == 0 );
575 Dali::Accessibility::TestEnableSC( false );
580 int UtcDaliAccessibilityParentChildren(void)
582 ToolkitTestApplication application;
583 Dali::Accessibility::TestEnableSC( true );
585 auto parent = Control::New();
586 auto child_1 = Control::New();
587 auto child_2 = Control::New();
589 auto parent_accessible = Dali::Accessibility::Accessible::Get( parent );
590 auto child_1_accessible = Dali::Accessibility::Accessible::Get( child_1 );
591 auto child_2_accessible = Dali::Accessibility::Accessible::Get( child_2 );
593 auto children = TestGetChildren( parent_accessible -> GetAddress() );
594 DALI_TEST_EQUALS( children.size(), 0, TEST_LOCATION );
598 TestGetIndexInParent( child_1_accessible -> GetAddress() );
599 DALI_ABORT("Object has parent, test abort");
601 catch(TestDBusWrapper::error &){}
605 TestGetChildAtIndex( parent_accessible -> GetAddress(), -1 );
606 DALI_ABORT("Positive index, test abort");
608 catch(TestDBusWrapper::error &){}
610 DALI_TEST_EQUALS( parent_accessible -> GetChildCount(), 0, TEST_LOCATION );
614 child_1_accessible -> GetIndexInParent();
615 DALI_ABORT("Object has parent, test abort");
617 catch (const std::domain_error&){}
622 children = TestGetChildren( parent_accessible -> GetAddress() );
623 DALI_TEST_EQUALS( children.size(), 2, TEST_LOCATION );
625 DALI_TEST_EQUALS( parent_accessible -> GetAddress(), TestGetParent( child_1_accessible -> GetAddress() ), TEST_LOCATION );
626 DALI_TEST_EQUALS( child_2_accessible -> GetAddress(), TestGetChildAtIndex( parent_accessible -> GetAddress(), TestGetIndexInParent( child_2_accessible -> GetAddress() ) ), TEST_LOCATION );
628 DALI_TEST_EQUALS( parent_accessible, child_1_accessible -> GetParent(), TEST_LOCATION );
629 DALI_TEST_EQUALS( child_2_accessible, parent_accessible -> GetChildAtIndex( child_2_accessible -> GetIndexInParent() ) , TEST_LOCATION );
631 Dali::Accessibility::TestEnableSC( false );
636 int UtcDaliAccessibilityGetLayer(void)
638 ToolkitTestApplication application;
640 Dali::Accessibility::TestEnableSC( true );
642 auto control = Control::New();
643 auto accessible_obj = Dali::Accessibility::Accessible::Get( control );
644 auto accessible_component = dynamic_cast<Dali::Accessibility::Component*>(accessible_obj);
645 DALI_TEST_CHECK( accessible_component );
646 DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, accessible_component -> GetLayer(), TEST_LOCATION );
647 DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, TestGetLayer( accessible_component -> GetAddress() ), TEST_LOCATION );
649 Dali::Accessibility::TestEnableSC( false );
654 int UtcDaliAccessibilityGrabFocus(void)
656 ToolkitTestApplication application;
658 Dali::Accessibility::TestEnableSC( true );
660 auto controla = Control::New();
661 auto controlb = Control::New();
663 Stage::GetCurrent().Add( controla );
664 Stage::GetCurrent().Add( controlb );
666 controla.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
667 controlb.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
669 auto a = Dali::Accessibility::Accessible::Get( controla );
670 auto b = Dali::Accessibility::Accessible::Get( controlb );
672 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
673 auto b_component = dynamic_cast<Dali::Accessibility::Component*>( b );
675 auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
676 auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
678 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
679 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
681 DALI_TEST_CHECK( a_component -> GrabFocus() );
683 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
684 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
686 DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
687 DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
689 DALI_TEST_CHECK( TestGrabFocus( b_component -> GetAddress() ) );
691 states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
692 states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
694 DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
695 DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
697 Dali::Accessibility::TestEnableSC( false );
702 int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch(void)
704 ToolkitTestApplication application;
705 tet_infoline( "UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch" );
707 Dali::Accessibility::TestEnableSC( true );
709 auto control = Control::New();
710 Stage::GetCurrent().GetRootLayer().Add( control );
712 auto window = Dali::DevelWindow::Get( control );
713 DALI_TEST_CHECK( window );
715 //window.SetPosition({0,0});
716 DevelWindow::SetPositionSize( window, PositionSize( 0,0,480, 240 ) );
718 control.SetProperty( Actor::Property::POSITION, Vector3( 10, 10, 100 ) );
719 control.SetProperty( Actor::Property::SIZE, Vector2( 10, 10 ) );
721 application.SendNotification();
722 application.Render( 1 );
724 auto a = Dali::Accessibility::Accessible::Get( control );
725 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
727 auto extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
728 DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
729 DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
730 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
731 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
733 auto bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
734 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
735 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
736 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
737 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
739 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
740 DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
741 DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
742 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
743 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
745 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
746 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
747 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
748 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
749 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
751 control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false );
752 application.SendNotification();
753 application.Render( 1 );
755 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
756 DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
757 DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
758 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
759 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
761 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
762 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
763 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
764 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
765 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
767 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
768 DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
769 DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
770 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
771 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
773 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
774 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
775 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
776 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
777 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
779 Dali::Accessibility::TestEnableSC( false );
784 int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionDoNotMatch(void)
786 ToolkitTestApplication application;
788 Dali::Accessibility::TestEnableSC( true );
790 auto control = Control::New();
791 Stage::GetCurrent().GetRootLayer().Add( control );
792 auto window = Dali::DevelWindow::Get( control );
793 //window.SetPosition({33,33});
794 DevelWindow::SetPositionSize( window, PositionSize( 33,33,480, 240 ) );
796 control.SetProperty( Actor::Property::POSITION, Vector3( 10, 10, 100 ) );
797 control.SetProperty( Actor::Property::SIZE, Vector2( 10, 10 ) );
799 application.SendNotification();
800 application.Render( 1 );
802 auto a = Dali::Accessibility::Accessible::Get( control );
803 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
805 auto extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
806 DALI_TEST_EQUALS( extents.x, 38.0f, TEST_LOCATION );
807 DALI_TEST_EQUALS( extents.y, 38.0f, TEST_LOCATION );
808 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
809 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
811 auto bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
812 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 38, TEST_LOCATION );
813 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 38, TEST_LOCATION );
814 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
815 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
817 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
818 DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
819 DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
820 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
821 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
823 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
824 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
825 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
826 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
827 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
829 control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false );
830 application.SendNotification();
831 application.Render( 1 );
833 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
834 DALI_TEST_EQUALS( extents.x, 43.0f, TEST_LOCATION );
835 DALI_TEST_EQUALS( extents.y, 43.0f, TEST_LOCATION );
836 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
837 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
839 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
840 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 43, TEST_LOCATION );
841 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 43, TEST_LOCATION );
842 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
843 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
845 extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
846 DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
847 DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
848 DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
849 DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
851 bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
852 DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
853 DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
854 DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
855 DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
857 Dali::Accessibility::TestEnableSC( false );
862 int UtcDaliAccessibilityGetAlpha(void)
864 ToolkitTestApplication application;
866 Dali::Accessibility::TestEnableSC( true );
868 auto control = Control::New();
869 auto a = Dali::Accessibility::Accessible::Get( control );
870 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
872 DALI_TEST_EQUALS( 0.0, a_component -> GetAlpha(), TEST_LOCATION );
873 DALI_TEST_EQUALS( 0.0, TestGetAlpha( a_component -> GetAddress() ), TEST_LOCATION );
875 Dali::Accessibility::TestEnableSC( false );
880 int UtcDaliAccessibilityGetMdiZOrder(void)
882 ToolkitTestApplication application;
884 Dali::Accessibility::TestEnableSC( true );
886 auto control = Control::New();
887 auto a = Dali::Accessibility::Accessible::Get( control );
888 auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
890 DALI_TEST_EQUALS( 0, static_cast< int >( a_component -> GetMdiZOrder() ), TEST_LOCATION );
891 DALI_TEST_EQUALS( 0, TestGetMdiZOrder( a_component -> GetAddress() ), TEST_LOCATION );
893 Dali::Accessibility::TestEnableSC( false );
898 int UtcDaliAccessibilityAction(void)
900 ToolkitTestApplication application;
902 Dali::Accessibility::TestEnableSC( true );
904 auto control = Control::New( );
905 auto a = Dali::Accessibility::Accessible::Get( control );
906 auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
908 std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
909 auto count = b -> GetActionCount();
911 DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
913 for (auto i = 0u; i<count; ++i)
915 DALI_TEST_CHECK( Dali::Accessibility::Find( actions, b -> GetActionName( i ) ) );
916 DALI_TEST_EQUALS( b -> GetActionName( i ), b -> GetLocalizedActionName( i ), TEST_LOCATION );
917 DALI_TEST_EQUALS( b -> GetActionDescription( i ), "", TEST_LOCATION );
918 DALI_TEST_EQUALS( b -> GetActionKeyBinding( i ), "", TEST_LOCATION );
921 // Empty strings should be returned for invalid indices
922 DALI_TEST_EQUALS(b->GetActionDescription(count), "", TEST_LOCATION);
923 DALI_TEST_EQUALS(b->GetActionName(count), "", TEST_LOCATION);
924 DALI_TEST_EQUALS(b->GetLocalizedActionName(count), "", TEST_LOCATION);
925 DALI_TEST_EQUALS(b->GetActionKeyBinding(count), "", TEST_LOCATION);
927 count = TestGetActionCount(b -> GetAddress());
929 DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
931 for (auto i = 0u; i<count; ++i)
933 DALI_TEST_CHECK( Dali::Accessibility::Find( actions, TestGetActionName( b->GetAddress(), i ) ) );
934 DALI_TEST_EQUALS( TestGetActionName( b->GetAddress(), i ), TestGetLocalizedActionName( b->GetAddress(), i ), TEST_LOCATION );
935 DALI_TEST_EQUALS( TestGetActionDescription( b->GetAddress(), i ), "", TEST_LOCATION );
936 DALI_TEST_EQUALS( TestGetActionKeyBinding( b->GetAddress(), i ), "", TEST_LOCATION );
939 DALI_TEST_EQUALS(TestGetActionDescription(b->GetAddress(), count), "", TEST_LOCATION);
940 DALI_TEST_EQUALS(TestGetActionName(b->GetAddress(), count), "", TEST_LOCATION);
941 DALI_TEST_EQUALS(TestGetLocalizedActionName(b->GetAddress(), count), "", TEST_LOCATION);
942 DALI_TEST_EQUALS(TestGetActionKeyBinding(b->GetAddress(), count), "", TEST_LOCATION);
944 Dali::Accessibility::TestEnableSC( false );
949 int UtcDaliAccessibilityDoAction(void)
951 ToolkitTestApplication application;
953 Dali::Accessibility::TestEnableSC( true );
954 thread_local std::vector< bool > actions_done { false, false, false, false, false, false };
956 auto control = Control::New( );
957 auto a = Dali::Accessibility::Accessible::Get( control );
958 auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
959 std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
961 // Test calling action by name
962 DALI_TEST_CHECK( b -> DoAction( actions[2] ) ); // ReadingSkipped
963 DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
964 DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
966 // Negative test of calling action with not defined name
967 DALI_TEST_CHECK( !b -> DoAction( "undefined" ) );
969 DevelControl::AccessibilityReadingSkippedSignal(control).Connect( [] () {
970 actions_done[ 1 ] = true;
972 DevelControl::AccessibilityReadingCancelledSignal(control).Connect( [] () {
973 actions_done[ 2 ] = true;
975 DevelControl::AccessibilityReadingStoppedSignal(control).Connect( [] () {
976 actions_done[ 3 ] = true;
978 DevelControl::AccessibilityReadingPausedSignal(control).Connect( [] () {
979 actions_done[ 4 ] = true;
981 DevelControl::AccessibilityReadingResumedSignal(control).Connect( [] () {
982 actions_done[ 5 ] = true;
984 DevelControl::AccessibilityActivateSignal(control).Connect( [] () {
985 actions_done[ 0 ] = true;
988 // Test calling action by index
989 DALI_TEST_CHECK( b -> DoAction( 1 ) );
990 DALI_TEST_CHECK( b -> DoAction( 2 ) );
991 DALI_TEST_CHECK( b -> DoAction( 3 ) );
992 DALI_TEST_CHECK( b -> DoAction( 4 ) );
993 DALI_TEST_CHECK( b -> DoAction( 5 ) );
994 DALI_TEST_CHECK( b -> DoAction( 6 ) );
996 for ( auto i = 0u; i < actions_done.size(); ++i )
998 DALI_TEST_CHECK( actions_done[ i ] );
999 actions_done[ i ] = false;
1002 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 1 ) );
1003 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 2 ) );
1004 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 3 ) );
1005 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 4 ) );
1006 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 5 ) );
1007 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 6 ) );
1009 for ( auto i = 0u; i < actions_done.size(); ++i )
1011 DALI_TEST_CHECK( actions_done[ i ] );
1012 actions_done[ i ] = false;
1015 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 1 ] ) );
1016 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 2 ] ) );
1017 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 3 ] ) );
1018 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 4 ] ) );
1019 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 5 ] ) );
1020 DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 6 ] ) );
1022 for ( auto i = 0u; i < actions_done.size(); ++i )
1023 DALI_TEST_CHECK( actions_done[ i ] );
1025 Dali::Accessibility::TestEnableSC( false );
1030 void TestVoidCallback()
1034 int UtcDaliAccessibilitySignals(void)
1036 ToolkitTestApplication application;
1037 ConnectionTracker connectionTracker;
1038 Control control = Control::New();
1040 DALI_TEST_CHECK( DevelControl::AccessibilityGetNameSignal(control).Empty() );
1041 control.ConnectSignal( &connectionTracker, "getName", &TestVoidCallback );
1042 DALI_TEST_CHECK( !DevelControl::AccessibilityGetNameSignal(control).Empty() );
1044 DALI_TEST_CHECK( DevelControl::AccessibilityGetDescriptionSignal(control).Empty() );
1045 control.ConnectSignal( &connectionTracker, "getDescription", &TestVoidCallback );
1046 DALI_TEST_CHECK( !DevelControl::AccessibilityGetDescriptionSignal(control).Empty() );
1048 DALI_TEST_CHECK( DevelControl::AccessibilityDoGestureSignal(control).Empty() );
1049 control.ConnectSignal( &connectionTracker, "doGesture", &TestVoidCallback );
1050 DALI_TEST_CHECK( !DevelControl::AccessibilityDoGestureSignal(control).Empty() );
1055 static void Wait(ToolkitTestApplication& application)
1057 application.SendNotification();
1058 application.Render(16);
1061 int UtcDaliAccessibilityScrollToChildScrollView(void)
1063 ToolkitTestApplication application;
1064 Dali::Accessibility::TestEnableSC( true );
1066 ScrollView scrollView = ScrollView::New();
1067 application.GetScene().Add( scrollView );
1069 PushButton actorA = PushButton::New();
1070 const Dali::Vector3 positionA = Vector3(100.0f, 400.0f, 0.0f);
1071 actorA.SetProperty( Dali::Actor::Property::POSITION, positionA );
1072 scrollView.Add(actorA);
1074 PushButton actorB = PushButton::New();
1075 const Dali::Vector3 positionB = Vector3(500.0f, 200.0f, 0.0f);
1076 actorB.SetProperty( Dali::Actor::Property::POSITION, positionB );
1077 scrollView.Add(actorB);
1079 TableView tableView = TableView::New( 2, 2 ); // 2 by 2 grid.
1080 tableView.SetProperty( Actor::Property::SIZE, Vector2(100.0f, 100.0f) );
1081 scrollView.Add(tableView);
1083 PushButton actorC = PushButton::New();
1084 actorC.SetProperty( Actor::Property::SIZE, Vector2(50.0f, 50.0f) );
1085 tableView.AddChild( actorC, TableView::CellPosition( 0, 0 ) );
1087 PushButton actorD = PushButton::New();
1088 application.GetScene().Add( actorD );
1092 auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(scrollView));
1093 DALI_TEST_CHECK(accessibleParent);
1094 auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorA));
1095 DALI_TEST_CHECK(accessibleA);
1096 auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorB));
1097 DALI_TEST_CHECK(accessibleB);
1098 auto* accessibleC = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorC));
1099 DALI_TEST_CHECK(accessibleC);
1101 accessibleA->GrabHighlight(); // == scrollView.ScrollTo(actorA)
1103 accessibleB->GrabHighlight(); // == scrollView.ScrollTo(actorB)
1106 // scrollView is ancestor of actorC
1107 // This should work without a crash
1108 accessibleC->GrabHighlight(); // == scrollView.ScrollTo(actorC)
1111 // negative testcase calling ScrollToChild using non-child actor
1112 accessibleParent->ScrollToChild(actorD);
1114 Dali::Accessibility::TestEnableSC( false );
1119 class TestItemFactory : public ItemFactory
1126 unsigned int GetNumberOfItems() override
1131 Dali::Actor NewItem(unsigned int itemId) override
1133 return TextLabel::New(std::to_string(itemId));
1138 int UtcDaliAccessibilityScrollToChildItemView(void)
1140 ToolkitTestApplication application;
1141 Dali::Accessibility::TestEnableSC( true );
1143 TestItemFactory factory;
1144 ItemView view = ItemView::New(factory);
1145 Dali::Vector3 vec(480.0f, 800.0f, 0.0f);
1146 ItemLayoutPtr layout = DefaultItemLayout::New( DefaultItemLayout::DEPTH );
1148 view.AddLayout(*layout);
1149 view.SetProperty( Actor::Property::SIZE, vec );
1151 application.GetScene().Add(view);
1152 layout->SetOrientation(ControlOrientation::Down);
1153 view.ActivateLayout(0, vec, 0.0f);
1157 auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view));
1158 DALI_TEST_CHECK(accessibleParent);
1159 auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view.GetItem(0)));
1160 DALI_TEST_CHECK(accessibleA);
1161 auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view.GetItem(1)));
1162 DALI_TEST_CHECK(accessibleB);
1164 accessibleA->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorA))
1166 accessibleB->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorB))
1169 Dali::Accessibility::TestEnableSC( false );
1173 int UtcDaliAccessibilityScrollToChildNonScrollable(void)
1175 ToolkitTestApplication application;
1176 Dali::Accessibility::TestEnableSC( true );
1178 TextLabel label = TextLabel::New("123");
1180 auto* accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(label));
1181 DALI_TEST_CHECK(accessible);
1183 DALI_TEST_EQUALS(accessible->IsScrollable(), false, TEST_LOCATION);
1184 DALI_TEST_EQUALS(accessible->ScrollToChild({}), false, TEST_LOCATION);
1185 DALI_TEST_EQUALS(accessible->GetInternalActor(), label, TEST_LOCATION);
1187 Dali::Accessibility::TestEnableSC( false );
1191 int UtcDaliAccessibilityCheckHighlight(void)
1193 ToolkitTestApplication application;
1194 Dali::Accessibility::TestEnableSC( true );
1195 Dali::Accessibility::TestResetMoveOutedCalled();
1197 // Make precondition two children exist in parent area
1198 PushButton parentButton = PushButton::New();
1199 parentButton.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
1200 parentButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1201 parentButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1202 parentButton.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f));
1203 parentButton.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 200.0f));
1204 application.GetScene().Add( parentButton );
1206 PushButton buttonA = PushButton::New();
1207 buttonA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1208 buttonA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1209 buttonA.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f));
1210 buttonA.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f));
1211 parentButton.Add(buttonA);
1213 PushButton buttonB = PushButton::New();
1214 buttonB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1215 buttonB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1216 buttonB.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f));
1217 buttonB.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f));
1218 parentButton.Add(buttonB);
1221 // Set highlight to first child (A) to enable movement tracking
1222 auto* accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonA));
1223 DALI_TEST_CHECK(accessible);
1224 accessible->GrabHighlight();
1227 // 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
1228 buttonA.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, -200.0f));
1230 // Need one more notificaiton to get correct updated position
1231 application.SendNotification();
1232 DALI_TEST_EQUALS( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1234 // Reset verdict data
1235 Dali::Accessibility::TestResetMoveOutedCalled();
1237 // 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
1238 buttonA.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, -300.0f) );
1240 // Need one more notificaiton to get correct updated position
1241 application.SendNotification();
1242 DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1244 // Reset verdict data
1245 Dali::Accessibility::TestResetMoveOutedCalled();
1247 // Set highlight to second child (B) to enable movement tracking
1248 accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonB));
1249 DALI_TEST_CHECK(accessible);
1250 accessible->GrabHighlight();
1253 // 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
1254 // B: (0,100) --> (0, 50)
1255 buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 50.0f) );
1257 // Need one more notificaiton to get correct updated position
1258 application.SendNotification();
1259 DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1261 // Reset verdict data
1262 Dali::Accessibility::TestResetMoveOutedCalled();
1264 // 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
1265 buttonB.SetProperty(Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f));
1267 // Need one more notificaiton to get correct updated position
1268 application.SendNotification();
1269 DALI_TEST_EQUALS( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1271 // Reset verdict data
1272 Dali::Accessibility::TestResetMoveOutedCalled();
1274 // 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
1275 // B: (300,100) --> (0, 100)
1276 buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f) );
1278 // Need one more seding notificaiton to get correct updated position
1279 application.SendNotification();
1280 DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1282 // Reset verdict data
1283 Dali::Accessibility::TestResetMoveOutedCalled();
1285 // Disable movement tracking on B by giving highlight to A
1286 accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonA));
1287 DALI_TEST_CHECK(accessible);
1288 accessible->GrabHighlight();
1291 // Move B (untracked) out of parent area through the parent's area right edge - no move outed event expected for B object
1292 // B: (0,100) --> (300, 100)
1293 buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f) );
1295 // Need one more seding notificaiton to get correct updated position
1296 application.SendNotification();
1297 DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1299 Dali::Accessibility::TestEnableSC( false );