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(Gesture::Pinch);
76 DALI_TEST_CHECK( dummyImpl.GetPinchGestureDetector() );
78 DALI_TEST_CHECK( !dummyImpl.GetPanGestureDetector() );
79 dummyImpl.EnableGestureDetection(Gesture::Pan);
80 DALI_TEST_CHECK( dummyImpl.GetPanGestureDetector() );
82 DALI_TEST_CHECK( !dummyImpl.GetTapGestureDetector() );
83 dummyImpl.EnableGestureDetection(Gesture::Tap);
84 DALI_TEST_CHECK( dummyImpl.GetTapGestureDetector() );
86 DALI_TEST_CHECK( !dummyImpl.GetLongPressGestureDetector() );
87 dummyImpl.EnableGestureDetection(Gesture::LongPress);
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( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
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( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
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( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
131 DALI_TEST_CHECK( dummyImpl.GetPinchGestureDetector() );
132 dummyImpl.DisableGestureDetection(Gesture::Pinch);
133 DALI_TEST_CHECK( !dummyImpl.GetPinchGestureDetector() );
135 DALI_TEST_CHECK( dummyImpl.GetPanGestureDetector() );
136 dummyImpl.DisableGestureDetection(Gesture::Pan);
137 DALI_TEST_CHECK( !dummyImpl.GetPanGestureDetector() );
139 DALI_TEST_CHECK( dummyImpl.GetTapGestureDetector() );
140 dummyImpl.DisableGestureDetection(Gesture::Tap);
141 DALI_TEST_CHECK( !dummyImpl.GetTapGestureDetector() );
143 DALI_TEST_CHECK( dummyImpl.GetLongPressGestureDetector() );
144 dummyImpl.DisableGestureDetection(Gesture::LongPress);
145 DALI_TEST_CHECK( !dummyImpl.GetLongPressGestureDetector() );
150 DummyControl dummy = DummyControl::New();
151 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
153 dummyImpl.EnableGestureDetection( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
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( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
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( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
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( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
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( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
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( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
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 UtcDaliControlImplHoverEvent(void)
470 ToolkitTestApplication application;
473 DummyControl dummy = DummyControl::New( true );
474 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
476 dummy.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
477 dummy.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::TOP_LEFT);
478 application.GetScene().Add(dummy);
480 application.Render();
481 application.SendNotification();
482 application.Render();
483 application.SendNotification();
485 DALI_TEST_EQUALS( dummyImpl.hoverEventCalled, false, TEST_LOCATION );
486 Integration::HoverEvent event(1);
487 Integration::Point point;
488 point.SetDeviceId( 1 );
489 point.SetState( PointState::MOTION );
490 point.SetScreenPosition( Vector2( 20.0f, 20.0f ) );
491 event.AddPoint(point);
492 application.ProcessEvent( event );
493 DALI_TEST_EQUALS( dummyImpl.hoverEventCalled, true, TEST_LOCATION );
495 application.GetScene().Remove(dummy);
498 // Ensure full code coverage
500 DummyControl dummy = DummyControl::New();
502 dummy.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
503 dummy.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::TOP_LEFT);
504 application.GetScene().Add(dummy);
506 application.Render();
507 application.SendNotification();
508 application.Render();
509 application.SendNotification();
511 Integration::HoverEvent event(1);
512 Integration::Point point;
513 point.SetDeviceId( 1 );
514 point.SetState( PointState::MOTION );
515 point.SetScreenPosition( Vector2( 20.0f, 20.0f ) );
516 event.AddPoint(point);
517 application.ProcessEvent( event );
519 application.GetScene().Remove(dummy);
524 ///////////////////////////////////////////////////////////////////////////////////////////////////
527 int UtcDaliControlImplKeyEvent(void)
529 ToolkitTestApplication application;
532 DummyControl dummy = DummyControl::New( true );
533 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
535 application.GetScene().Add(dummy);
536 dummy.SetKeyInputFocus();
538 application.Render();
539 application.SendNotification();
540 application.Render();
541 application.SendNotification();
543 DALI_TEST_EQUALS( dummyImpl.keyEventCalled, false, TEST_LOCATION );
544 Integration::KeyEvent keyEvent;
545 application.ProcessEvent(keyEvent);
546 DALI_TEST_EQUALS( dummyImpl.keyEventCalled, true, TEST_LOCATION );
548 application.GetScene().Remove(dummy);
551 // Ensure full code coverage
553 DummyControl dummy = DummyControl::New();
555 application.GetScene().Add(dummy);
556 dummy.SetKeyInputFocus();
558 application.Render();
559 application.SendNotification();
560 application.Render();
561 application.SendNotification();
563 Integration::KeyEvent keyEvent;
564 application.ProcessEvent(keyEvent);
566 application.GetScene().Remove(dummy);
571 int UtcDaliControlImplKeyInputFocusGained(void)
573 ToolkitTestApplication application;
576 DummyControl dummy = DummyControl::New( true );
577 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
579 application.GetScene().Add(dummy);
581 DALI_TEST_EQUALS( dummyImpl.keyInputFocusGained, false, TEST_LOCATION );
583 dummy.SetKeyInputFocus();
585 DALI_TEST_EQUALS( dummyImpl.keyInputFocusGained, true, TEST_LOCATION );
587 application.GetScene().Remove(dummy);
590 // Ensure full code coverage
592 DummyControl dummy = DummyControl::New();
594 application.GetScene().Add(dummy);
595 dummy.SetKeyInputFocus();
596 application.GetScene().Remove(dummy);
601 int UtcDaliControlImplKeyInputFocusLost(void)
603 ToolkitTestApplication application;
606 DummyControl dummy = DummyControl::New( true );
607 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
609 application.GetScene().Add(dummy);
611 DALI_TEST_EQUALS( dummyImpl.keyInputFocusLost, false, TEST_LOCATION );
613 dummy.SetKeyInputFocus();
614 dummy.ClearKeyInputFocus();
616 DALI_TEST_EQUALS( dummyImpl.keyInputFocusLost, true, TEST_LOCATION );
618 application.GetScene().Remove(dummy);
621 // Ensure full code coverage
623 DummyControl dummy = DummyControl::New();
625 application.GetScene().Add(dummy);
626 dummy.SetKeyInputFocus();
627 dummy.ClearKeyInputFocus();
629 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
631 dummyImpl.IsKeyboardNavigationSupported();
632 dummyImpl.IsKeyboardFocusGroup();
634 application.GetScene().Remove(dummy);
639 int UtcDaliControlImplTypeRegistry(void)
641 ToolkitTestApplication application;
645 type = TypeRegistry::Get().GetTypeInfo( "Control" );
646 DALI_TEST_CHECK( type );
647 BaseHandle handle = type.CreateInstance();
648 DALI_TEST_CHECK( handle );
650 // Check if it's a control
651 DALI_TEST_CHECK( Control::DownCast(handle) );
656 ///////////////////////////////////////////////////////////////////////////////////////////////////
659 static bool WheelEventCallback(Actor actor, const WheelEvent& event)
665 int UtcDaliControlImplWheelEvent(void)
667 ToolkitTestApplication application;
670 DummyControl dummy = DummyControl::New( true );
671 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
673 dummy.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
674 dummy.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::TOP_LEFT);
675 application.GetScene().Add(dummy);
677 dummy.WheelEventSignal().Connect(&WheelEventCallback);
679 application.Render();
680 application.SendNotification();
681 application.Render();
682 application.SendNotification();
684 DALI_TEST_EQUALS( dummyImpl.wheelEventCalled, false, TEST_LOCATION );
686 // simulate a wheel event
687 Vector2 screenCoordinates( 10.0f, 10.0f );
688 Integration::WheelEvent event( Integration::WheelEvent::MOUSE_WHEEL, 0, 0u, screenCoordinates, 1, 1000u );
689 application.ProcessEvent( event );
690 DALI_TEST_EQUALS( dummyImpl.wheelEventCalled, true, TEST_LOCATION );
692 application.GetScene().Remove(dummy);
695 // Ensure full code coverage
697 DummyControl dummy = DummyControl::New();
699 dummy.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
700 dummy.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::TOP_LEFT);
701 application.GetScene().Add(dummy);
703 dummy.WheelEventSignal().Connect(&WheelEventCallback);
705 application.Render();
706 application.SendNotification();
707 application.Render();
708 application.SendNotification();
710 // simulate a wheel event
711 Vector2 screenCoordinates( 20.0f, 20.0f );
712 Integration::WheelEvent event( Integration::WheelEvent::MOUSE_WHEEL, 0, 0u, screenCoordinates, 1, 1000u );
713 application.ProcessEvent( event );
715 application.GetScene().Remove(dummy);
720 int UtcDaliControlImplSetStyleName(void)
722 ToolkitTestApplication application;
725 DummyControl dummy = DummyControl::New( true );
727 dummy.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
728 dummy.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::TOP_LEFT);
729 application.GetScene().Add(dummy);
731 dummy.SetStyleName("TestStyle");
733 DALI_TEST_CHECK( dummy.GetStyleName() == "TestStyle" );
735 application.GetScene().Remove(dummy);
740 int UtcDaliControlImplOnStyleChangeN(void)
742 ToolkitTestApplication application;
743 Control dummy = Control::New();
744 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
746 // test that style manager is being used, passing an empty handle does nothing but does not crash either
747 Dali::Toolkit::StyleManager styleManager;
748 controlImpl.OnStyleChange( styleManager, StyleChange::THEME_CHANGE );
749 // no crash so test passes
750 tet_result(TET_PASS);
756 int UtcDaliControlImplOnAccessibilityPanP(void)
758 ToolkitTestApplication application;
759 Control dummy = Control::New();
760 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
763 DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityPan( pan ), TEST_LOCATION );
768 int UtcDaliControlImplOnAccessibilityTouchP(void)
770 ToolkitTestApplication application;
771 Control dummy = Control::New();
772 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
774 DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityTouch( touch ), TEST_LOCATION );
779 int UtcDaliControlImplOnAccessibilityActivatedP(void)
781 ToolkitTestApplication application;
783 Control dummy = Control::New();
784 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
785 DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityActivated(), TEST_LOCATION );
787 // Invoke the control's activate action
788 TypeInfo type = TypeRegistry::Get().GetTypeInfo( "Control" );
789 DALI_TEST_CHECK( type );
791 BaseHandle handle = type.CreateInstance();
792 DALI_TEST_CHECK( handle );
794 Property::Map attributes;
795 DALI_TEST_EQUALS( false, handle.DoAction("accessibilityActivated", attributes), TEST_LOCATION );
800 int UtcDaliControlImplGetNextKeyboardFocusableActorP(void)
802 ToolkitTestApplication application;
803 Control dummy = Control::New();
804 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
806 Actor currentFocusedActor;
807 Actor result = controlImpl.GetNextKeyboardFocusableActor( currentFocusedActor, Control::KeyboardFocus::LEFT, false );
809 DALI_TEST_EQUALS( result, currentFocusedActor, TEST_LOCATION );
814 int UtcDaliControlImplRegisterThenReRegisterVisual(void)
816 ToolkitTestApplication application;
818 DummyControl dummy = DummyControl::New();
819 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
821 Property::Index index =1;
823 DALI_TEST_CHECK( !dummyImpl.GetVisual( index ) );
825 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
826 Toolkit::Visual::Base visual;
829 map[Visual::Property::TYPE] = Visual::COLOR;
830 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
832 visual = visualFactory.CreateVisual( map );
833 DALI_TEST_CHECK(visual);
835 // Register index with a color visual
836 dummyImpl.RegisterVisual( index, visual );
838 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
840 Property::Map newMap;
841 newMap[Visual::Property::TYPE] = Visual::COLOR;
842 newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
844 visual = visualFactory.CreateVisual( newMap );
845 DALI_TEST_CHECK(visual);
847 // ReRegister with altered color visual
848 dummyImpl.RegisterVisual( index, visual );
850 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
852 tet_result(TET_PASS);
857 int UtcDaliControlImplRegisterVisaulThenReRegisterToSelf(void)
859 ToolkitTestApplication application;
861 DummyControl dummy = DummyControl::New();
862 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
864 Property::Index index =1;
866 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
867 Toolkit::Visual::Base visual;
870 map[Visual::Property::TYPE] = Visual::COLOR;
871 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
873 visual = visualFactory.CreateVisual( map );
874 DALI_TEST_CHECK(visual);
876 // Register index with a color visual
877 dummyImpl.RegisterVisual( index, visual );
879 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
881 // ReRegister to self
882 dummyImpl.RegisterVisual( index, visual );
884 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
889 int UtcDaliControlImplRegisterVisualToSelf(void)
891 ToolkitTestApplication application;
893 Test::ObjectDestructionTracker objectDestructionTracker( application.GetCore().GetObjectRegistry() );
896 DummyControl dummy = DummyControl::New();
897 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
898 objectDestructionTracker.Start( dummy );
900 Property::Index index = 1;
902 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
903 Toolkit::Visual::Base visual;
906 map[Visual::Property::TYPE] = Visual::COLOR;
907 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
909 visual = visualFactory.CreateVisual( map );
910 DALI_TEST_CHECK(visual);
913 dummyImpl.RegisterVisual( index, visual );
915 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
916 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
919 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
924 int UtcDaliControlImplRegisterTwoVisuals(void)
926 ToolkitTestApplication application;
928 DummyControl dummy = DummyControl::New();
929 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
931 Property::Index index =1;
932 Property::Index index2 =2;
934 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
935 Toolkit::Visual::Base visual;
936 Toolkit::Visual::Base secondVisual;
939 map[Visual::Property::TYPE] = Visual::COLOR;
940 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
942 visual = visualFactory.CreateVisual( map );
943 DALI_TEST_CHECK(visual);
945 // Register index with a color visual
946 dummyImpl.RegisterVisual( index, visual );
948 Property::Map newMap;
949 newMap[Visual::Property::TYPE] = Visual::COLOR;
950 newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
952 secondVisual = visualFactory.CreateVisual( newMap );
953 DALI_TEST_CHECK( secondVisual );
955 // ReRegister with altered color visual
956 dummyImpl.RegisterVisual( index2, secondVisual );
958 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
959 DALI_TEST_CHECK( dummyImpl.GetVisual( index2 ) == secondVisual );
964 int UtcDaliControlImplRegisterUnregisterVisual(void)
966 ToolkitTestApplication application;
968 DummyControl dummy = DummyControl::New();
969 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
971 Property::Index index =1;
973 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
974 Toolkit::Visual::Base visual;
977 map[Visual::Property::TYPE] = Visual::COLOR;
978 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
980 visual = visualFactory.CreateVisual( map );
981 DALI_TEST_CHECK(visual);
983 // Register index with a color visual
984 dummyImpl.RegisterVisual( index, visual );
986 tet_infoline( "Add control with visual to stage and check renderer count is 1" );
987 application.GetScene().Add( dummy );
988 application.SendNotification();
989 application.Render();
991 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
992 DALI_TEST_EQUALS( dummy.GetRendererCount(), 1, TEST_LOCATION );
995 dummyImpl.UnregisterVisual( index );
997 tet_infoline( "Remove control with visual from stage and check renderer count is 0" );
998 application.GetScene().Remove( dummy );
999 application.SendNotification();
1000 application.Render();
1002 DALI_TEST_EQUALS( dummy.GetRendererCount(), 0, TEST_LOCATION );
1003 DALI_TEST_CHECK( !dummyImpl.GetVisual( index ) );
1008 int UtcDaliControlImplRegisterDisabledVisual(void)
1010 ToolkitTestApplication application;
1012 DummyControl dummy = DummyControl::New();
1013 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1015 Property::Index TEST_PROPERTY =1;
1017 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1018 Toolkit::Visual::Base visual;
1021 map[Visual::Property::TYPE] = Visual::COLOR;
1022 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1024 visual = visualFactory.CreateVisual( map );
1025 DALI_TEST_CHECK(visual);
1027 // Register index with a color visual
1028 dummyImpl.RegisterVisual( TEST_PROPERTY, visual, false );
1030 DALI_TEST_CHECK( dummyImpl.GetVisual( TEST_PROPERTY ) == visual );
1031 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1033 application.GetScene().Add(dummy);
1035 // Render and notify
1036 application.SendNotification();
1037 application.Render();
1039 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1041 DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1043 dummyImpl.EnableVisual( TEST_PROPERTY, true );
1045 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true );
1050 int UtcDaliControlImplDisableRegisteredVisual(void)
1052 ToolkitTestApplication application;
1054 DummyControl dummy = DummyControl::New();
1055 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1057 Property::Index TEST_PROPERTY =1;
1059 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1060 Toolkit::Visual::Base visual;
1063 map[Visual::Property::TYPE] = Visual::COLOR;
1064 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1066 visual = visualFactory.CreateVisual( map );
1067 DALI_TEST_CHECK(visual);
1069 // Register index with a color visual
1070 dummyImpl.RegisterVisual( TEST_PROPERTY, visual );
1072 application.GetScene().Add(dummy);
1074 // Render and notify
1075 application.SendNotification();
1076 application.Render();
1078 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true);
1080 DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1082 dummyImpl.EnableVisual( TEST_PROPERTY, false );
1084 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1089 int UtcDaliControlImplEnabledVisualParentRemovedFromStage(void)
1091 // Visual enabled but then parent removed from stage, test ensures visual/renderer are also removed from stage.
1092 // Then adding parent back to stage should automatically put visual/renderer back
1094 ToolkitTestApplication application;
1096 DummyControl dummy = DummyControl::New();
1097 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1099 Property::Index TEST_PROPERTY =1;
1101 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1102 Toolkit::Visual::Base visual;
1105 map[Visual::Property::TYPE] = Visual::COLOR;
1106 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1108 visual = visualFactory.CreateVisual( map );
1109 DALI_TEST_CHECK(visual);
1111 // Register index with a color visual
1112 dummyImpl.RegisterVisual( TEST_PROPERTY, visual, false );
1114 application.GetScene().Add(dummy);
1115 // Render and notify
1116 application.SendNotification();
1117 application.Render();
1119 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1120 DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1121 dummyImpl.EnableVisual( TEST_PROPERTY, true );
1123 // Render and notify
1124 application.SendNotification();
1125 application.Render();
1126 DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1128 // Remove control from stage, visual should be removed from stage too
1129 application.GetScene().Remove(dummy);
1130 // Render and notify
1131 application.SendNotification();
1132 application.Render();
1133 DALI_TEST_CHECK( dummy.GetRendererCount() == 0u );
1135 application.GetScene().Add(dummy);
1136 // Render and notify
1137 application.SendNotification();
1138 application.Render();
1139 DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1141 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true );
1146 int UtcDaliControlImplRegisterTwoVisualsAndEnableOnlyOne(void)
1148 // Register 2 visuals and enable by default
1150 // Remove control from stage then put it back
1151 // Check that only 1 visual/renderer is staged.
1153 ToolkitTestApplication application;
1155 DummyControl dummy = DummyControl::New();
1156 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1158 Property::Index TEST_PROPERTY1 =1;
1159 Property::Index TEST_PROPERTY2 =2;
1161 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1162 Toolkit::Visual::Base visual1;
1163 Toolkit::Visual::Base visual2;
1166 map[Visual::Property::TYPE] = Visual::COLOR;
1167 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1170 map[Visual::Property::TYPE] = Visual::COLOR;
1171 map[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
1173 visual1 = visualFactory.CreateVisual( map );
1174 DALI_TEST_CHECK(visual1);
1176 visual2 = visualFactory.CreateVisual( map );
1177 DALI_TEST_CHECK(visual2);
1179 // Register index with a color visual
1180 dummyImpl.RegisterVisual( TEST_PROPERTY1, visual1 );
1181 // Register second index with a color visual
1182 dummyImpl.RegisterVisual( TEST_PROPERTY2, visual2 );
1184 application.GetScene().Add(dummy);
1185 // Render and notify
1186 application.SendNotification();
1187 application.Render();
1189 DALI_TEST_CHECK( dummy.GetRendererCount() == 2u );
1190 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true );
1191 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true);
1192 DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1193 dummyImpl.EnableVisual( TEST_PROPERTY2, false );
1195 // Render and notify
1196 application.SendNotification();
1197 application.Render();
1198 DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1200 // Remove control from stage, visual should be removed from stage too
1201 application.GetScene().Remove(dummy);
1202 // Render and notify
1203 application.SendNotification();
1204 application.Render();
1205 DALI_TEST_CHECK( dummy.GetRendererCount() == 0u );
1207 application.GetScene().Add(dummy);
1208 // Render and notify
1209 application.SendNotification();
1210 application.Render();
1211 DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1213 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true );
1214 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY2 ) == false );
1218 int UtcDaliControlImplAutoClippingWithVisuals(void)
1220 ToolkitTestApplication application;
1222 tet_infoline( "Test to ensure a renderer does NOT get added when we've already registered a visual which we haven't enabled" );
1224 DummyControl control = DummyControl::New();
1225 DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
1227 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1228 Toolkit::Visual::Base visual;
1230 map[Visual::Property::TYPE] = Visual::COLOR;
1231 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1232 visual = visualFactory.CreateVisual( map );
1233 DALI_TEST_CHECK(visual);
1234 controlImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual, false );
1236 DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1238 control.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
1240 application.GetScene().Add( control );
1242 application.SendNotification();
1243 application.Render();
1245 DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1250 int UtcDaliControlImplAutoClippingWithVisualsAlreadyOnStage(void)
1252 ToolkitTestApplication application;
1254 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" );
1256 DummyControl control = DummyControl::New();
1257 DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
1259 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1260 Toolkit::Visual::Base visual;
1262 map[Visual::Property::TYPE] = Visual::COLOR;
1263 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1264 visual = visualFactory.CreateVisual( map );
1265 DALI_TEST_CHECK(visual);
1266 controlImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual, false );
1268 DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1270 application.GetScene().Add( control );
1272 application.SendNotification();
1273 application.Render();
1275 control.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
1277 application.SendNotification();
1278 application.Render();
1280 DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1285 int UtcDaliControlImplOnPinch(void)
1287 ToolkitTestApplication application;
1289 Control control = Control::New();
1290 control.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
1291 control.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::TOP_LEFT);
1292 application.GetScene().Add(control);
1294 application.SendNotification();
1295 application.Render();
1297 Toolkit::Internal::Control& impl = Toolkit::Internal::GetImplementation(control);
1298 impl.EnableGestureDetection(Gesture::Pinch);
1300 // Scale becomes 0.6666666
1301 TestStartPinch( application, Vector2( 5.0f, 20.0f ), Vector2( 35.0f, 20.0f ),
1302 Vector2( 10.0f, 20.0f ), Vector2( 30.0f, 20.0f ), 100 );
1304 DALI_TEST_EQUALS(0.666f, control.GetProperty( Actor::Property::SCALE_X).Get<float>(), 0.01f, TEST_LOCATION);