2 * Copyright (c) 2020 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"
27 #include <dali-toolkit/dali-toolkit.h>
28 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
29 #include <dali/integration-api/events/key-event-integ.h>
30 #include <dali/integration-api/events/wheel-event-integ.h>
31 #include <dali/integration-api/events/touch-event-integ.h>
32 #include <dali/integration-api/events/hover-event-integ.h>
35 #include "dummy-control.h"
38 using namespace Dali::Toolkit;
40 void utc_dali_toolkit_control_impl_startup(void)
42 test_return_value = TET_UNDEF;
45 void utc_dali_toolkit_control_impl_cleanup(void)
47 test_return_value = TET_PASS;
50 int UtcDaliControlImplNew(void)
52 ToolkitTestApplication application; // Exceptions require ToolkitTestApplication
56 DALI_TEST_CHECK( !Control::DownCast(control) );
58 control = Toolkit::Internal::Control::New();
60 DALI_TEST_CHECK( Control::DownCast(control) );
65 int UtcDaliControlImplEnableGestureDetector(void)
67 ToolkitTestApplication application;
69 // Enable individually
71 DummyControl dummy = DummyControl::New();
72 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
74 DALI_TEST_CHECK( !dummyImpl.GetPinchGestureDetector() );
75 dummyImpl.EnableGestureDetection(GestureType::PINCH);
76 DALI_TEST_CHECK( dummyImpl.GetPinchGestureDetector() );
78 DALI_TEST_CHECK( !dummyImpl.GetPanGestureDetector() );
79 dummyImpl.EnableGestureDetection(GestureType::PAN);
80 DALI_TEST_CHECK( dummyImpl.GetPanGestureDetector() );
82 DALI_TEST_CHECK( !dummyImpl.GetTapGestureDetector() );
83 dummyImpl.EnableGestureDetection(GestureType::TAP);
84 DALI_TEST_CHECK( dummyImpl.GetTapGestureDetector() );
86 DALI_TEST_CHECK( !dummyImpl.GetLongPressGestureDetector() );
87 dummyImpl.EnableGestureDetection(GestureType::LONG_PRESS);
88 DALI_TEST_CHECK( dummyImpl.GetLongPressGestureDetector() );
93 DummyControl dummy = DummyControl::New();
94 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
96 DALI_TEST_CHECK( !dummyImpl.GetPinchGestureDetector() );
97 DALI_TEST_CHECK( !dummyImpl.GetPanGestureDetector() );
98 DALI_TEST_CHECK( !dummyImpl.GetTapGestureDetector() );
99 DALI_TEST_CHECK( !dummyImpl.GetLongPressGestureDetector() );
101 dummyImpl.EnableGestureDetection( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
103 DALI_TEST_CHECK( dummyImpl.GetPinchGestureDetector() );
104 DALI_TEST_CHECK( dummyImpl.GetPanGestureDetector() );
105 DALI_TEST_CHECK( dummyImpl.GetTapGestureDetector() );
106 DALI_TEST_CHECK( dummyImpl.GetLongPressGestureDetector() );
108 // Enable when already enabled
110 dummyImpl.EnableGestureDetection( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
112 DALI_TEST_CHECK( dummyImpl.GetPinchGestureDetector() );
113 DALI_TEST_CHECK( dummyImpl.GetPanGestureDetector() );
114 DALI_TEST_CHECK( dummyImpl.GetTapGestureDetector() );
115 DALI_TEST_CHECK( dummyImpl.GetLongPressGestureDetector() );
120 int UtcDaliControlImplDisableGestureDetector(void)
122 ToolkitTestApplication application;
124 // Disable individually
126 DummyControl dummy = DummyControl::New();
127 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
129 dummyImpl.EnableGestureDetection( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
131 DALI_TEST_CHECK( dummyImpl.GetPinchGestureDetector() );
132 dummyImpl.DisableGestureDetection(GestureType::PINCH);
133 DALI_TEST_CHECK( !dummyImpl.GetPinchGestureDetector() );
135 DALI_TEST_CHECK( dummyImpl.GetPanGestureDetector() );
136 dummyImpl.DisableGestureDetection(GestureType::PAN);
137 DALI_TEST_CHECK( !dummyImpl.GetPanGestureDetector() );
139 DALI_TEST_CHECK( dummyImpl.GetTapGestureDetector() );
140 dummyImpl.DisableGestureDetection(GestureType::TAP);
141 DALI_TEST_CHECK( !dummyImpl.GetTapGestureDetector() );
143 DALI_TEST_CHECK( dummyImpl.GetLongPressGestureDetector() );
144 dummyImpl.DisableGestureDetection(GestureType::LONG_PRESS);
145 DALI_TEST_CHECK( !dummyImpl.GetLongPressGestureDetector() );
150 DummyControl dummy = DummyControl::New();
151 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
153 dummyImpl.EnableGestureDetection( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
155 DALI_TEST_CHECK( dummyImpl.GetPinchGestureDetector() );
156 DALI_TEST_CHECK( dummyImpl.GetPanGestureDetector() );
157 DALI_TEST_CHECK( dummyImpl.GetTapGestureDetector() );
158 DALI_TEST_CHECK( dummyImpl.GetLongPressGestureDetector() );
160 dummyImpl.DisableGestureDetection( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
162 DALI_TEST_CHECK( !dummyImpl.GetPinchGestureDetector() );
163 DALI_TEST_CHECK( !dummyImpl.GetPanGestureDetector() );
164 DALI_TEST_CHECK( !dummyImpl.GetTapGestureDetector() );
165 DALI_TEST_CHECK( !dummyImpl.GetLongPressGestureDetector() );
168 // Disable When not enabled
170 DummyControl dummy = DummyControl::New();
171 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
173 DALI_TEST_CHECK( !dummyImpl.GetPinchGestureDetector() );
174 DALI_TEST_CHECK( !dummyImpl.GetPanGestureDetector() );
175 DALI_TEST_CHECK( !dummyImpl.GetTapGestureDetector() );
176 DALI_TEST_CHECK( !dummyImpl.GetLongPressGestureDetector() );
178 dummyImpl.DisableGestureDetection( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
180 DALI_TEST_CHECK( !dummyImpl.GetPinchGestureDetector() );
181 DALI_TEST_CHECK( !dummyImpl.GetPanGestureDetector() );
182 DALI_TEST_CHECK( !dummyImpl.GetTapGestureDetector() );
183 DALI_TEST_CHECK( !dummyImpl.GetLongPressGestureDetector() );
186 // Ensure control is detached if gesture detector is not deleted
188 DummyControl dummy = DummyControl::New();
189 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
191 dummyImpl.EnableGestureDetection( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
193 PinchGestureDetector pinch = dummyImpl.GetPinchGestureDetector();
194 PanGestureDetector pan = dummyImpl.GetPanGestureDetector();
195 TapGestureDetector tap = dummyImpl.GetTapGestureDetector();
196 LongPressGestureDetector longPress = dummyImpl.GetLongPressGestureDetector();
198 DALI_TEST_EQUALS( 0 == pinch.GetAttachedActorCount(), false, TEST_LOCATION );
199 DALI_TEST_EQUALS( 0 == pan.GetAttachedActorCount(), false, TEST_LOCATION );
200 DALI_TEST_EQUALS( 0 == tap.GetAttachedActorCount(), false, TEST_LOCATION );
201 DALI_TEST_EQUALS( 0 == longPress.GetAttachedActorCount(), false, TEST_LOCATION );
203 dummyImpl.DisableGestureDetection( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
205 DALI_TEST_EQUALS( 0 == pinch.GetAttachedActorCount(), true, TEST_LOCATION );
206 DALI_TEST_EQUALS( 0 == pan.GetAttachedActorCount(), true, TEST_LOCATION );
207 DALI_TEST_EQUALS( 0 == tap.GetAttachedActorCount(), true, TEST_LOCATION );
208 DALI_TEST_EQUALS( 0 == longPress.GetAttachedActorCount(), true, TEST_LOCATION );
213 int UtcDaliControlImplOnGestureMethods(void)
215 ToolkitTestApplication application;
217 // Check gesture actually happens
219 DummyControl dummy = DummyControl::New(true);
220 dummy.SetProperty( Actor::Property::SIZE, Vector2(100.0f, 100.0f ) );
222 dummy.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::TOP_LEFT);
223 application.GetScene().Add(dummy);
225 // Render and notify a couple of times
226 application.SendNotification();
227 application.Render();
228 application.SendNotification();
229 application.Render();
231 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
232 dummyImpl.EnableGestureDetection( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
234 DALI_TEST_CHECK( dummyImpl.pinchCalled == false );
236 TestGeneratePinch(application);
238 DALI_TEST_CHECK( dummyImpl.pinchCalled == true );
240 DALI_TEST_CHECK( dummyImpl.panCalled == false );
242 TestGenerateMiniPan(application);
244 DALI_TEST_CHECK( dummyImpl.panCalled == true );
246 DALI_TEST_CHECK( dummyImpl.tapCalled == false );
248 TestGenerateTap(application);
250 DALI_TEST_CHECK( dummyImpl.tapCalled == true );
252 DALI_TEST_CHECK( dummyImpl.longPressCalled == false );
254 TestGenerateLongPress(application);
256 DALI_TEST_CHECK( dummyImpl.longPressCalled == true );
258 application.GetScene().Remove(dummy);
264 int UtcDaliControlImplChildAddAndRemove(void)
266 ToolkitTestApplication application;
269 DummyControl dummy = DummyControl::New( true );
270 application.GetScene().Add(dummy);
271 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
273 application.Render();
274 application.SendNotification();
276 DALI_TEST_EQUALS( dummyImpl.childAddCalled, false, TEST_LOCATION );
277 DALI_TEST_EQUALS( dummy.GetChildCount(), 0u, TEST_LOCATION );
278 Actor actor = Actor::New();
280 DALI_TEST_EQUALS( dummyImpl.childAddCalled, true, TEST_LOCATION );
281 DALI_TEST_EQUALS( dummy.GetChildCount(), 1u, TEST_LOCATION );
283 application.Render();
284 application.SendNotification();
286 DALI_TEST_EQUALS( dummyImpl.childRemoveCalled, false, TEST_LOCATION );
287 dummy.Remove( actor );
288 DALI_TEST_EQUALS( dummyImpl.childRemoveCalled, true, TEST_LOCATION );
289 DALI_TEST_EQUALS( dummy.GetChildCount(), 0u, TEST_LOCATION );
291 application.Render();
292 application.SendNotification();
294 application.GetScene().Remove(dummy);
297 // Ensure full code coverage
299 DummyControl dummy = DummyControl::New();
300 application.GetScene().Add(dummy);
302 application.Render();
303 application.SendNotification();
305 DALI_TEST_EQUALS( dummy.GetChildCount(), 0u, TEST_LOCATION );
306 Actor actor = Actor::New();
308 DALI_TEST_EQUALS( dummy.GetChildCount(), 1u, TEST_LOCATION );
310 application.Render();
311 application.SendNotification();
313 dummy.Remove( actor );
314 DALI_TEST_EQUALS( dummy.GetChildCount(), 0u, TEST_LOCATION );
316 application.Render();
317 application.SendNotification();
319 application.GetScene().Remove(dummy);
324 int UtcDaliControlImplStageConnection(void)
326 ToolkitTestApplication application;
329 DummyControl dummy = DummyControl::New( true );
330 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
332 DALI_TEST_EQUALS( dummyImpl.stageConnectionCalled, false, TEST_LOCATION );
333 application.GetScene().Add(dummy);
334 application.Render();
335 application.SendNotification();
336 DALI_TEST_EQUALS( dummyImpl.stageConnectionCalled, true, TEST_LOCATION );
338 DALI_TEST_EQUALS( dummyImpl.stageDisconnectionCalled, false, TEST_LOCATION );
339 application.GetScene().Remove(dummy);
340 application.Render();
341 application.SendNotification();
342 DALI_TEST_EQUALS( dummyImpl.stageDisconnectionCalled, true, TEST_LOCATION );
345 // Ensure full code coverage
347 unsigned int stageChildren = application.GetScene().GetLayer(0).GetChildCount();
348 DummyControl dummy = DummyControl::New();
350 DALI_TEST_EQUALS( application.GetScene().GetLayer(0).GetChildCount(), stageChildren, TEST_LOCATION );
351 application.GetScene().Add(dummy);
352 application.Render();
353 application.SendNotification();
354 DALI_TEST_EQUALS( application.GetScene().GetLayer(0).GetChildCount(), stageChildren + 1, TEST_LOCATION );
356 application.GetScene().Remove(dummy);
357 application.Render();
358 application.SendNotification();
359 DALI_TEST_EQUALS( application.GetScene().GetLayer(0).GetChildCount(), stageChildren, TEST_LOCATION );
364 int UtcDaliControlImplSizeSetP(void)
366 ToolkitTestApplication application;
369 DummyControl dummy = DummyControl::New( true );
370 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
372 application.GetScene().Add(dummy);
373 application.Render();
374 application.SendNotification();
376 DALI_TEST_EQUALS( dummyImpl.sizeSetCalled, false, TEST_LOCATION ); // Size not set, no onSizeSet called
377 Vector2 size(100.0f, 200.0f);
378 dummy.SetProperty( Actor::Property::SIZE, size );
380 DALI_TEST_EQUALS( dummyImpl.sizeSetCalled, false, TEST_LOCATION ); // Size is going to get negotiated, no onSizeSet called
382 application.SendNotification();
383 application.Render();
385 DALI_TEST_EQUALS( size, dummy.GetCurrentProperty< Vector3 >( Actor::Property::SIZE ).GetVectorXY(), TEST_LOCATION );
386 DALI_TEST_EQUALS( dummyImpl.sizeSetCalled, true, TEST_LOCATION );
388 application.GetScene().Remove(dummy);
394 int UtcDaliControlImplSizeSet2P(void)
396 ToolkitTestApplication application;
399 DummyControl dummy = DummyControl::New();
400 application.GetScene().Add(dummy);
402 Vector2 size(100.0f, 200.0f);
403 DALI_TEST_CHECK( size != dummy.GetCurrentProperty< Vector3 >( Actor::Property::SIZE ).GetVectorXY() );
405 application.SendNotification();
406 application.Render();
408 dummy.SetProperty( Actor::Property::SIZE, size);
410 application.SendNotification();
411 application.Render();
413 DALI_TEST_EQUALS(size, dummy.GetCurrentProperty< Vector3 >( Actor::Property::SIZE ).GetVectorXY(), TEST_LOCATION);
415 application.GetScene().Remove(dummy);
421 int UtcDaliControlImplSizeAnimation(void)
423 ToolkitTestApplication application;
426 DummyControl dummy = DummyControl::New( true );
427 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
429 application.GetScene().Add(dummy);
431 DALI_TEST_EQUALS( dummyImpl.sizeAnimationCalled, false, TEST_LOCATION );
432 Animation animation = Animation::New(1.0f);
433 animation.AnimateTo( Property( dummy, Actor::Property::SIZE ), Vector3( 100.0f, 150.0f, 200.0f ) );
436 application.Render();
437 application.SendNotification();
438 application.Render();
439 application.SendNotification();
441 DALI_TEST_EQUALS( dummyImpl.sizeAnimationCalled, true, TEST_LOCATION );
443 application.GetScene().Remove(dummy);
446 // Ensure full code coverage
448 DummyControl dummy = DummyControl::New();
450 application.GetScene().Add(dummy);
452 Animation animation = Animation::New(1.0f);
453 animation.AnimateTo( Property( dummy, Actor::Property::SIZE ), Vector3( 100.0f, 150.0f, 200.0f ) );
456 application.Render();
457 application.SendNotification();
458 application.Render();
459 application.SendNotification();
461 application.GetScene().Remove(dummy);
466 ///////////////////////////////////////////////////////////////////////////////////////////////////
468 int UtcDaliControlImplKeyEvent(void)
470 ToolkitTestApplication application;
473 DummyControl dummy = DummyControl::New( true );
474 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
476 application.GetScene().Add(dummy);
477 dummy.SetKeyInputFocus();
479 application.Render();
480 application.SendNotification();
481 application.Render();
482 application.SendNotification();
484 DALI_TEST_EQUALS( dummyImpl.keyEventCalled, false, TEST_LOCATION );
485 Integration::KeyEvent keyEvent;
486 application.ProcessEvent(keyEvent);
487 DALI_TEST_EQUALS( dummyImpl.keyEventCalled, true, TEST_LOCATION );
489 application.GetScene().Remove(dummy);
492 // Ensure full code coverage
494 DummyControl dummy = DummyControl::New();
496 application.GetScene().Add(dummy);
497 dummy.SetKeyInputFocus();
499 application.Render();
500 application.SendNotification();
501 application.Render();
502 application.SendNotification();
504 Integration::KeyEvent keyEvent;
505 application.ProcessEvent(keyEvent);
507 application.GetScene().Remove(dummy);
512 int UtcDaliControlImplKeyInputFocusGained(void)
514 ToolkitTestApplication application;
517 DummyControl dummy = DummyControl::New( true );
518 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
520 application.GetScene().Add(dummy);
522 DALI_TEST_EQUALS( dummyImpl.keyInputFocusGained, false, TEST_LOCATION );
524 dummy.SetKeyInputFocus();
526 DALI_TEST_EQUALS( dummyImpl.keyInputFocusGained, true, TEST_LOCATION );
528 application.GetScene().Remove(dummy);
531 // Ensure full code coverage
533 DummyControl dummy = DummyControl::New();
535 application.GetScene().Add(dummy);
536 dummy.SetKeyInputFocus();
537 application.GetScene().Remove(dummy);
542 int UtcDaliControlImplKeyInputFocusLost(void)
544 ToolkitTestApplication application;
547 DummyControl dummy = DummyControl::New( true );
548 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
550 application.GetScene().Add(dummy);
552 DALI_TEST_EQUALS( dummyImpl.keyInputFocusLost, false, TEST_LOCATION );
554 dummy.SetKeyInputFocus();
555 dummy.ClearKeyInputFocus();
557 DALI_TEST_EQUALS( dummyImpl.keyInputFocusLost, true, TEST_LOCATION );
559 application.GetScene().Remove(dummy);
562 // Ensure full code coverage
564 DummyControl dummy = DummyControl::New();
566 application.GetScene().Add(dummy);
567 dummy.SetKeyInputFocus();
568 dummy.ClearKeyInputFocus();
570 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
572 dummyImpl.IsKeyboardNavigationSupported();
573 dummyImpl.IsKeyboardFocusGroup();
575 application.GetScene().Remove(dummy);
580 int UtcDaliControlImplTypeRegistry(void)
582 ToolkitTestApplication application;
586 type = TypeRegistry::Get().GetTypeInfo( "Control" );
587 DALI_TEST_CHECK( type );
588 BaseHandle handle = type.CreateInstance();
589 DALI_TEST_CHECK( handle );
591 // Check if it's a control
592 DALI_TEST_CHECK( Control::DownCast(handle) );
597 ///////////////////////////////////////////////////////////////////////////////////////////////////
599 int UtcDaliControlImplSetStyleName(void)
601 ToolkitTestApplication application;
604 DummyControl dummy = DummyControl::New( true );
606 dummy.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
607 dummy.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::TOP_LEFT);
608 application.GetScene().Add(dummy);
610 dummy.SetStyleName("TestStyle");
612 DALI_TEST_CHECK( dummy.GetStyleName() == "TestStyle" );
614 application.GetScene().Remove(dummy);
619 int UtcDaliControlImplOnStyleChangeN(void)
621 ToolkitTestApplication application;
622 Control dummy = Control::New();
623 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
625 // test that style manager is being used, passing an empty handle does nothing but does not crash either
626 Dali::Toolkit::StyleManager styleManager;
627 controlImpl.OnStyleChange( styleManager, StyleChange::THEME_CHANGE );
628 // no crash so test passes
629 tet_result(TET_PASS);
635 int UtcDaliControlImplOnAccessibilityPanP(void)
637 ToolkitTestApplication application;
638 Control dummy = Control::New();
639 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
642 DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityPan( pan ), TEST_LOCATION );
648 int UtcDaliControlImplOnAccessibilityActivatedP(void)
650 ToolkitTestApplication application;
652 Control dummy = Control::New();
653 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
654 DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityActivated(), TEST_LOCATION );
656 // Invoke the control's activate action
657 TypeInfo type = TypeRegistry::Get().GetTypeInfo( "Control" );
658 DALI_TEST_CHECK( type );
660 BaseHandle handle = type.CreateInstance();
661 DALI_TEST_CHECK( handle );
663 Property::Map attributes;
664 DALI_TEST_EQUALS( false, handle.DoAction("accessibilityActivated", attributes), TEST_LOCATION );
669 int UtcDaliControlImplGetNextKeyboardFocusableActorP(void)
671 ToolkitTestApplication application;
672 Control dummy = Control::New();
673 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
675 Actor currentFocusedActor;
676 Actor result = controlImpl.GetNextKeyboardFocusableActor( currentFocusedActor, Control::KeyboardFocus::LEFT, false );
678 DALI_TEST_EQUALS( result, currentFocusedActor, TEST_LOCATION );
683 int UtcDaliControlImplRegisterThenReRegisterVisual(void)
685 ToolkitTestApplication application;
687 DummyControl dummy = DummyControl::New();
688 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
690 Property::Index index =1;
692 DALI_TEST_CHECK( !dummyImpl.GetVisual( index ) );
694 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
695 Toolkit::Visual::Base visual;
698 map[Visual::Property::TYPE] = Visual::COLOR;
699 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
701 visual = visualFactory.CreateVisual( map );
702 DALI_TEST_CHECK(visual);
704 // Register index with a color visual
705 dummyImpl.RegisterVisual( index, visual );
707 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
709 Property::Map newMap;
710 newMap[Visual::Property::TYPE] = Visual::COLOR;
711 newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
713 visual = visualFactory.CreateVisual( newMap );
714 DALI_TEST_CHECK(visual);
716 // ReRegister with altered color visual
717 dummyImpl.RegisterVisual( index, visual );
719 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
721 tet_result(TET_PASS);
726 int UtcDaliControlImplRegisterVisaulThenReRegisterToSelf(void)
728 ToolkitTestApplication application;
730 DummyControl dummy = DummyControl::New();
731 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
733 Property::Index index =1;
735 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
736 Toolkit::Visual::Base visual;
739 map[Visual::Property::TYPE] = Visual::COLOR;
740 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
742 visual = visualFactory.CreateVisual( map );
743 DALI_TEST_CHECK(visual);
745 // Register index with a color visual
746 dummyImpl.RegisterVisual( index, visual );
748 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
750 // ReRegister to self
751 dummyImpl.RegisterVisual( index, visual );
753 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
758 int UtcDaliControlImplRegisterVisualToSelf(void)
760 ToolkitTestApplication application;
762 Test::ObjectDestructionTracker objectDestructionTracker( application.GetCore().GetObjectRegistry() );
765 DummyControl dummy = DummyControl::New();
766 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
767 objectDestructionTracker.Start( dummy );
769 Property::Index index = 1;
771 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
772 Toolkit::Visual::Base visual;
775 map[Visual::Property::TYPE] = Visual::COLOR;
776 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
778 visual = visualFactory.CreateVisual( map );
779 DALI_TEST_CHECK(visual);
782 dummyImpl.RegisterVisual( index, visual );
784 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
785 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
788 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
793 int UtcDaliControlImplRegisterTwoVisuals(void)
795 ToolkitTestApplication application;
797 DummyControl dummy = DummyControl::New();
798 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
800 Property::Index index =1;
801 Property::Index index2 =2;
803 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
804 Toolkit::Visual::Base visual;
805 Toolkit::Visual::Base secondVisual;
808 map[Visual::Property::TYPE] = Visual::COLOR;
809 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
811 visual = visualFactory.CreateVisual( map );
812 DALI_TEST_CHECK(visual);
814 // Register index with a color visual
815 dummyImpl.RegisterVisual( index, visual );
817 Property::Map newMap;
818 newMap[Visual::Property::TYPE] = Visual::COLOR;
819 newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
821 secondVisual = visualFactory.CreateVisual( newMap );
822 DALI_TEST_CHECK( secondVisual );
824 // ReRegister with altered color visual
825 dummyImpl.RegisterVisual( index2, secondVisual );
827 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
828 DALI_TEST_CHECK( dummyImpl.GetVisual( index2 ) == secondVisual );
833 int UtcDaliControlImplRegisterUnregisterVisual(void)
835 ToolkitTestApplication application;
837 DummyControl dummy = DummyControl::New();
838 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
840 Property::Index index =1;
842 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
843 Toolkit::Visual::Base visual;
846 map[Visual::Property::TYPE] = Visual::COLOR;
847 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
849 visual = visualFactory.CreateVisual( map );
850 DALI_TEST_CHECK(visual);
852 // Register index with a color visual
853 dummyImpl.RegisterVisual( index, visual );
855 tet_infoline( "Add control with visual to stage and check renderer count is 1" );
856 application.GetScene().Add( dummy );
857 application.SendNotification();
858 application.Render();
860 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
861 DALI_TEST_EQUALS( dummy.GetRendererCount(), 1, TEST_LOCATION );
864 dummyImpl.UnregisterVisual( index );
866 tet_infoline( "Remove control with visual from stage and check renderer count is 0" );
867 application.GetScene().Remove( dummy );
868 application.SendNotification();
869 application.Render();
871 DALI_TEST_EQUALS( dummy.GetRendererCount(), 0, TEST_LOCATION );
872 DALI_TEST_CHECK( !dummyImpl.GetVisual( index ) );
877 int UtcDaliControlImplRegisterDisabledVisual(void)
879 ToolkitTestApplication application;
881 DummyControl dummy = DummyControl::New();
882 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
884 Property::Index TEST_PROPERTY =1;
886 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
887 Toolkit::Visual::Base visual;
890 map[Visual::Property::TYPE] = Visual::COLOR;
891 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
893 visual = visualFactory.CreateVisual( map );
894 DALI_TEST_CHECK(visual);
896 // Register index with a color visual
897 dummyImpl.RegisterVisual( TEST_PROPERTY, visual, false );
899 DALI_TEST_CHECK( dummyImpl.GetVisual( TEST_PROPERTY ) == visual );
900 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
902 application.GetScene().Add(dummy);
905 application.SendNotification();
906 application.Render();
908 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
910 DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
912 dummyImpl.EnableVisual( TEST_PROPERTY, true );
914 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true );
919 int UtcDaliControlImplDisableRegisteredVisual(void)
921 ToolkitTestApplication application;
923 DummyControl dummy = DummyControl::New();
924 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
926 Property::Index TEST_PROPERTY =1;
928 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
929 Toolkit::Visual::Base visual;
932 map[Visual::Property::TYPE] = Visual::COLOR;
933 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
935 visual = visualFactory.CreateVisual( map );
936 DALI_TEST_CHECK(visual);
938 // Register index with a color visual
939 dummyImpl.RegisterVisual( TEST_PROPERTY, visual );
941 application.GetScene().Add(dummy);
944 application.SendNotification();
945 application.Render();
947 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true);
949 DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
951 dummyImpl.EnableVisual( TEST_PROPERTY, false );
953 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
958 int UtcDaliControlImplEnabledVisualParentRemovedFromStage(void)
960 // Visual enabled but then parent removed from stage, test ensures visual/renderer are also removed from stage.
961 // Then adding parent back to stage should automatically put visual/renderer back
963 ToolkitTestApplication application;
965 DummyControl dummy = DummyControl::New();
966 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
968 Property::Index TEST_PROPERTY =1;
970 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
971 Toolkit::Visual::Base visual;
974 map[Visual::Property::TYPE] = Visual::COLOR;
975 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
977 visual = visualFactory.CreateVisual( map );
978 DALI_TEST_CHECK(visual);
980 // Register index with a color visual
981 dummyImpl.RegisterVisual( TEST_PROPERTY, visual, false );
983 application.GetScene().Add(dummy);
985 application.SendNotification();
986 application.Render();
988 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
989 DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
990 dummyImpl.EnableVisual( TEST_PROPERTY, true );
993 application.SendNotification();
994 application.Render();
995 DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
997 // Remove control from stage, visual should be removed from stage too
998 application.GetScene().Remove(dummy);
1000 application.SendNotification();
1001 application.Render();
1002 DALI_TEST_CHECK( dummy.GetRendererCount() == 0u );
1004 application.GetScene().Add(dummy);
1005 // Render and notify
1006 application.SendNotification();
1007 application.Render();
1008 DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1010 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true );
1015 int UtcDaliControlImplRegisterTwoVisualsAndEnableOnlyOne(void)
1017 // Register 2 visuals and enable by default
1019 // Remove control from stage then put it back
1020 // Check that only 1 visual/renderer is staged.
1022 ToolkitTestApplication application;
1024 DummyControl dummy = DummyControl::New();
1025 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1027 Property::Index TEST_PROPERTY1 =1;
1028 Property::Index TEST_PROPERTY2 =2;
1030 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1031 Toolkit::Visual::Base visual1;
1032 Toolkit::Visual::Base visual2;
1035 map[Visual::Property::TYPE] = Visual::COLOR;
1036 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1039 map[Visual::Property::TYPE] = Visual::COLOR;
1040 map[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
1042 visual1 = visualFactory.CreateVisual( map );
1043 DALI_TEST_CHECK(visual1);
1045 visual2 = visualFactory.CreateVisual( map );
1046 DALI_TEST_CHECK(visual2);
1048 // Register index with a color visual
1049 dummyImpl.RegisterVisual( TEST_PROPERTY1, visual1 );
1050 // Register second index with a color visual
1051 dummyImpl.RegisterVisual( TEST_PROPERTY2, visual2 );
1053 application.GetScene().Add(dummy);
1054 // Render and notify
1055 application.SendNotification();
1056 application.Render();
1058 DALI_TEST_CHECK( dummy.GetRendererCount() == 2u );
1059 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true );
1060 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true);
1061 DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1062 dummyImpl.EnableVisual( TEST_PROPERTY2, false );
1064 // Render and notify
1065 application.SendNotification();
1066 application.Render();
1067 DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1069 // Remove control from stage, visual should be removed from stage too
1070 application.GetScene().Remove(dummy);
1071 // Render and notify
1072 application.SendNotification();
1073 application.Render();
1074 DALI_TEST_CHECK( dummy.GetRendererCount() == 0u );
1076 application.GetScene().Add(dummy);
1077 // Render and notify
1078 application.SendNotification();
1079 application.Render();
1080 DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1082 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true );
1083 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY2 ) == false );
1087 int UtcDaliControlImplAutoClippingWithVisuals(void)
1089 ToolkitTestApplication application;
1091 tet_infoline( "Test to ensure a renderer does NOT get added when we've already registered a visual which we haven't enabled" );
1093 DummyControl control = DummyControl::New();
1094 DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
1096 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1097 Toolkit::Visual::Base visual;
1099 map[Visual::Property::TYPE] = Visual::COLOR;
1100 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1101 visual = visualFactory.CreateVisual( map );
1102 DALI_TEST_CHECK(visual);
1103 controlImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual, false );
1105 DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1107 control.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
1109 application.GetScene().Add( control );
1111 application.SendNotification();
1112 application.Render();
1114 DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1119 int UtcDaliControlImplAutoClippingWithVisualsAlreadyOnStage(void)
1121 ToolkitTestApplication application;
1123 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" );
1125 DummyControl control = DummyControl::New();
1126 DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
1128 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1129 Toolkit::Visual::Base visual;
1131 map[Visual::Property::TYPE] = Visual::COLOR;
1132 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1133 visual = visualFactory.CreateVisual( map );
1134 DALI_TEST_CHECK(visual);
1135 controlImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual, false );
1137 DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1139 application.GetScene().Add( control );
1141 application.SendNotification();
1142 application.Render();
1144 control.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
1146 application.SendNotification();
1147 application.Render();
1149 DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1154 int UtcDaliControlImplOnPinch(void)
1156 ToolkitTestApplication application;
1158 Control control = Control::New();
1159 control.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
1160 control.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::TOP_LEFT);
1161 application.GetScene().Add(control);
1163 application.SendNotification();
1164 application.Render();
1166 Toolkit::Internal::Control& impl = Toolkit::Internal::GetImplementation(control);
1167 impl.EnableGestureDetection(GestureType::PINCH);
1169 // Scale becomes 0.6666666
1170 TestStartPinch( application, Vector2( 5.0f, 20.0f ), Vector2( 35.0f, 20.0f ),
1171 Vector2( 10.0f, 20.0f ), Vector2( 30.0f, 20.0f ), 100 );
1173 DALI_TEST_EQUALS(0.666f, control.GetProperty( Actor::Property::SCALE_X).Get<float>(), 0.01f, TEST_LOCATION);