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