[ATSPI] Update accessibility-test-utils files
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-Accessibility-Controls-BridgeUp.cpp
index ace41ba..047018d 100644 (file)
@@ -1,30 +1,32 @@
 #include <dali-toolkit-test-suite-utils.h>
 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/accessibility-test-utils.h>
+#include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
 #include <dali-toolkit/dali-toolkit.h>
 #include <dali/devel-api/adaptor-framework/accessibility.h>
 #include <dali/devel-api/adaptor-framework/accessibility-impl.h>
+#include <dali/devel-api/adaptor-framework/window-devel.h>
+#include <dali-toolkit/devel-api/controls/buttons/toggle-button.h>
 #include <dali-toolkit/devel-api/controls/control-devel.h>
-#include <dali-toolkit/devel-api/controls/text-controls/text-selection-popup.h>
+#include <dali-toolkit/devel-api/controls/popup/popup.h>
 #include <dali/devel-api/actors/actor-devel.h>
 #include <dali/devel-api/common/stage.h>
 #include <cstdlib>
 
-using namespace Dali::Toolkit;
-
-//using DBusWrapper = Dali::Accessibility::DBusWrapper; // FIXME
+#include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
 
-namespace Dali::Accessibility::TestDBusWrapper { struct error {}; } // FIXME
+using namespace Dali::Toolkit;
 
 void utc_dali_accessibility_controls_bridge_up_startup(void)
 {
   test_return_value = TET_UNDEF;
+  DBusWrapper::Install(std::unique_ptr<DBusWrapper>(new TestDBusWrapper));
 }
 
 void utc_dali_accessibility_controls_bridge_up_cleanup(void)
 {
   test_return_value = TET_PASS;
   //DBusWrapper::Install({}) is a de-install
-  //DBusWrapper::Install({}); // FIXME
+  DBusWrapper::Install({});
 }
 
 namespace Dali {
@@ -39,10 +41,10 @@ namespace Dali {
 
 int UtcDaliControlAccessibilityRaiseBridge(void)
 {
-  ToolkitTestApplication application;
-
   DALI_TEST_CHECK(!Accessibility::IsUp());
 
+  ToolkitTestApplication application;
+
   Dali::Accessibility::TestEnableSC(true);
 
   DALI_TEST_CHECK(Accessibility::IsUp());
@@ -89,6 +91,7 @@ int UtcDaliControlAccessibilityName(void)
 
   DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , TestGetName( q->GetAddress()), TEST_LOCATION );
 
+  //TODO test emission of name change signal
   Dali::Accessibility::TestEnableSC( false );
 
   END_TEST;
@@ -120,6 +123,7 @@ int UtcDaliControlAccessibilityDescription(void)
 
   DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , TestGetDescription( q->GetAddress()), TEST_LOCATION );
 
+  //TODO test emission of description change signal
   Dali::Accessibility::TestEnableSC( false );
 
   END_TEST;
@@ -159,6 +163,67 @@ int UtcDaliControlAccessibilityRole(void)
   END_TEST;
 }
 
+int UtcDaliControlAccessibilityRoleToggleButton(void)
+{
+  ToolkitTestApplication application;
+
+  auto control = Dali::Toolkit::ToggleButton::New();
+  auto button = Dali::Accessibility::Role::TOGGLE_BUTTON;
+
+  control.SetProperty(Toolkit::ToggleButton::Property::TOOLTIPS,
+          Property::Array{"option1", "option2"});
+
+  Dali::Accessibility::TestEnableSC( true );
+
+  control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, button );
+  auto q = Dali::Accessibility::Accessible::Get( control );
+
+  DALI_TEST_EQUALS( button , q->GetRole(), TEST_LOCATION);
+  DALI_TEST_EQUALS( "toggle button" , q->GetRoleName(), TEST_LOCATION );
+
+  Dali::Accessibility::States states = q->GetStates();
+  DALI_TEST_EQUALS( true , (bool)states[Dali::Accessibility::State::VISIBLE], TEST_LOCATION);
+
+  DALI_TEST_EQUALS( "option1", q->GetDescription(), TEST_LOCATION );
+
+  auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
+  if (i)
+    i->GrabHighlight();
+
+  control.SetProperty( Toolkit::Button::Property::LABEL, "ToggleButton2" );
+  DALI_TEST_EQUALS( "ToggleButton2", TestGetName( q->GetAddress() ), TEST_LOCATION );
+
+  Dali::Accessibility::TestEnableSC( false );
+
+  END_TEST;
+}
+
+int UtcDaliControlAccessibilityButtonLabel(void)
+{
+  ToolkitTestApplication application;
+
+  auto control = Dali::Toolkit::PushButton::New();
+  auto button = Dali::Accessibility::Role::PUSH_BUTTON;
+
+  Dali::Accessibility::TestEnableSC( true );
+
+  control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, button );
+
+  auto q = Dali::Accessibility::Accessible::Get( control );
+  auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
+
+  if (i)
+    i->GrabHighlight();
+
+  control.SetProperty( Toolkit::Button::Property::LABEL, "Button2" );
+
+  DALI_TEST_EQUALS( "Button2" , TestGetName( q->GetAddress() ), TEST_LOCATION );
+
+  Dali::Accessibility::TestEnableSC( false );
+
+  END_TEST;
+}
+
 int UtcDaliControlAccessibilityState(void)
 {
   ToolkitTestApplication application;
@@ -180,10 +245,16 @@ int UtcDaliControlAccessibilityState(void)
 int UtcDaliControlAccessibilityModal(void)
 {
   ToolkitTestApplication application;
-  auto control = TextSelectionPopup::New( NULL );
-  auto states = DevelControl::GetAccessibilityStates(control);
 
-  DALI_TEST_CHECK( states[ Dali::Accessibility::State::MODAL ] );
+  auto control = Dali::Toolkit::Popup::New();
+  auto q = Dali::Accessibility::Accessible::Get( control );
+
+  Dali::Accessibility::TestEnableSC( true );
+
+  auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
+  DALI_TEST_CHECK( states_by_bridge[Dali::Accessibility::State::MODAL] );
+
+  Dali::Accessibility::TestEnableSC( false );
 
   END_TEST;
 }
@@ -196,12 +267,17 @@ int UtcDaliControlAccessibilityHighlightable(void)
   auto noneset = control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE );
   DALI_TEST_EQUALS( Property::NONE, noneset.GetType(), TEST_LOCATION );
 
+   // negative testcase - trying to set unconvertible value
+  control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, "deadbeef" );
+  noneset = control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE );
+  DALI_TEST_EQUALS( Property::NONE, noneset.GetType(), TEST_LOCATION );
+
   auto q = Dali::Accessibility::Accessible::Get( control );
 
   Dali::Accessibility::TestEnableSC( true );
 
   auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
-  DALI_TEST_CHECK( states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
+  DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
 
   control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
   DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
@@ -228,6 +304,10 @@ int UtcDaliControlAccessibilityHighlightBridgeUp(void)
 
   auto controla = Control::New();
   auto controlb = Control::New();
+  controla.Add(controlb);
+
+  controla.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
+  controlb.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
 
   Dali::Accessibility::TestEnableSC( true );
 
@@ -381,6 +461,22 @@ int UtcDaliControlReadingInfoType(void)
   auto control = Control::New();
 
   auto reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
+
+  for ( auto i = 0u; i < 4; ++i)
+    DALI_TEST_CHECK ( reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
+
+  reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = false;
+  reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = false;
+  reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = false;
+  reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = false;
+
+  DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
+
+  reading_info_type = DevelControl::GetAccessibilityReadingInfoType(control);
+
+  for ( auto i = 0u; i < 4; ++i)
+    DALI_TEST_CHECK ( false == reading_info_type[ static_cast< Dali::Accessibility::ReadingInfoType >( i ) ]);
+
   reading_info_type[Dali::Accessibility::ReadingInfoType::DESCRIPTION] = true;
   reading_info_type[Dali::Accessibility::ReadingInfoType::STATE] = true;
   reading_info_type[Dali::Accessibility::ReadingInfoType::NAME] = true;
@@ -498,14 +594,14 @@ int UtcDaliAccessibilityParentChildren(void)
     TestGetIndexInParent( child_1_accessible -> GetAddress() );
     DALI_ABORT("Object has parent, test abort");
   }
-  catch(Accessibility::TestDBusWrapper::error &){}
+  catch(TestDBusWrapper::error &){}
 
   try
   {
     TestGetChildAtIndex( parent_accessible -> GetAddress(), -1 );
     DALI_ABORT("Positive index, test abort");
   }
-  catch(Accessibility::TestDBusWrapper::error &){}
+  catch(TestDBusWrapper::error &){}
 
   DALI_TEST_EQUALS( parent_accessible -> GetChildCount(), 0, TEST_LOCATION );
 
@@ -514,7 +610,7 @@ int UtcDaliAccessibilityParentChildren(void)
     child_1_accessible -> GetIndexInParent();
     DALI_ABORT("Object has parent, test abort");
   }
-  catch (std::domain_error &){}
+  catch (Dali::DaliException &){}
 
   parent.Add(child_1);
   parent.Add(child_2);
@@ -599,17 +695,24 @@ int UtcDaliAccessibilityGrabFocus(void)
   END_TEST;
 }
 
-int UtcDaliAccessibilityGetExtents(void)
+int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch(void)
 {
   ToolkitTestApplication application;
+  tet_infoline( "UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch" );
 
   Dali::Accessibility::TestEnableSC( true );
 
   auto control = Control::New();
   Stage::GetCurrent().GetRootLayer().Add( control );
 
-  control.SetProperty(Actor::Property::POSITION, Vector3(10, 10, 100));
-  control.SetProperty(Actor::Property::SIZE, Vector2(10, 10));
+  auto window = Dali::DevelWindow::Get( control );
+  DALI_TEST_CHECK( window );
+
+  //window.SetPosition({0,0});
+  DevelWindow::SetPositionSize( window, PositionSize( 0,0,480, 240 ) );
+
+  control.SetProperty( Actor::Property::POSITION, Vector3( 10, 10, 100 ) );
+  control.SetProperty( Actor::Property::SIZE, Vector2( 10, 10 ) );
 
   application.SendNotification();
   application.Render( 1 );
@@ -617,13 +720,25 @@ int UtcDaliAccessibilityGetExtents(void)
   auto a = Dali::Accessibility::Accessible::Get( control );
   auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
 
-  auto extents = a_component->GetExtents(Dali::Accessibility::CoordType::SCREEN);
+  auto extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
   DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
   DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
   DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
   DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
 
-  auto bridge_extents = TestGetExtents( a_component -> GetAddress() );
+  auto bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
+  DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
+
+  extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
+  DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
+
+  bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
   DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
   DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
   DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
@@ -633,13 +748,103 @@ int UtcDaliAccessibilityGetExtents(void)
   application.SendNotification();
   application.Render( 1 );
 
-  extents = a_component->GetExtents(Dali::Accessibility::CoordType::SCREEN);
+  extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
   DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
   DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
   DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
   DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
 
-  bridge_extents = TestGetExtents( a_component -> GetAddress() );
+  bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
+  DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
+
+  extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
+  DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
+
+  bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
+  DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
+
+  Dali::Accessibility::TestEnableSC( false );
+
+  END_TEST;
+}
+
+int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionDoNotMatch(void)
+{
+  ToolkitTestApplication application;
+
+  Dali::Accessibility::TestEnableSC( true );
+
+  auto control = Control::New();
+  Stage::GetCurrent().GetRootLayer().Add( control );
+  auto window = Dali::DevelWindow::Get( control );
+  //window.SetPosition({33,33});
+  DevelWindow::SetPositionSize( window, PositionSize( 33,33,480, 240 ) );
+
+  control.SetProperty( Actor::Property::POSITION, Vector3( 10, 10, 100 ) );
+  control.SetProperty( Actor::Property::SIZE, Vector2( 10, 10 ) );
+
+  application.SendNotification();
+  application.Render( 1 );
+
+  auto a = Dali::Accessibility::Accessible::Get( control );
+  auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
+
+  auto extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
+  DALI_TEST_EQUALS( extents.x, 38.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.y, 38.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
+
+  auto bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
+  DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 38, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 38, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
+
+  extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
+  DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
+
+  bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
+  DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 5, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 5, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
+
+  control.SetProperty( Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT, false );
+  application.SendNotification();
+  application.Render( 1 );
+
+  extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::SCREEN );
+  DALI_TEST_EQUALS( extents.x, 43.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.y, 43.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
+
+  bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::SCREEN );
+  DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 43, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 43, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
+  DALI_TEST_EQUALS( std::get< 3 >( bridge_extents ), 10, TEST_LOCATION );
+
+  extents = a_component->GetExtents( Dali::Accessibility::CoordinateType::WINDOW );
+  DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION );
+  DALI_TEST_EQUALS( extents.width, 10.0f, TEST_LOCATION );
+
+  bridge_extents = TestGetExtents( a_component -> GetAddress(), Dali::Accessibility::CoordinateType::WINDOW );
   DALI_TEST_EQUALS( std::get< 0 >( bridge_extents ), 10, TEST_LOCATION );
   DALI_TEST_EQUALS( std::get< 1 >( bridge_extents ), 10, TEST_LOCATION );
   DALI_TEST_EQUALS( std::get< 2 >( bridge_extents ), 10, TEST_LOCATION );
@@ -696,10 +901,10 @@ int UtcDaliAccessibilityAction(void)
   auto a = Dali::Accessibility::Accessible::Get( control );
   auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
 
-  std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "show", "hide" };
+  std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
   auto count = b -> GetActionCount();
 
-  DALI_TEST_EQUALS( count, 7, TEST_LOCATION );
+  DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
 
   for (auto i = 0u; i<count; ++i)
   {
@@ -709,37 +914,15 @@ int UtcDaliAccessibilityAction(void)
     DALI_TEST_EQUALS( b -> GetActionKeyBinding( i ), "", TEST_LOCATION );
   }
 
-  try
-  {
-    b ->GetActionDescription( count );
-    DALI_ABORT( "Correct index, abort" );
-  }
-  catch( std::domain_error &){}
-
-  try
-  {
-    b ->GetActionName( count );
-    DALI_ABORT( "Correct index, abort" );
-  }
-  catch( std::domain_error &){}
-
-  try
-  {
-    b ->GetLocalizedActionName( count );
-    DALI_ABORT( "Correct index, abort" );
-  }
-  catch( std::domain_error &){}
-
-  try
-  {
-    b ->GetActionKeyBinding( count );
-    DALI_ABORT( "Correct index, abort" );
-  }
-  catch( std::domain_error &){}
+  // Empty strings should be returned for invalid indices
+  DALI_TEST_EQUALS(b->GetActionDescription(count), "", TEST_LOCATION);
+  DALI_TEST_EQUALS(b->GetActionName(count), "", TEST_LOCATION);
+  DALI_TEST_EQUALS(b->GetLocalizedActionName(count), "", TEST_LOCATION);
+  DALI_TEST_EQUALS(b->GetActionKeyBinding(count), "", TEST_LOCATION);
 
   count = TestGetActionCount(b -> GetAddress());
 
-  DALI_TEST_EQUALS( count, 7, TEST_LOCATION );
+  DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
 
   for (auto i = 0u; i<count; ++i)
   {
@@ -749,34 +932,10 @@ int UtcDaliAccessibilityAction(void)
     DALI_TEST_EQUALS( TestGetActionKeyBinding( b->GetAddress(), i ), "", TEST_LOCATION );
   }
 
-  try
-  {
-    TestGetActionDescription( b->GetAddress(), count );
-    DALI_ABORT( "Correct index, abort" );
-  }
-  catch( Dali::Accessibility::TestDBusWrapper::error ){}
-
-  try
-  {
-    TestGetActionName( b->GetAddress(), count );
-    DALI_ABORT( "Correct index, abort" );
-  }
-  catch( Dali::Accessibility::TestDBusWrapper::error ){}
-
-  try
-  {
-    TestGetLocalizedActionName( b->GetAddress(), count );
-    DALI_ABORT( "Correct index, abort" );
-  }
-  catch( Dali::Accessibility::TestDBusWrapper::error ){}
-
-  try
-  {
-    TestGetActionKeyBinding( b->GetAddress(), count );
-    DALI_ABORT( "Correct index, abort" );
-  }
-  catch( Dali::Accessibility::TestDBusWrapper::error ){}
-
+  DALI_TEST_EQUALS(TestGetActionDescription(b->GetAddress(), count), "", TEST_LOCATION);
+  DALI_TEST_EQUALS(TestGetActionName(b->GetAddress(), count), "", TEST_LOCATION);
+  DALI_TEST_EQUALS(TestGetLocalizedActionName(b->GetAddress(), count), "", TEST_LOCATION);
+  DALI_TEST_EQUALS(TestGetActionKeyBinding(b->GetAddress(), count), "", TEST_LOCATION);
 
   Dali::Accessibility::TestEnableSC( false );
 
@@ -788,16 +947,20 @@ int UtcDaliAccessibilityDoAction(void)
   ToolkitTestApplication application;
 
   Dali::Accessibility::TestEnableSC( true );
-  thread_local std::vector< bool > actions_done { false, false, false, false };
+  thread_local std::vector< bool > actions_done { false, false, false, false, false, false };
 
   auto control = Control::New(  );
   auto a = Dali::Accessibility::Accessible::Get( control );
   auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
-  std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "show", "hide" };
+  std::vector< std::string > actions { "activate", "accessibilityActivated", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide" };
+
+  // Test calling action by name
+  DALI_TEST_CHECK( b -> DoAction( actions[2] ) ); // ReadingSkipped
+  DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
+  DALI_TEST_CHECK( b -> DoAction( actions[4] ) ); // ReadingStopped
 
-  DALI_TEST_CHECK( b -> DoAction( actions[2] ) );
-  DALI_TEST_CHECK( b -> DoAction( actions[4] ) );
-  DALI_TEST_CHECK( b -> DoAction( actions[4] ) );
+  // Negative test of calling action with not defined name
+  DALI_TEST_CHECK( !b -> DoAction( "undefined" ) );
 
   DevelControl::AccessibilityReadingSkippedSignal(control).Connect( [] () {
     actions_done[ 1 ] = true;
@@ -808,14 +971,23 @@ int UtcDaliAccessibilityDoAction(void)
   DevelControl::AccessibilityReadingStoppedSignal(control).Connect( [] () {
     actions_done[ 3 ] = true;
   } );
+   DevelControl::AccessibilityReadingPausedSignal(control).Connect( [] () {
+    actions_done[ 4 ] = true;
+  } );
+   DevelControl::AccessibilityReadingResumedSignal(control).Connect( [] () {
+    actions_done[ 5 ] = true;
+  } );
   DevelControl::AccessibilityActivateSignal(control).Connect( [] () {
     actions_done[ 0 ] = true;
   } );
 
+  // Test calling action by index
   DALI_TEST_CHECK( b -> DoAction( 1 ) );
   DALI_TEST_CHECK( b -> DoAction( 2 ) );
   DALI_TEST_CHECK( b -> DoAction( 3 ) );
   DALI_TEST_CHECK( b -> DoAction( 4 ) );
+  DALI_TEST_CHECK( b -> DoAction( 5 ) );
+  DALI_TEST_CHECK( b -> DoAction( 6 ) );
 
   for ( auto i = 0u; i < actions_done.size(); ++i )
     {
@@ -827,6 +999,8 @@ int UtcDaliAccessibilityDoAction(void)
   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 2 ) );
   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 3 ) );
   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 4 ) );
+  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 5 ) );
+  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 6 ) );
 
   for ( auto i = 0u; i < actions_done.size(); ++i )
     {
@@ -838,6 +1012,8 @@ int UtcDaliAccessibilityDoAction(void)
   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 2 ] ) );
   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 3 ] ) );
   DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 4 ] ) );
+  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 5 ] ) );
+  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 6 ] ) );
 
   for ( auto i = 0u; i < actions_done.size(); ++i )
       DALI_TEST_CHECK( actions_done[ i ] );
@@ -846,3 +1022,255 @@ int UtcDaliAccessibilityDoAction(void)
 
   END_TEST;
 }
+
+void TestVoidCallback()
+{
+}
+
+int UtcDaliAccessibilitySignals(void)
+{
+  ToolkitTestApplication application;
+  ConnectionTracker connectionTracker;
+  Control control = Control::New();
+
+  DALI_TEST_CHECK( DevelControl::AccessibilityGetNameSignal(control).Empty() );
+  control.ConnectSignal( &connectionTracker, "getName", &TestVoidCallback );
+  DALI_TEST_CHECK( !DevelControl::AccessibilityGetNameSignal(control).Empty() );
+
+  DALI_TEST_CHECK( DevelControl::AccessibilityGetDescriptionSignal(control).Empty() );
+  control.ConnectSignal( &connectionTracker, "getDescription", &TestVoidCallback );
+  DALI_TEST_CHECK( !DevelControl::AccessibilityGetDescriptionSignal(control).Empty() );
+
+  DALI_TEST_CHECK( DevelControl::AccessibilityDoGestureSignal(control).Empty() );
+  control.ConnectSignal( &connectionTracker, "doGesture", &TestVoidCallback );
+  DALI_TEST_CHECK( !DevelControl::AccessibilityDoGestureSignal(control).Empty() );
+
+  END_TEST;
+}
+
+static void Wait(ToolkitTestApplication& application)
+{
+  application.SendNotification();
+  application.Render(16);
+}
+
+int UtcDaliAccessibilityScrollToChildScrollView(void)
+{
+  ToolkitTestApplication application;
+  Dali::Accessibility::TestEnableSC( true );
+
+  ScrollView scrollView = ScrollView::New();
+  application.GetScene().Add( scrollView );
+
+  PushButton actorA = PushButton::New();
+  const Dali::Vector3 positionA = Vector3(100.0f, 400.0f, 0.0f);
+  actorA.SetProperty( Dali::Actor::Property::POSITION, positionA );
+  scrollView.Add(actorA);
+
+  PushButton actorB = PushButton::New();
+  const Dali::Vector3 positionB = Vector3(500.0f, 200.0f, 0.0f);
+  actorB.SetProperty( Dali::Actor::Property::POSITION, positionB );
+  scrollView.Add(actorB);
+
+  Wait(application);
+
+  auto* accessibleParent = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(scrollView));
+  DALI_TEST_CHECK(accessibleParent);
+  auto* accessibleA = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(actorA));
+  DALI_TEST_CHECK(accessibleA);
+  auto* accessibleB = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(actorB));
+  DALI_TEST_CHECK(accessibleB);
+
+  accessibleA->GrabHighlight(); // == scrollView.ScrollTo(actorA)
+  Wait(application);
+  accessibleB->GrabHighlight(); // == scrollView.ScrollTo(actorB)
+  Wait(application);
+
+  Dali::Accessibility::TestEnableSC( false );
+  END_TEST;
+}
+
+namespace {
+  class TestItemFactory : public ItemFactory
+  {
+  public:
+    TestItemFactory()
+    {
+    }
+
+    unsigned int GetNumberOfItems() override
+    {
+      return 2;
+    }
+
+    Dali::Actor NewItem(unsigned int itemId) override
+    {
+      return TextLabel::New(std::to_string(itemId));
+    }
+  };
+}
+
+int UtcDaliAccessibilityScrollToChildItemView(void)
+{
+  ToolkitTestApplication application;
+  Dali::Accessibility::TestEnableSC( true );
+
+  TestItemFactory factory;
+  ItemView view = ItemView::New(factory);
+  Dali::Vector3 vec(480.0f, 800.0f, 0.0f);
+  ItemLayoutPtr layout = DefaultItemLayout::New( DefaultItemLayout::DEPTH );
+
+  view.AddLayout(*layout);
+  view.SetProperty( Actor::Property::SIZE, vec );
+
+  application.GetScene().Add(view);
+  layout->SetOrientation(ControlOrientation::Down);
+  view.ActivateLayout(0, vec, 0.0f);
+
+  Wait(application);
+
+  auto* accessibleParent = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(view));
+  DALI_TEST_CHECK(accessibleParent);
+  auto* accessibleA = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(view.GetItem(0)));
+  DALI_TEST_CHECK(accessibleA);
+  auto* accessibleB = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(view.GetItem(1)));
+  DALI_TEST_CHECK(accessibleB);
+
+  accessibleA->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorA))
+  Wait(application);
+  accessibleB->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorB))
+  Wait(application);
+
+  Dali::Accessibility::TestEnableSC( false );
+  END_TEST;
+}
+
+int UtcDaliAccessibilityScrollToChildNonScrollable(void)
+{
+  ToolkitTestApplication application;
+  Dali::Accessibility::TestEnableSC( true );
+
+  TextLabel label = TextLabel::New("123");
+
+  auto* accessible = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(label));
+  DALI_TEST_CHECK(accessible);
+
+  DALI_TEST_EQUALS(accessible->IsScrollable(), false, TEST_LOCATION);
+  DALI_TEST_EQUALS(accessible->ScrollToChild({}), false, TEST_LOCATION);
+  DALI_TEST_EQUALS(accessible->GetInternalActor(), Dali::Actor{}, TEST_LOCATION);
+
+  Dali::Accessibility::TestEnableSC( false );
+  END_TEST;
+}
+
+int UtcDaliAccessibilityCheckHighlight(void)
+{
+  ToolkitTestApplication application;
+  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestResetMoveOutedCalled();
+
+  // Make precondition two children exist in parent area
+  PushButton parentButton = PushButton::New();
+  parentButton.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
+  parentButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+  parentButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+  parentButton.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f));
+  parentButton.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 200.0f));
+  application.GetScene().Add( parentButton );
+
+  PushButton buttonA = PushButton::New();
+  buttonA.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+  buttonA.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+  buttonA.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f));
+  buttonA.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f));
+  parentButton.Add(buttonA);
+
+  PushButton buttonB = PushButton::New();
+  buttonB.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+  buttonB.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+  buttonB.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f));
+  buttonB.SetProperty(Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f));
+  parentButton.Add(buttonB);
+  Wait(application);
+
+  // Set highlight to first child (A) to enable movement tracking
+  auto* accessible = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(buttonA));
+  DALI_TEST_CHECK(accessible);
+  accessible->GrabHighlight();
+  Wait(application);
+
+  // 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
+  buttonA.SetProperty(Actor::Property::POSITION, Dali::Vector2(0.0f, -200.0f));
+  Wait(application);
+  // Need one more notificaiton to get correct updated position
+  application.SendNotification();
+  DALI_TEST_EQUALS( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
+
+  // Reset verdict data
+  Dali::Accessibility::TestResetMoveOutedCalled();
+
+  // 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
+  buttonA.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, -300.0f) );
+  Wait(application);
+  // Need one more notificaiton to get correct updated position
+  application.SendNotification();
+  DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
+
+  // Reset verdict data
+  Dali::Accessibility::TestResetMoveOutedCalled();
+
+  // Set highlight to second child (B) to enable movement tracking
+  accessible = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(buttonB));
+  DALI_TEST_CHECK(accessible);
+  accessible->GrabHighlight();
+  Wait(application);
+
+  // 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
+  // B: (0,100) --> (0, 50)
+  buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 50.0f) );
+  Wait(application);
+  // Need one more notificaiton to get correct updated position
+  application.SendNotification();
+  DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
+
+  // Reset verdict data
+  Dali::Accessibility::TestResetMoveOutedCalled();
+
+  // 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
+  buttonB.SetProperty(Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f));
+  Wait(application);
+  // Need one more notificaiton to get correct updated position
+  application.SendNotification();
+  DALI_TEST_EQUALS( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
+
+  // Reset verdict data
+  Dali::Accessibility::TestResetMoveOutedCalled();
+
+  // 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
+  // B: (300,100) --> (0, 100)
+  buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f) );
+  Wait(application);
+  // Need one more seding notificaiton to get correct updated position
+  application.SendNotification();
+  DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
+
+  // Reset verdict data
+  Dali::Accessibility::TestResetMoveOutedCalled();
+
+  // Disable movement tracking on B by giving highlight to A
+  accessible = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(buttonA));
+  DALI_TEST_CHECK(accessible);
+  accessible->GrabHighlight();
+  Wait(application);
+
+  // Move B (untracked) out of parent area through the parent's area right edge - no move outed event expected for B object
+  // B: (0,100) --> (300, 100)
+  buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f) );
+  Wait(application);
+  // Need one more seding notificaiton to get correct updated position
+  application.SendNotification();
+  DALI_TEST_EQUALS( false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
+
+  Dali::Accessibility::TestEnableSC( false );
+  END_TEST;
+}