X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Futc-Dali-PushButton.cpp;h=5ca3310899bc98512f2178e09f053029ab6c05a8;hp=17ebc5f2b3a41af467cc8ec66e95b4c15172e172;hb=863244a09761c6e22a224299b6155a285e21d6ec;hpb=bc96db3d2013dbc71df9bb97ec14159c1afddb31 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-PushButton.cpp b/automated-tests/src/dali-toolkit/utc-Dali-PushButton.cpp index 17ebc5f..5ca3310 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-PushButton.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-PushButton.cpp @@ -26,6 +26,9 @@ #include #include +#include +#include + using namespace Dali; using namespace Toolkit; @@ -41,6 +44,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 ) @@ -65,33 +69,52 @@ static bool PushButtonReleased( Button button ) return true; } -const Dali::TouchPoint pointDownInside( 0, TouchPoint::Down, 240, 400 ); -const Dali::TouchPoint pointUpInside( 0, TouchPoint::Up, 240, 400 ); -const Dali::TouchPoint pointLeave( 0, TouchPoint::Leave, 240, 400 ); -const Dali::TouchPoint pointEnter( 0, TouchPoint::Motion, 240, 400 ); -const Dali::TouchPoint pointMotionOut( 0, TouchPoint::Motion, 10, 10 ); -const Dali::TouchPoint pointDownOutside( 0, TouchPoint::Down, 10, 10 ); -const Dali::TouchPoint pointUpOutside( 0, TouchPoint::Up, 10, 10 ); +Dali::Integration::Point GetPointDownInside() +{ + Dali::Integration::Point point; + point.SetState( PointState::DOWN ); + point.SetScreenPosition( Vector2( 240, 400 ) ); + return point; +} -Image CreateSolidColorImage( const Vector4& color, unsigned int width, unsigned int height ) +Dali::Integration::Point GetPointUpInside() { - BufferImage imageData = BufferImage::New( width, height, Pixel::RGBA8888 ); + Dali::Integration::Point point; + point.SetState( PointState::UP ); + point.SetScreenPosition( Vector2( 240, 400 ) ); + return point; +} - // Create the image - PixelBuffer* pixbuf = imageData.GetBuffer(); - unsigned int size = width * height; +Dali::Integration::Point GetPointLeave() +{ + Dali::Integration::Point point; + point.SetState( PointState::LEAVE ); + point.SetScreenPosition( Vector2( 240, 400 ) ); + return point; +} - 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; - } +Dali::Integration::Point GetPointEnter() +{ + Dali::Integration::Point point; + point.SetState( PointState::MOTION ); + point.SetScreenPosition( Vector2( 240, 400 ) ); + return point; +} - imageData.Update(); +Dali::Integration::Point GetPointDownOutside() +{ + Dali::Integration::Point point; + point.SetState( PointState::DOWN ); + point.SetScreenPosition( Vector2( 10, 10 ) ); + return point; +} - return imageData; +Dali::Integration::Point GetPointUpOutside() +{ + Dali::Integration::Point point; + point.SetState( PointState::UP ); + point.SetScreenPosition( Vector2( 10, 10 ) ); + return point; } } //namespace @@ -192,6 +215,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( Button::Property::TOGGLABLE ), INITIAL_TOGGLE_VALUE , TEST_LOCATION ); + DALI_TEST_EQUALS( pushButton.GetProperty( Button::Property::SELECTED ), INITIAL_SELECTED_VALUE , TEST_LOCATION ); + + pushButton.SetProperty( Button::Property::AUTO_REPEATING, true ); + + DALI_TEST_EQUALS( pushButton.GetProperty( Button::Property::TOGGLABLE ), !INITIAL_TOGGLE_VALUE , TEST_LOCATION ); + + END_TEST; +} + int UtcDaliPushButtonSetGetTogglableButton(void) { ToolkitTestApplication application; @@ -354,6 +400,11 @@ int UtcDaliPushButtonSetLabelText(void) PushButton pushButton = PushButton::New(); + pushButton.SetProperty( Toolkit::Button::Property::LABEL, + Property::Map().Add( Toolkit::Visual::Property::TYPE, Toolkit::DevelVisual::TEXT ) + .Add( Toolkit::TextVisual::Property::POINT_SIZE, 15.0f ) + ); + application.SendNotification(); application.Render(); @@ -386,7 +437,7 @@ int UtcDaliPushButtonPressed(void) pushButton.PressedSignal().Connect( &PushButtonPressed ); Dali::Integration::TouchEvent eventDown; - eventDown.AddPoint( pointDownInside ); + eventDown.AddPoint( GetPointDownInside() ); // flush the queue and render once application.SendNotification(); @@ -422,11 +473,11 @@ int UtcDaliPushButtonReleased(void) gPushButtonReleased = false; event = Dali::Integration::TouchEvent(); - event.AddPoint( pointDownInside ); + event.AddPoint( GetPointDownInside() ); application.ProcessEvent( event ); event = Dali::Integration::TouchEvent(); - event.AddPoint( pointUpInside ); + event.AddPoint( GetPointUpInside() ); application.ProcessEvent( event ); DALI_TEST_CHECK( gPushButtonReleased ); @@ -435,11 +486,11 @@ int UtcDaliPushButtonReleased(void) gPushButtonReleased = false; event = Dali::Integration::TouchEvent(); - event.AddPoint( pointDownOutside ); + event.AddPoint( GetPointDownOutside() ); application.ProcessEvent( event ); event = Dali::Integration::TouchEvent(); - event.AddPoint( pointUpOutside ); + event.AddPoint( GetPointUpOutside() ); application.ProcessEvent( event ); DALI_TEST_CHECK( !gPushButtonReleased ); @@ -448,15 +499,15 @@ int UtcDaliPushButtonReleased(void) gPushButtonReleased = false; event = Dali::Integration::TouchEvent(); - event.AddPoint( pointDownInside ); + event.AddPoint( GetPointDownInside() ); application.ProcessEvent( event ); event = Dali::Integration::TouchEvent(); - event.AddPoint( pointLeave ); + event.AddPoint( GetPointLeave() ); application.ProcessEvent( event ); event = Dali::Integration::TouchEvent(); - event.AddPoint( pointUpOutside ); + event.AddPoint( GetPointUpOutside() ); application.ProcessEvent( event ); DALI_TEST_CHECK( gPushButtonReleased ); @@ -465,15 +516,15 @@ int UtcDaliPushButtonReleased(void) gPushButtonReleased = false; event = Dali::Integration::TouchEvent(); - event.AddPoint( pointDownOutside ); + event.AddPoint( GetPointDownOutside() ); application.ProcessEvent( event ); event = Dali::Integration::TouchEvent(); - event.AddPoint( pointEnter ); + event.AddPoint( GetPointEnter() ); application.ProcessEvent( event ); event = Dali::Integration::TouchEvent(); - event.AddPoint( pointUpInside ); + event.AddPoint( GetPointUpInside() ); application.ProcessEvent( event ); DALI_TEST_CHECK( !gPushButtonReleased ); @@ -505,11 +556,11 @@ int UtcDaliPushButtonSelected(void) gPushButtonSelectedState = false; event = Dali::Integration::TouchEvent(); - event.AddPoint( pointDownInside ); + event.AddPoint( GetPointDownInside() ); application.ProcessEvent( event ); event = Dali::Integration::TouchEvent(); - event.AddPoint( pointUpInside ); + event.AddPoint( GetPointUpInside() ); application.ProcessEvent( event ); DALI_TEST_CHECK( !gPushButtonSelectedState ); @@ -520,21 +571,21 @@ int UtcDaliPushButtonSelected(void) // Test2. Touch point down and up inside the button twice. gPushButtonSelectedState = false; event = Dali::Integration::TouchEvent(); - event.AddPoint( pointDownInside ); + event.AddPoint( GetPointDownInside() ); application.ProcessEvent( event ); event = Dali::Integration::TouchEvent(); - event.AddPoint( pointUpInside ); + event.AddPoint( GetPointUpInside() ); application.ProcessEvent( event ); DALI_TEST_CHECK( gPushButtonSelectedState ); event = Dali::Integration::TouchEvent(); - event.AddPoint( pointDownInside ); + event.AddPoint( GetPointDownInside() ); application.ProcessEvent( event ); event = Dali::Integration::TouchEvent(); - event.AddPoint( pointUpInside ); + event.AddPoint( GetPointUpInside() ); application.ProcessEvent( event ); DALI_TEST_CHECK( !gPushButtonSelectedState ); @@ -543,45 +594,48 @@ int UtcDaliPushButtonSelected(void) gPushButtonSelectedState = false; event = Dali::Integration::TouchEvent(); - event.AddPoint( pointDownOutside ); + event.AddPoint( GetPointDownOutside() ); application.ProcessEvent( event ); event = Dali::Integration::TouchEvent(); - event.AddPoint( pointUpOutside ); + event.AddPoint( GetPointUpOutside() ); application.ProcessEvent( event ); 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( pointDownInside ); + event.AddPoint( GetPointDownInside() ); application.ProcessEvent( event ); event = Dali::Integration::TouchEvent(); - event.AddPoint( pointLeave ); + event.AddPoint( GetPointLeave() ); application.ProcessEvent( event ); event = Dali::Integration::TouchEvent(); - event.AddPoint( pointUpOutside ); + 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(); - event.AddPoint( pointDownOutside ); + event.AddPoint( GetPointDownOutside() ); application.ProcessEvent( event ); event = Dali::Integration::TouchEvent(); - event.AddPoint( pointEnter ); + event.AddPoint( GetPointEnter() ); application.ProcessEvent( event ); event = Dali::Integration::TouchEvent(); - event.AddPoint( pointUpInside ); + event.AddPoint( GetPointUpInside() ); application.ProcessEvent( event ); DALI_TEST_CHECK( !gPushButtonSelectedState ); @@ -642,8 +696,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 ); @@ -660,29 +715,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 ); @@ -690,32 +756,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; } @@ -725,13 +812,37 @@ int UtcDaliPushButtonAlignmentLayout(void) ToolkitTestApplication application; tet_infoline(" UtcDaliPushButtonAlignmentLayout"); - // This test checks different alignments for the icon against the label. - // The icon is then moved around the label in each of it's alignments. - // The final relayed out size is checked to confirm the layout has been done correctly. - PushButton pushButton = PushButton::New(); + /* + * This test checks different alignments for the icon against the label. + * The icon is then moved around the label in each of it's alignments. + * The final relayed out size is checked to confirm the layout has been done correctly. + * + * There is an Icon which has 0 width and height, but with 75 padding on all sides. + * - Therefore total width and height are both 150. + * + * There is a Label which has "an unknown" width and height, but with 30 padding on all sides. + * - Therefore total width and height are 60+x and 60+y respectively. + * Where x & y are the width and height of the text. + * + * The width of the button will always expand to the largest of the icon and label sizes (plus padding). + * So We use the padding to help us determine the orientation is correct for each alignment. + * + * |<- 150 ->| |<-- 60+x -->| + * + * +---------+ - + * | | ^ +------------+ - + * | | | | | ^ + * | Icon | 150 | Label | 60+y + * | | | | | v + * | | 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 ); + const Vector2 TEST_IMAGE_SIZE = Vector2( 10.0f, 10.0f); - 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 pushButton = PushButton::New(); pushButton.SetAnchorPoint( AnchorPoint::TOP_LEFT ); pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT ); @@ -740,23 +851,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(); @@ -765,8 +896,21 @@ int UtcDaliPushButtonAlignmentLayout(void) size.width = pushButton.GetRelayoutSize( Dimension::WIDTH ); size.height = pushButton.GetRelayoutSize( Dimension::HEIGHT ); - DALI_TEST_GREATER( size.width, 150.0f + 60.0f, TEST_LOCATION ); - DALI_TEST_EQUALS( size.height, 150.0f, Math::MACHINE_EPSILON_1000, TEST_LOCATION ); + /* + * Test Icon right alignment. + * Height grows to largest of Icon or Label (+ padding). + * Normally this will be Icons height, except with very large font sizes. + * + * +------------+---------+ + * |............+ | + * | | | + * | Label | Icon | + * | | | + * |............+ | + * +------------+---------+ + */ + 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" ); @@ -774,25 +918,78 @@ int UtcDaliPushButtonAlignmentLayout(void) application.SendNotification(); application.Render(); - Vector2 compareSize( Vector2::ZERO ); - compareSize.width = pushButton.GetRelayoutSize( Dimension::WIDTH ); - compareSize.height = pushButton.GetRelayoutSize( Dimension::HEIGHT ); - - DALI_TEST_EQUALS( size, compareSize, Math::MACHINE_EPSILON_1000, TEST_LOCATION ); + size.width = pushButton.GetRelayoutSize( Dimension::WIDTH ); + size.height = pushButton.GetRelayoutSize( Dimension::HEIGHT ); - // Test top alignment. + /* + * Test Icon left alignment. + * Height grows to largest of Icon or Label (+ padding). + * Normally this will be Icons height, except with very large font sizes. + * + * +---------+------------+ + * | +............| + * | | | + * | Icon | Label | + * | | | + * | +............| + * +---------+------------+ + */ + 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)"); + /* + * + * +---------+ + * | | + * | | + * | Icon | + * | | + * | | + * +---------+ + * | | + * | Label | + * | | + * +---------+ + * + */ + + tet_infoline("SetProperty on ICON_ALIGNMENT should relayout the Button"); 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( compareSize.width, 150.0f, Math::MACHINE_EPSILON_1000, TEST_LOCATION ); - DALI_TEST_GREATER( compareSize.height, 150.0f + 60.0f, TEST_LOCATION ); + size.width = pushButton.GetRelayoutSize( Dimension::WIDTH ); + size.height = pushButton.GetRelayoutSize( Dimension::HEIGHT ); - // Test bottom alignment. + 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). + * + * +---------+ + * | | + * | Label | + * | | + * +---------+ + * | | + * | | + * | Icon | + * | | + * | | + * +---------+ + */ + 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(); @@ -801,7 +998,245 @@ int UtcDaliPushButtonAlignmentLayout(void) size.width = pushButton.GetRelayoutSize( Dimension::WIDTH ); size.height = pushButton.GetRelayoutSize( Dimension::HEIGHT ); - DALI_TEST_EQUALS( size, compareSize, Math::MACHINE_EPSILON_1000, TEST_LOCATION ); + 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 UtcDaliPushButtonSetUnSelectedVisual01P(void) +{ + tet_infoline(" Test adding a visual for the UNSELECTED_VISUAL property, removing Button from stage and counting renderers\n"); + ToolkitTestApplication application; + + PushButton pushButton = PushButton::New(); + pushButton.SetSize(100.0f, 100.0f); + + Stage::GetCurrent().Add( pushButton ); + + Property::Map propertyMap; + propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR); + propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE); + + pushButton.SetProperty( Toolkit::Button::Property::UNSELECTED_BACKGROUND_VISUAL, propertyMap ); + + tet_infoline(" UNSELECTED_VISUAL Added to button\n"); + + application.SendNotification(); + application.Render(0); + + unsigned int rendererCount = pushButton.GetRendererCount(); + tet_printf("After adding UNSELECTED_BACKGROUND_VISUAL the renderer count is(%d)\n", rendererCount ); + + DALI_TEST_EQUALS( pushButton.GetRendererCount(), 1 , TEST_LOCATION ); + + tet_printf("Remove button from stage\n" ); + + 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 UtcDaliPushButtonSetSelectedVisualN(void) +{ + tet_infoline(" Test adding a broken visual for the UNSELECTED_VISUAL property"); + + ToolkitTestApplication application; + + PushButton pushButton = PushButton::New(); + + 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 UtcDaliPushButtonSetButtonImageP(void) +{ + ToolkitTestApplication application; + + PushButton button = PushButton::New(); + Stage::GetCurrent().Add( button ); + + try + { + button.SetButtonImage( ImageView::New() ); + DALI_TEST_CHECK( true ); + } + catch(...) + { + DALI_TEST_CHECK( false ); + } + + END_TEST; +} + +int UtcDaliPushButtonSetBackgroundImageP(void) +{ + ToolkitTestApplication application; + + PushButton button = PushButton::New(); + Stage::GetCurrent().Add( button ); + + try + { + button.SetBackgroundImage( ImageView::New() ); + DALI_TEST_CHECK( true ); + } + catch(...) + { + DALI_TEST_CHECK( false ); + } + + END_TEST; +} + +int UtcDaliPushButtonSetSelectedImageP(void) +{ + ToolkitTestApplication application; + + PushButton button = PushButton::New(); + Stage::GetCurrent().Add( button ); + + try + { + button.SetSelectedImage( ImageView::New() ); + DALI_TEST_CHECK( true ); + } + catch(...) + { + DALI_TEST_CHECK( false ); + } + + END_TEST; +} + +int UtcDaliPushButtonSetSelectedBackgroundImageP(void) +{ + ToolkitTestApplication application; + + PushButton button = PushButton::New(); + Stage::GetCurrent().Add( button ); + + try + { + button.SetSelectedBackgroundImage( ImageView::New() ); + DALI_TEST_CHECK( true ); + } + catch(...) + { + DALI_TEST_CHECK( false ); + } + + END_TEST; +} + +int UtcDaliPushButtonSetDisabledBackgroundImageP(void) +{ + ToolkitTestApplication application; + + PushButton button = PushButton::New(); + Stage::GetCurrent().Add( button ); + + try + { + button.SetDisabledBackgroundImage( ImageView::New() ); + DALI_TEST_CHECK( true ); + } + catch(...) + { + DALI_TEST_CHECK( false ); + } + + END_TEST; +} + + +int UtcDaliPushButtonSetDisabledImageP(void) +{ + ToolkitTestApplication application; + + PushButton button = PushButton::New(); + Stage::GetCurrent().Add( button ); + + try + { + button.SetDisabledImage( ImageView::New() ); + DALI_TEST_CHECK( true ); + } + catch(...) + { + DALI_TEST_CHECK( false ); + } + + END_TEST; +} + +int UtcDaliPushButtonSetDisabledSelectedImageP(void) +{ + ToolkitTestApplication application; + + PushButton button = PushButton::New(); + Stage::GetCurrent().Add( button ); + + try + { + button.SetDisabledSelectedImage( ImageView::New() ); + DALI_TEST_CHECK( true ); + } + catch(...) + { + DALI_TEST_CHECK( false ); + } END_TEST; }