[AT-SPI] Rewritten UtcDaliControlAccessibilityModal
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-Accessibility-Controls-BridgeUp.cpp
1 #include <dali-toolkit-test-suite-utils.h>
2 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/accessibility-test-utils.h>
3 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
4 #include <dali-toolkit/dali-toolkit.h>
5 #include <dali/devel-api/adaptor-framework/accessibility.h>
6 #include <dali/devel-api/adaptor-framework/accessibility-impl.h>
7 #include <dali-toolkit/devel-api/controls/control-devel.h>
8 #include <dali-toolkit/devel-api/controls/popup/popup.h>
9 #include <dali/devel-api/actors/actor-devel.h>
10 #include <dali/devel-api/common/stage.h>
11 #include <cstdlib>
12
13 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
14
15 using namespace Dali::Toolkit;
16
17 void utc_dali_accessibility_controls_bridge_up_startup(void)
18 {
19   test_return_value = TET_UNDEF;
20   DBusWrapper::Install(std::unique_ptr<DBusWrapper>(new TestDBusWrapper));
21 }
22
23 void utc_dali_accessibility_controls_bridge_up_cleanup(void)
24 {
25   test_return_value = TET_PASS;
26   //DBusWrapper::Install({}) is a de-install
27   DBusWrapper::Install({});
28 }
29
30 namespace Dali {
31   namespace Accessibility {
32     std::ostream & operator<< (std::ostream & stream, const Address & address)
33     {
34       stream << address.ToString();
35       return stream;
36     }
37   }
38 }
39
40 int UtcDaliControlAccessibilityRaiseBridge(void)
41 {
42   DALI_TEST_CHECK(!Accessibility::IsUp());
43
44   ToolkitTestApplication application;
45
46   Dali::Accessibility::TestEnableSC(true);
47
48   DALI_TEST_CHECK(Accessibility::IsUp());
49
50   // auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
51   // for(auto &a : wr->daliMethods) {
52   //   const char *mt;
53   //   if (std::get<3>(a.first) == MethodType::Method) mt = "MethodType::Method";
54   //   else if (std::get<3>(a.first) == MethodType::Getter) mt = "MethodType::Getter";
55   //   else if (std::get<3>(a.first) == MethodType::Setter) mt = "MethodType::Setter";
56   //   else assert(0);
57   //   printf("%s %s %s %s\n", std::get<0>(a.first).c_str(), std::get<1>(a.first).c_str(), std::get<2>(a.first).c_str(), mt);
58   // }
59
60   Dali::Accessibility::TestEnableSC(false);
61
62   DALI_TEST_CHECK(!Accessibility::IsUp());
63
64   END_TEST;
65 }
66
67 int UtcDaliControlAccessibilityName(void)
68 {
69   ToolkitTestApplication application;
70
71   auto control = Control::New();
72   Stage::GetCurrent().Add( control );
73
74   auto q = Dali::Accessibility::Accessible::Get( control );
75   DALI_TEST_CHECK( q );
76
77   DALI_TEST_EQUALS( "" , q->GetName(), TEST_LOCATION );
78
79   control.SetProperty( DevelControl::Property::ACCESSIBILITY_NAME, "Accessibility_Name" );
80   DALI_TEST_EQUALS( "Accessibility_Name" , q->GetName(), TEST_LOCATION );
81   DALI_TEST_EQUALS( control.GetProperty( DevelControl::Property::ACCESSIBILITY_NAME ).Get< std::string >() , "Accessibility_Name", TEST_LOCATION );
82
83   DevelControl::AccessibilityGetNameSignal(control).Connect( [] (std::string &accessibility_name) {
84     accessibility_name = "Accessibility_Name_With_Callback"; } );
85
86   DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , q->GetName(), TEST_LOCATION );
87
88   Dali::Accessibility::TestEnableSC(true);
89
90   DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , TestGetName( q->GetAddress()), TEST_LOCATION );
91
92   Dali::Accessibility::TestEnableSC( false );
93
94   END_TEST;
95 }
96
97 int UtcDaliControlAccessibilityDescription(void)
98 {
99   ToolkitTestApplication application;
100
101   auto control = Control::New();
102
103   auto q = Dali::Accessibility::Accessible::Get( control );
104   DALI_TEST_CHECK( q );
105
106   DALI_TEST_EQUALS( "" , q->GetDescription(), TEST_LOCATION );
107
108   control.SetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION, "Accessibility_Description" );
109   DALI_TEST_EQUALS( "Accessibility_Description" , q->GetDescription(), TEST_LOCATION );
110
111   auto property = control.GetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION ).Get<std::string>();
112   DALI_TEST_EQUALS( "Accessibility_Description", property, TEST_LOCATION );
113
114   DevelControl::AccessibilityGetDescriptionSignal(control).Connect( [] (std::string &accessibility_description) {
115     accessibility_description = "Accessibility_Description_With_Callback"; } );
116
117   DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , q->GetDescription(), TEST_LOCATION );
118
119   Dali::Accessibility::TestEnableSC( true );
120
121   DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , TestGetDescription( q->GetAddress()), TEST_LOCATION );
122
123   Dali::Accessibility::TestEnableSC( false );
124
125   END_TEST;
126 }
127
128 int UtcDaliControlAccessibilityRole(void)
129 {
130   ToolkitTestApplication application;
131
132   auto control = Control::New();
133   auto role_unknown = Dali::Accessibility::Role::UNKNOWN;
134   auto role_pushbutton = Dali::Accessibility::Role::PUSH_BUTTON;
135
136   DALI_TEST_EQUALS( role_unknown,control.GetProperty( DevelControl::Property::ACCESSIBILITY_ROLE ).Get< Dali::Accessibility::Role >(), TEST_LOCATION );
137
138   auto q = Dali::Accessibility::Accessible::Get( control );
139   DALI_TEST_EQUALS( role_unknown , q->GetRole(), TEST_LOCATION);
140   DALI_TEST_EQUALS( "unknown" , q->GetRoleName(), TEST_LOCATION );
141
142   Dali::Accessibility::TestEnableSC( true );
143   DALI_TEST_CHECK( q );
144   DALI_TEST_EQUALS( static_cast< uint32_t >( role_unknown ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
145   DALI_TEST_EQUALS( "unknown" , TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
146   DALI_TEST_EQUALS( "unknown" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
147
148   control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, role_pushbutton );
149
150   DALI_TEST_EQUALS( static_cast< uint32_t >( role_pushbutton ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
151   DALI_TEST_EQUALS( "push button" ,TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
152   DALI_TEST_EQUALS( "push button" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
153
154   Dali::Accessibility::TestEnableSC( false );
155
156   DALI_TEST_EQUALS( role_pushbutton , q->GetRole(), TEST_LOCATION);
157   DALI_TEST_EQUALS( "push button" , q->GetRoleName(), TEST_LOCATION );
158
159   END_TEST;
160 }
161
162 int UtcDaliControlAccessibilityState(void)
163 {
164   ToolkitTestApplication application;
165
166   auto control = Control::New();
167   auto q = Dali::Accessibility::Accessible::Get( control );
168
169   Dali::Accessibility::TestEnableSC( true );
170
171   auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
172   auto states = DevelControl::GetAccessibilityStates(control);
173   DALI_TEST_CHECK( states_by_bridge == states );
174
175   Dali::Accessibility::TestEnableSC( false );
176
177   END_TEST;
178 }
179
180 int UtcDaliControlAccessibilityModal(void)
181 {
182   ToolkitTestApplication application;
183
184   auto control = Dali::Toolkit::Popup::New();
185   auto q = Dali::Accessibility::Accessible::Get( control );
186
187   Dali::Accessibility::TestEnableSC( true );
188
189   auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
190   DALI_TEST_CHECK( states_by_bridge[Dali::Accessibility::State::MODAL] );
191
192   Dali::Accessibility::TestEnableSC( false );
193
194   END_TEST;
195 }
196
197 int UtcDaliControlAccessibilityHighlightable(void)
198 {
199   ToolkitTestApplication application;
200   auto control = Control::New();
201
202   auto noneset = control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE );
203   DALI_TEST_EQUALS( Property::NONE, noneset.GetType(), TEST_LOCATION );
204
205   auto q = Dali::Accessibility::Accessible::Get( control );
206
207   Dali::Accessibility::TestEnableSC( true );
208
209   auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
210   DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
211
212   control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
213   DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
214   DALI_TEST_EQUALS( true, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).Get< bool >(), TEST_LOCATION );
215
216   states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
217   DALI_TEST_CHECK( states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
218
219   control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false );
220   DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
221   DALI_TEST_EQUALS( false, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).Get< bool >(), TEST_LOCATION );
222
223   states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
224   DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
225
226   Dali::Accessibility::TestEnableSC( false );
227
228   END_TEST;
229 }
230
231 int UtcDaliControlAccessibilityHighlightBridgeUp(void)
232 {
233   ToolkitTestApplication application;
234
235   auto controla = Control::New();
236   auto controlb = Control::New();
237
238   controla.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
239   controlb.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
240
241   Dali::Accessibility::TestEnableSC( true );
242
243   auto accessible_a = Dali::Accessibility::Accessible::Get( controla );
244   auto accessible_b = Dali::Accessibility::Accessible::Get( controlb );
245
246   auto a = dynamic_cast<Dali::Accessibility::Component*>( accessible_a );
247   auto b = dynamic_cast<Dali::Accessibility::Component*>( accessible_b );
248
249   auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
250   auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
251
252   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
253   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
254
255   DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controla), TEST_LOCATION );
256
257   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
258   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
259
260   DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
261   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
262
263   DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
264   DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
265
266   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
267   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
268
269   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
270   DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
271
272   DALI_TEST_EQUALS( false, DevelControl::ClearAccessibilityHighlight(controla), TEST_LOCATION );
273
274   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
275   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
276
277   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
278   DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
279
280   DALI_TEST_EQUALS( true, DevelControl::ClearAccessibilityHighlight(controlb), TEST_LOCATION );
281
282   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
283   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
284
285   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
286   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
287
288   DALI_TEST_CHECK( TestGrabHighlight( a -> GetAddress() ) );
289
290   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
291   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
292
293   DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
294   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
295
296   DALI_TEST_CHECK( TestGrabHighlight( b -> GetAddress() ) );
297
298   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
299   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
300
301   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
302   DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
303
304   DALI_TEST_CHECK( TestClearHighlight( b -> GetAddress() ) );
305
306   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
307   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
308
309   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
310   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
311
312
313   Dali::Accessibility::TestEnableSC( false );
314
315   END_TEST;
316 }
317
318 int utcDaliAccessibilityControlAttributes(void)
319 {
320   ToolkitTestApplication application;
321   auto check_box_button = Toolkit::Control::New();
322
323   std::string value;
324
325
326   auto attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
327   auto attributes_map = attributes.GetMap();
328
329   auto position = attributes_map->Find( "access_key1" );
330   DALI_TEST_CHECK( !position );
331
332   DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key1", "access_value1" );
333   attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
334   attributes_map = attributes.GetMap();
335
336   DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
337
338   DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_a" );
339   attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
340   attributes_map = attributes.GetMap();
341
342   DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
343   DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_a", TEST_LOCATION );
344
345   DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_b" );
346   attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
347   attributes_map = attributes.GetMap();
348
349   DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_b", TEST_LOCATION );
350
351   DevelControl::RemoveAccessibilityAttribute( check_box_button, "access_key2" );
352   attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
353   attributes_map = attributes.GetMap();
354
355   // In case when we are removing one of attributes the property is setting for NONE type.
356   DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->GetType(), Property::NONE, TEST_LOCATION );
357
358   Dali::Accessibility::TestEnableSC( true );
359
360   auto ptr = Dali::Accessibility::Accessible::Get( check_box_button );
361   auto attribute_map_bridge = TestGetAttributes( ptr->GetAddress() );
362   auto counter = 0u;
363   for (auto i = 0u; i<attributes_map->Count();++i)
364     if((attributes_map->GetValue(i)).GetType() != Property::NONE )
365       ++counter;
366
367   DALI_TEST_EQUALS( counter, attribute_map_bridge.size(), TEST_LOCATION );
368
369   for (auto it : attribute_map_bridge)
370     DALI_TEST_EQUALS( (attributes_map->Find( it.first ))->Get<std::string>(), it.second, TEST_LOCATION );
371
372   DevelControl::ClearAccessibilityAttributes(check_box_button);
373   attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
374   attributes_map = attributes.GetMap();
375
376   position = attributes_map->Find( "access_key1" );
377   DALI_TEST_CHECK( !position );
378
379   position = attributes_map->Find( "access_key2" );
380   DALI_TEST_CHECK( !position );
381
382   Dali::Accessibility::TestEnableSC( false );
383
384   END_TEST;
385 }
386
387 int UtcDaliControlReadingInfoType(void)
388 {
389   ToolkitTestApplication application;
390   auto control = Control::New();
391
392   auto reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
393   reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = true;
394   reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = true;
395   reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = true;
396   reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = true;
397
398   DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
399
400   auto q = control.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
401   auto z = q.GetMap();
402
403   DALI_TEST_EQUALS( (z->Find( "reading_info_type" ))->Get<std::string>(), "name|role|description|state", TEST_LOCATION );
404   reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
405   for ( auto i = 0u; i < 4; ++i)
406     DALI_TEST_CHECK ( reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
407
408   END_TEST;
409 }
410
411 int UtcDaliControlDoGesture(void)
412 {
413   ToolkitTestApplication application;
414   auto control = Control::New();
415   Dali::Accessibility::TestEnableSC( true );
416
417   auto accessible = Dali::Accessibility::Accessible::Get( control );
418   auto gesture_one = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
419   auto gesture_two = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
420
421   DALI_TEST_CHECK( !accessible->DoGesture( gesture_one ) );
422   DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
423
424   DevelControl::AccessibilityDoGestureSignal(control).Connect( [] ( std::pair< Dali::Accessibility::GestureInfo, bool > &gesture ) {
425   if ( gesture.first.type == Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT )
426     gesture.second = true;
427   else
428     gesture.second = false;
429   } );
430
431   DALI_TEST_CHECK( accessible->DoGesture( gesture_one ) );
432   DALI_TEST_CHECK( TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
433
434   DALI_TEST_CHECK( !accessible->DoGesture( gesture_two ) );
435   DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
436
437   Dali::Accessibility::TestEnableSC( false );
438
439   END_TEST;
440 }
441
442 int UtcDaliAccessibilityRelation(void)
443 {
444   ToolkitTestApplication application;
445   Dali::Accessibility::TestEnableSC( true );
446
447   auto rel = Accessibility::RelationType::FLOWS_TO;
448   auto number = static_cast< size_t >( rel );
449   auto control = Control::New();
450   auto destination1 = Control::New();
451   auto destination2 = Control::New();
452
453   DevelControl::AppendAccessibilityRelation( control, destination1, rel );
454   auto relations = DevelControl::GetAccessibilityRelations(control);
455   DALI_TEST_CHECK( relations[ number ].size() == 1 );
456
457   DevelControl::AppendAccessibilityRelation( control, destination2, rel );
458   relations = DevelControl::GetAccessibilityRelations(control);
459   DALI_TEST_CHECK( relations[ number ].size() == 2 );
460
461   auto accessible = Dali::Accessibility::Accessible::Get( control );
462   auto accessible_destination1 = Dali::Accessibility::Accessible::Get( destination1 );
463   auto accessible_destination2 = Dali::Accessibility::Accessible::Get( destination2 );
464   auto relationset = accessible->GetRelationSet();
465
466   DALI_TEST_CHECK( relationset[0].relationType == rel );
467   DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination1->GetAddress() || relationset[0].targets[1] == accessible_destination1->GetAddress() );
468   DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination2->GetAddress() || relationset[0].targets[1] == accessible_destination2->GetAddress() );
469
470   auto relationset_bridge = TestGetRelationSet( accessible -> GetAddress() );
471   DALI_TEST_CHECK( static_cast< uint32_t >( relationset[0].relationType ) == std::get<0>( relationset_bridge[0] ) );
472
473   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] );
474   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] );
475
476   DevelControl::RemoveAccessibilityRelation(control,destination2,rel);
477   relations = DevelControl::GetAccessibilityRelations(control);
478   DALI_TEST_CHECK( relations[ number ].size() == 1 );
479
480   DevelControl::ClearAccessibilityRelations(control);
481   relations = DevelControl::GetAccessibilityRelations(control);
482   DALI_TEST_CHECK( relations[ number ].size() == 0 );
483
484   Dali::Accessibility::TestEnableSC( false );
485
486   END_TEST;
487 }
488
489 int UtcDaliAccessibilityParentChildren(void)
490 {
491   ToolkitTestApplication application;
492   Dali::Accessibility::TestEnableSC( true );
493
494   auto parent = Control::New();
495   auto child_1 = Control::New();
496   auto child_2 = Control::New();
497
498   auto parent_accessible = Dali::Accessibility::Accessible::Get( parent );
499   auto child_1_accessible = Dali::Accessibility::Accessible::Get( child_1 );
500   auto child_2_accessible = Dali::Accessibility::Accessible::Get( child_2 );
501
502   auto children = TestGetChildren( parent_accessible -> GetAddress() );
503   DALI_TEST_EQUALS( children.size(), 0, TEST_LOCATION );
504
505   try
506   {
507     TestGetIndexInParent( child_1_accessible -> GetAddress() );
508     DALI_ABORT("Object has parent, test abort");
509   }
510   catch(TestDBusWrapper::error &){}
511
512   try
513   {
514     TestGetChildAtIndex( parent_accessible -> GetAddress(), -1 );
515     DALI_ABORT("Positive index, test abort");
516   }
517   catch(TestDBusWrapper::error &){}
518
519   DALI_TEST_EQUALS( parent_accessible -> GetChildCount(), 0, TEST_LOCATION );
520
521   try
522   {
523     child_1_accessible -> GetIndexInParent();
524     DALI_ABORT("Object has parent, test abort");
525   }
526   catch (Dali::DaliException &){}
527
528   parent.Add(child_1);
529   parent.Add(child_2);
530
531   children = TestGetChildren( parent_accessible -> GetAddress() );
532   DALI_TEST_EQUALS( children.size(), 2, TEST_LOCATION );
533
534   DALI_TEST_EQUALS( parent_accessible -> GetAddress(), TestGetParent( child_1_accessible -> GetAddress() ), TEST_LOCATION );
535   DALI_TEST_EQUALS( child_2_accessible -> GetAddress(), TestGetChildAtIndex( parent_accessible -> GetAddress(), TestGetIndexInParent( child_2_accessible -> GetAddress() ) ), TEST_LOCATION );
536
537   DALI_TEST_EQUALS( parent_accessible,  child_1_accessible -> GetParent(), TEST_LOCATION );
538   DALI_TEST_EQUALS( child_2_accessible, parent_accessible -> GetChildAtIndex( child_2_accessible -> GetIndexInParent() ) , TEST_LOCATION );
539
540   Dali::Accessibility::TestEnableSC( false );
541
542   END_TEST;
543 }
544
545 int UtcDaliAccessibilityGetLayer(void)
546 {
547   ToolkitTestApplication application;
548
549   Dali::Accessibility::TestEnableSC( true );
550
551   auto control = Control::New();
552   auto accessible_obj = Dali::Accessibility::Accessible::Get( control );
553   auto accessible_component = dynamic_cast<Dali::Accessibility::Component*>(accessible_obj);
554   DALI_TEST_CHECK( accessible_component );
555   DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, accessible_component -> GetLayer(), TEST_LOCATION );
556   DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, TestGetLayer( accessible_component -> GetAddress() ), TEST_LOCATION );
557
558   Dali::Accessibility::TestEnableSC( false );
559
560   END_TEST;
561 }
562
563 int UtcDaliAccessibilityGrabFocus(void)
564 {
565   ToolkitTestApplication application;
566
567   Dali::Accessibility::TestEnableSC( true );
568
569   auto controla = Control::New();
570   auto controlb = Control::New();
571
572   Stage::GetCurrent().Add( controla );
573   Stage::GetCurrent().Add( controlb );
574
575   controla.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
576   controlb.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
577
578   auto a = Dali::Accessibility::Accessible::Get( controla );
579   auto b = Dali::Accessibility::Accessible::Get( controlb );
580
581   auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
582   auto b_component = dynamic_cast<Dali::Accessibility::Component*>( b );
583
584   auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
585   auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
586
587   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
588   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
589
590   DALI_TEST_CHECK( a_component -> GrabFocus() );
591
592   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
593   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
594
595   DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
596   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
597
598   DALI_TEST_CHECK( TestGrabFocus( b_component -> GetAddress() ) );
599
600   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
601   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
602
603   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
604   DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
605
606   Dali::Accessibility::TestEnableSC( false );
607
608   END_TEST;
609 }
610
611 int UtcDaliAccessibilityGetExtents(void)
612 {
613   ToolkitTestApplication application;
614
615   Dali::Accessibility::TestEnableSC( true );
616
617   auto control = Control::New();
618   Stage::GetCurrent().GetRootLayer().Add( control );
619
620   control.SetProperty(Actor::Property::POSITION, Vector3(10, 10, 100));
621   control.SetProperty(Actor::Property::SIZE, Vector2(10, 10));
622
623   application.SendNotification();
624   application.Render( 1 );
625
626   auto a = Dali::Accessibility::Accessible::Get( control );
627   auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
628
629   auto extents = a_component->GetExtents(Dali::Accessibility::CoordType::SCREEN);
630   DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
631   DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
632   DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
633   DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
634
635   auto bridge_extents = TestGetExtents( a_component -> GetAddress() );
636   DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
637   DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
638   DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
639   DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
640
641   control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false );
642   application.SendNotification();
643   application.Render( 1 );
644
645   extents = a_component->GetExtents(Dali::Accessibility::CoordType::SCREEN);
646   DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
647   DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
648   DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
649   DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
650
651   bridge_extents = TestGetExtents( a_component -> GetAddress() );
652   DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
653   DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
654   DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
655   DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
656
657   Dali::Accessibility::TestEnableSC( false );
658
659   END_TEST;
660 }
661
662 int UtcDaliAccessibilityGetAlpha(void)
663 {
664   ToolkitTestApplication application;
665
666   Dali::Accessibility::TestEnableSC( true );
667
668   auto control = Control::New();
669   auto a = Dali::Accessibility::Accessible::Get( control );
670   auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
671
672   DALI_TEST_EQUALS( 0.0, a_component -> GetAlpha(), TEST_LOCATION );
673   DALI_TEST_EQUALS( 0.0, TestGetAlpha( a_component -> GetAddress() ), TEST_LOCATION );
674
675   Dali::Accessibility::TestEnableSC( false );
676
677   END_TEST;
678 }
679
680 int UtcDaliAccessibilityGetMdiZOrder(void)
681 {
682   ToolkitTestApplication application;
683
684   Dali::Accessibility::TestEnableSC( true );
685
686   auto control = Control::New();
687   auto a = Dali::Accessibility::Accessible::Get( control );
688   auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
689
690   DALI_TEST_EQUALS( 0, static_cast< int >( a_component -> GetMdiZOrder() ), TEST_LOCATION );
691   DALI_TEST_EQUALS( 0, TestGetMdiZOrder( a_component -> GetAddress() ), TEST_LOCATION );
692
693   Dali::Accessibility::TestEnableSC( false );
694
695   END_TEST;
696 }
697
698 int UtcDaliAccessibilityAction(void)
699 {
700   ToolkitTestApplication application;
701
702   Dali::Accessibility::TestEnableSC( true );
703
704   auto control = Control::New( );
705   auto a = Dali::Accessibility::Accessible::Get( control );
706   auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
707
708   std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
709   auto count = b -> GetActionCount();
710
711   DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
712
713   for (auto i = 0u; i<count; ++i)
714   {
715     DALI_TEST_CHECK( Dali::Accessibility::Find( actions, b -> GetActionName( i ) ) );
716     DALI_TEST_EQUALS( b -> GetActionName( i ), b -> GetLocalizedActionName( i ), TEST_LOCATION );
717     DALI_TEST_EQUALS( b -> GetActionDescription( i ), "", TEST_LOCATION );
718     DALI_TEST_EQUALS( b -> GetActionKeyBinding( i ), "", TEST_LOCATION );
719   }
720
721   // Empty strings should be returned for invalid indices
722   DALI_TEST_EQUALS(b->GetActionDescription(count), "", TEST_LOCATION);
723   DALI_TEST_EQUALS(b->GetActionName(count), "", TEST_LOCATION);
724   DALI_TEST_EQUALS(b->GetLocalizedActionName(count), "", TEST_LOCATION);
725   DALI_TEST_EQUALS(b->GetActionKeyBinding(count), "", TEST_LOCATION);
726
727   count = TestGetActionCount(b -> GetAddress());
728
729   DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
730
731   for (auto i = 0u; i<count; ++i)
732   {
733     DALI_TEST_CHECK( Dali::Accessibility::Find( actions, TestGetActionName( b->GetAddress(), i ) ) );
734     DALI_TEST_EQUALS( TestGetActionName( b->GetAddress(), i ), TestGetLocalizedActionName( b->GetAddress(), i ), TEST_LOCATION );
735     DALI_TEST_EQUALS( TestGetActionDescription( b->GetAddress(), i ), "", TEST_LOCATION );
736     DALI_TEST_EQUALS( TestGetActionKeyBinding( b->GetAddress(), i ), "", TEST_LOCATION );
737   }
738
739   DALI_TEST_EQUALS(TestGetActionDescription(b->GetAddress(), count), "", TEST_LOCATION);
740   DALI_TEST_EQUALS(TestGetActionName(b->GetAddress(), count), "", TEST_LOCATION);
741   DALI_TEST_EQUALS(TestGetLocalizedActionName(b->GetAddress(), count), "", TEST_LOCATION);
742   DALI_TEST_EQUALS(TestGetActionKeyBinding(b->GetAddress(), count), "", TEST_LOCATION);
743
744   Dali::Accessibility::TestEnableSC( false );
745
746   END_TEST;
747 }
748
749 int UtcDaliAccessibilityDoAction(void)
750 {
751   ToolkitTestApplication application;
752
753   Dali::Accessibility::TestEnableSC( true );
754   thread_local std::vector< bool > actions_done { false, false, false, false, false, false };
755
756   auto control = Control::New(  );
757   auto a = Dali::Accessibility::Accessible::Get( control );
758   auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
759   std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
760
761   // Test calling action by name
762   DALI_TEST_CHECK( b -> DoAction( actions[2] ) ); // ReadingSkipped
763   DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
764   DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
765
766   DevelControl::AccessibilityReadingSkippedSignal(control).Connect( [] () {
767     actions_done[ 1 ] = true;
768   } );
769   DevelControl::AccessibilityReadingCancelledSignal(control).Connect( [] () {
770     actions_done[ 2 ] = true;
771   } );
772   DevelControl::AccessibilityReadingStoppedSignal(control).Connect( [] () {
773     actions_done[ 3 ] = true;
774   } );
775    DevelControl::AccessibilityReadingPausedSignal(control).Connect( [] () {
776     actions_done[ 4 ] = true;
777   } );
778    DevelControl::AccessibilityReadingResumedSignal(control).Connect( [] () {
779     actions_done[ 5 ] = true;
780   } );
781   DevelControl::AccessibilityActivateSignal(control).Connect( [] () {
782     actions_done[ 0 ] = true;
783   } );
784
785   // Test calling action by index
786   DALI_TEST_CHECK( b -> DoAction( 1 ) );
787   DALI_TEST_CHECK( b -> DoAction( 2 ) );
788   DALI_TEST_CHECK( b -> DoAction( 3 ) );
789   DALI_TEST_CHECK( b -> DoAction( 4 ) );
790   DALI_TEST_CHECK( b -> DoAction( 5 ) );
791   DALI_TEST_CHECK( b -> DoAction( 6 ) );
792
793   for ( auto i = 0u; i < actions_done.size(); ++i )
794     {
795       DALI_TEST_CHECK( actions_done[ i ] );
796       actions_done[ i ] = false;
797     }
798
799   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 1 ) );
800   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 2 ) );
801   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 3 ) );
802   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 4 ) );
803   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 5 ) );
804   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 6 ) );
805
806   for ( auto i = 0u; i < actions_done.size(); ++i )
807     {
808       DALI_TEST_CHECK( actions_done[ i ] );
809       actions_done[ i ] = false;
810     }
811
812   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 1 ] ) );
813   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 2 ] ) );
814   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 3 ] ) );
815   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 4 ] ) );
816   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 5 ] ) );
817   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 6 ] ) );
818
819   for ( auto i = 0u; i < actions_done.size(); ++i )
820       DALI_TEST_CHECK( actions_done[ i ] );
821
822   Dali::Accessibility::TestEnableSC( false );
823
824   END_TEST;
825 }