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;
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 OnStageConnection( int depth )
116 Control::OnStageConnection(depth);
118 virtual void OnStageDisconnection()
120 Control::OnStageDisconnection();
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 OnTouchEvent( const TouchEvent& event )
148 virtual bool OnHoverEvent( const HoverEvent& event )
152 virtual bool OnWheelEvent( const WheelEvent& event )
156 virtual bool OnKeyEvent( const KeyEvent& event )
160 virtual void OnKeyInputFocusGained()
163 virtual void OnKeyInputFocusLost()
166 virtual Vector3 GetNaturalSize()
168 return Vector3( 0.0f, 0.0f, 0.0f );
171 virtual float GetHeightForWidth( float width )
176 virtual float GetWidthForHeight( float height )
181 void TestRegisterVisual( Property::Index index, Toolkit::Visual::Base visual )
183 ControlWrapper::RegisterVisual( index, visual );
185 VisualIndices::iterator iter = std::find( mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index );
186 if( iter == mRegisteredVisualIndices.end() )
188 mRegisteredVisualIndices.push_back(index);
192 virtual void OnRelayout( const Vector2& size, RelayoutContainer& container )
196 for( VisualIndices::iterator iter = mRegisteredVisualIndices.begin(); iter != mRegisteredVisualIndices.end() ; ++iter )
198 Visual::Base visual = GetVisual(*iter);
199 Property::Map map; // empty map enforces defaults
200 visual.SetTransformAndSize( map, size );
204 virtual void OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension )
208 virtual void OnCalculateRelayoutSize( Dimension::Type dimension )
212 virtual float CalculateChildSize( const Dali::Actor& child, Dimension::Type dimension )
217 virtual void OnLayoutNegotiated( float size, Dimension::Type dimension )
221 virtual bool RelayoutDependentOnChildren( Dimension::Type dimension = Dimension::ALL_DIMENSIONS )
226 void SetDaliProperty(std::string s)
228 Self().SetProperty(mDaliProperty, s);
230 void TestRelayoutRequest()
235 float TestGetHeightForWidthBase( float width )
237 return GetHeightForWidthBase( width );
240 float TestGetWidthForHeightBase( float height )
242 return GetWidthForHeightBase( height );
245 float TestCalculateChildSizeBase( const Dali::Actor& child, Dimension::Type dimension )
247 return CalculateChildSizeBase( child, dimension );
250 bool TestRelayoutDependentOnChildrenBase( Dimension::Type dimension )
252 return RelayoutDependentOnChildrenBase( dimension );
255 Property::Index mDaliProperty;
261 typedef std::vector<Property::Index> VisualIndices;
262 VisualIndices mRegisteredVisualIndices;
269 static std::string customControlTypeName = "MyTestCustomControl";
270 static TypeRegistration customControl( customControlTypeName, typeid(Dali::Toolkit::Control), NULL );
273 int UtcDaliControlWrapperConstructor(void)
275 ToolkitTestApplication application; // Exceptions require ToolkitTestApplication
277 Toolkit::Internal::ControlWrapper* controlWrapperImpl = new Toolkit::Internal::ControlWrapper( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
278 ControlWrapper controlWrapper;
280 DALI_TEST_CHECK( !ControlWrapper::DownCast( controlWrapper ) );
282 controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
284 DALI_TEST_CHECK( ControlWrapper::DownCast( controlWrapper ) );
286 Dali::TypeInfo typeInfo = DevelCustomActor::GetTypeInfo( controlWrapper );
288 DALI_TEST_EQUALS( typeInfo.GetName(), customControlTypeName, TEST_LOCATION);
294 int UtcDaliControlWrapperDestructor(void)
296 TestApplication application;
298 ControlWrapper control = ControlWrapper::New( customControlTypeName, *( new Toolkit::Internal::ControlWrapper( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT ) ) );
300 ControlWrapper control2( control );
302 DALI_TEST_CHECK( control );
304 DALI_TEST_CHECK( !control );
306 DALI_TEST_CHECK( control2 );
308 DALI_TEST_CHECK( !control2 );
313 int UtcDaliControlWrapperRelayoutRequest(void)
315 TestApplication application;
317 DALI_TEST_EQUALS( gOnRelayout, false, TEST_LOCATION );
319 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
320 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
322 Stage::GetCurrent().Add( controlWrapper );
324 application.SendNotification();
325 application.Render();
327 DALI_TEST_EQUALS( gOnRelayout, true, TEST_LOCATION );
330 controlWrapperImpl->TestRelayoutRequest();
331 application.SendNotification();
332 application.Render();
334 DALI_TEST_EQUALS( gOnRelayout, true, TEST_LOCATION );
339 int UtcDaliControlWrapperImplGetHeightForWidthBase(void)
341 TestApplication application;
343 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
344 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
346 float width = 300.0f;
349 application.SendNotification();
350 application.Render();
352 v = controlWrapperImpl->TestGetHeightForWidthBase( width );
354 DALI_TEST_EQUALS( width, v, TEST_LOCATION );
359 int UtcDaliControlWrapperGetWidthForHeightBase(void)
361 TestApplication application;
363 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
364 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
366 float height = 300.0f;
369 application.SendNotification();
370 application.Render();
372 v = controlWrapperImpl->TestGetWidthForHeightBase( height );
374 DALI_TEST_EQUALS( height, v, TEST_LOCATION );
379 int UtcDaliControlWrapperCalculateChildSizeBase(void)
381 TestApplication application;
383 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
384 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
386 Actor child = Actor::New();
387 child.SetResizePolicy( Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS );
388 child.SetProperty( Actor::Property::SIZE, Vector2(150, 150) );
390 application.SendNotification();
391 application.Render();
394 v = controlWrapperImpl->TestCalculateChildSizeBase( child, Dali::Dimension::ALL_DIMENSIONS );
395 DALI_TEST_EQUALS( v, 0.0f, TEST_LOCATION );
400 int UtcDaliControlWrapperRelayoutDependentOnChildrenBase(void)
402 TestApplication application;
404 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
405 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
409 v = controlWrapperImpl->TestRelayoutDependentOnChildrenBase( Dali::Dimension::ALL_DIMENSIONS );
410 application.SendNotification();
411 application.Render();
413 DALI_TEST_EQUALS( v, true, TEST_LOCATION );
415 controlWrapper.SetResizePolicy( Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS );
416 v = controlWrapperImpl->TestRelayoutDependentOnChildrenBase( Dali::Dimension::WIDTH );
417 application.SendNotification();
418 application.Render();
419 DALI_TEST_EQUALS( v, false, TEST_LOCATION );
424 int UtcDaliControlWrapperRegisterVisualToSelf(void)
426 ToolkitTestApplication application;
428 Test::ObjectDestructionTracker objectDestructionTracker;
431 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
432 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
434 objectDestructionTracker.Start( controlWrapper );
436 Property::Index index = 1;
438 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
439 Toolkit::Visual::Base visual;
442 map[Visual::Property::TYPE] = Visual::COLOR;
443 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
445 visual = visualFactory.CreateVisual( map );
446 DALI_TEST_CHECK( visual );
449 controlWrapperImpl->RegisterVisual( index, visual );
451 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
452 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
455 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
460 int UtcDaliControlWrapperRegisterVisualWithDepthIndexToSelf(void)
462 ToolkitTestApplication application;
464 Test::ObjectDestructionTracker objectDestructionTracker;
467 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
468 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
470 objectDestructionTracker.Start( controlWrapper );
472 Property::Index index = 1;
474 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
475 Toolkit::Visual::Base visual;
478 map[Visual::Property::TYPE] = Visual::COLOR;
479 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
481 visual = visualFactory.CreateVisual( map );
482 DALI_TEST_CHECK( visual );
485 controlWrapperImpl->RegisterVisual( index, visual, 4 );
487 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
488 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
489 DALI_TEST_EQUALS( visual.GetDepthIndex(), 4, TEST_LOCATION );
492 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
497 int UtcDaliControlWrapperRegisterDisabledVisual(void)
499 ToolkitTestApplication application;
501 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
502 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
504 Property::Index TEST_PROPERTY = 1;
506 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
507 Toolkit::Visual::Base visual;
510 map[Visual::Property::TYPE] = Visual::COLOR;
511 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
513 visual = visualFactory.CreateVisual( map );
514 DALI_TEST_CHECK(visual);
516 // Register index with a color visual
517 controlWrapperImpl->RegisterVisual( TEST_PROPERTY, visual, false );
519 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( TEST_PROPERTY ), visual, TEST_LOCATION );
520 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
522 Stage::GetCurrent().Add( controlWrapper );
525 application.SendNotification();
526 application.Render();
528 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
530 DALI_TEST_EQUALS( controlWrapper.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ), true, TEST_LOCATION );
532 controlWrapperImpl->EnableVisual( TEST_PROPERTY, true );
534 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), true, TEST_LOCATION );
539 int UtcDaliControlWrapperRegisterDisabledVisualWithDepthIndex(void)
541 ToolkitTestApplication application;
543 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
544 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
546 Property::Index TEST_PROPERTY = 1;
548 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
549 Toolkit::Visual::Base visual;
552 map[Visual::Property::TYPE] = Visual::COLOR;
553 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
555 visual = visualFactory.CreateVisual( map );
556 DALI_TEST_CHECK(visual);
558 // Register index with a color visual
559 controlWrapperImpl->RegisterVisual( TEST_PROPERTY, visual, false, 10 );
561 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( TEST_PROPERTY ), visual, TEST_LOCATION );
562 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
563 DALI_TEST_EQUALS( visual.GetDepthIndex(), 10, TEST_LOCATION );
565 Stage::GetCurrent().Add( controlWrapper );
568 application.SendNotification();
569 application.Render();
571 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
573 DALI_TEST_EQUALS( controlWrapper.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ), true, TEST_LOCATION );
575 controlWrapperImpl->EnableVisual( TEST_PROPERTY, true );
577 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), true, TEST_LOCATION );
582 int UtcDaliControlWrapperRegisterUnregisterVisual(void)
584 ToolkitTestApplication application;
586 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
587 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
589 Property::Index index = 1;
591 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
592 Toolkit::Visual::Base visual;
595 map[Visual::Property::TYPE] = Visual::COLOR;
596 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
598 visual = visualFactory.CreateVisual( map );
599 DALI_TEST_CHECK(visual);
601 // Register index with a color visual
602 controlWrapperImpl->RegisterVisual( index, visual );
604 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
607 controlWrapperImpl->UnregisterVisual( index );
609 DALI_TEST_CHECK( !controlWrapperImpl->GetVisual( index ) );
614 int UtcDaliControlWrapperTransitionDataMap1N(void)
616 TestApplication application;
619 map["target"] = "Actor1";
620 map["property"] = "randomProperty";
621 map["initialValue"] = Color::MAGENTA;
622 map["targetValue"] = Color::RED;
623 map["animator"] = Property::Map()
624 .Add("alphaFunction", "EASE_OUT")
625 .Add("timePeriod", Property::Map()
627 .Add("duration", 1.0f));
629 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
631 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
632 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
634 //DummyControl actor = DummyControl::New();
635 controlWrapper.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
636 controlWrapper.SetProperty( Dali::Actor::Property::NAME,"Actor1");
637 controlWrapper.SetProperty( Actor::Property::COLOR,Color::CYAN);
638 Stage::GetCurrent().Add(controlWrapper);
640 Animation anim = controlWrapperImpl->CreateTransition( transition );
641 DALI_TEST_CHECK( ! anim );
643 Property::Map returnedMap = transition.GetAnimatorAt(0);
645 Property::Value* value = returnedMap.Find("property");
646 DALI_TEST_CHECK( value != NULL);
647 DALI_TEST_EQUALS( "randomProperty", value->Get<std::string>(), TEST_LOCATION );
649 value = returnedMap.Find("initialValue");
650 DALI_TEST_CHECK( value != NULL);
651 DALI_TEST_EQUALS( Color::MAGENTA, value->Get<Vector4>(), TEST_LOCATION );
653 value = returnedMap.Find("targetValue");
654 DALI_TEST_CHECK( value != NULL);
655 DALI_TEST_EQUALS( Color::RED, value->Get<Vector4>(), TEST_LOCATION );
657 value = returnedMap.Find("animator");
658 DALI_TEST_CHECK( value != NULL);
659 Property::Map returnedAnimatorMap = value->Get<Property::Map>();
661 value = returnedAnimatorMap.Find("alphaFunction");
662 DALI_TEST_CHECK( value != NULL);
663 DALI_TEST_EQUALS( "EASE_OUT", value->Get<std::string>(), TEST_LOCATION );
665 value = returnedAnimatorMap.Find("timePeriod");
666 DALI_TEST_CHECK( value != NULL);
667 Property::Map returnedTimePeriodMap = value->Get<Property::Map>();
669 value = returnedTimePeriodMap.Find("delay");
670 DALI_TEST_CHECK( value != NULL);
671 DALI_TEST_EQUALS( 0.5f, value->Get<float>(), TEST_LOCATION );
673 value = returnedTimePeriodMap.Find("duration");
674 DALI_TEST_CHECK( value != NULL);
675 DALI_TEST_EQUALS( 1.0f, value->Get<float>(), TEST_LOCATION );
680 int UtcDaliControlWrapperApplyThemeStyle(void)
682 ToolkitTestApplication application;
684 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
685 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
687 controlWrapperImpl->ApplyThemeStyle();
689 DALI_TEST_CHECK( true );
693 int UtcDaliControlWrapperTestControlProperties(void)
695 ToolkitTestApplication application;
697 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
698 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
700 Stage::GetCurrent().Add( controlWrapper );
702 // "background" property
703 Property::Map rendererMap;
704 rendererMap[Visual::Property::TYPE] = Visual::COLOR;
705 rendererMap[ColorVisual::Property::MIX_COLOR] = Color::RED;
706 controlWrapper.SetProperty( Control::Property::BACKGROUND, rendererMap );
707 Property::Value propertyValue = controlWrapper.GetProperty( Control::Property::BACKGROUND );
708 Property::Map* resultMap = propertyValue.GetMap();
709 DALI_TEST_CHECK( resultMap->Find( Toolkit::Visual::Property::TYPE ) );
710 DALI_TEST_EQUALS( resultMap->Find( Toolkit::Visual::Property::TYPE )->Get<int>(), (int)Visual::COLOR, TEST_LOCATION );
711 DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR ) );
712 DALI_TEST_EQUALS( resultMap->Find( ColorVisual::Property::MIX_COLOR )->Get<Vector4>(), Color::RED, TEST_LOCATION );
714 // "keyInputFocus" property
715 controlWrapper.SetProperty( Control::Property::KEY_INPUT_FOCUS, true );
716 DALI_TEST_EQUALS( true, controlWrapper.GetProperty( Control::Property::KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
718 // "styleName" property
719 controlWrapper.SetProperty( Control::Property::STYLE_NAME, "MyCustomStyle" );
720 DALI_TEST_EQUALS( "MyCustomStyle", controlWrapper.GetProperty( Control::Property::STYLE_NAME ).Get< std::string >(), TEST_LOCATION );
725 int UtcDaliControlWrapperTypeRegistryCreation(void)
727 ToolkitTestApplication application;
729 TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo( "ControlWrapper" );
730 DALI_TEST_CHECK( typeInfo )
732 // Check that we can't create a ControlWrapper instance
733 BaseHandle baseHandle = typeInfo.CreateInstance();
734 DALI_TEST_CHECK( !baseHandle )
739 void SetProperty(BaseObject* object, const char* const name, Property::Value* value)
742 Property::Value* GetProperty(BaseObject* object, const char* const name )
747 int UtcDaliControlWrapperAnimateVisual(void)
749 tet_infoline("Test that the control wrapper's visuals can be animated by name when registered");
751 ToolkitTestApplication application;
752 Test::ObjectDestructionTracker objectDestructionTracker;
755 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
756 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
758 Property::Index index = Control::CONTROL_PROPERTY_END_INDEX+1;
759 std::string visualName("colorVisual");
760 CSharpTypeRegistry::RegisterProperty( customControlTypeName, visualName, index, Property::VECTOR4, SetProperty, GetProperty );
762 objectDestructionTracker.Start( controlWrapper );
764 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
765 Toolkit::Visual::Base visual;
768 map[Visual::Property::TYPE] = Visual::COLOR;
769 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
771 visual = visualFactory.CreateVisual( map );
772 DALI_TEST_CHECK( visual );
775 controlWrapperImpl->TestRegisterVisual( index, visual );
777 Stage::GetCurrent().Add( controlWrapper );
778 controlWrapper.SetProperty( Actor::Property::SIZE, Vector2( 100, 100 ) );
779 application.SendNotification();
780 application.Render(0); // Trigger animation start
782 Property::Map transition;
783 transition["target"] = visualName;
784 transition["property"] = "mixColor";
785 transition["targetValue"] = Color::GREEN;
786 Property::Map animator;
787 animator["alphaFunction"] = "LINEAR";
788 animator["duration"] = 1.0f;
789 animator["delay"] = 0.0f;
790 transition["animator"] = animator;
792 TransitionData transitionData = TransitionData::New(transition);
793 Animation anim = DevelControl::CreateTransition( *controlWrapperImpl, transitionData );
796 application.SendNotification();
797 application.Render(0); // Trigger animation start
799 application.Render(1000); // animation end
800 application.Render( 10);
802 Property::Map visualMap;
803 visual.CreatePropertyMap( visualMap );
804 Property::Value* value = visualMap.Find(ColorVisual::Property::MIX_COLOR, "mixColor");
805 DALI_TEST_CHECK( value != NULL );
808 Vector4 testColor = value->Get<Vector4>();
809 DALI_TEST_EQUALS( testColor, Color::GREEN, 0.001f, TEST_LOCATION );
812 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
813 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
815 Stage::GetCurrent().Remove( controlWrapper );
818 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
823 int UtcDaliControlWrapperEmitKeyFocusSignal(void)
825 ToolkitTestApplication application;
827 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
828 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
830 gKeyInputFocusCallBackCalled = false;
831 controlWrapper.KeyInputFocusGainedSignal().Connect(&TestKeyInputFocusCallback);
833 application.SendNotification();
834 application.Render();
836 controlWrapperImpl->EmitKeyInputFocusSignal( true );
838 DALI_TEST_CHECK( gKeyInputFocusCallBackCalled );