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>
24 #include "toolkit-style-monitor.h"
26 #include <dali-toolkit/dali-toolkit.h>
27 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
29 #include <dali/integration-api/events/hover-event-integ.h>
30 #include <dali/integration-api/events/key-event-integ.h>
31 #include <dali/integration-api/events/touch-event-integ.h>
32 #include <dali/integration-api/events/wheel-event-integ.h>
34 #include "dummy-control.h"
37 using namespace Dali::Toolkit;
39 void utc_dali_toolkit_control_impl_startup(void)
41 test_return_value = TET_UNDEF;
44 void utc_dali_toolkit_control_impl_cleanup(void)
46 test_return_value = TET_PASS;
49 int UtcDaliControlImplNew(void)
51 ToolkitTestApplication application; // Exceptions require ToolkitTestApplication
55 DALI_TEST_CHECK(!Control::DownCast(control));
57 control = Toolkit::Internal::Control::New();
59 DALI_TEST_CHECK(Control::DownCast(control));
63 int UtcDaliControlImplEnableGestureDetector(void)
65 ToolkitTestApplication application;
67 // Enable individually
69 DummyControl dummy = DummyControl::New();
70 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
72 DALI_TEST_CHECK(!dummyImpl.GetPinchGestureDetector());
73 dummyImpl.EnableGestureDetection(GestureType::PINCH);
74 DALI_TEST_CHECK(dummyImpl.GetPinchGestureDetector());
76 DALI_TEST_CHECK(!dummyImpl.GetPanGestureDetector());
77 dummyImpl.EnableGestureDetection(GestureType::PAN);
78 DALI_TEST_CHECK(dummyImpl.GetPanGestureDetector());
80 DALI_TEST_CHECK(!dummyImpl.GetTapGestureDetector());
81 dummyImpl.EnableGestureDetection(GestureType::TAP);
82 DALI_TEST_CHECK(dummyImpl.GetTapGestureDetector());
84 DALI_TEST_CHECK(!dummyImpl.GetLongPressGestureDetector());
85 dummyImpl.EnableGestureDetection(GestureType::LONG_PRESS);
86 DALI_TEST_CHECK(dummyImpl.GetLongPressGestureDetector());
91 DummyControl dummy = DummyControl::New();
92 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
94 DALI_TEST_CHECK(!dummyImpl.GetPinchGestureDetector());
95 DALI_TEST_CHECK(!dummyImpl.GetPanGestureDetector());
96 DALI_TEST_CHECK(!dummyImpl.GetTapGestureDetector());
97 DALI_TEST_CHECK(!dummyImpl.GetLongPressGestureDetector());
99 dummyImpl.EnableGestureDetection(GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS));
101 DALI_TEST_CHECK(dummyImpl.GetPinchGestureDetector());
102 DALI_TEST_CHECK(dummyImpl.GetPanGestureDetector());
103 DALI_TEST_CHECK(dummyImpl.GetTapGestureDetector());
104 DALI_TEST_CHECK(dummyImpl.GetLongPressGestureDetector());
106 // Enable when already enabled
108 dummyImpl.EnableGestureDetection(GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS));
110 DALI_TEST_CHECK(dummyImpl.GetPinchGestureDetector());
111 DALI_TEST_CHECK(dummyImpl.GetPanGestureDetector());
112 DALI_TEST_CHECK(dummyImpl.GetTapGestureDetector());
113 DALI_TEST_CHECK(dummyImpl.GetLongPressGestureDetector());
118 int UtcDaliControlImplDisableGestureDetector(void)
120 ToolkitTestApplication application;
122 // Disable individually
124 DummyControl dummy = DummyControl::New();
125 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
127 dummyImpl.EnableGestureDetection(GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS));
129 DALI_TEST_CHECK(dummyImpl.GetPinchGestureDetector());
130 dummyImpl.DisableGestureDetection(GestureType::PINCH);
131 DALI_TEST_CHECK(!dummyImpl.GetPinchGestureDetector());
133 DALI_TEST_CHECK(dummyImpl.GetPanGestureDetector());
134 dummyImpl.DisableGestureDetection(GestureType::PAN);
135 DALI_TEST_CHECK(!dummyImpl.GetPanGestureDetector());
137 DALI_TEST_CHECK(dummyImpl.GetTapGestureDetector());
138 dummyImpl.DisableGestureDetection(GestureType::TAP);
139 DALI_TEST_CHECK(!dummyImpl.GetTapGestureDetector());
141 DALI_TEST_CHECK(dummyImpl.GetLongPressGestureDetector());
142 dummyImpl.DisableGestureDetection(GestureType::LONG_PRESS);
143 DALI_TEST_CHECK(!dummyImpl.GetLongPressGestureDetector());
148 DummyControl dummy = DummyControl::New();
149 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
151 dummyImpl.EnableGestureDetection(GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS));
153 DALI_TEST_CHECK(dummyImpl.GetPinchGestureDetector());
154 DALI_TEST_CHECK(dummyImpl.GetPanGestureDetector());
155 DALI_TEST_CHECK(dummyImpl.GetTapGestureDetector());
156 DALI_TEST_CHECK(dummyImpl.GetLongPressGestureDetector());
158 dummyImpl.DisableGestureDetection(GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS));
160 DALI_TEST_CHECK(!dummyImpl.GetPinchGestureDetector());
161 DALI_TEST_CHECK(!dummyImpl.GetPanGestureDetector());
162 DALI_TEST_CHECK(!dummyImpl.GetTapGestureDetector());
163 DALI_TEST_CHECK(!dummyImpl.GetLongPressGestureDetector());
166 // Disable When not enabled
168 DummyControl dummy = DummyControl::New();
169 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
171 DALI_TEST_CHECK(!dummyImpl.GetPinchGestureDetector());
172 DALI_TEST_CHECK(!dummyImpl.GetPanGestureDetector());
173 DALI_TEST_CHECK(!dummyImpl.GetTapGestureDetector());
174 DALI_TEST_CHECK(!dummyImpl.GetLongPressGestureDetector());
176 dummyImpl.DisableGestureDetection(GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS));
178 DALI_TEST_CHECK(!dummyImpl.GetPinchGestureDetector());
179 DALI_TEST_CHECK(!dummyImpl.GetPanGestureDetector());
180 DALI_TEST_CHECK(!dummyImpl.GetTapGestureDetector());
181 DALI_TEST_CHECK(!dummyImpl.GetLongPressGestureDetector());
184 // Ensure control is detached if gesture detector is not deleted
186 DummyControl dummy = DummyControl::New();
187 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
189 dummyImpl.EnableGestureDetection(GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS));
191 PinchGestureDetector pinch = dummyImpl.GetPinchGestureDetector();
192 PanGestureDetector pan = dummyImpl.GetPanGestureDetector();
193 TapGestureDetector tap = dummyImpl.GetTapGestureDetector();
194 LongPressGestureDetector longPress = dummyImpl.GetLongPressGestureDetector();
196 DALI_TEST_EQUALS(0 == pinch.GetAttachedActorCount(), false, TEST_LOCATION);
197 DALI_TEST_EQUALS(0 == pan.GetAttachedActorCount(), false, TEST_LOCATION);
198 DALI_TEST_EQUALS(0 == tap.GetAttachedActorCount(), false, TEST_LOCATION);
199 DALI_TEST_EQUALS(0 == longPress.GetAttachedActorCount(), false, TEST_LOCATION);
201 dummyImpl.DisableGestureDetection(GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS));
203 DALI_TEST_EQUALS(0 == pinch.GetAttachedActorCount(), true, TEST_LOCATION);
204 DALI_TEST_EQUALS(0 == pan.GetAttachedActorCount(), true, TEST_LOCATION);
205 DALI_TEST_EQUALS(0 == tap.GetAttachedActorCount(), true, TEST_LOCATION);
206 DALI_TEST_EQUALS(0 == longPress.GetAttachedActorCount(), true, TEST_LOCATION);
211 int UtcDaliControlImplOnGestureMethods(void)
213 ToolkitTestApplication application;
215 // Check gesture actually happens
217 DummyControl dummy = DummyControl::New(true);
218 dummy.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
220 dummy.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
221 application.GetScene().Add(dummy);
223 // Render and notify a couple of times
224 application.SendNotification();
225 application.Render();
226 application.SendNotification();
227 application.Render();
229 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
230 dummyImpl.EnableGestureDetection(GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS));
232 DALI_TEST_CHECK(dummyImpl.pinchCalled == false);
234 TestGeneratePinch(application);
236 DALI_TEST_CHECK(dummyImpl.pinchCalled == true);
238 DALI_TEST_CHECK(dummyImpl.panCalled == false);
240 TestGenerateMiniPan(application);
242 DALI_TEST_CHECK(dummyImpl.panCalled == true);
244 DALI_TEST_CHECK(dummyImpl.tapCalled == false);
246 TestGenerateTap(application);
248 DALI_TEST_CHECK(dummyImpl.tapCalled == true);
250 DALI_TEST_CHECK(dummyImpl.longPressCalled == false);
252 TestGenerateLongPress(application);
254 DALI_TEST_CHECK(dummyImpl.longPressCalled == true);
256 application.GetScene().Remove(dummy);
262 int UtcDaliControlImplChildAddAndRemove(void)
264 ToolkitTestApplication application;
267 DummyControl dummy = DummyControl::New(true);
268 application.GetScene().Add(dummy);
269 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
271 application.Render();
272 application.SendNotification();
274 DALI_TEST_EQUALS(dummyImpl.childAddCalled, false, TEST_LOCATION);
275 DALI_TEST_EQUALS(dummy.GetChildCount(), 0u, TEST_LOCATION);
276 Actor actor = Actor::New();
278 DALI_TEST_EQUALS(dummyImpl.childAddCalled, true, TEST_LOCATION);
279 DALI_TEST_EQUALS(dummy.GetChildCount(), 1u, TEST_LOCATION);
281 application.Render();
282 application.SendNotification();
284 DALI_TEST_EQUALS(dummyImpl.childRemoveCalled, false, TEST_LOCATION);
286 DALI_TEST_EQUALS(dummyImpl.childRemoveCalled, true, TEST_LOCATION);
287 DALI_TEST_EQUALS(dummy.GetChildCount(), 0u, TEST_LOCATION);
289 application.Render();
290 application.SendNotification();
292 application.GetScene().Remove(dummy);
295 // Ensure full code coverage
297 DummyControl dummy = DummyControl::New();
298 application.GetScene().Add(dummy);
300 application.Render();
301 application.SendNotification();
303 DALI_TEST_EQUALS(dummy.GetChildCount(), 0u, TEST_LOCATION);
304 Actor actor = Actor::New();
306 DALI_TEST_EQUALS(dummy.GetChildCount(), 1u, TEST_LOCATION);
308 application.Render();
309 application.SendNotification();
312 DALI_TEST_EQUALS(dummy.GetChildCount(), 0u, TEST_LOCATION);
314 application.Render();
315 application.SendNotification();
317 application.GetScene().Remove(dummy);
322 int UtcDaliControlImplStageConnection(void)
324 ToolkitTestApplication application;
327 DummyControl dummy = DummyControl::New(true);
328 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
330 DALI_TEST_EQUALS(dummyImpl.stageConnectionCalled, false, TEST_LOCATION);
331 application.GetScene().Add(dummy);
332 application.Render();
333 application.SendNotification();
334 DALI_TEST_EQUALS(dummyImpl.stageConnectionCalled, true, TEST_LOCATION);
336 DALI_TEST_EQUALS(dummyImpl.stageDisconnectionCalled, false, TEST_LOCATION);
337 application.GetScene().Remove(dummy);
338 application.Render();
339 application.SendNotification();
340 DALI_TEST_EQUALS(dummyImpl.stageDisconnectionCalled, true, TEST_LOCATION);
343 // Ensure full code coverage
345 unsigned int stageChildren = application.GetScene().GetLayer(0).GetChildCount();
346 DummyControl dummy = DummyControl::New();
348 DALI_TEST_EQUALS(application.GetScene().GetLayer(0).GetChildCount(), stageChildren, TEST_LOCATION);
349 application.GetScene().Add(dummy);
350 application.Render();
351 application.SendNotification();
352 DALI_TEST_EQUALS(application.GetScene().GetLayer(0).GetChildCount(), stageChildren + 1, TEST_LOCATION);
354 application.GetScene().Remove(dummy);
355 application.Render();
356 application.SendNotification();
357 DALI_TEST_EQUALS(application.GetScene().GetLayer(0).GetChildCount(), stageChildren, TEST_LOCATION);
362 int UtcDaliControlImplSizeSetP(void)
364 ToolkitTestApplication application;
367 DummyControl dummy = DummyControl::New(true);
368 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
370 application.GetScene().Add(dummy);
371 application.Render();
372 application.SendNotification();
374 DALI_TEST_EQUALS(dummyImpl.sizeSetCalled, false, TEST_LOCATION); // Size not set, no onSizeSet called
375 Vector2 size(100.0f, 200.0f);
376 dummy.SetProperty(Actor::Property::SIZE, size);
378 DALI_TEST_EQUALS(dummyImpl.sizeSetCalled, false, TEST_LOCATION); // Size is going to get negotiated, no onSizeSet called
380 application.SendNotification();
381 application.Render();
383 DALI_TEST_EQUALS(size, dummy.GetCurrentProperty<Vector3>(Actor::Property::SIZE).GetVectorXY(), TEST_LOCATION);
384 DALI_TEST_EQUALS(dummyImpl.sizeSetCalled, true, TEST_LOCATION);
386 application.GetScene().Remove(dummy);
392 int UtcDaliControlImplSizeSet2P(void)
394 ToolkitTestApplication application;
397 DummyControl dummy = DummyControl::New();
398 application.GetScene().Add(dummy);
400 Vector2 size(100.0f, 200.0f);
401 DALI_TEST_CHECK(size != dummy.GetCurrentProperty<Vector3>(Actor::Property::SIZE).GetVectorXY());
403 application.SendNotification();
404 application.Render();
406 dummy.SetProperty(Actor::Property::SIZE, size);
408 application.SendNotification();
409 application.Render();
411 DALI_TEST_EQUALS(size, dummy.GetCurrentProperty<Vector3>(Actor::Property::SIZE).GetVectorXY(), TEST_LOCATION);
413 application.GetScene().Remove(dummy);
418 int UtcDaliControlImplSizeAnimation(void)
420 ToolkitTestApplication application;
423 DummyControl dummy = DummyControl::New(true);
424 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
426 application.GetScene().Add(dummy);
428 DALI_TEST_EQUALS(dummyImpl.sizeAnimationCalled, false, TEST_LOCATION);
429 Animation animation = Animation::New(1.0f);
430 animation.AnimateTo(Property(dummy, Actor::Property::SIZE), Vector3(100.0f, 150.0f, 200.0f));
433 application.Render();
434 application.SendNotification();
435 application.Render();
436 application.SendNotification();
438 DALI_TEST_EQUALS(dummyImpl.sizeAnimationCalled, true, TEST_LOCATION);
440 application.GetScene().Remove(dummy);
443 // Ensure full code coverage
445 DummyControl dummy = DummyControl::New();
447 application.GetScene().Add(dummy);
449 Animation animation = Animation::New(1.0f);
450 animation.AnimateTo(Property(dummy, Actor::Property::SIZE), Vector3(100.0f, 150.0f, 200.0f));
453 application.Render();
454 application.SendNotification();
455 application.Render();
456 application.SendNotification();
458 application.GetScene().Remove(dummy);
463 ///////////////////////////////////////////////////////////////////////////////////////////////////
465 int UtcDaliControlImplKeyEvent(void)
467 ToolkitTestApplication application;
470 DummyControl dummy = DummyControl::New(true);
471 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
473 application.GetScene().Add(dummy);
474 dummy.SetKeyInputFocus();
476 application.Render();
477 application.SendNotification();
478 application.Render();
479 application.SendNotification();
481 DALI_TEST_EQUALS(dummyImpl.keyEventCalled, false, TEST_LOCATION);
482 Integration::KeyEvent keyEvent;
483 application.ProcessEvent(keyEvent);
484 DALI_TEST_EQUALS(dummyImpl.keyEventCalled, true, TEST_LOCATION);
486 application.GetScene().Remove(dummy);
489 // Ensure full code coverage
491 DummyControl dummy = DummyControl::New();
493 application.GetScene().Add(dummy);
494 dummy.SetKeyInputFocus();
496 application.Render();
497 application.SendNotification();
498 application.Render();
499 application.SendNotification();
501 Integration::KeyEvent keyEvent;
502 application.ProcessEvent(keyEvent);
504 application.GetScene().Remove(dummy);
509 int UtcDaliControlImplKeyInputFocusGained(void)
511 ToolkitTestApplication application;
514 DummyControl dummy = DummyControl::New(true);
515 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
517 application.GetScene().Add(dummy);
519 DALI_TEST_EQUALS(dummyImpl.keyInputFocusGained, false, TEST_LOCATION);
521 dummy.SetKeyInputFocus();
523 DALI_TEST_EQUALS(dummyImpl.keyInputFocusGained, true, TEST_LOCATION);
525 application.GetScene().Remove(dummy);
528 // Ensure full code coverage
530 DummyControl dummy = DummyControl::New();
532 application.GetScene().Add(dummy);
533 dummy.SetKeyInputFocus();
534 application.GetScene().Remove(dummy);
539 int UtcDaliControlImplKeyInputFocusLost(void)
541 ToolkitTestApplication application;
544 DummyControl dummy = DummyControl::New(true);
545 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
547 application.GetScene().Add(dummy);
549 DALI_TEST_EQUALS(dummyImpl.keyInputFocusLost, false, TEST_LOCATION);
551 dummy.SetKeyInputFocus();
552 dummy.ClearKeyInputFocus();
554 DALI_TEST_EQUALS(dummyImpl.keyInputFocusLost, true, TEST_LOCATION);
556 application.GetScene().Remove(dummy);
559 // Ensure full code coverage
561 DummyControl dummy = DummyControl::New();
563 application.GetScene().Add(dummy);
564 dummy.SetKeyInputFocus();
565 dummy.ClearKeyInputFocus();
567 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
569 dummyImpl.IsKeyboardNavigationSupported();
570 dummyImpl.IsKeyboardFocusGroup();
572 application.GetScene().Remove(dummy);
577 int UtcDaliControlImplTypeRegistry(void)
579 ToolkitTestApplication application;
583 type = TypeRegistry::Get().GetTypeInfo("Control");
584 DALI_TEST_CHECK(type);
585 BaseHandle handle = type.CreateInstance();
586 DALI_TEST_CHECK(handle);
588 // Check if it's a control
589 DALI_TEST_CHECK(Control::DownCast(handle));
593 ///////////////////////////////////////////////////////////////////////////////////////////////////
595 int UtcDaliControlImplSetStyleName(void)
597 ToolkitTestApplication application;
600 DummyControl dummy = DummyControl::New(true);
602 dummy.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
603 dummy.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
604 application.GetScene().Add(dummy);
606 dummy.SetStyleName("TestStyle");
608 DALI_TEST_CHECK(dummy.GetStyleName() == "TestStyle");
610 application.GetScene().Remove(dummy);
615 int UtcDaliControlImplOnStyleChangeN(void)
617 ToolkitTestApplication application;
618 Control dummy = Control::New();
619 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation(dummy);
621 // test that style manager is being used, passing an empty handle does nothing but does not crash either
622 Dali::Toolkit::StyleManager styleManager;
623 controlImpl.OnStyleChange(styleManager, StyleChange::THEME_CHANGE);
624 // no crash so test passes
625 tet_result(TET_PASS);
630 int UtcDaliControlImplOnAccessibilityPanP(void)
632 ToolkitTestApplication application;
633 Control dummy = Control::New();
634 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation(dummy);
637 DALI_TEST_EQUALS(false, controlImpl.OnAccessibilityPan(pan), TEST_LOCATION);
642 int UtcDaliControlImplOnAccessibilityActivatedP(void)
644 ToolkitTestApplication application;
646 Control dummy = Control::New();
647 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation(dummy);
648 DALI_TEST_EQUALS(false, controlImpl.OnAccessibilityActivated(), TEST_LOCATION);
650 // Invoke the control's activate action
651 TypeInfo type = TypeRegistry::Get().GetTypeInfo("Control");
652 DALI_TEST_CHECK(type);
654 BaseHandle handle = type.CreateInstance();
655 DALI_TEST_CHECK(handle);
657 Property::Map attributes;
658 DALI_TEST_EQUALS(false, handle.DoAction("accessibilityActivated", attributes), TEST_LOCATION);
663 int UtcDaliControlImplGetNextKeyboardFocusableActorP(void)
665 ToolkitTestApplication application;
666 Control dummy = Control::New();
667 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation(dummy);
669 Actor currentFocusedActor;
670 Actor result = controlImpl.GetNextKeyboardFocusableActor(currentFocusedActor, Control::KeyboardFocus::LEFT, false);
672 DALI_TEST_EQUALS(result, currentFocusedActor, TEST_LOCATION);
677 int UtcDaliControlImplRegisterThenReRegisterVisual(void)
679 ToolkitTestApplication application;
681 DummyControl dummy = DummyControl::New();
682 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
684 Property::Index index = 1;
686 DALI_TEST_CHECK(!dummyImpl.GetVisual(index));
688 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
689 Toolkit::Visual::Base visual;
692 map[Visual::Property::TYPE] = Visual::COLOR;
693 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
695 visual = visualFactory.CreateVisual(map);
696 DALI_TEST_CHECK(visual);
698 // Register index with a color visual
699 dummyImpl.RegisterVisual(index, visual);
701 DALI_TEST_CHECK(dummyImpl.GetVisual(index) == visual);
703 Property::Map newMap;
704 newMap[Visual::Property::TYPE] = Visual::COLOR;
705 newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
707 visual = visualFactory.CreateVisual(newMap);
708 DALI_TEST_CHECK(visual);
710 // ReRegister with altered color visual
711 dummyImpl.RegisterVisual(index, visual);
713 DALI_TEST_CHECK(dummyImpl.GetVisual(index) == visual);
715 tet_result(TET_PASS);
720 int UtcDaliControlImplRegisterVisaulThenReRegisterToSelf(void)
722 ToolkitTestApplication application;
724 DummyControl dummy = DummyControl::New();
725 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
727 Property::Index index = 1;
729 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
730 Toolkit::Visual::Base visual;
733 map[Visual::Property::TYPE] = Visual::COLOR;
734 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
736 visual = visualFactory.CreateVisual(map);
737 DALI_TEST_CHECK(visual);
739 // Register index with a color visual
740 dummyImpl.RegisterVisual(index, visual);
742 DALI_TEST_CHECK(dummyImpl.GetVisual(index) == visual);
744 // ReRegister to self
745 dummyImpl.RegisterVisual(index, visual);
747 DALI_TEST_CHECK(dummyImpl.GetVisual(index) == visual);
752 int UtcDaliControlImplRegisterVisualToSelf(void)
754 ToolkitTestApplication application;
756 Test::ObjectDestructionTracker objectDestructionTracker(application.GetCore().GetObjectRegistry());
759 DummyControl dummy = DummyControl::New();
760 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
761 objectDestructionTracker.Start(dummy);
763 Property::Index index = 1;
765 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
766 Toolkit::Visual::Base visual;
769 map[Visual::Property::TYPE] = Visual::COLOR;
770 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
772 visual = visualFactory.CreateVisual(map);
773 DALI_TEST_CHECK(visual);
776 dummyImpl.RegisterVisual(index, visual);
778 DALI_TEST_EQUALS(objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION); // Control not destroyed yet
779 DALI_TEST_CHECK(dummyImpl.GetVisual(index) == visual);
782 DALI_TEST_EQUALS(objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION); // Should be destroyed
787 int UtcDaliControlImplRegisterTwoVisuals(void)
789 ToolkitTestApplication application;
791 DummyControl dummy = DummyControl::New();
792 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
794 Property::Index index = 1;
795 Property::Index index2 = 2;
797 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
798 Toolkit::Visual::Base visual;
799 Toolkit::Visual::Base secondVisual;
802 map[Visual::Property::TYPE] = Visual::COLOR;
803 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
805 visual = visualFactory.CreateVisual(map);
806 DALI_TEST_CHECK(visual);
808 // Register index with a color visual
809 dummyImpl.RegisterVisual(index, visual);
811 Property::Map newMap;
812 newMap[Visual::Property::TYPE] = Visual::COLOR;
813 newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
815 secondVisual = visualFactory.CreateVisual(newMap);
816 DALI_TEST_CHECK(secondVisual);
818 // ReRegister with altered color visual
819 dummyImpl.RegisterVisual(index2, secondVisual);
821 DALI_TEST_CHECK(dummyImpl.GetVisual(index) == visual);
822 DALI_TEST_CHECK(dummyImpl.GetVisual(index2) == secondVisual);
827 int UtcDaliControlImplRegisterUnregisterVisual(void)
829 ToolkitTestApplication application;
831 DummyControl dummy = DummyControl::New();
832 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
834 Property::Index index = 1;
836 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
837 Toolkit::Visual::Base visual;
840 map[Visual::Property::TYPE] = Visual::COLOR;
841 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
843 visual = visualFactory.CreateVisual(map);
844 DALI_TEST_CHECK(visual);
846 // Register index with a color visual
847 dummyImpl.RegisterVisual(index, visual);
849 tet_infoline("Add control with visual to stage and check renderer count is 1");
850 application.GetScene().Add(dummy);
851 application.SendNotification();
852 application.Render();
854 DALI_TEST_CHECK(dummyImpl.GetVisual(index) == visual);
855 DALI_TEST_EQUALS(dummy.GetRendererCount(), 1, TEST_LOCATION);
858 dummyImpl.UnregisterVisual(index);
860 tet_infoline("Remove control with visual from stage and check renderer count is 0");
861 application.GetScene().Remove(dummy);
862 application.SendNotification();
863 application.Render();
865 DALI_TEST_EQUALS(dummy.GetRendererCount(), 0, TEST_LOCATION);
866 DALI_TEST_CHECK(!dummyImpl.GetVisual(index));
871 int UtcDaliControlImplRegisterDisabledVisual(void)
873 ToolkitTestApplication application;
875 DummyControl dummy = DummyControl::New();
876 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
878 Property::Index TEST_PROPERTY = 1;
880 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
881 Toolkit::Visual::Base visual;
884 map[Visual::Property::TYPE] = Visual::COLOR;
885 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
887 visual = visualFactory.CreateVisual(map);
888 DALI_TEST_CHECK(visual);
890 // Register index with a color visual
891 dummyImpl.RegisterVisual(TEST_PROPERTY, visual, false);
893 DALI_TEST_CHECK(dummyImpl.GetVisual(TEST_PROPERTY) == visual);
894 DALI_TEST_CHECK(dummyImpl.IsVisualEnabled(TEST_PROPERTY) == false);
896 application.GetScene().Add(dummy);
899 application.SendNotification();
900 application.Render();
902 DALI_TEST_CHECK(dummyImpl.IsVisualEnabled(TEST_PROPERTY) == false);
904 DALI_TEST_CHECK(dummy.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE) == true);
906 dummyImpl.EnableVisual(TEST_PROPERTY, true);
908 DALI_TEST_CHECK(dummyImpl.IsVisualEnabled(TEST_PROPERTY) == true);
913 int UtcDaliControlImplDisableRegisteredVisual(void)
915 ToolkitTestApplication application;
917 DummyControl dummy = DummyControl::New();
918 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
920 Property::Index TEST_PROPERTY = 1;
922 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
923 Toolkit::Visual::Base visual;
926 map[Visual::Property::TYPE] = Visual::COLOR;
927 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
929 visual = visualFactory.CreateVisual(map);
930 DALI_TEST_CHECK(visual);
932 // Register index with a color visual
933 dummyImpl.RegisterVisual(TEST_PROPERTY, visual);
935 application.GetScene().Add(dummy);
938 application.SendNotification();
939 application.Render();
941 DALI_TEST_CHECK(dummyImpl.IsVisualEnabled(TEST_PROPERTY) == true);
943 DALI_TEST_CHECK(dummy.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE) == true);
945 dummyImpl.EnableVisual(TEST_PROPERTY, false);
947 DALI_TEST_CHECK(dummyImpl.IsVisualEnabled(TEST_PROPERTY) == false);
952 int UtcDaliControlImplEnabledVisualParentRemovedFromStage(void)
954 // Visual enabled but then parent removed from stage, test ensures visual/renderer are also removed from stage.
955 // Then adding parent back to stage should automatically put visual/renderer back
957 ToolkitTestApplication application;
959 DummyControl dummy = DummyControl::New();
960 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
962 Property::Index TEST_PROPERTY = 1;
964 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
965 Toolkit::Visual::Base visual;
968 map[Visual::Property::TYPE] = Visual::COLOR;
969 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
971 visual = visualFactory.CreateVisual(map);
972 DALI_TEST_CHECK(visual);
974 // Register index with a color visual
975 dummyImpl.RegisterVisual(TEST_PROPERTY, visual, false);
977 application.GetScene().Add(dummy);
979 application.SendNotification();
980 application.Render();
982 DALI_TEST_CHECK(dummyImpl.IsVisualEnabled(TEST_PROPERTY) == false);
983 DALI_TEST_CHECK(dummy.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE) == true);
984 dummyImpl.EnableVisual(TEST_PROPERTY, true);
987 application.SendNotification();
988 application.Render();
989 DALI_TEST_CHECK(dummy.GetRendererCount() == 1u);
991 // Remove control from stage, visual should be removed from stage too
992 application.GetScene().Remove(dummy);
994 application.SendNotification();
995 application.Render();
996 DALI_TEST_CHECK(dummy.GetRendererCount() == 0u);
998 application.GetScene().Add(dummy);
1000 application.SendNotification();
1001 application.Render();
1002 DALI_TEST_CHECK(dummy.GetRendererCount() == 1u);
1004 DALI_TEST_CHECK(dummyImpl.IsVisualEnabled(TEST_PROPERTY) == true);
1009 int UtcDaliControlImplRegisterTwoVisualsAndEnableOnlyOne(void)
1011 // Register 2 visuals and enable by default
1013 // Remove control from stage then put it back
1014 // Check that only 1 visual/renderer is staged.
1016 ToolkitTestApplication application;
1018 DummyControl dummy = DummyControl::New();
1019 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1021 Property::Index TEST_PROPERTY1 = 1;
1022 Property::Index TEST_PROPERTY2 = 2;
1024 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1025 Toolkit::Visual::Base visual1;
1026 Toolkit::Visual::Base visual2;
1029 map[Visual::Property::TYPE] = Visual::COLOR;
1030 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1033 map[Visual::Property::TYPE] = Visual::COLOR;
1034 map[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
1036 visual1 = visualFactory.CreateVisual(map);
1037 DALI_TEST_CHECK(visual1);
1039 visual2 = visualFactory.CreateVisual(map);
1040 DALI_TEST_CHECK(visual2);
1042 // Register index with a color visual
1043 dummyImpl.RegisterVisual(TEST_PROPERTY1, visual1);
1044 // Register second index with a color visual
1045 dummyImpl.RegisterVisual(TEST_PROPERTY2, visual2);
1047 application.GetScene().Add(dummy);
1048 // Render and notify
1049 application.SendNotification();
1050 application.Render();
1052 DALI_TEST_CHECK(dummy.GetRendererCount() == 2u);
1053 DALI_TEST_CHECK(dummyImpl.IsVisualEnabled(TEST_PROPERTY1) == true);
1054 DALI_TEST_CHECK(dummyImpl.IsVisualEnabled(TEST_PROPERTY1) == true);
1055 DALI_TEST_CHECK(dummy.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE) == true);
1056 dummyImpl.EnableVisual(TEST_PROPERTY2, false);
1058 // Render and notify
1059 application.SendNotification();
1060 application.Render();
1061 DALI_TEST_CHECK(dummy.GetRendererCount() == 1u);
1063 // Remove control from stage, visual should be removed from stage too
1064 application.GetScene().Remove(dummy);
1065 // Render and notify
1066 application.SendNotification();
1067 application.Render();
1068 DALI_TEST_CHECK(dummy.GetRendererCount() == 0u);
1070 application.GetScene().Add(dummy);
1071 // Render and notify
1072 application.SendNotification();
1073 application.Render();
1074 DALI_TEST_CHECK(dummy.GetRendererCount() == 1u);
1076 DALI_TEST_CHECK(dummyImpl.IsVisualEnabled(TEST_PROPERTY1) == true);
1077 DALI_TEST_CHECK(dummyImpl.IsVisualEnabled(TEST_PROPERTY2) == false);
1081 int UtcDaliControlImplAutoClippingWithVisuals(void)
1083 ToolkitTestApplication application;
1085 tet_infoline("Test to ensure a renderer does NOT get added when we've already registered a visual which we haven't enabled");
1087 DummyControl control = DummyControl::New();
1088 DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>(control.GetImplementation());
1090 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1091 Toolkit::Visual::Base visual;
1093 map[Visual::Property::TYPE] = Visual::COLOR;
1094 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1095 visual = visualFactory.CreateVisual(map);
1096 DALI_TEST_CHECK(visual);
1097 controlImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual, false);
1099 DALI_TEST_EQUALS(0, control.GetRendererCount(), TEST_LOCATION);
1101 control.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN);
1103 application.GetScene().Add(control);
1105 application.SendNotification();
1106 application.Render();
1108 DALI_TEST_EQUALS(0, control.GetRendererCount(), TEST_LOCATION);
1113 int UtcDaliControlImplAutoClippingWithVisualsAlreadyOnStage(void)
1115 ToolkitTestApplication application;
1117 tet_infoline("Test to ensure a renderer does NOT get added when we've already registered a visual which we haven't enabled and we're already on the stage");
1119 DummyControl control = DummyControl::New();
1120 DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>(control.GetImplementation());
1122 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1123 Toolkit::Visual::Base visual;
1125 map[Visual::Property::TYPE] = Visual::COLOR;
1126 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1127 visual = visualFactory.CreateVisual(map);
1128 DALI_TEST_CHECK(visual);
1129 controlImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual, false);
1131 DALI_TEST_EQUALS(0, control.GetRendererCount(), TEST_LOCATION);
1133 application.GetScene().Add(control);
1135 application.SendNotification();
1136 application.Render();
1138 control.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN);
1140 application.SendNotification();
1141 application.Render();
1143 DALI_TEST_EQUALS(0, control.GetRendererCount(), TEST_LOCATION);
1148 int UtcDaliControlImplOnPinch(void)
1150 ToolkitTestApplication application;
1152 Control control = Control::New();
1153 control.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
1154 control.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
1155 application.GetScene().Add(control);
1157 application.SendNotification();
1158 application.Render();
1160 Toolkit::Internal::Control& impl = Toolkit::Internal::GetImplementation(control);
1161 impl.EnableGestureDetection(GestureType::PINCH);
1163 // Scale becomes 0.6666666
1164 TestStartPinch(application, Vector2(5.0f, 20.0f), Vector2(35.0f, 20.0f), Vector2(10.0f, 20.0f), Vector2(30.0f, 20.0f), 100);
1166 DALI_TEST_EQUALS(0.666f, control.GetProperty(Actor::Property::SCALE_X).Get<float>(), 0.01f, TEST_LOCATION);