X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali%2Futc-Dali-Actor.cpp;h=bb9d9a44973d9ad791c6094e97a6f1b849ae5bb6;hb=2a4f0c63a4971e253a11dfb9af74d8880b4e2184;hp=9a41831714ca78d7799bc3fb59e6dc8e5ca5c432;hpb=5bff9714dde9f2b394443337c65e673dcb4a031d;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/automated-tests/src/dali/utc-Dali-Actor.cpp b/automated-tests/src/dali/utc-Dali-Actor.cpp index 9a41831..bb9d9a4 100644 --- a/automated-tests/src/dali/utc-Dali-Actor.cpp +++ b/automated-tests/src/dali/utc-Dali-Actor.cpp @@ -20,7 +20,6 @@ #include #include // For FLT_MAX #include -#include #include #include #include @@ -826,11 +825,11 @@ int UtcDaliActorSetSize01(void) DALI_TEST_EQUALS( vector.depth, actor.GetProperty< float >( Actor::Property::SIZE_DEPTH ), TEST_LOCATION ); // Check async behaviour - currentSize = DevelHandle::GetCurrentProperty( actor, Actor::Property::SIZE ).Get< Vector3 >(); + currentSize = actor.GetCurrentProperty( Actor::Property::SIZE ).Get< Vector3 >(); DALI_TEST_EQUALS( currentSize, vector, Math::MACHINE_EPSILON_0, TEST_LOCATION ); - DALI_TEST_EQUALS( vector.width, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::SIZE_WIDTH ), TEST_LOCATION ); - DALI_TEST_EQUALS( vector.height, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::SIZE_HEIGHT ), TEST_LOCATION ); - DALI_TEST_EQUALS( vector.depth, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::SIZE_DEPTH ), TEST_LOCATION ); + DALI_TEST_EQUALS( vector.width, actor.GetCurrentProperty< float >( Actor::Property::SIZE_WIDTH ), TEST_LOCATION ); + DALI_TEST_EQUALS( vector.height, actor.GetCurrentProperty< float >( Actor::Property::SIZE_HEIGHT ), TEST_LOCATION ); + DALI_TEST_EQUALS( vector.depth, actor.GetCurrentProperty< float >( Actor::Property::SIZE_DEPTH ), TEST_LOCATION ); // Change the resize policy and check whether the size stays the same actor.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS ); @@ -1323,8 +1322,8 @@ int UtcDaliActorSetPositionProperties(void) DALI_TEST_EQUALS( vector.x, actor.GetCurrentPosition().x, TEST_LOCATION ); DALI_TEST_EQUALS( vector.x, actor.GetProperty< Vector3 >( Actor::Property::POSITION ).x, TEST_LOCATION ); DALI_TEST_EQUALS( vector.x, actor.GetProperty< float >( Actor::Property::POSITION_X ), TEST_LOCATION ); - DALI_TEST_EQUALS( vector.x, DevelHandle::GetCurrentProperty< Vector3 >( actor, Actor::Property::POSITION ).x, TEST_LOCATION ); - DALI_TEST_EQUALS( vector.x, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::POSITION_X ), TEST_LOCATION ); + DALI_TEST_EQUALS( vector.x, actor.GetCurrentProperty< Vector3 >( Actor::Property::POSITION ).x, TEST_LOCATION ); + DALI_TEST_EQUALS( vector.x, actor.GetCurrentProperty< float >( Actor::Property::POSITION_X ), TEST_LOCATION ); actor.SetProperty( Actor::Property::POSITION_Y, vector.y ); DALI_TEST_EQUALS( vector.y, actor.GetProperty< Vector3 >( Actor::Property::POSITION ).y, TEST_LOCATION ); @@ -1337,8 +1336,8 @@ int UtcDaliActorSetPositionProperties(void) DALI_TEST_EQUALS( vector.y, actor.GetCurrentPosition().y, TEST_LOCATION ); DALI_TEST_EQUALS( vector.y, actor.GetProperty< Vector3 >( Actor::Property::POSITION ).y, TEST_LOCATION ); DALI_TEST_EQUALS( vector.y, actor.GetProperty< float >( Actor::Property::POSITION_Y ), TEST_LOCATION ); - DALI_TEST_EQUALS( vector.y, DevelHandle::GetCurrentProperty< Vector3 >( actor, Actor::Property::POSITION ).y, TEST_LOCATION ); - DALI_TEST_EQUALS( vector.y, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::POSITION_Y ), TEST_LOCATION ); + DALI_TEST_EQUALS( vector.y, actor.GetCurrentProperty< Vector3 >( Actor::Property::POSITION ).y, TEST_LOCATION ); + DALI_TEST_EQUALS( vector.y, actor.GetCurrentProperty< float >( Actor::Property::POSITION_Y ), TEST_LOCATION ); actor.SetProperty( Actor::Property::POSITION_Z, vector.z ); DALI_TEST_EQUALS( vector.z, actor.GetProperty< Vector3 >( Actor::Property::POSITION ).z, TEST_LOCATION ); @@ -1351,8 +1350,8 @@ int UtcDaliActorSetPositionProperties(void) DALI_TEST_EQUALS( vector.z, actor.GetCurrentPosition().z, TEST_LOCATION ); DALI_TEST_EQUALS( vector.z, actor.GetProperty< Vector3 >( Actor::Property::POSITION ).z, TEST_LOCATION ); DALI_TEST_EQUALS( vector.z, actor.GetProperty< float >( Actor::Property::POSITION_Z ), TEST_LOCATION ); - DALI_TEST_EQUALS( vector.z, DevelHandle::GetCurrentProperty< Vector3 >( actor, Actor::Property::POSITION ).z, TEST_LOCATION ); - DALI_TEST_EQUALS( vector.z, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::POSITION_Z ), TEST_LOCATION ); + DALI_TEST_EQUALS( vector.z, actor.GetCurrentProperty< Vector3 >( Actor::Property::POSITION ).z, TEST_LOCATION ); + DALI_TEST_EQUALS( vector.z, actor.GetCurrentProperty< float >( Actor::Property::POSITION_Z ), TEST_LOCATION ); END_TEST; } @@ -1613,7 +1612,7 @@ int UtcDaliActorSetOrientationProperty(void) DALI_TEST_EQUALS(rotation, actor.GetCurrentOrientation(), 0.001, TEST_LOCATION); DALI_TEST_EQUALS(rotation, actor.GetProperty< Quaternion >( Actor::Property::ORIENTATION ), 0.001, TEST_LOCATION); - DALI_TEST_EQUALS(rotation, DevelHandle::GetCurrentProperty< Quaternion >( actor, Actor::Property::ORIENTATION ), 0.001, TEST_LOCATION); + DALI_TEST_EQUALS(rotation, actor.GetCurrentProperty< Quaternion >( Actor::Property::ORIENTATION ), 0.001, TEST_LOCATION); END_TEST; } @@ -1817,7 +1816,7 @@ int UtcDaliActorSetScaleIndividual(void) DALI_TEST_EQUALS( vector.x, actor.GetCurrentScale().x, TEST_LOCATION ); DALI_TEST_EQUALS( vector.x, actor.GetProperty< float >( Actor::Property::SCALE_X ), TEST_LOCATION ); - DALI_TEST_EQUALS( vector.x, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::SCALE_X ), TEST_LOCATION ); + DALI_TEST_EQUALS( vector.x, actor.GetCurrentProperty< float >( Actor::Property::SCALE_X ), TEST_LOCATION ); actor.SetProperty( Actor::Property::SCALE_Y, vector.y ); DALI_TEST_EQUALS( vector.y, actor.GetProperty< float >( Actor::Property::SCALE_Y ), TEST_LOCATION ); @@ -1828,7 +1827,7 @@ int UtcDaliActorSetScaleIndividual(void) DALI_TEST_EQUALS( vector.y, actor.GetCurrentScale().y, TEST_LOCATION ); DALI_TEST_EQUALS( vector.y, actor.GetProperty< float >( Actor::Property::SCALE_Y ), TEST_LOCATION ); - DALI_TEST_EQUALS( vector.y, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::SCALE_Y ), TEST_LOCATION ); + DALI_TEST_EQUALS( vector.y, actor.GetCurrentProperty< float >( Actor::Property::SCALE_Y ), TEST_LOCATION ); actor.SetProperty( Actor::Property::SCALE_Z, vector.z ); DALI_TEST_EQUALS( vector.z, actor.GetProperty< float >( Actor::Property::SCALE_Z ), TEST_LOCATION ); @@ -1839,10 +1838,10 @@ int UtcDaliActorSetScaleIndividual(void) DALI_TEST_EQUALS( vector.z, actor.GetCurrentScale().z, TEST_LOCATION ); DALI_TEST_EQUALS( vector.z, actor.GetProperty< float >( Actor::Property::SCALE_Z ), TEST_LOCATION ); - DALI_TEST_EQUALS( vector.z, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::SCALE_Z ), TEST_LOCATION ); + DALI_TEST_EQUALS( vector.z, actor.GetCurrentProperty< float >( Actor::Property::SCALE_Z ), TEST_LOCATION ); DALI_TEST_EQUALS( vector, actor.GetProperty< Vector3 >( Actor::Property::SCALE ), TEST_LOCATION ); - DALI_TEST_EQUALS( vector, DevelHandle::GetCurrentProperty< Vector3 >( actor, Actor::Property::SCALE ), TEST_LOCATION ); + DALI_TEST_EQUALS( vector, actor.GetCurrentProperty< Vector3 >( Actor::Property::SCALE ), TEST_LOCATION ); END_TEST; } @@ -2129,7 +2128,7 @@ int UtcDaliActorSetColorIndividual(void) DALI_TEST_EQUALS( vector.r, actor.GetCurrentColor().r, TEST_LOCATION ); DALI_TEST_EQUALS( vector.r, actor.GetProperty< float >( Actor::Property::COLOR_RED ), TEST_LOCATION ); - DALI_TEST_EQUALS( vector.r, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::COLOR_RED ), TEST_LOCATION ); + DALI_TEST_EQUALS( vector.r, actor.GetCurrentProperty< float >( Actor::Property::COLOR_RED ), TEST_LOCATION ); actor.SetProperty( Actor::Property::COLOR_GREEN, vector.g ); DALI_TEST_EQUALS( vector.g, actor.GetProperty< float >( Actor::Property::COLOR_GREEN ), TEST_LOCATION ); @@ -2140,7 +2139,7 @@ int UtcDaliActorSetColorIndividual(void) DALI_TEST_EQUALS( vector.g, actor.GetCurrentColor().g, TEST_LOCATION ); DALI_TEST_EQUALS( vector.g, actor.GetProperty< float >( Actor::Property::COLOR_GREEN ), TEST_LOCATION ); - DALI_TEST_EQUALS( vector.g, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::COLOR_GREEN ), TEST_LOCATION ); + DALI_TEST_EQUALS( vector.g, actor.GetCurrentProperty< float >( Actor::Property::COLOR_GREEN ), TEST_LOCATION ); actor.SetProperty( Actor::Property::COLOR_BLUE, vector.b ); DALI_TEST_EQUALS( vector.b, actor.GetProperty< float >( Actor::Property::COLOR_BLUE ), TEST_LOCATION ); @@ -2151,7 +2150,7 @@ int UtcDaliActorSetColorIndividual(void) DALI_TEST_EQUALS( vector.b, actor.GetCurrentColor().b, TEST_LOCATION ); DALI_TEST_EQUALS( vector.b, actor.GetProperty< float >( Actor::Property::COLOR_BLUE ), TEST_LOCATION ); - DALI_TEST_EQUALS( vector.b, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::COLOR_BLUE ), TEST_LOCATION ); + DALI_TEST_EQUALS( vector.b, actor.GetCurrentProperty< float >( Actor::Property::COLOR_BLUE ), TEST_LOCATION ); actor.SetProperty( Actor::Property::COLOR_ALPHA, vector.a ); @@ -2163,10 +2162,10 @@ int UtcDaliActorSetColorIndividual(void) DALI_TEST_EQUALS( vector.a, actor.GetCurrentColor().a, TEST_LOCATION ); DALI_TEST_EQUALS( vector.a, actor.GetProperty< float >( Actor::Property::COLOR_ALPHA ), TEST_LOCATION ); - DALI_TEST_EQUALS( vector.a, DevelHandle::GetCurrentProperty< float >( actor, Actor::Property::COLOR_ALPHA ), TEST_LOCATION ); + DALI_TEST_EQUALS( vector.a, actor.GetCurrentProperty< float >( Actor::Property::COLOR_ALPHA ), TEST_LOCATION ); DALI_TEST_EQUALS( vector, actor.GetProperty< Vector4 >( Actor::Property::COLOR ), TEST_LOCATION ); - DALI_TEST_EQUALS( vector, DevelHandle::GetCurrentProperty< Vector4 >( actor, Actor::Property::COLOR ), TEST_LOCATION ); + DALI_TEST_EQUALS( vector, actor.GetCurrentProperty< Vector4 >( Actor::Property::COLOR ), TEST_LOCATION ); actor.SetProperty( DevelActor::Property::OPACITY, 0.2f ); @@ -3859,17 +3858,33 @@ int UtcDaliActorRemoveRendererP1(void) DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); - Geometry geometry = CreateQuadGeometry(); - Shader shader = CreateShader(); - Renderer renderer = Renderer::New(geometry, shader); + { + Geometry geometry = CreateQuadGeometry(); + Shader shader = CreateShader(); + Renderer renderer = Renderer::New(geometry, shader); - actor.AddRenderer( renderer ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( actor.GetRendererAt(0), renderer, TEST_LOCATION ); + actor.AddRenderer( renderer ); + DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); + DALI_TEST_EQUALS( actor.GetRendererAt(0), renderer, TEST_LOCATION ); - actor.RemoveRenderer(renderer); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); + application.SendNotification(); + application.Render(); + } + + { + Renderer renderer = actor.GetRendererAt(0); + actor.RemoveRenderer(renderer); + DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); + + application.SendNotification(); + application.Render(); + } + // Call one final time to ensure that the renderer is actually removed after + // the handle goes out of scope, and excercises the deletion code path in + // scene graph and render. + application.SendNotification(); + application.Render(); END_TEST; } @@ -3888,13 +3903,19 @@ int UtcDaliActorRemoveRendererP2(void) Renderer renderer = Renderer::New(geometry, shader); actor.AddRenderer( renderer ); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); DALI_TEST_EQUALS( actor.GetRendererAt(0), renderer, TEST_LOCATION ); actor.RemoveRenderer(0); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); + // Shut down whilst holding onto the renderer handle. END_TEST; } @@ -4197,6 +4218,98 @@ int UtcDaliActorPropertyClippingNestedChildren(void) END_TEST; } +int UtcDaliActorPropertyClippingActorDrawOrder(void) +{ + // This test checks that a hierarchy of actors are drawn in the correct order when clipping is enabled. + tet_infoline( "Testing Actor::Property::CLIPPING_MODE draw order" ); + TestApplication application; + TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); + TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace(); + + /* We create a small tree of actors as follows: + + A + / \ + Clipping enabled -> B D + | | + C E + + The correct draw order is "ABCDE" (the same as if clipping was not enabled). + */ + Actor actors[5]; + for( int i = 0; i < 5; ++i ) + { + BufferImage image = BufferImage::New( 16u, 16u ); + Actor actor = CreateRenderableActor( image ); + + // Setup dimensions and position so actor is not skipped by culling. + actor.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS ); + actor.SetSize( 16.0f, 16.0f ); + + if( i == 0 ) + { + actor.SetParentOrigin( ParentOrigin::CENTER ); + } + else + { + float b = i > 2 ? 1.0f : -1.0f; + actor.SetParentOrigin( Vector3( 0.5 + ( 0.2f * b ), 0.8f, 0.8f ) ); + } + + actors[i] = actor; + } + + // Enable clipping on the actor at the top of the left branch. + actors[1].SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN ); + + // Build the scene graph. + Stage::GetCurrent().Add( actors[0] ); + + // Left branch: + actors[0].Add( actors[1] ); + actors[1].Add( actors[2] ); + + // Right branch: + actors[0].Add( actors[3] ); + actors[3].Add( actors[4] ); + + // Gather the call trace. + enabledDisableTrace.Reset(); + enabledDisableTrace.Enable( true ); + application.SendNotification(); + application.Render(); + enabledDisableTrace.Enable( false ); + + /* Check stencil is enabled and disabled again (as right-hand branch of tree is drawn). + + Note: Correct enable call trace: StackTrace: Index:0, Function:Enable, ParamList:3042 StackTrace: Index:1, Function:Enable, ParamList:2960 StackTrace: Index:2, Function:Disable, ParamList:2960 + Incorrect enable call trace: StackTrace: Index:0, Function:Enable, ParamList:3042 StackTrace: Index:1, Function:Enable, ParamList:2960 + */ + size_t startIndex = 0u; + DALI_TEST_CHECK( enabledDisableTrace.FindMethodAndParamsFromStartIndex( "Enable", "3042", startIndex ) ); + DALI_TEST_CHECK( enabledDisableTrace.FindMethodAndParamsFromStartIndex( "Enable", "2960", startIndex ) ); // 2960 is GL_STENCIL_TEST + DALI_TEST_CHECK( enabledDisableTrace.FindMethodAndParamsFromStartIndex( "Disable", "2960", startIndex ) ); + + // Swap the clipping actor from top of left branch to top of right branch. + actors[1].SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::DISABLED ); + actors[3].SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN ); + + // Gather the call trace. + enabledDisableTrace.Reset(); + enabledDisableTrace.Enable( true ); + application.SendNotification(); + application.Render(); + enabledDisableTrace.Enable( false ); + + // Check stencil is enabled but NOT disabled again (as right-hand branch of tree is drawn). + // This proves the draw order has remained the same. + startIndex = 0u; + DALI_TEST_CHECK( enabledDisableTrace.FindMethodAndParamsFromStartIndex( "Enable", "2960", startIndex ) ); + DALI_TEST_CHECK( !enabledDisableTrace.FindMethodAndParamsFromStartIndex( "Disable", "2960", startIndex ) ); + + END_TEST; +} + int UtcDaliActorPropertyClippingActorWithRendererOverride(void) { // This test checks that an actor with clipping will be ignored if overridden by the Renderer properties. @@ -4713,9 +4826,14 @@ int UtcDaliActorLowerBelow(void) actorC.SetProperty( Actor::Property::WIDTH_RESIZE_POLICY, "FILL_TO_PARENT" ); actorC.SetProperty( Actor::Property::HEIGHT_RESIZE_POLICY, "FILL_TO_PARENT" ); - stage.Add( actorA ); - stage.Add( actorB ); - stage.Add( actorC ); + Actor container = Actor::New(); + container.SetParentOrigin( ParentOrigin::CENTER ); + container.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); + stage.Add( container ); + + container.Add( actorA ); + container.Add( actorB ); + container.Add( actorC ); ResetTouchCallbacks(); @@ -4793,10 +4911,9 @@ int UtcDaliActorLowerBelow(void) indexB = glSetUniformStack.FindIndexFromMethodAndParams( "uRendererColor", "2" ); indexA = glSetUniformStack.FindIndexFromMethodAndParams( "uRendererColor", "1" ); - tet_infoline( "Testing B above A and C at bottom\n" ); - bool BAC = ( indexB > indexA) && ( indexA > indexC ); // B at TOP, then A then C at bottom - - DALI_TEST_EQUALS( BAC, true, TEST_LOCATION ); + tet_infoline( "Testing render order is A, C, B" ); + DALI_TEST_EQUALS( indexC > indexA, true, TEST_LOCATION ); + DALI_TEST_EQUALS( indexB > indexC, true, TEST_LOCATION ); DALI_TEST_EQUALS( gTouchCallBackCalled, false, TEST_LOCATION ); DALI_TEST_EQUALS( gTouchCallBackCalled2, true, TEST_LOCATION ); @@ -4804,9 +4921,9 @@ int UtcDaliActorLowerBelow(void) ResetTouchCallbacks(); - tet_printf( "Lower actor B below Actor C leaving A on top\n" ); + tet_printf( "Lower actor C below Actor A leaving B on top\n" ); - DevelActor::LowerBelow( actorB, actorC ); + DevelActor::LowerBelow( actorC, actorA ); // Ensure sorting happens at end of Core::ProcessEvents() before next touch application.SendNotification(); application.Render(); @@ -4824,19 +4941,18 @@ int UtcDaliActorLowerBelow(void) indexB = glSetUniformStack.FindIndexFromMethodAndParams( "uRendererColor", "2" ); indexA = glSetUniformStack.FindIndexFromMethodAndParams( "uRendererColor", "1" ); - bool ACB = ( indexA > indexC) && ( indexC > indexB ); // A on TOP, then C then B at bottom - - DALI_TEST_EQUALS( ACB, true, TEST_LOCATION ); + DALI_TEST_EQUALS( indexA > indexC, true, TEST_LOCATION ); + DALI_TEST_EQUALS( indexB > indexA, true, TEST_LOCATION ); - DALI_TEST_EQUALS( gTouchCallBackCalled, true, TEST_LOCATION ); - DALI_TEST_EQUALS( gTouchCallBackCalled2, false, TEST_LOCATION ); + DALI_TEST_EQUALS( gTouchCallBackCalled, false, TEST_LOCATION ); + DALI_TEST_EQUALS( gTouchCallBackCalled2, true, TEST_LOCATION ); DALI_TEST_EQUALS( gTouchCallBackCalled3, false , TEST_LOCATION ); ResetTouchCallbacks(); - tet_printf( "Lower actor A below Actor C leaving C on top\n" ); + tet_printf( "Lower actor B below Actor C leaving A on top\n" ); - DevelActor::LowerBelow( actorA, actorC ); + DevelActor::LowerBelow( actorB, actorC ); // Ensure sorting happens at end of Core::ProcessEvents() before next touch application.SendNotification(); application.Render(); @@ -4854,71 +4970,14 @@ int UtcDaliActorLowerBelow(void) indexB = glSetUniformStack.FindIndexFromMethodAndParams( "uRendererColor", "2" ); indexA = glSetUniformStack.FindIndexFromMethodAndParams( "uRendererColor", "1" ); - bool CAB = ( indexC > indexA) && ( indexA > indexB ); - - DALI_TEST_EQUALS( CAB, true, TEST_LOCATION ); + DALI_TEST_EQUALS( indexC > indexB, true, TEST_LOCATION ); + DALI_TEST_EQUALS( indexA > indexC, true, TEST_LOCATION ); END_TEST; } -int UtcDaliActorMaxSiblingOrder(void) -{ - tet_infoline( "UtcDaliActor De-fragment of sibling order once max index reached\n" ); - - TestApplication application; - - int testOrders[] = { 0,1,3,5,17,998, 999 }; - int resultingOrders[] = { 0,1,2,3,4,6,5 }; - - const int TEST_ORDERS_COUNT = sizeof( testOrders ) / sizeof( testOrders[0] ); - - Stage stage( Stage::GetCurrent() ); - - Actor parent = Actor::New(); - - for ( int index = 0; index < TEST_ORDERS_COUNT; index++ ) - { - Actor newActor = Actor::New(); - newActor.SetProperty(Dali::DevelActor::Property::SIBLING_ORDER, testOrders[index] ); - parent.Add( newActor ); - } - stage.Add( parent ); - tet_printf( "Sibling Order %d children :", parent.GetChildCount() ); - for ( unsigned int index = 0; index < parent.GetChildCount(); index ++) - { - Actor sibling = parent.GetChildAt( index ); - int siblingOrder = 0; - Property::Value value = sibling.GetProperty(Dali::DevelActor::Property::SIBLING_ORDER ); - value.Get( siblingOrder ); - tet_printf( "%d, ", siblingOrder ); - } - tet_printf( "\n" ); - - Actor sibling = parent.GetChildAt( 5 ); - DevelActor::RaiseToTop( sibling ); - - // Ensure sorting happens at end of Core::ProcessEvents() - application.SendNotification(); - application.Render(); - - tet_printf( "Sibling Order %d children :", parent.GetChildCount() ); - for ( unsigned int index = 0; index < parent.GetChildCount(); index ++) - { - Actor sibling = parent.GetChildAt( index ); - int siblingOrder = 0; - Property::Value value = sibling.GetProperty(Dali::DevelActor::Property::SIBLING_ORDER ); - value.Get( siblingOrder ); - tet_printf( "%d, ", siblingOrder ); - DALI_TEST_EQUALS( siblingOrder, resultingOrders[ index] , TEST_LOCATION ); - } - - tet_printf( "\n" ); - - END_TEST; -} - -int UtcDaliActorRaiseAboveLowerBelowDifferentParentsN(void) +int UtcDaliActorRaiseAboveDifferentParentsN(void) { tet_infoline( "UtcDaliActor RaiseToAbove test with actor and target actor having different parents \n" ); @@ -5938,6 +5997,7 @@ int utcDaliActorPositionUsesAnchorPointOnlyInheritPosition(void) END_TEST; } + int utcDaliActorVisibilityChangeSignalSelf(void) { TestApplication application; @@ -6020,4 +6080,119 @@ int utcDaliActorVisibilityChangeSignalChildren(void) childData.Check( false /* not called */, TEST_LOCATION ); grandChildData.Check( false /* not called */, TEST_LOCATION ); - END_TEST;} + END_TEST; +} + +int utcDaliActorVisibilityChangeSignalAfterAnimation(void) +{ + TestApplication application; + tet_infoline( "Check that the visibility change signal is emitted when the visibility changes when an animation starts" ); + + Actor actor = Actor::New(); + Stage::GetCurrent().Add( actor ); + + application.SendNotification(); + application.Render(); + + VisibilityChangedFunctorData data; + DevelActor::VisibilityChangedSignal( actor ).Connect( &application, VisibilityChangedFunctor( data ) ); + + Animation animation = Animation::New( 1.0f ); + animation.AnimateTo( Property( actor, Actor::Property::VISIBLE ), false ); + + data.Check( false, TEST_LOCATION ); + DALI_TEST_EQUALS( actor.GetProperty< bool >( Actor::Property::VISIBLE ), true, TEST_LOCATION ); + DALI_TEST_EQUALS( actor.GetCurrentProperty< bool >( Actor::Property::VISIBLE ), true, TEST_LOCATION ); + + tet_infoline( "Play the animation and check the property value" ); + animation.Play(); + + data.Check( true /* called */, actor, false /* not visible */, DevelActor::VisibilityChange::SELF, TEST_LOCATION ); + DALI_TEST_EQUALS( actor.GetProperty< bool >( Actor::Property::VISIBLE ), false, TEST_LOCATION ); + + tet_infoline( "Animation not currently finished, so the current visibility should still be true" ); + DALI_TEST_EQUALS( actor.GetCurrentProperty< bool >( Actor::Property::VISIBLE ), true, TEST_LOCATION ); + + application.SendNotification(); + application.Render( 1100 ); // After the animation + + DALI_TEST_EQUALS( actor.GetCurrentProperty< bool >( Actor::Property::VISIBLE ), false, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliActorLayoutDirectionProperty(void) +{ + TestApplication application; + tet_infoline( "Check layout direction property" ); + + Actor actor0 = Actor::New(); + DALI_TEST_EQUALS( actor0.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + Stage::GetCurrent().Add( actor0 ); + + application.SendNotification(); + application.Render(); + + Actor actor1 = Actor::New(); + DALI_TEST_EQUALS( actor1.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + Actor actor2 = Actor::New(); + DALI_TEST_EQUALS( actor2.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + Actor actor3 = Actor::New(); + DALI_TEST_EQUALS( actor3.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + Actor actor4 = Actor::New(); + DALI_TEST_EQUALS( actor4.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + Actor actor5 = Actor::New(); + DALI_TEST_EQUALS( actor5.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + Actor actor6 = Actor::New(); + DALI_TEST_EQUALS( actor6.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + Actor actor7 = Actor::New(); + DALI_TEST_EQUALS( actor7.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + Actor actor8 = Actor::New(); + DALI_TEST_EQUALS( actor8.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + Actor actor9 = Actor::New(); + DALI_TEST_EQUALS( actor9.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + + actor1.Add( actor2 ); + actor1.SetProperty( DevelActor::Property::LAYOUT_DIRECTION, "RTL" ); + DALI_TEST_EQUALS( actor1.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "RTL", TEST_LOCATION ); + DALI_TEST_EQUALS( actor2.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "RTL", TEST_LOCATION ); + + actor0.Add( actor1 ); + DALI_TEST_EQUALS( actor1.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + DALI_TEST_EQUALS( actor2.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + + Stage::GetCurrent().Add( actor3 ); + actor3.Add( actor4 ); + actor4.Add( actor5 ); + actor5.Add( actor6 ); + actor5.Add( actor7 ); + actor7.Add( actor8 ); + actor8.Add( actor9 ); + actor3.SetProperty( DevelActor::Property::LAYOUT_DIRECTION, "RTL" ); + actor5.SetProperty( DevelActor::Property::LAYOUT_DIRECTION, "LTR" ); + + DALI_TEST_EQUALS( actor8.GetProperty< bool >( DevelActor::Property::LAYOUT_DIRECTION_INHERITANCE ), true, TEST_LOCATION ); + actor8.SetProperty( DevelActor::Property::LAYOUT_DIRECTION_INHERITANCE, false ); + DALI_TEST_EQUALS( actor8.GetProperty< bool >( DevelActor::Property::LAYOUT_DIRECTION_INHERITANCE ), false, TEST_LOCATION ); + + actor7.SetProperty( DevelActor::Property::LAYOUT_DIRECTION, "RTL" ); + + DALI_TEST_EQUALS( actor3.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "RTL", TEST_LOCATION ); + DALI_TEST_EQUALS( actor4.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "RTL", TEST_LOCATION ); + DALI_TEST_EQUALS( actor5.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + DALI_TEST_EQUALS( actor6.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + DALI_TEST_EQUALS( actor7.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "RTL", TEST_LOCATION ); + DALI_TEST_EQUALS( actor8.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + DALI_TEST_EQUALS( actor9.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + + actor8.SetProperty( DevelActor::Property::LAYOUT_DIRECTION, "RTL" ); + DALI_TEST_EQUALS( actor8.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "RTL", TEST_LOCATION ); + DALI_TEST_EQUALS( actor9.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "RTL", TEST_LOCATION ); + + actor7.SetProperty( DevelActor::Property::LAYOUT_DIRECTION, "LTR" ); + DALI_TEST_EQUALS( actor7.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "LTR", TEST_LOCATION ); + DALI_TEST_EQUALS( actor8.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "RTL", TEST_LOCATION ); + DALI_TEST_EQUALS( actor9.GetProperty< std::string >( DevelActor::Property::LAYOUT_DIRECTION ), "RTL", TEST_LOCATION ); + + END_TEST; +}