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 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 );
769 int UtcDaliControlImplOnAccessibilityActivatedP(void)
771 ToolkitTestApplication application;
773 Control dummy = Control::New();
774 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
775 DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityActivated(), TEST_LOCATION );
777 // Invoke the control's activate action
778 TypeInfo type = TypeRegistry::Get().GetTypeInfo( "Control" );
779 DALI_TEST_CHECK( type );
781 BaseHandle handle = type.CreateInstance();
782 DALI_TEST_CHECK( handle );
784 Property::Map attributes;
785 DALI_TEST_EQUALS( false, handle.DoAction("accessibilityActivated", attributes), TEST_LOCATION );
790 int UtcDaliControlImplGetNextKeyboardFocusableActorP(void)
792 ToolkitTestApplication application;
793 Control dummy = Control::New();
794 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
796 Actor currentFocusedActor;
797 Actor result = controlImpl.GetNextKeyboardFocusableActor( currentFocusedActor, Control::KeyboardFocus::LEFT, false );
799 DALI_TEST_EQUALS( result, currentFocusedActor, TEST_LOCATION );
804 int UtcDaliControlImplRegisterThenReRegisterVisual(void)
806 ToolkitTestApplication application;
808 DummyControl dummy = DummyControl::New();
809 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
811 Property::Index index =1;
813 DALI_TEST_CHECK( !dummyImpl.GetVisual( index ) );
815 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
816 Toolkit::Visual::Base visual;
819 map[Visual::Property::TYPE] = Visual::COLOR;
820 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
822 visual = visualFactory.CreateVisual( map );
823 DALI_TEST_CHECK(visual);
825 // Register index with a color visual
826 dummyImpl.RegisterVisual( index, visual );
828 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
830 Property::Map newMap;
831 newMap[Visual::Property::TYPE] = Visual::COLOR;
832 newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
834 visual = visualFactory.CreateVisual( newMap );
835 DALI_TEST_CHECK(visual);
837 // ReRegister with altered color visual
838 dummyImpl.RegisterVisual( index, visual );
840 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
842 tet_result(TET_PASS);
847 int UtcDaliControlImplRegisterVisaulThenReRegisterToSelf(void)
849 ToolkitTestApplication application;
851 DummyControl dummy = DummyControl::New();
852 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
854 Property::Index index =1;
856 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
857 Toolkit::Visual::Base visual;
860 map[Visual::Property::TYPE] = Visual::COLOR;
861 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
863 visual = visualFactory.CreateVisual( map );
864 DALI_TEST_CHECK(visual);
866 // Register index with a color visual
867 dummyImpl.RegisterVisual( index, visual );
869 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
871 // ReRegister to self
872 dummyImpl.RegisterVisual( index, visual );
874 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
879 int UtcDaliControlImplRegisterVisualToSelf(void)
881 ToolkitTestApplication application;
883 Test::ObjectDestructionTracker objectDestructionTracker( application.GetCore().GetObjectRegistry() );
886 DummyControl dummy = DummyControl::New();
887 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
888 objectDestructionTracker.Start( dummy );
890 Property::Index index = 1;
892 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
893 Toolkit::Visual::Base visual;
896 map[Visual::Property::TYPE] = Visual::COLOR;
897 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
899 visual = visualFactory.CreateVisual( map );
900 DALI_TEST_CHECK(visual);
903 dummyImpl.RegisterVisual( index, visual );
905 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
906 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
909 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
914 int UtcDaliControlImplRegisterTwoVisuals(void)
916 ToolkitTestApplication application;
918 DummyControl dummy = DummyControl::New();
919 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
921 Property::Index index =1;
922 Property::Index index2 =2;
924 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
925 Toolkit::Visual::Base visual;
926 Toolkit::Visual::Base secondVisual;
929 map[Visual::Property::TYPE] = Visual::COLOR;
930 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
932 visual = visualFactory.CreateVisual( map );
933 DALI_TEST_CHECK(visual);
935 // Register index with a color visual
936 dummyImpl.RegisterVisual( index, visual );
938 Property::Map newMap;
939 newMap[Visual::Property::TYPE] = Visual::COLOR;
940 newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
942 secondVisual = visualFactory.CreateVisual( newMap );
943 DALI_TEST_CHECK( secondVisual );
945 // ReRegister with altered color visual
946 dummyImpl.RegisterVisual( index2, secondVisual );
948 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
949 DALI_TEST_CHECK( dummyImpl.GetVisual( index2 ) == secondVisual );
954 int UtcDaliControlImplRegisterUnregisterVisual(void)
956 ToolkitTestApplication application;
958 DummyControl dummy = DummyControl::New();
959 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
961 Property::Index index =1;
963 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
964 Toolkit::Visual::Base visual;
967 map[Visual::Property::TYPE] = Visual::COLOR;
968 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
970 visual = visualFactory.CreateVisual( map );
971 DALI_TEST_CHECK(visual);
973 // Register index with a color visual
974 dummyImpl.RegisterVisual( index, visual );
976 tet_infoline( "Add control with visual to stage and check renderer count is 1" );
977 application.GetScene().Add( dummy );
978 application.SendNotification();
979 application.Render();
981 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
982 DALI_TEST_EQUALS( dummy.GetRendererCount(), 1, TEST_LOCATION );
985 dummyImpl.UnregisterVisual( index );
987 tet_infoline( "Remove control with visual from stage and check renderer count is 0" );
988 application.GetScene().Remove( dummy );
989 application.SendNotification();
990 application.Render();
992 DALI_TEST_EQUALS( dummy.GetRendererCount(), 0, TEST_LOCATION );
993 DALI_TEST_CHECK( !dummyImpl.GetVisual( index ) );
998 int UtcDaliControlImplRegisterDisabledVisual(void)
1000 ToolkitTestApplication application;
1002 DummyControl dummy = DummyControl::New();
1003 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1005 Property::Index TEST_PROPERTY =1;
1007 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1008 Toolkit::Visual::Base visual;
1011 map[Visual::Property::TYPE] = Visual::COLOR;
1012 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1014 visual = visualFactory.CreateVisual( map );
1015 DALI_TEST_CHECK(visual);
1017 // Register index with a color visual
1018 dummyImpl.RegisterVisual( TEST_PROPERTY, visual, false );
1020 DALI_TEST_CHECK( dummyImpl.GetVisual( TEST_PROPERTY ) == visual );
1021 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1023 application.GetScene().Add(dummy);
1025 // Render and notify
1026 application.SendNotification();
1027 application.Render();
1029 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1031 DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1033 dummyImpl.EnableVisual( TEST_PROPERTY, true );
1035 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true );
1040 int UtcDaliControlImplDisableRegisteredVisual(void)
1042 ToolkitTestApplication application;
1044 DummyControl dummy = DummyControl::New();
1045 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1047 Property::Index TEST_PROPERTY =1;
1049 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1050 Toolkit::Visual::Base visual;
1053 map[Visual::Property::TYPE] = Visual::COLOR;
1054 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1056 visual = visualFactory.CreateVisual( map );
1057 DALI_TEST_CHECK(visual);
1059 // Register index with a color visual
1060 dummyImpl.RegisterVisual( TEST_PROPERTY, visual );
1062 application.GetScene().Add(dummy);
1064 // Render and notify
1065 application.SendNotification();
1066 application.Render();
1068 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true);
1070 DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1072 dummyImpl.EnableVisual( TEST_PROPERTY, false );
1074 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1079 int UtcDaliControlImplEnabledVisualParentRemovedFromStage(void)
1081 // Visual enabled but then parent removed from stage, test ensures visual/renderer are also removed from stage.
1082 // Then adding parent back to stage should automatically put visual/renderer back
1084 ToolkitTestApplication application;
1086 DummyControl dummy = DummyControl::New();
1087 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1089 Property::Index TEST_PROPERTY =1;
1091 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1092 Toolkit::Visual::Base visual;
1095 map[Visual::Property::TYPE] = Visual::COLOR;
1096 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1098 visual = visualFactory.CreateVisual( map );
1099 DALI_TEST_CHECK(visual);
1101 // Register index with a color visual
1102 dummyImpl.RegisterVisual( TEST_PROPERTY, visual, false );
1104 application.GetScene().Add(dummy);
1105 // Render and notify
1106 application.SendNotification();
1107 application.Render();
1109 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1110 DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1111 dummyImpl.EnableVisual( TEST_PROPERTY, true );
1113 // Render and notify
1114 application.SendNotification();
1115 application.Render();
1116 DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1118 // Remove control from stage, visual should be removed from stage too
1119 application.GetScene().Remove(dummy);
1120 // Render and notify
1121 application.SendNotification();
1122 application.Render();
1123 DALI_TEST_CHECK( dummy.GetRendererCount() == 0u );
1125 application.GetScene().Add(dummy);
1126 // Render and notify
1127 application.SendNotification();
1128 application.Render();
1129 DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1131 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true );
1136 int UtcDaliControlImplRegisterTwoVisualsAndEnableOnlyOne(void)
1138 // Register 2 visuals and enable by default
1140 // Remove control from stage then put it back
1141 // Check that only 1 visual/renderer is staged.
1143 ToolkitTestApplication application;
1145 DummyControl dummy = DummyControl::New();
1146 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1148 Property::Index TEST_PROPERTY1 =1;
1149 Property::Index TEST_PROPERTY2 =2;
1151 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1152 Toolkit::Visual::Base visual1;
1153 Toolkit::Visual::Base visual2;
1156 map[Visual::Property::TYPE] = Visual::COLOR;
1157 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1160 map[Visual::Property::TYPE] = Visual::COLOR;
1161 map[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
1163 visual1 = visualFactory.CreateVisual( map );
1164 DALI_TEST_CHECK(visual1);
1166 visual2 = visualFactory.CreateVisual( map );
1167 DALI_TEST_CHECK(visual2);
1169 // Register index with a color visual
1170 dummyImpl.RegisterVisual( TEST_PROPERTY1, visual1 );
1171 // Register second index with a color visual
1172 dummyImpl.RegisterVisual( TEST_PROPERTY2, visual2 );
1174 application.GetScene().Add(dummy);
1175 // Render and notify
1176 application.SendNotification();
1177 application.Render();
1179 DALI_TEST_CHECK( dummy.GetRendererCount() == 2u );
1180 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true );
1181 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true);
1182 DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1183 dummyImpl.EnableVisual( TEST_PROPERTY2, false );
1185 // Render and notify
1186 application.SendNotification();
1187 application.Render();
1188 DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1190 // Remove control from stage, visual should be removed from stage too
1191 application.GetScene().Remove(dummy);
1192 // Render and notify
1193 application.SendNotification();
1194 application.Render();
1195 DALI_TEST_CHECK( dummy.GetRendererCount() == 0u );
1197 application.GetScene().Add(dummy);
1198 // Render and notify
1199 application.SendNotification();
1200 application.Render();
1201 DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1203 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true );
1204 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY2 ) == false );
1208 int UtcDaliControlImplAutoClippingWithVisuals(void)
1210 ToolkitTestApplication application;
1212 tet_infoline( "Test to ensure a renderer does NOT get added when we've already registered a visual which we haven't enabled" );
1214 DummyControl control = DummyControl::New();
1215 DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
1217 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1218 Toolkit::Visual::Base visual;
1220 map[Visual::Property::TYPE] = Visual::COLOR;
1221 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1222 visual = visualFactory.CreateVisual( map );
1223 DALI_TEST_CHECK(visual);
1224 controlImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual, false );
1226 DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1228 control.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
1230 application.GetScene().Add( control );
1232 application.SendNotification();
1233 application.Render();
1235 DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1240 int UtcDaliControlImplAutoClippingWithVisualsAlreadyOnStage(void)
1242 ToolkitTestApplication application;
1244 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" );
1246 DummyControl control = DummyControl::New();
1247 DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
1249 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1250 Toolkit::Visual::Base visual;
1252 map[Visual::Property::TYPE] = Visual::COLOR;
1253 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1254 visual = visualFactory.CreateVisual( map );
1255 DALI_TEST_CHECK(visual);
1256 controlImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual, false );
1258 DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1260 application.GetScene().Add( control );
1262 application.SendNotification();
1263 application.Render();
1265 control.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
1267 application.SendNotification();
1268 application.Render();
1270 DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1275 int UtcDaliControlImplOnPinch(void)
1277 ToolkitTestApplication application;
1279 Control control = Control::New();
1280 control.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
1281 control.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::TOP_LEFT);
1282 application.GetScene().Add(control);
1284 application.SendNotification();
1285 application.Render();
1287 Toolkit::Internal::Control& impl = Toolkit::Internal::GetImplementation(control);
1288 impl.EnableGestureDetection(GestureType::PINCH);
1290 // Scale becomes 0.6666666
1291 TestStartPinch( application, Vector2( 5.0f, 20.0f ), Vector2( 35.0f, 20.0f ),
1292 Vector2( 10.0f, 20.0f ), Vector2( 30.0f, 20.0f ), 100 );
1294 DALI_TEST_EQUALS(0.666f, control.GetProperty( Actor::Property::SCALE_X).Get<float>(), 0.01f, TEST_LOCATION);