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