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