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