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