2 * Copyright (c) 2017 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 ),
87 virtual ~TestCustomControl()
91 void Initialize( const char* name = NULL )
93 mDaliProperty = Self().RegisterProperty( "Dali", std::string("no"), Property::READ_WRITE );
98 virtual void OnInitialize( const char* name ) {}
100 // From Toolkit::Internal::ControlWrapper
101 virtual void OnStageConnection( int depth )
104 Control::OnStageConnection(depth);
106 virtual void OnStageDisconnection()
108 Control::OnStageDisconnection();
110 virtual void OnChildAdd( Actor& child )
112 Control::OnChildAdd(child);
114 virtual void OnChildRemove( Actor& child )
116 Control::OnChildRemove(child);
118 virtual void OnPropertySet( Property::Index index, Property::Value propertyValue )
120 Control::OnPropertySet(index, propertyValue);
122 virtual void OnSizeSet( const Vector3& targetSize )
124 mSizeSet = targetSize;
125 Control::OnSizeSet( targetSize );
127 virtual void OnSizeAnimation( Animation& animation, const Vector3& targetSize )
129 mTargetSize = targetSize;
130 Control::OnSizeAnimation( animation, targetSize );
132 virtual bool OnTouchEvent( const TouchEvent& event )
136 virtual bool OnHoverEvent( const HoverEvent& event )
140 virtual bool OnWheelEvent( const WheelEvent& event )
144 virtual bool OnKeyEvent( const KeyEvent& event )
148 virtual void OnKeyInputFocusGained()
151 virtual void OnKeyInputFocusLost()
154 virtual Vector3 GetNaturalSize()
156 return Vector3( 0.0f, 0.0f, 0.0f );
159 virtual float GetHeightForWidth( float width )
164 virtual float GetWidthForHeight( float height )
169 void TestRegisterVisual( Property::Index index, Toolkit::Visual::Base visual )
171 ControlWrapper::RegisterVisual( index, visual );
173 VisualIndices::iterator iter = std::find( mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index );
174 if( iter == mRegisteredVisualIndices.end() )
176 mRegisteredVisualIndices.push_back(index);
180 virtual void OnRelayout( const Vector2& size, RelayoutContainer& container )
184 for( VisualIndices::iterator iter = mRegisteredVisualIndices.begin(); iter != mRegisteredVisualIndices.end() ; ++iter )
186 Visual::Base visual = GetVisual(*iter);
187 Property::Map map; // empty map enforces defaults
188 visual.SetTransformAndSize( map, size );
192 virtual void OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension )
196 virtual void OnCalculateRelayoutSize( Dimension::Type dimension )
200 virtual float CalculateChildSize( const Dali::Actor& child, Dimension::Type dimension )
205 virtual void OnLayoutNegotiated( float size, Dimension::Type dimension )
209 virtual bool RelayoutDependentOnChildren( Dimension::Type dimension = Dimension::ALL_DIMENSIONS )
214 void SetDaliProperty(std::string s)
216 Self().SetProperty(mDaliProperty, s);
218 void TestRelayoutRequest()
223 float TestGetHeightForWidthBase( float width )
225 return GetHeightForWidthBase( width );
228 float TestGetWidthForHeightBase( float height )
230 return GetWidthForHeightBase( height );
233 float TestCalculateChildSizeBase( const Dali::Actor& child, Dimension::Type dimension )
235 return CalculateChildSizeBase( child, dimension );
238 bool TestRelayoutDependentOnChildrenBase( Dimension::Type dimension )
240 return RelayoutDependentOnChildrenBase( dimension );
243 Property::Index mDaliProperty;
249 typedef std::vector<Property::Index> VisualIndices;
250 VisualIndices mRegisteredVisualIndices;
257 static std::string customControlTypeName = "MyTestCustomControl";
258 static TypeRegistration customControl( customControlTypeName, typeid(Dali::Toolkit::Control), NULL );
261 int UtcDaliControlWrapperConstructor(void)
263 ToolkitTestApplication application; // Exceptions require ToolkitTestApplication
265 Toolkit::Internal::ControlWrapper* controlWrapperImpl = new Toolkit::Internal::ControlWrapper( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
266 ControlWrapper controlWrapper;
268 DALI_TEST_CHECK( !ControlWrapper::DownCast( controlWrapper ) );
270 controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
272 DALI_TEST_CHECK( ControlWrapper::DownCast( controlWrapper ) );
274 Dali::TypeInfo typeInfo = DevelCustomActor::GetTypeInfo( controlWrapper );
276 DALI_TEST_EQUALS( typeInfo.GetName(), customControlTypeName, TEST_LOCATION);
282 int UtcDaliControlWrapperDestructor(void)
284 TestApplication application;
286 ControlWrapper control = ControlWrapper::New( customControlTypeName, *( new Toolkit::Internal::ControlWrapper( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT ) ) );
288 ControlWrapper control2( control );
290 DALI_TEST_CHECK( control );
292 DALI_TEST_CHECK( !control );
294 DALI_TEST_CHECK( control2 );
296 DALI_TEST_CHECK( !control2 );
301 int UtcDaliControlWrapperRelayoutRequest(void)
303 TestApplication application;
305 DALI_TEST_EQUALS( gOnRelayout, false, TEST_LOCATION );
307 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
308 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
310 Stage::GetCurrent().Add( controlWrapper );
312 application.SendNotification();
313 application.Render();
315 DALI_TEST_EQUALS( gOnRelayout, true, TEST_LOCATION );
318 controlWrapperImpl->TestRelayoutRequest();
319 application.SendNotification();
320 application.Render();
322 DALI_TEST_EQUALS( gOnRelayout, true, TEST_LOCATION );
327 int UtcDaliControlWrapperImplGetHeightForWidthBase(void)
329 TestApplication application;
331 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
332 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
334 float width = 300.0f;
337 application.SendNotification();
338 application.Render();
340 v = controlWrapperImpl->TestGetHeightForWidthBase( width );
342 DALI_TEST_EQUALS( width, v, TEST_LOCATION );
347 int UtcDaliControlWrapperGetWidthForHeightBase(void)
349 TestApplication application;
351 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
352 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
354 float height = 300.0f;
357 application.SendNotification();
358 application.Render();
360 v = controlWrapperImpl->TestGetWidthForHeightBase( height );
362 DALI_TEST_EQUALS( height, v, TEST_LOCATION );
367 int UtcDaliControlWrapperCalculateChildSizeBase(void)
369 TestApplication application;
371 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
372 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
374 Actor child = Actor::New();
375 child.SetResizePolicy( Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS );
376 child.SetSize(150, 150);
378 application.SendNotification();
379 application.Render();
382 v = controlWrapperImpl->TestCalculateChildSizeBase( child, Dali::Dimension::ALL_DIMENSIONS );
383 DALI_TEST_EQUALS( v, 0.0f, TEST_LOCATION );
388 int UtcDaliControlWrapperRelayoutDependentOnChildrenBase(void)
390 TestApplication application;
392 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
393 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
397 v = controlWrapperImpl->TestRelayoutDependentOnChildrenBase( Dali::Dimension::ALL_DIMENSIONS );
398 application.SendNotification();
399 application.Render();
401 DALI_TEST_EQUALS( v, true, TEST_LOCATION );
403 controlWrapper.SetResizePolicy( Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS );
404 v = controlWrapperImpl->TestRelayoutDependentOnChildrenBase( Dali::Dimension::WIDTH );
405 application.SendNotification();
406 application.Render();
407 DALI_TEST_EQUALS( v, false, TEST_LOCATION );
412 int UtcDaliControlWrapperRegisterVisualToSelf(void)
414 ToolkitTestApplication application;
416 Test::ObjectDestructionTracker objectDestructionTracker;
419 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
420 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
422 objectDestructionTracker.Start( controlWrapper );
424 Property::Index index = 1;
426 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
427 Toolkit::Visual::Base visual;
430 map[Visual::Property::TYPE] = Visual::COLOR;
431 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
433 visual = visualFactory.CreateVisual( map );
434 DALI_TEST_CHECK( visual );
437 controlWrapperImpl->RegisterVisual( index, visual );
439 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
440 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
443 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
448 int UtcDaliControlWrapperRegisterVisualWithDepthIndexToSelf(void)
450 ToolkitTestApplication application;
452 Test::ObjectDestructionTracker objectDestructionTracker;
455 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
456 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
458 objectDestructionTracker.Start( controlWrapper );
460 Property::Index index = 1;
462 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
463 Toolkit::Visual::Base visual;
466 map[Visual::Property::TYPE] = Visual::COLOR;
467 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
469 visual = visualFactory.CreateVisual( map );
470 DALI_TEST_CHECK( visual );
473 controlWrapperImpl->RegisterVisual( index, visual, 4 );
475 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
476 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
477 DALI_TEST_EQUALS( visual.GetDepthIndex(), 4, TEST_LOCATION );
480 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
485 int UtcDaliControlWrapperRegisterDisabledVisual(void)
487 ToolkitTestApplication application;
489 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
490 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
492 Property::Index TEST_PROPERTY = 1;
494 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
495 Toolkit::Visual::Base visual;
498 map[Visual::Property::TYPE] = Visual::COLOR;
499 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
501 visual = visualFactory.CreateVisual( map );
502 DALI_TEST_CHECK(visual);
504 // Register index with a color visual
505 controlWrapperImpl->RegisterVisual( TEST_PROPERTY, visual, false );
507 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( TEST_PROPERTY ), visual, TEST_LOCATION );
508 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
510 Stage::GetCurrent().Add( controlWrapper );
513 application.SendNotification();
514 application.Render();
516 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
518 DALI_TEST_EQUALS( controlWrapper.OnStage(), true, TEST_LOCATION );
520 controlWrapperImpl->EnableVisual( TEST_PROPERTY, true );
522 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), true, TEST_LOCATION );
527 int UtcDaliControlWrapperRegisterDisabledVisualWithDepthIndex(void)
529 ToolkitTestApplication application;
531 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
532 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
534 Property::Index TEST_PROPERTY = 1;
536 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
537 Toolkit::Visual::Base visual;
540 map[Visual::Property::TYPE] = Visual::COLOR;
541 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
543 visual = visualFactory.CreateVisual( map );
544 DALI_TEST_CHECK(visual);
546 // Register index with a color visual
547 controlWrapperImpl->RegisterVisual( TEST_PROPERTY, visual, false, 10 );
549 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( TEST_PROPERTY ), visual, TEST_LOCATION );
550 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
551 DALI_TEST_EQUALS( visual.GetDepthIndex(), 10, TEST_LOCATION );
553 Stage::GetCurrent().Add( controlWrapper );
556 application.SendNotification();
557 application.Render();
559 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
561 DALI_TEST_EQUALS( controlWrapper.OnStage(), true, TEST_LOCATION );
563 controlWrapperImpl->EnableVisual( TEST_PROPERTY, true );
565 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), true, TEST_LOCATION );
570 int UtcDaliControlWrapperRegisterUnregisterVisual(void)
572 ToolkitTestApplication application;
574 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
575 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
577 Property::Index index = 1;
579 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
580 Toolkit::Visual::Base visual;
583 map[Visual::Property::TYPE] = Visual::COLOR;
584 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
586 visual = visualFactory.CreateVisual( map );
587 DALI_TEST_CHECK(visual);
589 // Register index with a color visual
590 controlWrapperImpl->RegisterVisual( index, visual );
592 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
595 controlWrapperImpl->UnregisterVisual( index );
597 DALI_TEST_CHECK( !controlWrapperImpl->GetVisual( index ) );
602 int UtcDaliControlWrapperTransitionDataMap1N(void)
604 TestApplication application;
607 map["target"] = "Actor1";
608 map["property"] = "randomProperty";
609 map["initialValue"] = Color::MAGENTA;
610 map["targetValue"] = Color::RED;
611 map["animator"] = Property::Map()
612 .Add("alphaFunction", "EASE_OUT")
613 .Add("timePeriod", Property::Map()
615 .Add("duration", 1.0f));
617 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
619 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
620 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
622 //DummyControl actor = DummyControl::New();
623 controlWrapper.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
624 controlWrapper.SetName("Actor1");
625 controlWrapper.SetColor(Color::CYAN);
626 Stage::GetCurrent().Add(controlWrapper);
628 Animation anim = controlWrapperImpl->CreateTransition( transition );
629 DALI_TEST_CHECK( ! anim );
631 Property::Map returnedMap = transition.GetAnimatorAt(0);
633 Property::Value* value = returnedMap.Find("property");
634 DALI_TEST_CHECK( value != NULL);
635 DALI_TEST_EQUALS( "randomProperty", value->Get<std::string>(), TEST_LOCATION );
637 value = returnedMap.Find("initialValue");
638 DALI_TEST_CHECK( value != NULL);
639 DALI_TEST_EQUALS( Color::MAGENTA, value->Get<Vector4>(), TEST_LOCATION );
641 value = returnedMap.Find("targetValue");
642 DALI_TEST_CHECK( value != NULL);
643 DALI_TEST_EQUALS( Color::RED, value->Get<Vector4>(), TEST_LOCATION );
645 value = returnedMap.Find("animator");
646 DALI_TEST_CHECK( value != NULL);
647 Property::Map returnedAnimatorMap = value->Get<Property::Map>();
649 value = returnedAnimatorMap.Find("alphaFunction");
650 DALI_TEST_CHECK( value != NULL);
651 DALI_TEST_EQUALS( "EASE_OUT", value->Get<std::string>(), TEST_LOCATION );
653 value = returnedAnimatorMap.Find("timePeriod");
654 DALI_TEST_CHECK( value != NULL);
655 Property::Map returnedTimePeriodMap = value->Get<Property::Map>();
657 value = returnedTimePeriodMap.Find("delay");
658 DALI_TEST_CHECK( value != NULL);
659 DALI_TEST_EQUALS( 0.5f, value->Get<float>(), TEST_LOCATION );
661 value = returnedTimePeriodMap.Find("duration");
662 DALI_TEST_CHECK( value != NULL);
663 DALI_TEST_EQUALS( 1.0f, value->Get<float>(), TEST_LOCATION );
668 int UtcDaliControlWrapperApplyThemeStyle(void)
670 ToolkitTestApplication application;
672 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
673 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
675 controlWrapperImpl->ApplyThemeStyle();
677 DALI_TEST_CHECK( true );
681 int UtcDaliControlWrapperTestControlProperties(void)
683 ToolkitTestApplication application;
685 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
686 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
688 Stage::GetCurrent().Add( controlWrapper );
690 // "background" property
691 Property::Map rendererMap;
692 rendererMap[Visual::Property::TYPE] = Visual::COLOR;
693 rendererMap[ColorVisual::Property::MIX_COLOR] = Color::RED;
694 controlWrapper.SetProperty( Control::Property::BACKGROUND, rendererMap );
695 Property::Value propertyValue = controlWrapper.GetProperty( Control::Property::BACKGROUND );
696 Property::Map* resultMap = propertyValue.GetMap();
697 DALI_TEST_CHECK( resultMap->Find( Toolkit::Visual::Property::TYPE ) );
698 DALI_TEST_EQUALS( resultMap->Find( Toolkit::Visual::Property::TYPE )->Get<int>(), (int)Visual::COLOR, TEST_LOCATION );
699 DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR ) );
700 DALI_TEST_EQUALS( resultMap->Find( ColorVisual::Property::MIX_COLOR )->Get<Vector4>(), Color::RED, TEST_LOCATION );
702 // "keyInputFocus" property
703 controlWrapper.SetProperty( Control::Property::KEY_INPUT_FOCUS, true );
704 DALI_TEST_EQUALS( true, controlWrapper.GetProperty( Control::Property::KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
706 // "styleName" property
707 controlWrapper.SetProperty( Control::Property::STYLE_NAME, "MyCustomStyle" );
708 DALI_TEST_EQUALS( "MyCustomStyle", controlWrapper.GetProperty( Control::Property::STYLE_NAME ).Get< std::string >(), TEST_LOCATION );
713 int UtcDaliControlWrapperTypeRegistryCreation(void)
715 ToolkitTestApplication application;
717 TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo( "ControlWrapper" );
718 DALI_TEST_CHECK( typeInfo )
720 // Check that we can't create a ControlWrapper instance
721 BaseHandle baseHandle = typeInfo.CreateInstance();
722 DALI_TEST_CHECK( !baseHandle )
727 void SetProperty(BaseObject* object, const char* const name, Property::Value* value)
730 Property::Value* GetProperty(BaseObject* object, const char* const name )
735 int UtcDaliControlWrapperAnimateVisual(void)
737 tet_infoline("Test that the control wrapper's visuals can be animated by name when registered");
739 ToolkitTestApplication application;
740 Test::ObjectDestructionTracker objectDestructionTracker;
743 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
744 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
746 Property::Index index = Control::CONTROL_PROPERTY_END_INDEX+1;
747 std::string visualName("colorVisual");
748 CSharpTypeRegistry::RegisterProperty( customControlTypeName, visualName, index, Property::VECTOR4, SetProperty, GetProperty );
750 objectDestructionTracker.Start( controlWrapper );
752 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
753 Toolkit::Visual::Base visual;
756 map[Visual::Property::TYPE] = Visual::COLOR;
757 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
759 visual = visualFactory.CreateVisual( map );
760 DALI_TEST_CHECK( visual );
763 controlWrapperImpl->TestRegisterVisual( index, visual );
765 Stage::GetCurrent().Add( controlWrapper );
766 controlWrapper.SetSize( 100, 100 );
767 application.SendNotification();
768 application.Render(0); // Trigger animation start
770 Property::Map transition;
771 transition["target"] = visualName;
772 transition["property"] = "mixColor";
773 transition["targetValue"] = Color::GREEN;
774 Property::Map animator;
775 animator["alphaFunction"] = "LINEAR";
776 animator["duration"] = 1.0f;
777 animator["delay"] = 0.0f;
778 transition["animator"] = animator;
780 TransitionData transitionData = TransitionData::New(transition);
781 Animation anim = DevelControl::CreateTransition( *controlWrapperImpl, transitionData );
784 application.SendNotification();
785 application.Render(0); // Trigger animation start
787 application.Render(1000); // animation end
788 application.Render( 10);
790 Property::Map visualMap;
791 visual.CreatePropertyMap( visualMap );
792 Property::Value* value = visualMap.Find(ColorVisual::Property::MIX_COLOR, "mixColor");
793 DALI_TEST_CHECK( value != NULL );
796 Vector4 testColor = value->Get<Vector4>();
797 DALI_TEST_EQUALS( testColor, Color::GREEN, 0.001f, TEST_LOCATION );
800 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
801 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
803 Stage::GetCurrent().Remove( controlWrapper );
806 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed