2 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 // Need to override adaptor classes for toolkit test harness, so include
22 // test harness headers before dali headers.
23 #include <dali-toolkit-test-suite-utils.h>
26 #include <dali/public-api/dali-core.h>
27 #include <dali/devel-api/actors/custom-actor-devel.h>
28 #include <dali/devel-api/object/csharp-type-registry.h>
29 #include <dali-toolkit/dali-toolkit.h>
30 #include <dali-toolkit/devel-api/controls/control-devel.h>
31 #include <dali-toolkit/devel-api/controls/control-wrapper.h>
32 #include <dali-toolkit/devel-api/controls/control-wrapper-impl.h>
33 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
34 #include <dali-toolkit/devel-api/visual-factory/transition-data.h>
37 using namespace Dali::Toolkit;
39 void utc_dali_toolkit_control_wrapper_startup(void)
41 test_return_value = TET_UNDEF;
44 void utc_dali_toolkit_control_wrapper_cleanup(void)
46 test_return_value = TET_PASS;
49 ///////////////////////////////////////////////////////////////////////////////////////////////////
53 bool gOnRelayout = false;
55 static bool gKeyInputFocusCallBackCalled;
57 static void TestKeyInputFocusCallback( Control control )
59 tet_infoline(" TestKeyInputFocusCallback");
61 gKeyInputFocusCallBackCalled = true;
65 ///////////////////////////////////////////////////////////////////////////////////////////////////
70 struct TestCustomControl : public Toolkit::Internal::ControlWrapper
75 TestCustomControl() : Toolkit::Internal::ControlWrapper( CustomControlBehaviour( Toolkit::Internal::ControlWrapper::DISABLE_STYLE_CHANGE_SIGNALS |
76 Toolkit::Internal::ControlWrapper::REQUIRES_KEYBOARD_NAVIGATION_SUPPORT )) ,
77 mDaliProperty( Property::INVALID_INDEX ),
78 mSizeSet( Vector3::ZERO ),
79 mTargetSize( Vector3::ZERO ),
85 TestCustomControl(bool nego) : Toolkit::Internal::ControlWrapper( CustomControlBehaviour( Toolkit::Internal::ControlWrapper::DISABLE_STYLE_CHANGE_SIGNALS |
86 Toolkit::Internal::ControlWrapper::REQUIRES_KEYBOARD_NAVIGATION_SUPPORT ) ),
87 mDaliProperty( Property::INVALID_INDEX ),
88 mSizeSet( Vector3::ZERO ),
89 mTargetSize( Vector3::ZERO ),
98 virtual ~TestCustomControl()
102 void Initialize( const char* name = NULL )
104 mDaliProperty = Self().RegisterProperty( "Dali", std::string("no"), Property::READ_WRITE );
106 OnInitialize( name );
109 using Control::OnInitialize; ///< To tell the compiler that we really do want to overload OnInitialize in this class & were not trying to override it
110 virtual void OnInitialize( const char* name ) {}
112 // From Toolkit::Internal::ControlWrapper
113 virtual void OnSceneConnection( int depth )
116 Control::OnSceneConnection(depth);
118 virtual void OnSceneDisconnection()
120 Control::OnSceneDisconnection();
122 virtual void OnChildAdd( Actor& child )
124 Control::OnChildAdd(child);
126 virtual void OnChildRemove( Actor& child )
128 Control::OnChildRemove(child);
130 virtual void OnPropertySet( Property::Index index, Property::Value propertyValue )
132 Control::OnPropertySet(index, propertyValue);
134 virtual void OnSizeSet( const Vector3& targetSize )
136 mSizeSet = targetSize;
137 Control::OnSizeSet( targetSize );
139 virtual void OnSizeAnimation( Animation& animation, const Vector3& targetSize )
141 mTargetSize = targetSize;
142 Control::OnSizeAnimation( animation, targetSize );
144 virtual bool OnHoverEvent( const HoverEvent& event )
148 virtual bool OnWheelEvent( const WheelEvent& event )
152 virtual bool OnKeyEvent( const KeyEvent& event )
156 virtual void OnKeyInputFocusGained()
159 virtual void OnKeyInputFocusLost()
162 virtual Vector3 GetNaturalSize()
164 return Vector3( 0.0f, 0.0f, 0.0f );
167 virtual float GetHeightForWidth( float width )
172 virtual float GetWidthForHeight( float height )
177 void TestRegisterVisual( Property::Index index, Toolkit::Visual::Base visual )
179 ControlWrapper::RegisterVisual( index, visual );
181 VisualIndices::iterator iter = std::find( mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index );
182 if( iter == mRegisteredVisualIndices.end() )
184 mRegisteredVisualIndices.push_back(index);
188 virtual void OnRelayout( const Vector2& size, RelayoutContainer& container )
192 for( VisualIndices::iterator iter = mRegisteredVisualIndices.begin(); iter != mRegisteredVisualIndices.end() ; ++iter )
194 Visual::Base visual = GetVisual(*iter);
195 Property::Map map; // empty map enforces defaults
196 visual.SetTransformAndSize( map, size );
200 virtual void OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension )
204 virtual void OnCalculateRelayoutSize( Dimension::Type dimension )
208 virtual float CalculateChildSize( const Dali::Actor& child, Dimension::Type dimension )
213 virtual void OnLayoutNegotiated( float size, Dimension::Type dimension )
217 virtual bool RelayoutDependentOnChildren( Dimension::Type dimension = Dimension::ALL_DIMENSIONS )
222 void SetDaliProperty(std::string s)
224 Self().SetProperty(mDaliProperty, s);
226 void TestRelayoutRequest()
231 float TestGetHeightForWidthBase( float width )
233 return GetHeightForWidthBase( width );
236 float TestGetWidthForHeightBase( float height )
238 return GetWidthForHeightBase( height );
241 float TestCalculateChildSizeBase( const Dali::Actor& child, Dimension::Type dimension )
243 return CalculateChildSizeBase( child, dimension );
246 bool TestRelayoutDependentOnChildrenBase( Dimension::Type dimension )
248 return RelayoutDependentOnChildrenBase( dimension );
251 Property::Index mDaliProperty;
257 typedef std::vector<Property::Index> VisualIndices;
258 VisualIndices mRegisteredVisualIndices;
265 static std::string customControlTypeName = "MyTestCustomControl";
266 static TypeRegistration customControl( customControlTypeName, typeid(Dali::Toolkit::Control), NULL );
269 int UtcDaliControlWrapperConstructor(void)
271 ToolkitTestApplication application; // Exceptions require ToolkitTestApplication
273 Toolkit::Internal::ControlWrapper* controlWrapperImpl = new Toolkit::Internal::ControlWrapper( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
274 ControlWrapper controlWrapper;
276 DALI_TEST_CHECK( !ControlWrapper::DownCast( controlWrapper ) );
278 controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
280 DALI_TEST_CHECK( ControlWrapper::DownCast( controlWrapper ) );
282 Dali::TypeInfo typeInfo = DevelCustomActor::GetTypeInfo( controlWrapper );
284 DALI_TEST_EQUALS( typeInfo.GetName(), customControlTypeName, TEST_LOCATION);
290 int UtcDaliControlWrapperDestructor(void)
292 TestApplication application;
294 ControlWrapper control = ControlWrapper::New( customControlTypeName, *( new Toolkit::Internal::ControlWrapper( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT ) ) );
296 ControlWrapper control2( control );
298 DALI_TEST_CHECK( control );
300 DALI_TEST_CHECK( !control );
302 DALI_TEST_CHECK( control2 );
304 DALI_TEST_CHECK( !control2 );
309 int UtcDaliControlWrapperRelayoutRequest(void)
311 TestApplication application;
313 DALI_TEST_EQUALS( gOnRelayout, false, TEST_LOCATION );
315 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
316 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
318 application.GetScene().Add( controlWrapper );
320 application.SendNotification();
321 application.Render();
323 DALI_TEST_EQUALS( gOnRelayout, true, TEST_LOCATION );
326 controlWrapperImpl->TestRelayoutRequest();
327 application.SendNotification();
328 application.Render();
330 DALI_TEST_EQUALS( gOnRelayout, true, TEST_LOCATION );
335 int UtcDaliControlWrapperImplGetHeightForWidthBase(void)
337 TestApplication application;
339 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
340 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
342 float width = 300.0f;
345 application.SendNotification();
346 application.Render();
348 v = controlWrapperImpl->TestGetHeightForWidthBase( width );
350 DALI_TEST_EQUALS( width, v, TEST_LOCATION );
355 int UtcDaliControlWrapperGetWidthForHeightBase(void)
357 TestApplication application;
359 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
360 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
362 float height = 300.0f;
365 application.SendNotification();
366 application.Render();
368 v = controlWrapperImpl->TestGetWidthForHeightBase( height );
370 DALI_TEST_EQUALS( height, v, TEST_LOCATION );
375 int UtcDaliControlWrapperCalculateChildSizeBase(void)
377 TestApplication application;
379 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
380 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
382 Actor child = Actor::New();
383 child.SetResizePolicy( Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS );
384 child.SetProperty( Actor::Property::SIZE, Vector2(150, 150) );
386 application.SendNotification();
387 application.Render();
390 v = controlWrapperImpl->TestCalculateChildSizeBase( child, Dali::Dimension::ALL_DIMENSIONS );
391 DALI_TEST_EQUALS( v, 0.0f, TEST_LOCATION );
396 int UtcDaliControlWrapperRelayoutDependentOnChildrenBase(void)
398 TestApplication application;
400 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
401 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
405 v = controlWrapperImpl->TestRelayoutDependentOnChildrenBase( Dali::Dimension::ALL_DIMENSIONS );
406 application.SendNotification();
407 application.Render();
409 DALI_TEST_EQUALS( v, true, TEST_LOCATION );
411 controlWrapper.SetResizePolicy( Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS );
412 v = controlWrapperImpl->TestRelayoutDependentOnChildrenBase( Dali::Dimension::WIDTH );
413 application.SendNotification();
414 application.Render();
415 DALI_TEST_EQUALS( v, false, TEST_LOCATION );
420 int UtcDaliControlWrapperRegisterVisualToSelf(void)
422 ToolkitTestApplication application;
424 Test::ObjectDestructionTracker objectDestructionTracker( application.GetCore().GetObjectRegistry() );
427 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
428 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
430 objectDestructionTracker.Start( controlWrapper );
432 Property::Index index = 1;
434 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
435 Toolkit::Visual::Base visual;
438 map[Visual::Property::TYPE] = Visual::COLOR;
439 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
441 visual = visualFactory.CreateVisual( map );
442 DALI_TEST_CHECK( visual );
445 controlWrapperImpl->RegisterVisual( index, visual );
447 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
448 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
451 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
456 int UtcDaliControlWrapperRegisterVisualWithDepthIndexToSelf(void)
458 ToolkitTestApplication application;
460 Test::ObjectDestructionTracker objectDestructionTracker( application.GetCore().GetObjectRegistry() );
463 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
464 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
466 objectDestructionTracker.Start( controlWrapper );
468 Property::Index index = 1;
470 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
471 Toolkit::Visual::Base visual;
474 map[Visual::Property::TYPE] = Visual::COLOR;
475 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
477 visual = visualFactory.CreateVisual( map );
478 DALI_TEST_CHECK( visual );
481 controlWrapperImpl->RegisterVisual( index, visual, 4 );
483 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
484 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
485 DALI_TEST_EQUALS( visual.GetDepthIndex(), 4, TEST_LOCATION );
488 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
493 int UtcDaliControlWrapperRegisterDisabledVisual(void)
495 ToolkitTestApplication application;
497 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
498 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
500 Property::Index TEST_PROPERTY = 1;
502 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
503 Toolkit::Visual::Base visual;
506 map[Visual::Property::TYPE] = Visual::COLOR;
507 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
509 visual = visualFactory.CreateVisual( map );
510 DALI_TEST_CHECK(visual);
512 // Register index with a color visual
513 controlWrapperImpl->RegisterVisual( TEST_PROPERTY, visual, false );
515 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( TEST_PROPERTY ), visual, TEST_LOCATION );
516 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
518 application.GetScene().Add( controlWrapper );
521 application.SendNotification();
522 application.Render();
524 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
526 DALI_TEST_EQUALS( controlWrapper.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ), true, TEST_LOCATION );
528 controlWrapperImpl->EnableVisual( TEST_PROPERTY, true );
530 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), true, TEST_LOCATION );
535 int UtcDaliControlWrapperRegisterDisabledVisualWithDepthIndex(void)
537 ToolkitTestApplication application;
539 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
540 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
542 Property::Index TEST_PROPERTY = 1;
544 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
545 Toolkit::Visual::Base visual;
548 map[Visual::Property::TYPE] = Visual::COLOR;
549 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
551 visual = visualFactory.CreateVisual( map );
552 DALI_TEST_CHECK(visual);
554 // Register index with a color visual
555 controlWrapperImpl->RegisterVisual( TEST_PROPERTY, visual, false, 10 );
557 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( TEST_PROPERTY ), visual, TEST_LOCATION );
558 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
559 DALI_TEST_EQUALS( visual.GetDepthIndex(), 10, TEST_LOCATION );
561 application.GetScene().Add( controlWrapper );
564 application.SendNotification();
565 application.Render();
567 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
569 DALI_TEST_EQUALS( controlWrapper.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ), true, TEST_LOCATION );
571 controlWrapperImpl->EnableVisual( TEST_PROPERTY, true );
573 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), true, TEST_LOCATION );
578 int UtcDaliControlWrapperRegisterUnregisterVisual(void)
580 ToolkitTestApplication application;
582 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
583 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
585 Property::Index index = 1;
587 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
588 Toolkit::Visual::Base visual;
591 map[Visual::Property::TYPE] = Visual::COLOR;
592 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
594 visual = visualFactory.CreateVisual( map );
595 DALI_TEST_CHECK(visual);
597 // Register index with a color visual
598 controlWrapperImpl->RegisterVisual( index, visual );
600 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
603 controlWrapperImpl->UnregisterVisual( index );
605 DALI_TEST_CHECK( !controlWrapperImpl->GetVisual( index ) );
610 int UtcDaliControlWrapperTransitionDataMap1N(void)
612 TestApplication application;
615 map["target"] = "Actor1";
616 map["property"] = "randomProperty";
617 map["initialValue"] = Color::MAGENTA;
618 map["targetValue"] = Color::RED;
619 map["animator"] = Property::Map()
620 .Add("alphaFunction", "EASE_OUT")
621 .Add("timePeriod", Property::Map()
623 .Add("duration", 1.0f));
625 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
627 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
628 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
630 //DummyControl actor = DummyControl::New();
631 controlWrapper.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
632 controlWrapper.SetProperty( Dali::Actor::Property::NAME,"Actor1");
633 controlWrapper.SetProperty( Actor::Property::COLOR,Color::CYAN);
634 application.GetScene().Add(controlWrapper);
636 Animation anim = controlWrapperImpl->CreateTransition( transition );
637 DALI_TEST_CHECK( ! anim );
639 Property::Map returnedMap = transition.GetAnimatorAt(0);
641 Property::Value* value = returnedMap.Find("property");
642 DALI_TEST_CHECK( value != NULL);
643 DALI_TEST_EQUALS( "randomProperty", value->Get<std::string>(), TEST_LOCATION );
645 value = returnedMap.Find("initialValue");
646 DALI_TEST_CHECK( value != NULL);
647 DALI_TEST_EQUALS( Color::MAGENTA, value->Get<Vector4>(), TEST_LOCATION );
649 value = returnedMap.Find("targetValue");
650 DALI_TEST_CHECK( value != NULL);
651 DALI_TEST_EQUALS( Color::RED, value->Get<Vector4>(), TEST_LOCATION );
653 value = returnedMap.Find("animator");
654 DALI_TEST_CHECK( value != NULL);
655 Property::Map returnedAnimatorMap = value->Get<Property::Map>();
657 value = returnedAnimatorMap.Find("alphaFunction");
658 DALI_TEST_CHECK( value != NULL);
659 DALI_TEST_EQUALS( "EASE_OUT", value->Get<std::string>(), TEST_LOCATION );
661 value = returnedAnimatorMap.Find("timePeriod");
662 DALI_TEST_CHECK( value != NULL);
663 Property::Map returnedTimePeriodMap = value->Get<Property::Map>();
665 value = returnedTimePeriodMap.Find("delay");
666 DALI_TEST_CHECK( value != NULL);
667 DALI_TEST_EQUALS( 0.5f, value->Get<float>(), TEST_LOCATION );
669 value = returnedTimePeriodMap.Find("duration");
670 DALI_TEST_CHECK( value != NULL);
671 DALI_TEST_EQUALS( 1.0f, value->Get<float>(), TEST_LOCATION );
676 int UtcDaliControlWrapperApplyThemeStyle(void)
678 ToolkitTestApplication application;
680 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
681 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
683 controlWrapperImpl->ApplyThemeStyle();
685 DALI_TEST_CHECK( true );
689 int UtcDaliControlWrapperTestControlProperties(void)
691 ToolkitTestApplication application;
693 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
694 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
696 application.GetScene().Add( controlWrapper );
698 // "background" property
699 Property::Map rendererMap;
700 rendererMap[Visual::Property::TYPE] = Visual::COLOR;
701 rendererMap[ColorVisual::Property::MIX_COLOR] = Color::RED;
702 controlWrapper.SetProperty( Control::Property::BACKGROUND, rendererMap );
703 Property::Value propertyValue = controlWrapper.GetProperty( Control::Property::BACKGROUND );
704 Property::Map* resultMap = propertyValue.GetMap();
705 DALI_TEST_CHECK( resultMap->Find( Toolkit::Visual::Property::TYPE ) );
706 DALI_TEST_EQUALS( resultMap->Find( Toolkit::Visual::Property::TYPE )->Get<int>(), (int)Visual::COLOR, TEST_LOCATION );
707 DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR ) );
708 DALI_TEST_EQUALS( resultMap->Find( ColorVisual::Property::MIX_COLOR )->Get<Vector4>(), Color::RED, TEST_LOCATION );
710 // "keyInputFocus" property
711 controlWrapper.SetProperty( Control::Property::KEY_INPUT_FOCUS, true );
712 DALI_TEST_EQUALS( true, controlWrapper.GetProperty( Control::Property::KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
714 // "styleName" property
715 controlWrapper.SetProperty( Control::Property::STYLE_NAME, "MyCustomStyle" );
716 DALI_TEST_EQUALS( "MyCustomStyle", controlWrapper.GetProperty( Control::Property::STYLE_NAME ).Get< std::string >(), TEST_LOCATION );
721 int UtcDaliControlWrapperTypeRegistryCreation(void)
723 ToolkitTestApplication application;
725 TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo( "ControlWrapper" );
726 DALI_TEST_CHECK( typeInfo )
728 // Check that we can't create a ControlWrapper instance
729 BaseHandle baseHandle = typeInfo.CreateInstance();
730 DALI_TEST_CHECK( !baseHandle )
735 void SetProperty(BaseObject* object, const char* const name, Property::Value* value)
738 Property::Value* GetProperty(BaseObject* object, const char* const name )
743 int UtcDaliControlWrapperAnimateVisual(void)
745 tet_infoline("Test that the control wrapper's visuals can be animated by name when registered");
747 ToolkitTestApplication application;
748 Test::ObjectDestructionTracker objectDestructionTracker( application.GetCore().GetObjectRegistry() );
751 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
752 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
754 Property::Index index = Control::CONTROL_PROPERTY_END_INDEX+1;
755 std::string visualName("colorVisual");
756 CSharpTypeRegistry::RegisterProperty( customControlTypeName, visualName, index, Property::VECTOR4, SetProperty, GetProperty );
758 objectDestructionTracker.Start( controlWrapper );
760 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
761 Toolkit::Visual::Base visual;
764 map[Visual::Property::TYPE] = Visual::COLOR;
765 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
767 visual = visualFactory.CreateVisual( map );
768 DALI_TEST_CHECK( visual );
771 controlWrapperImpl->TestRegisterVisual( index, visual );
773 application.GetScene().Add( controlWrapper );
774 controlWrapper.SetProperty( Actor::Property::SIZE, Vector2( 100, 100 ) );
775 application.SendNotification();
776 application.Render(0); // Trigger animation start
778 Property::Map transition;
779 transition["target"] = visualName;
780 transition["property"] = "mixColor";
781 transition["targetValue"] = Color::GREEN;
782 Property::Map animator;
783 animator["alphaFunction"] = "LINEAR";
784 animator["duration"] = 1.0f;
785 animator["delay"] = 0.0f;
786 transition["animator"] = animator;
788 TransitionData transitionData = TransitionData::New(transition);
789 Animation anim = DevelControl::CreateTransition( *controlWrapperImpl, transitionData );
792 application.SendNotification();
793 application.Render(0); // Trigger animation start
795 application.Render(1000); // animation end
796 application.Render( 10);
798 Property::Map visualMap;
799 visual.CreatePropertyMap( visualMap );
800 Property::Value* value = visualMap.Find(ColorVisual::Property::MIX_COLOR, "mixColor");
801 DALI_TEST_CHECK( value != NULL );
804 Vector4 testColor = value->Get<Vector4>();
805 DALI_TEST_EQUALS( testColor, Color::GREEN, 0.001f, TEST_LOCATION );
808 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
809 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
811 application.GetScene().Remove( controlWrapper );
814 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
819 int UtcDaliControlWrapperEmitKeyFocusSignal(void)
821 ToolkitTestApplication application;
823 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
824 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
826 gKeyInputFocusCallBackCalled = false;
827 controlWrapper.KeyInputFocusGainedSignal().Connect(&TestKeyInputFocusCallback);
829 application.SendNotification();
830 application.Render();
832 controlWrapperImpl->EmitKeyInputFocusSignal( true );
834 DALI_TEST_CHECK( gKeyInputFocusCallBackCalled );