ace41baf6f87250ee6146496a3040a85e09cea00
[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 using namespace Dali::Toolkit;
13
14 //using DBusWrapper = Dali::Accessibility::DBusWrapper; // FIXME
15
16 namespace Dali::Accessibility::TestDBusWrapper { struct error {}; } // FIXME
17
18 void utc_dali_accessibility_controls_bridge_up_startup(void)
19 {
20   test_return_value = TET_UNDEF;
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({}); // FIXME
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   ToolkitTestApplication application;
43
44   DALI_TEST_CHECK(!Accessibility::IsUp());
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   auto control = TextSelectionPopup::New( NULL );
184   auto states = DevelControl::GetAccessibilityStates(control);
185
186   DALI_TEST_CHECK( states[ Dali::Accessibility::State::MODAL ] );
187
188   END_TEST;
189 }
190
191 int UtcDaliControlAccessibilityHighlightable(void)
192 {
193   ToolkitTestApplication application;
194   auto control = Control::New();
195
196   auto noneset = control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE );
197   DALI_TEST_EQUALS( Property::NONE, noneset.GetType(), TEST_LOCATION );
198
199   auto q = Dali::Accessibility::Accessible::Get( control );
200
201   Dali::Accessibility::TestEnableSC( true );
202
203   auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
204   DALI_TEST_CHECK( states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
205
206   control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
207   DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
208   DALI_TEST_EQUALS( true, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).Get< bool >(), TEST_LOCATION );
209
210   states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
211   DALI_TEST_CHECK( states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
212
213   control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false );
214   DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
215   DALI_TEST_EQUALS( false, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).Get< bool >(), TEST_LOCATION );
216
217   states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
218   DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
219
220   Dali::Accessibility::TestEnableSC( false );
221
222   END_TEST;
223 }
224
225 int UtcDaliControlAccessibilityHighlightBridgeUp(void)
226 {
227   ToolkitTestApplication application;
228
229   auto controla = Control::New();
230   auto controlb = Control::New();
231
232   Dali::Accessibility::TestEnableSC( true );
233
234   auto accessible_a = Dali::Accessibility::Accessible::Get( controla );
235   auto accessible_b = Dali::Accessibility::Accessible::Get( controlb );
236
237   auto a = dynamic_cast<Dali::Accessibility::Component*>( accessible_a );
238   auto b = dynamic_cast<Dali::Accessibility::Component*>( accessible_b );
239
240   auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
241   auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
242
243   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
244   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
245
246   DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controla), TEST_LOCATION );
247
248   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
249   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
250
251   DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
252   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
253
254   DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
255   DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), 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( false, DevelControl::ClearAccessibilityHighlight(controla), TEST_LOCATION );
264
265   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
266   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
267
268   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
269   DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
270
271   DALI_TEST_EQUALS( true, DevelControl::ClearAccessibilityHighlight(controlb), TEST_LOCATION );
272
273   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
274   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
275
276   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
277   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
278
279   DALI_TEST_CHECK( TestGrabHighlight( a -> GetAddress() ) );
280
281   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
282   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
283
284   DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
285   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
286
287   DALI_TEST_CHECK( TestGrabHighlight( b -> GetAddress() ) );
288
289   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
290   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
291
292   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
293   DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
294
295   DALI_TEST_CHECK( TestClearHighlight( b -> GetAddress() ) );
296
297   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
298   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
299
300   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
301   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
302
303
304   Dali::Accessibility::TestEnableSC( false );
305
306   END_TEST;
307 }
308
309 int utcDaliAccessibilityControlAttributes(void)
310 {
311   ToolkitTestApplication application;
312   auto check_box_button = Toolkit::Control::New();
313
314   std::string value;
315
316
317   auto attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
318   auto attributes_map = attributes.GetMap();
319
320   auto position = attributes_map->Find( "access_key1" );
321   DALI_TEST_CHECK( !position );
322
323   DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key1", "access_value1" );
324   attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
325   attributes_map = attributes.GetMap();
326
327   DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
328
329   DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_a" );
330   attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
331   attributes_map = attributes.GetMap();
332
333   DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
334   DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_a", TEST_LOCATION );
335
336   DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_b" );
337   attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
338   attributes_map = attributes.GetMap();
339
340   DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_b", TEST_LOCATION );
341
342   DevelControl::RemoveAccessibilityAttribute( check_box_button, "access_key2" );
343   attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
344   attributes_map = attributes.GetMap();
345
346   // In case when we are removing one of attributes the property is setting for NONE type.
347   DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->GetType(), Property::NONE, TEST_LOCATION );
348
349   Dali::Accessibility::TestEnableSC( true );
350
351   auto ptr = Dali::Accessibility::Accessible::Get( check_box_button );
352   auto attribute_map_bridge = TestGetAttributes( ptr->GetAddress() );
353   auto counter = 0u;
354   for (auto i = 0u; i<attributes_map->Count();++i)
355     if((attributes_map->GetValue(i)).GetType() != Property::NONE )
356       ++counter;
357
358   DALI_TEST_EQUALS( counter, attribute_map_bridge.size(), TEST_LOCATION );
359
360   for (auto it : attribute_map_bridge)
361     DALI_TEST_EQUALS( (attributes_map->Find( it.first ))->Get<std::string>(), it.second, TEST_LOCATION );
362
363   DevelControl::ClearAccessibilityAttributes(check_box_button);
364   attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
365   attributes_map = attributes.GetMap();
366
367   position = attributes_map->Find( "access_key1" );
368   DALI_TEST_CHECK( !position );
369
370   position = attributes_map->Find( "access_key2" );
371   DALI_TEST_CHECK( !position );
372
373   Dali::Accessibility::TestEnableSC( false );
374
375   END_TEST;
376 }
377
378 int UtcDaliControlReadingInfoType(void)
379 {
380   ToolkitTestApplication application;
381   auto control = Control::New();
382
383   auto reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
384   reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = true;
385   reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = true;
386   reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = true;
387   reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = true;
388
389   DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
390
391   auto q = control.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
392   auto z = q.GetMap();
393
394   DALI_TEST_EQUALS( (z->Find( "reading_info_type" ))->Get<std::string>(), "name|role|description|state", TEST_LOCATION );
395   reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
396   for ( auto i = 0u; i < 4; ++i)
397     DALI_TEST_CHECK ( reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
398
399   END_TEST;
400 }
401
402 int UtcDaliControlDoGesture(void)
403 {
404   ToolkitTestApplication application;
405   auto control = Control::New();
406   Dali::Accessibility::TestEnableSC( true );
407
408   auto accessible = Dali::Accessibility::Accessible::Get( control );
409   auto gesture_one = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
410   auto gesture_two = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
411
412   DALI_TEST_CHECK( !accessible->DoGesture( gesture_one ) );
413   DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
414
415   DevelControl::AccessibilityDoGestureSignal(control).Connect( [] ( std::pair< Dali::Accessibility::GestureInfo, bool > &gesture ) {
416   if ( gesture.first.type == Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT )
417     gesture.second = true;
418   else
419     gesture.second = false;
420   } );
421
422   DALI_TEST_CHECK( accessible->DoGesture( gesture_one ) );
423   DALI_TEST_CHECK( TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
424
425   DALI_TEST_CHECK( !accessible->DoGesture( gesture_two ) );
426   DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
427
428   Dali::Accessibility::TestEnableSC( false );
429
430   END_TEST;
431 }
432
433 int UtcDaliAccessibilityRelation(void)
434 {
435   ToolkitTestApplication application;
436   Dali::Accessibility::TestEnableSC( true );
437
438   auto rel = Accessibility::RelationType::FLOWS_TO;
439   auto number = static_cast< size_t >( rel );
440   auto control = Control::New();
441   auto destination1 = Control::New();
442   auto destination2 = Control::New();
443
444   DevelControl::AppendAccessibilityRelation( control, destination1, rel );
445   auto relations = DevelControl::GetAccessibilityRelations(control);
446   DALI_TEST_CHECK( relations[ number ].size() == 1 );
447
448   DevelControl::AppendAccessibilityRelation( control, destination2, rel );
449   relations = DevelControl::GetAccessibilityRelations(control);
450   DALI_TEST_CHECK( relations[ number ].size() == 2 );
451
452   auto accessible = Dali::Accessibility::Accessible::Get( control );
453   auto accessible_destination1 = Dali::Accessibility::Accessible::Get( destination1 );
454   auto accessible_destination2 = Dali::Accessibility::Accessible::Get( destination2 );
455   auto relationset = accessible->GetRelationSet();
456
457   DALI_TEST_CHECK( relationset[0].relationType == rel );
458   DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination1->GetAddress() || relationset[0].targets[1] == accessible_destination1->GetAddress() );
459   DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination2->GetAddress() || relationset[0].targets[1] == accessible_destination2->GetAddress() );
460
461   auto relationset_bridge = TestGetRelationSet( accessible -> GetAddress() );
462   DALI_TEST_CHECK( static_cast< uint32_t >( relationset[0].relationType ) == std::get<0>( relationset_bridge[0] ) );
463
464   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] );
465   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] );
466
467   DevelControl::RemoveAccessibilityRelation(control,destination2,rel);
468   relations = DevelControl::GetAccessibilityRelations(control);
469   DALI_TEST_CHECK( relations[ number ].size() == 1 );
470
471   DevelControl::ClearAccessibilityRelations(control);
472   relations = DevelControl::GetAccessibilityRelations(control);
473   DALI_TEST_CHECK( relations[ number ].size() == 0 );
474
475   Dali::Accessibility::TestEnableSC( false );
476
477   END_TEST;
478 }
479
480 int UtcDaliAccessibilityParentChildren(void)
481 {
482   ToolkitTestApplication application;
483   Dali::Accessibility::TestEnableSC( true );
484
485   auto parent = Control::New();
486   auto child_1 = Control::New();
487   auto child_2 = Control::New();
488
489   auto parent_accessible = Dali::Accessibility::Accessible::Get( parent );
490   auto child_1_accessible = Dali::Accessibility::Accessible::Get( child_1 );
491   auto child_2_accessible = Dali::Accessibility::Accessible::Get( child_2 );
492
493   auto children = TestGetChildren( parent_accessible -> GetAddress() );
494   DALI_TEST_EQUALS( children.size(), 0, TEST_LOCATION );
495
496   try
497   {
498     TestGetIndexInParent( child_1_accessible -> GetAddress() );
499     DALI_ABORT("Object has parent, test abort");
500   }
501   catch(Accessibility::TestDBusWrapper::error &){}
502
503   try
504   {
505     TestGetChildAtIndex( parent_accessible -> GetAddress(), -1 );
506     DALI_ABORT("Positive index, test abort");
507   }
508   catch(Accessibility::TestDBusWrapper::error &){}
509
510   DALI_TEST_EQUALS( parent_accessible -> GetChildCount(), 0, TEST_LOCATION );
511
512   try
513   {
514     child_1_accessible -> GetIndexInParent();
515     DALI_ABORT("Object has parent, test abort");
516   }
517   catch (std::domain_error &){}
518
519   parent.Add(child_1);
520   parent.Add(child_2);
521
522   children = TestGetChildren( parent_accessible -> GetAddress() );
523   DALI_TEST_EQUALS( children.size(), 2, TEST_LOCATION );
524
525   DALI_TEST_EQUALS( parent_accessible -> GetAddress(), TestGetParent( child_1_accessible -> GetAddress() ), TEST_LOCATION );
526   DALI_TEST_EQUALS( child_2_accessible -> GetAddress(), TestGetChildAtIndex( parent_accessible -> GetAddress(), TestGetIndexInParent( child_2_accessible -> GetAddress() ) ), TEST_LOCATION );
527
528   DALI_TEST_EQUALS( parent_accessible,  child_1_accessible -> GetParent(), TEST_LOCATION );
529   DALI_TEST_EQUALS( child_2_accessible, parent_accessible -> GetChildAtIndex( child_2_accessible -> GetIndexInParent() ) , TEST_LOCATION );
530
531   Dali::Accessibility::TestEnableSC( false );
532
533   END_TEST;
534 }
535
536 int UtcDaliAccessibilityGetLayer(void)
537 {
538   ToolkitTestApplication application;
539
540   Dali::Accessibility::TestEnableSC( true );
541
542   auto control = Control::New();
543   auto accessible_obj = Dali::Accessibility::Accessible::Get( control );
544   auto accessible_component = dynamic_cast<Dali::Accessibility::Component*>(accessible_obj);
545   DALI_TEST_CHECK( accessible_component );
546   DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, accessible_component -> GetLayer(), TEST_LOCATION );
547   DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, TestGetLayer( accessible_component -> GetAddress() ), TEST_LOCATION );
548
549   Dali::Accessibility::TestEnableSC( false );
550
551   END_TEST;
552 }
553
554 int UtcDaliAccessibilityGrabFocus(void)
555 {
556   ToolkitTestApplication application;
557
558   Dali::Accessibility::TestEnableSC( true );
559
560   auto controla = Control::New();
561   auto controlb = Control::New();
562
563   Stage::GetCurrent().Add( controla );
564   Stage::GetCurrent().Add( controlb );
565
566   controla.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
567   controlb.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
568
569   auto a = Dali::Accessibility::Accessible::Get( controla );
570   auto b = Dali::Accessibility::Accessible::Get( controlb );
571
572   auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
573   auto b_component = dynamic_cast<Dali::Accessibility::Component*>( b );
574
575   auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
576   auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
577
578   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
579   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
580
581   DALI_TEST_CHECK( a_component -> GrabFocus() );
582
583   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
584   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
585
586   DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
587   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
588
589   DALI_TEST_CHECK( TestGrabFocus( b_component -> GetAddress() ) );
590
591   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
592   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
593
594   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
595   DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
596
597   Dali::Accessibility::TestEnableSC( false );
598
599   END_TEST;
600 }
601
602 int UtcDaliAccessibilityGetExtents(void)
603 {
604   ToolkitTestApplication application;
605
606   Dali::Accessibility::TestEnableSC( true );
607
608   auto control = Control::New();
609   Stage::GetCurrent().GetRootLayer().Add( control );
610
611   control.SetProperty(Actor::Property::POSITION, Vector3(10, 10, 100));
612   control.SetProperty(Actor::Property::SIZE, Vector2(10, 10));
613
614   application.SendNotification();
615   application.Render( 1 );
616
617   auto a = Dali::Accessibility::Accessible::Get( control );
618   auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
619
620   auto extents = a_component->GetExtents(Dali::Accessibility::CoordType::SCREEN);
621   DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
622   DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
623   DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
624   DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
625
626   auto bridge_extents = TestGetExtents( a_component -> GetAddress() );
627   DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
628   DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
629   DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
630   DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
631
632   control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false );
633   application.SendNotification();
634   application.Render( 1 );
635
636   extents = a_component->GetExtents(Dali::Accessibility::CoordType::SCREEN);
637   DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
638   DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
639   DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
640   DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
641
642   bridge_extents = TestGetExtents( a_component -> GetAddress() );
643   DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
644   DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
645   DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
646   DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
647
648   Dali::Accessibility::TestEnableSC( false );
649
650   END_TEST;
651 }
652
653 int UtcDaliAccessibilityGetAlpha(void)
654 {
655   ToolkitTestApplication application;
656
657   Dali::Accessibility::TestEnableSC( true );
658
659   auto control = Control::New();
660   auto a = Dali::Accessibility::Accessible::Get( control );
661   auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
662
663   DALI_TEST_EQUALS( 0.0, a_component -> GetAlpha(), TEST_LOCATION );
664   DALI_TEST_EQUALS( 0.0, TestGetAlpha( a_component -> GetAddress() ), TEST_LOCATION );
665
666   Dali::Accessibility::TestEnableSC( false );
667
668   END_TEST;
669 }
670
671 int UtcDaliAccessibilityGetMdiZOrder(void)
672 {
673   ToolkitTestApplication application;
674
675   Dali::Accessibility::TestEnableSC( true );
676
677   auto control = Control::New();
678   auto a = Dali::Accessibility::Accessible::Get( control );
679   auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
680
681   DALI_TEST_EQUALS( 0, static_cast< int >( a_component -> GetMdiZOrder() ), TEST_LOCATION );
682   DALI_TEST_EQUALS( 0, TestGetMdiZOrder( a_component -> GetAddress() ), TEST_LOCATION );
683
684   Dali::Accessibility::TestEnableSC( false );
685
686   END_TEST;
687 }
688
689 int UtcDaliAccessibilityAction(void)
690 {
691   ToolkitTestApplication application;
692
693   Dali::Accessibility::TestEnableSC( true );
694
695   auto control = Control::New( );
696   auto a = Dali::Accessibility::Accessible::Get( control );
697   auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
698
699   std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "show", "hide" };
700   auto count = b -> GetActionCount();
701
702   DALI_TEST_EQUALS( count, 7, TEST_LOCATION );
703
704   for (auto i = 0u; i<count; ++i)
705   {
706     DALI_TEST_CHECK( Dali::Accessibility::Find( actions, b -> GetActionName( i ) ) );
707     DALI_TEST_EQUALS( b -> GetActionName( i ), b -> GetLocalizedActionName( i ), TEST_LOCATION );
708     DALI_TEST_EQUALS( b -> GetActionDescription( i ), "", TEST_LOCATION );
709     DALI_TEST_EQUALS( b -> GetActionKeyBinding( i ), "", TEST_LOCATION );
710   }
711
712   try
713   {
714     b ->GetActionDescription( count );
715     DALI_ABORT( "Correct index, abort" );
716   }
717   catch( std::domain_error &){}
718
719   try
720   {
721     b ->GetActionName( count );
722     DALI_ABORT( "Correct index, abort" );
723   }
724   catch( std::domain_error &){}
725
726   try
727   {
728     b ->GetLocalizedActionName( count );
729     DALI_ABORT( "Correct index, abort" );
730   }
731   catch( std::domain_error &){}
732
733   try
734   {
735     b ->GetActionKeyBinding( count );
736     DALI_ABORT( "Correct index, abort" );
737   }
738   catch( std::domain_error &){}
739
740   count = TestGetActionCount(b -> GetAddress());
741
742   DALI_TEST_EQUALS( count, 7, TEST_LOCATION );
743
744   for (auto i = 0u; i<count; ++i)
745   {
746     DALI_TEST_CHECK( Dali::Accessibility::Find( actions, TestGetActionName( b->GetAddress(), i ) ) );
747     DALI_TEST_EQUALS( TestGetActionName( b->GetAddress(), i ), TestGetLocalizedActionName( b->GetAddress(), i ), TEST_LOCATION );
748     DALI_TEST_EQUALS( TestGetActionDescription( b->GetAddress(), i ), "", TEST_LOCATION );
749     DALI_TEST_EQUALS( TestGetActionKeyBinding( b->GetAddress(), i ), "", TEST_LOCATION );
750   }
751
752   try
753   {
754     TestGetActionDescription( b->GetAddress(), count );
755     DALI_ABORT( "Correct index, abort" );
756   }
757   catch( Dali::Accessibility::TestDBusWrapper::error ){}
758
759   try
760   {
761     TestGetActionName( b->GetAddress(), count );
762     DALI_ABORT( "Correct index, abort" );
763   }
764   catch( Dali::Accessibility::TestDBusWrapper::error ){}
765
766   try
767   {
768     TestGetLocalizedActionName( b->GetAddress(), count );
769     DALI_ABORT( "Correct index, abort" );
770   }
771   catch( Dali::Accessibility::TestDBusWrapper::error ){}
772
773   try
774   {
775     TestGetActionKeyBinding( b->GetAddress(), count );
776     DALI_ABORT( "Correct index, abort" );
777   }
778   catch( Dali::Accessibility::TestDBusWrapper::error ){}
779
780
781   Dali::Accessibility::TestEnableSC( false );
782
783   END_TEST;
784 }
785
786 int UtcDaliAccessibilityDoAction(void)
787 {
788   ToolkitTestApplication application;
789
790   Dali::Accessibility::TestEnableSC( true );
791   thread_local std::vector< bool > actions_done { false, false, false, false };
792
793   auto control = Control::New(  );
794   auto a = Dali::Accessibility::Accessible::Get( control );
795   auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
796   std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "show", "hide" };
797
798   DALI_TEST_CHECK( b -> DoAction( actions[2] ) );
799   DALI_TEST_CHECK( b -> DoAction( actions[4] ) );
800   DALI_TEST_CHECK( b -> DoAction( actions[4] ) );
801
802   DevelControl::AccessibilityReadingSkippedSignal(control).Connect( [] () {
803     actions_done[ 1 ] = true;
804   } );
805   DevelControl::AccessibilityReadingCancelledSignal(control).Connect( [] () {
806     actions_done[ 2 ] = true;
807   } );
808   DevelControl::AccessibilityReadingStoppedSignal(control).Connect( [] () {
809     actions_done[ 3 ] = true;
810   } );
811   DevelControl::AccessibilityActivateSignal(control).Connect( [] () {
812     actions_done[ 0 ] = true;
813   } );
814
815   DALI_TEST_CHECK( b -> DoAction( 1 ) );
816   DALI_TEST_CHECK( b -> DoAction( 2 ) );
817   DALI_TEST_CHECK( b -> DoAction( 3 ) );
818   DALI_TEST_CHECK( b -> DoAction( 4 ) );
819
820   for ( auto i = 0u; i < actions_done.size(); ++i )
821     {
822       DALI_TEST_CHECK( actions_done[ i ] );
823       actions_done[ i ] = false;
824     }
825
826   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 1 ) );
827   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 2 ) );
828   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 3 ) );
829   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 4 ) );
830
831   for ( auto i = 0u; i < actions_done.size(); ++i )
832     {
833       DALI_TEST_CHECK( actions_done[ i ] );
834       actions_done[ i ] = false;
835     }
836
837   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 1 ] ) );
838   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 2 ] ) );
839   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 3 ] ) );
840   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 4 ] ) );
841
842   for ( auto i = 0u; i < actions_done.size(); ++i )
843       DALI_TEST_CHECK( actions_done[ i ] );
844
845   Dali::Accessibility::TestEnableSC( false );
846
847   END_TEST;
848 }