3acd29435edc4f916151b66f29d15d2f1388aae6
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-Accessibility-Controls-BridgeUp.cpp
1 #include <dali-toolkit-test-suite-utils.h>
2 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/accessibility-test-utils.h>
3 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
4 #include <dali-toolkit/dali-toolkit.h>
5 #include <dali/devel-api/adaptor-framework/accessibility.h>
6 #include <dali/devel-api/adaptor-framework/accessibility-impl.h>
7 #include <dali-toolkit/devel-api/controls/control-devel.h>
8 #include <dali-toolkit/devel-api/controls/popup/popup.h>
9 #include <dali/devel-api/actors/actor-devel.h>
10 #include <dali/devel-api/common/stage.h>
11 #include <cstdlib>
12
13 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
14
15 using namespace Dali::Toolkit;
16
17 void utc_dali_accessibility_controls_bridge_up_startup(void)
18 {
19   test_return_value = TET_UNDEF;
20   DBusWrapper::Install(std::unique_ptr<DBusWrapper>(new TestDBusWrapper));
21 }
22
23 void utc_dali_accessibility_controls_bridge_up_cleanup(void)
24 {
25   test_return_value = TET_PASS;
26   //DBusWrapper::Install({}) is a de-install
27   DBusWrapper::Install({});
28 }
29
30 namespace Dali {
31   namespace Accessibility {
32     std::ostream & operator<< (std::ostream & stream, const Address & address)
33     {
34       stream << address.ToString();
35       return stream;
36     }
37   }
38 }
39
40 int UtcDaliControlAccessibilityRaiseBridge(void)
41 {
42   DALI_TEST_CHECK(!Accessibility::IsUp());
43
44   ToolkitTestApplication application;
45
46   Dali::Accessibility::TestEnableSC(true);
47
48   DALI_TEST_CHECK(Accessibility::IsUp());
49
50   // auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
51   // for(auto &a : wr->daliMethods) {
52   //   const char *mt;
53   //   if (std::get<3>(a.first) == MethodType::Method) mt = "MethodType::Method";
54   //   else if (std::get<3>(a.first) == MethodType::Getter) mt = "MethodType::Getter";
55   //   else if (std::get<3>(a.first) == MethodType::Setter) mt = "MethodType::Setter";
56   //   else assert(0);
57   //   printf("%s %s %s %s\n", std::get<0>(a.first).c_str(), std::get<1>(a.first).c_str(), std::get<2>(a.first).c_str(), mt);
58   // }
59
60   Dali::Accessibility::TestEnableSC(false);
61
62   DALI_TEST_CHECK(!Accessibility::IsUp());
63
64   END_TEST;
65 }
66
67 int UtcDaliControlAccessibilityName(void)
68 {
69   ToolkitTestApplication application;
70
71   auto control = Control::New();
72   Stage::GetCurrent().Add( control );
73
74   auto q = Dali::Accessibility::Accessible::Get( control );
75   DALI_TEST_CHECK( q );
76
77   DALI_TEST_EQUALS( "" , q->GetName(), TEST_LOCATION );
78
79   control.SetProperty( DevelControl::Property::ACCESSIBILITY_NAME, "Accessibility_Name" );
80   DALI_TEST_EQUALS( "Accessibility_Name" , q->GetName(), TEST_LOCATION );
81   DALI_TEST_EQUALS( control.GetProperty( DevelControl::Property::ACCESSIBILITY_NAME ).Get< std::string >() , "Accessibility_Name", TEST_LOCATION );
82
83   DevelControl::AccessibilityGetNameSignal(control).Connect( [] (std::string &accessibility_name) {
84     accessibility_name = "Accessibility_Name_With_Callback"; } );
85
86   DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , q->GetName(), TEST_LOCATION );
87
88   Dali::Accessibility::TestEnableSC(true);
89
90   DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , TestGetName( q->GetAddress()), TEST_LOCATION );
91
92   Dali::Accessibility::TestEnableSC( false );
93
94   END_TEST;
95 }
96
97 int UtcDaliControlAccessibilityDescription(void)
98 {
99   ToolkitTestApplication application;
100
101   auto control = Control::New();
102
103   auto q = Dali::Accessibility::Accessible::Get( control );
104   DALI_TEST_CHECK( q );
105
106   DALI_TEST_EQUALS( "" , q->GetDescription(), TEST_LOCATION );
107
108   control.SetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION, "Accessibility_Description" );
109   DALI_TEST_EQUALS( "Accessibility_Description" , q->GetDescription(), TEST_LOCATION );
110
111   auto property = control.GetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION ).Get<std::string>();
112   DALI_TEST_EQUALS( "Accessibility_Description", property, TEST_LOCATION );
113
114   DevelControl::AccessibilityGetDescriptionSignal(control).Connect( [] (std::string &accessibility_description) {
115     accessibility_description = "Accessibility_Description_With_Callback"; } );
116
117   DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , q->GetDescription(), TEST_LOCATION );
118
119   Dali::Accessibility::TestEnableSC( true );
120
121   DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , TestGetDescription( q->GetAddress()), TEST_LOCATION );
122
123   Dali::Accessibility::TestEnableSC( false );
124
125   END_TEST;
126 }
127
128 int UtcDaliControlAccessibilityRole(void)
129 {
130   ToolkitTestApplication application;
131
132   auto control = Control::New();
133   auto role_unknown = Dali::Accessibility::Role::UNKNOWN;
134   auto role_pushbutton = Dali::Accessibility::Role::PUSH_BUTTON;
135
136   DALI_TEST_EQUALS( role_unknown,control.GetProperty( DevelControl::Property::ACCESSIBILITY_ROLE ).Get< Dali::Accessibility::Role >(), TEST_LOCATION );
137
138   auto q = Dali::Accessibility::Accessible::Get( control );
139   DALI_TEST_EQUALS( role_unknown , q->GetRole(), TEST_LOCATION);
140   DALI_TEST_EQUALS( "unknown" , q->GetRoleName(), TEST_LOCATION );
141
142   Dali::Accessibility::TestEnableSC( true );
143   DALI_TEST_CHECK( q );
144   DALI_TEST_EQUALS( static_cast< uint32_t >( role_unknown ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
145   DALI_TEST_EQUALS( "unknown" , TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
146   DALI_TEST_EQUALS( "unknown" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
147
148   control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, role_pushbutton );
149
150   DALI_TEST_EQUALS( static_cast< uint32_t >( role_pushbutton ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
151   DALI_TEST_EQUALS( "push button" ,TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
152   DALI_TEST_EQUALS( "push button" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
153
154   Dali::Accessibility::TestEnableSC( false );
155
156   DALI_TEST_EQUALS( role_pushbutton , q->GetRole(), TEST_LOCATION);
157   DALI_TEST_EQUALS( "push button" , q->GetRoleName(), TEST_LOCATION );
158
159   END_TEST;
160 }
161
162 int UtcDaliControlAccessibilityState(void)
163 {
164   ToolkitTestApplication application;
165
166   auto control = Control::New();
167   auto q = Dali::Accessibility::Accessible::Get( control );
168
169   Dali::Accessibility::TestEnableSC( true );
170
171   auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
172   auto states = DevelControl::GetAccessibilityStates(control);
173   DALI_TEST_CHECK( states_by_bridge == states );
174
175   Dali::Accessibility::TestEnableSC( false );
176
177   END_TEST;
178 }
179
180 int UtcDaliControlAccessibilityModal(void)
181 {
182   ToolkitTestApplication application;
183   auto control = Dali::Toolkit::Popup::New();
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   controla.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
233   controlb.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
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(TestDBusWrapper::error &){}
505
506   try
507   {
508     TestGetChildAtIndex( parent_accessible -> GetAddress(), -1 );
509     DALI_ABORT("Positive index, test abort");
510   }
511   catch(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 (Dali::DaliException &){}
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", "ReadingPaused", "ReadingResumed", "show", "hide" };
703   auto count = b -> GetActionCount();
704
705   DALI_TEST_EQUALS( count, 9, 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   // Empty strings should be returned for invalid indices
716   DALI_TEST_EQUALS(b->GetActionDescription(count), "", TEST_LOCATION);
717   DALI_TEST_EQUALS(b->GetActionName(count), "", TEST_LOCATION);
718   DALI_TEST_EQUALS(b->GetLocalizedActionName(count), "", TEST_LOCATION);
719   DALI_TEST_EQUALS(b->GetActionKeyBinding(count), "", TEST_LOCATION);
720
721   count = TestGetActionCount(b -> GetAddress());
722
723   DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
724
725   for (auto i = 0u; i<count; ++i)
726   {
727     DALI_TEST_CHECK( Dali::Accessibility::Find( actions, TestGetActionName( b->GetAddress(), i ) ) );
728     DALI_TEST_EQUALS( TestGetActionName( b->GetAddress(), i ), TestGetLocalizedActionName( b->GetAddress(), i ), TEST_LOCATION );
729     DALI_TEST_EQUALS( TestGetActionDescription( b->GetAddress(), i ), "", TEST_LOCATION );
730     DALI_TEST_EQUALS( TestGetActionKeyBinding( b->GetAddress(), i ), "", TEST_LOCATION );
731   }
732
733   DALI_TEST_EQUALS(TestGetActionDescription(b->GetAddress(), count), "", TEST_LOCATION);
734   DALI_TEST_EQUALS(TestGetActionName(b->GetAddress(), count), "", TEST_LOCATION);
735   DALI_TEST_EQUALS(TestGetLocalizedActionName(b->GetAddress(), count), "", TEST_LOCATION);
736   DALI_TEST_EQUALS(TestGetActionKeyBinding(b->GetAddress(), count), "", TEST_LOCATION);
737
738   Dali::Accessibility::TestEnableSC( false );
739
740   END_TEST;
741 }
742
743 int UtcDaliAccessibilityDoAction(void)
744 {
745   ToolkitTestApplication application;
746
747   Dali::Accessibility::TestEnableSC( true );
748   thread_local std::vector< bool > actions_done { false, false, false, false, false, false };
749
750   auto control = Control::New(  );
751   auto a = Dali::Accessibility::Accessible::Get( control );
752   auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
753   std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
754
755   // Test calling action by name
756   DALI_TEST_CHECK( b -> DoAction( actions[2] ) ); // ReadingSkipped
757   DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
758   DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
759
760   DevelControl::AccessibilityReadingSkippedSignal(control).Connect( [] () {
761     actions_done[ 1 ] = true;
762   } );
763   DevelControl::AccessibilityReadingCancelledSignal(control).Connect( [] () {
764     actions_done[ 2 ] = true;
765   } );
766   DevelControl::AccessibilityReadingStoppedSignal(control).Connect( [] () {
767     actions_done[ 3 ] = true;
768   } );
769    DevelControl::AccessibilityReadingPausedSignal(control).Connect( [] () {
770     actions_done[ 4 ] = true;
771   } );
772    DevelControl::AccessibilityReadingResumedSignal(control).Connect( [] () {
773     actions_done[ 5 ] = true;
774   } );
775   DevelControl::AccessibilityActivateSignal(control).Connect( [] () {
776     actions_done[ 0 ] = true;
777   } );
778
779   // Test calling action by index
780   DALI_TEST_CHECK( b -> DoAction( 1 ) );
781   DALI_TEST_CHECK( b -> DoAction( 2 ) );
782   DALI_TEST_CHECK( b -> DoAction( 3 ) );
783   DALI_TEST_CHECK( b -> DoAction( 4 ) );
784   DALI_TEST_CHECK( b -> DoAction( 5 ) );
785   DALI_TEST_CHECK( b -> DoAction( 6 ) );
786
787   for ( auto i = 0u; i < actions_done.size(); ++i )
788     {
789       DALI_TEST_CHECK( actions_done[ i ] );
790       actions_done[ i ] = false;
791     }
792
793   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 1 ) );
794   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 2 ) );
795   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 3 ) );
796   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 4 ) );
797   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 5 ) );
798   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 6 ) );
799
800   for ( auto i = 0u; i < actions_done.size(); ++i )
801     {
802       DALI_TEST_CHECK( actions_done[ i ] );
803       actions_done[ i ] = false;
804     }
805
806   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 1 ] ) );
807   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 2 ] ) );
808   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 3 ] ) );
809   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 4 ] ) );
810   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 5 ] ) );
811   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 6 ] ) );
812
813   for ( auto i = 0u; i < actions_done.size(); ++i )
814       DALI_TEST_CHECK( actions_done[ i ] );
815
816   Dali::Accessibility::TestEnableSC( false );
817
818   END_TEST;
819 }