[dali_2.3.19] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-PushButton.cpp
index 82d6a40..4e5ad76 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  *
  */
 
-#include <iostream>
 #include <stdlib.h>
+#include <iostream>
 
 // Need to override adaptor classes for toolkit test harness, so include
 // test harness headers before dali headers.
 #include <dali-toolkit-test-suite-utils.h>
 
+#include <dali-toolkit/dali-toolkit.h>
 #include <dali.h>
 #include <dali/integration-api/events/touch-event-integ.h>
-#include <dali-toolkit/dali-toolkit.h>
+
+#include <dali-toolkit/devel-api/controls/buttons/button-devel.h>
+
+#include <dali/devel-api/adaptor-framework/image-loading.h>
 
 using namespace Dali;
 using namespace Toolkit;
@@ -41,17 +45,22 @@ void utc_dali_toolkit_pushbutton_cleanup(void)
 
 namespace
 {
+static const char* TEST_IMAGE_ONE = TEST_RESOURCE_DIR "/gallery-small-1.jpg";
+
+static const Vector2 INSIDE_TOUCH_POINT_POSITON                = Vector2(240, 400);
+static const Vector3 BUTTON_POSITON_TO_GET_INSIDE_TOUCH_EVENTS = Vector3(200, 360, 0);
+static const Size    BUTTON_SIZE_TO_GET_INSIDE_TOUCH_EVENTS    = Size(100, 100);
 
 static bool gPushButtonSelectedState = false;
-bool PushButtonSelected( Button button )
+bool        PushButtonSelected(Button button)
 {
-  gPushButtonSelectedState = button.IsSelected();
+  gPushButtonSelectedState = button.GetProperty<bool>(button.GetPropertyIndex("selected"));
   return true;
 }
 
 static bool gPushButtonPressed = false;
 
-static bool PushButtonPressed( Button button )
+static bool PushButtonPressed(Button button)
 {
   gPushButtonPressed = true;
   return true;
@@ -59,347 +68,428 @@ static bool PushButtonPressed( Button button )
 
 static bool gPushButtonReleased = false;
 
-static bool PushButtonReleased( Button button )
+static bool PushButtonReleased(Button button)
 {
   gPushButtonReleased = true;
   return true;
 }
 
+static bool gPushButtonClicked = false;
+
+static bool PushButtonClicked(Button button)
+{
+  gPushButtonClicked = true;
+  return gPushButtonClicked;
+}
+
 Dali::Integration::Point GetPointDownInside()
 {
   Dali::Integration::Point point;
-  point.SetState( PointState::DOWN );
-  point.SetScreenPosition( Vector2( 240, 400 ) );
+  point.SetState(PointState::DOWN);
+  point.SetScreenPosition(INSIDE_TOUCH_POINT_POSITON);
   return point;
 }
 
 Dali::Integration::Point GetPointUpInside()
 {
   Dali::Integration::Point point;
-  point.SetState( PointState::UP );
-  point.SetScreenPosition( Vector2( 240, 400 ) );
+  point.SetState(PointState::UP);
+  point.SetScreenPosition(INSIDE_TOUCH_POINT_POSITON);
   return point;
 }
 
 Dali::Integration::Point GetPointLeave()
 {
   Dali::Integration::Point point;
-  point.SetState( PointState::LEAVE );
-  point.SetScreenPosition( Vector2( 240, 400 ) );
+  point.SetState(PointState::LEAVE);
+  point.SetScreenPosition(INSIDE_TOUCH_POINT_POSITON);
   return point;
 }
 
 Dali::Integration::Point GetPointEnter()
 {
   Dali::Integration::Point point;
-  point.SetState( PointState::MOTION );
-  point.SetScreenPosition( Vector2( 240, 400 ) );
+  point.SetState(PointState::MOTION);
+  point.SetScreenPosition(INSIDE_TOUCH_POINT_POSITON);
   return point;
 }
 
 Dali::Integration::Point GetPointDownOutside()
 {
   Dali::Integration::Point point;
-  point.SetState( PointState::DOWN );
-  point.SetScreenPosition( Vector2( 10, 10 ) );
+  point.SetState(PointState::DOWN);
+  point.SetScreenPosition(Vector2(10, 10));
   return point;
 }
 
 Dali::Integration::Point GetPointUpOutside()
 {
   Dali::Integration::Point point;
-  point.SetState( PointState::UP );
-  point.SetScreenPosition( Vector2( 10, 10 ) );
+  point.SetState(PointState::UP);
+  point.SetScreenPosition(Vector2(10, 10));
   return point;
 }
 
-Image CreateSolidColorImage( const Vector4& color, unsigned int width, unsigned int height )
+// Set up the position of the button for the default test events
+void SetupButtonForTestTouchEvents(ToolkitTestApplication& application, Button& button, bool useDefaultImages)
+{
+  button.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+  button.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+  button.SetProperty(Actor::Property::POSITION, BUTTON_POSITON_TO_GET_INSIDE_TOUCH_EVENTS);
+  if(useDefaultImages)
+  {
+    const Vector2            TEST_IMAGE_SIZE = Vector2(BUTTON_SIZE_TO_GET_INSIDE_TOUCH_EVENTS);
+    TestPlatformAbstraction& platform        = application.GetPlatform();
+    platform.SetClosestImageSize(TEST_IMAGE_SIZE);
+    button.SetProperty(Toolkit::Button::Property::UNSELECTED_BACKGROUND_VISUAL, TEST_IMAGE_ONE);
+    button.SetProperty(Toolkit::Button::Property::SELECTED_BACKGROUND_VISUAL, TEST_IMAGE_ONE);
+  }
+}
+
+static std::string GetButtonText(Button button)
 {
-  BufferImage imageData = BufferImage::New( width, height, Pixel::RGBA8888 );
+  Property::Value value = button.GetProperty(Toolkit::Button::Property::LABEL);
 
-  // Create the image
-  PixelBuffer* pixbuf = imageData.GetBuffer();
-  unsigned int size = width * height;
+  Property::Map* labelProperty = value.GetMap();
 
-  for( size_t i = 0; i < size; i++ )
-    {
-      pixbuf[i*4+0] = 0xFF * color.r;
-      pixbuf[i*4+1] = 0xFF * color.g;
-      pixbuf[i*4+2] = 0xFF * color.b;
-      pixbuf[i*4+3] = 0xFF * color.a;
-    }
+  std::string textLabel;
 
-  imageData.Update();
+  if(labelProperty)
+  {
+    Property::Value* value = labelProperty->Find(Toolkit::TextVisual::Property::TEXT);
+    value->Get(textLabel);
+  }
 
-  return imageData;
+  return textLabel;
 }
 
 } //namespace
 
 int UtcDaliPushButtonConstructorP(void)
 {
-  TestApplication application;
+  ToolkitTestApplication application;
 
   PushButton button;
 
-  DALI_TEST_CHECK( !button );
+  DALI_TEST_CHECK(!button);
   END_TEST;
 }
 
 int UtcDaliPushButtonCopyConstructorP(void)
 {
-  TestApplication application;
+  ToolkitTestApplication application;
 
   // Initialize an object, ref count == 1
   PushButton button = PushButton::New();
 
-  PushButton copy( button );
-  DALI_TEST_CHECK( copy );
+  PushButton copy(button);
+  DALI_TEST_CHECK(copy);
+  END_TEST;
+}
+
+int UtcDaliPushButtonMoveConstructor(void)
+{
+  ToolkitTestApplication application;
+
+  PushButton button = PushButton::New();
+  DALI_TEST_EQUALS(1, button.GetBaseObject().ReferenceCount(), TEST_LOCATION);
+  DALI_TEST_EQUALS(button.GetProperty<bool>(Button::Property::TOGGLABLE), false, TEST_LOCATION);
+  button.SetProperty(Button::Property::TOGGLABLE, true);
+  DALI_TEST_EQUALS(button.GetProperty<bool>(Button::Property::TOGGLABLE), true, TEST_LOCATION);
+
+  PushButton moved = std::move(button);
+  DALI_TEST_CHECK(moved);
+  DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
+  DALI_TEST_EQUALS(moved.GetProperty<bool>(Button::Property::TOGGLABLE), true, TEST_LOCATION);
+  DALI_TEST_CHECK(!button);
+
   END_TEST;
 }
 
 int UtcDaliPushButtonAssignmentOperatorP(void)
 {
-  TestApplication application;
+  ToolkitTestApplication application;
 
   PushButton button = PushButton::New();
 
-  PushButton copy( button );
-  DALI_TEST_CHECK( copy );
+  PushButton copy(button);
+  DALI_TEST_CHECK(copy);
+
+  DALI_TEST_CHECK(button == copy);
+  END_TEST;
+}
+
+int UtcDaliPushButtonMoveAssignment(void)
+{
+  ToolkitTestApplication application;
+
+  PushButton button = PushButton::New();
+  DALI_TEST_EQUALS(1, button.GetBaseObject().ReferenceCount(), TEST_LOCATION);
+  DALI_TEST_EQUALS(button.GetProperty<bool>(Button::Property::TOGGLABLE), false, TEST_LOCATION);
+  button.SetProperty(Button::Property::TOGGLABLE, true);
+  DALI_TEST_EQUALS(button.GetProperty<bool>(Button::Property::TOGGLABLE), true, TEST_LOCATION);
+
+  PushButton moved;
+  moved = std::move(button);
+  DALI_TEST_CHECK(moved);
+  DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
+  DALI_TEST_EQUALS(moved.GetProperty<bool>(Button::Property::TOGGLABLE), true, TEST_LOCATION);
+  DALI_TEST_CHECK(!button);
 
-  DALI_TEST_CHECK( button == copy );
   END_TEST;
 }
 
 int UtcDaliPushButtonNewP(void)
 {
-  TestApplication application;
+  ToolkitTestApplication application;
 
   PushButton button = PushButton::New();
 
-  DALI_TEST_CHECK( button );
+  DALI_TEST_CHECK(button);
   END_TEST;
 }
 
 int UtcDaliPushButtonDownCastP(void)
 {
-  TestApplication application;
+  ToolkitTestApplication application;
 
   PushButton button = PushButton::New();
 
   BaseHandle object(button);
 
-  PushButton button2 = PushButton::DownCast( object );
+  PushButton button2 = PushButton::DownCast(object);
   DALI_TEST_CHECK(button2);
 
-  PushButton button3 = DownCast< PushButton >(object);
+  PushButton button3 = DownCast<PushButton>(object);
   DALI_TEST_CHECK(button3);
   END_TEST;
 }
 
 int UtcDaliPushButtonDownCastN(void)
 {
-  TestApplication application;
+  ToolkitTestApplication application;
 
   BaseHandle unInitializedObject;
 
-  PushButton button1 = PushButton::DownCast( unInitializedObject );
-  DALI_TEST_CHECK( !button1 );
+  PushButton button1 = PushButton::DownCast(unInitializedObject);
+  DALI_TEST_CHECK(!button1);
 
-  PushButton button2 = DownCast< PushButton >( unInitializedObject );
-  DALI_TEST_CHECK( !button2 );
+  PushButton button2 = DownCast<PushButton>(unInitializedObject);
+  DALI_TEST_CHECK(!button2);
   END_TEST;
 }
 
-int UtcDaliPushButtonSetGetAutoRepeating(void)
+int UtcDaliPushButtonAutoRepeatingProperty(void)
 {
   ToolkitTestApplication application;
   tet_infoline(" UtcDaliPushButtonSetGetAutoRepeating");
 
   PushButton pushButton = PushButton::New();
 
-  pushButton.SetAutoRepeating( true );
+  pushButton.SetProperty(pushButton.GetPropertyIndex("autoRepeating"), true);
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(pushButton.GetPropertyIndex("autoRepeating")), true, TEST_LOCATION);
+
+  pushButton.SetProperty(pushButton.GetPropertyIndex("autoRepeating"), false);
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(pushButton.GetPropertyIndex("autoRepeating")), false, TEST_LOCATION);
+
+  pushButton.SetProperty(pushButton.GetPropertyIndex("autoRepeating"), true);
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(pushButton.GetPropertyIndex("autoRepeating")), true, TEST_LOCATION);
 
-  DALI_TEST_CHECK( pushButton.IsAutoRepeating() );
+  END_TEST;
+}
 
-  pushButton.SetAutoRepeating( false );
+int UtcDaliPushButtonSetAutoRepeating(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline("UtcDaliPushButtonSetAutoRepeating\n");
+  tet_infoline("Ensure setting AutoRepeating on a SELECTED Toggle button switches off Toggle\n");
+  PushButton pushButton = PushButton::New();
 
-  DALI_TEST_CHECK( !pushButton.IsAutoRepeating() );
+  const bool INITIAL_TOGGLE_VALUE   = true;
+  const bool INITIAL_SELECTED_VALUE = true;
 
-  pushButton.SetAutoRepeating( true );
+  pushButton.SetProperty(Button::Property::TOGGLABLE, INITIAL_TOGGLE_VALUE);
+  pushButton.SetProperty(Button::Property::SELECTED, INITIAL_SELECTED_VALUE);
+
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::TOGGLABLE), INITIAL_TOGGLE_VALUE, TEST_LOCATION);
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::SELECTED), INITIAL_SELECTED_VALUE, TEST_LOCATION);
+
+  pushButton.SetProperty(Button::Property::AUTO_REPEATING, true);
+
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::TOGGLABLE), !INITIAL_TOGGLE_VALUE, TEST_LOCATION);
 
-  DALI_TEST_CHECK( pushButton.IsAutoRepeating() );
   END_TEST;
 }
 
-int UtcDaliPushButtonSetGetTogglableButton(void)
+int UtcDaliPushButtonTogglableProperty(void)
 {
   ToolkitTestApplication application;
   tet_infoline(" UtcDaliPushButtonSetGetTogglableButton");
 
   PushButton pushButton = PushButton::New();
 
-  pushButton.SetTogglableButton( true );
-
-  DALI_TEST_CHECK( pushButton.IsTogglableButton() );
+  pushButton.SetProperty(pushButton.GetPropertyIndex("togglable"), true);
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(pushButton.GetPropertyIndex("togglable")), true, TEST_LOCATION);
 
-  pushButton.SetTogglableButton( false );
+  pushButton.SetProperty(pushButton.GetPropertyIndex("togglable"), false);
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(pushButton.GetPropertyIndex("togglable")), false, TEST_LOCATION);
 
-  DALI_TEST_CHECK( !pushButton.IsTogglableButton() );
+  pushButton.SetProperty(pushButton.GetPropertyIndex("togglable"), true);
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(pushButton.GetPropertyIndex("togglable")), true, TEST_LOCATION);
 
-  pushButton.SetTogglableButton( true );
-
-  DALI_TEST_CHECK( pushButton.IsTogglableButton() );
   END_TEST;
 }
 
-int UtcDaliPushButtonSetGetAutoRepeatingAndTogglableButton(void)
+int UtcDaliPushButtonAutoRepeatingPropertyAndTogglableButton(void)
 {
   ToolkitTestApplication application;
   tet_infoline(" UtcDaliPushButtonSetGetAutoRepeatingAndTogglableButton");
 
   PushButton pushButton = PushButton::New();
 
-  pushButton.SetAutoRepeating( true );
-  pushButton.SetTogglableButton( true );
+  pushButton.SetProperty(Button::Property::AUTO_REPEATING, true);
+  pushButton.SetProperty(pushButton.GetPropertyIndex("togglable"), true);
 
-  DALI_TEST_CHECK( pushButton.IsTogglableButton() );
-  DALI_TEST_CHECK( !pushButton.IsAutoRepeating() );
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(pushButton.GetPropertyIndex("togglable")), true, TEST_LOCATION);
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(pushButton.GetPropertyIndex("autoRepeating")), false, TEST_LOCATION);
 
-  pushButton.SetTogglableButton( true );
-  pushButton.SetAutoRepeating( true );
+  pushButton.SetProperty(pushButton.GetPropertyIndex("togglable"), true);
+  pushButton.SetProperty(Button::Property::AUTO_REPEATING, true);
 
-  DALI_TEST_CHECK( pushButton.IsAutoRepeating() );
-  DALI_TEST_CHECK( !pushButton.IsTogglableButton() );
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(pushButton.GetPropertyIndex("autoRepeating")), true, TEST_LOCATION);
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(pushButton.GetPropertyIndex("togglable")), false, TEST_LOCATION);
   END_TEST;
 }
 
-int UtcDaliPushButtonSetGetSelected01(void)
+int UtcDaliPushButtonSelectedProperty01(void)
 {
   ToolkitTestApplication application;
   tet_infoline(" UtcDaliPushButtonSetGetSelected01");
 
   PushButton pushButton = PushButton::New();
 
-  pushButton.SetTogglableButton( true );
-  pushButton.StateChangedSignal().Connect( &PushButtonSelected );
+  pushButton.SetProperty(pushButton.GetPropertyIndex("togglable"), true);
+
+  pushButton.StateChangedSignal().Connect(&PushButtonSelected);
 
   gPushButtonSelectedState = false;
-  pushButton.SetSelected( true );
+  pushButton.SetProperty(Button::Property::SELECTED, true);
 
-  DALI_TEST_CHECK( pushButton.IsSelected() );
-  DALI_TEST_CHECK( gPushButtonSelectedState );
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::SELECTED), true, TEST_LOCATION);
+  DALI_TEST_CHECK(gPushButtonSelectedState);
 
-  pushButton.SetSelected( false );
+  pushButton.SetProperty(Button::Property::SELECTED, false);
 
-  DALI_TEST_CHECK( !pushButton.IsSelected() );
-  DALI_TEST_CHECK( !gPushButtonSelectedState );
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::SELECTED), false, TEST_LOCATION);
+  DALI_TEST_CHECK(!gPushButtonSelectedState);
 
-  pushButton.SetSelected( true );
+  pushButton.SetProperty(Button::Property::SELECTED, true);
 
-  DALI_TEST_CHECK( pushButton.IsSelected() );
-  DALI_TEST_CHECK( gPushButtonSelectedState );
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::SELECTED), true, TEST_LOCATION);
+  DALI_TEST_CHECK(gPushButtonSelectedState);
   END_TEST;
 }
 
-int UtcDaliPushButtonSetGetSelected02(void)
+int UtcDaliPushButtonSelectedProperty02(void)
 {
   ToolkitTestApplication application;
   tet_infoline(" UtcDaliPushButtonSetGetSelected02");
 
   PushButton pushButton = PushButton::New();
 
-  pushButton.SetTogglableButton( false );
-  pushButton.StateChangedSignal().Connect( &PushButtonSelected );
+  pushButton.SetProperty(pushButton.GetPropertyIndex("togglable"), false);
+  pushButton.StateChangedSignal().Connect(&PushButtonSelected);
 
   gPushButtonSelectedState = false;
-  pushButton.SetSelected( true );
+  pushButton.SetProperty(Button::Property::SELECTED, true);
 
-  DALI_TEST_CHECK( !pushButton.IsSelected() );
-  DALI_TEST_CHECK( !gPushButtonSelectedState );
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::SELECTED), false, TEST_LOCATION);
+  DALI_TEST_CHECK(!gPushButtonSelectedState);
 
-  pushButton.SetSelected( false );
+  pushButton.SetProperty(Button::Property::SELECTED, false);
 
-  DALI_TEST_CHECK( !pushButton.IsSelected() );
-  DALI_TEST_CHECK( !gPushButtonSelectedState );
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::SELECTED), false, TEST_LOCATION);
+  DALI_TEST_CHECK(!gPushButtonSelectedState);
 
-  pushButton.SetSelected( true );
+  pushButton.SetProperty(Button::Property::SELECTED, true);
 
-  DALI_TEST_CHECK( !pushButton.IsSelected() );
-  DALI_TEST_CHECK( !gPushButtonSelectedState );
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::SELECTED), false, TEST_LOCATION);
+  DALI_TEST_CHECK(!gPushButtonSelectedState);
   END_TEST;
 }
 
-int UtcDaliPushButtonSetGetAutorepeatingDelayValues01(void)
+int UtcDaliPushButtonAutorepeatingDelayPropertyValues01(void)
 {
   ToolkitTestApplication application;
   tet_infoline(" UtcDaliPushButtonSetGetAutorepeatingDelayValues01");
 
   PushButton pushButton = PushButton::New();
 
-  pushButton.SetAutoRepeating( true );
+  pushButton.SetProperty(Button::Property::AUTO_REPEATING, true);
+
+  pushButton.SetProperty(Button::Property::INITIAL_AUTO_REPEATING_DELAY, 1.f);
 
-  pushButton.SetInitialAutoRepeatingDelay( 1.f );
-  DALI_TEST_EQUALS( pushButton.GetInitialAutoRepeatingDelay(), 1.f, TEST_LOCATION );
+  DALI_TEST_EQUALS(pushButton.GetProperty<float>(pushButton.GetPropertyIndex("initialAutoRepeatingDelay")), 1.f, TEST_LOCATION);
 
-  pushButton.SetNextAutoRepeatingDelay( 1.f );
-  DALI_TEST_EQUALS( pushButton.GetNextAutoRepeatingDelay(), 1.f, TEST_LOCATION );
   END_TEST;
 }
 
-int UtcDaliPushButtonSetGetAutorepeatingDelayValues02(void)
+int UtcDaliPushButtonAutorepeatingDelayPropertyValues02(void)
 {
   ToolkitTestApplication application;
   tet_infoline(" UtcDaliPushButtonSetGetAutorepeatingDelayValues02");
 
   PushButton pushButton = PushButton::New();
 
-  bool assert1( false );
-  bool assert2( false );
+  bool assert1(false);
+  bool assert2(false);
 
-  pushButton.SetAutoRepeating( true );
+  pushButton.SetProperty(Button::Property::AUTO_REPEATING, true);
 
   try
   {
-    pushButton.SetInitialAutoRepeatingDelay( -1.f );
+    pushButton.SetProperty(Button::Property::INITIAL_AUTO_REPEATING_DELAY, -1.f);
   }
-  catch( Dali::DaliException& e )
+  catch(Dali::DaliException& e)
   {
-    DALI_TEST_PRINT_ASSERT( e );
+    DALI_TEST_PRINT_ASSERT(e);
     DALI_TEST_EQUALS(e.condition, "initialAutoRepeatingDelay > 0.f", TEST_LOCATION);
     assert1 = true;
   }
 
   try
   {
-    pushButton.SetNextAutoRepeatingDelay( -1.f );
+    pushButton.SetProperty(Button::Property::NEXT_AUTO_REPEATING_DELAY, -1.f);
   }
-  catch( Dali::DaliException& e )
+  catch(Dali::DaliException& e)
   {
-    DALI_TEST_PRINT_ASSERT( e );
+    DALI_TEST_PRINT_ASSERT(e);
     DALI_TEST_EQUALS(e.condition, "nextAutoRepeatingDelay > 0.f", TEST_LOCATION);
     assert2 = true;
   }
 
-  DALI_TEST_CHECK( assert1 && assert2 );
+  DALI_TEST_CHECK(assert1 && assert2);
   END_TEST;
 }
 
-int UtcDaliPushButtonSetLabelText(void)
+int UtcDaliPushButtonLabelProperty(void)
 {
   ToolkitTestApplication application;
   tet_infoline(" UtcDaliPushButtonSetLabelText");
 
-  const std::string STR( "Hola!" );
+  const std::string STR("Hola!");
 
   PushButton pushButton = PushButton::New();
 
   application.SendNotification();
   application.Render();
 
-  pushButton.SetLabelText( STR );
+  pushButton.SetProperty(Toolkit::Button::Property::LABEL,
+                         Property::Map().Add(Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT).Add(Toolkit::TextVisual::Property::POINT_SIZE, 15.0f));
 
-  DALI_TEST_EQUALS( pushButton.GetLabelText(), STR, TEST_LOCATION );
+  pushButton.SetProperty(Toolkit::Button::Property::LABEL, STR);
+
+  DALI_TEST_EQUALS(GetButtonText(pushButton), STR, TEST_LOCATION);
 
   END_TEST;
 }
@@ -410,12 +500,12 @@ int UtcDaliPushButtonPressed(void)
   tet_infoline(" UtcDaliPushButtonPressed");
 
   PushButton pushButton = PushButton::New();
-  pushButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
-  pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
-  pushButton.SetPosition( 240, 400 );
-  pushButton.SetSize( 100, 100 );
+  pushButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+  pushButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+  pushButton.SetProperty(Actor::Property::POSITION, BUTTON_POSITON_TO_GET_INSIDE_TOUCH_EVENTS);
+  pushButton.SetProperty(Actor::Property::SIZE, BUTTON_SIZE_TO_GET_INSIDE_TOUCH_EVENTS);
 
-  Stage::GetCurrent().Add( pushButton );
+  application.GetScene().Add(pushButton);
 
   application.SendNotification();
   application.Render();
@@ -423,17 +513,17 @@ int UtcDaliPushButtonPressed(void)
   gPushButtonPressed = false;
 
   // connect to its touch signal
-  pushButton.PressedSignal().Connect( &PushButtonPressed );
+  pushButton.PressedSignal().Connect(&PushButtonPressed);
 
   Dali::Integration::TouchEvent eventDown;
-  eventDown.AddPoint( GetPointDownInside() );
+  eventDown.AddPoint(GetPointDownInside());
 
   // flush the queue and render once
   application.SendNotification();
   application.Render();
-  application.ProcessEvent( eventDown );
+  application.ProcessEvent(eventDown);
 
-  DALI_TEST_CHECK( gPushButtonPressed );
+  DALI_TEST_CHECK(gPushButtonPressed);
   END_TEST;
 }
 
@@ -443,80 +533,80 @@ int UtcDaliPushButtonReleased(void)
   tet_infoline(" UtcDaliPushButtonReleased");
 
   PushButton pushButton = PushButton::New();
-  pushButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
-  pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
-  pushButton.SetPosition( 240, 400 );
-  pushButton.SetSize( 100, 100 );
+  pushButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+  pushButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+  pushButton.SetProperty(Actor::Property::POSITION, BUTTON_POSITON_TO_GET_INSIDE_TOUCH_EVENTS);
+  pushButton.SetProperty(Actor::Property::SIZE, BUTTON_SIZE_TO_GET_INSIDE_TOUCH_EVENTS);
 
-  Stage::GetCurrent().Add( pushButton );
+  application.GetScene().Add(pushButton);
 
   application.SendNotification();
   application.Render();
 
   // connect to its touch signal
-  pushButton.ReleasedSignal().Connect( &PushButtonReleased );
+  pushButton.ReleasedSignal().Connect(&PushButtonReleased);
 
   Dali::Integration::TouchEvent event;
 
   // Test1. Touch point down and up inside the button.
 
   gPushButtonReleased = false;
-  event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointDownInside() );
-  application.ProcessEvent( event );
+  event               = Dali::Integration::TouchEvent();
+  event.AddPoint(GetPointDownInside());
+  application.ProcessEvent(event);
 
   event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointUpInside() );
-  application.ProcessEvent( event );
+  event.AddPoint(GetPointUpInside());
+  application.ProcessEvent(event);
 
-  DALI_TEST_CHECK( gPushButtonReleased );
+  DALI_TEST_CHECK(gPushButtonReleased);
 
   // Test2. Touch point down and up outside the button.
 
   gPushButtonReleased = false;
-  event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointDownOutside() );
-  application.ProcessEvent( event );
+  event               = Dali::Integration::TouchEvent();
+  event.AddPoint(GetPointDownOutside());
+  application.ProcessEvent(event);
 
   event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointUpOutside() );
-  application.ProcessEvent( event );
+  event.AddPoint(GetPointUpOutside());
+  application.ProcessEvent(event);
 
-  DALI_TEST_CHECK( !gPushButtonReleased );
+  DALI_TEST_CHECK(!gPushButtonReleased);
 
   // Test3. Touch point down inside and up outside the button.
 
   gPushButtonReleased = false;
-  event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointDownInside() );
-  application.ProcessEvent( event );
+  event               = Dali::Integration::TouchEvent();
+  event.AddPoint(GetPointDownInside());
+  application.ProcessEvent(event);
 
   event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointLeave() );
-  application.ProcessEvent( event );
+  event.AddPoint(GetPointLeave());
+  application.ProcessEvent(event);
 
   event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointUpOutside() );
-  application.ProcessEvent( event );
+  event.AddPoint(GetPointUpOutside());
+  application.ProcessEvent(event);
 
-  DALI_TEST_CHECK( gPushButtonReleased );
+  DALI_TEST_CHECK(gPushButtonReleased);
 
   // Test4. Touch point down outside and up inside the button.
 
   gPushButtonReleased = false;
-  event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointDownOutside() );
-  application.ProcessEvent( event );
+  event               = Dali::Integration::TouchEvent();
+  event.AddPoint(GetPointDownOutside());
+  application.ProcessEvent(event);
 
   event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointEnter() );
-  application.ProcessEvent( event );
+  event.AddPoint(GetPointEnter());
+  application.ProcessEvent(event);
 
   event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointUpInside() );
-  application.ProcessEvent( event );
+  event.AddPoint(GetPointUpInside());
+  application.ProcessEvent(event);
 
-  DALI_TEST_CHECK( !gPushButtonReleased );
+  DALI_TEST_CHECK(!gPushButtonReleased);
   END_TEST;
 }
 
@@ -526,120 +616,109 @@ int UtcDaliPushButtonSelected(void)
   tet_infoline(" UtcDaliPushButtonSelected");
 
   PushButton pushButton = PushButton::New();
-  pushButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
-  pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
-  pushButton.SetPosition( 240, 400 );
-  pushButton.SetSize( 100, 100 );
+  pushButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+  pushButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+  pushButton.SetProperty(Actor::Property::POSITION, BUTTON_POSITON_TO_GET_INSIDE_TOUCH_EVENTS);
+  pushButton.SetProperty(Actor::Property::SIZE, BUTTON_SIZE_TO_GET_INSIDE_TOUCH_EVENTS);
 
-  Stage::GetCurrent().Add( pushButton );
+  application.GetScene().Add(pushButton);
 
   application.SendNotification();
   application.Render();
 
   // connect to its touch signal
-  pushButton.StateChangedSignal().Connect( &PushButtonSelected );
+  pushButton.StateChangedSignal().Connect(&PushButtonSelected);
 
   Dali::Integration::TouchEvent event;
 
   // Test1. No togglable button.
 
   gPushButtonSelectedState = false;
-  event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointDownInside() );
-  application.ProcessEvent( event );
+  event                    = Dali::Integration::TouchEvent();
+  event.AddPoint(GetPointDownInside());
+  application.ProcessEvent(event);
 
   event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointUpInside() );
-  application.ProcessEvent( event );
+  event.AddPoint(GetPointUpInside());
+  application.ProcessEvent(event);
 
-  DALI_TEST_CHECK( !gPushButtonSelectedState );
+  DALI_TEST_CHECK(!gPushButtonSelectedState);
 
   // Set togglable property.
-  pushButton.SetTogglableButton( true );
+  pushButton.SetProperty(Button::Property::TOGGLABLE, true);
 
   // Test2. Touch point down and up inside the button twice.
   gPushButtonSelectedState = false;
-  event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointDownInside() );
-  application.ProcessEvent( event );
+  event                    = Dali::Integration::TouchEvent();
+  event.AddPoint(GetPointDownInside());
+  application.ProcessEvent(event);
 
   event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointUpInside() );
-  application.ProcessEvent( event );
+  event.AddPoint(GetPointUpInside());
+  application.ProcessEvent(event);
 
-  DALI_TEST_CHECK( gPushButtonSelectedState );
+  DALI_TEST_CHECK(gPushButtonSelectedState);
 
   event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointDownInside() );
-  application.ProcessEvent( event );
+  event.AddPoint(GetPointDownInside());
+  application.ProcessEvent(event);
 
   event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointUpInside() );
-  application.ProcessEvent( event );
+  event.AddPoint(GetPointUpInside());
+  application.ProcessEvent(event);
 
-  DALI_TEST_CHECK( !gPushButtonSelectedState );
+  DALI_TEST_CHECK(!gPushButtonSelectedState);
 
   // Test3. Touch point down and up outside the button.
 
   gPushButtonSelectedState = false;
-  event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointDownOutside() );
-  application.ProcessEvent( event );
+  event                    = Dali::Integration::TouchEvent();
+  event.AddPoint(GetPointDownOutside());
+  application.ProcessEvent(event);
 
   event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointUpOutside() );
-  application.ProcessEvent( event );
+  event.AddPoint(GetPointUpOutside());
+  application.ProcessEvent(event);
 
-  DALI_TEST_CHECK( !gPushButtonSelectedState );
+  DALI_TEST_CHECK(!gPushButtonSelectedState);
 
   // Test4. Touch point down inside and up outside the button.
-
+  //        State changes on Button down
   gPushButtonSelectedState = false;
-  event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointDownInside() );
-  application.ProcessEvent( event );
+  event                    = Dali::Integration::TouchEvent();
+  event.AddPoint(GetPointDownInside());
+  application.ProcessEvent(event);
 
   event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointLeave() );
-  application.ProcessEvent( event );
+  event.AddPoint(GetPointLeave());
+  application.ProcessEvent(event);
 
   event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointUpOutside() );
-  application.ProcessEvent( event );
+  event.AddPoint(GetPointUpOutside());
+  application.ProcessEvent(event);
 
-  DALI_TEST_CHECK( !gPushButtonSelectedState );
+  DALI_TEST_CHECK(gPushButtonSelectedState);
 
   // Test5. Touch point down outside and up inside the button.
+  // Start in unselected state
+  pushButton.SetProperty(Button::Property::SELECTED, false);
+
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(pushButton.GetPropertyIndex("selected")), false, TEST_LOCATION);
 
   gPushButtonSelectedState = false;
-  event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointDownOutside() );
-  application.ProcessEvent( event );
+  event                    = Dali::Integration::TouchEvent();
+  event.AddPoint(GetPointDownOutside());
+  application.ProcessEvent(event);
 
   event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointEnter() );
-  application.ProcessEvent( event );
+  event.AddPoint(GetPointEnter());
+  application.ProcessEvent(event);
 
   event = Dali::Integration::TouchEvent();
-  event.AddPoint( GetPointUpInside() );
-  application.ProcessEvent( event );
-
-  DALI_TEST_CHECK( !gPushButtonSelectedState );
-  END_TEST;
-}
-
-int UtcDaliPushButtonPropertySetIconAlignment(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline(" UtcDaliPushButtonPropertySetIconAlignment");
-
-  PushButton pushButton = PushButton::New();
-  pushButton.SetProperty( Toolkit::PushButton::Property::ICON_ALIGNMENT, "TOP" );
-  DALI_TEST_EQUALS( pushButton.GetProperty<std::string>( Toolkit::PushButton::Property::ICON_ALIGNMENT ), "TOP", TEST_LOCATION );
-
-  pushButton.SetProperty( Toolkit::PushButton::Property::ICON_ALIGNMENT, "RIGHT" );
-  DALI_TEST_EQUALS( pushButton.GetProperty<std::string>( Toolkit::PushButton::Property::ICON_ALIGNMENT ), "RIGHT", TEST_LOCATION );
+  event.AddPoint(GetPointUpInside());
+  application.ProcessEvent(event);
 
+  DALI_TEST_CHECK(!gPushButtonSelectedState);
   END_TEST;
 }
 
@@ -649,11 +728,11 @@ int UtcDaliPushButtonPropertySetLabelPadding(void)
   tet_infoline(" UtcDaliPushButtonPropertySetLabelPadding");
 
   PushButton pushButton = PushButton::New();
-  pushButton.SetProperty( Toolkit::PushButton::Property::LABEL_PADDING, Vector4( 1.0f, 1.0f, 1.0f, 1.0f ) );
-  DALI_TEST_EQUALS( pushButton.GetProperty<Vector4>( Toolkit::PushButton::Property::LABEL_PADDING ), Vector4( 1.0f, 1.0f, 1.0f, 1.0f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  pushButton.SetProperty(Toolkit::PushButton::Property::LABEL_PADDING, Vector4(1.0f, 1.0f, 1.0f, 1.0f));
+  DALI_TEST_EQUALS(pushButton.GetProperty<Vector4>(Toolkit::PushButton::Property::LABEL_PADDING), Vector4(1.0f, 1.0f, 1.0f, 1.0f), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
 
-  pushButton.SetProperty( Toolkit::PushButton::Property::LABEL_PADDING, Vector4( 10.0f, 10.0f, 10.0f, 10.0f ) );
-  DALI_TEST_EQUALS( pushButton.GetProperty<Vector4>( Toolkit::PushButton::Property::LABEL_PADDING ), Vector4( 10.0f, 10.0f, 10.0f, 10.0f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  pushButton.SetProperty(Toolkit::PushButton::Property::LABEL_PADDING, Vector4(10.0f, 10.0f, 10.0f, 10.0f));
+  DALI_TEST_EQUALS(pushButton.GetProperty<Vector4>(Toolkit::PushButton::Property::LABEL_PADDING), Vector4(10.0f, 10.0f, 10.0f, 10.0f), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
 
   END_TEST;
 }
@@ -664,11 +743,11 @@ int UtcDaliPushButtonPropertySetIconPadding(void)
   tet_infoline(" UtcDaliPushButtonPropertySetIconPadding");
 
   PushButton pushButton = PushButton::New();
-  pushButton.SetProperty( Toolkit::PushButton::Property::ICON_PADDING, Vector4( 1.0f, 1.0f, 1.0f, 1.0f ) );
-  DALI_TEST_EQUALS( pushButton.GetProperty<Vector4>( Toolkit::PushButton::Property::ICON_PADDING ), Vector4( 1.0f, 1.0f, 1.0f, 1.0f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  pushButton.SetProperty(Toolkit::PushButton::Property::ICON_PADDING, Vector4(1.0f, 1.0f, 1.0f, 1.0f));
+  DALI_TEST_EQUALS(pushButton.GetProperty<Vector4>(Toolkit::PushButton::Property::ICON_PADDING), Vector4(1.0f, 1.0f, 1.0f, 1.0f), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
 
-  pushButton.SetProperty( Toolkit::PushButton::Property::ICON_PADDING, Vector4( 10.0f, 10.0f, 10.0f, 10.0f ) );
-  DALI_TEST_EQUALS( pushButton.GetProperty<Vector4>( Toolkit::PushButton::Property::ICON_PADDING ), Vector4( 10.0f, 10.0f, 10.0f, 10.0f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  pushButton.SetProperty(Toolkit::PushButton::Property::ICON_PADDING, Vector4(10.0f, 10.0f, 10.0f, 10.0f));
+  DALI_TEST_EQUALS(pushButton.GetProperty<Vector4>(Toolkit::PushButton::Property::ICON_PADDING), Vector4(10.0f, 10.0f, 10.0f, 10.0f), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
 
   END_TEST;
 }
@@ -682,80 +761,115 @@ int UtcDaliPushButtonPaddingLayout(void)
   // The icon and label are each enabled and disabled to confirm the correct padding is used.
   PushButton pushButton = PushButton::New();
 
-  pushButton.SetProperty( Toolkit::PushButton::Property::LABEL_PADDING, Vector4( 10.0f, 10.0f, 10.0f, 10.0f ) );
-  pushButton.SetProperty( Toolkit::PushButton::Property::ICON_PADDING, Vector4( 20.0f, 20.0f, 20.0f, 20.0f ) );
+  const Vector4 TEST_ICON_PADDING(20.0f, 20.0f, 20.0f, 20.0f);
+  const Vector4 TEST_LABEL_PADDING(10.0f, 10.0f, 10.0f, 10.0f);
+
+  // Get actual size of test image
+  ImageDimensions testImageSize = Dali::GetClosestImageSize(TEST_IMAGE_ONE);
+  const Vector2   TEST_IMAGE_SIZE(testImageSize.GetWidth(), testImageSize.GetHeight());
 
-  pushButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
-  pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
-  pushButton.SetPosition( 0.0f, 0.0f );
-  pushButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
+  pushButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+  pushButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+  pushButton.SetProperty(Actor::Property::POSITION, Vector2(0.0f, 0.0f));
+  pushButton.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS);
 
-  Stage::GetCurrent().Add( pushButton );
+  application.GetScene().Add(pushButton);
 
   application.SendNotification();
   application.Render();
 
   // First test the size is zero.
   // No padding should be added as there is no label or icon.
-  Vector2 size( Vector2::ZERO );
-  size.width = pushButton.GetRelayoutSize( Dimension::WIDTH );
-  size.height = pushButton.GetRelayoutSize( Dimension::HEIGHT );
+  Vector2 size(Vector2::ZERO);
+  size.width  = pushButton.GetRelayoutSize(Dimension::WIDTH);
+  size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+  tet_printf("Button Natural Size(%f,%f)\n", pushButton.GetNaturalSize().width, pushButton.GetNaturalSize().height);
+
+  DALI_TEST_EQUALS(size, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
+
+  // Check label only padding
+  pushButton.SetProperty(Toolkit::Button::Property::LABEL, "Label");
 
-  DALI_TEST_EQUALS( size, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  application.SendNotification();
+  application.Render();
+
+  Vector2 sizeWithLabelWithoutPadding(Vector2::ZERO);
+  sizeWithLabelWithoutPadding.width  = pushButton.GetRelayoutSize(Dimension::WIDTH);
+  sizeWithLabelWithoutPadding.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
 
-  // Check label only padding.
-  pushButton.SetLabelText( "Label" );
+  tet_printf("Button RelayoutSize label without padding (%f,%f)\n", sizeWithLabelWithoutPadding.width, sizeWithLabelWithoutPadding.height);
 
+  // Add label padding to label
+  pushButton.SetProperty(Toolkit::PushButton::Property::LABEL_PADDING, TEST_LABEL_PADDING);
   application.SendNotification();
   application.Render();
 
-  size.width = pushButton.GetRelayoutSize( Dimension::WIDTH );
-  size.height = pushButton.GetRelayoutSize( Dimension::HEIGHT );
+  Vector2 sizeLabelAndPadding(Vector2::ZERO);
+  sizeLabelAndPadding.width  = pushButton.GetRelayoutSize(Dimension::WIDTH);
+  sizeLabelAndPadding.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+  tet_printf("Button RelayoutSize after label padding(%f,%f)\n", sizeLabelAndPadding.width, sizeLabelAndPadding.height);
 
-  // We should not test against the exact label size, we just make sure it is larger than our label padding so we know the padding has been applied.
-  DALI_TEST_GREATER( size.width, 20.0f, TEST_LOCATION );
-  DALI_TEST_GREATER( size.height, 20.0f, TEST_LOCATION );
+  // If control size has increased beyond size of just label then padding has been applied
+  DALI_TEST_GREATER(sizeLabelAndPadding.width, sizeWithLabelWithoutPadding.width + TEST_LABEL_PADDING.x, TEST_LOCATION);
+  DALI_TEST_GREATER(sizeLabelAndPadding.height, sizeWithLabelWithoutPadding.height + TEST_LABEL_PADDING.w, TEST_LOCATION);
 
   // Re-initialise the button so we can setup icon-only padding.
   pushButton.Unparent();
   pushButton = PushButton::New();
 
-  pushButton.SetProperty( Toolkit::PushButton::Property::LABEL_PADDING, Vector4( 10.0f, 10.0f, 10.0f, 10.0f ) );
-  pushButton.SetProperty( Toolkit::PushButton::Property::ICON_PADDING, Vector4( 20.0f, 20.0f, 20.0f, 20.0f ) );
+  pushButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+  pushButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+  pushButton.SetProperty(Actor::Property::POSITION, Vector2(0.0f, 0.0f));
+  pushButton.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS);
 
-  pushButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
-  pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
-  pushButton.SetPosition( 0.0f, 0.0f );
-  pushButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
+  application.GetScene().Add(pushButton);
 
-  Stage::GetCurrent().Add( pushButton );
-
-  const char* INVALID_IMAGE_FILE_NAME = "invalid-image.jpg";
-  pushButton.SetProperty( Toolkit::PushButton::Property::ICON_ALIGNMENT, "RIGHT" );
-  pushButton.SetProperty( Toolkit::PushButton::Property::UNSELECTED_ICON, INVALID_IMAGE_FILE_NAME );
-  pushButton.SetProperty( Toolkit::PushButton::Property::SELECTED_ICON, INVALID_IMAGE_FILE_NAME );
+  pushButton.SetProperty(Toolkit::DevelButton::Property::LABEL_RELATIVE_ALIGNMENT, "BEGIN");
+  pushButton.SetProperty(Toolkit::Button::Property::UNSELECTED_VISUAL, TEST_IMAGE_ONE);
+  pushButton.SetProperty(Toolkit::Button::Property::SELECTED_VISUAL, TEST_IMAGE_ONE);
 
   application.SendNotification();
   application.Render();
 
-  size.width = pushButton.GetRelayoutSize( Dimension::WIDTH );
-  size.height = pushButton.GetRelayoutSize( Dimension::HEIGHT );
+  // Size of button with just icon
+  size.width  = pushButton.GetRelayoutSize(Dimension::WIDTH);
+  size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+  tet_printf("Button RelayoutSize with icon(%f,%f)\n", size.width, size.height);
+
+  pushButton.SetProperty(Toolkit::PushButton::Property::ICON_PADDING, TEST_ICON_PADDING);
 
-  DALI_TEST_EQUALS( size, Vector2( 40.0f, 40.0f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  application.SendNotification();
+  application.Render();
+  DALI_TEST_EQUALS(size, TEST_IMAGE_SIZE, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
+
+  size.width  = pushButton.GetRelayoutSize(Dimension::WIDTH);
+  size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+  tet_printf("Button RelayoutSize after icon padding(%f,%f)\n", size.width, size.height);
+  const Vector2 expectedIconAndPaddingSize(TEST_ICON_PADDING.x + TEST_ICON_PADDING.y + TEST_IMAGE_SIZE.width, TEST_ICON_PADDING.w + TEST_ICON_PADDING.z + TEST_IMAGE_SIZE.height);
+  DALI_TEST_EQUALS(size, expectedIconAndPaddingSize, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
 
   // Now test padding for both label and icon simultaneously.
-  pushButton.SetLabelText( "Label" );
+  pushButton.SetProperty(Toolkit::Button::Property::LABEL, "Label");
 
   application.SendNotification();
   application.Render();
 
-  size.width = pushButton.GetRelayoutSize( Dimension::WIDTH );
-  size.height = pushButton.GetRelayoutSize( Dimension::HEIGHT );
+  size.width  = pushButton.GetRelayoutSize(Dimension::WIDTH);
+  size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+  tet_printf("Button RelayoutSize after label added(%f,%f)\n", size.width, size.height);
 
-  // We should not test against the exact label size, we just make sure it is larger than our label padding so we know the padding has been applied.
-  // Note we only test the width as we are horizontally aligned and the label my be less high than the icon.
-  // Full directional alignment tests are done in UtcDaliPushButtonAlignmentLayout.
-  DALI_TEST_GREATER( size.width, 60.0f, TEST_LOCATION );
+  pushButton.SetProperty(Toolkit::PushButton::Property::LABEL_PADDING, TEST_LABEL_PADDING);
+
+  application.SendNotification();
+  application.Render();
+
+  size.width  = pushButton.GetRelayoutSize(Dimension::WIDTH);
+  size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+  tet_printf("Button RelayoutSize after icon and label padding(%f,%f)\n", size.width, size.height);
+
+  DALI_TEST_EQUALS(size.width, sizeLabelAndPadding.width + expectedIconAndPaddingSize.width, TEST_LOCATION);
+  // Test height of control is same as icon and padding, as Text is smaller than icon
+  DALI_TEST_EQUALS(size.height, expectedIconAndPaddingSize.height, TEST_LOCATION);
 
   END_TEST;
 }
@@ -790,43 +904,64 @@ int UtcDaliPushButtonAlignmentLayout(void)
    * |         |   v     +------------+   -
    * +---------+   -
    */
+
+  const Vector4 TEST_ICON_PADDING(70.0f, 70.0f, 70.0f, 70.0f);
+  const Vector4 TEST_LABEL_PADDING(30.0f, 30.0f, 30.0f, 30.0f);
+
+  // Get actual size of test image
+  ImageDimensions testImageSize = Dali::GetClosestImageSize(TEST_IMAGE_ONE);
+  const Vector2   TEST_IMAGE_SIZE(testImageSize.GetWidth(), testImageSize.GetHeight());
+
   PushButton pushButton = PushButton::New();
 
-  pushButton.SetProperty( Toolkit::PushButton::Property::LABEL_PADDING, Vector4( 30.0f, 30.0f, 30.0f, 30.0f ) );
-  pushButton.SetProperty( Toolkit::PushButton::Property::ICON_PADDING, Vector4( 75.0f, 75.0f, 75.0f, 75.0f ) );
+  pushButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+  pushButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+  pushButton.SetProperty(Actor::Property::POSITION, Vector2(0.0f, 0.0f));
+  pushButton.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS);
 
-  pushButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
-  pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
-  pushButton.SetPosition( 0.0f, 0.0f );
-  pushButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
+  application.GetScene().Add(pushButton);
 
-  Stage::GetCurrent().Add( pushButton );
+  // Add a label and get size of control
+  pushButton.SetProperty(Toolkit::Button::Property::LABEL, "Label");
+  application.SendNotification();
+  application.Render();
 
-  const char* INVALID_IMAGE_FILE_NAME = "invalid-image.jpg";
-  pushButton.SetProperty( Toolkit::PushButton::Property::ICON_ALIGNMENT, "RIGHT" );
-  pushButton.SetProperty( Toolkit::PushButton::Property::UNSELECTED_ICON, INVALID_IMAGE_FILE_NAME );
-  pushButton.SetProperty( Toolkit::PushButton::Property::SELECTED_ICON, INVALID_IMAGE_FILE_NAME );
+  // First get the size of control with just label
+  Vector2 justLabelSize(Vector2::ZERO);
+  justLabelSize.width  = pushButton.GetRelayoutSize(Dimension::WIDTH);
+  justLabelSize.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+  tet_printf("Button RelayoutSize with just label and no padding(%f,%f)\n", justLabelSize.width, justLabelSize.height);
 
+  pushButton.SetProperty(Toolkit::PushButton::Property::LABEL_PADDING, TEST_LABEL_PADDING);
   application.SendNotification();
   application.Render();
 
-  // First get the base size (without label).
-  Vector2 baseSize( Vector2::ZERO );
-  baseSize.width = pushButton.GetRelayoutSize( Dimension::WIDTH );
-  baseSize.height = pushButton.GetRelayoutSize( Dimension::HEIGHT );
+  // Size of Label and Padding
+  Vector2 expectedLabelAndPaddingSize(Vector2::ZERO);
+  expectedLabelAndPaddingSize.width  = justLabelSize.width + TEST_LABEL_PADDING.x + TEST_LABEL_PADDING.y;
+  expectedLabelAndPaddingSize.height = justLabelSize.height + TEST_LABEL_PADDING.w + TEST_LABEL_PADDING.z;
+
+  Vector2 labelAndPaddingSize(Vector2::ZERO);
+  labelAndPaddingSize.width  = pushButton.GetRelayoutSize(Dimension::WIDTH);
+  labelAndPaddingSize.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+
+  DALI_TEST_EQUALS(labelAndPaddingSize, expectedLabelAndPaddingSize, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
 
-  DALI_TEST_EQUALS( baseSize, Vector2( 150.0f, 150.0f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  const Vector2 testImageWithPaddingSize = Vector2((TEST_IMAGE_SIZE.width + TEST_ICON_PADDING.x + TEST_ICON_PADDING.y),
+                                                   (TEST_IMAGE_SIZE.height + TEST_ICON_PADDING.w + TEST_ICON_PADDING.z));
 
-  // Add a label to cause size to be modified in the direction of alignment.
-  pushButton.SetLabelText( "Label" );
+  // Add Icon and set its alignment
+  pushButton.SetProperty(Toolkit::DevelButton::Property::LABEL_RELATIVE_ALIGNMENT, "BEGIN");
+  pushButton.SetProperty(Toolkit::Button::Property::UNSELECTED_VISUAL, TEST_IMAGE_ONE);
+  pushButton.SetProperty(Toolkit::Button::Property::SELECTED_VISUAL, TEST_IMAGE_ONE);
+  pushButton.SetProperty(Toolkit::PushButton::Property::ICON_PADDING, TEST_ICON_PADDING);
 
   application.SendNotification();
   application.Render();
 
-  Vector2 size( Vector2::ZERO );
-  size.width = pushButton.GetRelayoutSize( Dimension::WIDTH );
-  size.height = pushButton.GetRelayoutSize( Dimension::HEIGHT );
-
+  Vector2 size(Vector2::ZERO);
+  size.width  = pushButton.GetRelayoutSize(Dimension::WIDTH);
+  size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
 
   /*
    * Test Icon right alignment.
@@ -841,18 +976,17 @@ int UtcDaliPushButtonAlignmentLayout(void)
    *  |............+         |
    *  +------------+---------+
    */
-  DALI_TEST_GREATER( size.width, 150.0f + 60.0f, TEST_LOCATION );
-  DALI_TEST_EQUALS( size.height, 150.0f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS(size.width, (testImageWithPaddingSize.width + labelAndPaddingSize.width), TEST_LOCATION);
+  DALI_TEST_EQUALS(size.height, (std::max(testImageWithPaddingSize.height, labelAndPaddingSize.height)), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
 
   // Now test left alignment matches right for size.
-  pushButton.SetProperty( Toolkit::PushButton::Property::ICON_ALIGNMENT, "LEFT" );
+  pushButton.SetProperty(Toolkit::DevelButton::Property::LABEL_RELATIVE_ALIGNMENT, "END");
 
   application.SendNotification();
   application.Render();
 
-  Vector2 compareSize( Vector2::ZERO );
-  compareSize.width = pushButton.GetRelayoutSize( Dimension::WIDTH );
-  compareSize.height = pushButton.GetRelayoutSize( Dimension::HEIGHT );
+  size.width  = pushButton.GetRelayoutSize(Dimension::WIDTH);
+  size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
 
   /*
    * Test Icon left alignment.
@@ -867,20 +1001,11 @@ int UtcDaliPushButtonAlignmentLayout(void)
    *  |         +............|
    *  +---------+------------+
    */
-  DALI_TEST_EQUALS( size, compareSize, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-
-  // Test top alignment.
-  pushButton.SetProperty( Toolkit::PushButton::Property::ICON_ALIGNMENT, "TOP" );
-
-  application.SendNotification();
-  application.Render();
-
-  compareSize.width = pushButton.GetRelayoutSize( Dimension::WIDTH );
-  compareSize.height = pushButton.GetRelayoutSize( Dimension::HEIGHT );
+  DALI_TEST_EQUALS(size.width, (testImageWithPaddingSize.width + labelAndPaddingSize.width), TEST_LOCATION);
+  DALI_TEST_EQUALS(size.height, (std::max(testImageWithPaddingSize.height, labelAndPaddingSize.height)), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
 
+  tet_infoline(" Test Icon TOP alignment - Width grows to largest of Icon or label (plus padding)");
   /*
-   * Test Icon top alignment.
-   * Width grows to largest of Icon or Label (+ padding).
    *
    *  +---------+
    *  |         |
@@ -894,19 +1019,26 @@ int UtcDaliPushButtonAlignmentLayout(void)
    *  |         |
    *  +---------+
    *
-   *  Note: We subtract a small number as we want to do a >= test.
    */
-  DALI_TEST_GREATER( size.width, 150.0f - Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_GREATER( compareSize.height, 150.0f + 60.0f, TEST_LOCATION );
 
-  // Test bottom alignment.
-  pushButton.SetProperty( Toolkit::PushButton::Property::ICON_ALIGNMENT, "BOTTOM" );
+  tet_infoline("SetProperty on LABEL_RELATIVE_ALIGNMENT should relayout the Button");
+  pushButton.SetProperty(Toolkit::DevelButton::Property::LABEL_RELATIVE_ALIGNMENT, "BOTTOM");
 
   application.SendNotification();
   application.Render();
 
-  size.width = pushButton.GetRelayoutSize( Dimension::WIDTH );
-  size.height = pushButton.GetRelayoutSize( Dimension::HEIGHT );
+  size.width  = pushButton.GetRelayoutSize(Dimension::WIDTH);
+  size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+
+  tet_printf("Natural width (%f)\n", pushButton.GetNaturalSize().width);
+  tet_printf("Natural height (%f)\n", pushButton.GetNaturalSize().height);
+
+  tet_printf(" UtcDaliPushButtonAlignmentLayout Top layout - Image and Padding size (%f,%f)\n", testImageWithPaddingSize.width, testImageWithPaddingSize.height);
+  tet_printf(" UtcDaliPushButtonAlignmentLayout Top layout - Text and Padding size (%f,%f)\n", labelAndPaddingSize.width, labelAndPaddingSize.height);
+
+  DALI_TEST_EQUALS(size.width, (std::max(testImageWithPaddingSize.width, labelAndPaddingSize.width)), TEST_LOCATION);
+
+  DALI_TEST_EQUALS(size.height, (testImageWithPaddingSize.height + labelAndPaddingSize.height), TEST_LOCATION);
 
   /*
    * Test Icon bottom alignment.
@@ -924,280 +1056,350 @@ int UtcDaliPushButtonAlignmentLayout(void)
    *  |         |
    *  +---------+
    */
-  DALI_TEST_EQUALS( size, compareSize, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  tet_infoline(" Test Icon BOTTOM alignment - Width grows to largest of Icon or label (plus padding)");
+  pushButton.SetProperty(Toolkit::DevelButton::Property::LABEL_RELATIVE_ALIGNMENT, "TOP");
+
+  application.SendNotification();
+  application.Render();
+
+  size.width  = pushButton.GetRelayoutSize(Dimension::WIDTH);
+  size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+
+  DALI_TEST_EQUALS(size.width, (std::max(testImageWithPaddingSize.width, labelAndPaddingSize.width)), TEST_LOCATION);
+  DALI_TEST_EQUALS(size.height, (testImageWithPaddingSize.height + labelAndPaddingSize.height), TEST_LOCATION);
 
   END_TEST;
 }
 
-int UtcDaliPushButtonSetButtonImageP(void)
+int UtcDaliPushButtonSetUnSelectedVisual01P(void)
 {
+  tet_infoline(" Test adding a visual for the UNSELECTED_VISUAL property, removing Button from stage and counting renderers\n");
   ToolkitTestApplication application;
 
-  PushButton button = PushButton::New();
-  Stage::GetCurrent().Add( button );
+  PushButton pushButton = PushButton::New();
+  pushButton.SetProperty(Actor::Property::SIZE, Vector2(BUTTON_SIZE_TO_GET_INSIDE_TOUCH_EVENTS));
 
-  try
-  {
-    button.SetButtonImage( ImageView::New() );
-    DALI_TEST_CHECK( true );
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK( false );
-  }
+  application.GetScene().Add(pushButton);
 
-  END_TEST;
-}
+  Property::Map propertyMap;
+  propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
+  propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
 
-int UtcDaliPushButtonSetButtonImageN(void)
-{
-  ToolkitTestApplication application;
+  pushButton.SetProperty(Toolkit::Button::Property::UNSELECTED_BACKGROUND_VISUAL, propertyMap);
 
-  PushButton button;
+  tet_infoline(" UNSELECTED_VISUAL Added to button\n");
 
-  try
-  {
-    button.SetSelectedImage( ImageView::New() );
-    DALI_TEST_CHECK( false );
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK( true );
-  }
+  application.SendNotification();
+  application.Render(0);
 
-  END_TEST;
-}
+  unsigned int rendererCount = pushButton.GetRendererCount();
+  tet_printf("After adding UNSELECTED_BACKGROUND_VISUAL the renderer count is(%d)\n", rendererCount);
 
-int UtcDaliPushButtonSetBackgroundImageP(void)
-{
-  ToolkitTestApplication application;
+  DALI_TEST_EQUALS(pushButton.GetRendererCount(), 1, TEST_LOCATION);
 
-  PushButton button = PushButton::New();
-  Stage::GetCurrent().Add( button );
+  tet_printf("Remove button from stage\n");
 
-  try
-  {
-    button.SetBackgroundImage( ImageView::New() );
-    DALI_TEST_CHECK( true );
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK( false );
-  }
+  application.GetScene().Remove(pushButton);
+
+  rendererCount = pushButton.GetRendererCount();
+  tet_printf("After removing pushbutton from stage the renderer count is(%d)\n ", rendererCount);
+
+  DALI_TEST_EQUALS(pushButton.GetRendererCount(), 0, TEST_LOCATION);
+
+  tet_printf("After removing pushbutton from stage the renderer count is(%d)\n ", rendererCount);
+
+  Property::Map propertyMap2;
+  propertyMap2.Insert(Visual::Property::TYPE, Visual::COLOR);
+  propertyMap2.Insert(ColorVisual::Property::MIX_COLOR, Color::RED);
+  pushButton.SetProperty(Toolkit::Button::Property::UNSELECTED_VISUAL, propertyMap2);
+
+  tet_printf("Added UNSELECTED_VISUAL and add button back to Stage\n");
+
+  application.GetScene().Add(pushButton);
+
+  tet_printf("With UNSELECTED_BACKGROUND_VISUAL and UNSELECTED_VISUAL the renderer count is(%d)\n", pushButton.GetRendererCount());
+
+  DALI_TEST_EQUALS(pushButton.GetRendererCount(), 2, TEST_LOCATION);
 
   END_TEST;
 }
 
-int UtcDaliPushButtonSetBackgroundImageN(void)
+int UtcDaliPushButtonSetSelectedVisualN(void)
 {
+  tet_infoline(" Test adding a broken visual for the UNSELECTED_VISUAL property");
+
   ToolkitTestApplication application;
 
-  PushButton button;
+  PushButton pushButton = PushButton::New();
 
-  try
-  {
-    button.SetBackgroundImage( ImageView::New() );
-    DALI_TEST_CHECK( false );
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK( true );
-  }
+  pushButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+  pushButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+  pushButton.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS);
+
+  application.GetScene().Add(pushButton);
+  application.SendNotification();
+  application.Render(0);
+
+  unsigned int preRendererCount = pushButton.GetRendererCount();
+  tet_printf("RendererCount prior to adding visual(%d)\n", preRendererCount);
+  DALI_TEST_EQUALS(preRendererCount, 0, TEST_LOCATION);
+
+  application.GetScene().Remove(pushButton);
+  application.SendNotification();
+  application.Render(0);
+
+  Property::Map colorMap;
+  const int     BROKEN_VISUAL_TYPE = 999999999;
+
+  colorMap.Insert(Visual::Property::TYPE, BROKEN_VISUAL_TYPE);
+  colorMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
+  colorMap.Insert(BorderVisual::Property::SIZE, 5.f);
+  pushButton.SetProperty(Toolkit::Button::Property::UNSELECTED_VISUAL, colorMap);
+
+  application.GetScene().Add(pushButton);
+  application.SendNotification();
+  application.Render(0);
+
+  unsigned int postRendererCount = pushButton.GetRendererCount();
+  tet_printf("RendererCount post broken visual (%d)\n", postRendererCount);
+  DALI_TEST_EQUALS(postRendererCount, 0, TEST_LOCATION);
 
   END_TEST;
 }
 
-int UtcDaliPushButtonSetSelectedImageP(void)
+int UtcDaliPushButtonToggleSignalP(void)
 {
   ToolkitTestApplication application;
+  tet_infoline(" UtcDaliButtonToggleSignalP Ensure Signals emitted");
 
   PushButton button = PushButton::New();
-  Stage::GetCurrent().Add( button );
+  button.SetProperty(Button::Property::TOGGLABLE, true);
 
-  try
-  {
-    button.SetSelectedImage( ImageView::New() );
-    DALI_TEST_CHECK( true );
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK( false );
-  }
+  SetupButtonForTestTouchEvents(application, button, true);
+
+  application.GetScene().Add(button);
+
+  application.SendNotification();
+  application.Render();
+
+  // connect to its signal
+  button.ClickedSignal().Connect(&PushButtonClicked);
+  gPushButtonClicked = false;
+
+  tet_infoline(" Touch down and up within button");
+  Dali::Integration::TouchEvent event;
+  event = Dali::Integration::TouchEvent();
+  event.AddPoint(GetPointDownInside());
+  application.ProcessEvent(event);
+
+  event = Dali::Integration::TouchEvent();
+  event.AddPoint(GetPointUpInside());
+  application.ProcessEvent(event);
+
+  DALI_TEST_EQUALS(gPushButtonClicked, true, TEST_LOCATION);
 
   END_TEST;
 }
 
-int UtcDaliPushButtonSetSelectedImageN(void)
+// Deprecated API Tests
+
+int UtcDaliPushButtonSetGetAutoRepeating(void)
 {
   ToolkitTestApplication application;
+  tet_infoline(" UtcDaliPushButtonSetGetAutoRepeating");
 
-  PushButton button;
+  PushButton pushButton = PushButton::New();
 
-  try
-  {
-    button.SetSelectedImage( ImageView::New() );
-    DALI_TEST_CHECK( false );
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK( true );
-  }
+  pushButton.SetProperty(Button::Property::AUTO_REPEATING, true);
 
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::AUTO_REPEATING), true, TEST_LOCATION);
+
+  pushButton.SetProperty(Button::Property::AUTO_REPEATING, false);
+
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::AUTO_REPEATING), false, TEST_LOCATION);
+
+  pushButton.SetProperty(Button::Property::AUTO_REPEATING, true);
+
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::AUTO_REPEATING), true, TEST_LOCATION);
   END_TEST;
 }
 
-int UtcDaliPushButtonSetSelectedBackgroundImageP(void)
+int UtcDaliPushButtonSetGetTogglableButton(void)
 {
   ToolkitTestApplication application;
+  tet_infoline(" UtcDaliPushButtonSetGetTogglableButton");
 
-  PushButton button = PushButton::New();
-  Stage::GetCurrent().Add( button );
+  PushButton pushButton = PushButton::New();
 
-  try
-  {
-    button.SetSelectedBackgroundImage( ImageView::New() );
-    DALI_TEST_CHECK( true );
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK( false );
-  }
+  pushButton.SetProperty(Button::Property::TOGGLABLE, true);
+
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::TOGGLABLE), true, TEST_LOCATION);
 
+  pushButton.SetProperty(Button::Property::TOGGLABLE, false);
+
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::TOGGLABLE), false, TEST_LOCATION);
+
+  pushButton.SetProperty(Button::Property::TOGGLABLE, true);
+
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::TOGGLABLE), true, TEST_LOCATION);
   END_TEST;
 }
 
-int UtcDaliPushButtonSetSelectedBackgroundImageN(void)
+int UtcDaliPushButtonSetGetAutoRepeatingAndTogglableButton(void)
 {
   ToolkitTestApplication application;
+  tet_infoline(" UtcDaliPushButtonSetGetAutoRepeatingAndTogglableButton");
 
-  PushButton button;
+  PushButton pushButton = PushButton::New();
 
-  try
-  {
-    button.SetSelectedBackgroundImage( ImageView::New() );
-    DALI_TEST_CHECK( false );
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK( true );
-  }
+  pushButton.SetProperty(Button::Property::AUTO_REPEATING, true);
+  pushButton.SetProperty(Button::Property::TOGGLABLE, true);
+
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::TOGGLABLE), true, TEST_LOCATION);
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::AUTO_REPEATING), false, TEST_LOCATION);
+
+  pushButton.SetProperty(Button::Property::TOGGLABLE, true);
+  pushButton.SetProperty(Button::Property::AUTO_REPEATING, true);
+
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::AUTO_REPEATING), true, TEST_LOCATION);
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::TOGGLABLE), false, TEST_LOCATION);
 
   END_TEST;
 }
 
-int UtcDaliPushButtonSetDisabledBackgroundImageP(void)
+int UtcDaliPushButtonSetGetSelected01(void)
 {
   ToolkitTestApplication application;
+  tet_infoline(" UtcDaliPushButtonSetGetSelected01");
 
-  PushButton button = PushButton::New();
-  Stage::GetCurrent().Add( button );
+  PushButton pushButton = PushButton::New();
 
-  try
-  {
-    button.SetDisabledBackgroundImage( ImageView::New() );
-    DALI_TEST_CHECK( true );
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK( false );
-  }
+  pushButton.SetProperty(Button::Property::TOGGLABLE, true);
+  pushButton.StateChangedSignal().Connect(&PushButtonSelected);
 
+  gPushButtonSelectedState = false;
+  pushButton.SetProperty(Button::Property::SELECTED, true);
+
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::SELECTED), true, TEST_LOCATION);
+  DALI_TEST_CHECK(gPushButtonSelectedState);
+
+  pushButton.SetProperty(Button::Property::SELECTED, false);
+
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::SELECTED), false, TEST_LOCATION);
+  DALI_TEST_CHECK(!gPushButtonSelectedState);
+
+  pushButton.SetProperty(Button::Property::SELECTED, true);
+
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::SELECTED), true, TEST_LOCATION);
+  DALI_TEST_CHECK(gPushButtonSelectedState);
   END_TEST;
 }
 
-int UtcDaliPushButtonSetDisabledBackgroundImageN(void)
+int UtcDaliPushButtonSetGetSelected02(void)
 {
   ToolkitTestApplication application;
+  tet_infoline(" UtcDaliPushButtonSetGetSelected02");
 
-  PushButton button;
+  PushButton pushButton = PushButton::New();
 
-  try
-  {
-    button.SetDisabledBackgroundImage( ImageView::New() );
-    DALI_TEST_CHECK( false );
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK( true );
-  }
+  tet_infoline(" Set Toggle feature off");
+  pushButton.SetProperty(Button::Property::TOGGLABLE, false);
+  pushButton.StateChangedSignal().Connect(&PushButtonSelected);
+
+  gPushButtonSelectedState = false;
+  tet_infoline(" Try to set to selected, expecting failure as not a toggle button");
+  pushButton.SetProperty(Button::Property::SELECTED, true);
+
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::SELECTED), false, TEST_LOCATION);
+  DALI_TEST_CHECK(!gPushButtonSelectedState);
+
+  pushButton.SetProperty(Button::Property::SELECTED, false);
+
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::SELECTED), false, TEST_LOCATION);
+  DALI_TEST_CHECK(!gPushButtonSelectedState);
+
+  pushButton.SetProperty(Button::Property::SELECTED, true);
+
+  DALI_TEST_EQUALS(pushButton.GetProperty<bool>(Button::Property::SELECTED), false, TEST_LOCATION);
+  DALI_TEST_CHECK(!gPushButtonSelectedState);
 
   END_TEST;
 }
 
-int UtcDaliPushButtonSetDisabledImageP(void)
+int UtcDaliPushButtonSetGetAutorepeatingDelayValues01(void)
 {
   ToolkitTestApplication application;
+  tet_infoline(" UtcDaliPushButtonSetGetAutorepeatingDelayValues01");
 
-  PushButton button = PushButton::New();
-  Stage::GetCurrent().Add( button );
+  PushButton pushButton = PushButton::New();
 
-  try
-  {
-    button.SetDisabledImage( ImageView::New() );
-    DALI_TEST_CHECK( true );
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK( false );
-  }
+  pushButton.SetProperty(Button::Property::AUTO_REPEATING, true);
+
+  pushButton.SetProperty(Button::Property::INITIAL_AUTO_REPEATING_DELAY, 1.f);
+  DALI_TEST_EQUALS(pushButton.GetProperty<float>(Button::Property::INITIAL_AUTO_REPEATING_DELAY), 1.f, TEST_LOCATION);
+
+  pushButton.SetProperty(Button::Property::NEXT_AUTO_REPEATING_DELAY, 1.f);
 
+  DALI_TEST_EQUALS(pushButton.GetProperty<float>(Button::Property::NEXT_AUTO_REPEATING_DELAY), 1.f, TEST_LOCATION);
   END_TEST;
 }
 
-int UtcDaliPushButtonSetDisabledImageN(void)
+int UtcDaliPushButtonSetGetAutorepeatingDelayValues02(void)
 {
   ToolkitTestApplication application;
+  tet_infoline(" UtcDaliPushButtonSetGetAutorepeatingDelayValues02");
 
-  PushButton button;
+  PushButton pushButton = PushButton::New();
+
+  bool assert1(false);
+  bool assert2(false);
+
+  pushButton.SetProperty(Button::Property::AUTO_REPEATING, true);
 
   try
   {
-    button.SetDisabledImage( ImageView::New() );
-    DALI_TEST_CHECK( false );
+    pushButton.SetProperty(Button::Property::INITIAL_AUTO_REPEATING_DELAY, -1.f);
   }
-  catch(...)
+  catch(Dali::DaliException& e)
   {
-    DALI_TEST_CHECK( true );
+    DALI_TEST_PRINT_ASSERT(e);
+    DALI_TEST_EQUALS(e.condition, "initialAutoRepeatingDelay > 0.f", TEST_LOCATION);
+    assert1 = true;
   }
 
-  END_TEST;
-}
-
-int UtcDaliPushButtonSetDisabledSelectedImageP(void)
-{
-  ToolkitTestApplication application;
-
-  PushButton button = PushButton::New();
-  Stage::GetCurrent().Add( button );
-
   try
   {
-    button.SetDisabledSelectedImage( ImageView::New() );
-    DALI_TEST_CHECK( true );
+    pushButton.SetProperty(Button::Property::NEXT_AUTO_REPEATING_DELAY, -1.f);
   }
-  catch(...)
+  catch(Dali::DaliException& e)
   {
-    DALI_TEST_CHECK( false );
+    DALI_TEST_PRINT_ASSERT(e);
+    DALI_TEST_EQUALS(e.condition, "nextAutoRepeatingDelay > 0.f", TEST_LOCATION);
+    assert2 = true;
   }
 
+  DALI_TEST_CHECK(assert1 && assert2);
   END_TEST;
 }
 
-int UtcDaliPushButtonSetDisabledSelectedImageN(void)
+int UtcDaliPushButtonSetLabelText(void)
 {
   ToolkitTestApplication application;
+  tet_infoline(" UtcDaliPushButtonSetLabelText");
 
-  PushButton button;
+  const std::string STR("Hola!");
 
-  try
-  {
-    button.SetDisabledSelectedImage( ImageView::New() );
-    DALI_TEST_CHECK( false );
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK( true );
-  }
+  PushButton pushButton = PushButton::New();
+
+  pushButton.SetProperty(Toolkit::Button::Property::LABEL,
+                         Property::Map().Add(Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT).Add(Toolkit::TextVisual::Property::POINT_SIZE, 15.0f));
+
+  application.SendNotification();
+  application.Render();
+
+  pushButton.SetProperty(Button::Property::LABEL, STR);
+
+  DALI_TEST_EQUALS(GetButtonText(pushButton), STR, TEST_LOCATION);
 
   END_TEST;
 }