2 * Copyright (c) 2022 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>
25 #include <dali-toolkit/dali-toolkit.h>
26 #include <dali-toolkit/devel-api/controls/control-devel.h>
27 #include <dali-toolkit/devel-api/controls/control-wrapper-impl.h>
28 #include <dali-toolkit/devel-api/controls/control-wrapper.h>
29 #include <dali-toolkit/devel-api/visual-factory/transition-data.h>
30 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
32 #include <dali/devel-api/actors/custom-actor-devel.h>
33 #include <dali/devel-api/object/csharp-type-registry.h>
34 #include <dali/public-api/dali-core.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 ///////////////////////////////////////////////////////////////////////////////////////////////////
69 struct TestCustomControl : public Toolkit::Internal::ControlWrapper
75 : 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)
86 : Toolkit::Internal::ControlWrapper(CustomControlBehaviour(Toolkit::Internal::ControlWrapper::DISABLE_STYLE_CHANGE_SIGNALS |
87 Toolkit::Internal::ControlWrapper::REQUIRES_KEYBOARD_NAVIGATION_SUPPORT)),
88 mDaliProperty(Property::INVALID_INDEX),
89 mSizeSet(Vector3::ZERO),
90 mTargetSize(Vector3::ZERO),
99 virtual ~TestCustomControl()
103 void Initialize(const char* name = NULL)
105 mDaliProperty = Self().RegisterProperty("Dali", std::string("no"), Property::READ_WRITE);
110 using Control::OnInitialize; ///< To tell the compiler that we really do want to overload OnInitialize in this class & were not trying to override it
111 virtual void OnInitialize(const char* name)
115 // From Toolkit::Internal::ControlWrapper
116 virtual void OnSceneConnection(int depth)
119 Control::OnSceneConnection(depth);
121 virtual void OnSceneDisconnection()
123 Control::OnSceneDisconnection();
125 virtual void OnChildAdd(Actor& child)
127 Control::OnChildAdd(child);
129 virtual void OnChildRemove(Actor& child)
131 Control::OnChildRemove(child);
133 virtual void OnPropertySet(Property::Index index, const Property::Value& propertyValue)
135 Control::OnPropertySet(index, propertyValue);
137 virtual void OnSizeSet(const Vector3& targetSize)
139 mSizeSet = targetSize;
140 Control::OnSizeSet(targetSize);
142 virtual void OnSizeAnimation(Animation& animation, const Vector3& targetSize)
144 mTargetSize = targetSize;
145 Control::OnSizeAnimation(animation, targetSize);
147 virtual bool OnHoverEvent(const HoverEvent& event)
151 virtual bool OnWheelEvent(const WheelEvent& event)
155 virtual bool OnKeyEvent(const KeyEvent& event)
159 virtual void OnKeyInputFocusGained()
162 virtual void OnKeyInputFocusLost()
165 virtual Vector3 GetNaturalSize()
167 return Vector3(0.0f, 0.0f, 0.0f);
170 virtual float GetHeightForWidth(float width)
175 virtual float GetWidthForHeight(float height)
180 void TestRegisterVisual(Property::Index index, Toolkit::Visual::Base visual)
182 ControlWrapper::RegisterVisual(index, visual);
184 VisualIndices::iterator iter = std::find(mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index);
185 if(iter == mRegisteredVisualIndices.end())
187 mRegisteredVisualIndices.push_back(index);
191 virtual void OnRelayout(const Vector2& size, RelayoutContainer& container)
195 for(VisualIndices::iterator iter = mRegisteredVisualIndices.begin(); iter != mRegisteredVisualIndices.end(); ++iter)
197 Visual::Base visual = GetVisual(*iter);
198 Property::Map map; // empty map enforces defaults
199 visual.SetTransformAndSize(map, size);
203 virtual void OnSetResizePolicy(ResizePolicy::Type policy, Dimension::Type dimension)
207 virtual void OnCalculateRelayoutSize(Dimension::Type dimension)
211 virtual float CalculateChildSize(const Dali::Actor& child, Dimension::Type dimension)
216 virtual void OnLayoutNegotiated(float size, Dimension::Type dimension)
220 virtual bool RelayoutDependentOnChildren(Dimension::Type dimension = Dimension::ALL_DIMENSIONS)
225 void SetDaliProperty(std::string s)
227 Self().SetProperty(mDaliProperty, s);
229 void TestRelayoutRequest()
234 float TestGetHeightForWidthBase(float width)
236 return GetHeightForWidthBase(width);
239 float TestGetWidthForHeightBase(float height)
241 return GetWidthForHeightBase(height);
244 float TestCalculateChildSizeBase(const Dali::Actor& child, Dimension::Type dimension)
246 return CalculateChildSizeBase(child, dimension);
249 bool TestRelayoutDependentOnChildrenBase(Dimension::Type dimension)
251 return RelayoutDependentOnChildrenBase(dimension);
254 Property::Index mDaliProperty;
260 typedef std::vector<Property::Index> VisualIndices;
261 VisualIndices mRegisteredVisualIndices;
266 static std::string customControlTypeName = "MyTestCustomControl";
267 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);
289 int UtcDaliControlWrapperDestructor(void)
291 ToolkitTestApplication application;
293 ControlWrapper control = ControlWrapper::New(customControlTypeName, *(new Toolkit::Internal::ControlWrapper(Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT)));
295 ControlWrapper control2(control);
297 DALI_TEST_CHECK(control);
299 DALI_TEST_CHECK(!control);
301 DALI_TEST_CHECK(control2);
303 DALI_TEST_CHECK(!control2);
308 int UtcDaliControlWrapperRelayoutRequest(void)
310 ToolkitTestApplication application;
312 DALI_TEST_EQUALS(gOnRelayout, false, TEST_LOCATION);
314 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl(Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT);
315 ControlWrapper controlWrapper = ControlWrapper::New(customControlTypeName, *controlWrapperImpl);
317 application.GetScene().Add(controlWrapper);
319 application.SendNotification();
320 application.Render();
322 DALI_TEST_EQUALS(gOnRelayout, true, TEST_LOCATION);
325 controlWrapperImpl->TestRelayoutRequest();
326 application.SendNotification();
327 application.Render();
329 DALI_TEST_EQUALS(gOnRelayout, true, TEST_LOCATION);
334 int UtcDaliControlWrapperImplGetHeightForWidthBase(void)
336 ToolkitTestApplication application;
338 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl(Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT);
339 ControlWrapper controlWrapper = ControlWrapper::New(customControlTypeName, *controlWrapperImpl);
341 float width = 300.0f;
344 application.SendNotification();
345 application.Render();
347 v = controlWrapperImpl->TestGetHeightForWidthBase(width);
349 DALI_TEST_EQUALS(width, v, TEST_LOCATION);
354 int UtcDaliControlWrapperGetWidthForHeightBase(void)
356 ToolkitTestApplication application;
358 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl(Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT);
359 ControlWrapper controlWrapper = ControlWrapper::New(customControlTypeName, *controlWrapperImpl);
361 float height = 300.0f;
364 application.SendNotification();
365 application.Render();
367 v = controlWrapperImpl->TestGetWidthForHeightBase(height);
369 DALI_TEST_EQUALS(height, v, TEST_LOCATION);
374 int UtcDaliControlWrapperCalculateChildSizeBase(void)
376 ToolkitTestApplication application;
378 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl(Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT);
379 ControlWrapper controlWrapper = ControlWrapper::New(customControlTypeName, *controlWrapperImpl);
381 Actor child = Actor::New();
382 child.SetResizePolicy(Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS);
383 child.SetProperty(Actor::Property::SIZE, Vector2(150, 150));
385 application.SendNotification();
386 application.Render();
389 v = controlWrapperImpl->TestCalculateChildSizeBase(child, Dali::Dimension::ALL_DIMENSIONS);
390 DALI_TEST_EQUALS(v, 0.0f, TEST_LOCATION);
395 int UtcDaliControlWrapperRelayoutDependentOnChildrenBase(void)
397 ToolkitTestApplication application;
399 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl(Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT);
400 ControlWrapper controlWrapper = ControlWrapper::New(customControlTypeName, *controlWrapperImpl);
404 v = controlWrapperImpl->TestRelayoutDependentOnChildrenBase(Dali::Dimension::ALL_DIMENSIONS);
405 application.SendNotification();
406 application.Render();
408 DALI_TEST_EQUALS(v, true, TEST_LOCATION);
410 controlWrapper.SetResizePolicy(Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS);
411 v = controlWrapperImpl->TestRelayoutDependentOnChildrenBase(Dali::Dimension::WIDTH);
412 application.SendNotification();
413 application.Render();
414 DALI_TEST_EQUALS(v, false, TEST_LOCATION);
419 int UtcDaliControlWrapperRegisterVisualToSelf(void)
421 ToolkitTestApplication application;
423 Test::ObjectDestructionTracker objectDestructionTracker(application.GetCore().GetObjectRegistry());
426 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl(Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT);
427 ControlWrapper controlWrapper = ControlWrapper::New(customControlTypeName, *controlWrapperImpl);
429 objectDestructionTracker.Start(controlWrapper);
431 Property::Index index = 1;
433 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
434 Toolkit::Visual::Base visual;
437 map[Visual::Property::TYPE] = Visual::COLOR;
438 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
440 visual = visualFactory.CreateVisual(map);
441 DALI_TEST_CHECK(visual);
444 controlWrapperImpl->RegisterVisual(index, visual);
446 DALI_TEST_EQUALS(objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION); // Control not destroyed yet
447 DALI_TEST_EQUALS(controlWrapperImpl->GetVisual(index), visual, TEST_LOCATION);
450 DALI_TEST_EQUALS(objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION); // Should be destroyed
455 int UtcDaliControlWrapperRegisterVisualWithDepthIndexToSelf(void)
457 ToolkitTestApplication application;
459 Test::ObjectDestructionTracker objectDestructionTracker(application.GetCore().GetObjectRegistry());
462 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl(Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT);
463 ControlWrapper controlWrapper = ControlWrapper::New(customControlTypeName, *controlWrapperImpl);
465 objectDestructionTracker.Start(controlWrapper);
467 Property::Index index = 1;
469 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
470 Toolkit::Visual::Base visual;
473 map[Visual::Property::TYPE] = Visual::COLOR;
474 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
476 visual = visualFactory.CreateVisual(map);
477 DALI_TEST_CHECK(visual);
480 controlWrapperImpl->RegisterVisual(index, visual, 4);
482 DALI_TEST_EQUALS(objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION); // Control not destroyed yet
483 DALI_TEST_EQUALS(controlWrapperImpl->GetVisual(index), visual, TEST_LOCATION);
484 DALI_TEST_EQUALS(visual.GetDepthIndex(), 4, TEST_LOCATION);
487 DALI_TEST_EQUALS(objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION); // Should be destroyed
492 int UtcDaliControlWrapperRegisterDisabledVisual(void)
494 ToolkitTestApplication application;
496 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl(Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT);
497 ControlWrapper controlWrapper = ControlWrapper::New(customControlTypeName, *controlWrapperImpl);
499 Property::Index TEST_PROPERTY = 1;
501 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
502 Toolkit::Visual::Base visual;
505 map[Visual::Property::TYPE] = Visual::COLOR;
506 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
508 visual = visualFactory.CreateVisual(map);
509 DALI_TEST_CHECK(visual);
511 // Register index with a color visual
512 controlWrapperImpl->RegisterVisual(TEST_PROPERTY, visual, false);
514 DALI_TEST_EQUALS(controlWrapperImpl->GetVisual(TEST_PROPERTY), visual, TEST_LOCATION);
515 DALI_TEST_EQUALS(controlWrapperImpl->IsVisualEnabled(TEST_PROPERTY), false, TEST_LOCATION);
517 application.GetScene().Add(controlWrapper);
520 application.SendNotification();
521 application.Render();
523 DALI_TEST_EQUALS(controlWrapperImpl->IsVisualEnabled(TEST_PROPERTY), false, TEST_LOCATION);
525 DALI_TEST_EQUALS(controlWrapper.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE), true, TEST_LOCATION);
527 controlWrapperImpl->EnableVisual(TEST_PROPERTY, true);
529 DALI_TEST_EQUALS(controlWrapperImpl->IsVisualEnabled(TEST_PROPERTY), true, TEST_LOCATION);
534 int UtcDaliControlWrapperRegisterDisabledVisualWithDepthIndex(void)
536 ToolkitTestApplication application;
538 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl(Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT);
539 ControlWrapper controlWrapper = ControlWrapper::New(customControlTypeName, *controlWrapperImpl);
541 Property::Index TEST_PROPERTY = 1;
543 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
544 Toolkit::Visual::Base visual;
547 map[Visual::Property::TYPE] = Visual::COLOR;
548 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
550 visual = visualFactory.CreateVisual(map);
551 DALI_TEST_CHECK(visual);
553 // Register index with a color visual
554 controlWrapperImpl->RegisterVisual(TEST_PROPERTY, visual, false, 10);
556 DALI_TEST_EQUALS(controlWrapperImpl->GetVisual(TEST_PROPERTY), visual, TEST_LOCATION);
557 DALI_TEST_EQUALS(controlWrapperImpl->IsVisualEnabled(TEST_PROPERTY), false, TEST_LOCATION);
558 DALI_TEST_EQUALS(visual.GetDepthIndex(), 10, TEST_LOCATION);
560 application.GetScene().Add(controlWrapper);
563 application.SendNotification();
564 application.Render();
566 DALI_TEST_EQUALS(controlWrapperImpl->IsVisualEnabled(TEST_PROPERTY), false, TEST_LOCATION);
568 DALI_TEST_EQUALS(controlWrapper.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE), true, TEST_LOCATION);
570 controlWrapperImpl->EnableVisual(TEST_PROPERTY, true);
572 DALI_TEST_EQUALS(controlWrapperImpl->IsVisualEnabled(TEST_PROPERTY), true, TEST_LOCATION);
577 int UtcDaliControlWrapperRegisterUnregisterVisual(void)
579 ToolkitTestApplication application;
581 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl(Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT);
582 ControlWrapper controlWrapper = ControlWrapper::New(customControlTypeName, *controlWrapperImpl);
584 Property::Index index = 1;
586 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
587 Toolkit::Visual::Base visual;
590 map[Visual::Property::TYPE] = Visual::COLOR;
591 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
593 visual = visualFactory.CreateVisual(map);
594 DALI_TEST_CHECK(visual);
596 // Register index with a color visual
597 controlWrapperImpl->RegisterVisual(index, visual);
599 DALI_TEST_EQUALS(controlWrapperImpl->GetVisual(index), visual, TEST_LOCATION);
602 controlWrapperImpl->UnregisterVisual(index);
604 DALI_TEST_CHECK(!controlWrapperImpl->GetVisual(index));
609 int UtcDaliControlWrapperTransitionDataMap1N(void)
611 ToolkitTestApplication application;
614 map["target"] = "Actor1";
615 map["property"] = "randomProperty";
616 map["initialValue"] = Color::MAGENTA;
617 map["targetValue"] = Color::RED;
618 map["animator"] = Property::Map()
619 .Add("alphaFunction", "EASE_OUT")
620 .Add("timePeriod", Property::Map().Add("delay", 0.5f).Add("duration", 1.0f));
622 Dali::Toolkit::TransitionData transition = TransitionData::New(map);
624 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl(Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT);
625 ControlWrapper controlWrapper = ControlWrapper::New(customControlTypeName, *controlWrapperImpl);
627 //DummyControl actor = DummyControl::New();
628 controlWrapper.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
629 controlWrapper.SetProperty(Dali::Actor::Property::NAME, "Actor1");
630 controlWrapper.SetProperty(Actor::Property::COLOR, Color::CYAN);
631 application.GetScene().Add(controlWrapper);
633 Animation anim = controlWrapperImpl->CreateTransition(transition);
634 DALI_TEST_CHECK(!anim);
636 Property::Map returnedMap = transition.GetAnimatorAt(0);
638 Property::Value* value = returnedMap.Find("property");
639 DALI_TEST_CHECK(value != NULL);
640 DALI_TEST_EQUALS("randomProperty", value->Get<std::string>(), TEST_LOCATION);
642 value = returnedMap.Find("initialValue");
643 DALI_TEST_CHECK(value != NULL);
644 DALI_TEST_EQUALS(Color::MAGENTA, value->Get<Vector4>(), TEST_LOCATION);
646 value = returnedMap.Find("targetValue");
647 DALI_TEST_CHECK(value != NULL);
648 DALI_TEST_EQUALS(Color::RED, value->Get<Vector4>(), TEST_LOCATION);
650 value = returnedMap.Find("animator");
651 DALI_TEST_CHECK(value != NULL);
652 Property::Map returnedAnimatorMap = value->Get<Property::Map>();
654 value = returnedAnimatorMap.Find("alphaFunction");
655 DALI_TEST_CHECK(value != NULL);
656 DALI_TEST_EQUALS("EASE_OUT", value->Get<std::string>(), TEST_LOCATION);
658 value = returnedAnimatorMap.Find("timePeriod");
659 DALI_TEST_CHECK(value != NULL);
660 Property::Map returnedTimePeriodMap = value->Get<Property::Map>();
662 value = returnedTimePeriodMap.Find("delay");
663 DALI_TEST_CHECK(value != NULL);
664 DALI_TEST_EQUALS(0.5f, value->Get<float>(), TEST_LOCATION);
666 value = returnedTimePeriodMap.Find("duration");
667 DALI_TEST_CHECK(value != NULL);
668 DALI_TEST_EQUALS(1.0f, value->Get<float>(), TEST_LOCATION);
673 int UtcDaliControlWrapperApplyThemeStyle(void)
675 ToolkitTestApplication application;
677 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl(Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT);
678 ControlWrapper controlWrapper = ControlWrapper::New(customControlTypeName, *controlWrapperImpl);
680 controlWrapperImpl->ApplyThemeStyle();
682 DALI_TEST_CHECK(true);
686 int UtcDaliControlWrapperTestControlProperties(void)
688 ToolkitTestApplication application;
690 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl(Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT);
691 ControlWrapper controlWrapper = ControlWrapper::New(customControlTypeName, *controlWrapperImpl);
693 application.GetScene().Add(controlWrapper);
695 // "background" property
696 Property::Map rendererMap;
697 rendererMap[Visual::Property::TYPE] = Visual::COLOR;
698 rendererMap[ColorVisual::Property::MIX_COLOR] = Color::RED;
699 controlWrapper.SetProperty(Control::Property::BACKGROUND, rendererMap);
700 Property::Value propertyValue = controlWrapper.GetProperty(Control::Property::BACKGROUND);
701 Property::Map* resultMap = propertyValue.GetMap();
702 DALI_TEST_CHECK(resultMap->Find(Toolkit::Visual::Property::TYPE));
703 DALI_TEST_EQUALS(resultMap->Find(Toolkit::Visual::Property::TYPE)->Get<int>(), (int)Visual::COLOR, TEST_LOCATION);
704 DALI_TEST_CHECK(resultMap->Find(ColorVisual::Property::MIX_COLOR));
705 DALI_TEST_EQUALS(resultMap->Find(ColorVisual::Property::MIX_COLOR)->Get<Vector4>(), Color::RED, TEST_LOCATION);
707 // "keyInputFocus" property
708 controlWrapper.SetProperty(Control::Property::KEY_INPUT_FOCUS, true);
709 DALI_TEST_EQUALS(true, controlWrapper.GetProperty(Control::Property::KEY_INPUT_FOCUS).Get<bool>(), TEST_LOCATION);
711 // "styleName" property
712 controlWrapper.SetProperty(Control::Property::STYLE_NAME, "MyCustomStyle");
713 DALI_TEST_EQUALS("MyCustomStyle", controlWrapper.GetProperty(Control::Property::STYLE_NAME).Get<std::string>(), TEST_LOCATION);
718 int UtcDaliControlWrapperTypeRegistryCreation(void)
720 ToolkitTestApplication application;
722 TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo("ControlWrapper");
723 DALI_TEST_CHECK(typeInfo)
725 // Check that we can't create a ControlWrapper instance
726 BaseHandle baseHandle = typeInfo.CreateInstance();
727 DALI_TEST_CHECK(!baseHandle)
732 void SetProperty(BaseObject* object, const char* const name, Property::Value* value)
735 Property::Value* GetProperty(BaseObject* object, const char* const name)
740 int UtcDaliControlWrapperAnimateVisual(void)
742 tet_infoline("Test that the control wrapper's visuals can be animated by name when registered");
744 ToolkitTestApplication application;
745 Test::ObjectDestructionTracker objectDestructionTracker(application.GetCore().GetObjectRegistry());
748 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl(Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT);
749 ControlWrapper controlWrapper = ControlWrapper::New(customControlTypeName, *controlWrapperImpl);
751 Property::Index index = Control::CONTROL_PROPERTY_END_INDEX + 1;
752 std::string visualName("colorVisual");
753 CSharpTypeRegistry::RegisterProperty(customControlTypeName, visualName, index, Property::VECTOR4, SetProperty, GetProperty);
755 objectDestructionTracker.Start(controlWrapper);
757 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
758 Toolkit::Visual::Base visual;
761 map[Visual::Property::TYPE] = Visual::COLOR;
762 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
764 visual = visualFactory.CreateVisual(map);
765 DALI_TEST_CHECK(visual);
768 controlWrapperImpl->TestRegisterVisual(index, visual);
770 application.GetScene().Add(controlWrapper);
771 controlWrapper.SetProperty(Actor::Property::SIZE, Vector2(100, 100));
772 application.SendNotification();
773 application.Render(0); // Trigger animation start
775 Property::Map transition;
776 transition["target"] = visualName;
777 transition["property"] = "mixColor";
778 transition["targetValue"] = Color::GREEN;
779 Property::Map animator;
780 animator["alphaFunction"] = "LINEAR";
781 animator["duration"] = 1.0f;
782 animator["delay"] = 0.0f;
783 transition["animator"] = animator;
785 TransitionData transitionData = TransitionData::New(transition);
786 Animation anim = DevelControl::CreateTransition(*controlWrapperImpl, transitionData);
789 application.SendNotification();
790 application.Render(0); // Trigger animation start
792 application.Render(1000); // animation end
793 application.Render(10);
795 Property::Map visualMap;
796 visual.CreatePropertyMap(visualMap);
797 Property::Value* value = visualMap.Find(ColorVisual::Property::MIX_COLOR, "mixColor");
798 DALI_TEST_CHECK(value != NULL);
801 Vector4 testColor = value->Get<Vector4>();
802 DALI_TEST_EQUALS(testColor, Color::GREEN, 0.001f, TEST_LOCATION);
805 DALI_TEST_EQUALS(objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION); // Control not destroyed yet
806 DALI_TEST_EQUALS(controlWrapperImpl->GetVisual(index), visual, TEST_LOCATION);
808 application.GetScene().Remove(controlWrapper);
811 DALI_TEST_EQUALS(objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION); // Should be destroyed
816 int UtcDaliControlWrapperEmitKeyFocusSignal(void)
818 ToolkitTestApplication application;
820 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl(Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT);
821 ControlWrapper controlWrapper = ControlWrapper::New(customControlTypeName, *controlWrapperImpl);
823 gKeyInputFocusCallBackCalled = false;
824 controlWrapper.KeyInputFocusGainedSignal().Connect(&TestKeyInputFocusCallback);
826 application.SendNotification();
827 application.Render();
829 controlWrapperImpl->EmitKeyInputFocusSignal(true);
831 DALI_TEST_CHECK(gKeyInputFocusCallBackCalled);