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-FlexContainer.cpp;h=61c4a58f533adfd63f22129597cc5071c9f793cd;hp=b92e8e74dc8f978b24b6fc4955eac8710e712369;hb=5a80f5b0c8814d86156be28bdcdafcfcd8486b49;hpb=1dbb50c7c99eef4f1771787bbf97bbb023a49c91 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-FlexContainer.cpp b/automated-tests/src/dali-toolkit/utc-Dali-FlexContainer.cpp index b92e8e7..61c4a58 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-FlexContainer.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-FlexContainer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 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. @@ -19,6 +19,7 @@ #include #include #include +#include using namespace Dali; using namespace Toolkit; @@ -108,6 +109,24 @@ int UtcDaliToolkitFlexContainerCopyConstructorP(void) END_TEST; } +int UtcDaliFlexContainerMoveConstructor(void) +{ + ToolkitTestApplication application; + + FlexContainer flexContainer = FlexContainer::New(); + DALI_TEST_EQUALS( 1, flexContainer.GetBaseObject().ReferenceCount(), TEST_LOCATION ); + flexContainer.SetProperty( FlexContainer::Property::FLEX_DIRECTION, FlexContainer::ROW_REVERSE ); + DALI_TEST_CHECK( flexContainer.GetProperty( FlexContainer::Property::FLEX_DIRECTION ) == FlexContainer::ROW_REVERSE ); + + FlexContainer moved = std::move( flexContainer ); + DALI_TEST_CHECK( moved ); + DALI_TEST_EQUALS( 1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION ); + DALI_TEST_CHECK( moved.GetProperty( FlexContainer::Property::FLEX_DIRECTION ) == FlexContainer::ROW_REVERSE ); + DALI_TEST_CHECK( !flexContainer ); + + END_TEST; +} + int UtcDaliToolkitFlexContainerAssignmentOperatorP(void) { ToolkitTestApplication application; @@ -121,6 +140,25 @@ int UtcDaliToolkitFlexContainerAssignmentOperatorP(void) END_TEST; } +int UtcDaliFlexContainerMoveAssignment(void) +{ + ToolkitTestApplication application; + + FlexContainer flexContainer = FlexContainer::New(); + DALI_TEST_EQUALS( 1, flexContainer.GetBaseObject().ReferenceCount(), TEST_LOCATION ); + flexContainer.SetProperty( FlexContainer::Property::FLEX_DIRECTION, FlexContainer::ROW_REVERSE ); + DALI_TEST_CHECK( flexContainer.GetProperty( FlexContainer::Property::FLEX_DIRECTION ) == FlexContainer::ROW_REVERSE ); + + FlexContainer moved; + moved = std::move( flexContainer ); + DALI_TEST_CHECK( moved ); + DALI_TEST_EQUALS( 1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION ); + DALI_TEST_CHECK( moved.GetProperty( FlexContainer::Property::FLEX_DIRECTION ) == FlexContainer::ROW_REVERSE ); + DALI_TEST_CHECK( !flexContainer ); + + END_TEST; +} + // Positive test case for a method int UtcDaliToolkitFlexContainerGetPropertyP(void) { @@ -148,7 +186,7 @@ int UtcDaliToolkitFlexContainerSetPropertyP(void) DALI_TEST_CHECK( flexContainer ); // Add flex container to the stage - Stage::GetCurrent().Add( flexContainer ); + application.GetScene().Add( flexContainer ); // Create two actors and add them to the container Actor actor1 = Actor::New(); @@ -186,6 +224,53 @@ int UtcDaliToolkitFlexContainerSetPropertyP(void) END_TEST; } + +int UtcDaliToolkitFlexContainerSetPropertyEnumP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitFlexContainerSetPropertyEnumP"); + FlexContainer flexContainer = FlexContainer::New(); + DALI_TEST_CHECK( flexContainer ); + + // Add flex container to the stage + application.GetScene().Add( flexContainer ); + + // Create two actors and add them to the container + Actor actor1 = Actor::New(); + Actor actor2 = Actor::New(); + DALI_TEST_CHECK( actor1 ); + DALI_TEST_CHECK( actor2 ); + + flexContainer.Add(actor1); + flexContainer.Add(actor2); + + // Check content direction property. + flexContainer.SetProperty( FlexContainer::Property::CONTENT_DIRECTION, "RTL" ); + DALI_TEST_EQUALS( (FlexContainer::ContentDirection)flexContainer.GetProperty( FlexContainer::Property::CONTENT_DIRECTION ), FlexContainer::RTL, TEST_LOCATION ); + + // Check flex direction property. + flexContainer.SetProperty( FlexContainer::Property::FLEX_DIRECTION, "columnReverse" ); + DALI_TEST_EQUALS( (FlexContainer::FlexDirection)flexContainer.GetProperty( FlexContainer::Property::FLEX_DIRECTION ), FlexContainer::COLUMN_REVERSE, TEST_LOCATION ); + + // Check flex wrap property. + flexContainer.SetProperty( FlexContainer::Property::FLEX_WRAP, "wrap" ); + DALI_TEST_EQUALS( (FlexContainer::WrapType)flexContainer.GetProperty( FlexContainer::Property::FLEX_WRAP ), FlexContainer::WRAP, TEST_LOCATION ); + + // Check justify content property. + flexContainer.SetProperty( FlexContainer::Property::JUSTIFY_CONTENT, "spaceBetween" ); + DALI_TEST_EQUALS( (FlexContainer::Justification)flexContainer.GetProperty( FlexContainer::Property::JUSTIFY_CONTENT ), FlexContainer::JUSTIFY_SPACE_BETWEEN, TEST_LOCATION ); + + // Check align items property. + flexContainer.SetProperty( FlexContainer::Property::ALIGN_ITEMS, "flexStart" ); + DALI_TEST_EQUALS( (FlexContainer::Alignment)flexContainer.GetProperty( FlexContainer::Property::ALIGN_ITEMS ), FlexContainer::ALIGN_FLEX_START, TEST_LOCATION ); + + // Check align content property. + flexContainer.SetProperty( FlexContainer::Property::ALIGN_CONTENT, "stretch" ); + DALI_TEST_EQUALS( (FlexContainer::Alignment)flexContainer.GetProperty( FlexContainer::Property::ALIGN_CONTENT ), FlexContainer::ALIGN_STRETCH, TEST_LOCATION ); + + END_TEST; +} + int UtcDaliToolkitFlexContainerSetChildPropertyP(void) { ToolkitTestApplication application; @@ -194,7 +279,7 @@ int UtcDaliToolkitFlexContainerSetChildPropertyP(void) DALI_TEST_CHECK( flexContainer ); // Add flex container to the stage - Stage::GetCurrent().Add( flexContainer ); + application.GetScene().Add( flexContainer ); // Create an actor and add it to the container Actor actor = Actor::New(); @@ -217,6 +302,296 @@ int UtcDaliToolkitFlexContainerSetChildPropertyP(void) DALI_TEST_EQUALS( actor.GetProperty( FlexContainer::ChildProperty::FLEX_MARGIN ), Vector4( 10.0f, 10.0f, 10.0f, 10.0f ), TEST_LOCATION ); DALI_TEST_CHECK( actor.GetPropertyIndex( CHILD_PROPERTY_NAME_FLEX_MARGIN ) == FlexContainer::ChildProperty::FLEX_MARGIN ); + application.SendNotification(); + application.Render(); + END_TEST; } + + +//Functor to test whether RelayoutSignal is emitted +class RelayoutSignalHandler : public Dali::ConnectionTracker +{ +public: + + RelayoutSignalHandler( FlexContainer& actor ) + : mSignalVerified( false ), + mActor( actor ) + { + } + + // callback to be connected to RelayoutSignal + void RelayoutCallback( Actor actor ) + { + if( mActor == actor ) + { + mSignalVerified = true; + } + } + + void Reset() + { + mSignalVerified = false; + } + + bool mSignalVerified; + Actor& mActor; +}; + +int UtcDaliToolkitFlexContainerRemoveChildP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitFlexContainerSetPropertyP"); + FlexContainer flexContainer = FlexContainer::New(); + DALI_TEST_CHECK( flexContainer ); + + // Add flex container to the stage + application.GetScene().Add( flexContainer ); + + RelayoutSignalHandler relayoutSignal(flexContainer); + flexContainer.OnRelayoutSignal().Connect(&relayoutSignal, &RelayoutSignalHandler::RelayoutCallback ); + + // Create two actors and add them to the container + Actor actor1 = Actor::New(); + Actor actor2 = Actor::New(); + DALI_TEST_CHECK( actor1 ); + DALI_TEST_CHECK( actor2 ); + + flexContainer.Add(actor1); + flexContainer.Add(actor2); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( relayoutSignal.mSignalVerified, true, TEST_LOCATION ); + relayoutSignal.Reset(); + + DALI_TEST_CHECK( actor1 ); + DALI_TEST_CHECK( actor2 ); + + flexContainer.Remove(actor1); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS( relayoutSignal.mSignalVerified, true, TEST_LOCATION ); + relayoutSignal.Reset(); + + flexContainer.Remove(actor2); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS( relayoutSignal.mSignalVerified, true, TEST_LOCATION ); + relayoutSignal.Reset(); + + END_TEST; +} + +namespace +{ + +// Functors to test whether PreFocusChange signal is emitted when the keyboard focus is about to change +class PreFocusChangeCallback : public Dali::ConnectionTracker +{ +public: + PreFocusChangeCallback(bool& signalReceived, Actor firstFocusActor) + : mSignalVerified(signalReceived), + mFirstFocusActor(firstFocusActor), + mDirection(Control::KeyboardFocus::LEFT) + { + } + + Actor Callback(Actor currentFocusedActor, Actor proposedActorToFocus, Control::KeyboardFocus::Direction direction) + { + tet_infoline("Verifying PreFocusChangeCallback()"); + + mSignalVerified = true; + mDirection = direction; + if( ! proposedActorToFocus ) + { + return mFirstFocusActor; + } + else + { + return proposedActorToFocus; + } + } + + void Reset() + { + mSignalVerified = false; + mDirection = Control::KeyboardFocus::LEFT; + } + + bool& mSignalVerified; + Actor mFirstFocusActor; + Control::KeyboardFocus::Direction mDirection; +}; + +// Functors to test whether focus changed signal is emitted when the keyboard focus is changed +class FocusChangedCallback : public Dali::ConnectionTracker +{ +public: + FocusChangedCallback(bool& signalReceived) + : mSignalVerified(signalReceived), + mOriginalFocusedActor(), + mCurrentFocusedActor() + { + } + + void Callback(Actor originalFocusedActor, Actor currentFocusedActor) + { + tet_infoline("Verifying FocusChangedCallback()"); + + if(originalFocusedActor == mCurrentFocusedActor) + { + mSignalVerified = true; + } + + mOriginalFocusedActor = originalFocusedActor; + mCurrentFocusedActor = currentFocusedActor; + } + + void Reset() + { + mSignalVerified = false; + } + + bool& mSignalVerified; + Actor mOriginalFocusedActor; + Actor mCurrentFocusedActor; +}; + +} // anonymous namespace + + +int UtcDaliToolkitFlexContainerMoveFocus(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitFlexContainerSetPropertyP"); + FlexContainer flexContainer = FlexContainer::New(); + DALI_TEST_CHECK( flexContainer ); + + flexContainer.SetProperty( FlexContainer::Property::FLEX_DIRECTION, FlexContainer::ROW ); + + // Add flex container to the stage + application.GetScene().Add( flexContainer ); + Size stageSize = application.GetScene().GetSize(); + + RelayoutSignalHandler relayoutSignal(flexContainer); + flexContainer.OnRelayoutSignal().Connect(&relayoutSignal, &RelayoutSignalHandler::RelayoutCallback ); + flexContainer.SetProperty( Actor::Property::SIZE, stageSize ); + + // Create two actors and add them to the container + Actor actor1 = Actor::New(); + Actor actor2 = Actor::New(); + actor1.SetProperty( Actor::Property::KEYBOARD_FOCUSABLE, true ); + actor2.SetProperty( Actor::Property::KEYBOARD_FOCUSABLE, true ); + DALI_TEST_CHECK( actor1 ); + DALI_TEST_CHECK( actor2 ); + + flexContainer.Add(actor1); + flexContainer.Add(actor2); + + application.SendNotification(); + application.Render(); + + KeyboardFocusManager manager = KeyboardFocusManager::Get(); + DALI_TEST_CHECK(manager); + + bool preFocusChangeSignalVerified = false; + PreFocusChangeCallback preFocusChangeCallback(preFocusChangeSignalVerified, actor1); + manager.PreFocusChangeSignal().Connect( &preFocusChangeCallback, &PreFocusChangeCallback::Callback ); + + bool focusChangedSignalVerified = false; + FocusChangedCallback focusChangedCallback(focusChangedSignalVerified); + manager.FocusChangedSignal().Connect( &focusChangedCallback, &FocusChangedCallback::Callback ); + + // Move the focus to the right + DALI_TEST_EQUALS(manager.MoveFocus(Control::KeyboardFocus::RIGHT), true, TEST_LOCATION); + DALI_TEST_CHECK(preFocusChangeCallback.mSignalVerified); + DALI_TEST_EQUALS(manager.GetCurrentFocusActor(), actor1, TEST_LOCATION); + preFocusChangeCallback.Reset(); + DALI_TEST_EQUALS(focusChangedCallback.mCurrentFocusedActor, actor1, TEST_LOCATION); + focusChangedCallback.Reset(); + + // Move the focus towards right + DALI_TEST_EQUALS(manager.MoveFocus(Control::KeyboardFocus::RIGHT), true, TEST_LOCATION); + DALI_TEST_EQUALS(preFocusChangeCallback.mSignalVerified, true, TEST_LOCATION); + DALI_TEST_EQUALS(manager.GetCurrentFocusActor(), actor2, TEST_LOCATION); + DALI_TEST_EQUALS(focusChangedCallback.mSignalVerified, true, TEST_LOCATION); + DALI_TEST_EQUALS(focusChangedCallback.mCurrentFocusedActor, actor2, TEST_LOCATION); + + preFocusChangeCallback.Reset(); + focusChangedCallback.Reset(); + + // Move the focus towards left + DALI_TEST_EQUALS(manager.MoveFocus(Control::KeyboardFocus::LEFT), true, TEST_LOCATION); + DALI_TEST_EQUALS(preFocusChangeCallback.mSignalVerified, true, TEST_LOCATION); + DALI_TEST_EQUALS(manager.GetCurrentFocusActor(), actor1, TEST_LOCATION); + DALI_TEST_EQUALS(focusChangedCallback.mSignalVerified, true, TEST_LOCATION); + DALI_TEST_EQUALS(focusChangedCallback.mCurrentFocusedActor, actor1, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliToolkitFlexContainerRTLSupportP(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliToolkitFlexContainerRTLSupportP"); + FlexContainer flexContainer = FlexContainer::New(); + DALI_TEST_CHECK( flexContainer ); + + Actor actor0 = Actor::New(); + + application.GetScene().Add( actor0 ); + actor0.Add( flexContainer ); + + // Create two actors and add them to the container + Actor actor1 = Actor::New(); + Actor actor2 = Actor::New(); + DALI_TEST_CHECK( actor1 ); + DALI_TEST_CHECK( actor2 ); + + flexContainer.Add(actor1); + flexContainer.Add(actor2); + + // Check flex direction property. + flexContainer.SetProperty( FlexContainer::Property::FLEX_DIRECTION, "row" ); + DALI_TEST_EQUALS( (FlexContainer::FlexDirection)flexContainer.GetProperty( FlexContainer::Property::FLEX_DIRECTION ), FlexContainer::ROW, TEST_LOCATION ); + + // Check content direction property. + DALI_TEST_EQUALS( (FlexContainer::ContentDirection)flexContainer.GetProperty( FlexContainer::Property::CONTENT_DIRECTION ), FlexContainer::INHERIT, TEST_LOCATION ); + + actor0.SetProperty( Dali::Actor::Property::LAYOUT_DIRECTION, Dali::LayoutDirection::RIGHT_TO_LEFT ); + DALI_TEST_EQUALS( (FlexContainer::ContentDirection)flexContainer.GetProperty( FlexContainer::Property::CONTENT_DIRECTION ), FlexContainer::RTL, TEST_LOCATION ); + + actor0.SetProperty( Dali::Actor::Property::LAYOUT_DIRECTION, Dali::LayoutDirection::LEFT_TO_RIGHT ); + DALI_TEST_EQUALS( (FlexContainer::ContentDirection)flexContainer.GetProperty( FlexContainer::Property::CONTENT_DIRECTION ), FlexContainer::LTR, TEST_LOCATION ); + + flexContainer.SetProperty( FlexContainer::Property::CONTENT_DIRECTION, "RTL" ); + DALI_TEST_EQUALS( (FlexContainer::ContentDirection)flexContainer.GetProperty( FlexContainer::Property::CONTENT_DIRECTION ), FlexContainer::RTL, TEST_LOCATION ); + + flexContainer.SetProperty( FlexContainer::Property::CONTENT_DIRECTION, "LTR" ); + DALI_TEST_EQUALS( (FlexContainer::ContentDirection)flexContainer.GetProperty( FlexContainer::Property::CONTENT_DIRECTION ), FlexContainer::LTR, TEST_LOCATION ); + + actor0.SetProperty( Dali::Actor::Property::LAYOUT_DIRECTION, Dali::LayoutDirection::RIGHT_TO_LEFT ); + DALI_TEST_EQUALS( (FlexContainer::ContentDirection)flexContainer.GetProperty( FlexContainer::Property::CONTENT_DIRECTION ), FlexContainer::LTR, TEST_LOCATION ); + + flexContainer.SetProperty( FlexContainer::Property::CONTENT_DIRECTION, "inherit" ); + DALI_TEST_EQUALS( (FlexContainer::ContentDirection)flexContainer.GetProperty( FlexContainer::Property::CONTENT_DIRECTION ), FlexContainer::RTL, TEST_LOCATION ); + + actor0.SetProperty( Dali::Actor::Property::LAYOUT_DIRECTION, Dali::LayoutDirection::LEFT_TO_RIGHT ); + DALI_TEST_EQUALS( (FlexContainer::ContentDirection)flexContainer.GetProperty( FlexContainer::Property::CONTENT_DIRECTION ), FlexContainer::LTR, TEST_LOCATION ); + + flexContainer.SetProperty( FlexContainer::Property::CONTENT_DIRECTION, "inherit" ); + DALI_TEST_EQUALS( (FlexContainer::ContentDirection)flexContainer.GetProperty( FlexContainer::Property::CONTENT_DIRECTION ), FlexContainer::LTR, TEST_LOCATION ); + + flexContainer.SetProperty( FlexContainer::Property::CONTENT_DIRECTION, "LTR" ); + application.SendNotification(); + application.Render(); + + flexContainer.SetProperty( FlexContainer::Property::CONTENT_DIRECTION, "RTL" ); + application.SendNotification(); + application.Render(); + + END_TEST; +}