X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Futc-Dali-ControlImpl.cpp;h=6fe4af63a2461aa21bec550b5c48971051662dfb;hp=6965f358da2206eba0a5b865ec6f440726ca25c7;hb=670cb07df58286ca6f155c1b8e1455af948aac84;hpb=c803046c24398c2037a83d105a932976dede943f diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ControlImpl.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ControlImpl.cpp index 6965f35..6fe4af6 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ControlImpl.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ControlImpl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2015 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. @@ -25,13 +25,16 @@ #include #include +#include #include -#include +#include #include #include #include #include #include +#include + #include "dummy-control.h" @@ -196,17 +199,17 @@ int UtcDaliControlImplDisableGestureDetector(void) TapGestureDetector tap = dummyImpl.GetTapGestureDetector(); LongPressGestureDetector longPress = dummyImpl.GetLongPressGestureDetector(); - DALI_TEST_EQUALS( pinch.GetAttachedActors().empty(), false, TEST_LOCATION ); - DALI_TEST_EQUALS( pan.GetAttachedActors().empty(), false, TEST_LOCATION ); - DALI_TEST_EQUALS( tap.GetAttachedActors().empty(), false, TEST_LOCATION ); - DALI_TEST_EQUALS( longPress.GetAttachedActors().empty(), false, TEST_LOCATION ); + DALI_TEST_EQUALS( 0 == pinch.GetAttachedActorCount(), false, TEST_LOCATION ); + DALI_TEST_EQUALS( 0 == pan.GetAttachedActorCount(), false, TEST_LOCATION ); + DALI_TEST_EQUALS( 0 == tap.GetAttachedActorCount(), false, TEST_LOCATION ); + DALI_TEST_EQUALS( 0 == longPress.GetAttachedActorCount(), false, TEST_LOCATION ); dummyImpl.DisableGestureDetection( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) ); - DALI_TEST_EQUALS( pinch.GetAttachedActors().empty(), true, TEST_LOCATION ); - DALI_TEST_EQUALS( pan.GetAttachedActors().empty(), true, TEST_LOCATION ); - DALI_TEST_EQUALS( tap.GetAttachedActors().empty(), true, TEST_LOCATION ); - DALI_TEST_EQUALS( longPress.GetAttachedActors().empty(), true, TEST_LOCATION ); + DALI_TEST_EQUALS( 0 == pinch.GetAttachedActorCount(), true, TEST_LOCATION ); + DALI_TEST_EQUALS( 0 == pan.GetAttachedActorCount(), true, TEST_LOCATION ); + DALI_TEST_EQUALS( 0 == tap.GetAttachedActorCount(), true, TEST_LOCATION ); + DALI_TEST_EQUALS( 0 == longPress.GetAttachedActorCount(), true, TEST_LOCATION ); } END_TEST; } @@ -218,7 +221,7 @@ int UtcDaliControlImplOnGestureMethods(void) // Check gesture actually happens { DummyControl dummy = DummyControl::New(true); - dummy.SetSize( Vector3(100.0f, 100.0f, 100.0f) ); + dummy.SetSize( Vector2(100.0f, 100.0f ) ); dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT); Stage::GetCurrent().Add(dummy); @@ -278,7 +281,7 @@ int UtcDaliControlImplOnGestureMethods(void) // Ensure full code coverage { DummyControl dummy = DummyControl::New(); - dummy.SetSize( Vector3(100.0f, 100.0f, 100.0f) ); + dummy.SetSize( Vector2( 100.0f, 100.0f ) ); dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT); Stage::GetCurrent().Add(dummy); @@ -351,7 +354,7 @@ int UtcDaliControlImplChildAddAndRemove(void) DALI_TEST_EQUALS( dummyImpl.childAddCalled, false, TEST_LOCATION ); DALI_TEST_EQUALS( dummy.GetChildCount(), 0u, TEST_LOCATION ); - Actor actor = RenderableActor::New(); + Actor actor = Actor::New(); dummy.Add(actor); DALI_TEST_EQUALS( dummyImpl.childAddCalled, true, TEST_LOCATION ); DALI_TEST_EQUALS( dummy.GetChildCount(), 1u, TEST_LOCATION ); @@ -379,7 +382,7 @@ int UtcDaliControlImplChildAddAndRemove(void) application.SendNotification(); DALI_TEST_EQUALS( dummy.GetChildCount(), 0u, TEST_LOCATION ); - Actor actor = RenderableActor::New(); + Actor actor = Actor::New(); dummy.Add(actor); DALI_TEST_EQUALS( dummy.GetChildCount(), 1u, TEST_LOCATION ); @@ -437,7 +440,7 @@ int UtcDaliControlImplStageConnection(void) END_TEST; } -int UtcDaliControlImplSizeSet(void) +int UtcDaliControlImplSizeSetP(void) { ToolkitTestApplication application; @@ -449,46 +452,51 @@ int UtcDaliControlImplSizeSet(void) application.Render(); application.SendNotification(); - DALI_TEST_EQUALS( dummyImpl.sizeSetCalled, false, TEST_LOCATION ); - Vector3 size(100.0f, 200.0f, 0.0f); - dummy.SetSize(size); + DALI_TEST_EQUALS( dummyImpl.sizeSetCalled, false, TEST_LOCATION ); // Size not set, no onSizeSet called + Vector2 size(100.0f, 200.0f); + dummy.SetSize( size ); + + DALI_TEST_EQUALS( dummyImpl.sizeSetCalled, false, TEST_LOCATION ); // Size is going to get negotiated, no onSizeSet called - application.Render(); application.SendNotification(); application.Render(); - application.SendNotification(); - DALI_TEST_EQUALS(size, dummy.GetCurrentSize(), TEST_LOCATION); + DALI_TEST_EQUALS( size, dummy.GetCurrentSize().GetVectorXY(), TEST_LOCATION ); DALI_TEST_EQUALS( dummyImpl.sizeSetCalled, true, TEST_LOCATION ); Stage::GetCurrent().Remove(dummy); } - // Ensure full code coverage + END_TEST; +} + +int UtcDaliControlImplSizeSet2P(void) +{ + ToolkitTestApplication application; + { DummyControl dummy = DummyControl::New(); Stage::GetCurrent().Add(dummy); - Vector3 size(100.0f, 200.0f, 0.0f); - DALI_TEST_CHECK( size != dummy.GetCurrentSize() ); + Vector2 size(100.0f, 200.0f); + DALI_TEST_CHECK( size != dummy.GetCurrentSize().GetVectorXY() ); - application.Render(); application.SendNotification(); + application.Render(); dummy.SetSize(size); - application.Render(); application.SendNotification(); application.Render(); - application.SendNotification(); - DALI_TEST_EQUALS(size, dummy.GetCurrentSize(), TEST_LOCATION); + DALI_TEST_EQUALS(size, dummy.GetCurrentSize().GetVectorXY(), TEST_LOCATION); Stage::GetCurrent().Remove(dummy); } END_TEST; } + int UtcDaliControlImplSizeAnimation(void) { ToolkitTestApplication application; @@ -501,7 +509,7 @@ int UtcDaliControlImplSizeAnimation(void) DALI_TEST_EQUALS( dummyImpl.sizeAnimationCalled, false, TEST_LOCATION ); Animation animation = Animation::New(1.0f); - animation.Resize(dummy, Vector3(100.0f, 150.0f, 200.0f)); + animation.AnimateTo( Property( dummy, Actor::Property::SIZE ), Vector3( 100.0f, 150.0f, 200.0f ) ); animation.Play(); application.Render(); @@ -521,7 +529,7 @@ int UtcDaliControlImplSizeAnimation(void) Stage::GetCurrent().Add(dummy); Animation animation = Animation::New(1.0f); - animation.Resize(dummy, Vector3(100.0f, 150.0f, 200.0f)); + animation.AnimateTo( Property( dummy, Actor::Property::SIZE ), Vector3( 100.0f, 150.0f, 200.0f ) ); animation.Play(); application.Render(); @@ -544,7 +552,7 @@ int UtcDaliControlImplTouchEvent(void) DummyControl dummy = DummyControl::New( true ); DummyControlImplOverride& dummyImpl = static_cast(dummy.GetImplementation()); - dummy.SetSize(100.0f, 100.0f); + dummy.SetSize( Vector2( 100.0f, 100.0f ) ); dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT); Stage::GetCurrent().Add(dummy); @@ -555,7 +563,10 @@ int UtcDaliControlImplTouchEvent(void) DALI_TEST_EQUALS( dummyImpl.touchEventCalled, false, TEST_LOCATION ); Integration::TouchEvent touchEvent(1); - TouchPoint point(1, TouchPoint::Down, 20.0f, 20.0f); + Integration::Point point; + point.SetDeviceId( 1 ); + point.SetState( PointState::DOWN ); + point.SetScreenPosition( Vector2( 20.0f, 20.0f ) ); touchEvent.AddPoint(point); application.ProcessEvent(touchEvent); DALI_TEST_EQUALS( dummyImpl.touchEventCalled, true, TEST_LOCATION ); @@ -567,7 +578,7 @@ int UtcDaliControlImplTouchEvent(void) { DummyControl dummy = DummyControl::New(); - dummy.SetSize(100.0f, 100.0f); + dummy.SetSize( Vector2( 100.0f, 100.0f ) ); dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT); Stage::GetCurrent().Add(dummy); @@ -577,7 +588,10 @@ int UtcDaliControlImplTouchEvent(void) application.SendNotification(); Integration::TouchEvent touchEvent(1); - TouchPoint point(1, TouchPoint::Down, 20.0f, 20.0f); + Integration::Point point; + point.SetDeviceId( 1 ); + point.SetState( PointState::DOWN ); + point.SetScreenPosition( Vector2( 20.0f, 20.0f ) ); touchEvent.AddPoint(point); application.ProcessEvent(touchEvent); @@ -586,10 +600,7 @@ int UtcDaliControlImplTouchEvent(void) END_TEST; } -/////////////////////////////////////////////////////////////////////////////////////////////////// - - -int UtcDaliControlImplKeyEvent(void) +int UtcDaliControlImplHoverEvent(void) { ToolkitTestApplication application; @@ -597,18 +608,24 @@ int UtcDaliControlImplKeyEvent(void) DummyControl dummy = DummyControl::New( true ); DummyControlImplOverride& dummyImpl = static_cast(dummy.GetImplementation()); + dummy.SetSize( Vector2( 100.0f, 100.0f ) ); + dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT); Stage::GetCurrent().Add(dummy); - dummy.SetKeyInputFocus(); application.Render(); application.SendNotification(); application.Render(); application.SendNotification(); - DALI_TEST_EQUALS( dummyImpl.keyEventCalled, false, TEST_LOCATION ); - Integration::KeyEvent keyEvent; - application.ProcessEvent(keyEvent); - DALI_TEST_EQUALS( dummyImpl.keyEventCalled, true, TEST_LOCATION ); + DALI_TEST_EQUALS( dummyImpl.hoverEventCalled, false, TEST_LOCATION ); + Integration::HoverEvent event(1); + Integration::Point point; + point.SetDeviceId( 1 ); + point.SetState( PointState::MOTION ); + point.SetScreenPosition( Vector2( 20.0f, 20.0f ) ); + event.AddPoint(point); + application.ProcessEvent( event ); + DALI_TEST_EQUALS( dummyImpl.hoverEventCalled, true, TEST_LOCATION ); Stage::GetCurrent().Remove(dummy); } @@ -617,52 +634,72 @@ int UtcDaliControlImplKeyEvent(void) { DummyControl dummy = DummyControl::New(); + dummy.SetSize( Vector2( 100.0f, 100.0f ) ); + dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT); Stage::GetCurrent().Add(dummy); - dummy.SetKeyInputFocus(); application.Render(); application.SendNotification(); application.Render(); application.SendNotification(); - Integration::KeyEvent keyEvent; - application.ProcessEvent(keyEvent); + Integration::HoverEvent event(1); + Integration::Point point; + point.SetDeviceId( 1 ); + point.SetState( PointState::MOTION ); + point.SetScreenPosition( Vector2( 20.0f, 20.0f ) ); + event.AddPoint(point); + application.ProcessEvent( event ); Stage::GetCurrent().Remove(dummy); } END_TEST; } -int UtcDaliControlImplStyleChange(void) +/////////////////////////////////////////////////////////////////////////////////////////////////// + + +int UtcDaliControlImplKeyEvent(void) { ToolkitTestApplication application; - DummyControl dummy = DummyControl::New( true ); - DummyControlImplOverride& dummyImpl = static_cast(dummy.GetImplementation()); + { + DummyControl dummy = DummyControl::New( true ); + DummyControlImplOverride& dummyImpl = static_cast(dummy.GetImplementation()); - Stage::GetCurrent().Add(dummy); + Stage::GetCurrent().Add(dummy); + dummy.SetKeyInputFocus(); - application.Render(); - application.SendNotification(); - application.Render(); - application.SendNotification(); + application.Render(); + application.SendNotification(); + application.Render(); + application.SendNotification(); - // Add a Control and normal Actor as children - DummyControl dummyChild = DummyControl::New(); - dummy.Add(dummyChild); + DALI_TEST_EQUALS( dummyImpl.keyEventCalled, false, TEST_LOCATION ); + Integration::KeyEvent keyEvent; + application.ProcessEvent(keyEvent); + DALI_TEST_EQUALS( dummyImpl.keyEventCalled, true, TEST_LOCATION ); - Actor actor = Actor::New(); - dummy.Add(actor); + Stage::GetCurrent().Remove(dummy); + } - DALI_TEST_EQUALS( dummyImpl.fontChangeCalled, false, TEST_LOCATION ); - StyleChange styleChange; - styleChange.defaultFontChange = true; - Dali::StyleMonitor styleMonitor = StyleMonitor::Get(); - styleMonitor.EmitStyleChangeSignal(styleChange); + // Ensure full code coverage + { + DummyControl dummy = DummyControl::New(); - DALI_TEST_EQUALS( dummyImpl.fontChangeCalled, true, TEST_LOCATION ); + Stage::GetCurrent().Add(dummy); + dummy.SetKeyInputFocus(); - Stage::GetCurrent().Remove(dummy); + application.Render(); + application.SendNotification(); + application.Render(); + application.SendNotification(); + + Integration::KeyEvent keyEvent; + application.ProcessEvent(keyEvent); + + Stage::GetCurrent().Remove(dummy); + } END_TEST; } @@ -726,7 +763,6 @@ int UtcDaliControlImplKeyInputFocusLost(void) DummyControlImplOverride& dummyImpl = static_cast(dummy.GetImplementation()); - dummyImpl.OnAccessibilityValueChange( true ); dummyImpl.IsKeyboardNavigationSupported(); dummyImpl.IsKeyboardFocusGroup(); @@ -755,13 +791,13 @@ int UtcDaliControlImplTypeRegistry(void) /////////////////////////////////////////////////////////////////////////////////////////////////// namespace { -static bool MouseWheelEventCallback(Actor actor, const MouseWheelEvent& event) +static bool WheelEventCallback(Actor actor, const WheelEvent& event) { return false; } } -int UtcDaliControlImplMouseWheelEvent(void) +int UtcDaliControlImplWheelEvent(void) { ToolkitTestApplication application; @@ -769,24 +805,24 @@ int UtcDaliControlImplMouseWheelEvent(void) DummyControl dummy = DummyControl::New( true ); DummyControlImplOverride& dummyImpl = static_cast(dummy.GetImplementation()); - dummy.SetSize(100.0f, 100.0f); + dummy.SetSize( Vector2( 100.0f, 100.0f ) ); dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT); Stage::GetCurrent().Add(dummy); - dummy.MouseWheelEventSignal().Connect(&MouseWheelEventCallback); + dummy.WheelEventSignal().Connect(&WheelEventCallback); application.Render(); application.SendNotification(); application.Render(); application.SendNotification(); - DALI_TEST_EQUALS( dummyImpl.mouseWheelEventCalled, false, TEST_LOCATION ); + DALI_TEST_EQUALS( dummyImpl.wheelEventCalled, false, TEST_LOCATION ); - // simulate a mouse wheel event + // simulate a wheel event Vector2 screenCoordinates( 10.0f, 10.0f ); - Integration::MouseWheelEvent event(0, 0u, screenCoordinates, 1, 1000u); - application.ProcessEvent(event); - DALI_TEST_EQUALS( dummyImpl.mouseWheelEventCalled, true, TEST_LOCATION ); + Integration::WheelEvent event( Integration::WheelEvent::MOUSE_WHEEL, 0, 0u, screenCoordinates, 1, 1000u ); + application.ProcessEvent( event ); + DALI_TEST_EQUALS( dummyImpl.wheelEventCalled, true, TEST_LOCATION ); Stage::GetCurrent().Remove(dummy); } @@ -795,23 +831,529 @@ int UtcDaliControlImplMouseWheelEvent(void) { DummyControl dummy = DummyControl::New(); - dummy.SetSize(100.0f, 100.0f); + dummy.SetSize( Vector2( 100.0f, 100.0f ) ); dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT); Stage::GetCurrent().Add(dummy); - dummy.MouseWheelEventSignal().Connect(&MouseWheelEventCallback); + dummy.WheelEventSignal().Connect(&WheelEventCallback); application.Render(); application.SendNotification(); application.Render(); application.SendNotification(); - // simulate a mouse wheel event + // simulate a wheel event Vector2 screenCoordinates( 20.0f, 20.0f ); - Integration::MouseWheelEvent event(0, 0u, screenCoordinates, 1, 1000u); - application.ProcessEvent(event); + Integration::WheelEvent event( Integration::WheelEvent::MOUSE_WHEEL, 0, 0u, screenCoordinates, 1, 1000u ); + application.ProcessEvent( event ); Stage::GetCurrent().Remove(dummy); } END_TEST; } + +int UtcDaliControlImplSetStyleName(void) +{ + ToolkitTestApplication application; + + { + DummyControl dummy = DummyControl::New( true ); + + dummy.SetSize( Vector2( 100.0f, 100.0f ) ); + dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT); + Stage::GetCurrent().Add(dummy); + + dummy.SetStyleName("TestStyle"); + + DALI_TEST_CHECK( dummy.GetStyleName() == "TestStyle" ); + + Stage::GetCurrent().Remove(dummy); + } + END_TEST; +} + +int UtcDaliControlImplOnStyleChangeN(void) +{ + ToolkitTestApplication application; + Control dummy = Control::New(); + Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy ); + + // test that style manager is being used, passing an empty handle does nothing but does not crash either + Dali::Toolkit::StyleManager styleManager; + controlImpl.OnStyleChange( styleManager, StyleChange::THEME_CHANGE ); + // no crash so test passes + tet_result(TET_PASS); + + END_TEST; +} + + +int UtcDaliControlImplOnAccessibilityPanP(void) +{ + ToolkitTestApplication application; + Control dummy = Control::New(); + Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy ); + + PanGesture pan; + DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityPan( pan ), TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliControlImplOnAccessibilityTouchP(void) +{ + ToolkitTestApplication application; + Control dummy = Control::New(); + Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy ); + TouchEvent touch; + DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityTouch( touch ), TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliControlImplOnAccessibilityActivatedP(void) +{ + ToolkitTestApplication application; + + Control dummy = Control::New(); + Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy ); + DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityActivated(), TEST_LOCATION ); + + // Invoke the control's activate action + TypeInfo type = TypeRegistry::Get().GetTypeInfo( "Control" ); + DALI_TEST_CHECK( type ); + + BaseHandle handle = type.CreateInstance(); + DALI_TEST_CHECK( handle ); + + Property::Map attributes; + DALI_TEST_EQUALS( false, handle.DoAction("accessibilityActivated", attributes), TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliControlImplGetNextKeyboardFocusableActorP(void) +{ + ToolkitTestApplication application; + Control dummy = Control::New(); + Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy ); + + Actor currentFocusedActor; + Actor result = controlImpl.GetNextKeyboardFocusableActor( currentFocusedActor, Control::KeyboardFocus::LEFT, false ); + + DALI_TEST_EQUALS( result, currentFocusedActor, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliControlImplRegisterThenReRegisterVisual(void) +{ + ToolkitTestApplication application; + + DummyControl dummy = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(dummy.GetImplementation()); + + Property::Index index =1; + Actor placementActor = Actor::New(); + + DALI_TEST_CHECK( !dummyImpl.GetVisual( index ) ); + DALI_TEST_CHECK( !dummyImpl.GetPlacementActor( index ) ); + + Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get(); + Toolkit::Visual::Base visual; + + Property::Map map; + map[Visual::Property::TYPE] = Visual::COLOR; + map[ColorVisual::Property::MIX_COLOR] = Color::RED; + + visual = visualFactory.CreateVisual( map ); + DALI_TEST_CHECK(visual); + + // Register index with a color visual + dummyImpl.RegisterVisual( index, placementActor, visual ); + + DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual ); + DALI_TEST_CHECK( dummyImpl.GetPlacementActor( index ) == placementActor ); + + Property::Map newMap; + newMap[Visual::Property::TYPE] = Visual::COLOR; + newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE; + + visual = visualFactory.CreateVisual( newMap ); + DALI_TEST_CHECK(visual); + + // ReRegister with altered color visual + dummyImpl.RegisterVisual( index, placementActor, visual ); + + DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual ); + DALI_TEST_CHECK( dummyImpl.GetPlacementActor( index ) == placementActor ); + + tet_result(TET_PASS); + + END_TEST; +} + +int UtcDaliControlImplRegisterVisaulThenReRegisterToSelf(void) +{ + ToolkitTestApplication application; + + DummyControl dummy = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(dummy.GetImplementation()); + + Property::Index index =1; + Actor placementActor = Actor::New(); + + Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get(); + Toolkit::Visual::Base visual; + + Property::Map map; + map[Visual::Property::TYPE] = Visual::COLOR; + map[ColorVisual::Property::MIX_COLOR] = Color::RED; + + visual = visualFactory.CreateVisual( map ); + DALI_TEST_CHECK(visual); + + // Register index with a color visual + dummyImpl.RegisterVisual( index, placementActor, visual ); + + DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual ); + DALI_TEST_CHECK( dummyImpl.GetPlacementActor( index ) == placementActor ); + + // ReRegister to self + dummyImpl.RegisterVisual( index, dummy, visual ); + + DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual ); + DALI_TEST_CHECK( dummyImpl.GetPlacementActor( index ) == dummy ); + + END_TEST; +} + +int UtcDaliControlImplRegisterVisualToSelf(void) +{ + ToolkitTestApplication application; + + Test::ObjectDestructionTracker objectDestructionTracker; + + { + DummyControl dummy = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(dummy.GetImplementation()); + objectDestructionTracker.Start( dummy ); + + Property::Index index = 1; + Actor placementActor = Actor::New(); + + Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get(); + Toolkit::Visual::Base visual; + + Property::Map map; + map[Visual::Property::TYPE] = Visual::COLOR; + map[ColorVisual::Property::MIX_COLOR] = Color::RED; + + visual = visualFactory.CreateVisual( map ); + DALI_TEST_CHECK(visual); + + // Register to self + dummyImpl.RegisterVisual( index, dummy, visual ); + + DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet + DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual ); + DALI_TEST_CHECK( dummyImpl.GetPlacementActor( index ) == dummy ); + } + + DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed + + END_TEST; +} + +int UtcDaliControlImplRegisterTwoVisuals(void) +{ + ToolkitTestApplication application; + + DummyControl dummy = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(dummy.GetImplementation()); + + Property::Index index =1; + Actor placementActor = Actor::New(); + + Property::Index index2 =2; + Actor secondPlacementActor = Actor::New(); + + Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get(); + Toolkit::Visual::Base visual; + Toolkit::Visual::Base secondVisual; + + Property::Map map; + map[Visual::Property::TYPE] = Visual::COLOR; + map[ColorVisual::Property::MIX_COLOR] = Color::RED; + + visual = visualFactory.CreateVisual( map ); + DALI_TEST_CHECK(visual); + + // Register index with a color visual + dummyImpl.RegisterVisual( index, placementActor, visual ); + + Property::Map newMap; + newMap[Visual::Property::TYPE] = Visual::COLOR; + newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE; + + secondVisual = visualFactory.CreateVisual( newMap ); + DALI_TEST_CHECK( secondVisual ); + + // ReRegister with altered color visual + dummyImpl.RegisterVisual( index2, secondPlacementActor, secondVisual ); + + DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual ); + DALI_TEST_CHECK( dummyImpl.GetPlacementActor( index ) == placementActor ); + + DALI_TEST_CHECK( dummyImpl.GetVisual( index2 ) == secondVisual ); + DALI_TEST_CHECK( dummyImpl.GetPlacementActor( index2 ) == secondPlacementActor ); + + END_TEST; +} + +int UtcDaliControlImplRegisterUnregisterVisual(void) +{ + ToolkitTestApplication application; + + DummyControl dummy = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(dummy.GetImplementation()); + + Property::Index index =1; + Actor placementActor = Actor::New(); + + Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get(); + Toolkit::Visual::Base visual; + + Property::Map map; + map[Visual::Property::TYPE] = Visual::COLOR; + map[ColorVisual::Property::MIX_COLOR] = Color::RED; + + visual = visualFactory.CreateVisual( map ); + DALI_TEST_CHECK(visual); + + // Register index with a color visual + dummyImpl.RegisterVisual( index, placementActor, visual ); + + DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual ); + DALI_TEST_CHECK( dummyImpl.GetPlacementActor( index ) == placementActor ); + + // Unregister visual + dummyImpl.UnregisterVisual( index ); + + DALI_TEST_CHECK( !dummyImpl.GetVisual( index ) ); + DALI_TEST_CHECK( !dummyImpl.GetPlacementActor( index ) ); + + END_TEST; +} + +int UtcDaliControlImplRegisterDisabledVisual(void) +{ + ToolkitTestApplication application; + + DummyControl dummy = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(dummy.GetImplementation()); + + Property::Index TEST_PROPERTY =1; + + Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get(); + Toolkit::Visual::Base visual; + + Property::Map map; + map[Visual::Property::TYPE] = Visual::COLOR; + map[ColorVisual::Property::MIX_COLOR] = Color::RED; + + visual = visualFactory.CreateVisual( map ); + DALI_TEST_CHECK(visual); + + // Register index with a color visual + dummyImpl.RegisterVisual( TEST_PROPERTY, dummy, visual, false ); + + DALI_TEST_CHECK( dummyImpl.GetVisual( TEST_PROPERTY ) == visual ); + DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false ); + + Stage::GetCurrent().Add(dummy); + + // Render and notify + application.SendNotification(); + application.Render(); + + DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false ); + + DALI_TEST_CHECK( dummy.OnStage() == true ); + + dummyImpl.EnableVisual( TEST_PROPERTY, true ); + + DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true ); + + END_TEST; +} + +int UtcDaliControlImplDisableRegisteredVisual(void) +{ + ToolkitTestApplication application; + + DummyControl dummy = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(dummy.GetImplementation()); + + Property::Index TEST_PROPERTY =1; + + Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get(); + Toolkit::Visual::Base visual; + + Property::Map map; + map[Visual::Property::TYPE] = Visual::COLOR; + map[ColorVisual::Property::MIX_COLOR] = Color::RED; + + visual = visualFactory.CreateVisual( map ); + DALI_TEST_CHECK(visual); + + // Register index with a color visual + dummyImpl.RegisterVisual( TEST_PROPERTY, dummy, visual ); + + Stage::GetCurrent().Add(dummy); + + // Render and notify + application.SendNotification(); + application.Render(); + + DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true); + + DALI_TEST_CHECK( dummy.OnStage() == true ); + + dummyImpl.EnableVisual( TEST_PROPERTY, false ); + + DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false ); + + END_TEST; +} + +int UtcDaliControlImplEnabledVisualParentRemovedFromStage(void) +{ + // Visual enabled but then parent removed from stage, test ensures visual/renderer are also removed from stage. + // Then adding parent back to stage should automatically put visual/renderer back + + ToolkitTestApplication application; + + DummyControl dummy = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(dummy.GetImplementation()); + + Property::Index TEST_PROPERTY =1; + + Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get(); + Toolkit::Visual::Base visual; + + Property::Map map; + map[Visual::Property::TYPE] = Visual::COLOR; + map[ColorVisual::Property::MIX_COLOR] = Color::RED; + + visual = visualFactory.CreateVisual( map ); + DALI_TEST_CHECK(visual); + + // Register index with a color visual + dummyImpl.RegisterVisual( TEST_PROPERTY, dummy, visual, false ); + + Stage::GetCurrent().Add(dummy); + // Render and notify + application.SendNotification(); + application.Render(); + + DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false ); + DALI_TEST_CHECK( dummy.OnStage() == true ); + dummyImpl.EnableVisual( TEST_PROPERTY, true ); + + // Render and notify + application.SendNotification(); + application.Render(); + DALI_TEST_CHECK( dummy.GetRendererCount() == 1u ); + + // Remove control from stage, visual should be removed from stage too + Stage::GetCurrent().Remove(dummy); + // Render and notify + application.SendNotification(); + application.Render(); + DALI_TEST_CHECK( dummy.GetRendererCount() == 0u ); + + Stage::GetCurrent().Add(dummy); + // Render and notify + application.SendNotification(); + application.Render(); + DALI_TEST_CHECK( dummy.GetRendererCount() == 1u ); + + DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true ); + + END_TEST; +} + +int UtcDaliControlImplRegisterTwoVisualsAndEnableOnlyOne(void) +{ + // Register 2 visuals and enable by default + // Disable 1 visual + // Remove control from stage then put it back + // Check that only 1 visual/renderer is staged. + + ToolkitTestApplication application; + + DummyControl dummy = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(dummy.GetImplementation()); + + Property::Index TEST_PROPERTY1 =1; + Property::Index TEST_PROPERTY2 =2; + + Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get(); + Toolkit::Visual::Base visual1; + Toolkit::Visual::Base visual2; + + Property::Map map; + map[Visual::Property::TYPE] = Visual::COLOR; + map[ColorVisual::Property::MIX_COLOR] = Color::RED; + + Property::Map map2; + map[Visual::Property::TYPE] = Visual::COLOR; + map[ColorVisual::Property::MIX_COLOR] = Color::BLUE; + + visual1 = visualFactory.CreateVisual( map ); + DALI_TEST_CHECK(visual1); + + visual2 = visualFactory.CreateVisual( map ); + DALI_TEST_CHECK(visual2); + + // Register index with a color visual + dummyImpl.RegisterVisual( TEST_PROPERTY1, dummy, visual1 ); + // Register second index with a color visual + dummyImpl.RegisterVisual( TEST_PROPERTY2, dummy, visual2 ); + + Stage::GetCurrent().Add(dummy); + // Render and notify + application.SendNotification(); + application.Render(); + + DALI_TEST_CHECK( dummy.GetRendererCount() == 2u ); + DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true ); + DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true); + DALI_TEST_CHECK( dummy.OnStage() == true ); + dummyImpl.EnableVisual( TEST_PROPERTY2, false ); + + // Render and notify + application.SendNotification(); + application.Render(); + DALI_TEST_CHECK( dummy.GetRendererCount() == 1u ); + + // Remove control from stage, visual should be removed from stage too + Stage::GetCurrent().Remove(dummy); + // Render and notify + application.SendNotification(); + application.Render(); + DALI_TEST_CHECK( dummy.GetRendererCount() == 0u ); + + Stage::GetCurrent().Add(dummy); + // Render and notify + application.SendNotification(); + application.Render(); + DALI_TEST_CHECK( dummy.GetRendererCount() == 1u ); + + DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true ); + DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY2 ) == false ); + + END_TEST; +} +