X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Futc-Dali-FlexContainer.cpp;h=0d5523c8c321f5b68b9f83f4d8313548e4eba48f;hb=fd3731d0b5d4fcdcc6ed2a5ac6183eb469023d8a;hp=a2009d0ef8cdf27a5e9140aaba5515a494826e5f;hpb=726e147d14bb18ef193b102a36d8068b62db89ed;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/automated-tests/src/dali-toolkit/utc-Dali-FlexContainer.cpp b/automated-tests/src/dali-toolkit/utc-Dali-FlexContainer.cpp index a2009d0..0d5523c 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) 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. @@ -15,11 +15,13 @@ * */ -#include #include +#include + #include + #include -#include +#include using namespace Dali; using namespace Toolkit; @@ -36,13 +38,15 @@ void dali_flexflexContainer_cleanup(void) namespace { - const char* const PROPERTY_NAME_CONTENT_DIRECTION = "contentDirection"; -const char* const PROPERTY_NAME_FLEX_DIRECTION = "flexDirection"; -const char* const PROPERTY_NAME_FLEX_WRAP = "flexWrap"; -const char* const PROPERTY_NAME_JUSTIFY_CONTENT = "justifyContent"; -const char* const PROPERTY_NAME_ALIGN_ITEMS = "alignItems"; -const char* const PROPERTY_NAME_ALIGN_CONTENT = "alignContent"; +const char* const PROPERTY_NAME_FLEX_DIRECTION = "flexDirection"; +const char* const PROPERTY_NAME_FLEX_WRAP = "flexWrap"; +const char* const PROPERTY_NAME_JUSTIFY_CONTENT = "justifyContent"; +const char* const PROPERTY_NAME_ALIGN_ITEMS = "alignItems"; +const char* const PROPERTY_NAME_ALIGN_CONTENT = "alignContent"; +const char* const CHILD_PROPERTY_NAME_FLEX = "flex"; +const char* const CHILD_PROPERTY_NAME_ALIGN_SELF = "alignSelf"; +const char* const CHILD_PROPERTY_NAME_FLEX_MARGIN = "flexMargin"; } // namespace @@ -51,7 +55,7 @@ int UtcDaliToolkitFlexContainerConstructorP(void) ToolkitTestApplication application; tet_infoline(" UtcDaliToolkitFlexContainerConstructorP"); FlexContainer flexContainer; - DALI_TEST_CHECK( !flexContainer ); + DALI_TEST_CHECK(!flexContainer); END_TEST; } @@ -60,7 +64,7 @@ int UtcDaliToolkitFlexContainerNewP(void) ToolkitTestApplication application; tet_infoline(" UtcDaliToolkitFlexContainerNewP"); FlexContainer flexContainer = FlexContainer::New(); - DALI_TEST_CHECK( flexContainer ); + DALI_TEST_CHECK(flexContainer); END_TEST; } @@ -69,13 +73,13 @@ int UtcDaliToolkitFlexContainerDownCastP(void) ToolkitTestApplication application; tet_infoline(" UtcDaliToolkitFlexContainerDownCastP"); FlexContainer flexContainer1 = FlexContainer::New(); - BaseHandle object( flexContainer1 ); + BaseHandle object(flexContainer1); - FlexContainer flexContainer2 = FlexContainer::DownCast( object ); - DALI_TEST_CHECK( flexContainer2 ); + FlexContainer flexContainer2 = FlexContainer::DownCast(object); + DALI_TEST_CHECK(flexContainer2); - FlexContainer flexContainer3 = DownCast< FlexContainer >( object ); - DALI_TEST_CHECK( flexContainer3 ); + FlexContainer flexContainer3 = DownCast(object); + DALI_TEST_CHECK(flexContainer3); END_TEST; } @@ -83,12 +87,12 @@ int UtcDaliToolkitFlexContainerDownCastN(void) { ToolkitTestApplication application; tet_infoline(" UtcDaliToolkitFlexContainerDownCastN"); - BaseHandle uninitializedObject; - FlexContainer flexContainer1 = FlexContainer::DownCast( uninitializedObject ); - DALI_TEST_CHECK( !flexContainer1 ); + BaseHandle uninitializedObject; + FlexContainer flexContainer1 = FlexContainer::DownCast(uninitializedObject); + DALI_TEST_CHECK(!flexContainer1); - FlexContainer flexContainer2 = DownCast< FlexContainer >( uninitializedObject ); - DALI_TEST_CHECK( !flexContainer2 ); + FlexContainer flexContainer2 = DownCast(uninitializedObject); + DALI_TEST_CHECK(!flexContainer2); END_TEST; } @@ -97,11 +101,29 @@ int UtcDaliToolkitFlexContainerCopyConstructorP(void) ToolkitTestApplication application; tet_infoline(" UtcDaliToolkitFlexContainerCopyConstructorP"); FlexContainer flexContainer = FlexContainer::New(); - flexContainer.SetProperty( FlexContainer::Property::FLEX_DIRECTION, FlexContainer::ROW_REVERSE ); + flexContainer.SetProperty(FlexContainer::Property::FLEX_DIRECTION, FlexContainer::ROW_REVERSE); - FlexContainer copy( flexContainer ); - DALI_TEST_CHECK( copy ); - DALI_TEST_CHECK( copy.GetProperty( FlexContainer::Property::FLEX_DIRECTION ) == flexContainer.GetProperty( FlexContainer::Property::FLEX_DIRECTION ) ); + FlexContainer copy(flexContainer); + DALI_TEST_CHECK(copy); + DALI_TEST_CHECK(copy.GetProperty(FlexContainer::Property::FLEX_DIRECTION) == flexContainer.GetProperty(FlexContainer::Property::FLEX_DIRECTION)); + + 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; } @@ -111,11 +133,30 @@ int UtcDaliToolkitFlexContainerAssignmentOperatorP(void) ToolkitTestApplication application; tet_infoline(" UtcDaliToolkitFlexContainerAssingmentOperatorP"); FlexContainer flexContainer = FlexContainer::New(); - flexContainer.SetProperty( FlexContainer::Property::FLEX_DIRECTION, FlexContainer::ROW_REVERSE ); + flexContainer.SetProperty(FlexContainer::Property::FLEX_DIRECTION, FlexContainer::ROW_REVERSE); FlexContainer copy = flexContainer; - DALI_TEST_CHECK( copy ); - DALI_TEST_CHECK( copy.GetProperty( FlexContainer::Property::FLEX_DIRECTION ) == flexContainer.GetProperty( FlexContainer::Property::FLEX_DIRECTION ) ); + DALI_TEST_CHECK(copy); + DALI_TEST_CHECK(copy.GetProperty(FlexContainer::Property::FLEX_DIRECTION) == flexContainer.GetProperty(FlexContainer::Property::FLEX_DIRECTION)); + 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; } @@ -125,15 +166,15 @@ int UtcDaliToolkitFlexContainerGetPropertyP(void) ToolkitTestApplication application; tet_infoline(" UtcDaliToolkitFlexContainerGetPropertyP"); FlexContainer flexContainer = FlexContainer::New(); - DALI_TEST_CHECK( flexContainer ); + DALI_TEST_CHECK(flexContainer); // Check Property Indices are correct - DALI_TEST_CHECK( flexContainer.GetPropertyIndex( PROPERTY_NAME_CONTENT_DIRECTION ) == FlexContainer::Property::CONTENT_DIRECTION ); - DALI_TEST_CHECK( flexContainer.GetPropertyIndex( PROPERTY_NAME_FLEX_DIRECTION ) == FlexContainer::Property::FLEX_DIRECTION ); - DALI_TEST_CHECK( flexContainer.GetPropertyIndex( PROPERTY_NAME_FLEX_WRAP ) == FlexContainer::Property::FLEX_WRAP ); - DALI_TEST_CHECK( flexContainer.GetPropertyIndex( PROPERTY_NAME_JUSTIFY_CONTENT ) == FlexContainer::Property::JUSTIFY_CONTENT ); - DALI_TEST_CHECK( flexContainer.GetPropertyIndex( PROPERTY_NAME_ALIGN_ITEMS ) == FlexContainer::Property::ALIGN_ITEMS ); - DALI_TEST_CHECK( flexContainer.GetPropertyIndex( PROPERTY_NAME_ALIGN_CONTENT ) == FlexContainer::Property::ALIGN_CONTENT ); + DALI_TEST_CHECK(flexContainer.GetPropertyIndex(PROPERTY_NAME_CONTENT_DIRECTION) == FlexContainer::Property::CONTENT_DIRECTION); + DALI_TEST_CHECK(flexContainer.GetPropertyIndex(PROPERTY_NAME_FLEX_DIRECTION) == FlexContainer::Property::FLEX_DIRECTION); + DALI_TEST_CHECK(flexContainer.GetPropertyIndex(PROPERTY_NAME_FLEX_WRAP) == FlexContainer::Property::FLEX_WRAP); + DALI_TEST_CHECK(flexContainer.GetPropertyIndex(PROPERTY_NAME_JUSTIFY_CONTENT) == FlexContainer::Property::JUSTIFY_CONTENT); + DALI_TEST_CHECK(flexContainer.GetPropertyIndex(PROPERTY_NAME_ALIGN_ITEMS) == FlexContainer::Property::ALIGN_ITEMS); + DALI_TEST_CHECK(flexContainer.GetPropertyIndex(PROPERTY_NAME_ALIGN_CONTENT) == FlexContainer::Property::ALIGN_CONTENT); END_TEST; } @@ -143,32 +184,409 @@ int UtcDaliToolkitFlexContainerSetPropertyP(void) ToolkitTestApplication application; tet_infoline(" UtcDaliToolkitFlexContainerSetPropertyP"); FlexContainer flexContainer = FlexContainer::New(); - DALI_TEST_CHECK( flexContainer ); + 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, FlexContainer::RTL ); - DALI_TEST_EQUALS( (FlexContainer::ContentDirection)flexContainer.GetProperty( FlexContainer::Property::CONTENT_DIRECTION ), FlexContainer::RTL, TEST_LOCATION ); + flexContainer.SetProperty(FlexContainer::Property::CONTENT_DIRECTION, FlexContainer::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, FlexContainer::COLUMN_REVERSE ); - DALI_TEST_EQUALS( (FlexContainer::FlexDirection)flexContainer.GetProperty( FlexContainer::Property::FLEX_DIRECTION ), FlexContainer::COLUMN_REVERSE, TEST_LOCATION ); + flexContainer.SetProperty(FlexContainer::Property::FLEX_DIRECTION, FlexContainer::COLUMN_REVERSE); + 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, FlexContainer::WRAP ); - DALI_TEST_EQUALS( (FlexContainer::WrapType)flexContainer.GetProperty( FlexContainer::Property::FLEX_WRAP ), FlexContainer::WRAP, TEST_LOCATION ); + flexContainer.SetProperty(FlexContainer::Property::FLEX_WRAP, FlexContainer::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, FlexContainer::JUSTIFY_SPACE_BETWEEN ); - DALI_TEST_EQUALS( (FlexContainer::Justification)flexContainer.GetProperty( FlexContainer::Property::JUSTIFY_CONTENT ), FlexContainer::JUSTIFY_SPACE_BETWEEN, TEST_LOCATION ); + flexContainer.SetProperty(FlexContainer::Property::JUSTIFY_CONTENT, FlexContainer::JUSTIFY_SPACE_BETWEEN); + 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, FlexContainer::ALIGN_FLEX_START ); - DALI_TEST_EQUALS( (FlexContainer::Alignment)flexContainer.GetProperty( FlexContainer::Property::ALIGN_ITEMS ), FlexContainer::ALIGN_FLEX_START, TEST_LOCATION ); + flexContainer.SetProperty(FlexContainer::Property::ALIGN_ITEMS, FlexContainer::ALIGN_FLEX_START); + 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, FlexContainer::ALIGN_STRETCH ); - DALI_TEST_EQUALS( (FlexContainer::Alignment)flexContainer.GetProperty( FlexContainer::Property::ALIGN_CONTENT ), FlexContainer::ALIGN_STRETCH, TEST_LOCATION ); + flexContainer.SetProperty(FlexContainer::Property::ALIGN_CONTENT, FlexContainer::ALIGN_STRETCH); + DALI_TEST_EQUALS((FlexContainer::Alignment)flexContainer.GetProperty(FlexContainer::Property::ALIGN_CONTENT), FlexContainer::ALIGN_STRETCH, TEST_LOCATION); 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; + tet_infoline(" UtcDaliToolkitFlexContainerSetChildPropertyP"); + FlexContainer flexContainer = FlexContainer::New(); + DALI_TEST_CHECK(flexContainer); + + // Add flex container to the stage + application.GetScene().Add(flexContainer); + + // Create an actor and add it to the container + Actor actor = Actor::New(); + DALI_TEST_CHECK(actor); + + flexContainer.Add(actor); + + // Check flex child property. + actor.SetProperty(FlexContainer::ChildProperty::FLEX, 2.0f); + DALI_TEST_EQUALS(actor.GetProperty(FlexContainer::ChildProperty::FLEX), 2.0f, TEST_LOCATION); + DALI_TEST_CHECK(actor.GetPropertyIndex(CHILD_PROPERTY_NAME_FLEX) == FlexContainer::ChildProperty::FLEX); + + // Check align self child property. + actor.SetProperty(FlexContainer::ChildProperty::ALIGN_SELF, FlexContainer::ALIGN_FLEX_END); + DALI_TEST_EQUALS((FlexContainer::Alignment)actor.GetProperty(FlexContainer::ChildProperty::ALIGN_SELF), FlexContainer::ALIGN_FLEX_END, TEST_LOCATION); + DALI_TEST_CHECK(actor.GetPropertyIndex(CHILD_PROPERTY_NAME_ALIGN_SELF) == FlexContainer::ChildProperty::ALIGN_SELF); + + // Check flex margin child property. + actor.SetProperty(FlexContainer::ChildProperty::FLEX_MARGIN, Vector4(10.0f, 10.0f, 10.0f, 10.0f)); + 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; +}