[dali_2.3.42] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-Accessibility-Controls-BridgeUp.cpp
index 6d47f06..6d5acf5 100644 (file)
@@ -1,42 +1,61 @@
-#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 <automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-timer.h>
+#include <dali-toolkit-test-suite-utils.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-toolkit/devel-api/controls/buttons/toggle-button.h>
 #include <dali-toolkit/devel-api/controls/control-devel.h>
 #include <dali-toolkit/devel-api/controls/popup/popup.h>
+#include <dali-toolkit/devel-api/controls/table-view/table-view.h>
+#include <dali-toolkit/devel-api/controls/web-view/web-view.h>
 #include <dali/devel-api/actors/actor-devel.h>
+#include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
+#include <dali/devel-api/adaptor-framework/accessibility.h>
+#include <dali/devel-api/adaptor-framework/window-devel.h>
+#include <dali/devel-api/atspi-interfaces/accessible.h>
+#include <dali/devel-api/atspi-interfaces/action.h>
+#include <dali/devel-api/atspi-interfaces/component.h>
 #include <dali/devel-api/common/stage.h>
 #include <cstdlib>
 
-#include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
-
 using namespace Dali::Toolkit;
 
-void utc_dali_accessibility_controls_bridge_up_startup(void)
+namespace
+{
+const auto flushCoalescableMessage = [](Dali::ToolkitTestApplication& application) {
+  Dali::Timer timer = Timer::New(0);
+  for(int i = 0; i < 11; ++i)
+  {
+    application.SendNotification();
+    application.Render();
+    timer.MockEmitSignal();
+  }
+};
+}
+
+void utc_dali_toolkit_accessibility_control_bridgeup_startup(void)
 {
   test_return_value = TET_UNDEF;
   DBusWrapper::Install(std::unique_ptr<DBusWrapper>(new TestDBusWrapper));
 }
 
-void utc_dali_accessibility_controls_bridge_up_cleanup(void)
+void utc_dali_toolkit_accessibility_control_bridgeup_cleanup(void)
 {
   test_return_value = TET_PASS;
-  //DBusWrapper::Install({}) is a de-install
-  DBusWrapper::Install({});
+  DBusWrapper::Install({}); // Clean up TestDBusWrapper
 }
 
-namespace Dali {
-  namespace Accessibility {
-    std::ostream & operator<< (std::ostream & stream, const Address & address)
-    {
-      stream << address.ToString();
-      return stream;
-    }
-  }
+namespace Dali
+{
+namespace Accessibility
+{
+std::ostream& operator<<(std::ostream& stream, const Address& address)
+{
+  stream << address.ToString();
+  return stream;
 }
+} // namespace Accessibility
+} // namespace Dali
 
 int UtcDaliControlAccessibilityRaiseBridge(void)
 {
@@ -70,28 +89,43 @@ int UtcDaliControlAccessibilityName(void)
   ToolkitTestApplication application;
 
   auto control = Control::New();
-  Stage::GetCurrent().Add( control );
+  Stage::GetCurrent().Add(control);
+
+  auto q = Dali::Accessibility::Accessible::Get(control);
+  DALI_TEST_CHECK(q);
 
-  auto q = Dali::Accessibility::Accessible::Get( control );
-  DALI_TEST_CHECK( q );
+  DALI_TEST_EQUALS("", q->GetName(), TEST_LOCATION);
 
-  DALI_TEST_EQUALS( "" , q->GetName(), TEST_LOCATION );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_NAME, "Accessibility_Name");
+  DALI_TEST_EQUALS("Accessibility_Name", q->GetName(), TEST_LOCATION);
+  DALI_TEST_EQUALS(control.GetProperty(DevelControl::Property::ACCESSIBILITY_NAME).Get<std::string>(), "Accessibility_Name", TEST_LOCATION);
 
-  control.SetProperty( DevelControl::Property::ACCESSIBILITY_NAME, "Accessibility_Name" );
-  DALI_TEST_EQUALS( "Accessibility_Name" , q->GetName(), TEST_LOCATION );
-  DALI_TEST_EQUALS( control.GetProperty( DevelControl::Property::ACCESSIBILITY_NAME ).Get< std::string >() , "Accessibility_Name", TEST_LOCATION );
+  auto nameChangeCallback = [](std::string& accessibilityName) { accessibilityName = "Accessibility_Name_With_Callback"; };
 
-  DevelControl::AccessibilityGetNameSignal(control).Connect( [] (std::string &accessibility_name) {
-    accessibility_name = "Accessibility_Name_With_Callback"; } );
+  DevelControl::AccessibilityGetNameSignal(control).Connect(nameChangeCallback);
 
-  DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , q->GetName(), TEST_LOCATION );
+  DALI_TEST_EQUALS("Accessibility_Name_With_Callback", q->GetName(), TEST_LOCATION);
 
   Dali::Accessibility::TestEnableSC(true);
+  DALI_TEST_CHECK(!Dali::Accessibility::TestPropertyChangeCalled());
+
+  DALI_TEST_EQUALS("Accessibility_Name_With_Callback", TestGetName(q->GetAddress()), TEST_LOCATION);
+
+  DevelControl::AccessibilityGetNameSignal(control).Disconnect(nameChangeCallback);
 
-  DALI_TEST_EQUALS( "Accessibility_Name_With_Callback" , TestGetName( q->GetAddress()), TEST_LOCATION );
+  auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
+
+  DALI_TEST_CHECK(i);
+  i->GrabHighlight();
 
-  //TODO test emission of name change signal
-  Dali::Accessibility::TestEnableSC( false );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_NAME, "Changed_Accessiblity_Name");
+  DALI_TEST_EQUALS("Changed_Accessiblity_Name", q->GetName(), TEST_LOCATION);
+  DALI_TEST_EQUALS(control.GetProperty(DevelControl::Property::ACCESSIBILITY_NAME).Get<std::string>(), "Changed_Accessiblity_Name", TEST_LOCATION);
+
+  // test emission of property change signal
+  DALI_TEST_CHECK(Dali::Accessibility::TestPropertyChangeCalled());
+
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -102,62 +136,210 @@ int UtcDaliControlAccessibilityDescription(void)
 
   auto control = Control::New();
 
-  auto q = Dali::Accessibility::Accessible::Get( control );
-  DALI_TEST_CHECK( q );
+  auto q = Dali::Accessibility::Accessible::Get(control);
+  DALI_TEST_CHECK(q);
+
+  DALI_TEST_EQUALS("", q->GetDescription(), TEST_LOCATION);
 
-  DALI_TEST_EQUALS( "" , q->GetDescription(), TEST_LOCATION );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_DESCRIPTION, "Accessibility_Description");
+  DALI_TEST_EQUALS("Accessibility_Description", q->GetDescription(), TEST_LOCATION);
 
-  control.SetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION, "Accessibility_Description" );
-  DALI_TEST_EQUALS( "Accessibility_Description" , q->GetDescription(), TEST_LOCATION );
+  auto property = control.GetProperty(DevelControl::Property::ACCESSIBILITY_DESCRIPTION).Get<std::string>();
+  DALI_TEST_EQUALS("Accessibility_Description", property, TEST_LOCATION);
 
-  auto property = control.GetProperty( DevelControl::Property::ACCESSIBILITY_DESCRIPTION ).Get<std::string>();
-  DALI_TEST_EQUALS( "Accessibility_Description", property, TEST_LOCATION );
+  auto descriptionChangeCallback = [](std::string& accessibilityDescription) { accessibilityDescription = "Accessibility_Description_With_Callback"; };
 
-  DevelControl::AccessibilityGetDescriptionSignal(control).Connect( [] (std::string &accessibility_description) {
-    accessibility_description = "Accessibility_Description_With_Callback"; } );
+  DevelControl::AccessibilityGetDescriptionSignal(control).Connect(descriptionChangeCallback);
 
-  DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , q->GetDescription(), TEST_LOCATION );
+  DALI_TEST_EQUALS("Accessibility_Description_With_Callback", q->GetDescription(), TEST_LOCATION);
+
+  Dali::Accessibility::TestEnableSC(true);
+  DALI_TEST_CHECK(!Dali::Accessibility::TestPropertyChangeCalled());
 
-  Dali::Accessibility::TestEnableSC( true );
+  DALI_TEST_EQUALS("Accessibility_Description_With_Callback", TestGetDescription(q->GetAddress()), TEST_LOCATION);
+
+  DevelControl::AccessibilityGetDescriptionSignal(control).Disconnect(descriptionChangeCallback);
+
+  auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
 
-  DALI_TEST_EQUALS( "Accessibility_Description_With_Callback" , TestGetDescription( q->GetAddress()), TEST_LOCATION );
+  DALI_TEST_CHECK(i);
+  i->GrabHighlight();
 
-  //TODO test emission of description change signal
-  Dali::Accessibility::TestEnableSC( false );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_DESCRIPTION, "Changed_Accessiblity_Description");
+  DALI_TEST_EQUALS("Changed_Accessiblity_Description", q->GetDescription(), TEST_LOCATION);
+  DALI_TEST_EQUALS(control.GetProperty(DevelControl::Property::ACCESSIBILITY_DESCRIPTION).Get<std::string>(), "Changed_Accessiblity_Description", TEST_LOCATION);
+
+  // test emission of property change signal
+  DALI_TEST_CHECK(Dali::Accessibility::TestPropertyChangeCalled());
+
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
 
-int UtcDaliControlAccessibilityRole(void)
+int UtcDaliControlAccessibilityValue(void)
 {
   ToolkitTestApplication application;
 
   auto control = Control::New();
-  auto role_unknown = Dali::Accessibility::Role::UNKNOWN;
+
+  auto q = Dali::Accessibility::Accessible::Get(control);
+  DALI_TEST_CHECK(q);
+
+  DALI_TEST_EQUALS("", q->GetValue(), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_VALUE, "Accessibility_Value");
+  DALI_TEST_EQUALS("Accessibility_Value", q->GetValue(), TEST_LOCATION);
+
+  auto property = control.GetProperty(DevelControl::Property::ACCESSIBILITY_VALUE).Get<std::string>();
+  DALI_TEST_EQUALS("Accessibility_Value", property, TEST_LOCATION);
+
+  Dali::Accessibility::TestEnableSC(true);
+  DALI_TEST_CHECK(!Dali::Accessibility::TestPropertyChangeCalled());
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_VALUE, "Changed_Accessiblity_Value");
+  DALI_TEST_EQUALS("Changed_Accessiblity_Value", q->GetValue(), TEST_LOCATION);
+  DALI_TEST_EQUALS(control.GetProperty(DevelControl::Property::ACCESSIBILITY_VALUE).Get<std::string>(), "Changed_Accessiblity_Value", TEST_LOCATION);
+
+  // value property change signal is not emitted if not highlighted
+  DALI_TEST_CHECK(!Dali::Accessibility::TestPropertyChangeCalled());
+
+  auto component = dynamic_cast<Dali::Accessibility::Component*>(q);
+
+  DALI_TEST_CHECK(component);
+  component->GrabHighlight();
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_VALUE, "Changed_Accessiblity_Value_2");
+  DALI_TEST_EQUALS("Changed_Accessiblity_Value_2", q->GetValue(), TEST_LOCATION);
+  DALI_TEST_EQUALS(control.GetProperty(DevelControl::Property::ACCESSIBILITY_VALUE).Get<std::string>(), "Changed_Accessiblity_Value_2", TEST_LOCATION);
+
+  // value property change signal is emitted if highlighted
+  DALI_TEST_CHECK(Dali::Accessibility::TestPropertyChangeCalled());
+
+  Dali::Accessibility::TestEnableSC(false);
+
+  END_TEST;
+}
+
+int UtcDaliControlAccessibilityRole(void)
+{
+  ToolkitTestApplication application;
+
+  auto control         = Control::New();
+  auto role_unknown    = Dali::Accessibility::Role::UNKNOWN;
   auto role_pushbutton = Dali::Accessibility::Role::PUSH_BUTTON;
 
-  DALI_TEST_EQUALS( role_unknown,control.GetProperty( DevelControl::Property::ACCESSIBILITY_ROLE ).Get< Dali::Accessibility::Role >(), TEST_LOCATION );
+  DALI_TEST_EQUALS(role_unknown, control.GetProperty(DevelControl::Property::ACCESSIBILITY_ROLE).Get<Dali::Accessibility::Role>(), TEST_LOCATION);
+
+  auto accessible = Dali::Accessibility::Accessible::Get(control);
+  DALI_TEST_EQUALS(role_unknown, accessible->GetRole(), TEST_LOCATION);
+  DALI_TEST_EQUALS("unknown", accessible->GetRoleName(), TEST_LOCATION);
+
+  Dali::Accessibility::TestEnableSC(true);
+  DALI_TEST_CHECK(accessible);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(role_unknown), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+  DALI_TEST_EQUALS("unknown", TestGetRoleName(accessible->GetAddress()), TEST_LOCATION);
+  DALI_TEST_EQUALS("unknown", TestGetLocalizedRoleName(accessible->GetAddress()), TEST_LOCATION);
+
+  // Invalid role
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, 9999);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::UNKNOWN), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  // V2 Roles
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::ADJUSTABLE);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::SLIDER), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::ALERT);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::ALERT), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::BUTTON);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::PUSH_BUTTON), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::CHECK_BOX);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::CHECK_BOX), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::COMBO_BOX);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::COMBO_BOX), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::CONTAINER);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::FILLER), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::DIALOG);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::DIALOG), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::ENTRY);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::ENTRY), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::HEADER);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::HEADER), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::IMAGE);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::IMAGE), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::LINK);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::LINK), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::LIST);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::LIST), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::LIST_ITEM);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::LIST_ITEM), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::MENU);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::MENU), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::MENU_BAR);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::MENU_BAR), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
 
-  auto q = Dali::Accessibility::Accessible::Get( control );
-  DALI_TEST_EQUALS( role_unknown , q->GetRole(), TEST_LOCATION);
-  DALI_TEST_EQUALS( "unknown" , q->GetRoleName(), TEST_LOCATION );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::MENU_ITEM);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::MENU_ITEM), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( true );
-  DALI_TEST_CHECK( q );
-  DALI_TEST_EQUALS( static_cast< uint32_t >( role_unknown ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
-  DALI_TEST_EQUALS( "unknown" , TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
-  DALI_TEST_EQUALS( "unknown" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::NONE);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::UNKNOWN), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
 
-  control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, role_pushbutton );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::PASSWORD_TEXT);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::PASSWORD_TEXT), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
 
-  DALI_TEST_EQUALS( static_cast< uint32_t >( role_pushbutton ), TestGetRole( q->GetAddress() ), TEST_LOCATION );
-  DALI_TEST_EQUALS( "push button" ,TestGetRoleName( q->GetAddress() ), TEST_LOCATION );
-  DALI_TEST_EQUALS( "push button" , TestGetLocalizedRoleName( q->GetAddress() ), TEST_LOCATION );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::POPUP_MENU);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::POPUP_MENU), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::PROGRESS_BAR);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::PROGRESS_BAR), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
 
-  DALI_TEST_EQUALS( role_pushbutton , q->GetRole(), TEST_LOCATION);
-  DALI_TEST_EQUALS( "push button" , q->GetRoleName(), TEST_LOCATION );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::RADIO_BUTTON);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::RADIO_BUTTON), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::SCROLL_BAR);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::SCROLL_BAR), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::SPIN_BUTTON);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::SPIN_BUTTON), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::TAB);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::PAGE_TAB), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::TAB_LIST);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::PAGE_TAB_LIST), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::TEXT);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::TEXT), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::TOGGLE_BUTTON);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::TOGGLE_BUTTON), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::TOOL_BAR);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(Dali::Accessibility::Role::TOOL_BAR), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+
+  // Directly sets ATSPI role  (V1)
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::PUSH_BUTTON);
+  DALI_TEST_EQUALS(static_cast<uint32_t>(role_pushbutton), TestGetRole(accessible->GetAddress()), TEST_LOCATION);
+  DALI_TEST_EQUALS("push button", TestGetRoleName(accessible->GetAddress()), TEST_LOCATION);
+  DALI_TEST_EQUALS("push button", TestGetLocalizedRoleName(accessible->GetAddress()), TEST_LOCATION);
+
+  Dali::Accessibility::TestEnableSC(false);
+
+  DALI_TEST_EQUALS(role_pushbutton, accessible->GetRole(), TEST_LOCATION);
+  DALI_TEST_EQUALS("push button", accessible->GetRoleName(), TEST_LOCATION);
 
   END_TEST;
 }
@@ -167,32 +349,33 @@ int UtcDaliControlAccessibilityRoleToggleButton(void)
   ToolkitTestApplication application;
 
   auto control = Dali::Toolkit::ToggleButton::New();
-  auto button = Dali::Accessibility::Role::TOGGLE_BUTTON;
+  auto button  = Dali::Accessibility::Role::TOGGLE_BUTTON;
 
   control.SetProperty(Toolkit::ToggleButton::Property::TOOLTIPS,
-          Property::Array{"option1", "option2"});
+                      Property::Array{"option1", "option2"});
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, button );
-  auto q = Dali::Accessibility::Accessible::Get( control );
+  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_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(true, (bool)states[Dali::Accessibility::State::VISIBLE], TEST_LOCATION);
 
-  DALI_TEST_EQUALS( "option1", q->GetDescription(), 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_TEST_CHECK(i);
+  i->GrabHighlight();
 
-  Dali::Accessibility::TestEnableSC( false );
+  control.SetProperty(Toolkit::Button::Property::LABEL, "ToggleButton2");
+  DALI_TEST_EQUALS("ToggleButton2", TestGetName(q->GetAddress()), TEST_LOCATION);
+
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -202,23 +385,23 @@ int UtcDaliControlAccessibilityButtonLabel(void)
   ToolkitTestApplication application;
 
   auto control = Dali::Toolkit::PushButton::New();
-  auto button = Dali::Accessibility::Role::PUSH_BUTTON;
+  auto button  = Dali::Accessibility::Role::PUSH_BUTTON;
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  control.SetProperty( DevelControl::Property::ACCESSIBILITY_ROLE, button );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, button);
 
-  auto q = Dali::Accessibility::Accessible::Get( control );
+  auto q = Dali::Accessibility::Accessible::Get(control);
   auto i = dynamic_cast<Dali::Accessibility::Component*>(q);
 
-  if (i)
-    i->GrabHighlight();
+  DALI_TEST_CHECK(i);
+  i->GrabHighlight();
 
-  control.SetProperty( Toolkit::Button::Property::LABEL, "Button2" );
+  control.SetProperty(Toolkit::Button::Property::LABEL, "Button2");
 
-  DALI_TEST_EQUALS( "Button2" , TestGetName( q->GetAddress() ), TEST_LOCATION );
+  DALI_TEST_EQUALS("Button2", TestGetName(q->GetAddress()), TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -228,15 +411,158 @@ int UtcDaliControlAccessibilityState(void)
   ToolkitTestApplication application;
 
   auto control = Control::New();
-  auto q = Dali::Accessibility::Accessible::Get( control );
+  control.SetProperty(Actor::Property::SIZE, Vector2(100, 100));
+  control.SetProperty(Actor::Property::POSITION, Vector3(10, 10, 100));
+
+  application.GetScene().Add(control);
+  auto accessible = Dali::Accessibility::Accessible::Get(control);
+
+  Dali::Accessibility::TestEnableSC(true);
+  DALI_TEST_CHECK(!Dali::Accessibility::TestStateChangedCalled());
+
+  // Test setting AccessibilityState property updates at-spi states
+  DevelControl::AccessibilityStates inputStates;
+  {
+    inputStates[DevelControl::AccessibilityState::ENABLED] = false;
+    inputStates[DevelControl::AccessibilityState::CHECKED] = true;
+    inputStates[DevelControl::AccessibilityState::BUSY]    = true;
+
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_STATES, static_cast<int32_t>(inputStates.GetRawData32()));
+
+    DALI_TEST_CHECK(!Dali::Accessibility::TestStateChangedCalled());
+
+    auto states = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::ENABLED]);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::SELECTED]);
+    DALI_TEST_CHECK(states[Dali::Accessibility::State::CHECKED]);
+    DALI_TEST_CHECK(states[Dali::Accessibility::State::BUSY]);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::EXPANDED]);
+  }
+
+  // state-changed:checked event is NOT emitted if the object is not highlighted
+  {
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::CHECK_BOX);
+
+    inputStates[DevelControl::AccessibilityState::CHECKED] = false; // CHECKED: true -> false
+
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_STATES, static_cast<int32_t>(inputStates.GetRawData32()));
 
-  Dali::Accessibility::TestEnableSC( true );
+    DALI_TEST_CHECK(!Dali::Accessibility::TestStateChangedCalled());
 
-  auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
-  auto states = DevelControl::GetAccessibilityStates(control);
-  DALI_TEST_CHECK( states_by_bridge == states );
+    auto states = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::ENABLED]);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::SELECTED]);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::CHECKED]);
+    DALI_TEST_CHECK(states[Dali::Accessibility::State::BUSY]);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::EXPANDED]);
+  }
+
+  auto component = dynamic_cast<Dali::Accessibility::Component*>(accessible);
+  component->GrabHighlight();
+
+  // state-changed:checked event is emitted if the object is highlighted and checkable
+  const std::array<DevelControl::AccessibilityRole, 3> checkableRoles{DevelControl::AccessibilityRole::CHECK_BOX, DevelControl::AccessibilityRole::RADIO_BUTTON, DevelControl::AccessibilityRole::TOGGLE_BUTTON};
+  for(auto role : checkableRoles)
+  {
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, role);
+
+    // CHECKED: false -> true
+    inputStates[DevelControl::AccessibilityState::CHECKED] = true;
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_STATES, static_cast<int32_t>(inputStates.GetRawData32()));
+
+    DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedCalled());
+    DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedResult("checked", 1));
+
+    auto states = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(states[Dali::Accessibility::State::CHECKED]);
+
+    Dali::Accessibility::TestResetStateChangedResult();
+    flushCoalescableMessage(application);
+
+    // CHECKED: true -> false
+    inputStates[DevelControl::AccessibilityState::CHECKED] = false;
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_STATES, static_cast<int32_t>(inputStates.GetRawData32()));
+
+    DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedCalled());
+    DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedResult("checked", 0));
+
+    states = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::CHECKED]);
+
+    Dali::Accessibility::TestResetStateChangedResult();
+    flushCoalescableMessage(application);
+  }
+
+  // state-changed:selected event is emitted if the object is highlighted and selectable
+  const std::array<DevelControl::AccessibilityRole, 3> selectableRoles{DevelControl::AccessibilityRole::BUTTON, DevelControl::AccessibilityRole::LIST_ITEM, DevelControl::AccessibilityRole::MENU_ITEM};
+  for(auto role : selectableRoles)
+  {
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, role);
 
-  Dali::Accessibility::TestEnableSC( false );
+    // SELECTED: false -> true
+    inputStates[DevelControl::AccessibilityState::SELECTED] = true;
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_STATES, static_cast<int32_t>(inputStates.GetRawData32()));
+
+    DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedCalled());
+    DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedResult("selected", 1));
+
+    auto states = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(states[Dali::Accessibility::State::SELECTED]);
+
+    Dali::Accessibility::TestResetStateChangedResult();
+    flushCoalescableMessage(application);
+
+    // SELECTED: true -> false
+    inputStates[DevelControl::AccessibilityState::SELECTED] = false;
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_STATES, static_cast<int32_t>(inputStates.GetRawData32()));
+
+    DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedCalled());
+    DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedResult("selected", 0));
+
+    states = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::SELECTED]);
+    Dali::Accessibility::TestResetStateChangedResult();
+    flushCoalescableMessage(application);
+  }
+
+  // state-changed event is NOT emitted if object is not checkable or selectable
+  {
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::CONTAINER);
+
+    inputStates[DevelControl::AccessibilityState::CHECKED]  = true; // CHECKED: false -> true
+    inputStates[DevelControl::AccessibilityState::SELECTED] = true; // SELECTED: false -> true
+
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_STATES, static_cast<int32_t>(inputStates.GetRawData32()));
+
+    DALI_TEST_CHECK(!Dali::Accessibility::TestStateChangedCalled());
+
+    auto states = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(states[Dali::Accessibility::State::SELECTED]);
+    DALI_TEST_CHECK(states[Dali::Accessibility::State::CHECKED]);
+  }
+
+  // state-changed event is NOT emitted if object is v1 role
+  {
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::CHECK_BOX);
+
+    inputStates[DevelControl::AccessibilityState::CHECKED] = false; // CHECKED: true -> false
+
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_STATES, static_cast<int32_t>(inputStates.GetRawData32()));
+
+    DALI_TEST_CHECK(!Dali::Accessibility::TestStateChangedCalled());
+
+    auto states = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(!states[Dali::Accessibility::State::CHECKED]);
+  }
+
+  // Test bridge behavior
+  {
+    auto states_by_bridge = Dali::Accessibility::States{TestGetStates(accessible->GetAddress())};
+    auto states           = DevelControl::GetAccessibilityStates(control);
+    DALI_TEST_CHECK(states_by_bridge == states);
+  }
+
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -245,15 +571,29 @@ int UtcDaliControlAccessibilityModal(void)
 {
   ToolkitTestApplication application;
 
-  auto control = Dali::Toolkit::Popup::New();
-  auto q = Dali::Accessibility::Accessible::Get( control );
+  Dali::Accessibility::TestEnableSC(true);
 
-  Dali::Accessibility::TestEnableSC( true );
+  // Modal state is set by Dialog role
+  {
+    auto control    = Dali::Toolkit::Popup::New();
+    auto accessible = Dali::Accessibility::Accessible::Get(control);
 
-  auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
-  DALI_TEST_CHECK( states_by_bridge[Dali::Accessibility::State::MODAL] );
+    auto states_by_bridge = Dali::Accessibility::States{TestGetStates(accessible->GetAddress())};
+    DALI_TEST_CHECK(states_by_bridge[Dali::Accessibility::State::MODAL]);
+  }
+
+  // Modal state is set by isModal property
+  {
+    auto control = Control::New();
+    control.SetProperty(DevelControl::Property::ACCESSIBILITY_IS_MODAL, true);
 
-  Dali::Accessibility::TestEnableSC( false );
+    auto accessible = Dali::Accessibility::Accessible::Get(control);
+
+    auto states_by_bridge = Dali::Accessibility::States{TestGetStates(accessible->GetAddress())};
+    DALI_TEST_CHECK(states_by_bridge[Dali::Accessibility::State::MODAL]);
+  }
+
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -261,38 +601,79 @@ int UtcDaliControlAccessibilityModal(void)
 int UtcDaliControlAccessibilityHighlightable(void)
 {
   ToolkitTestApplication application;
-  auto control = Control::New();
+  auto                   control = Control::New();
+
+  auto highlightable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE);
+  DALI_TEST_EQUALS(highlightable, false, TEST_LOCATION);
+
+  // negative testcase - trying to set unconvertible value
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, "deadbeef");
+  highlightable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE);
+  DALI_TEST_EQUALS(highlightable, false, 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]);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+  DALI_TEST_EQUALS(Property::BOOLEAN, control.GetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).GetType(), TEST_LOCATION);
+  DALI_TEST_EQUALS(true, control.GetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).Get<bool>(), TEST_LOCATION);
+
+  states_by_bridge = Dali::Accessibility::States{TestGetStates(q->GetAddress())};
+  DALI_TEST_CHECK(states_by_bridge[Dali::Accessibility::State::HIGHLIGHTABLE]);
+
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false);
+  DALI_TEST_EQUALS(Property::BOOLEAN, control.GetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).GetType(), TEST_LOCATION);
+  DALI_TEST_EQUALS(false, control.GetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).Get<bool>(), TEST_LOCATION);
+
+  states_by_bridge = Dali::Accessibility::States{TestGetStates(q->GetAddress())};
+  DALI_TEST_CHECK(!states_by_bridge[Dali::Accessibility::State::HIGHLIGHTABLE]);
 
-  auto noneset = control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE );
-  DALI_TEST_EQUALS( Property::NONE, noneset.GetType(), TEST_LOCATION );
+  // Highlightable state is set if V2 role is set and is not Role::None
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::CONTAINER);
+  states_by_bridge = Dali::Accessibility::States{TestGetStates(q->GetAddress())};
+  DALI_TEST_CHECK(states_by_bridge[Dali::Accessibility::State::HIGHLIGHTABLE]);
 
-   // 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 );
+  Dali::Accessibility::TestEnableSC(false);
+
+  END_TEST;
+}
 
-  auto q = Dali::Accessibility::Accessible::Get( control );
+int UtcDaliControlAccessibilityScrollable(void)
+{
+  ToolkitTestApplication application;
+  auto                   control = Control::New();
 
-  Dali::Accessibility::TestEnableSC( true );
+  auto scrollable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_SCROLLABLE);
+  DALI_TEST_EQUALS(scrollable, false, TEST_LOCATION);
 
-  auto states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
-  DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
+  // negative testcase - trying to set unconvertible value
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_SCROLLABLE, "deadbeef");
+  scrollable = control.GetProperty<bool>(DevelControl::Property::ACCESSIBILITY_SCROLLABLE);
+  DALI_TEST_EQUALS(scrollable, false, TEST_LOCATION);
 
-  control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true );
-  DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
-  DALI_TEST_EQUALS( true, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).Get< bool >(), TEST_LOCATION );
+  auto accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(control));
+
+  Dali::Accessibility::TestEnableSC(true);
 
-  states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
-  DALI_TEST_CHECK( states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
+  DALI_TEST_CHECK(!accessible->IsScrollable());
 
-  control.SetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false );
-  DALI_TEST_EQUALS( Property::BOOLEAN, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).GetType(), TEST_LOCATION );
-  DALI_TEST_EQUALS( false, control.GetProperty( DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE ).Get< bool >(), TEST_LOCATION );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_SCROLLABLE, true);
+  DALI_TEST_EQUALS(Property::BOOLEAN, control.GetProperty(DevelControl::Property::ACCESSIBILITY_SCROLLABLE).GetType(), TEST_LOCATION);
+  DALI_TEST_EQUALS(true, control.GetProperty(DevelControl::Property::ACCESSIBILITY_SCROLLABLE).Get<bool>(), TEST_LOCATION);
 
-  states_by_bridge = Dali::Accessibility::States { TestGetStates( q->GetAddress() )};
-  DALI_TEST_CHECK( !states_by_bridge[ Dali::Accessibility::State::HIGHLIGHTABLE ] );
+  DALI_TEST_CHECK(accessible->IsScrollable());
 
-  Dali::Accessibility::TestEnableSC( false );
+  control.SetProperty(DevelControl::Property::ACCESSIBILITY_SCROLLABLE, false);
+  DALI_TEST_EQUALS(Property::BOOLEAN, control.GetProperty(DevelControl::Property::ACCESSIBILITY_SCROLLABLE).GetType(), TEST_LOCATION);
+  DALI_TEST_EQUALS(false, control.GetProperty(DevelControl::Property::ACCESSIBILITY_SCROLLABLE).Get<bool>(), TEST_LOCATION);
+
+  DALI_TEST_CHECK(!accessible->IsScrollable());
+
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -305,82 +686,81 @@ int UtcDaliControlAccessibilityHighlightBridgeUp(void)
   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 );
+  controla.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+  controlb.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
 
-  auto accessible_a = Dali::Accessibility::Accessible::Get( controla );
-  auto accessible_b = Dali::Accessibility::Accessible::Get( controlb );
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto a = dynamic_cast<Dali::Accessibility::Component*>( accessible_a );
-  auto b = dynamic_cast<Dali::Accessibility::Component*>( accessible_b );
+  auto accessible_a = Dali::Accessibility::Accessible::Get(controla);
+  auto accessible_b = Dali::Accessibility::Accessible::Get(controlb);
 
-  auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
-  auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
+  auto a = dynamic_cast<Dali::Accessibility::Component*>(accessible_a);
+  auto b = dynamic_cast<Dali::Accessibility::Component*>(accessible_b);
 
-  DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
-  DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
+  auto states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
+  auto states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
 
-  DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controla), TEST_LOCATION );
+  DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
+  DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
+  DALI_TEST_EQUALS(true, DevelControl::GrabAccessibilityHighlight(controla), TEST_LOCATION);
 
-  DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
-  DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
 
-  DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
-  DALI_TEST_EQUALS( true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION );
+  DALI_TEST_CHECK(states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
+  DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
+  DALI_TEST_EQUALS(true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION);
+  DALI_TEST_EQUALS(true, DevelControl::GrabAccessibilityHighlight(controlb), TEST_LOCATION);
 
-  DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
-  DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
 
-  DALI_TEST_EQUALS( false, DevelControl::ClearAccessibilityHighlight(controla), TEST_LOCATION );
+  DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
+  DALI_TEST_CHECK(states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
+  DALI_TEST_EQUALS(false, DevelControl::ClearAccessibilityHighlight(controla), TEST_LOCATION);
 
-  DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
-  DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
 
-  DALI_TEST_EQUALS( true, DevelControl::ClearAccessibilityHighlight(controlb), TEST_LOCATION );
+  DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
+  DALI_TEST_CHECK(states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
+  DALI_TEST_EQUALS(true, DevelControl::ClearAccessibilityHighlight(controlb), TEST_LOCATION);
 
-  DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
-  DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
 
-  DALI_TEST_CHECK( TestGrabHighlight( a -> GetAddress() ) );
+  DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
+  DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
+  DALI_TEST_CHECK(TestGrabHighlight(a->GetAddress()));
 
-  DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
-  DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
 
-  DALI_TEST_CHECK( TestGrabHighlight( b -> GetAddress() ) );
+  DALI_TEST_CHECK(states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
+  DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
+  DALI_TEST_CHECK(TestGrabHighlight(b->GetAddress()));
 
-  DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
-  DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
 
-  DALI_TEST_CHECK( TestClearHighlight( b -> GetAddress() ) );
+  DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
+  DALI_TEST_CHECK(states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a->GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b->GetAddress() )};
+  DALI_TEST_CHECK(TestClearHighlight(b->GetAddress()));
 
-  DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::HIGHLIGHTED ] );
-  DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::HIGHLIGHTED ] );
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b->GetAddress())};
 
+  DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::HIGHLIGHTED]);
+  DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::HIGHLIGHTED]);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -388,68 +768,71 @@ int UtcDaliControlAccessibilityHighlightBridgeUp(void)
 int utcDaliAccessibilityControlAttributes(void)
 {
   ToolkitTestApplication application;
-  auto check_box_button = Toolkit::Control::New();
+  auto                   check_box_button = Toolkit::Control::New();
 
   std::string value;
 
-
-  auto attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
+  auto attributes     = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
   auto attributes_map = attributes.GetMap();
 
-  auto position = attributes_map->Find( "access_key1" );
-  DALI_TEST_CHECK( !position );
+  auto position = attributes_map->Find("access_key1");
+  DALI_TEST_CHECK(!position);
 
-  DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key1", "access_value1" );
-  attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
+  DevelControl::AppendAccessibilityAttribute(check_box_button, "access_key1", "access_value1");
+  attributes     = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
   attributes_map = attributes.GetMap();
 
-  DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
+  DALI_TEST_EQUALS((attributes_map->Find("access_key1"))->Get<std::string>(), "access_value1", TEST_LOCATION);
 
-  DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_a" );
-  attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
+  DevelControl::AppendAccessibilityAttribute(check_box_button, "access_key2", "access_value2_a");
+  attributes     = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
   attributes_map = attributes.GetMap();
 
-  DALI_TEST_EQUALS( (attributes_map->Find( "access_key1" ))->Get<std::string>(), "access_value1", TEST_LOCATION );
-  DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_a", TEST_LOCATION );
+  DALI_TEST_EQUALS((attributes_map->Find("access_key1"))->Get<std::string>(), "access_value1", TEST_LOCATION);
+  DALI_TEST_EQUALS((attributes_map->Find("access_key2"))->Get<std::string>(), "access_value2_a", TEST_LOCATION);
 
-  DevelControl::AppendAccessibilityAttribute( check_box_button, "access_key2", "access_value2_b" );
-  attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
+  DevelControl::AppendAccessibilityAttribute(check_box_button, "access_key2", "access_value2_b");
+  attributes     = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
   attributes_map = attributes.GetMap();
 
-  DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->Get<std::string>(), "access_value2_b", TEST_LOCATION );
+  DALI_TEST_EQUALS((attributes_map->Find("access_key2"))->Get<std::string>(), "access_value2_b", TEST_LOCATION);
 
-  DevelControl::RemoveAccessibilityAttribute( check_box_button, "access_key2" );
-  attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
+  DevelControl::RemoveAccessibilityAttribute(check_box_button, "access_key2");
+  attributes     = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
   attributes_map = attributes.GetMap();
 
   // In case when we are removing one of attributes the property is setting for NONE type.
-  DALI_TEST_EQUALS( (attributes_map->Find( "access_key2" ))->GetType(), Property::NONE, TEST_LOCATION );
+  DALI_TEST_EQUALS((attributes_map->Find("access_key2"))->GetType(), Property::NONE, TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
+
+  auto ptr                  = Dali::Accessibility::Accessible::Get(check_box_button);
+  auto attribute_map_bridge = TestGetAttributes(ptr->GetAddress());
+  auto counter              = 0u;
 
-  auto ptr = Dali::Accessibility::Accessible::Get( check_box_button );
-  auto attribute_map_bridge = TestGetAttributes( ptr->GetAddress() );
-  auto counter = 0u;
-  for (auto i = 0u; i<attributes_map->Count();++i)
-    if((attributes_map->GetValue(i)).GetType() != Property::NONE )
+  // Refresh the attributes since ControlAccessible::GetAttributes() might have added something
+  attributes     = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
+  attributes_map = attributes.GetMap();
+  for(auto i = 0u; i < attributes_map->Count(); ++i)
+    if((attributes_map->GetValue(i)).GetType() != Property::NONE)
       ++counter;
 
-  DALI_TEST_EQUALS( counter, attribute_map_bridge.size(), TEST_LOCATION );
+  DALI_TEST_EQUALS(counter, attribute_map_bridge.size(), TEST_LOCATION);
 
-  for (auto it : attribute_map_bridge)
-    DALI_TEST_EQUALS( (attributes_map->Find( it.first ))->Get<std::string>(), it.second, TEST_LOCATION );
+  for(auto it : attribute_map_bridge)
+    DALI_TEST_EQUALS((attributes_map->Find(it.first))->Get<std::string>(), it.second, TEST_LOCATION);
 
   DevelControl::ClearAccessibilityAttributes(check_box_button);
-  attributes = check_box_button.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
+  attributes     = check_box_button.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
   attributes_map = attributes.GetMap();
 
-  position = attributes_map->Find( "access_key1" );
-  DALI_TEST_CHECK( !position );
+  position = attributes_map->Find("access_key1");
+  DALI_TEST_CHECK(!position);
 
-  position = attributes_map->Find( "access_key2" );
-  DALI_TEST_CHECK( !position );
+  position = attributes_map->Find("access_key2");
+  DALI_TEST_CHECK(!position);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -457,39 +840,39 @@ int utcDaliAccessibilityControlAttributes(void)
 int UtcDaliControlReadingInfoType(void)
 {
   ToolkitTestApplication application;
-  auto control = Control::New();
+  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 ) ]);
+  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;
+  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 ) ]);
+  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;
-  reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE] = true;
+  reading_info_type[Dali::Accessibility::ReadingInfoType::STATE]       = true;
+  reading_info_type[Dali::Accessibility::ReadingInfoType::NAME]        = true;
+  reading_info_type[Dali::Accessibility::ReadingInfoType::ROLE]        = true;
 
   DevelControl::SetAccessibilityReadingInfoType(control, reading_info_type);
 
-  auto q = control.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES );
+  auto q = control.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
   auto z = q.GetMap();
 
-  DALI_TEST_EQUALS( (z->Find( "reading_info_type" ))->Get<std::string>(), "name|role|description|state", TEST_LOCATION );
+  DALI_TEST_EQUALS((z->Find("reading_info_type"))->Get<std::string>(), "name|role|description|state", TEST_LOCATION);
   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 ) ]);
+  for(auto i = 0u; i < 4; ++i)
+    DALI_TEST_CHECK(reading_info_type[static_cast<Dali::Accessibility::ReadingInfoType>(i)]);
 
   END_TEST;
 }
@@ -497,30 +880,30 @@ int UtcDaliControlReadingInfoType(void)
 int UtcDaliControlDoGesture(void)
 {
   ToolkitTestApplication application;
-  auto control = Control::New();
-  Dali::Accessibility::TestEnableSC( true );
+  auto                   control = Control::New();
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto accessible = Dali::Accessibility::Accessible::Get( control );
-  auto gesture_one = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
-  auto gesture_two = Dali::Accessibility::GestureInfo { Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 };
+  auto accessible  = Dali::Accessibility::Accessible::Get(control);
+  auto gesture_one = Dali::Accessibility::GestureInfo{Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000};
+  auto gesture_two = Dali::Accessibility::GestureInfo{Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000};
 
-  DALI_TEST_CHECK( !accessible->DoGesture( gesture_one ) );
-  DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
+  DALI_TEST_CHECK(!accessible->DoGesture(gesture_one));
+  DALI_TEST_CHECK(!TestDoGesture(accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000));
 
-  DevelControl::AccessibilityDoGestureSignal(control).Connect( [] ( std::pair< Dali::Accessibility::GestureInfo, bool > &gesture ) {
-  if ( gesture.first.type == Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT )
-    gesture.second = true;
-  else
-    gesture.second = false;
-  } );
+  DevelControl::AccessibilityDoGestureSignal(control).Connect([](std::pair<Dali::Accessibility::GestureInfo, bool>& gesture) {
+    if(gesture.first.type == Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT)
+      gesture.second = true;
+    else
+      gesture.second = false;
+  });
 
-  DALI_TEST_CHECK( accessible->DoGesture( gesture_one ) );
-  DALI_TEST_CHECK( TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
+  DALI_TEST_CHECK(accessible->DoGesture(gesture_one));
+  DALI_TEST_CHECK(TestDoGesture(accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_LEFT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000));
 
-  DALI_TEST_CHECK( !accessible->DoGesture( gesture_two ) );
-  DALI_TEST_CHECK( !TestDoGesture( accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000 ) );
+  DALI_TEST_CHECK(!accessible->DoGesture(gesture_two));
+  DALI_TEST_CHECK(!TestDoGesture(accessible->GetAddress(), Dali::Accessibility::Gesture::ONE_FINGER_FLICK_RIGHT, 600, 100, 500, 500, Dali::Accessibility::GestureState::BEGIN, 1000));
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -528,46 +911,50 @@ int UtcDaliControlDoGesture(void)
 int UtcDaliAccessibilityRelation(void)
 {
   ToolkitTestApplication application;
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto rel = Accessibility::RelationType::FLOWS_TO;
-  auto number = static_cast< size_t >( rel );
-  auto control = Control::New();
+  auto rel          = Accessibility::RelationType::FLOWS_TO;
+  auto control      = Control::New();
   auto destination1 = Control::New();
   auto destination2 = Control::New();
 
-  DevelControl::AppendAccessibilityRelation( control, destination1, rel );
+  DevelControl::AppendAccessibilityRelation(control, destination1, rel);
   auto relations = DevelControl::GetAccessibilityRelations(control);
-  DALI_TEST_CHECK( relations[ number ].size() == 1 );
+  DALI_TEST_EQUALS(relations.size(), 1u, TEST_LOCATION);
+  DALI_TEST_EQUALS(relations[0].mRelationType, rel, TEST_LOCATION);
+  DALI_TEST_EQUALS(relations[0].mTargets.size(), 1u, TEST_LOCATION);
 
-  DevelControl::AppendAccessibilityRelation( control, destination2, rel );
+  DevelControl::AppendAccessibilityRelation(control, destination2, rel);
   relations = DevelControl::GetAccessibilityRelations(control);
-  DALI_TEST_CHECK( relations[ number ].size() == 2 );
+  DALI_TEST_EQUALS(relations.size(), 1u, TEST_LOCATION);
+  DALI_TEST_EQUALS(relations[0].mRelationType, rel, TEST_LOCATION);
+  DALI_TEST_EQUALS(relations[0].mTargets.size(), 2u, TEST_LOCATION);
 
-  auto accessible = Dali::Accessibility::Accessible::Get( control );
-  auto accessible_destination1 = Dali::Accessibility::Accessible::Get( destination1 );
-  auto accessible_destination2 = Dali::Accessibility::Accessible::Get( destination2 );
-  auto relationset = accessible->GetRelationSet();
+  auto accessible              = Dali::Accessibility::Accessible::Get(control);
+  auto accessible_destination1 = Dali::Accessibility::Accessible::Get(destination1);
+  auto accessible_destination2 = Dali::Accessibility::Accessible::Get(destination2);
+  auto relationset             = accessible->GetRelationSet();
 
-  DALI_TEST_CHECK( relationset[0].relationType == rel );
-  DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination1->GetAddress() || relationset[0].targets[1] == accessible_destination1->GetAddress() );
-  DALI_TEST_CHECK( relationset[0].targets[0] == accessible_destination2->GetAddress() || relationset[0].targets[1] == accessible_destination2->GetAddress() );
+  DALI_TEST_CHECK(relationset[0].mRelationType == rel);
+  DALI_TEST_CHECK(relationset[0].mTargets[0] == accessible_destination1 || relationset[0].mTargets[1] == accessible_destination1);
+  DALI_TEST_CHECK(relationset[0].mTargets[0] == accessible_destination2 || relationset[0].mTargets[1] == accessible_destination2);
 
-  auto relationset_bridge = TestGetRelationSet( accessible -> GetAddress() );
-  DALI_TEST_CHECK( static_cast< uint32_t >( relationset[0].relationType ) == std::get<0>( relationset_bridge[0] ) );
+  auto relationset_bridge = TestGetRelationSet(accessible->GetAddress());
+  DALI_TEST_CHECK(static_cast<uint32_t>(relationset[0].mRelationType) == std::get<0>(relationset_bridge[0]));
 
-  DALI_TEST_CHECK( relationset[0].targets[0] == std::get<1>( relationset_bridge[0] )[0] || relationset[0].targets[1] == std::get<1>( relationset_bridge[0] )[0] );
-  DALI_TEST_CHECK( relationset[0].targets[0] == std::get<1>( relationset_bridge[0] )[1] || relationset[0].targets[1] == std::get<1>( relationset_bridge[0] )[1] );
+  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]);
+  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]);
 
-  DevelControl::RemoveAccessibilityRelation(control,destination2,rel);
+  DevelControl::RemoveAccessibilityRelation(control, destination2, rel);
   relations = DevelControl::GetAccessibilityRelations(control);
-  DALI_TEST_CHECK( relations[ number ].size() == 1 );
+  DALI_TEST_EQUALS(relations.size(), 1u, TEST_LOCATION);
+  DALI_TEST_EQUALS(relations[0].mTargets.size(), 1u, TEST_LOCATION);
 
   DevelControl::ClearAccessibilityRelations(control);
   relations = DevelControl::GetAccessibilityRelations(control);
-  DALI_TEST_CHECK( relations[ number ].size() == 0 );
+  DALI_TEST_EQUALS(relations.size(), 0u, TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -575,55 +962,61 @@ int UtcDaliAccessibilityRelation(void)
 int UtcDaliAccessibilityParentChildren(void)
 {
   ToolkitTestApplication application;
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto parent = Control::New();
+  auto parent  = Control::New();
   auto child_1 = Control::New();
   auto child_2 = Control::New();
 
-  auto parent_accessible = Dali::Accessibility::Accessible::Get( parent );
-  auto child_1_accessible = Dali::Accessibility::Accessible::Get( child_1 );
-  auto child_2_accessible = Dali::Accessibility::Accessible::Get( child_2 );
+  auto parent_accessible  = Dali::Accessibility::Accessible::Get(parent);
+  auto child_1_accessible = Dali::Accessibility::Accessible::Get(child_1);
+  auto child_2_accessible = Dali::Accessibility::Accessible::Get(child_2);
 
-  auto children = TestGetChildren( parent_accessible -> GetAddress() );
-  DALI_TEST_EQUALS( children.size(), 0, TEST_LOCATION );
+  auto children = TestGetChildren(parent_accessible->GetAddress());
+  DALI_TEST_EQUALS(children.size(), 0, TEST_LOCATION);
 
   try
   {
-    TestGetIndexInParent( child_1_accessible -> GetAddress() );
+    TestGetIndexInParent(child_1_accessible->GetAddress());
     DALI_ABORT("Object has parent, test abort");
   }
-  catch(TestDBusWrapper::error &){}
+  catch(TestDBusWrapper::error&)
+  {
+  }
 
   try
   {
-    TestGetChildAtIndex( parent_accessible -> GetAddress(), -1 );
+    TestGetChildAtIndex(parent_accessible->GetAddress(), -1);
     DALI_ABORT("Positive index, test abort");
   }
-  catch(TestDBusWrapper::error &){}
+  catch(TestDBusWrapper::error&)
+  {
+  }
 
-  DALI_TEST_EQUALS( parent_accessible -> GetChildCount(), 0, TEST_LOCATION );
+  DALI_TEST_EQUALS(parent_accessible->GetChildCount(), 0, TEST_LOCATION);
 
   try
   {
-    child_1_accessible -> GetIndexInParent();
+    child_1_accessible->GetIndexInParent();
     DALI_ABORT("Object has parent, test abort");
   }
-  catch (Dali::DaliException &){}
+  catch(const std::domain_error&)
+  {
+  }
 
   parent.Add(child_1);
   parent.Add(child_2);
 
-  children = TestGetChildren( parent_accessible -> GetAddress() );
-  DALI_TEST_EQUALS( children.size(), 2, TEST_LOCATION );
+  children = TestGetChildren(parent_accessible->GetAddress());
+  DALI_TEST_EQUALS(children.size(), 2, TEST_LOCATION);
 
-  DALI_TEST_EQUALS( parent_accessible -> GetAddress(), TestGetParent( child_1_accessible -> GetAddress() ), TEST_LOCATION );
-  DALI_TEST_EQUALS( child_2_accessible -> GetAddress(), TestGetChildAtIndex( parent_accessible -> GetAddress(), TestGetIndexInParent( child_2_accessible -> GetAddress() ) ), TEST_LOCATION );
+  DALI_TEST_EQUALS(parent_accessible->GetAddress(), TestGetParent(child_1_accessible->GetAddress()), TEST_LOCATION);
+  DALI_TEST_EQUALS(child_2_accessible->GetAddress(), TestGetChildAtIndex(parent_accessible->GetAddress(), TestGetIndexInParent(child_2_accessible->GetAddress())), TEST_LOCATION);
 
-  DALI_TEST_EQUALS( parent_accessible,  child_1_accessible -> GetParent(), TEST_LOCATION );
-  DALI_TEST_EQUALS( child_2_accessible, parent_accessible -> GetChildAtIndex( child_2_accessible -> GetIndexInParent() ) , TEST_LOCATION );
+  DALI_TEST_EQUALS(parent_accessible, child_1_accessible->GetParent(), TEST_LOCATION);
+  DALI_TEST_EQUALS(child_2_accessible, parent_accessible->GetChildAtIndex(child_2_accessible->GetIndexInParent()), TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -632,16 +1025,16 @@ int UtcDaliAccessibilityGetLayer(void)
 {
   ToolkitTestApplication application;
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto control = Control::New();
-  auto accessible_obj = Dali::Accessibility::Accessible::Get( control );
+  auto control              = Control::New();
+  auto accessible_obj       = Dali::Accessibility::Accessible::Get(control);
   auto accessible_component = dynamic_cast<Dali::Accessibility::Component*>(accessible_obj);
-  DALI_TEST_CHECK( accessible_component );
-  DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, accessible_component -> GetLayer(), TEST_LOCATION );
-  DALI_TEST_EQUALS( Dali::Accessibility::ComponentLayer::WINDOW, TestGetLayer( accessible_component -> GetAddress() ), TEST_LOCATION );
+  DALI_TEST_CHECK(accessible_component);
+  DALI_TEST_EQUALS(Dali::Accessibility::ComponentLayer::WINDOW, accessible_component->GetLayer(), TEST_LOCATION);
+  DALI_TEST_EQUALS(Dali::Accessibility::ComponentLayer::WINDOW, TestGetLayer(accessible_component->GetAddress()), TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -650,97 +1043,206 @@ int UtcDaliAccessibilityGrabFocus(void)
 {
   ToolkitTestApplication application;
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
   auto controla = Control::New();
   auto controlb = Control::New();
 
-  Stage::GetCurrent().Add( controla );
-  Stage::GetCurrent().Add( controlb );
+  Stage::GetCurrent().Add(controla);
+  Stage::GetCurrent().Add(controlb);
 
   controla.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
   controlb.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
 
-  auto a = Dali::Accessibility::Accessible::Get( controla );
-  auto b = Dali::Accessibility::Accessible::Get( controlb );
+  auto a = Dali::Accessibility::Accessible::Get(controla);
+  auto b = Dali::Accessibility::Accessible::Get(controlb);
 
-  auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
-  auto b_component = dynamic_cast<Dali::Accessibility::Component*>( b );
+  auto a_component = dynamic_cast<Dali::Accessibility::Component*>(a);
+  auto b_component = dynamic_cast<Dali::Accessibility::Component*>(b);
 
-  auto states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
-  auto states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
+  auto states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a_component->GetAddress())};
+  auto states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b_component->GetAddress())};
 
-  DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
-  DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
+  DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::FOCUSED]);
+  DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::FOCUSED]);
 
-  DALI_TEST_CHECK( a_component -> GrabFocus() );
+  DALI_TEST_CHECK(a_component->GrabFocus());
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a_component->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b_component->GetAddress())};
 
-  DALI_TEST_CHECK( states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
-  DALI_TEST_CHECK( !states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
+  DALI_TEST_CHECK(states_by_bridge_a[Dali::Accessibility::State::FOCUSED]);
+  DALI_TEST_CHECK(!states_by_bridge_b[Dali::Accessibility::State::FOCUSED]);
 
-  DALI_TEST_CHECK( TestGrabFocus( b_component -> GetAddress() ) );
+  DALI_TEST_CHECK(TestGrabFocus(b_component->GetAddress()));
 
-  states_by_bridge_a = Dali::Accessibility::States { TestGetStates( a_component -> GetAddress() )};
-  states_by_bridge_b = Dali::Accessibility::States { TestGetStates( b_component -> GetAddress() )};
+  states_by_bridge_a = Dali::Accessibility::States{TestGetStates(a_component->GetAddress())};
+  states_by_bridge_b = Dali::Accessibility::States{TestGetStates(b_component->GetAddress())};
 
-  DALI_TEST_CHECK( !states_by_bridge_a[ Dali::Accessibility::State::FOCUSED ] );
-  DALI_TEST_CHECK( states_by_bridge_b[ Dali::Accessibility::State::FOCUSED ] );
+  DALI_TEST_CHECK(!states_by_bridge_a[Dali::Accessibility::State::FOCUSED]);
+  DALI_TEST_CHECK(states_by_bridge_b[Dali::Accessibility::State::FOCUSED]);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
 
-int UtcDaliAccessibilityGetExtents(void)
+int UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch(void)
 {
   ToolkitTestApplication application;
+  tet_infoline("UtcDaliAccessibilityGetExtentsScreenAndWindowPositionMatch");
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
   auto control = Control::New();
-  Stage::GetCurrent().GetRootLayer().Add( control );
+  Stage::GetCurrent().GetRootLayer().Add(control);
+
+  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 );
+  application.Render(1);
 
-  auto a = Dali::Accessibility::Accessible::Get( control );
-  auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
+  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, 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() );
-  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 );
+  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(), 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);
+  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 );
+  application.Render(1);
 
   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 );
+  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::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);
 
-  bridge_extents = TestGetExtents( a_component -> GetAddress() );
-  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 );
+  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);
 
-  Dali::Accessibility::TestEnableSC( false );
+  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);
+  DALI_TEST_EQUALS(std::get<3>(bridge_extents), 10, TEST_LOCATION);
+
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -749,16 +1251,16 @@ int UtcDaliAccessibilityGetAlpha(void)
 {
   ToolkitTestApplication application;
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto control = Control::New();
-  auto a = Dali::Accessibility::Accessible::Get( control );
-  auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
+  auto control     = Control::New();
+  auto a           = Dali::Accessibility::Accessible::Get(control);
+  auto a_component = dynamic_cast<Dali::Accessibility::Component*>(a);
 
-  DALI_TEST_EQUALS( 0.0, a_component -> GetAlpha(), TEST_LOCATION );
-  DALI_TEST_EQUALS( 0.0, TestGetAlpha( a_component -> GetAddress() ), TEST_LOCATION );
+  DALI_TEST_EQUALS(0.0, a_component->GetAlpha(), TEST_LOCATION);
+  DALI_TEST_EQUALS(0.0, TestGetAlpha(a_component->GetAddress()), TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -767,16 +1269,16 @@ int UtcDaliAccessibilityGetMdiZOrder(void)
 {
   ToolkitTestApplication application;
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto control = Control::New();
-  auto a = Dali::Accessibility::Accessible::Get( control );
-  auto a_component = dynamic_cast<Dali::Accessibility::Component*>( a );
+  auto control     = Control::New();
+  auto a           = Dali::Accessibility::Accessible::Get(control);
+  auto a_component = dynamic_cast<Dali::Accessibility::Component*>(a);
 
-  DALI_TEST_EQUALS( 0, static_cast< int >( a_component -> GetMdiZOrder() ), TEST_LOCATION );
-  DALI_TEST_EQUALS( 0, TestGetMdiZOrder( a_component -> GetAddress() ), TEST_LOCATION );
+  DALI_TEST_EQUALS(0, static_cast<int>(a_component->GetMdiZOrder()), TEST_LOCATION);
+  DALI_TEST_EQUALS(0, TestGetMdiZOrder(a_component->GetAddress()), TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -785,23 +1287,23 @@ int UtcDaliAccessibilityAction(void)
 {
   ToolkitTestApplication application;
 
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
-  auto control = Control::New( );
-  auto a = Dali::Accessibility::Accessible::Get( control );
-  auto b = dynamic_cast<Dali::Accessibility::Action*>( a );
+  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", "ReadingPaused", "ReadingResumed", "show", "hide" };
-  auto count = b -> GetActionCount();
+  std::vector<std::string> actions{"activate", "escape", "increment", "decrement", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed", "show", "hide"};
+  auto                     count = b->GetActionCount();
 
-  DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
+  DALI_TEST_EQUALS(count, 11, TEST_LOCATION);
 
-  for (auto i = 0u; i<count; ++i)
+  for(auto i = 0u; i < count; ++i)
   {
-    DALI_TEST_CHECK( Dali::Accessibility::Find( actions, b -> GetActionName( i ) ) );
-    DALI_TEST_EQUALS( b -> GetActionName( i ), b -> GetLocalizedActionName( i ), TEST_LOCATION );
-    DALI_TEST_EQUALS( b -> GetActionDescription( i ), "", TEST_LOCATION );
-    DALI_TEST_EQUALS( b -> GetActionKeyBinding( i ), "", TEST_LOCATION );
+    DALI_TEST_CHECK(Dali::Accessibility::Find(actions, b->GetActionName(i)));
+    DALI_TEST_EQUALS(b->GetActionName(i), b->GetLocalizedActionName(i), TEST_LOCATION);
+    DALI_TEST_EQUALS(b->GetActionDescription(i), "", TEST_LOCATION);
+    DALI_TEST_EQUALS(b->GetActionKeyBinding(i), "", TEST_LOCATION);
   }
 
   // Empty strings should be returned for invalid indices
@@ -810,16 +1312,16 @@ int UtcDaliAccessibilityAction(void)
   DALI_TEST_EQUALS(b->GetLocalizedActionName(count), "", TEST_LOCATION);
   DALI_TEST_EQUALS(b->GetActionKeyBinding(count), "", TEST_LOCATION);
 
-  count = TestGetActionCount(b -> GetAddress());
+  count = TestGetActionCount(b->GetAddress());
 
-  DALI_TEST_EQUALS( count, 9, TEST_LOCATION );
+  DALI_TEST_EQUALS(count, 11, TEST_LOCATION);
 
-  for (auto i = 0u; i<count; ++i)
+  for(auto i = 0u; i < count; ++i)
   {
-    DALI_TEST_CHECK( Dali::Accessibility::Find( actions, TestGetActionName( b->GetAddress(), i ) ) );
-    DALI_TEST_EQUALS( TestGetActionName( b->GetAddress(), i ), TestGetLocalizedActionName( b->GetAddress(), i ), TEST_LOCATION );
-    DALI_TEST_EQUALS( TestGetActionDescription( b->GetAddress(), i ), "", TEST_LOCATION );
-    DALI_TEST_EQUALS( TestGetActionKeyBinding( b->GetAddress(), i ), "", TEST_LOCATION );
+    DALI_TEST_CHECK(Dali::Accessibility::Find(actions, TestGetActionName(b->GetAddress(), i)));
+    DALI_TEST_EQUALS(TestGetActionName(b->GetAddress(), i), TestGetLocalizedActionName(b->GetAddress(), i), TEST_LOCATION);
+    DALI_TEST_EQUALS(TestGetActionDescription(b->GetAddress(), i), "", TEST_LOCATION);
+    DALI_TEST_EQUALS(TestGetActionKeyBinding(b->GetAddress(), i), "", TEST_LOCATION);
   }
 
   DALI_TEST_EQUALS(TestGetActionDescription(b->GetAddress(), count), "", TEST_LOCATION);
@@ -827,88 +1329,135 @@ int UtcDaliAccessibilityAction(void)
   DALI_TEST_EQUALS(TestGetLocalizedActionName(b->GetAddress(), count), "", TEST_LOCATION);
   DALI_TEST_EQUALS(TestGetActionKeyBinding(b->GetAddress(), count), "", TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
 
 int UtcDaliAccessibilityDoAction(void)
 {
+  using Dali::Accessibility::ActionType;
+
   ToolkitTestApplication application;
 
-  Dali::Accessibility::TestEnableSC( true );
-  thread_local std::vector< bool > actions_done { false, false, false, false, false, false };
+  Dali::Accessibility::TestEnableSC(true);
+  thread_local std::vector<ActionType> actions_done;
+  thread_local std::vector<bool>       legacy_actions_done(5, 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", "ReadingPaused", "ReadingResumed", "show", "hide" };
+  const auto reset_results = [&]() {
+    actions_done.clear();
+    std::fill(legacy_actions_done.begin(), legacy_actions_done.end(), false);
+  };
 
-  // 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
+  const auto check_actions_done = [&](std::vector<ActionType> actions_sent) {
+    for(ActionType action : actions_sent)
+    {
+      auto it = std::find(actions_done.begin(), actions_done.end(), action);
+      DALI_TEST_CHECK(it != actions_done.end());
+    }
+  };
+
+  const auto check_all_actions_done_and_reset = [&]() {
+    check_actions_done({ActionType::ACTIVATE, ActionType::ESCAPE, ActionType::INCREMENT, ActionType::DECREMENT});
+    DALI_TEST_CHECK(std::all_of(legacy_actions_done.begin(), legacy_actions_done.end(), [](bool x) { return x == true; }));
+    reset_results();
+  };
+
+  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", "escape", "increment", "decrement", "ReadingSkipped", "ReadingCancelled", "ReadingStopped", "ReadingPaused", "ReadingResumed"};
 
   // Negative test of calling action with not defined name
-  DALI_TEST_CHECK( !b -> DoAction( "undefined" ) );
-
-  DevelControl::AccessibilityReadingSkippedSignal(control).Connect( [] () {
-    actions_done[ 1 ] = true;
-  } );
-  DevelControl::AccessibilityReadingCancelledSignal(control).Connect( [] () {
-    actions_done[ 2 ] = true;
-  } );
-  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;
-  } );
+  DALI_TEST_CHECK(!b->DoAction("undefined"));
+
+  // Returns fail if no signal is connected
+  DALI_TEST_CHECK(!b->DoAction(actions[0])); // activate
+  DALI_TEST_CHECK(!b->DoAction(actions[1])); // escape
+  DALI_TEST_CHECK(!b->DoAction(actions[2])); // increment
+  DALI_TEST_CHECK(!b->DoAction(actions[3])); // decrement
+
+  DevelControl::AccessibilityActionSignal(control).Connect([](const Dali::Accessibility::ActionInfo& action_info) {
+    actions_done.push_back(action_info.type);
+    return true;
+  });
+  DevelControl::AccessibilityReadingSkippedSignal(control).Connect([]() {
+    legacy_actions_done[0] = true;
+  });
+  DevelControl::AccessibilityReadingCancelledSignal(control).Connect([]() {
+    legacy_actions_done[1] = true;
+  });
+  DevelControl::AccessibilityReadingStoppedSignal(control).Connect([]() {
+    legacy_actions_done[2] = true;
+  });
+  DevelControl::AccessibilityReadingPausedSignal(control).Connect([]() {
+    legacy_actions_done[3] = true;
+  });
+  DevelControl::AccessibilityReadingResumedSignal(control).Connect([]() {
+    legacy_actions_done[4] = 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 )
-    {
-      DALI_TEST_CHECK( actions_done[ i ] );
-      actions_done[ i ] = false;
-    }
+  for(size_t i = 0; i < actions.size(); ++i)
+  {
+    DALI_TEST_CHECK(b->DoAction(i));
+  }
 
-  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), 1 ) );
-  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 ) );
+  check_all_actions_done_and_reset();
 
-  for ( auto i = 0u; i < actions_done.size(); ++i )
-    {
-      DALI_TEST_CHECK( actions_done[ i ] );
-      actions_done[ i ] = false;
-    }
+  // Test calling action by name
+  for(size_t i = 0; i < actions.size(); ++i)
+  {
+    DALI_TEST_CHECK(b->DoAction(actions[i]));
+  }
+
+  check_all_actions_done_and_reset();
 
-  DALI_TEST_CHECK( TestDoAction( b -> GetAddress(), actions[ 1 ] ) );
-  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 ] ) );
+  // Test "DoAction" through d-bus call
+  for(size_t i = 0; i < actions.size(); ++i)
+  {
+    DALI_TEST_CHECK(TestDoAction(b->GetAddress(), i));
+  }
 
-  for ( auto i = 0u; i < actions_done.size(); ++i )
-      DALI_TEST_CHECK( actions_done[ i ] );
+  check_all_actions_done_and_reset();
 
-  Dali::Accessibility::TestEnableSC( false );
+  // Test "DoActionName" through d-bus call
+  for(size_t i = 0; i < actions.size(); ++i)
+  {
+    DALI_TEST_CHECK(TestDoAction(b->GetAddress(), actions[i]));
+  }
+
+  check_all_actions_done_and_reset();
+
+  Dali::Accessibility::TestEnableSC(false);
+
+  END_TEST;
+}
+
+int UtcDaliAccessibilityActivateFallbackToLegacy(void)
+{
+  using Dali::Accessibility::ActionType;
+
+  ToolkitTestApplication application;
+
+  Dali::Accessibility::TestEnableSC(true);
+  thread_local std::vector<ActionType> actions_done;
+  thread_local bool                    legacy_activate_done = false;
+
+  auto control = Control::New();
+  auto a       = Dali::Accessibility::Accessible::Get(control);
+  auto b       = dynamic_cast<Dali::Accessibility::Action*>(a);
+
+  DevelControl::AccessibilityActivateSignal(control).Connect([]() {
+    legacy_activate_done = true;
+  });
+
+  DALI_TEST_CHECK(b->DoAction("activate"));   // fallback to legacy "activate" when ActionSignal is not connected
+  DALI_TEST_CHECK(!b->DoAction("increment")); // "increment" does not exist in legacy actions
+
+  DALI_TEST_CHECK(legacy_activate_done);
+
+  Dali::Accessibility::TestEnableSC(false);
 
   END_TEST;
 }
@@ -920,20 +1469,20 @@ void TestVoidCallback()
 int UtcDaliAccessibilitySignals(void)
 {
   ToolkitTestApplication application;
-  ConnectionTracker connectionTracker;
-  Control control = Control::New();
+  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::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::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() );
+  DALI_TEST_CHECK(DevelControl::AccessibilityDoGestureSignal(control).Empty());
+  control.ConnectSignal(&connectionTracker, "doGesture", &TestVoidCallback);
+  DALI_TEST_CHECK(!DevelControl::AccessibilityDoGestureSignal(control).Empty());
 
   END_TEST;
 }
@@ -947,71 +1496,202 @@ static void Wait(ToolkitTestApplication& application)
 int UtcDaliAccessibilityScrollToChildScrollView(void)
 {
   ToolkitTestApplication application;
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
   ScrollView scrollView = ScrollView::New();
-  application.GetScene().Add( scrollView );
+  application.GetScene().Add(scrollView);
 
-  PushButton actorA = PushButton::New();
+  PushButton          actorA    = PushButton::New();
   const Dali::Vector3 positionA = Vector3(100.0f, 400.0f, 0.0f);
-  actorA.SetProperty( Dali::Actor::Property::POSITION, positionA );
+  actorA.SetProperty(Dali::Actor::Property::POSITION, positionA);
   scrollView.Add(actorA);
 
-  PushButton actorB = PushButton::New();
+  PushButton          actorB    = PushButton::New();
   const Dali::Vector3 positionB = Vector3(500.0f, 200.0f, 0.0f);
-  actorB.SetProperty( Dali::Actor::Property::POSITION, positionB );
+  actorB.SetProperty(Dali::Actor::Property::POSITION, positionB);
   scrollView.Add(actorB);
 
+  TableView tableView = TableView::New(2, 2); // 2 by 2 grid.
+  tableView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
+  scrollView.Add(tableView);
+
+  PushButton actorC = PushButton::New();
+  actorC.SetProperty(Actor::Property::SIZE, Vector2(50.0f, 50.0f));
+  tableView.AddChild(actorC, TableView::CellPosition(0, 0));
+
+  PushButton actorD = PushButton::New();
+  application.GetScene().Add(actorD);
+
   Wait(application);
 
-  auto* accessibleParent = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(scrollView));
+  auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(scrollView));
   DALI_TEST_CHECK(accessibleParent);
-  auto* accessibleA = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(actorA));
+  auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorA));
   DALI_TEST_CHECK(accessibleA);
-  auto* accessibleB = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(actorB));
+  auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorB));
   DALI_TEST_CHECK(accessibleB);
+  auto* accessibleC = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorC));
+  DALI_TEST_CHECK(accessibleC);
 
   accessibleA->GrabHighlight(); // == scrollView.ScrollTo(actorA)
   Wait(application);
   accessibleB->GrabHighlight(); // == scrollView.ScrollTo(actorB)
   Wait(application);
 
-  Dali::Accessibility::TestEnableSC( false );
+  // scrollView is ancestor of actorC
+  // This should work without a crash
+  accessibleC->GrabHighlight(); // == scrollView.ScrollTo(actorC)
+  Wait(application);
+
+  // negative testcase calling ScrollToChild using non-child actor
+  accessibleParent->ScrollToChild(actorD);
+
+  Dali::Accessibility::TestEnableSC(false);
   END_TEST;
 }
 
-namespace {
-  class TestItemFactory : public ItemFactory
-  {
-  public:
-    TestItemFactory()
-    {
-    }
-
-    unsigned int GetNumberOfItems() override
-    {
-      return 2;
-    }
+int UtcDaliAccessibilityScrollToChildCustomScrollable(void)
+{
+  ToolkitTestApplication application;
 
-    Dali::Actor NewItem(unsigned int itemId) override
-    {
-      return TextLabel::New(std::to_string(itemId));
-    }
+  thread_local Dali::Accessibility::ActionInfo action_done;
+  const auto                                   check_scroll_to_child_action_done_and_reset = [&](Actor child) {
+    DALI_TEST_CHECK(action_done.type == Dali::Accessibility::ActionType::SCROLL_TO_CHILD);
+    DALI_TEST_CHECK(action_done.target == child);
+    action_done = Dali::Accessibility::ActionInfo{};
   };
+
+  Dali::Accessibility::TestEnableSC(true);
+
+  auto scrollable = Control::New();
+  // set control as scrollable
+  scrollable.SetProperty(DevelControl::Property::ACCESSIBILITY_SCROLLABLE, true);
+
+  DevelControl::AccessibilityActionSignal(scrollable).Connect([](const Dali::Accessibility::ActionInfo& action_info) {
+    action_done = action_info;
+    return true;
+  });
+
+  application.GetScene().Add(scrollable);
+
+  PushButton          actorA    = PushButton::New();
+  const Dali::Vector3 positionA = Vector3(100.0f, 400.0f, 0.0f);
+  actorA.SetProperty(Dali::Actor::Property::POSITION, positionA);
+  scrollable.Add(actorA);
+
+  PushButton          actorB    = PushButton::New();
+  const Dali::Vector3 positionB = Vector3(500.0f, 200.0f, 0.0f);
+  actorB.SetProperty(Dali::Actor::Property::POSITION, positionB);
+  scrollable.Add(actorB);
+
+  TableView tableView = TableView::New(2, 2); // 2 by 2 grid.
+  tableView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
+  scrollable.Add(tableView);
+
+  PushButton actorC = PushButton::New();
+  actorC.SetProperty(Actor::Property::SIZE, Vector2(50.0f, 50.0f));
+  tableView.AddChild(actorC, TableView::CellPosition(0, 0));
+
+  PushButton actorD = PushButton::New();
+  application.GetScene().Add(actorD);
+
+  Wait(application);
+
+  auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(scrollable));
+  DALI_TEST_CHECK(accessibleParent);
+  auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorA));
+  DALI_TEST_CHECK(accessibleA);
+  auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorB));
+  DALI_TEST_CHECK(accessibleB);
+  auto* accessibleC = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorC));
+  DALI_TEST_CHECK(accessibleC);
+  auto* accessibleD = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorD));
+  DALI_TEST_CHECK(accessibleD);
+
+  accessibleA->GrabHighlight();
+  Wait(application);
+  check_scroll_to_child_action_done_and_reset(actorA);
+
+  accessibleB->GrabHighlight();
+  Wait(application);
+  check_scroll_to_child_action_done_and_reset(actorB);
+
+  // scrollable is ancestor of actorC
+  // This should work without a crash
+  accessibleC->GrabHighlight();
+  check_scroll_to_child_action_done_and_reset(actorC);
+
+  // Grabbing highlight on a non-child actor to scrollable does not emit SCROLL_TO_CHILD
+  accessibleD->GrabHighlight();
+  DALI_TEST_CHECK(action_done.type == Dali::Accessibility::ActionType::MAX_COUNT);
+  DALI_TEST_CHECK(action_done.target != actorD);
+
+  Dali::Accessibility::TestEnableSC(false);
+  END_TEST;
 }
 
+int UtcDaliAccessibilityScrollToChild(void)
+{
+  ToolkitTestApplication application;
+
+  Dali::Accessibility::TestEnableSC(true);
+
+  auto parent = Control::New();
+
+  auto                child    = Control::New();
+  const Dali::Vector3 position = Vector3(100.0f, 400.0f, 0.0f);
+  child.SetProperty(Dali::Actor::Property::POSITION, position);
+
+  auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(parent));
+  DALI_TEST_CHECK(accessibleParent);
+
+  // ScrollToChild fails if no ActionSignal is connected
+  DALI_TEST_CHECK(!accessibleParent->ScrollToChild(child));
+
+  DevelControl::AccessibilityActionSignal(parent).Connect([](const Dali::Accessibility::ActionInfo& action_info) {
+    return true;
+  });
+
+  // ScrollToChild succeeds is an ActionSinal is connected
+  DALI_TEST_CHECK(accessibleParent->ScrollToChild(child));
+
+  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));
+  }
+};
+} // namespace
+
 int UtcDaliAccessibilityScrollToChildItemView(void)
 {
   ToolkitTestApplication application;
-  Dali::Accessibility::TestEnableSC( true );
+  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 );
+  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 );
+  view.SetProperty(Actor::Property::SIZE, vec);
 
   application.GetScene().Add(view);
   layout->SetOrientation(ControlOrientation::Down);
@@ -1019,11 +1699,11 @@ int UtcDaliAccessibilityScrollToChildItemView(void)
 
   Wait(application);
 
-  auto* accessibleParent = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(view));
+  auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view));
   DALI_TEST_CHECK(accessibleParent);
-  auto* accessibleA = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(view.GetItem(0)));
+  auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view.GetItem(0)));
   DALI_TEST_CHECK(accessibleA);
-  auto* accessibleB = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(view.GetItem(1)));
+  auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view.GetItem(1)));
   DALI_TEST_CHECK(accessibleB);
 
   accessibleA->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorA))
@@ -1031,83 +1711,352 @@ int UtcDaliAccessibilityScrollToChildItemView(void)
   accessibleB->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorB))
   Wait(application);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
   END_TEST;
 }
 
 int UtcDaliAccessibilityScrollToChildNonScrollable(void)
 {
   ToolkitTestApplication application;
-  Dali::Accessibility::TestEnableSC( true );
+  Dali::Accessibility::TestEnableSC(true);
 
   TextLabel label = TextLabel::New("123");
 
-  auto* accessible = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(label));
+  auto* accessible = dynamic_cast<DevelControl::ControlAccessible*>(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(), label, TEST_LOCATION);
 
-  Dali::Accessibility::TestEnableSC( false );
+  Dali::Accessibility::TestEnableSC(false);
   END_TEST;
 }
 
 int UtcDaliAccessibilityCheckHighlight(void)
 {
   ToolkitTestApplication application;
-  Dali::Accessibility::TestEnableSC( true );
+  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( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f) );
-  parentButton.SetProperty( Dali::Actor::Property::SIZE, Dali::Vector2(100.0f, 200.0f) );
-  application.GetScene().Add( parentButton );
+  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( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 0.0f) );
-  buttonA.SetProperty( Dali::Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f) );
+  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( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, 100.0f) );
-  buttonB.SetProperty( Dali::Actor::Property::SIZE, Dali::Vector2(100.0f, 100.0f) );
+  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);
 
-  // Move second child out of parent area
-  auto* accessible = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(buttonA));
+  // Set highlight to first child (A) to enable movement tracking
+  auto* accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonA));
   DALI_TEST_CHECK(accessible);
   accessible->GrabHighlight();
   Wait(application);
 
-  buttonA.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(0.0f, -200.0f) );
+  // 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::ControlAccessible*>(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( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
+  DALI_TEST_EQUALS(false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION);
 
   // Reset verdict data
   Dali::Accessibility::TestResetMoveOutedCalled();
 
-  // Move second child out of parent area
-  accessible = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(buttonB));
+  // Disable movement tracking on B by giving highlight to A
+  accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonA));
   DALI_TEST_CHECK(accessible);
   accessible->GrabHighlight();
   Wait(application);
 
-  buttonB.SetProperty( Dali::Actor::Property::POSITION, Dali::Vector2(300.0f, 100.0f) );
+  // 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( true, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION );
+  DALI_TEST_EQUALS(false, Dali::Accessibility::TestGetMoveOutedCalled(), TEST_LOCATION);
+
+  Dali::Accessibility::TestEnableSC(false);
+  END_TEST;
+}
+
+int UtcDaliWebViewAccessible(void)
+{
+  ToolkitTestApplication application;
+
+  auto webView           = Dali::Toolkit::WebView::New();
+  auto webViewAccessible = Dali::Accessibility::Accessible::Get(webView);
+
+  DALI_TEST_CHECK(webViewAccessible);
+
+  auto children = webViewAccessible->GetChildren();
+
+  DALI_TEST_CHECK(children.empty());
+
+  // Enables accessibility
+  Dali::Accessibility::TestEnableSC(true);
+
+  // Assuming the webengine lazy sets accessibility address on LoadUrl
+  children = webViewAccessible->GetChildren();
+  DALI_TEST_CHECK(children.empty());
+
+  // our test webengine sets accessibility address here
+  webView.LoadUrl("http://www.somewhere.valid1.com");
+
+  children = webViewAccessible->GetChildren();
+  DALI_TEST_EQUALS(children.size(), 1u, TEST_LOCATION);
+
+  auto* child = children[0];
+
+  DALI_TEST_CHECK(child);
+  DALI_TEST_CHECK(child->IsProxy());
+  DALI_TEST_EQUALS(child->GetParent(), webViewAccessible, TEST_LOCATION);
+
+  auto address = child->GetAddress();
+
+  DALI_TEST_CHECK(address);
+  DALI_TEST_NOT_EQUALS(address.GetBus(), webViewAccessible->GetAddress().GetBus(), 0.0f, TEST_LOCATION);
+
+  Dali::Accessibility::TestEnableSC(false);
+
+  children = webViewAccessible->GetChildren();
+
+  DALI_TEST_CHECK(children.empty());
+
+  END_TEST;
+}
+
+int UtcDaliEmitAccessibilityStateChanged(void)
+{
+  ToolkitTestApplication application;
+
+  Dali::Accessibility::TestEnableSC(true);
+
+  auto root = Control::New();
+  root.SetProperty(Actor::Property::SIZE, Vector2(300, 300));
+  root.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::CONTAINER);
+
+  auto dialog = Control::New();
+  dialog.SetProperty(Actor::Property::SIZE, Vector2(100, 100));
+  dialog.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::DIALOG);
+  root.Add(dialog);
+
+  auto button = Control::New();
+  button.SetProperty(Actor::Property::SIZE, Vector2(20, 20));
+  button.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, DevelControl::AccessibilityRole::BUTTON);
+  root.Add(button);
+
+  auto rootAccessible   = dynamic_cast<DevelControl::ControlAccessible*>(Accessibility::Accessible::Get(root));
+  auto dialogAccessible = dynamic_cast<DevelControl::ControlAccessible*>(Accessibility::Accessible::Get(dialog));
+  auto buttonAccessible = dynamic_cast<DevelControl::ControlAccessible*>(Accessibility::Accessible::Get(button));
+
+  application.GetScene().Add(root);
+  application.SendNotification();
+  application.Render();
+
+  DALI_TEST_CHECK(Accessibility::Bridge::GetCurrentBridge()->GetDefaultLabel(rootAccessible) != dialogAccessible);
+
+  // modal role: Showing State is emitted and Default label is registered
+  DevelControl::EmitAccessibilityStateChanged(dialog, Accessibility::State::SHOWING, 1);
+
+  DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedCalled());
+  DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedResult("showing", 1));
+  DALI_TEST_CHECK(Accessibility::Bridge::GetCurrentBridge()->GetDefaultLabel(rootAccessible) == dialogAccessible);
+
+  Dali::Accessibility::TestResetStateChangedResult();
+  flushCoalescableMessage(application);
+
+  // modal role: Showing State is emitted and Default label is unregistered
+  DevelControl::EmitAccessibilityStateChanged(dialog, Accessibility::State::SHOWING, 0);
+
+  DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedCalled());
+  DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedResult("showing", 0));
+  DALI_TEST_CHECK(Accessibility::Bridge::GetCurrentBridge()->GetDefaultLabel(rootAccessible) != dialogAccessible);
+
+  Dali::Accessibility::TestResetStateChangedResult();
+  flushCoalescableMessage(application);
+
+  // modal role: Visible State is not emitted
+  DevelControl::EmitAccessibilityStateChanged(dialog, Accessibility::State::VISIBLE, 1);
+
+  DALI_TEST_CHECK(!Dali::Accessibility::TestStateChangedCalled());
+  DALI_TEST_CHECK(Accessibility::Bridge::GetCurrentBridge()->GetDefaultLabel(rootAccessible) != dialogAccessible);
+
+  Dali::Accessibility::TestResetStateChangedResult();
+  flushCoalescableMessage(application);
+
+  // non-modal role: Showing State is not emitted and Default label is not registered
+  DevelControl::EmitAccessibilityStateChanged(button, Accessibility::State::SHOWING, 1);
+
+  DALI_TEST_CHECK(!Dali::Accessibility::TestStateChangedCalled());
+  DALI_TEST_CHECK(Accessibility::Bridge::GetCurrentBridge()->GetDefaultLabel(rootAccessible) != buttonAccessible);
+
+  Dali::Accessibility::TestResetStateChangedResult();
+  flushCoalescableMessage(application);
+
+  // non-modal role: Visible State is not emitted
+  DevelControl::EmitAccessibilityStateChanged(button, Accessibility::State::VISIBLE, 1);
+
+  DALI_TEST_CHECK(!Dali::Accessibility::TestStateChangedCalled());
+  DALI_TEST_CHECK(Accessibility::Bridge::GetCurrentBridge()->GetDefaultLabel(rootAccessible) != buttonAccessible);
+
+  Dali::Accessibility::TestResetStateChangedResult();
+  flushCoalescableMessage(application);
+
+  // non-modal role: Showing State is emitted if highlighted and not showing
+  buttonAccessible->GrabHighlight();
+  DevelControl::EmitAccessibilityStateChanged(button, Accessibility::State::SHOWING, 0);
+  DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedCalled());
+  DALI_TEST_CHECK(Dali::Accessibility::TestStateChangedResult("showing", 0));
+
+  Dali::Accessibility::TestResetStateChangedResult();
+  flushCoalescableMessage(application);
+
+  // non-modal role: Showing State is not emitted if highlighted and showing
+  DevelControl::EmitAccessibilityStateChanged(button, Accessibility::State::SHOWING, 1);
+  DALI_TEST_CHECK(!Dali::Accessibility::TestStateChangedCalled());
+
+  Dali::Accessibility::TestEnableSC(false);
+
+  END_TEST;
+}
+
+int UtcDaliAccessibleRemovalOnActorDestoyed(void)
+{
+  ToolkitTestApplication application;
+
+  Dali::Accessibility::TestEnableSC(true);
+
+  auto layer = Layer::New();
+
+  auto control = Control::New();
+
+  std::weak_ptr<Accessibility::Accessible> layerAccessible   = Accessibility::Accessible::GetOwningPtr(layer);   // AdaptorAccessible
+  std::weak_ptr<Accessibility::Accessible> controlAccessible = Accessibility::Accessible::GetOwningPtr(control); // ControlAccessible
+  DALI_TEST_CHECK(layerAccessible.lock());
+  DALI_TEST_CHECK(controlAccessible.lock());
+
+  // Test Getting already added accessible from the map
+  DALI_TEST_CHECK(!layerAccessible.expired());
+  DALI_TEST_CHECK(!controlAccessible.expired());
+  DALI_TEST_CHECK(Accessibility::Accessible::Get(layer) == layerAccessible.lock().get());
+  DALI_TEST_CHECK(Accessibility::Accessible::Get(control) == controlAccessible.lock().get());
+
+  // Test ControlAccessible Removal
+  control.Reset();
+  DALI_TEST_CHECK(controlAccessible.expired());
+  DALI_TEST_CHECK(Accessibility::Accessible::Get(control) == nullptr);
+
+  // Test AdaptorAccessible Removal
+  layer.Reset();
+  DALI_TEST_CHECK(layerAccessible.expired());
+  DALI_TEST_CHECK(Accessibility::Accessible::Get(layer) == nullptr);
+
+  Dali::Accessibility::TestEnableSC(false);
+
+  END_TEST;
+}
+
+int UtcDaliIncludeHidden(void)
+{
+  ToolkitTestApplication application;
+
+  Dali::Accessibility::TestEnableSC(true);
+
+  auto root          = Layer::New();
+  auto control       = Control::New();
+  auto hiddenControl = Control::New();
+  hiddenControl.SetProperty(DevelControl::Property::ACCESSIBILITY_HIDDEN, true);
+
+  application.GetScene().Add(root);
+  root.Add(control);
+  root.Add(hiddenControl);
+
+  auto appAccessible = Accessibility::Bridge::GetCurrentBridge()->GetApplication();
+  DALI_TEST_CHECK(appAccessible);
+
+  auto rootAccessible = Accessibility::Accessible::Get(root);
+  DALI_TEST_CHECK(rootAccessible);
+
+  auto appAddress = appAccessible->GetAddress();
+
+  DALI_TEST_CHECK(!TestGetIncludeHidden(appAddress));
+  DALI_TEST_CHECK(rootAccessible->GetChildCount() == 1); // hidden control is excluded by default
+
+  TestSetIncludeHidden(appAddress, true);
+  DALI_TEST_CHECK(TestGetIncludeHidden(appAddress));
+  DALI_TEST_CHECK(rootAccessible->GetChildCount() == 2); // hidden control is included after setting includeHidden to true
+
+  TestSetIncludeHidden(appAddress, false);
+  DALI_TEST_CHECK(!TestGetIncludeHidden(appAddress));
+  DALI_TEST_CHECK(rootAccessible->GetChildCount() == 1); // hidden control is excluded after setting includeHidden to false
+
+  Dali::Accessibility::TestEnableSC(false);
 
-  Dali::Accessibility::TestEnableSC( false );
   END_TEST;
 }