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