Merge "DALi Version 2.0.38" into devel/master
[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/devel-api/adaptor-framework/window-devel.h>
8 #include <dali-toolkit/devel-api/controls/buttons/toggle-button.h>
9 #include <dali-toolkit/devel-api/controls/control-devel.h>
10 #include <dali-toolkit/devel-api/controls/popup/popup.h>
11 #include <dali/devel-api/actors/actor-devel.h>
12 #include <dali/devel-api/common/stage.h>
13 #include <cstdlib>
14
15 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
16
17 using namespace Dali::Toolkit;
18
19 void utc_dali_accessibility_controls_bridge_up_startup(void)
20 {
21   test_return_value = TET_UNDEF;
22   DBusWrapper::Install(std::unique_ptr<DBusWrapper>(new TestDBusWrapper));
23 }
24
25 void utc_dali_accessibility_controls_bridge_up_cleanup(void)
26 {
27   test_return_value = TET_PASS;
28   //DBusWrapper::Install({}) is a de-install
29   DBusWrapper::Install({});
30 }
31
32 namespace Dali {
33   namespace Accessibility {
34     std::ostream & operator<< (std::ostream & stream, const Address & address)
35     {
36       stream << address.ToString();
37       return stream;
38     }
39   }
40 }
41
42 int UtcDaliControlAccessibilityRaiseBridge(void)
43 {
44   DALI_TEST_CHECK(!Accessibility::IsUp());
45
46   ToolkitTestApplication application;
47
48   Dali::Accessibility::TestEnableSC(true);
49
50   DALI_TEST_CHECK(Accessibility::IsUp());
51
52   // auto wr = static_cast<TestDBusWrapper*>(DBusWrapper::Installed());
53   // for(auto &a : wr->daliMethods) {
54   //   const char *mt;
55   //   if (std::get<3>(a.first) == MethodType::Method) mt = "MethodType::Method";
56   //   else if (std::get<3>(a.first) == MethodType::Getter) mt = "MethodType::Getter";
57   //   else if (std::get<3>(a.first) == MethodType::Setter) mt = "MethodType::Setter";
58   //   else assert(0);
59   //   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);
60   // }
61
62   Dali::Accessibility::TestEnableSC(false);
63
64   DALI_TEST_CHECK(!Accessibility::IsUp());
65
66   END_TEST;
67 }
68
69 int UtcDaliControlAccessibilityName(void)
70 {
71   ToolkitTestApplication application;
72
73   auto control = Control::New();
74   Stage::GetCurrent().Add( control );
75
76   auto q = Dali::Accessibility::Accessible::Get( control );
77   DALI_TEST_CHECK( q );
78
79   DALI_TEST_EQUALS( "" , q->GetName(), TEST_LOCATION );
80
81   control.SetProperty( DevelControl::Property::ACCESSIBILITY_NAME, "Accessibility_Name" );
82   DALI_TEST_EQUALS( "Accessibility_Name" , q->GetName(), TEST_LOCATION );
83   DALI_TEST_EQUALS( control.GetProperty( DevelControl::Property::ACCESSIBILITY_NAME ).Get< std::string >() , "Accessibility_Name", TEST_LOCATION );
84
85   DevelControl::AccessibilityGetNameSignal(control).Connect( [] (std::string &accessibility_name) {
86     accessibility_name = "Accessibility_Name_With_Callback"; } );
87
88   DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , q->GetName(), TEST_LOCATION );
89
90   Dali::Accessibility::TestEnableSC(true);
91
92   DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , TestGetName( q->GetAddress()), TEST_LOCATION );
93
94   //TODO test emission of name change signal
95   Dali::Accessibility::TestEnableSC( false );
96
97   END_TEST;
98 }
99
100 int UtcDaliControlAccessibilityDescription(void)
101 {
102   ToolkitTestApplication application;
103
104   auto control = Control::New();
105
106   auto q = Dali::Accessibility::Accessible::Get( control );
107   DALI_TEST_CHECK( q );
108
109   DALI_TEST_EQUALS( "" , q->GetDescription(), TEST_LOCATION );
110
111   control.SetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION, "Accessibility_Description" );
112   DALI_TEST_EQUALS( "Accessibility_Description" , q->GetDescription(), TEST_LOCATION );
113
114   auto property = control.GetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION ).Get<std::string>();
115   DALI_TEST_EQUALS( "Accessibility_Description", property, TEST_LOCATION );
116
117   DevelControl::AccessibilityGetDescriptionSignal(control).Connect( [] (std::string &accessibility_description) {
118     accessibility_description = "Accessibility_Description_With_Callback"; } );
119
120   DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , q->GetDescription(), TEST_LOCATION );
121
122   Dali::Accessibility::TestEnableSC( true );
123
124   DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , TestGetDescription( q->GetAddress()), TEST_LOCATION );
125
126   //TODO test emission of description change signal
127   Dali::Accessibility::TestEnableSC( false );
128
129   END_TEST;
130 }
131
132 int UtcDaliControlAccessibilityRole(void)
133 {
134   ToolkitTestApplication application;
135
136   auto control = Control::New();
137   auto role_unknown = Dali::Accessibility::Role::UNKNOWN;
138   auto role_pushbutton = Dali::Accessibility::Role::PUSH_BUTTON;
139
140   DALI_TEST_EQUALS( role_unknown,control.GetProperty( DevelControl::Property::ACCESSIBILITY_ROLE ).Get< Dali::Accessibility::Role >(), TEST_LOCATION );
141
142   auto q = Dali::Accessibility::Accessible::Get( control );
143   DALI_TEST_EQUALS( role_unknown , q->GetRole(), TEST_LOCATION);
144   DALI_TEST_EQUALS( "unknown" , q->GetRoleName(), TEST_LOCATION );
145
146   Dali::Accessibility::TestEnableSC( true );
147   DALI_TEST_CHECK( q );
148   DALI_TEST_EQUALS( static_cast< uint32_t >( role_unknown ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
149   DALI_TEST_EQUALS( "unknown" , TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
150   DALI_TEST_EQUALS( "unknown" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
151
152   control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, role_pushbutton );
153
154   DALI_TEST_EQUALS( static_cast< uint32_t >( role_pushbutton ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
155   DALI_TEST_EQUALS( "push button" ,TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
156   DALI_TEST_EQUALS( "push button" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
157
158   Dali::Accessibility::TestEnableSC( false );
159
160   DALI_TEST_EQUALS( role_pushbutton , q->GetRole(), TEST_LOCATION);
161   DALI_TEST_EQUALS( "push button" , q->GetRoleName(), TEST_LOCATION );
162
163   END_TEST;
164 }
165
166 int UtcDaliControlAccessibilityRoleToggleButton(void)
167 {
168   ToolkitTestApplication application;
169
170   auto control = Dali::Toolkit::ToggleButton::New();
171   auto button = Dali::Accessibility::Role::TOGGLE_BUTTON;
172
173   control.SetProperty(Toolkit::ToggleButton::Property::TOOLTIPS,
174           Property::Array{"option1", "option2"});
175
176   Dali::Accessibility::TestEnableSC( true );
177
178   control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, button );
179   auto q = Dali::Accessibility::Accessible::Get( control );
180
181   DALI_TEST_EQUALS( button , q->GetRole(), TEST_LOCATION);
182   DALI_TEST_EQUALS( "toggle button" , q->GetRoleName(), TEST_LOCATION );
183
184   Dali::Accessibility::States states = q->GetStates();
185   DALI_TEST_EQUALS( true , (bool)states[Dali::Accessibility::State::VISIBLE], TEST_LOCATION);
186
187   DALI_TEST_EQUALS( "option1", q->GetDescription(), TEST_LOCATION );
188
189   auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
190   if (i)
191     i->GrabHighlight();
192
193   control.SetProperty( Toolkit::Button::Property::LABEL, "ToggleButton2" );
194   DALI_TEST_EQUALS( "ToggleButton2", TestGetName( q->GetAddress() ), TEST_LOCATION );
195
196   Dali::Accessibility::TestEnableSC( false );
197
198   END_TEST;
199 }
200
201 int UtcDaliControlAccessibilityButtonLabel(void)
202 {
203   ToolkitTestApplication application;
204
205   auto control = Dali::Toolkit::PushButton::New();
206   auto button = Dali::Accessibility::Role::PUSH_BUTTON;
207
208   Dali::Accessibility::TestEnableSC( true );
209
210   control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, button );
211
212   auto q = Dali::Accessibility::Accessible::Get( control );
213   auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
214
215   if (i)
216     i->GrabHighlight();
217
218   control.SetProperty( Toolkit::Button::Property::LABEL, "Button2" );
219
220   DALI_TEST_EQUALS( "Button2" , TestGetName( q->GetAddress() ), TEST_LOCATION );
221
222   Dali::Accessibility::TestEnableSC( false );
223
224   END_TEST;
225 }
226
227 int UtcDaliControlAccessibilityState(void)
228 {
229   ToolkitTestApplication application;
230
231   auto control = Control::New();
232   auto q = Dali::Accessibility::Accessible::Get( control );
233
234   Dali::Accessibility::TestEnableSC( true );
235
236   auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
237   auto states = DevelControl::GetAccessibilityStates(control);
238   DALI_TEST_CHECK( states_by_bridge == states );
239
240   Dali::Accessibility::TestEnableSC( false );
241
242   END_TEST;
243 }
244
245 int UtcDaliControlAccessibilityModal(void)
246 {
247   ToolkitTestApplication application;
248
249   auto control = Dali::Toolkit::Popup::New();
250   auto q = Dali::Accessibility::Accessible::Get( control );
251
252   Dali::Accessibility::TestEnableSC( true );
253
254   auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
255   DALI_TEST_CHECK( states_by_bridge[Dali::Accessibility::State::MODAL] );
256
257   Dali::Accessibility::TestEnableSC( false );
258
259   END_TEST;
260 }
261
262 int UtcDaliControlAccessibilityHighlightable(void)
263 {
264   ToolkitTestApplication application;
265   auto control = Control::New();
266
267   auto noneset = control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE );
268   DALI_TEST_EQUALS( Property::NONE, noneset.GetType(), TEST_LOCATION );
269
270    // negative testcase - trying to set unconvertible value
271   control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, "deadbeef" );
272   noneset = control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE );
273   DALI_TEST_EQUALS( Property::NONE, noneset.GetType(), TEST_LOCATION );
274
275   auto q = Dali::Accessibility::Accessible::Get( control );
276
277   Dali::Accessibility::TestEnableSC( true );
278
279   auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
280   DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
281
282   control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
283   DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
284   DALI_TEST_EQUALS( true, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).Get< bool >(), TEST_LOCATION );
285
286   states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
287   DALI_TEST_CHECK( states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
288
289   control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false );
290   DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
291   DALI_TEST_EQUALS( false, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).Get< bool >(), TEST_LOCATION );
292
293   states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
294   DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
295
296   Dali::Accessibility::TestEnableSC( false );
297
298   END_TEST;
299 }
300
301 int UtcDaliControlAccessibilityHighlightBridgeUp(void)
302 {
303   ToolkitTestApplication application;
304
305   auto controla = Control::New();
306   auto controlb = Control::New();
307   controla.Add(controlb);
308
309   controla.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
310   controlb.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
311
312   Dali::Accessibility::TestEnableSC( true );
313
314   auto accessible_a = Dali::Accessibility::Accessible::Get( controla );
315   auto accessible_b = Dali::Accessibility::Accessible::Get( controlb );
316
317   auto a = dynamic_cast<Dali::Accessibility::Component*>( accessible_a );
318   auto b = dynamic_cast<Dali::Accessibility::Component*>( accessible_b );
319
320   auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
321   auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
322
323   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
324   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
325
326   DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controla), TEST_LOCATION );
327
328   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
329   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
330
331   DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
332   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
333
334   DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
335   DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
336
337   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
338   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
339
340   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
341   DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
342
343   DALI_TEST_EQUALS( false, DevelControl::ClearAccessibilityHighlight(controla), TEST_LOCATION );
344
345   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
346   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
347
348   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
349   DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
350
351   DALI_TEST_EQUALS( true, DevelControl::ClearAccessibilityHighlight(controlb), TEST_LOCATION );
352
353   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
354   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
355
356   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
357   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
358
359   DALI_TEST_CHECK( TestGrabHighlight( a -> GetAddress() ) );
360
361   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
362   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
363
364   DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
365   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
366
367   DALI_TEST_CHECK( TestGrabHighlight( b -> GetAddress() ) );
368
369   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
370   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
371
372   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
373   DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
374
375   DALI_TEST_CHECK( TestClearHighlight( b -> GetAddress() ) );
376
377   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
378   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
379
380   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
381   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
382
383
384   Dali::Accessibility::TestEnableSC( false );
385
386   END_TEST;
387 }
388
389 int utcDaliAccessibilityControlAttributes(void)
390 {
391   ToolkitTestApplication application;
392   auto check_box_button = Toolkit::Control::New();
393
394   std::string value;
395
396
397   auto attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
398   auto attributes_map = attributes.GetMap();
399
400   auto position = attributes_map->Find( "access_key1" );
401   DALI_TEST_CHECK( !position );
402
403   DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key1", "access_value1" );
404   attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
405   attributes_map = attributes.GetMap();
406
407   DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
408
409   DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_a" );
410   attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
411   attributes_map = attributes.GetMap();
412
413   DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
414   DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_a", TEST_LOCATION );
415
416   DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_b" );
417   attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
418   attributes_map = attributes.GetMap();
419
420   DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_b", TEST_LOCATION );
421
422   DevelControl::RemoveAccessibilityAttribute( check_box_button, "access_key2" );
423   attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
424   attributes_map = attributes.GetMap();
425
426   // In case when we are removing one of attributes the property is setting for NONE type.
427   DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->GetType(), Property::NONE, TEST_LOCATION );
428
429   Dali::Accessibility::TestEnableSC( true );
430
431   auto ptr = Dali::Accessibility::Accessible::Get( check_box_button );
432   auto attribute_map_bridge = TestGetAttributes( ptr->GetAddress() );
433   auto counter = 0u;
434   for (auto i = 0u; i<attributes_map->Count();++i)
435     if((attributes_map->GetValue(i)).GetType() != Property::NONE )
436       ++counter;
437
438   DALI_TEST_EQUALS( counter, attribute_map_bridge.size(), TEST_LOCATION );
439
440   for (auto it : attribute_map_bridge)
441     DALI_TEST_EQUALS( (attributes_map->Find( it.first ))->Get<std::string>(), it.second, TEST_LOCATION );
442
443   DevelControl::ClearAccessibilityAttributes(check_box_button);
444   attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
445   attributes_map = attributes.GetMap();
446
447   position = attributes_map->Find( "access_key1" );
448   DALI_TEST_CHECK( !position );
449
450   position = attributes_map->Find( "access_key2" );
451   DALI_TEST_CHECK( !position );
452
453   Dali::Accessibility::TestEnableSC( false );
454
455   END_TEST;
456 }
457
458 int UtcDaliControlReadingInfoType(void)
459 {
460   ToolkitTestApplication application;
461   auto control = Control::New();
462
463   auto reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
464
465   for ( auto i = 0u; i < 4; ++i)
466     DALI_TEST_CHECK ( reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
467
468   reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = false;
469   reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = false;
470   reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = false;
471   reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = false;
472
473   DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
474
475   reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
476
477   for ( auto i = 0u; i < 4; ++i)
478     DALI_TEST_CHECK ( false == reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
479
480   reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = true;
481   reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = true;
482   reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = true;
483   reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = true;
484
485   DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
486
487   auto q = control.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
488   auto z = q.GetMap();
489
490   DALI_TEST_EQUALS( (z->Find( "reading_info_type" ))->Get<std::string>(), "name|role|description|state", TEST_LOCATION );
491   reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
492   for ( auto i = 0u; i < 4; ++i)
493     DALI_TEST_CHECK ( reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
494
495   END_TEST;
496 }
497
498 int UtcDaliControlDoGesture(void)
499 {
500   ToolkitTestApplication application;
501   auto control = Control::New();
502   Dali::Accessibility::TestEnableSC( true );
503
504   auto accessible = Dali::Accessibility::Accessible::Get( control );
505   auto gesture_one = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
506   auto gesture_two = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
507
508   DALI_TEST_CHECK( !accessible->DoGesture( gesture_one ) );
509   DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
510
511   DevelControl::AccessibilityDoGestureSignal(control).Connect( [] ( std::pair< Dali::Accessibility::GestureInfo, bool > &gesture ) {
512   if ( gesture.first.type == Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT )
513     gesture.second = true;
514   else
515     gesture.second = false;
516   } );
517
518   DALI_TEST_CHECK( accessible->DoGesture( gesture_one ) );
519   DALI_TEST_CHECK( TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
520
521   DALI_TEST_CHECK( !accessible->DoGesture( gesture_two ) );
522   DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
523
524   Dali::Accessibility::TestEnableSC( false );
525
526   END_TEST;
527 }
528
529 int UtcDaliAccessibilityRelation(void)
530 {
531   ToolkitTestApplication application;
532   Dali::Accessibility::TestEnableSC( true );
533
534   auto rel = Accessibility::RelationType::FLOWS_TO;
535   auto number = static_cast< size_t >( rel );
536   auto control = Control::New();
537   auto destination1 = Control::New();
538   auto destination2 = Control::New();
539
540   DevelControl::AppendAccessibilityRelation( control, destination1, rel );
541   auto relations = DevelControl::GetAccessibilityRelations(control);
542   DALI_TEST_CHECK( relations[ number ].size() == 1 );
543
544   DevelControl::AppendAccessibilityRelation( control, destination2, rel );
545   relations = DevelControl::GetAccessibilityRelations(control);
546   DALI_TEST_CHECK( relations[ number ].size() == 2 );
547
548   auto accessible = Dali::Accessibility::Accessible::Get( control );
549   auto accessible_destination1 = Dali::Accessibility::Accessible::Get( destination1 );
550   auto accessible_destination2 = Dali::Accessibility::Accessible::Get( destination2 );
551   auto relationset = accessible->GetRelationSet();
552
553   DALI_TEST_CHECK( relationset[0].relationType == rel );
554   DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination1->GetAddress() || relationset[0].targets[1] == accessible_destination1->GetAddress() );
555   DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination2->GetAddress() || relationset[0].targets[1] == accessible_destination2->GetAddress() );
556
557   auto relationset_bridge = TestGetRelationSet( accessible -> GetAddress() );
558   DALI_TEST_CHECK( static_cast< uint32_t >( relationset[0].relationType ) == std::get<0>( relationset_bridge[0] ) );
559
560   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] );
561   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] );
562
563   DevelControl::RemoveAccessibilityRelation(control,destination2,rel);
564   relations = DevelControl::GetAccessibilityRelations(control);
565   DALI_TEST_CHECK( relations[ number ].size() == 1 );
566
567   DevelControl::ClearAccessibilityRelations(control);
568   relations = DevelControl::GetAccessibilityRelations(control);
569   DALI_TEST_CHECK( relations[ number ].size() == 0 );
570
571   Dali::Accessibility::TestEnableSC( false );
572
573   END_TEST;
574 }
575
576 int UtcDaliAccessibilityParentChildren(void)
577 {
578   ToolkitTestApplication application;
579   Dali::Accessibility::TestEnableSC( true );
580
581   auto parent = Control::New();
582   auto child_1 = Control::New();
583   auto child_2 = Control::New();
584
585   auto parent_accessible = Dali::Accessibility::Accessible::Get( parent );
586   auto child_1_accessible = Dali::Accessibility::Accessible::Get( child_1 );
587   auto child_2_accessible = Dali::Accessibility::Accessible::Get( child_2 );
588
589   auto children = TestGetChildren( parent_accessible -> GetAddress() );
590   DALI_TEST_EQUALS( children.size(), 0, TEST_LOCATION );
591
592   try
593   {
594     TestGetIndexInParent( child_1_accessible -> GetAddress() );
595     DALI_ABORT("Object has parent, test abort");
596   }
597   catch(TestDBusWrapper::error &){}
598
599   try
600   {
601     TestGetChildAtIndex( parent_accessible -> GetAddress(), -1 );
602     DALI_ABORT("Positive index, test abort");
603   }
604   catch(TestDBusWrapper::error &){}
605
606   DALI_TEST_EQUALS( parent_accessible -> GetChildCount(), 0, TEST_LOCATION );
607
608   try
609   {
610     child_1_accessible -> GetIndexInParent();
611     DALI_ABORT("Object has parent, test abort");
612   }
613   catch (Dali::DaliException &){}
614
615   parent.Add(child_1);
616   parent.Add(child_2);
617
618   children = TestGetChildren( parent_accessible -> GetAddress() );
619   DALI_TEST_EQUALS( children.size(), 2, TEST_LOCATION );
620
621   DALI_TEST_EQUALS( parent_accessible -> GetAddress(), TestGetParent( child_1_accessible -> GetAddress() ), TEST_LOCATION );
622   DALI_TEST_EQUALS( child_2_accessible -> GetAddress(), TestGetChildAtIndex( parent_accessible -> GetAddress(), TestGetIndexInParent( child_2_accessible -> GetAddress() ) ), TEST_LOCATION );
623
624   DALI_TEST_EQUALS( parent_accessible,  child_1_accessible -> GetParent(), TEST_LOCATION );
625   DALI_TEST_EQUALS( child_2_accessible, parent_accessible -> GetChildAtIndex( child_2_accessible -> GetIndexInParent() ) , TEST_LOCATION );
626
627   Dali::Accessibility::TestEnableSC( false );
628
629   END_TEST;
630 }
631
632 int UtcDaliAccessibilityGetLayer(void)
633 {
634   ToolkitTestApplication application;
635
636   Dali::Accessibility::TestEnableSC( true );
637
638   auto control = Control::New();
639   auto accessible_obj = Dali::Accessibility::Accessible::Get( control );
640   auto accessible_component = dynamic_cast<Dali::Accessibility::Component*>(accessible_obj);
641   DALI_TEST_CHECK( accessible_component );
642   DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, accessible_component -> GetLayer(), TEST_LOCATION );
643   DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, TestGetLayer( accessible_component -> GetAddress() ), TEST_LOCATION );
644
645   Dali::Accessibility::TestEnableSC( false );
646
647   END_TEST;
648 }
649
650 int UtcDaliAccessibilityGrabFocus(void)
651 {
652   ToolkitTestApplication application;
653
654   Dali::Accessibility::TestEnableSC( true );
655
656   auto controla = Control::New();
657   auto controlb = Control::New();
658
659   Stage::GetCurrent().Add( controla );
660   Stage::GetCurrent().Add( controlb );
661
662   controla.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
663   controlb.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
664
665   auto a = Dali::Accessibility::Accessible::Get( controla );
666   auto b = Dali::Accessibility::Accessible::Get( controlb );
667
668   auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
669   auto b_component = dynamic_cast<Dali::Accessibility::Component*>( b );
670
671   auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
672   auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
673
674   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
675   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
676
677   DALI_TEST_CHECK( a_component -> GrabFocus() );
678
679   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
680   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
681
682   DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
683   DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
684
685   DALI_TEST_CHECK( TestGrabFocus( b_component -> GetAddress() ) );
686
687   states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
688   states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
689
690   DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
691   DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
692
693   Dali::Accessibility::TestEnableSC( false );
694
695   END_TEST;
696 }
697
698 int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch(void)
699 {
700   ToolkitTestApplication application;
701   tet_infoline( "UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch" );
702
703   Dali::Accessibility::TestEnableSC( true );
704
705   auto control = Control::New();
706   Stage::GetCurrent().GetRootLayer().Add( control );
707
708   auto window = Dali::DevelWindow::Get( control );
709   DALI_TEST_CHECK( window );
710
711   //window.SetPosition({0,0});
712   DevelWindow::SetPositionSize( window, PositionSize( 0,0,480, 240 ) );
713
714   control.SetProperty( Actor::Property::POSITION, Vector3( 10, 10, 100 ) );
715   control.SetProperty( Actor::Property::SIZE, Vector2( 10, 10 ) );
716
717   application.SendNotification();
718   application.Render( 1 );
719
720   auto a = Dali::Accessibility::Accessible::Get( control );
721   auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
722
723   auto extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
724   DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
725   DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
726   DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
727   DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
728
729   auto bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
730   DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
731   DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
732   DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
733   DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
734
735   extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
736   DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
737   DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
738   DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
739   DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
740
741   bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
742   DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
743   DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
744   DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
745   DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
746
747   control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false );
748   application.SendNotification();
749   application.Render( 1 );
750
751   extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
752   DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
753   DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
754   DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
755   DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
756
757   bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
758   DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
759   DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
760   DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
761   DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
762
763   extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
764   DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
765   DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
766   DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
767   DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
768
769   bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
770   DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
771   DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
772   DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
773   DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
774
775   Dali::Accessibility::TestEnableSC( false );
776
777   END_TEST;
778 }
779
780 int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionDoNotMatch(void)
781 {
782   ToolkitTestApplication application;
783
784   Dali::Accessibility::TestEnableSC( true );
785
786   auto control = Control::New();
787   Stage::GetCurrent().GetRootLayer().Add( control );
788   auto window = Dali::DevelWindow::Get( control );
789   //window.SetPosition({33,33});
790   DevelWindow::SetPositionSize( window, PositionSize( 33,33,480, 240 ) );
791
792   control.SetProperty( Actor::Property::POSITION, Vector3( 10, 10, 100 ) );
793   control.SetProperty( Actor::Property::SIZE, Vector2( 10, 10 ) );
794
795   application.SendNotification();
796   application.Render( 1 );
797
798   auto a = Dali::Accessibility::Accessible::Get( control );
799   auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
800
801   auto extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
802   DALI_TEST_EQUALS( extents.x, 38.0f, TEST_LOCATION );
803   DALI_TEST_EQUALS( extents.y, 38.0f, TEST_LOCATION );
804   DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
805   DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
806
807   auto bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
808   DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 38, TEST_LOCATION );
809   DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 38, TEST_LOCATION );
810   DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
811   DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
812
813   extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
814   DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
815   DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
816   DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
817   DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
818
819   bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
820   DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
821   DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
822   DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
823   DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
824
825   control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false );
826   application.SendNotification();
827   application.Render( 1 );
828
829   extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
830   DALI_TEST_EQUALS( extents.x, 43.0f, TEST_LOCATION );
831   DALI_TEST_EQUALS( extents.y, 43.0f, TEST_LOCATION );
832   DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
833   DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
834
835   bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
836   DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 43, TEST_LOCATION );
837   DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 43, TEST_LOCATION );
838   DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
839   DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
840
841   extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
842   DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
843   DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
844   DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
845   DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
846
847   bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
848   DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
849   DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
850   DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
851   DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
852
853   Dali::Accessibility::TestEnableSC( false );
854
855   END_TEST;
856 }
857
858 int UtcDaliAccessibilityGetAlpha(void)
859 {
860   ToolkitTestApplication application;
861
862   Dali::Accessibility::TestEnableSC( true );
863
864   auto control = Control::New();
865   auto a = Dali::Accessibility::Accessible::Get( control );
866   auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
867
868   DALI_TEST_EQUALS( 0.0, a_component -> GetAlpha(), TEST_LOCATION );
869   DALI_TEST_EQUALS( 0.0, TestGetAlpha( a_component -> GetAddress() ), TEST_LOCATION );
870
871   Dali::Accessibility::TestEnableSC( false );
872
873   END_TEST;
874 }
875
876 int UtcDaliAccessibilityGetMdiZOrder(void)
877 {
878   ToolkitTestApplication application;
879
880   Dali::Accessibility::TestEnableSC( true );
881
882   auto control = Control::New();
883   auto a = Dali::Accessibility::Accessible::Get( control );
884   auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
885
886   DALI_TEST_EQUALS( 0, static_cast< int >( a_component -> GetMdiZOrder() ), TEST_LOCATION );
887   DALI_TEST_EQUALS( 0, TestGetMdiZOrder( a_component -> GetAddress() ), TEST_LOCATION );
888
889   Dali::Accessibility::TestEnableSC( false );
890
891   END_TEST;
892 }
893
894 int UtcDaliAccessibilityAction(void)
895 {
896   ToolkitTestApplication application;
897
898   Dali::Accessibility::TestEnableSC( true );
899
900   auto control = Control::New( );
901   auto a = Dali::Accessibility::Accessible::Get( control );
902   auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
903
904   std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
905   auto count = b -> GetActionCount();
906
907   DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
908
909   for (auto i = 0u; i<count; ++i)
910   {
911     DALI_TEST_CHECK( Dali::Accessibility::Find( actions, b -> GetActionName( i ) ) );
912     DALI_TEST_EQUALS( b -> GetActionName( i ), b -> GetLocalizedActionName( i ), TEST_LOCATION );
913     DALI_TEST_EQUALS( b -> GetActionDescription( i ), "", TEST_LOCATION );
914     DALI_TEST_EQUALS( b -> GetActionKeyBinding( i ), "", TEST_LOCATION );
915   }
916
917   // Empty strings should be returned for invalid indices
918   DALI_TEST_EQUALS(b->GetActionDescription(count), "", TEST_LOCATION);
919   DALI_TEST_EQUALS(b->GetActionName(count), "", TEST_LOCATION);
920   DALI_TEST_EQUALS(b->GetLocalizedActionName(count), "", TEST_LOCATION);
921   DALI_TEST_EQUALS(b->GetActionKeyBinding(count), "", TEST_LOCATION);
922
923   count = TestGetActionCount(b -> GetAddress());
924
925   DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
926
927   for (auto i = 0u; i<count; ++i)
928   {
929     DALI_TEST_CHECK( Dali::Accessibility::Find( actions, TestGetActionName( b->GetAddress(), i ) ) );
930     DALI_TEST_EQUALS( TestGetActionName( b->GetAddress(), i ), TestGetLocalizedActionName( b->GetAddress(), i ), TEST_LOCATION );
931     DALI_TEST_EQUALS( TestGetActionDescription( b->GetAddress(), i ), "", TEST_LOCATION );
932     DALI_TEST_EQUALS( TestGetActionKeyBinding( b->GetAddress(), i ), "", TEST_LOCATION );
933   }
934
935   DALI_TEST_EQUALS(TestGetActionDescription(b->GetAddress(), count), "", TEST_LOCATION);
936   DALI_TEST_EQUALS(TestGetActionName(b->GetAddress(), count), "", TEST_LOCATION);
937   DALI_TEST_EQUALS(TestGetLocalizedActionName(b->GetAddress(), count), "", TEST_LOCATION);
938   DALI_TEST_EQUALS(TestGetActionKeyBinding(b->GetAddress(), count), "", TEST_LOCATION);
939
940   Dali::Accessibility::TestEnableSC( false );
941
942   END_TEST;
943 }
944
945 int UtcDaliAccessibilityDoAction(void)
946 {
947   ToolkitTestApplication application;
948
949   Dali::Accessibility::TestEnableSC( true );
950   thread_local std::vector< bool > actions_done { false, false, false, false, false, false };
951
952   auto control = Control::New(  );
953   auto a = Dali::Accessibility::Accessible::Get( control );
954   auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
955   std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
956
957   // Test calling action by name
958   DALI_TEST_CHECK( b -> DoAction( actions[2] ) ); // ReadingSkipped
959   DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
960   DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
961
962   // Negative test of calling action with not defined name
963   DALI_TEST_CHECK( !b -> DoAction( "undefined" ) );
964
965   DevelControl::AccessibilityReadingSkippedSignal(control).Connect( [] () {
966     actions_done[ 1 ] = true;
967   } );
968   DevelControl::AccessibilityReadingCancelledSignal(control).Connect( [] () {
969     actions_done[ 2 ] = true;
970   } );
971   DevelControl::AccessibilityReadingStoppedSignal(control).Connect( [] () {
972     actions_done[ 3 ] = true;
973   } );
974    DevelControl::AccessibilityReadingPausedSignal(control).Connect( [] () {
975     actions_done[ 4 ] = true;
976   } );
977    DevelControl::AccessibilityReadingResumedSignal(control).Connect( [] () {
978     actions_done[ 5 ] = true;
979   } );
980   DevelControl::AccessibilityActivateSignal(control).Connect( [] () {
981     actions_done[ 0 ] = true;
982   } );
983
984   // Test calling action by index
985   DALI_TEST_CHECK( b -> DoAction( 1 ) );
986   DALI_TEST_CHECK( b -> DoAction( 2 ) );
987   DALI_TEST_CHECK( b -> DoAction( 3 ) );
988   DALI_TEST_CHECK( b -> DoAction( 4 ) );
989   DALI_TEST_CHECK( b -> DoAction( 5 ) );
990   DALI_TEST_CHECK( b -> DoAction( 6 ) );
991
992   for ( auto i = 0u; i < actions_done.size(); ++i )
993     {
994       DALI_TEST_CHECK( actions_done[ i ] );
995       actions_done[ i ] = false;
996     }
997
998   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 1 ) );
999   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 2 ) );
1000   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 3 ) );
1001   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 4 ) );
1002   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 5 ) );
1003   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 6 ) );
1004
1005   for ( auto i = 0u; i < actions_done.size(); ++i )
1006     {
1007       DALI_TEST_CHECK( actions_done[ i ] );
1008       actions_done[ i ] = false;
1009     }
1010
1011   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 1 ] ) );
1012   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 2 ] ) );
1013   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 3 ] ) );
1014   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 4 ] ) );
1015   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 5 ] ) );
1016   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 6 ] ) );
1017
1018   for ( auto i = 0u; i < actions_done.size(); ++i )
1019       DALI_TEST_CHECK( actions_done[ i ] );
1020
1021   Dali::Accessibility::TestEnableSC( false );
1022
1023   END_TEST;
1024 }
1025
1026 void TestVoidCallback()
1027 {
1028 }
1029
1030 int UtcDaliAccessibilitySignals(void)
1031 {
1032   ToolkitTestApplication application;
1033   ConnectionTracker connectionTracker;
1034   Control control = Control::New();
1035
1036   DALI_TEST_CHECK( DevelControl::AccessibilityGetNameSignal(control).Empty() );
1037   control.ConnectSignal( &connectionTracker, "getName", &TestVoidCallback );
1038   DALI_TEST_CHECK( !DevelControl::AccessibilityGetNameSignal(control).Empty() );
1039
1040   DALI_TEST_CHECK( DevelControl::AccessibilityGetDescriptionSignal(control).Empty() );
1041   control.ConnectSignal( &connectionTracker, "getDescription", &TestVoidCallback );
1042   DALI_TEST_CHECK( !DevelControl::AccessibilityGetDescriptionSignal(control).Empty() );
1043
1044   DALI_TEST_CHECK( DevelControl::AccessibilityDoGestureSignal(control).Empty() );
1045   control.ConnectSignal( &connectionTracker, "doGesture", &TestVoidCallback );
1046   DALI_TEST_CHECK( !DevelControl::AccessibilityDoGestureSignal(control).Empty() );
1047
1048   END_TEST;
1049 }
1050
1051 static void Wait(ToolkitTestApplication& application)
1052 {
1053   application.SendNotification();
1054   application.Render(16);
1055 }
1056
1057 int UtcDaliAccessibilityScrollToChildScrollView(void)
1058 {
1059   ToolkitTestApplication application;
1060   Dali::Accessibility::TestEnableSC( true );
1061
1062   ScrollView scrollView = ScrollView::New();
1063   application.GetScene().Add( scrollView );
1064
1065   PushButton actorA = PushButton::New();
1066   const Dali::Vector3 positionA = Vector3(100.0f, 400.0f, 0.0f);
1067   actorA.SetProperty( Dali::Actor::Property::POSITION, positionA );
1068   scrollView.Add(actorA);
1069
1070   PushButton actorB = PushButton::New();
1071   const Dali::Vector3 positionB = Vector3(500.0f, 200.0f, 0.0f);
1072   actorB.SetProperty( Dali::Actor::Property::POSITION, positionB );
1073   scrollView.Add(actorB);
1074
1075   Wait(application);
1076
1077   auto* accessibleParent = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(scrollView));
1078   DALI_TEST_CHECK(accessibleParent);
1079   auto* accessibleA = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(actorA));
1080   DALI_TEST_CHECK(accessibleA);
1081   auto* accessibleB = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(actorB));
1082   DALI_TEST_CHECK(accessibleB);
1083
1084   accessibleA->GrabHighlight(); // == scrollView.ScrollTo(actorA)
1085   Wait(application);
1086   accessibleB->GrabHighlight(); // == scrollView.ScrollTo(actorB)
1087   Wait(application);
1088
1089   Dali::Accessibility::TestEnableSC( false );
1090   END_TEST;
1091 }
1092
1093 namespace {
1094   class TestItemFactory : public ItemFactory
1095   {
1096   public:
1097     TestItemFactory()
1098     {
1099     }
1100
1101     unsigned int GetNumberOfItems() override
1102     {
1103       return 2;
1104     }
1105
1106     Dali::Actor NewItem(unsigned int itemId) override
1107     {
1108       return TextLabel::New(std::to_string(itemId));
1109     }
1110   };
1111 }
1112
1113 int UtcDaliAccessibilityScrollToChildItemView(void)
1114 {
1115   ToolkitTestApplication application;
1116   Dali::Accessibility::TestEnableSC( true );
1117
1118   TestItemFactory factory;
1119   ItemView view = ItemView::New(factory);
1120   Dali::Vector3 vec(480.0f, 800.0f, 0.0f);
1121   ItemLayoutPtr layout = DefaultItemLayout::New( DefaultItemLayout::DEPTH );
1122
1123   view.AddLayout(*layout);
1124   view.SetProperty( Actor::Property::SIZE, vec );
1125
1126   application.GetScene().Add(view);
1127   layout->SetOrientation(ControlOrientation::Down);
1128   view.ActivateLayout(0, vec, 0.0f);
1129
1130   Wait(application);
1131
1132   auto* accessibleParent = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(view));
1133   DALI_TEST_CHECK(accessibleParent);
1134   auto* accessibleA = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(view.GetItem(0)));
1135   DALI_TEST_CHECK(accessibleA);
1136   auto* accessibleB = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(view.GetItem(1)));
1137   DALI_TEST_CHECK(accessibleB);
1138
1139   accessibleA->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorA))
1140   Wait(application);
1141   accessibleB->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorB))
1142   Wait(application);
1143
1144   Dali::Accessibility::TestEnableSC( false );
1145   END_TEST;
1146 }
1147
1148 int UtcDaliAccessibilityScrollToChildNonScrollable(void)
1149 {
1150   ToolkitTestApplication application;
1151   Dali::Accessibility::TestEnableSC( true );
1152
1153   TextLabel label = TextLabel::New("123");
1154
1155   auto* accessible = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(label));
1156   DALI_TEST_CHECK(accessible);
1157
1158   DALI_TEST_EQUALS(accessible->IsScrollable(), false, TEST_LOCATION);
1159   DALI_TEST_EQUALS(accessible->ScrollToChild({}), false, TEST_LOCATION);
1160
1161   Dali::Accessibility::TestEnableSC( false );
1162   END_TEST;
1163 }
1164
1165 int UtcDaliAccessibilityCheckHighlight(void)
1166 {
1167   ToolkitTestApplication application;
1168   Dali::Accessibility::TestEnableSC( true );
1169   Dali::Accessibility::TestResetMoveOutedCalled();
1170
1171   // Make precondition two children exist in parent area
1172   PushButton parentButton = PushButton::New();
1173   parentButton.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
1174   parentButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1175   parentButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1176   parentButton.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f));
1177   parentButton.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 200.0f));
1178   application.GetScene().Add( parentButton );
1179
1180   PushButton buttonA = PushButton::New();
1181   buttonA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1182   buttonA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1183   buttonA.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f));
1184   buttonA.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f));
1185   parentButton.Add(buttonA);
1186
1187   PushButton buttonB = PushButton::New();
1188   buttonB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
1189   buttonB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1190   buttonB.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f));
1191   buttonB.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f));
1192   parentButton.Add(buttonB);
1193   Wait(application);
1194
1195   // Set highlight to first child (A) to enable movement tracking
1196   auto* accessible = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(buttonA));
1197   DALI_TEST_CHECK(accessible);
1198   accessible->GrabHighlight();
1199   Wait(application);
1200
1201   // Move first child (A) out of parent area through the parent's area top edge - single move outed event expected for A object and OUTGOING_TOP_LEFT direction
1202   buttonA.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, -200.0f));
1203   Wait(application);
1204   // Need one more notificaiton to get correct updated position
1205   application.SendNotification();
1206   DALI_TEST_EQUALS( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1207
1208   // Reset verdict data
1209   Dali::Accessibility::TestResetMoveOutedCalled();
1210
1211   // Move first child (A) outside of parent area (both start and end position are outside of parent area) - no move outed event expected for A object
1212   buttonA.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, -300.0f) );
1213   Wait(application);
1214   // Need one more notificaiton to get correct updated position
1215   application.SendNotification();
1216   DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1217
1218   // Reset verdict data
1219   Dali::Accessibility::TestResetMoveOutedCalled();
1220
1221   // Set highlight to second child (B) to enable movement tracking
1222   accessible = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(buttonB));
1223   DALI_TEST_CHECK(accessible);
1224   accessible->GrabHighlight();
1225   Wait(application);
1226
1227   // Move second child (B) inside of parent area (both start and end position are inside of parent area) - no move outed event expected for B object
1228   // B: (0,100) --> (0, 50)
1229   buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 50.0f) );
1230   Wait(application);
1231   // Need one more notificaiton to get correct updated position
1232   application.SendNotification();
1233   DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1234
1235   // Reset verdict data
1236   Dali::Accessibility::TestResetMoveOutedCalled();
1237
1238   // Move second child (B) out of parent area through the parent's area right edge - single move outed event expected for B object and OUTGOING_BOTTOM_RIGHT direction
1239   buttonB.SetProperty(Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f));
1240   Wait(application);
1241   // Need one more notificaiton to get correct updated position
1242   application.SendNotification();
1243   DALI_TEST_EQUALS( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1244
1245   // Reset verdict data
1246   Dali::Accessibility::TestResetMoveOutedCalled();
1247
1248   // Move second child (B) back into parent area (start position is outside but end position is inside of parent area) - no move outed event expected for B object
1249   // B: (300,100) --> (0, 100)
1250   buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f) );
1251   Wait(application);
1252   // Need one more seding notificaiton to get correct updated position
1253   application.SendNotification();
1254   DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1255
1256   // Reset verdict data
1257   Dali::Accessibility::TestResetMoveOutedCalled();
1258
1259   // Disable movement tracking on B by giving highlight to A
1260   accessible = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(buttonA));
1261   DALI_TEST_CHECK(accessible);
1262   accessible->GrabHighlight();
1263   Wait(application);
1264
1265   // Move B (untracked) out of parent area through the parent's area right edge - no move outed event expected for B object
1266   // B: (0,100) --> (300, 100)
1267   buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f) );
1268   Wait(application);
1269   // Need one more seding notificaiton to get correct updated position
1270   application.SendNotification();
1271   DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
1272
1273   Dali::Accessibility::TestEnableSC( false );
1274   END_TEST;
1275 }