Removed OnButton virtual functions and simplified RadioButton logic
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-PushButton.cpp
index a191f43..031e997 100644 (file)
@@ -41,6 +41,7 @@ void utc_dali_toolkit_pushbutton_cleanup(void)
 
 namespace
 {
+static const char* TEST_IMAGE_ONE = TEST_RESOURCE_DIR "/gallery-small-1.jpg";
 
 static bool gPushButtonSelectedState = false;
 bool PushButtonSelected( Button button )
@@ -211,6 +212,29 @@ int UtcDaliPushButtonSetGetAutoRepeating(void)
   END_TEST;
 }
 
+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();
+
+  const bool INITIAL_TOGGLE_VALUE = true;
+  const bool INITIAL_SELECTED_VALUE = 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 );
+
+  END_TEST;
+}
+
 int UtcDaliPushButtonSetGetTogglableButton(void)
 {
   ToolkitTestApplication application;
@@ -572,7 +596,7 @@ int UtcDaliPushButtonSelected(void)
   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() );
@@ -586,9 +610,12 @@ int UtcDaliPushButtonSelected(void)
   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_CHECK( !pushButton.IsSelected());
 
   gPushButtonSelectedState = false;
   event = Dali::Integration::TouchEvent();
@@ -661,8 +688,9 @@ 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 );
+  const Vector2 TEST_IMAGE_SIZE = Vector2( 5.0f, 5.0f);
 
   pushButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
   pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
@@ -679,29 +707,40 @@ int UtcDaliPushButtonPaddingLayout(void)
   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.
+  // Check label only padding
   pushButton.SetLabelText( "Label" );
 
   application.SendNotification();
   application.Render();
 
-  size.width = pushButton.GetRelayoutSize( Dimension::WIDTH );
-  size.height = pushButton.GetRelayoutSize( Dimension::HEIGHT );
+  Vector2 sizeWithLabelWithoutPadding( Vector2::ZERO );
+  sizeWithLabelWithoutPadding.width = pushButton.GetRelayoutSize( Dimension::WIDTH );
+  sizeWithLabelWithoutPadding.height = pushButton.GetRelayoutSize( Dimension::HEIGHT );
+
+  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();
+
+  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.SetAnchorPoint( AnchorPoint::TOP_LEFT );
   pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
   pushButton.SetPosition( 0.0f, 0.0f );
@@ -709,32 +748,53 @@ int UtcDaliPushButtonPaddingLayout(void)
 
   Stage::GetCurrent().Add( pushButton );
 
-  const char* INVALID_IMAGE_FILE_NAME = "invalid-image.jpg";
+  TestPlatformAbstraction& platform = application.GetPlatform();
+  platform.SetClosestImageSize( TEST_IMAGE_SIZE );
+
   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::PushButton::Property::UNSELECTED_ICON, TEST_IMAGE_ONE );
+  pushButton.SetProperty( Toolkit::PushButton::Property::SELECTED_ICON, TEST_IMAGE_ONE );
 
   application.SendNotification();
   application.Render();
 
+  // 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 );
 
-  DALI_TEST_EQUALS( size, Vector2( 40.0f, 40.0f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  pushButton.SetProperty( Toolkit::PushButton::Property::ICON_PADDING, TEST_ICON_PADDING );
+
+  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" );
+  application.SendNotification();
+  application.Render();
+
+  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 );
+
+  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 );
 
-  // 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 );
+  DALI_TEST_EQUALS( size.width, sizeLabelAndPadding.width + expectedIconAndPaddingSize.width, TEST_LOCATION );
+  DALI_TEST_GREATER( size.height, expectedIconAndPaddingSize.width, TEST_LOCATION ); // Test height of control is greater than icon and padding. As Text set to larger values.
 
   END_TEST;
 }
@@ -769,10 +829,12 @@ int UtcDaliPushButtonAlignmentLayout(void)
    * |         |   v     +------------+   -
    * +---------+   -
    */
-  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 ) );
+  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 );
+  const Vector2 TEST_IMAGE_SIZE = Vector2( 10.0f, 10.0f);
+
+  PushButton pushButton = PushButton::New();
 
   pushButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
   pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
@@ -781,23 +843,43 @@ int UtcDaliPushButtonAlignmentLayout(void)
 
   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 );
+  // Add a label and get size of control
+  pushButton.SetLabelText( "Label" );
+  application.SendNotification();
+  application.Render();
 
+  // 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;
 
-  DALI_TEST_EQUALS( baseSize, Vector2( 150.0f, 150.0f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  Vector2 labelAndPaddingSize( Vector2::ZERO );
+  labelAndPaddingSize.width = pushButton.GetRelayoutSize( Dimension::WIDTH );
+  labelAndPaddingSize.height = pushButton.GetRelayoutSize( Dimension::HEIGHT );
 
-  // Add a label to cause size to be modified in the direction of alignment.
-  pushButton.SetLabelText( "Label" );
+  DALI_TEST_EQUALS( labelAndPaddingSize, expectedLabelAndPaddingSize , 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 ) );
+
+  TestPlatformAbstraction& platform = application.GetPlatform();
+  platform.SetClosestImageSize( TEST_IMAGE_SIZE );
+
+  // Add Icon and set its alignment
+  pushButton.SetProperty( Toolkit::PushButton::Property::ICON_ALIGNMENT, "RIGHT" );
+  pushButton.SetProperty( Toolkit::PushButton::Property::UNSELECTED_ICON, TEST_IMAGE_ONE );
+  pushButton.SetProperty( Toolkit::PushButton::Property::SELECTED_ICON, TEST_IMAGE_ONE );
+  pushButton.SetProperty( Toolkit::PushButton::Property::ICON_PADDING, TEST_ICON_PADDING );
 
   application.SendNotification();
   application.Render();
@@ -806,7 +888,6 @@ int UtcDaliPushButtonAlignmentLayout(void)
   size.width = pushButton.GetRelayoutSize( Dimension::WIDTH );
   size.height = pushButton.GetRelayoutSize( Dimension::HEIGHT );
 
-
   /*
    * Test Icon right alignment.
    * Height grows to largest of Icon or Label (+ padding).
@@ -820,8 +901,8 @@ 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" );
@@ -829,9 +910,8 @@ int UtcDaliPushButtonAlignmentLayout(void)
   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.
@@ -846,20 +926,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).
    *
    *  +---------+
    *  |         |
@@ -873,13 +944,10 @@ 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 ICON_ALIGNMENT should relayout the Button");
+  pushButton.SetProperty( Toolkit::PushButton::Property::ICON_ALIGNMENT, "TOP" );
 
   application.SendNotification();
   application.Render();
@@ -887,6 +955,16 @@ int UtcDaliPushButtonAlignmentLayout(void)
   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.
    * Width grows to largest of Icon or Label (+ padding).
@@ -903,90 +981,118 @@ 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::PushButton::Property::ICON_ALIGNMENT, "BOTTOM" );
+
+  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.SetSize(100.0f, 100.0f);
 
-  try
-  {
-    button.SetButtonImage( ImageView::New() );
-    DALI_TEST_CHECK( true );
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK( false );
-  }
+  Stage::GetCurrent().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 );
-  }
+  Stage::GetCurrent().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");
+
+  Stage::GetCurrent().Add( pushButton );
+
+  tet_printf("With UNSELECTED_BACKGROUND_VISUAL and UNSELECTED_ICON 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.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+  pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
+  pushButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
+
+  Stage::GetCurrent().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 );
+
+  Stage::GetCurrent().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 );
+
+  Stage::GetCurrent().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 UtcDaliPushButtonSetButtonImageP(void)
 {
   ToolkitTestApplication application;
 
@@ -995,7 +1101,7 @@ int UtcDaliPushButtonSetSelectedImageP(void)
 
   try
   {
-    button.SetSelectedImage( ImageView::New() );
+    button.SetButtonImage( ImageView::New() );
     DALI_TEST_CHECK( true );
   }
   catch(...)
@@ -1006,26 +1112,27 @@ int UtcDaliPushButtonSetSelectedImageP(void)
   END_TEST;
 }
 
-int UtcDaliPushButtonSetSelectedImageN(void)
+int UtcDaliPushButtonSetBackgroundImageP(void)
 {
   ToolkitTestApplication application;
 
-  PushButton button;
+  PushButton button = PushButton::New();
+  Stage::GetCurrent().Add( button );
 
   try
   {
-    button.SetSelectedImage( ImageView::New() );
-    DALI_TEST_CHECK( false );
+    button.SetBackgroundImage( ImageView::New() );
+    DALI_TEST_CHECK( true );
   }
   catch(...)
   {
-    DALI_TEST_CHECK( true );
+    DALI_TEST_CHECK( false );
   }
 
   END_TEST;
 }
 
-int UtcDaliPushButtonSetSelectedBackgroundImageP(void)
+int UtcDaliPushButtonSetSelectedImageP(void)
 {
   ToolkitTestApplication application;
 
@@ -1034,7 +1141,7 @@ int UtcDaliPushButtonSetSelectedBackgroundImageP(void)
 
   try
   {
-    button.SetSelectedBackgroundImage( ImageView::New() );
+    button.SetSelectedImage( ImageView::New() );
     DALI_TEST_CHECK( true );
   }
   catch(...)
@@ -1045,20 +1152,21 @@ int UtcDaliPushButtonSetSelectedBackgroundImageP(void)
   END_TEST;
 }
 
-int UtcDaliPushButtonSetSelectedBackgroundImageN(void)
+int UtcDaliPushButtonSetSelectedBackgroundImageP(void)
 {
   ToolkitTestApplication application;
 
-  PushButton button;
+  PushButton button = PushButton::New();
+  Stage::GetCurrent().Add( button );
 
   try
   {
     button.SetSelectedBackgroundImage( ImageView::New() );
-    DALI_TEST_CHECK( false );
+    DALI_TEST_CHECK( true );
   }
   catch(...)
   {
-    DALI_TEST_CHECK( true );
+    DALI_TEST_CHECK( false );
   }
 
   END_TEST;
@@ -1084,24 +1192,6 @@ int UtcDaliPushButtonSetDisabledBackgroundImageP(void)
   END_TEST;
 }
 
-int UtcDaliPushButtonSetDisabledBackgroundImageN(void)
-{
-  ToolkitTestApplication application;
-
-  PushButton button;
-
-  try
-  {
-    button.SetDisabledBackgroundImage( ImageView::New() );
-    DALI_TEST_CHECK( false );
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK( true );
-  }
-
-  END_TEST;
-}
 
 int UtcDaliPushButtonSetDisabledImageP(void)
 {
@@ -1123,25 +1213,6 @@ int UtcDaliPushButtonSetDisabledImageP(void)
   END_TEST;
 }
 
-int UtcDaliPushButtonSetDisabledImageN(void)
-{
-  ToolkitTestApplication application;
-
-  PushButton button;
-
-  try
-  {
-    button.SetDisabledImage( ImageView::New() );
-    DALI_TEST_CHECK( false );
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK( true );
-  }
-
-  END_TEST;
-}
-
 int UtcDaliPushButtonSetDisabledSelectedImageP(void)
 {
   ToolkitTestApplication application;
@@ -1161,22 +1232,3 @@ int UtcDaliPushButtonSetDisabledSelectedImageP(void)
 
   END_TEST;
 }
-
-int UtcDaliPushButtonSetDisabledSelectedImageN(void)
-{
-  ToolkitTestApplication application;
-
-  PushButton button;
-
-  try
-  {
-    button.SetDisabledSelectedImage( ImageView::New() );
-    DALI_TEST_CHECK( false );
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK( true );
-  }
-
-  END_TEST;
-}