X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali%2Futc-Dali-CustomActor.cpp;h=ce6d317ef10500465da14fd0577c9b6333062a21;hb=e08e2992259823c5f9832ad959ffa510b0445a6c;hp=4eca0f7256772b2f0a42529cd7e74ce116645b39;hpb=6a9a86815730fc72cdb815b9f577e50f4f3cb49d;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/automated-tests/src/dali/utc-Dali-CustomActor.cpp b/automated-tests/src/dali/utc-Dali-CustomActor.cpp index 4eca0f7..ce6d317 100644 --- a/automated-tests/src/dali/utc-Dali-CustomActor.cpp +++ b/automated-tests/src/dali/utc-Dali-CustomActor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2017 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,622 +19,31 @@ #include #include +#include #include #include -#include +#include #include - +#include #include "dali-test-suite-utils/dali-test-suite-utils.h" +#include "test-custom-actor.h" using namespace Dali; void custom_actor_test_startup(void) { - test_return_value = TET_UNDEF; -} - -void custom_actor_test_cleanup(void) -{ - test_return_value = TET_PASS; -} - -namespace -{ - -std::vector< std::string > MasterCallStack; - -} // anon namespace - -// TypeRegistry needs custom actor Implementations to have the same name (namespaces are ignored so we use one here) -namespace Impl -{ - -struct TestCustomActor : public CustomActorImpl -{ - /** - * Constructor - */ - TestCustomActor() - : CustomActorImpl( true ), // requires touch - mDaliProperty( Property::INVALID_INDEX ), - mSizeSet( Vector3::ZERO ), - mTargetSize( Vector3::ZERO ) - { - SetRequiresMouseWheelEvents(true); - SetRequiresHoverEvents(true); - } - - /** - * Destructor - */ - virtual ~TestCustomActor() - { - } - - void Initialize( const char* name = NULL ) - { - mDaliProperty = Self().RegisterProperty( "Dali", std::string("no"), Property::READ_WRITE); - - OnInitialize( name ); - } - - virtual void OnInitialize( const char* name ) {} - - /** - * Resets the call stack - */ - void ResetCallStack() - { - mSizeSet = Vector3(); - mTargetSize = Vector3(); - mMethodsCalled.clear(); - } - - void AddToCallStacks( const char* method ) - { - mMethodsCalled.push_back( method ); - - // Combine Actor name with method string - std::string nameAndMethod( Self().GetName() ); - if ( 0 == nameAndMethod.size() ) - { - nameAndMethod = "Unknown: "; - } - else - { - nameAndMethod += ": "; - } - nameAndMethod += method; - - MasterCallStack.push_back( nameAndMethod ); - } - - // From CustomActorImpl - virtual void OnStageConnection() - { - AddToCallStacks("OnStageConnection"); - } - virtual void OnStageDisconnection() - { - AddToCallStacks("OnStageDisconnection"); - } - virtual void OnChildAdd(Actor& child) - { - AddToCallStacks("OnChildAdd"); - } - virtual void OnChildRemove(Actor& child) - { - AddToCallStacks("OnChildRemove"); - } - virtual void OnPropertySet( Property::Index index, Property::Value propertyValue ) - { - AddToCallStacks("OnPropertySet"); - } - virtual void OnSizeSet(const Vector3& targetSize) - { - mSizeSet = targetSize; - AddToCallStacks("OnSizeSet"); - } - virtual void OnSizeAnimation(Animation& animation, const Vector3& targetSize) - { - mTargetSize = targetSize; - AddToCallStacks("OnSizeAnimation"); - } - virtual bool OnTouchEvent(const TouchEvent& event) - { - AddToCallStacks("OnTouchEvent"); - return true; - } - virtual bool OnHoverEvent(const HoverEvent& event) - { - AddToCallStacks("OnHoverEvent"); - return true; - } - virtual bool OnMouseWheelEvent(const MouseWheelEvent& event) - { - AddToCallStacks("OnMouseWheelEvent"); - return true; - } - virtual bool OnKeyEvent(const KeyEvent& event) - { - AddToCallStacks("OnKeyEvent"); - return true; - } - virtual void OnKeyInputFocusGained() - { - AddToCallStacks("OnKeyInputFocusGained"); - } - virtual void OnKeyInputFocusLost() - { - AddToCallStacks("OnKeyInputFocusLost"); - } - virtual Vector3 GetNaturalSize() - { - return Vector3( 0.0f, 0.0f, 0.0f ); - } - - void SetDaliProperty(std::string s) - { - Self().SetProperty(mDaliProperty, s) ; - } - - Property::Index mDaliProperty; - std::vector< std::string > mMethodsCalled; - Vector3 mSizeSet; - Vector3 mTargetSize; -}; - -/** - * Variant which adds a new child during OnStageConnection - */ -struct TestCustomActorVariant1 : public TestCustomActor -{ - /** - * Constructor - */ - TestCustomActorVariant1( Actor childToAdd ) - : mChildToAdd( childToAdd ) - { - } - - // From CustomActorImpl - virtual void OnStageConnection() - { - // Chain up first - TestCustomActor::OnStageConnection(); - - // Add the child - Self().Add( mChildToAdd ); - } - - Actor mChildToAdd; -}; - -/** - * Variant which removes children during OnStageConnection - */ -struct TestCustomActorVariant2 : public TestCustomActor -{ - /** - * Constructor - */ - TestCustomActorVariant2() - { - } - - // From CustomActorImpl - virtual void OnStageConnection() - { - // Chain up first - TestCustomActor::OnStageConnection(); - - // Remove all the children - for( unsigned int i=0, num=Self().GetChildCount(); iInitialize(); - - return custom; - } - - static TestCustomActor NewVariant1( Actor childToAdd ) - { - Impl::TestCustomActor* impl = new Impl::TestCustomActorVariant1( childToAdd ); - TestCustomActor custom( *impl ); // takes ownership - - impl->Initialize(); - - return custom; - } - - static TestCustomActor NewVariant2() - { - Impl::TestCustomActor* impl = new Impl::TestCustomActorVariant2(); - TestCustomActor custom( *impl ); // takes ownership - - impl->Initialize(); - - return custom; - } - - static TestCustomActor NewVariant3( Actor childToAdd ) - { - Impl::TestCustomActor* impl = new Impl::TestCustomActorVariant3( childToAdd ); - TestCustomActor custom( *impl ); // takes ownership - - impl->Initialize(); - - return custom; - } - - static TestCustomActor NewVariant4() - { - Impl::TestCustomActor* impl = new Impl::TestCustomActorVariant4(); - TestCustomActor custom( *impl ); // takes ownership - - impl->Initialize(); - - return custom; - } - - static TestCustomActor NewVariant5() - { - Impl::TestCustomActor* impl = new Impl::TestCustomActorVariant5(); - TestCustomActor custom( *impl ); // takes ownership - - impl->Initialize(); - - return custom; - } - - static TestCustomActor NewVariant6() - { - Impl::TestCustomActor* impl = new Impl::TestCustomActorVariant6(); - TestCustomActor custom( *impl ); // takes ownership - - impl->Initialize(); - - return custom; - } - - static TestCustomActor NewVariant7( const char* name ) - { - Impl::TestCustomActor* impl = new Impl::TestCustomActorVariant7(); - TestCustomActor custom( *impl ); // takes ownership - - impl->Initialize( name ); - - return custom; - } - - static TestCustomActor NewVariant8( Actor rival ) - { - Impl::TestCustomActor* impl = new Impl::TestCustomActorVariant8( rival ); - TestCustomActor custom( *impl ); // takes ownership - - impl->Initialize(); - - return custom; - } - - virtual ~TestCustomActor() - { - } - - Impl::TestCustomActor& GetImpl() - { - return static_cast(GetImplementation()); - } - - std::vector< std::string >& GetMethodsCalled() - { - return GetImpl().mMethodsCalled; - } - - void ResetCallStack() - { - GetImpl().ResetCallStack(); - } - - void SetDaliProperty(std::string s) - { - GetImpl().SetDaliProperty(s); - } - - Vector3 GetSize() - { - return GetImpl().mSizeSet; - } - - Vector3 GetTargetSize() - { - return GetImpl().mTargetSize; - } - - virtual Vector3 GetNaturalSize() - { - return Vector3( 0.0f, 0.0f, 0.0f ); - } - -private: - - TestCustomActor( Impl::TestCustomActor& impl ) : CustomActor( impl ) - { - } -}; - - - -using namespace Dali; + test_return_value = TET_UNDEF; +} -BaseHandle CreateActor() +void custom_actor_test_cleanup(void) { - return TestCustomActor::New(); + test_return_value = TET_PASS; } -Dali::TypeRegistration mType( typeid(TestCustomActor), typeid(Dali::CustomActor), CreateActor ); -} // anon namespace + +using namespace Dali; int UtcDaliCustomActorDestructor(void) @@ -651,8 +60,8 @@ int UtcDaliCustomActorDestructor(void) int UtcDaliCustomActorImplDestructor(void) { TestApplication application; - CustomActorImpl* actor = new Impl::TestCustomActor(); - delete actor; + CustomActorImpl* actor = new Test::Impl::TestCustomActor(); + CustomActor customActor( *actor ); // Will automatically unref at the end of this function DALI_TEST_CHECK( true ); END_TEST; @@ -664,7 +73,7 @@ int UtcDaliCustomActorDownCast(void) TestApplication application; tet_infoline("Testing Dali::CustomActor::DownCast()"); - TestCustomActor custom = TestCustomActor::New(); + Test::TestCustomActor custom = Test::TestCustomActor::New(); Actor anActor = Actor::New(); anActor.Add( custom ); @@ -709,7 +118,7 @@ int UtcDaliCustomActorOnStageConnectionDisconnection(void) TestApplication application; tet_infoline("Testing Dali::CustomActor::OnStageConnection() & OnStageDisconnection"); - TestCustomActor custom = TestCustomActor::New(); + Test::TestCustomActor custom = Test::TestCustomActor::New(); DALI_TEST_EQUALS( 0, (int)(custom.GetMethodsCalled().size()), TEST_LOCATION ); // add the custom actor to stage @@ -749,26 +158,26 @@ int UtcDaliCustomActorOnStageConnectionOrder(void) * OnStageConnection should be received for A, B, D, E, C, and finally F */ - TestCustomActor actorA = TestCustomActor::New(); + Test::TestCustomActor actorA = Test::TestCustomActor::New(); actorA.SetName( "ActorA" ); - TestCustomActor actorB = TestCustomActor::New(); + Test::TestCustomActor actorB = Test::TestCustomActor::New(); actorB.SetName( "ActorB" ); actorA.Add( actorB ); - TestCustomActor actorC = TestCustomActor::New(); + Test::TestCustomActor actorC = Test::TestCustomActor::New(); actorC.SetName( "ActorC" ); actorA.Add( actorC ); - TestCustomActor actorD = TestCustomActor::New(); + Test::TestCustomActor actorD = Test::TestCustomActor::New(); actorD.SetName( "ActorD" ); actorB.Add( actorD ); - TestCustomActor actorE = TestCustomActor::New(); + Test::TestCustomActor actorE = Test::TestCustomActor::New(); actorE.SetName( "ActorE" ); actorB.Add( actorE ); - TestCustomActor actorF = TestCustomActor::New(); + Test::TestCustomActor actorF = Test::TestCustomActor::New(); actorF.SetName( "ActorF" ); actorC.Add( actorF ); @@ -841,27 +250,27 @@ int UtcDaliCustomActorOnStageDisconnectionOrder(void) * OnStageDisconnection should be received for D, E, B, F, C, and finally A. */ - TestCustomActor actorA = TestCustomActor::New(); + Test::TestCustomActor actorA = Test::TestCustomActor::New(); actorA.SetName( "ActorA" ); stage.Add( actorA ); - TestCustomActor actorB = TestCustomActor::New(); + Test::TestCustomActor actorB = Test::TestCustomActor::New(); actorB.SetName( "ActorB" ); actorA.Add( actorB ); - TestCustomActor actorC = TestCustomActor::New(); + Test::TestCustomActor actorC = Test::TestCustomActor::New(); actorC.SetName( "ActorC" ); actorA.Add( actorC ); - TestCustomActor actorD = TestCustomActor::New(); + Test::TestCustomActor actorD = Test::TestCustomActor::New(); actorD.SetName( "ActorD" ); actorB.Add( actorD ); - TestCustomActor actorE = TestCustomActor::New(); + Test::TestCustomActor actorE = Test::TestCustomActor::New(); actorE.SetName( "ActorE" ); actorB.Add( actorE ); - TestCustomActor actorF = TestCustomActor::New(); + Test::TestCustomActor actorF = Test::TestCustomActor::New(); actorF.SetName( "ActorF" ); actorC.Add( actorF ); @@ -932,10 +341,10 @@ int UtcDaliCustomActorAddDuringOnStageConnection(void) * The actorB is provided as the child */ - TestCustomActor actorB = TestCustomActor::New(); + Test::TestCustomActor actorB = Test::TestCustomActor::New(); actorB.SetName( "ActorB" ); - TestCustomActor actorA = TestCustomActor::NewVariant1( actorB ); + Test::TestCustomActor actorA = Test::TestCustomActor::NewVariant1( actorB ); actorA.SetName( "ActorA" ); stage.Add( actorA ); @@ -982,14 +391,14 @@ int UtcDaliCustomActorRemoveDuringOnStageConnection(void) * Actors B & C are provided as the children */ - TestCustomActor actorA = TestCustomActor::NewVariant2(); + Test::TestCustomActor actorA = Test::TestCustomActor::NewVariant2(); actorA.SetName( "ActorA" ); - TestCustomActor actorB = TestCustomActor::New(); + Test::TestCustomActor actorB = Test::TestCustomActor::New(); actorB.SetName( "ActorB" ); actorA.Add( actorB ); - TestCustomActor actorC = TestCustomActor::New(); + Test::TestCustomActor actorC = Test::TestCustomActor::New(); actorC.SetName( "ActorC" ); actorA.Add( actorC ); @@ -1044,10 +453,10 @@ int UtcDaliCustomActorAddDuringOnStageDisconnection(void) * The actorB is provided as the child */ - TestCustomActor actorB = TestCustomActor::New(); + Test::TestCustomActor actorB = Test::TestCustomActor::New(); actorB.SetName( "ActorB" ); - TestCustomActor actorA = TestCustomActor::NewVariant3( actorB ); + Test::TestCustomActor actorA = Test::TestCustomActor::NewVariant3( actorB ); actorA.SetName( "ActorA" ); stage.Add( actorA ); @@ -1097,11 +506,11 @@ int UtcDaliCustomActorRemoveDuringOnStageDisconnection(void) * The actorB is provided as the child */ - TestCustomActor actorA = TestCustomActor::NewVariant4(); + Test::TestCustomActor actorA = Test::TestCustomActor::NewVariant4(); actorA.SetName( "ActorA" ); stage.Add( actorA ); - TestCustomActor actorB = TestCustomActor::New(); + Test::TestCustomActor actorB = Test::TestCustomActor::New(); actorB.SetName( "ActorB" ); actorA.Add( actorB ); @@ -1155,10 +564,10 @@ int UtcDaliCustomActorRemoveParentDuringOnStageConnection(void) * The child actor is interrupting the parent's connection to stage, therefore the parent should not get an OnStageDisconnection() */ - TestCustomActor actorA = TestCustomActor::New(); + Test::TestCustomActor actorA = Test::TestCustomActor::New(); actorA.SetName( "ActorA" ); - TestCustomActor actorB = TestCustomActor::NewVariant5(); + Test::TestCustomActor actorB = Test::TestCustomActor::NewVariant5(); actorB.SetName( "ActorB" ); actorA.Add( actorB ); @@ -1203,11 +612,11 @@ int UtcDaliCustomActorAddParentDuringOnStageDisconnection(void) * The child actor is interrupting the disconnection, such that parent should not get a OnStageDisconnection() */ - TestCustomActor actorA = TestCustomActor::New(); + Test::TestCustomActor actorA = Test::TestCustomActor::New(); actorA.SetName( "ActorA" ); stage.Add( actorA ); - TestCustomActor actorB = TestCustomActor::NewVariant6(); + Test::TestCustomActor actorB = Test::TestCustomActor::NewVariant6(); actorB.SetName( "ActorB" ); actorA.Add( actorB ); @@ -1244,7 +653,7 @@ int UtcDaliCustomActorOnChildAddRemove(void) TestApplication application; tet_infoline("Testing Dali::CustomActor::OnChildAdd() & OnChildRemove()"); - TestCustomActor custom = TestCustomActor::New(); + Test::TestCustomActor custom = Test::TestCustomActor::New(); DALI_TEST_EQUALS( 0, (int)(custom.GetMethodsCalled().size()), TEST_LOCATION ); Actor aChild = Actor::New(); @@ -1273,10 +682,10 @@ int UtcDaliCustomActorReparentDuringOnChildAdd(void) * The actorB is the child of actorA */ - TestCustomActor actorA = TestCustomActor::NewVariant7( "ActorA" ); + Test::TestCustomActor actorA = Test::TestCustomActor::NewVariant7( "ActorA" ); stage.Add( actorA ); - TestCustomActor actorB = TestCustomActor::New(); + Test::TestCustomActor actorB = Test::TestCustomActor::New(); actorB.SetName( "ActorB" ); actorA.Add( actorB ); @@ -1357,11 +766,11 @@ int UtcDaliCustomActorRemoveDuringOnChildRemove(void) * This should be a NOOP since the reparenting has not occured yet */ - TestCustomActor actorB = TestCustomActor::New(); + Test::TestCustomActor actorB = Test::TestCustomActor::New(); actorB.SetName( "ActorB" ); stage.Add( actorB ); - TestCustomActor actorA = TestCustomActor::NewVariant8( actorB ); + Test::TestCustomActor actorA = Test::TestCustomActor::NewVariant8( actorB ); actorA.SetName( "ActorA" ); stage.Add( actorA ); @@ -1396,17 +805,21 @@ int UtcDaliCustomActorRemoveDuringOnChildRemove(void) DALI_TEST_EQUALS( "OnChildRemove", actorA.GetMethodsCalled()[ 2 ], TEST_LOCATION ); // The actorB added to actorA // mContainer will then receive OnChildAdd - DALI_TEST_EQUALS( 2, (int)(actorB.GetMethodsCalled().size()), TEST_LOCATION ); + DALI_TEST_EQUALS( 3, (int)(actorB.GetMethodsCalled().size()), TEST_LOCATION ); DALI_TEST_EQUALS( "OnStageConnection", actorB.GetMethodsCalled()[ 0 ], TEST_LOCATION ); - DALI_TEST_EQUALS( "OnChildAdd", actorB.GetMethodsCalled()[ 1 ], TEST_LOCATION ); + // The derived class are always notified, no matter the child is successfully removed or not + DALI_TEST_EQUALS( "OnChildRemove", actorB.GetMethodsCalled()[ 1 ], TEST_LOCATION ); + DALI_TEST_EQUALS( "OnChildAdd", actorB.GetMethodsCalled()[ 2 ], TEST_LOCATION ); - DALI_TEST_EQUALS( 5, (int)(MasterCallStack.size()), TEST_LOCATION ); + DALI_TEST_EQUALS( 6, (int)(MasterCallStack.size()), TEST_LOCATION ); DALI_TEST_EQUALS( "ActorB: OnStageConnection", MasterCallStack[ 0 ], TEST_LOCATION ); DALI_TEST_EQUALS( "ActorA: OnStageConnection", MasterCallStack[ 1 ], TEST_LOCATION ); DALI_TEST_EQUALS( "ActorA: OnChildAdd", MasterCallStack[ 2 ], TEST_LOCATION ); DALI_TEST_EQUALS( "ActorA: OnChildRemove", MasterCallStack[ 3 ], TEST_LOCATION ); - DALI_TEST_EQUALS( "ActorB: OnChildAdd", MasterCallStack[ 4 ], TEST_LOCATION ); + // The derived class are always notified, no matter the child is successfully removed or not + DALI_TEST_EQUALS( "ActorB: OnChildRemove", MasterCallStack[ 4 ], TEST_LOCATION ); + DALI_TEST_EQUALS( "ActorB: OnChildAdd", MasterCallStack[ 5 ], TEST_LOCATION ); // Excercise the message passing to Update thread @@ -1421,10 +834,10 @@ int UtcDaliCustomActorOnPropertySet(void) TestApplication application; tet_infoline("Testing Dali::CustomActor::OnPropertySet()"); - TestCustomActor custom = TestCustomActor::New(); + Test::TestCustomActor custom = Test::TestCustomActor::New(); DALI_TEST_EQUALS( 0, (int)(custom.GetMethodsCalled().size()), TEST_LOCATION ); - custom.SetDaliProperty("yes") ; + custom.SetDaliProperty("yes"); DALI_TEST_EQUALS( 1, (int)(custom.GetMethodsCalled().size()), TEST_LOCATION ); DALI_TEST_EQUALS( "OnPropertySet", custom.GetMethodsCalled()[ 0 ], TEST_LOCATION ); @@ -1436,7 +849,7 @@ int UtcDaliCustomActorOnSizeSet(void) TestApplication application; tet_infoline("Testing Dali::CustomActor::OnSizeSet()"); - TestCustomActor custom = TestCustomActor::New(); + Test::TestCustomActor custom = Test::TestCustomActor::New(); DALI_TEST_EQUALS( 0, (int)(custom.GetMethodsCalled().size()), TEST_LOCATION ); custom.SetSize( Vector2( 9.0f, 10.0f ) ); @@ -1459,23 +872,54 @@ int UtcDaliCustomActorOnSizeAnimation(void) TestApplication application; tet_infoline("Testing Dali::CustomActor::OnSizeAnimation()"); - TestCustomActor custom = TestCustomActor::New(); + Test::TestCustomActor custom = Test::TestCustomActor::New(); DALI_TEST_EQUALS( 0, (int)(custom.GetMethodsCalled().size()), TEST_LOCATION ); Animation anim = Animation::New( 1.0f ); - anim.Resize( custom, Vector3( 8.0f, 9.0f, 10.0f ) ); + anim.AnimateTo( Property( custom, Actor::Property::SIZE ), Vector3( 8.0f, 9.0f, 10.0f ) ); + anim.Play(); + + application.SendNotification(); + application.Render( static_cast( 1000.0f ) ); + DALI_TEST_EQUALS( 1, (int)(custom.GetMethodsCalled().size()), TEST_LOCATION ); DALI_TEST_EQUALS( "OnSizeAnimation", custom.GetMethodsCalled()[ 0 ], TEST_LOCATION ); DALI_TEST_EQUALS( 8.0f, custom.GetTargetSize().width, TEST_LOCATION ); DALI_TEST_EQUALS( 9.0f, custom.GetTargetSize().height, TEST_LOCATION ); DALI_TEST_EQUALS( 10.0f, custom.GetTargetSize().depth, TEST_LOCATION ); + END_TEST; +} + +int UtcDaliCustomActorSizeComponentAnimation(void) +{ + TestApplication application; + tet_infoline("Testing Size component animation"); + + Test::TestCustomActor custom = Test::TestCustomActor::New(); + float intialWidth( 10.0f ); + + DALI_TEST_EQUALS( 0, (int)(custom.GetMethodsCalled().size()), TEST_LOCATION ); + custom.SetSize( intialWidth, 10.0f); // First method + + Animation anim = Animation::New( 1.0f ); + + DALI_TEST_EQUALS( 1, (int)(custom.GetMethodsCalled().size()), TEST_LOCATION ); + + anim.AnimateTo( Property( custom, Actor::Property::SIZE_WIDTH ), 20.0f ); + + DALI_TEST_EQUALS( 1, (int)(custom.GetMethodsCalled().size()), TEST_LOCATION ); + + anim.Play(); // Triggers second method ( OnSizeAnimation ) + + application.SendNotification(); + application.Render( static_cast( 1000.0f ) ); - anim.Resize( custom, 1.0f, 2.0f ); DALI_TEST_EQUALS( 2, (int)(custom.GetMethodsCalled().size()), TEST_LOCATION ); + DALI_TEST_EQUALS( "OnSizeAnimation", custom.GetMethodsCalled()[ 1 ], TEST_LOCATION ); - DALI_TEST_EQUALS( 1.0f, custom.GetTargetSize().width, TEST_LOCATION ); - DALI_TEST_EQUALS( 2.0f, custom.GetTargetSize().height, TEST_LOCATION ); + END_TEST; + } int UtcDaliCustomActorOnTouchEvent(void) @@ -1483,7 +927,7 @@ int UtcDaliCustomActorOnTouchEvent(void) TestApplication application; tet_infoline("Testing Dali::CustomActor::OnTouchEvent()"); - TestCustomActor custom = TestCustomActor::New(); + Test::TestCustomActor custom = Test::TestCustomActor::New(); DALI_TEST_EQUALS( 0, (int)(custom.GetMethodsCalled().size()), TEST_LOCATION ); // set size for custom actor @@ -1499,7 +943,9 @@ int UtcDaliCustomActorOnTouchEvent(void) application.Render(); // simulate a touch event - Dali::TouchPoint point( 0, TouchPoint::Down, 1, 1 ); + Dali::Integration::Point point; + point.SetState( PointState::DOWN ); + point.SetScreenPosition( Vector2( 1, 1 ) ); Dali::Integration::TouchEvent event; event.AddPoint( point ); application.ProcessEvent( event ); @@ -1514,7 +960,7 @@ int UtcDaliCustomActorOnHoverEvent(void) TestApplication application; tet_infoline("Testing Dali::CustomActor::OnHoverEvent()"); - TestCustomActor custom = TestCustomActor::New(); + Test::TestCustomActor custom = Test::TestCustomActor::New(); DALI_TEST_EQUALS( 0, (int)(custom.GetMethodsCalled().size()), TEST_LOCATION ); // set size for custom actor @@ -1530,7 +976,9 @@ int UtcDaliCustomActorOnHoverEvent(void) application.Render(); // simulate a hover event - Dali::TouchPoint point( 0, TouchPoint::Motion, 1, 1 ); + Dali::Integration::Point point; + point.SetState( PointState::MOTION ); + point.SetScreenPosition( Vector2( 1, 1 ) ); Dali::Integration::HoverEvent event; event.AddPoint( point ); application.ProcessEvent( event ); @@ -1540,12 +988,12 @@ int UtcDaliCustomActorOnHoverEvent(void) END_TEST; } -int UtcDaliCustomActorOnMouseWheelEvent(void) +int UtcDaliCustomActorOnWheelEvent(void) { TestApplication application; - tet_infoline("Testing Dali::CustomActor::OnMouseWheelEvent()"); + tet_infoline("Testing Dali::CustomActor::OnWheelEvent()"); - TestCustomActor custom = TestCustomActor::New(); + Test::TestCustomActor custom = Test::TestCustomActor::New(); DALI_TEST_EQUALS( 0, (int)(custom.GetMethodsCalled().size()), TEST_LOCATION ); // set size for custom actor @@ -1560,26 +1008,26 @@ int UtcDaliCustomActorOnMouseWheelEvent(void) application.SendNotification(); application.Render(); - // simulate a mouse wheel event + // simulate a wheel event Vector2 screenCoordinates( 10.0f, 10.0f ); - Integration::MouseWheelEvent event(0, 0u, screenCoordinates, 1, 1000u); + Integration::WheelEvent event( Integration::WheelEvent::MOUSE_WHEEL, 0, 0u, screenCoordinates, 1, 1000u ); application.ProcessEvent( event ); DALI_TEST_EQUALS( 1, (int)(custom.GetMethodsCalled().size()), TEST_LOCATION ); - DALI_TEST_EQUALS( "OnMouseWheelEvent", custom.GetMethodsCalled()[ 0 ], TEST_LOCATION ); + DALI_TEST_EQUALS( "OnWheelEvent", custom.GetMethodsCalled()[ 0 ], TEST_LOCATION ); END_TEST; } int UtcDaliCustomActorImplOnPropertySet(void) { TestApplication application; - CustomActorImpl* impl = new Impl::SimpleTestCustomActor(); + CustomActorImpl* impl = new Test::Impl::SimpleTestCustomActor(); + CustomActor customActor( *impl ); // Will automatically unref at the end of this function impl->OnPropertySet( 0, 0 ); DALI_TEST_CHECK( true ); - delete impl; END_TEST; } @@ -1587,11 +1035,11 @@ int UtcDaliCustomActorGetImplementation(void) { TestApplication application; - TestCustomActor custom = TestCustomActor::New(); + Test::TestCustomActor custom = Test::TestCustomActor::New(); CustomActorImpl& impl = custom.GetImplementation(); impl.GetOwner(); // Test - const TestCustomActor constCustom = TestCustomActor::New(); + const Test::TestCustomActor constCustom = Test::TestCustomActor::New(); const CustomActorImpl& constImpl = constCustom.GetImplementation(); constImpl.GetOwner(); // Test @@ -1604,13 +1052,13 @@ int UtcDaliCustomActorDoAction(void) TestApplication application; tet_infoline("Testing Dali::CustomActor::DoAction()"); - TestCustomActor custom = TestCustomActor::New(); + Test::TestCustomActor custom = Test::TestCustomActor::New(); BaseHandle customActorObject = custom; DALI_TEST_CHECK(customActorObject); - std::vector attributes; + Property::Map attributes; // Check that an invalid command is not performed DALI_TEST_CHECK(customActorObject.DoAction("invalidCommand", attributes) == false); @@ -1640,3 +1088,458 @@ int UtcDaliCustomActorDoAction(void) DALI_TEST_CHECK(custom.IsVisible() == true); END_TEST; } + +int UtcDaliCustomActorCustomActor(void) +{ + Dali::CustomActor customA; + Dali::CustomActor customB( customA ); + + DALI_TEST_CHECK( customA == customB ); + + END_TEST; +} + +int UtcDaliCustomActorImplRelayoutRequest(void) +{ + TestApplication application; + + DALI_TEST_CHECK( gOnRelayout == false ); + + Test::TestCustomActor custom = Test::TestCustomActor::NewNegoSize(); + Stage::GetCurrent().Add(custom); + + application.SendNotification(); + application.Render(); + + DALI_TEST_CHECK( gOnRelayout == true ); + gOnRelayout = false; + + custom.TestRelayoutRequest(); + application.SendNotification(); + application.Render(); + + DALI_TEST_CHECK( gOnRelayout == true ); + + END_TEST; +} + +int UtcDaliCustomActorImplGetHeightForWidthBase(void) +{ + TestApplication application; + Test::TestCustomActor custom = Test::TestCustomActor::NewNegoSize(); + + float width = 300.0f; + + application.SendNotification(); + application.Render(); + + float v = custom.TestGetHeightForWidthBase( width ); + + DALI_TEST_CHECK( v == width ); + + END_TEST; +} + +int UtcDaliCustomActorImplGetWidthForHeightBase(void) +{ + TestApplication application; + Test::TestCustomActor custom = Test::TestCustomActor::NewNegoSize(); + + float height = 300.0f; + + application.SendNotification(); + application.Render(); + + float v = custom.TestGetWidthForHeightBase( height ); + + DALI_TEST_CHECK( v == height ); + + END_TEST; +} + +int UtcDaliCustomActorImplCalculateChildSizeBase(void) +{ + TestApplication application; + Test::TestCustomActor custom = Test::TestCustomActor::NewNegoSize(); + + Actor child = Actor::New(); + child.SetResizePolicy(Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS); + child.SetSize(150, 150); + + application.SendNotification(); + application.Render(); + + float v = custom.TestCalculateChildSizeBase( child, Dali::Dimension::ALL_DIMENSIONS ); + DALI_TEST_CHECK( v == 0.0f ); + + END_TEST; +} + +int UtcDaliCustomActorImplRelayoutDependentOnChildrenBase(void) +{ + TestApplication application; + Test::TestCustomActor custom = Test::TestCustomActor::NewNegoSize(); + custom.SetResizePolicy(Dali::ResizePolicy::FIT_TO_CHILDREN, Dali::Dimension::ALL_DIMENSIONS); + + bool v = custom.TestRelayoutDependentOnChildrenBase( Dali::Dimension::ALL_DIMENSIONS ); + DALI_TEST_CHECK( v == true ); + + application.SendNotification(); + application.Render(); + + custom.SetResizePolicy(Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS); + v = custom.TestRelayoutDependentOnChildrenBase( Dali::Dimension::WIDTH ); + DALI_TEST_CHECK( v == false ); + + // why is this here? + application.SendNotification(); + application.Render(); + + END_TEST; +} + +int UtcDaliCustomActorTypeRegistry(void) +{ + TestApplication application; + + // Register Type + TypeInfo type; + type = TypeRegistry::Get().GetTypeInfo( "CustomActor" ); + DALI_TEST_CHECK( type ); + BaseHandle handle = type.CreateInstance(); + + std::string name; + std::string exception; + + try + { + name = handle.GetTypeName(); + tet_result(TET_FAIL); + } + catch( DaliException& e ) + { + exception = e.condition; + DALI_TEST_EQUALS( exception, "handle && \"BaseObject handle is empty\"", TEST_LOCATION ); + } + + END_TEST; +} + + +int UtcDaliCustomActorGetExtensionP(void) +{ + TestApplication application; + + Test::TestCustomActor custom = Test::TestCustomActor::NewVariant5(); + + DALI_TEST_CHECK( NULL == custom.GetImplementation().GetExtension() ); + + END_TEST; +} + +int UtcDaliCustomActorOnConnectionDepth(void) +{ + TestApplication application; + tet_infoline("Testing Dali::CustomActor::OnStageConnection() hierarchy depth"); + + Stage stage = Stage::GetCurrent(); + + /* Build tree of actors: + * + * Depth + * + * A (parent) 1 + * / \ + * B C 2 + * / \ \ + * D E F 3 + * + * OnStageConnection should return 1 for A, 2 for B and C, and 3 for D, E and F. + */ + + Test::TestCustomActor actorA = Test::TestCustomActor::New(); + stage.Add( actorA ); + + Test::TestCustomActor actorB = Test::TestCustomActor::New(); + actorA.Add( actorB ); + + Test::TestCustomActor actorC = Test::TestCustomActor::New(); + actorA.Add( actorC ); + + Test::TestCustomActor actorD = Test::TestCustomActor::New(); + actorB.Add( actorD ); + + Test::TestCustomActor actorE = Test::TestCustomActor::New(); + actorB.Add( actorE ); + + Test::TestCustomActor actorF = Test::TestCustomActor::New(); + actorC.Add( actorF ); + + // Excercise the message passing to Update thread + application.SendNotification(); + application.Render(); + application.Render(); + + DALI_TEST_EQUALS( 1u, actorA.GetDepth(), TEST_LOCATION ); + DALI_TEST_EQUALS( 2u, actorB.GetDepth(), TEST_LOCATION ); + DALI_TEST_EQUALS( 2u, actorC.GetDepth(), TEST_LOCATION ); + DALI_TEST_EQUALS( 3u, actorD.GetDepth(), TEST_LOCATION ); + DALI_TEST_EQUALS( 3u, actorE.GetDepth(), TEST_LOCATION ); + DALI_TEST_EQUALS( 3u, actorF.GetDepth(), TEST_LOCATION ); + + END_TEST; +} + + +int UtcDaliCustomActorSetGetProperty(void) +{ + TestApplication application; // Need the type registry + + Test::TestCustomActor actor = Test::TestCustomActor::New(); + Stage::GetCurrent().Add( actor ); + + actor.SetProperty( Test::TestCustomActor::Property::TEST_PROPERTY1, 0.5f ); + actor.SetProperty( Test::TestCustomActor::Property::TEST_PROPERTY2, Color::WHITE ); + actor.SetProperty( Test::DevelTestCustomActor::Property::DEVEL_TEST_PROPERTY3, Color::BLUE ); + actor.SetProperty( Test::DevelTestCustomActor::Property::DEVEL_TEST_PROPERTY4, 20 ); + actor.SetProperty( Test::DevelTestCustomActor::Property::DEVEL_TEST_PROPERTY5, 40.0f ); + + Property::Value value = actor.GetProperty( Test::TestCustomActor::Property::TEST_PROPERTY1 ); + DALI_TEST_EQUALS( value.Get(), 0.5f, 0.001f, TEST_LOCATION ); + + value = actor.GetProperty( Test::TestCustomActor::Property::TEST_PROPERTY2 ); + DALI_TEST_EQUALS( value.Get(), Color::WHITE, 0.001f, TEST_LOCATION ); + + + value = actor.GetProperty( Test::DevelTestCustomActor::Property::DEVEL_TEST_PROPERTY3 ); + DALI_TEST_EQUALS( value.Get(), Color::BLUE, 0.001f, TEST_LOCATION ); + + value = actor.GetProperty( Test::DevelTestCustomActor::Property::DEVEL_TEST_PROPERTY4 ); + DALI_TEST_EQUALS( value.Get(), 20, TEST_LOCATION ); + + value = actor.GetProperty( Test::DevelTestCustomActor::Property::DEVEL_TEST_PROPERTY5 ); + DALI_TEST_EQUALS( value.Get(), 40.0f, 0.001f, TEST_LOCATION ); + + // Get read-only property + value = actor.GetProperty( Test::DevelTestCustomActor::Property::DEVEL_TEST_PROPERTY6 ); + DALI_TEST_EQUALS( value.Get(), 10.0f, 0.001f, TEST_LOCATION ); + + // Attempt to set read-only property and then ensure value hasn't changed + actor.SetProperty( Test::DevelTestCustomActor::Property::DEVEL_TEST_PROPERTY6, 40.0f ); + DALI_TEST_EQUALS( value.Get(), 10.0f, 0.001f, TEST_LOCATION ); + + END_TEST; +} + +int utcDaliActorGetTypeInfo(void) +{ + TestApplication application; + tet_infoline( "Get the type info of a derived actor" ); + + Test::TestCustomActor customActor = Test::TestCustomActor::New(); + + Dali::TypeInfo typeInfo = Dali::DevelCustomActor::GetTypeInfo( customActor ); + + DALI_TEST_EQUALS( typeInfo.GetName(), std::string("TestCustomActor"), TEST_LOCATION ); + + END_TEST; +} + +namespace Impl +{ +/** + * A custom actor that is not type registered on purpose + */ +struct UnregisteredCustomActor : public Dali::CustomActorImpl +{ + UnregisteredCustomActor() : CustomActorImpl( ACTOR_BEHAVIOUR_DEFAULT ) + { } + virtual ~UnregisteredCustomActor() + { } + virtual void OnStageConnection( int32_t depth ) + { } + virtual void OnStageDisconnection() + { } + virtual void OnChildAdd(Actor& child) + { } + virtual void OnChildRemove(Actor& child) + { } + virtual void OnPropertySet( Property::Index index, Property::Value propertyValue ) + { } + virtual void OnSizeSet(const Vector3& targetSize) + { } + virtual void OnSizeAnimation(Animation& animation, const Vector3& targetSize) + { } + virtual bool OnTouchEvent(const TouchEvent& event) DALI_DEPRECATED_API + { return false; } + virtual bool OnHoverEvent(const HoverEvent& event) + { return false; } + virtual bool OnKeyEvent(const KeyEvent& event) + { return false; } + virtual bool OnWheelEvent(const WheelEvent& event) + { return false; } + virtual void OnRelayout( const Vector2& size, RelayoutContainer& container ) + { } + virtual void OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension ) + { } + virtual Vector3 GetNaturalSize() + { return Vector3(); } + virtual float CalculateChildSize( const Dali::Actor& child, Dimension::Type dimension ) + { return 0.f; } + virtual float GetHeightForWidth( float width ) + { return 0.f; } + virtual float GetWidthForHeight( float height ) + { return 0.f; } + virtual bool RelayoutDependentOnChildren( Dimension::Type dimension = Dimension::ALL_DIMENSIONS ) + { return false; } + virtual void OnCalculateRelayoutSize( Dimension::Type dimension ) + { } + virtual void OnLayoutNegotiated( float size, Dimension::Type dimension ) + { } +}; +} +struct UnregisteredCustomActor : public Dali::CustomActor +{ + static UnregisteredCustomActor New() + { + Impl::UnregisteredCustomActor* impl = new Impl::UnregisteredCustomActor; + UnregisteredCustomActor custom( *impl ); // takes ownership + return custom; + } + UnregisteredCustomActor() + { } + ~UnregisteredCustomActor() + { } + UnregisteredCustomActor( Internal::CustomActor* impl ) + : CustomActor( impl ) + { } + UnregisteredCustomActor( Impl::UnregisteredCustomActor& impl ) + : CustomActor( impl ) + { } + static UnregisteredCustomActor DownCast( BaseHandle handle ) + { + UnregisteredCustomActor hndl; + CustomActor custom = Dali::CustomActor::DownCast( handle ); + if( custom ) + { + CustomActorImpl& customImpl = custom.GetImplementation(); + + Impl::UnregisteredCustomActor* impl = dynamic_cast( &customImpl ); + + if( impl ) + { + hndl = UnregisteredCustomActor( customImpl.GetOwner() ); + } + } + return hndl; + } +}; + +int UtcDaliCustomActorSetGetActorPropertyActionSignal(void) +{ + TestApplication application; // Need the type registry + + auto custom = UnregisteredCustomActor::New(); + Stage::GetCurrent().Add( custom ); + + // should have all actor properties + DALI_TEST_EQUALS( custom.GetPropertyType( Actor::Property::COLOR ), Property::VECTOR4, TEST_LOCATION ); + auto actorHandle = Actor::New(); + DALI_TEST_EQUALS( custom.GetPropertyCount(), actorHandle.GetPropertyCount(), TEST_LOCATION ); + + DALI_TEST_EQUALS( custom.IsVisible(), true, TEST_LOCATION ); + custom.SetProperty( Actor::Property::VISIBLE, false ); + application.SendNotification(); + application.Render(); // IsVisible returns scene value + DALI_TEST_EQUALS( custom.IsVisible(), false, TEST_LOCATION ); + + // should have custom actor typename (as it has not registered itself) + DALI_TEST_EQUALS( "CustomActor", custom.GetTypeName(), TEST_LOCATION ); + + // should have actor actions + custom.DoAction( "show", Property::Map() ); + DALI_TEST_EQUALS( custom.GetProperty( Actor::Property::VISIBLE ).Get(), true, TEST_LOCATION ); + + Animation animation = Animation::New(0.01f); // very short animation + // should be able to animate actor property + animation.AnimateTo( Property( custom, Actor::Property::POSITION ), Vector3( 100.0f, 150.0f, 200.0f ) ); + animation.Play(); + + application.SendNotification(); + application.Render(1000.f); + + DALI_TEST_EQUALS( Vector3( 100.0f, 150.0f, 200.0f ), custom.GetProperty( Actor::Property::POSITION ).Get(), TEST_LOCATION ); + DALI_TEST_EQUALS( Vector3( 100.0f, 150.0f, 200.0f ), custom.GetCurrentPosition(), TEST_LOCATION ); + + Dali::WeakHandle weakRef( custom ); + // should have actor signals + custom.ConnectSignal( &application, "offStage", + [weakRef]() + { + DALI_TEST_EQUALS( weakRef.GetHandle().OnStage(), false, TEST_LOCATION ); + } ); + + Stage::GetCurrent().Remove( custom ); + Stage::GetCurrent().Add( custom ); + + END_TEST; +} + +namespace Impl +{ +struct DerivedCustomActor : public UnregisteredCustomActor +{ }; +} + +struct DerivedCustomActor : public UnregisteredCustomActor +{ + static DerivedCustomActor New() + { + Impl::DerivedCustomActor* impl = new Impl::DerivedCustomActor; + DerivedCustomActor custom( *impl ); // takes ownership + return custom; + } + DerivedCustomActor() + { } + ~DerivedCustomActor() + { } + DerivedCustomActor( Internal::CustomActor* impl ) + : UnregisteredCustomActor( impl ) + { } + DerivedCustomActor( Impl::UnregisteredCustomActor& impl ) + : UnregisteredCustomActor( impl ) + { } +}; + +// register custom +DALI_TYPE_REGISTRATION_BEGIN( DerivedCustomActor, UnregisteredCustomActor, nullptr ); +DALI_TYPE_REGISTRATION_END() + +int UtcDaliCustomActorPropertyRegistrationDefaultValue(void) +{ + TestApplication application; // Need the type registry + + // register our base and add a property with default value for it + Dali::TypeRegistration typeRegistration( typeid( UnregisteredCustomActor ), typeid( Dali::CustomActor ), nullptr ); + + auto derived = DerivedCustomActor::New(); + Stage::GetCurrent().Add( derived ); + + // should have all actor properties + DALI_TEST_EQUALS( derived.GetPropertyType( Actor::Property::WORLD_MATRIX ), Property::MATRIX, TEST_LOCATION ); + auto actorHandle = Actor::New(); + DALI_TEST_EQUALS( derived.GetPropertyCount(), actorHandle.GetPropertyCount(), TEST_LOCATION ); + + // add a property in base class + AnimatablePropertyRegistration( typeRegistration, "Foobar", ANIMATABLE_PROPERTY_REGISTRATION_START_INDEX, 10.f ); + + // should be one more property now + DALI_TEST_EQUALS( derived.GetPropertyCount(), actorHandle.GetPropertyCount() + 1, TEST_LOCATION ); + // check that the default value is set for base class + DALI_TEST_EQUALS( UnregisteredCustomActor::New().GetProperty(ANIMATABLE_PROPERTY_REGISTRATION_START_INDEX).Get(), 10.f, TEST_LOCATION ); + // check that the default value is set for the derived instance as well + DALI_TEST_EQUALS( derived.GetProperty(ANIMATABLE_PROPERTY_REGISTRATION_START_INDEX).Get(), 10.f, TEST_LOCATION ); + + END_TEST; +} +