2 * Copyright (c) 2019 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;
56 ///////////////////////////////////////////////////////////////////////////////////////////////////
61 struct TestCustomControl : public Toolkit::Internal::ControlWrapper
66 TestCustomControl() : Toolkit::Internal::ControlWrapper( CustomControlBehaviour( Toolkit::Internal::ControlWrapper::DISABLE_STYLE_CHANGE_SIGNALS |
67 Toolkit::Internal::ControlWrapper::REQUIRES_KEYBOARD_NAVIGATION_SUPPORT )) ,
68 mDaliProperty( Property::INVALID_INDEX ),
69 mSizeSet( Vector3::ZERO ),
70 mTargetSize( Vector3::ZERO ),
76 TestCustomControl(bool nego) : Toolkit::Internal::ControlWrapper( CustomControlBehaviour( Toolkit::Internal::ControlWrapper::DISABLE_STYLE_CHANGE_SIGNALS |
77 Toolkit::Internal::ControlWrapper::REQUIRES_KEYBOARD_NAVIGATION_SUPPORT ) ),
78 mDaliProperty( Property::INVALID_INDEX ),
79 mSizeSet( Vector3::ZERO ),
80 mTargetSize( Vector3::ZERO ),
89 virtual ~TestCustomControl()
93 void Initialize( const char* name = NULL )
95 mDaliProperty = Self().RegisterProperty( "Dali", std::string("no"), Property::READ_WRITE );
100 using Control::OnInitialize; ///< To tell the compiler that we really do want to overload OnInitialize in this class & were not trying to override it
101 virtual void OnInitialize( const char* name ) {}
103 // From Toolkit::Internal::ControlWrapper
104 virtual void OnStageConnection( int depth )
107 Control::OnStageConnection(depth);
109 virtual void OnStageDisconnection()
111 Control::OnStageDisconnection();
113 virtual void OnChildAdd( Actor& child )
115 Control::OnChildAdd(child);
117 virtual void OnChildRemove( Actor& child )
119 Control::OnChildRemove(child);
121 virtual void OnPropertySet( Property::Index index, Property::Value propertyValue )
123 Control::OnPropertySet(index, propertyValue);
125 virtual void OnSizeSet( const Vector3& targetSize )
127 mSizeSet = targetSize;
128 Control::OnSizeSet( targetSize );
130 virtual void OnSizeAnimation( Animation& animation, const Vector3& targetSize )
132 mTargetSize = targetSize;
133 Control::OnSizeAnimation( animation, targetSize );
135 virtual bool OnTouchEvent( const TouchEvent& event )
139 virtual bool OnHoverEvent( const HoverEvent& event )
143 virtual bool OnWheelEvent( const WheelEvent& event )
147 virtual bool OnKeyEvent( const KeyEvent& event )
151 virtual void OnKeyInputFocusGained()
154 virtual void OnKeyInputFocusLost()
157 virtual Vector3 GetNaturalSize()
159 return Vector3( 0.0f, 0.0f, 0.0f );
162 virtual float GetHeightForWidth( float width )
167 virtual float GetWidthForHeight( float height )
172 void TestRegisterVisual( Property::Index index, Toolkit::Visual::Base visual )
174 ControlWrapper::RegisterVisual( index, visual );
176 VisualIndices::iterator iter = std::find( mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index );
177 if( iter == mRegisteredVisualIndices.end() )
179 mRegisteredVisualIndices.push_back(index);
183 virtual void OnRelayout( const Vector2& size, RelayoutContainer& container )
187 for( VisualIndices::iterator iter = mRegisteredVisualIndices.begin(); iter != mRegisteredVisualIndices.end() ; ++iter )
189 Visual::Base visual = GetVisual(*iter);
190 Property::Map map; // empty map enforces defaults
191 visual.SetTransformAndSize( map, size );
195 virtual void OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension )
199 virtual void OnCalculateRelayoutSize( Dimension::Type dimension )
203 virtual float CalculateChildSize( const Dali::Actor& child, Dimension::Type dimension )
208 virtual void OnLayoutNegotiated( float size, Dimension::Type dimension )
212 virtual bool RelayoutDependentOnChildren( Dimension::Type dimension = Dimension::ALL_DIMENSIONS )
217 void SetDaliProperty(std::string s)
219 Self().SetProperty(mDaliProperty, s);
221 void TestRelayoutRequest()
226 float TestGetHeightForWidthBase( float width )
228 return GetHeightForWidthBase( width );
231 float TestGetWidthForHeightBase( float height )
233 return GetWidthForHeightBase( height );
236 float TestCalculateChildSizeBase( const Dali::Actor& child, Dimension::Type dimension )
238 return CalculateChildSizeBase( child, dimension );
241 bool TestRelayoutDependentOnChildrenBase( Dimension::Type dimension )
243 return RelayoutDependentOnChildrenBase( dimension );
246 Property::Index mDaliProperty;
252 typedef std::vector<Property::Index> VisualIndices;
253 VisualIndices mRegisteredVisualIndices;
260 static std::string customControlTypeName = "MyTestCustomControl";
261 static TypeRegistration customControl( customControlTypeName, typeid(Dali::Toolkit::Control), NULL );
264 int UtcDaliControlWrapperConstructor(void)
266 ToolkitTestApplication application; // Exceptions require ToolkitTestApplication
268 Toolkit::Internal::ControlWrapper* controlWrapperImpl = new Toolkit::Internal::ControlWrapper( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
269 ControlWrapper controlWrapper;
271 DALI_TEST_CHECK( !ControlWrapper::DownCast( controlWrapper ) );
273 controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
275 DALI_TEST_CHECK( ControlWrapper::DownCast( controlWrapper ) );
277 Dali::TypeInfo typeInfo = DevelCustomActor::GetTypeInfo( controlWrapper );
279 DALI_TEST_EQUALS( typeInfo.GetName(), customControlTypeName, TEST_LOCATION);
285 int UtcDaliControlWrapperDestructor(void)
287 TestApplication application;
289 ControlWrapper control = ControlWrapper::New( customControlTypeName, *( new Toolkit::Internal::ControlWrapper( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT ) ) );
291 ControlWrapper control2( control );
293 DALI_TEST_CHECK( control );
295 DALI_TEST_CHECK( !control );
297 DALI_TEST_CHECK( control2 );
299 DALI_TEST_CHECK( !control2 );
304 int UtcDaliControlWrapperRelayoutRequest(void)
306 TestApplication application;
308 DALI_TEST_EQUALS( gOnRelayout, false, TEST_LOCATION );
310 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
311 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
313 Stage::GetCurrent().Add( controlWrapper );
315 application.SendNotification();
316 application.Render();
318 DALI_TEST_EQUALS( gOnRelayout, true, TEST_LOCATION );
321 controlWrapperImpl->TestRelayoutRequest();
322 application.SendNotification();
323 application.Render();
325 DALI_TEST_EQUALS( gOnRelayout, true, TEST_LOCATION );
330 int UtcDaliControlWrapperImplGetHeightForWidthBase(void)
332 TestApplication application;
334 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
335 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
337 float width = 300.0f;
340 application.SendNotification();
341 application.Render();
343 v = controlWrapperImpl->TestGetHeightForWidthBase( width );
345 DALI_TEST_EQUALS( width, v, TEST_LOCATION );
350 int UtcDaliControlWrapperGetWidthForHeightBase(void)
352 TestApplication application;
354 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
355 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
357 float height = 300.0f;
360 application.SendNotification();
361 application.Render();
363 v = controlWrapperImpl->TestGetWidthForHeightBase( height );
365 DALI_TEST_EQUALS( height, v, TEST_LOCATION );
370 int UtcDaliControlWrapperCalculateChildSizeBase(void)
372 TestApplication application;
374 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
375 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
377 Actor child = Actor::New();
378 child.SetResizePolicy( Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS );
379 child.SetSize(150, 150);
381 application.SendNotification();
382 application.Render();
385 v = controlWrapperImpl->TestCalculateChildSizeBase( child, Dali::Dimension::ALL_DIMENSIONS );
386 DALI_TEST_EQUALS( v, 0.0f, TEST_LOCATION );
391 int UtcDaliControlWrapperRelayoutDependentOnChildrenBase(void)
393 TestApplication application;
395 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
396 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
400 v = controlWrapperImpl->TestRelayoutDependentOnChildrenBase( Dali::Dimension::ALL_DIMENSIONS );
401 application.SendNotification();
402 application.Render();
404 DALI_TEST_EQUALS( v, true, TEST_LOCATION );
406 controlWrapper.SetResizePolicy( Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS );
407 v = controlWrapperImpl->TestRelayoutDependentOnChildrenBase( Dali::Dimension::WIDTH );
408 application.SendNotification();
409 application.Render();
410 DALI_TEST_EQUALS( v, false, TEST_LOCATION );
415 int UtcDaliControlWrapperRegisterVisualToSelf(void)
417 ToolkitTestApplication application;
419 Test::ObjectDestructionTracker objectDestructionTracker;
422 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
423 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
425 objectDestructionTracker.Start( controlWrapper );
427 Property::Index index = 1;
429 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
430 Toolkit::Visual::Base visual;
433 map[Visual::Property::TYPE] = Visual::COLOR;
434 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
436 visual = visualFactory.CreateVisual( map );
437 DALI_TEST_CHECK( visual );
440 controlWrapperImpl->RegisterVisual( index, visual );
442 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
443 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
446 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
451 int UtcDaliControlWrapperRegisterVisualWithDepthIndexToSelf(void)
453 ToolkitTestApplication application;
455 Test::ObjectDestructionTracker objectDestructionTracker;
458 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
459 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
461 objectDestructionTracker.Start( controlWrapper );
463 Property::Index index = 1;
465 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
466 Toolkit::Visual::Base visual;
469 map[Visual::Property::TYPE] = Visual::COLOR;
470 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
472 visual = visualFactory.CreateVisual( map );
473 DALI_TEST_CHECK( visual );
476 controlWrapperImpl->RegisterVisual( index, visual, 4 );
478 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
479 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
480 DALI_TEST_EQUALS( visual.GetDepthIndex(), 4, TEST_LOCATION );
483 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
488 int UtcDaliControlWrapperRegisterDisabledVisual(void)
490 ToolkitTestApplication application;
492 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
493 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
495 Property::Index TEST_PROPERTY = 1;
497 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
498 Toolkit::Visual::Base visual;
501 map[Visual::Property::TYPE] = Visual::COLOR;
502 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
504 visual = visualFactory.CreateVisual( map );
505 DALI_TEST_CHECK(visual);
507 // Register index with a color visual
508 controlWrapperImpl->RegisterVisual( TEST_PROPERTY, visual, false );
510 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( TEST_PROPERTY ), visual, TEST_LOCATION );
511 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
513 Stage::GetCurrent().Add( controlWrapper );
516 application.SendNotification();
517 application.Render();
519 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
521 DALI_TEST_EQUALS( controlWrapper.OnStage(), true, TEST_LOCATION );
523 controlWrapperImpl->EnableVisual( TEST_PROPERTY, true );
525 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), true, TEST_LOCATION );
530 int UtcDaliControlWrapperRegisterDisabledVisualWithDepthIndex(void)
532 ToolkitTestApplication application;
534 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
535 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
537 Property::Index TEST_PROPERTY = 1;
539 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
540 Toolkit::Visual::Base visual;
543 map[Visual::Property::TYPE] = Visual::COLOR;
544 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
546 visual = visualFactory.CreateVisual( map );
547 DALI_TEST_CHECK(visual);
549 // Register index with a color visual
550 controlWrapperImpl->RegisterVisual( TEST_PROPERTY, visual, false, 10 );
552 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( TEST_PROPERTY ), visual, TEST_LOCATION );
553 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
554 DALI_TEST_EQUALS( visual.GetDepthIndex(), 10, TEST_LOCATION );
556 Stage::GetCurrent().Add( controlWrapper );
559 application.SendNotification();
560 application.Render();
562 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
564 DALI_TEST_EQUALS( controlWrapper.OnStage(), true, TEST_LOCATION );
566 controlWrapperImpl->EnableVisual( TEST_PROPERTY, true );
568 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), true, TEST_LOCATION );
573 int UtcDaliControlWrapperRegisterUnregisterVisual(void)
575 ToolkitTestApplication application;
577 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
578 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
580 Property::Index index = 1;
582 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
583 Toolkit::Visual::Base visual;
586 map[Visual::Property::TYPE] = Visual::COLOR;
587 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
589 visual = visualFactory.CreateVisual( map );
590 DALI_TEST_CHECK(visual);
592 // Register index with a color visual
593 controlWrapperImpl->RegisterVisual( index, visual );
595 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
598 controlWrapperImpl->UnregisterVisual( index );
600 DALI_TEST_CHECK( !controlWrapperImpl->GetVisual( index ) );
605 int UtcDaliControlWrapperTransitionDataMap1N(void)
607 TestApplication application;
610 map["target"] = "Actor1";
611 map["property"] = "randomProperty";
612 map["initialValue"] = Color::MAGENTA;
613 map["targetValue"] = Color::RED;
614 map["animator"] = Property::Map()
615 .Add("alphaFunction", "EASE_OUT")
616 .Add("timePeriod", Property::Map()
618 .Add("duration", 1.0f));
620 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
622 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
623 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
625 //DummyControl actor = DummyControl::New();
626 controlWrapper.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
627 controlWrapper.SetName("Actor1");
628 controlWrapper.SetColor(Color::CYAN);
629 Stage::GetCurrent().Add(controlWrapper);
631 Animation anim = controlWrapperImpl->CreateTransition( transition );
632 DALI_TEST_CHECK( ! anim );
634 Property::Map returnedMap = transition.GetAnimatorAt(0);
636 Property::Value* value = returnedMap.Find("property");
637 DALI_TEST_CHECK( value != NULL);
638 DALI_TEST_EQUALS( "randomProperty", value->Get<std::string>(), TEST_LOCATION );
640 value = returnedMap.Find("initialValue");
641 DALI_TEST_CHECK( value != NULL);
642 DALI_TEST_EQUALS( Color::MAGENTA, value->Get<Vector4>(), TEST_LOCATION );
644 value = returnedMap.Find("targetValue");
645 DALI_TEST_CHECK( value != NULL);
646 DALI_TEST_EQUALS( Color::RED, value->Get<Vector4>(), TEST_LOCATION );
648 value = returnedMap.Find("animator");
649 DALI_TEST_CHECK( value != NULL);
650 Property::Map returnedAnimatorMap = value->Get<Property::Map>();
652 value = returnedAnimatorMap.Find("alphaFunction");
653 DALI_TEST_CHECK( value != NULL);
654 DALI_TEST_EQUALS( "EASE_OUT", value->Get<std::string>(), TEST_LOCATION );
656 value = returnedAnimatorMap.Find("timePeriod");
657 DALI_TEST_CHECK( value != NULL);
658 Property::Map returnedTimePeriodMap = value->Get<Property::Map>();
660 value = returnedTimePeriodMap.Find("delay");
661 DALI_TEST_CHECK( value != NULL);
662 DALI_TEST_EQUALS( 0.5f, value->Get<float>(), TEST_LOCATION );
664 value = returnedTimePeriodMap.Find("duration");
665 DALI_TEST_CHECK( value != NULL);
666 DALI_TEST_EQUALS( 1.0f, value->Get<float>(), TEST_LOCATION );
671 int UtcDaliControlWrapperApplyThemeStyle(void)
673 ToolkitTestApplication application;
675 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
676 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
678 controlWrapperImpl->ApplyThemeStyle();
680 DALI_TEST_CHECK( true );
684 int UtcDaliControlWrapperTestControlProperties(void)
686 ToolkitTestApplication application;
688 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
689 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
691 Stage::GetCurrent().Add( controlWrapper );
693 // "background" property
694 Property::Map rendererMap;
695 rendererMap[Visual::Property::TYPE] = Visual::COLOR;
696 rendererMap[ColorVisual::Property::MIX_COLOR] = Color::RED;
697 controlWrapper.SetProperty( Control::Property::BACKGROUND, rendererMap );
698 Property::Value propertyValue = controlWrapper.GetProperty( Control::Property::BACKGROUND );
699 Property::Map* resultMap = propertyValue.GetMap();
700 DALI_TEST_CHECK( resultMap->Find( Toolkit::Visual::Property::TYPE ) );
701 DALI_TEST_EQUALS( resultMap->Find( Toolkit::Visual::Property::TYPE )->Get<int>(), (int)Visual::COLOR, TEST_LOCATION );
702 DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR ) );
703 DALI_TEST_EQUALS( resultMap->Find( ColorVisual::Property::MIX_COLOR )->Get<Vector4>(), Color::RED, TEST_LOCATION );
705 // "keyInputFocus" property
706 controlWrapper.SetProperty( Control::Property::KEY_INPUT_FOCUS, true );
707 DALI_TEST_EQUALS( true, controlWrapper.GetProperty( Control::Property::KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
709 // "styleName" property
710 controlWrapper.SetProperty( Control::Property::STYLE_NAME, "MyCustomStyle" );
711 DALI_TEST_EQUALS( "MyCustomStyle", controlWrapper.GetProperty( Control::Property::STYLE_NAME ).Get< std::string >(), TEST_LOCATION );
716 int UtcDaliControlWrapperTypeRegistryCreation(void)
718 ToolkitTestApplication application;
720 TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo( "ControlWrapper" );
721 DALI_TEST_CHECK( typeInfo )
723 // Check that we can't create a ControlWrapper instance
724 BaseHandle baseHandle = typeInfo.CreateInstance();
725 DALI_TEST_CHECK( !baseHandle )
730 void SetProperty(BaseObject* object, const char* const name, Property::Value* value)
733 Property::Value* GetProperty(BaseObject* object, const char* const name )
738 int UtcDaliControlWrapperAnimateVisual(void)
740 tet_infoline("Test that the control wrapper's visuals can be animated by name when registered");
742 ToolkitTestApplication application;
743 Test::ObjectDestructionTracker objectDestructionTracker;
746 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
747 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
749 Property::Index index = Control::CONTROL_PROPERTY_END_INDEX+1;
750 std::string visualName("colorVisual");
751 CSharpTypeRegistry::RegisterProperty( customControlTypeName, visualName, index, Property::VECTOR4, SetProperty, GetProperty );
753 objectDestructionTracker.Start( controlWrapper );
755 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
756 Toolkit::Visual::Base visual;
759 map[Visual::Property::TYPE] = Visual::COLOR;
760 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
762 visual = visualFactory.CreateVisual( map );
763 DALI_TEST_CHECK( visual );
766 controlWrapperImpl->TestRegisterVisual( index, visual );
768 Stage::GetCurrent().Add( controlWrapper );
769 controlWrapper.SetSize( 100, 100 );
770 application.SendNotification();
771 application.Render(0); // Trigger animation start
773 Property::Map transition;
774 transition["target"] = visualName;
775 transition["property"] = "mixColor";
776 transition["targetValue"] = Color::GREEN;
777 Property::Map animator;
778 animator["alphaFunction"] = "LINEAR";
779 animator["duration"] = 1.0f;
780 animator["delay"] = 0.0f;
781 transition["animator"] = animator;
783 TransitionData transitionData = TransitionData::New(transition);
784 Animation anim = DevelControl::CreateTransition( *controlWrapperImpl, transitionData );
787 application.SendNotification();
788 application.Render(0); // Trigger animation start
790 application.Render(1000); // animation end
791 application.Render( 10);
793 Property::Map visualMap;
794 visual.CreatePropertyMap( visualMap );
795 Property::Value* value = visualMap.Find(ColorVisual::Property::MIX_COLOR, "mixColor");
796 DALI_TEST_CHECK( value != NULL );
799 Vector4 testColor = value->Get<Vector4>();
800 DALI_TEST_EQUALS( testColor, Color::GREEN, 0.001f, TEST_LOCATION );
803 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
804 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
806 Stage::GetCurrent().Remove( controlWrapper );
809 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed