2 * Copyright (c) 2019 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.SetSize( Vector2(100.0f, 100.0f ) );
222 dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT);
223 Stage::GetCurrent().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 Stage::GetCurrent().Remove(dummy);
264 int UtcDaliControlImplChildAddAndRemove(void)
266 ToolkitTestApplication application;
269 DummyControl dummy = DummyControl::New( true );
270 Stage::GetCurrent().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 Stage::GetCurrent().Remove(dummy);
297 // Ensure full code coverage
299 DummyControl dummy = DummyControl::New();
300 Stage::GetCurrent().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 Stage::GetCurrent().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 Stage::GetCurrent().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 Stage::GetCurrent().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 = Stage::GetCurrent().GetLayer(0).GetChildCount();
348 DummyControl dummy = DummyControl::New();
350 DALI_TEST_EQUALS( Stage::GetCurrent().GetLayer(0).GetChildCount(), stageChildren, TEST_LOCATION );
351 Stage::GetCurrent().Add(dummy);
352 application.Render();
353 application.SendNotification();
354 DALI_TEST_EQUALS( Stage::GetCurrent().GetLayer(0).GetChildCount(), stageChildren + 1, TEST_LOCATION );
356 Stage::GetCurrent().Remove(dummy);
357 application.Render();
358 application.SendNotification();
359 DALI_TEST_EQUALS( Stage::GetCurrent().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 Stage::GetCurrent().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.SetSize( 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.GetCurrentSize().GetVectorXY(), TEST_LOCATION );
386 DALI_TEST_EQUALS( dummyImpl.sizeSetCalled, true, TEST_LOCATION );
388 Stage::GetCurrent().Remove(dummy);
394 int UtcDaliControlImplSizeSet2P(void)
396 ToolkitTestApplication application;
399 DummyControl dummy = DummyControl::New();
400 Stage::GetCurrent().Add(dummy);
402 Vector2 size(100.0f, 200.0f);
403 DALI_TEST_CHECK( size != dummy.GetCurrentSize().GetVectorXY() );
405 application.SendNotification();
406 application.Render();
410 application.SendNotification();
411 application.Render();
413 DALI_TEST_EQUALS(size, dummy.GetCurrentSize().GetVectorXY(), TEST_LOCATION);
415 Stage::GetCurrent().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 Stage::GetCurrent().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 Stage::GetCurrent().Remove(dummy);
446 // Ensure full code coverage
448 DummyControl dummy = DummyControl::New();
450 Stage::GetCurrent().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 Stage::GetCurrent().Remove(dummy);
466 ///////////////////////////////////////////////////////////////////////////////////////////////////
468 int UtcDaliControlImplTouchEvent(void)
470 ToolkitTestApplication application;
473 DummyControl dummy = DummyControl::New( true );
474 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
476 dummy.SetSize( Vector2( 100.0f, 100.0f ) );
477 dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT);
478 Stage::GetCurrent().Add(dummy);
480 application.Render();
481 application.SendNotification();
482 application.Render();
483 application.SendNotification();
485 DALI_TEST_EQUALS( dummyImpl.touchEventCalled, false, TEST_LOCATION );
486 Integration::TouchEvent touchEvent(1);
487 Integration::Point point;
488 point.SetDeviceId( 1 );
489 point.SetState( PointState::DOWN );
490 point.SetScreenPosition( Vector2( 20.0f, 20.0f ) );
491 touchEvent.AddPoint(point);
492 application.ProcessEvent(touchEvent);
493 DALI_TEST_EQUALS( dummyImpl.touchEventCalled, true, TEST_LOCATION );
495 Stage::GetCurrent().Remove(dummy);
498 // Ensure full code coverage
500 DummyControl dummy = DummyControl::New();
502 dummy.SetSize( Vector2( 100.0f, 100.0f ) );
503 dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT);
504 Stage::GetCurrent().Add(dummy);
506 application.Render();
507 application.SendNotification();
508 application.Render();
509 application.SendNotification();
511 Integration::TouchEvent touchEvent(1);
512 Integration::Point point;
513 point.SetDeviceId( 1 );
514 point.SetState( PointState::DOWN );
515 point.SetScreenPosition( Vector2( 20.0f, 20.0f ) );
516 touchEvent.AddPoint(point);
517 application.ProcessEvent(touchEvent);
519 Stage::GetCurrent().Remove(dummy);
524 int UtcDaliControlImplHoverEvent(void)
526 ToolkitTestApplication application;
529 DummyControl dummy = DummyControl::New( true );
530 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
532 dummy.SetSize( Vector2( 100.0f, 100.0f ) );
533 dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT);
534 Stage::GetCurrent().Add(dummy);
536 application.Render();
537 application.SendNotification();
538 application.Render();
539 application.SendNotification();
541 DALI_TEST_EQUALS( dummyImpl.hoverEventCalled, false, TEST_LOCATION );
542 Integration::HoverEvent event(1);
543 Integration::Point point;
544 point.SetDeviceId( 1 );
545 point.SetState( PointState::MOTION );
546 point.SetScreenPosition( Vector2( 20.0f, 20.0f ) );
547 event.AddPoint(point);
548 application.ProcessEvent( event );
549 DALI_TEST_EQUALS( dummyImpl.hoverEventCalled, true, TEST_LOCATION );
551 Stage::GetCurrent().Remove(dummy);
554 // Ensure full code coverage
556 DummyControl dummy = DummyControl::New();
558 dummy.SetSize( Vector2( 100.0f, 100.0f ) );
559 dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT);
560 Stage::GetCurrent().Add(dummy);
562 application.Render();
563 application.SendNotification();
564 application.Render();
565 application.SendNotification();
567 Integration::HoverEvent event(1);
568 Integration::Point point;
569 point.SetDeviceId( 1 );
570 point.SetState( PointState::MOTION );
571 point.SetScreenPosition( Vector2( 20.0f, 20.0f ) );
572 event.AddPoint(point);
573 application.ProcessEvent( event );
575 Stage::GetCurrent().Remove(dummy);
580 ///////////////////////////////////////////////////////////////////////////////////////////////////
583 int UtcDaliControlImplKeyEvent(void)
585 ToolkitTestApplication application;
588 DummyControl dummy = DummyControl::New( true );
589 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
591 Stage::GetCurrent().Add(dummy);
592 dummy.SetKeyInputFocus();
594 application.Render();
595 application.SendNotification();
596 application.Render();
597 application.SendNotification();
599 DALI_TEST_EQUALS( dummyImpl.keyEventCalled, false, TEST_LOCATION );
600 Integration::KeyEvent keyEvent;
601 application.ProcessEvent(keyEvent);
602 DALI_TEST_EQUALS( dummyImpl.keyEventCalled, true, TEST_LOCATION );
604 Stage::GetCurrent().Remove(dummy);
607 // Ensure full code coverage
609 DummyControl dummy = DummyControl::New();
611 Stage::GetCurrent().Add(dummy);
612 dummy.SetKeyInputFocus();
614 application.Render();
615 application.SendNotification();
616 application.Render();
617 application.SendNotification();
619 Integration::KeyEvent keyEvent;
620 application.ProcessEvent(keyEvent);
622 Stage::GetCurrent().Remove(dummy);
627 int UtcDaliControlImplKeyInputFocusGained(void)
629 ToolkitTestApplication application;
632 DummyControl dummy = DummyControl::New( true );
633 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
635 Stage::GetCurrent().Add(dummy);
637 DALI_TEST_EQUALS( dummyImpl.keyInputFocusGained, false, TEST_LOCATION );
639 dummy.SetKeyInputFocus();
641 DALI_TEST_EQUALS( dummyImpl.keyInputFocusGained, true, TEST_LOCATION );
643 Stage::GetCurrent().Remove(dummy);
646 // Ensure full code coverage
648 DummyControl dummy = DummyControl::New();
650 Stage::GetCurrent().Add(dummy);
651 dummy.SetKeyInputFocus();
652 Stage::GetCurrent().Remove(dummy);
657 int UtcDaliControlImplKeyInputFocusLost(void)
659 ToolkitTestApplication application;
662 DummyControl dummy = DummyControl::New( true );
663 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
665 Stage::GetCurrent().Add(dummy);
667 DALI_TEST_EQUALS( dummyImpl.keyInputFocusLost, false, TEST_LOCATION );
669 dummy.SetKeyInputFocus();
670 dummy.ClearKeyInputFocus();
672 DALI_TEST_EQUALS( dummyImpl.keyInputFocusLost, true, TEST_LOCATION );
674 Stage::GetCurrent().Remove(dummy);
677 // Ensure full code coverage
679 DummyControl dummy = DummyControl::New();
681 Stage::GetCurrent().Add(dummy);
682 dummy.SetKeyInputFocus();
683 dummy.ClearKeyInputFocus();
685 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
687 dummyImpl.IsKeyboardNavigationSupported();
688 dummyImpl.IsKeyboardFocusGroup();
690 Stage::GetCurrent().Remove(dummy);
695 int UtcDaliControlImplTypeRegistry(void)
697 ToolkitTestApplication application;
701 type = TypeRegistry::Get().GetTypeInfo( "Control" );
702 DALI_TEST_CHECK( type );
703 BaseHandle handle = type.CreateInstance();
704 DALI_TEST_CHECK( handle );
706 // Check if it's a control
707 DALI_TEST_CHECK( Control::DownCast(handle) );
712 ///////////////////////////////////////////////////////////////////////////////////////////////////
715 static bool WheelEventCallback(Actor actor, const WheelEvent& event)
721 int UtcDaliControlImplWheelEvent(void)
723 ToolkitTestApplication application;
726 DummyControl dummy = DummyControl::New( true );
727 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
729 dummy.SetSize( Vector2( 100.0f, 100.0f ) );
730 dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT);
731 Stage::GetCurrent().Add(dummy);
733 dummy.WheelEventSignal().Connect(&WheelEventCallback);
735 application.Render();
736 application.SendNotification();
737 application.Render();
738 application.SendNotification();
740 DALI_TEST_EQUALS( dummyImpl.wheelEventCalled, false, TEST_LOCATION );
742 // simulate a wheel event
743 Vector2 screenCoordinates( 10.0f, 10.0f );
744 Integration::WheelEvent event( Integration::WheelEvent::MOUSE_WHEEL, 0, 0u, screenCoordinates, 1, 1000u );
745 application.ProcessEvent( event );
746 DALI_TEST_EQUALS( dummyImpl.wheelEventCalled, true, TEST_LOCATION );
748 Stage::GetCurrent().Remove(dummy);
751 // Ensure full code coverage
753 DummyControl dummy = DummyControl::New();
755 dummy.SetSize( Vector2( 100.0f, 100.0f ) );
756 dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT);
757 Stage::GetCurrent().Add(dummy);
759 dummy.WheelEventSignal().Connect(&WheelEventCallback);
761 application.Render();
762 application.SendNotification();
763 application.Render();
764 application.SendNotification();
766 // simulate a wheel event
767 Vector2 screenCoordinates( 20.0f, 20.0f );
768 Integration::WheelEvent event( Integration::WheelEvent::MOUSE_WHEEL, 0, 0u, screenCoordinates, 1, 1000u );
769 application.ProcessEvent( event );
771 Stage::GetCurrent().Remove(dummy);
776 int UtcDaliControlImplSetStyleName(void)
778 ToolkitTestApplication application;
781 DummyControl dummy = DummyControl::New( true );
783 dummy.SetSize( Vector2( 100.0f, 100.0f ) );
784 dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT);
785 Stage::GetCurrent().Add(dummy);
787 dummy.SetStyleName("TestStyle");
789 DALI_TEST_CHECK( dummy.GetStyleName() == "TestStyle" );
791 Stage::GetCurrent().Remove(dummy);
796 int UtcDaliControlImplOnStyleChangeN(void)
798 ToolkitTestApplication application;
799 Control dummy = Control::New();
800 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
802 // test that style manager is being used, passing an empty handle does nothing but does not crash either
803 Dali::Toolkit::StyleManager styleManager;
804 controlImpl.OnStyleChange( styleManager, StyleChange::THEME_CHANGE );
805 // no crash so test passes
806 tet_result(TET_PASS);
812 int UtcDaliControlImplOnAccessibilityPanP(void)
814 ToolkitTestApplication application;
815 Control dummy = Control::New();
816 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
819 DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityPan( pan ), TEST_LOCATION );
824 int UtcDaliControlImplOnAccessibilityTouchP(void)
826 ToolkitTestApplication application;
827 Control dummy = Control::New();
828 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
830 DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityTouch( touch ), TEST_LOCATION );
835 int UtcDaliControlImplOnAccessibilityActivatedP(void)
837 ToolkitTestApplication application;
839 Control dummy = Control::New();
840 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
841 DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityActivated(), TEST_LOCATION );
843 // Invoke the control's activate action
844 TypeInfo type = TypeRegistry::Get().GetTypeInfo( "Control" );
845 DALI_TEST_CHECK( type );
847 BaseHandle handle = type.CreateInstance();
848 DALI_TEST_CHECK( handle );
850 Property::Map attributes;
851 DALI_TEST_EQUALS( false, handle.DoAction("accessibilityActivated", attributes), TEST_LOCATION );
856 int UtcDaliControlImplGetNextKeyboardFocusableActorP(void)
858 ToolkitTestApplication application;
859 Control dummy = Control::New();
860 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
862 Actor currentFocusedActor;
863 Actor result = controlImpl.GetNextKeyboardFocusableActor( currentFocusedActor, Control::KeyboardFocus::LEFT, false );
865 DALI_TEST_EQUALS( result, currentFocusedActor, TEST_LOCATION );
870 int UtcDaliControlImplRegisterThenReRegisterVisual(void)
872 ToolkitTestApplication application;
874 DummyControl dummy = DummyControl::New();
875 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
877 Property::Index index =1;
879 DALI_TEST_CHECK( !dummyImpl.GetVisual( index ) );
881 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
882 Toolkit::Visual::Base visual;
885 map[Visual::Property::TYPE] = Visual::COLOR;
886 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
888 visual = visualFactory.CreateVisual( map );
889 DALI_TEST_CHECK(visual);
891 // Register index with a color visual
892 dummyImpl.RegisterVisual( index, visual );
894 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
896 Property::Map newMap;
897 newMap[Visual::Property::TYPE] = Visual::COLOR;
898 newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
900 visual = visualFactory.CreateVisual( newMap );
901 DALI_TEST_CHECK(visual);
903 // ReRegister with altered color visual
904 dummyImpl.RegisterVisual( index, visual );
906 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
908 tet_result(TET_PASS);
913 int UtcDaliControlImplRegisterVisaulThenReRegisterToSelf(void)
915 ToolkitTestApplication application;
917 DummyControl dummy = DummyControl::New();
918 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
920 Property::Index index =1;
922 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
923 Toolkit::Visual::Base visual;
926 map[Visual::Property::TYPE] = Visual::COLOR;
927 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
929 visual = visualFactory.CreateVisual( map );
930 DALI_TEST_CHECK(visual);
932 // Register index with a color visual
933 dummyImpl.RegisterVisual( index, visual );
935 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
937 // ReRegister to self
938 dummyImpl.RegisterVisual( index, visual );
940 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
945 int UtcDaliControlImplRegisterVisualToSelf(void)
947 ToolkitTestApplication application;
949 Test::ObjectDestructionTracker objectDestructionTracker;
952 DummyControl dummy = DummyControl::New();
953 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
954 objectDestructionTracker.Start( dummy );
956 Property::Index index = 1;
958 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
959 Toolkit::Visual::Base visual;
962 map[Visual::Property::TYPE] = Visual::COLOR;
963 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
965 visual = visualFactory.CreateVisual( map );
966 DALI_TEST_CHECK(visual);
969 dummyImpl.RegisterVisual( index, visual );
971 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
972 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
975 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
980 int UtcDaliControlImplRegisterTwoVisuals(void)
982 ToolkitTestApplication application;
984 DummyControl dummy = DummyControl::New();
985 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
987 Property::Index index =1;
988 Property::Index index2 =2;
990 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
991 Toolkit::Visual::Base visual;
992 Toolkit::Visual::Base secondVisual;
995 map[Visual::Property::TYPE] = Visual::COLOR;
996 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
998 visual = visualFactory.CreateVisual( map );
999 DALI_TEST_CHECK(visual);
1001 // Register index with a color visual
1002 dummyImpl.RegisterVisual( index, visual );
1004 Property::Map newMap;
1005 newMap[Visual::Property::TYPE] = Visual::COLOR;
1006 newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
1008 secondVisual = visualFactory.CreateVisual( newMap );
1009 DALI_TEST_CHECK( secondVisual );
1011 // ReRegister with altered color visual
1012 dummyImpl.RegisterVisual( index2, secondVisual );
1014 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
1015 DALI_TEST_CHECK( dummyImpl.GetVisual( index2 ) == secondVisual );
1020 int UtcDaliControlImplRegisterUnregisterVisual(void)
1022 ToolkitTestApplication application;
1024 DummyControl dummy = DummyControl::New();
1025 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1027 Property::Index index =1;
1029 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1030 Toolkit::Visual::Base visual;
1033 map[Visual::Property::TYPE] = Visual::COLOR;
1034 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1036 visual = visualFactory.CreateVisual( map );
1037 DALI_TEST_CHECK(visual);
1039 // Register index with a color visual
1040 dummyImpl.RegisterVisual( index, visual );
1042 tet_infoline( "Add control with visual to stage and check renderer count is 1" );
1043 Stage::GetCurrent().Add( dummy );
1044 application.SendNotification();
1045 application.Render();
1047 DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
1048 DALI_TEST_EQUALS( dummy.GetRendererCount(), 1, TEST_LOCATION );
1050 // Unregister visual
1051 dummyImpl.UnregisterVisual( index );
1053 tet_infoline( "Remove control with visual from stage and check renderer count is 0" );
1054 Stage::GetCurrent().Remove( dummy );
1055 application.SendNotification();
1056 application.Render();
1058 DALI_TEST_EQUALS( dummy.GetRendererCount(), 0, TEST_LOCATION );
1059 DALI_TEST_CHECK( !dummyImpl.GetVisual( index ) );
1064 int UtcDaliControlImplRegisterDisabledVisual(void)
1066 ToolkitTestApplication application;
1068 DummyControl dummy = DummyControl::New();
1069 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1071 Property::Index TEST_PROPERTY =1;
1073 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1074 Toolkit::Visual::Base visual;
1077 map[Visual::Property::TYPE] = Visual::COLOR;
1078 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1080 visual = visualFactory.CreateVisual( map );
1081 DALI_TEST_CHECK(visual);
1083 // Register index with a color visual
1084 dummyImpl.RegisterVisual( TEST_PROPERTY, visual, false );
1086 DALI_TEST_CHECK( dummyImpl.GetVisual( TEST_PROPERTY ) == visual );
1087 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1089 Stage::GetCurrent().Add(dummy);
1091 // Render and notify
1092 application.SendNotification();
1093 application.Render();
1095 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1097 DALI_TEST_CHECK( dummy.OnStage() == true );
1099 dummyImpl.EnableVisual( TEST_PROPERTY, true );
1101 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true );
1106 int UtcDaliControlImplDisableRegisteredVisual(void)
1108 ToolkitTestApplication application;
1110 DummyControl dummy = DummyControl::New();
1111 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1113 Property::Index TEST_PROPERTY =1;
1115 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1116 Toolkit::Visual::Base visual;
1119 map[Visual::Property::TYPE] = Visual::COLOR;
1120 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1122 visual = visualFactory.CreateVisual( map );
1123 DALI_TEST_CHECK(visual);
1125 // Register index with a color visual
1126 dummyImpl.RegisterVisual( TEST_PROPERTY, visual );
1128 Stage::GetCurrent().Add(dummy);
1130 // Render and notify
1131 application.SendNotification();
1132 application.Render();
1134 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true);
1136 DALI_TEST_CHECK( dummy.OnStage() == true );
1138 dummyImpl.EnableVisual( TEST_PROPERTY, false );
1140 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1145 int UtcDaliControlImplEnabledVisualParentRemovedFromStage(void)
1147 // Visual enabled but then parent removed from stage, test ensures visual/renderer are also removed from stage.
1148 // Then adding parent back to stage should automatically put visual/renderer back
1150 ToolkitTestApplication application;
1152 DummyControl dummy = DummyControl::New();
1153 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1155 Property::Index TEST_PROPERTY =1;
1157 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1158 Toolkit::Visual::Base visual;
1161 map[Visual::Property::TYPE] = Visual::COLOR;
1162 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1164 visual = visualFactory.CreateVisual( map );
1165 DALI_TEST_CHECK(visual);
1167 // Register index with a color visual
1168 dummyImpl.RegisterVisual( TEST_PROPERTY, visual, false );
1170 Stage::GetCurrent().Add(dummy);
1171 // Render and notify
1172 application.SendNotification();
1173 application.Render();
1175 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1176 DALI_TEST_CHECK( dummy.OnStage() == true );
1177 dummyImpl.EnableVisual( TEST_PROPERTY, true );
1179 // Render and notify
1180 application.SendNotification();
1181 application.Render();
1182 DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1184 // Remove control from stage, visual should be removed from stage too
1185 Stage::GetCurrent().Remove(dummy);
1186 // Render and notify
1187 application.SendNotification();
1188 application.Render();
1189 DALI_TEST_CHECK( dummy.GetRendererCount() == 0u );
1191 Stage::GetCurrent().Add(dummy);
1192 // Render and notify
1193 application.SendNotification();
1194 application.Render();
1195 DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1197 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true );
1202 int UtcDaliControlImplRegisterTwoVisualsAndEnableOnlyOne(void)
1204 // Register 2 visuals and enable by default
1206 // Remove control from stage then put it back
1207 // Check that only 1 visual/renderer is staged.
1209 ToolkitTestApplication application;
1211 DummyControl dummy = DummyControl::New();
1212 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1214 Property::Index TEST_PROPERTY1 =1;
1215 Property::Index TEST_PROPERTY2 =2;
1217 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1218 Toolkit::Visual::Base visual1;
1219 Toolkit::Visual::Base visual2;
1222 map[Visual::Property::TYPE] = Visual::COLOR;
1223 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1226 map[Visual::Property::TYPE] = Visual::COLOR;
1227 map[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
1229 visual1 = visualFactory.CreateVisual( map );
1230 DALI_TEST_CHECK(visual1);
1232 visual2 = visualFactory.CreateVisual( map );
1233 DALI_TEST_CHECK(visual2);
1235 // Register index with a color visual
1236 dummyImpl.RegisterVisual( TEST_PROPERTY1, visual1 );
1237 // Register second index with a color visual
1238 dummyImpl.RegisterVisual( TEST_PROPERTY2, visual2 );
1240 Stage::GetCurrent().Add(dummy);
1241 // Render and notify
1242 application.SendNotification();
1243 application.Render();
1245 DALI_TEST_CHECK( dummy.GetRendererCount() == 2u );
1246 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true );
1247 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true);
1248 DALI_TEST_CHECK( dummy.OnStage() == true );
1249 dummyImpl.EnableVisual( TEST_PROPERTY2, false );
1251 // Render and notify
1252 application.SendNotification();
1253 application.Render();
1254 DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1256 // Remove control from stage, visual should be removed from stage too
1257 Stage::GetCurrent().Remove(dummy);
1258 // Render and notify
1259 application.SendNotification();
1260 application.Render();
1261 DALI_TEST_CHECK( dummy.GetRendererCount() == 0u );
1263 Stage::GetCurrent().Add(dummy);
1264 // Render and notify
1265 application.SendNotification();
1266 application.Render();
1267 DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1269 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true );
1270 DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY2 ) == false );
1274 int UtcDaliControlImplAutoClippingWithVisuals(void)
1276 ToolkitTestApplication application;
1278 tet_infoline( "Test to ensure a renderer does NOT get added when we've already registered a visual which we haven't enabled" );
1280 DummyControl control = DummyControl::New();
1281 DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
1283 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1284 Toolkit::Visual::Base visual;
1286 map[Visual::Property::TYPE] = Visual::COLOR;
1287 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1288 visual = visualFactory.CreateVisual( map );
1289 DALI_TEST_CHECK(visual);
1290 controlImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual, false );
1292 DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1294 control.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
1296 Stage::GetCurrent().Add( control );
1298 application.SendNotification();
1299 application.Render();
1301 DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1306 int UtcDaliControlImplAutoClippingWithVisualsAlreadyOnStage(void)
1308 ToolkitTestApplication application;
1310 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" );
1312 DummyControl control = DummyControl::New();
1313 DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
1315 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1316 Toolkit::Visual::Base visual;
1318 map[Visual::Property::TYPE] = Visual::COLOR;
1319 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1320 visual = visualFactory.CreateVisual( map );
1321 DALI_TEST_CHECK(visual);
1322 controlImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual, false );
1324 DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1326 Stage::GetCurrent().Add( control );
1328 application.SendNotification();
1329 application.Render();
1331 control.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
1333 application.SendNotification();
1334 application.Render();
1336 DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );