Remove unused Retention policy
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-ControlImpl.cpp
1 /*
2  * Copyright (c) 2019 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17
18 #include <iostream>
19 #include <stdlib.h>
20
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"
25
26 #include <dali.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>
33
34
35 #include "dummy-control.h"
36
37 using namespace Dali;
38 using namespace Dali::Toolkit;
39
40 void utc_dali_toolkit_control_impl_startup(void)
41 {
42   test_return_value = TET_UNDEF;
43 }
44
45 void utc_dali_toolkit_control_impl_cleanup(void)
46 {
47   test_return_value = TET_PASS;
48 }
49
50 int UtcDaliControlImplNew(void)
51 {
52   ToolkitTestApplication application;  // Exceptions require ToolkitTestApplication
53
54   Control control;
55
56   DALI_TEST_CHECK( !Control::DownCast(control) );
57
58   control = Toolkit::Internal::Control::New();
59
60   DALI_TEST_CHECK( Control::DownCast(control) );
61   END_TEST;
62 }
63
64
65 int UtcDaliControlImplEnableGestureDetector(void)
66 {
67   ToolkitTestApplication application;
68
69   // Enable individually
70   {
71     DummyControl dummy = DummyControl::New();
72     DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
73
74     DALI_TEST_CHECK( !dummyImpl.GetPinchGestureDetector() );
75     dummyImpl.EnableGestureDetection(Gesture::Pinch);
76     DALI_TEST_CHECK( dummyImpl.GetPinchGestureDetector() );
77
78     DALI_TEST_CHECK( !dummyImpl.GetPanGestureDetector() );
79     dummyImpl.EnableGestureDetection(Gesture::Pan);
80     DALI_TEST_CHECK( dummyImpl.GetPanGestureDetector() );
81
82     DALI_TEST_CHECK( !dummyImpl.GetTapGestureDetector() );
83     dummyImpl.EnableGestureDetection(Gesture::Tap);
84     DALI_TEST_CHECK( dummyImpl.GetTapGestureDetector() );
85
86     DALI_TEST_CHECK( !dummyImpl.GetLongPressGestureDetector() );
87     dummyImpl.EnableGestureDetection(Gesture::LongPress);
88     DALI_TEST_CHECK( dummyImpl.GetLongPressGestureDetector() );
89   }
90
91   // Enable All
92   {
93     DummyControl dummy = DummyControl::New();
94     DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
95
96     DALI_TEST_CHECK( !dummyImpl.GetPinchGestureDetector() );
97     DALI_TEST_CHECK( !dummyImpl.GetPanGestureDetector() );
98     DALI_TEST_CHECK( !dummyImpl.GetTapGestureDetector() );
99     DALI_TEST_CHECK( !dummyImpl.GetLongPressGestureDetector() );
100
101     dummyImpl.EnableGestureDetection( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
102
103     DALI_TEST_CHECK( dummyImpl.GetPinchGestureDetector() );
104     DALI_TEST_CHECK( dummyImpl.GetPanGestureDetector() );
105     DALI_TEST_CHECK( dummyImpl.GetTapGestureDetector() );
106     DALI_TEST_CHECK( dummyImpl.GetLongPressGestureDetector() );
107
108     // Enable when already enabled
109
110     dummyImpl.EnableGestureDetection( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
111
112     DALI_TEST_CHECK( dummyImpl.GetPinchGestureDetector() );
113     DALI_TEST_CHECK( dummyImpl.GetPanGestureDetector() );
114     DALI_TEST_CHECK( dummyImpl.GetTapGestureDetector() );
115     DALI_TEST_CHECK( dummyImpl.GetLongPressGestureDetector() );
116   }
117   END_TEST;
118 }
119
120 int UtcDaliControlImplDisableGestureDetector(void)
121 {
122   ToolkitTestApplication application;
123
124   // Disable individually
125   {
126     DummyControl dummy = DummyControl::New();
127     DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
128
129     dummyImpl.EnableGestureDetection( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
130
131     DALI_TEST_CHECK( dummyImpl.GetPinchGestureDetector() );
132     dummyImpl.DisableGestureDetection(Gesture::Pinch);
133     DALI_TEST_CHECK( !dummyImpl.GetPinchGestureDetector() );
134
135     DALI_TEST_CHECK( dummyImpl.GetPanGestureDetector() );
136     dummyImpl.DisableGestureDetection(Gesture::Pan);
137     DALI_TEST_CHECK( !dummyImpl.GetPanGestureDetector() );
138
139     DALI_TEST_CHECK( dummyImpl.GetTapGestureDetector() );
140     dummyImpl.DisableGestureDetection(Gesture::Tap);
141     DALI_TEST_CHECK( !dummyImpl.GetTapGestureDetector() );
142
143     DALI_TEST_CHECK( dummyImpl.GetLongPressGestureDetector() );
144     dummyImpl.DisableGestureDetection(Gesture::LongPress);
145     DALI_TEST_CHECK( !dummyImpl.GetLongPressGestureDetector() );
146   }
147
148   // Disable All
149   {
150     DummyControl dummy = DummyControl::New();
151     DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
152
153     dummyImpl.EnableGestureDetection( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
154
155     DALI_TEST_CHECK( dummyImpl.GetPinchGestureDetector() );
156     DALI_TEST_CHECK( dummyImpl.GetPanGestureDetector() );
157     DALI_TEST_CHECK( dummyImpl.GetTapGestureDetector() );
158     DALI_TEST_CHECK( dummyImpl.GetLongPressGestureDetector() );
159
160     dummyImpl.DisableGestureDetection( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
161
162     DALI_TEST_CHECK( !dummyImpl.GetPinchGestureDetector() );
163     DALI_TEST_CHECK( !dummyImpl.GetPanGestureDetector() );
164     DALI_TEST_CHECK( !dummyImpl.GetTapGestureDetector() );
165     DALI_TEST_CHECK( !dummyImpl.GetLongPressGestureDetector() );
166   }
167
168   // Disable When not enabled
169   {
170     DummyControl dummy = DummyControl::New();
171     DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
172
173     DALI_TEST_CHECK( !dummyImpl.GetPinchGestureDetector() );
174     DALI_TEST_CHECK( !dummyImpl.GetPanGestureDetector() );
175     DALI_TEST_CHECK( !dummyImpl.GetTapGestureDetector() );
176     DALI_TEST_CHECK( !dummyImpl.GetLongPressGestureDetector() );
177
178     dummyImpl.DisableGestureDetection( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
179
180     DALI_TEST_CHECK( !dummyImpl.GetPinchGestureDetector() );
181     DALI_TEST_CHECK( !dummyImpl.GetPanGestureDetector() );
182     DALI_TEST_CHECK( !dummyImpl.GetTapGestureDetector() );
183     DALI_TEST_CHECK( !dummyImpl.GetLongPressGestureDetector() );
184   }
185
186   // Ensure control is detached if gesture detector is not deleted
187   {
188     DummyControl dummy = DummyControl::New();
189     DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
190
191     dummyImpl.EnableGestureDetection( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
192
193     PinchGestureDetector pinch = dummyImpl.GetPinchGestureDetector();
194     PanGestureDetector pan   = dummyImpl.GetPanGestureDetector();
195     TapGestureDetector tap = dummyImpl.GetTapGestureDetector();
196     LongPressGestureDetector longPress = dummyImpl.GetLongPressGestureDetector();
197
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 );
202
203     dummyImpl.DisableGestureDetection( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
204
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 );
209   }
210   END_TEST;
211 }
212
213 int UtcDaliControlImplOnGestureMethods(void)
214 {
215   ToolkitTestApplication application;
216
217   // Check gesture actually happens
218   {
219     DummyControl dummy = DummyControl::New(true);
220     dummy.SetSize( Vector2(100.0f, 100.0f ) );
221
222     dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT);
223     Stage::GetCurrent().Add(dummy);
224
225     // Render and notify a couple of times
226     application.SendNotification();
227     application.Render();
228     application.SendNotification();
229     application.Render();
230
231     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
232     dummyImpl.EnableGestureDetection( Gesture::Type(Gesture::Pinch | Gesture::Pan | Gesture::Tap | Gesture::LongPress) );
233
234     DALI_TEST_CHECK( dummyImpl.pinchCalled == false );
235
236     TestGeneratePinch(application);
237
238     DALI_TEST_CHECK( dummyImpl.pinchCalled == true );
239
240     DALI_TEST_CHECK( dummyImpl.panCalled == false );
241
242     TestGenerateMiniPan(application);
243
244     DALI_TEST_CHECK( dummyImpl.panCalled == true );
245
246     DALI_TEST_CHECK( dummyImpl.tapCalled == false );
247
248     TestGenerateTap(application);
249
250     DALI_TEST_CHECK( dummyImpl.tapCalled == true );
251
252     DALI_TEST_CHECK( dummyImpl.longPressCalled == false );
253
254     TestGenerateLongPress(application);
255
256     DALI_TEST_CHECK( dummyImpl.longPressCalled == true );
257
258     Stage::GetCurrent().Remove(dummy);
259   }
260
261   END_TEST;
262 }
263
264 int UtcDaliControlImplChildAddAndRemove(void)
265 {
266   ToolkitTestApplication application;
267
268   {
269     DummyControl dummy = DummyControl::New( true );
270     Stage::GetCurrent().Add(dummy);
271     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
272
273     application.Render();
274     application.SendNotification();
275
276     DALI_TEST_EQUALS( dummyImpl.childAddCalled, false, TEST_LOCATION );
277     DALI_TEST_EQUALS( dummy.GetChildCount(), 0u, TEST_LOCATION );
278     Actor actor = Actor::New();
279     dummy.Add(actor);
280     DALI_TEST_EQUALS( dummyImpl.childAddCalled, true, TEST_LOCATION );
281     DALI_TEST_EQUALS( dummy.GetChildCount(), 1u, TEST_LOCATION );
282
283     application.Render();
284     application.SendNotification();
285
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 );
290
291     application.Render();
292     application.SendNotification();
293
294     Stage::GetCurrent().Remove(dummy);
295   }
296
297   // Ensure full code coverage
298   {
299     DummyControl dummy = DummyControl::New();
300     Stage::GetCurrent().Add(dummy);
301
302     application.Render();
303     application.SendNotification();
304
305     DALI_TEST_EQUALS( dummy.GetChildCount(), 0u, TEST_LOCATION );
306     Actor actor = Actor::New();
307     dummy.Add(actor);
308     DALI_TEST_EQUALS( dummy.GetChildCount(), 1u, TEST_LOCATION );
309
310     application.Render();
311     application.SendNotification();
312
313     dummy.Remove( actor );
314     DALI_TEST_EQUALS( dummy.GetChildCount(), 0u, TEST_LOCATION );
315
316     application.Render();
317     application.SendNotification();
318
319     Stage::GetCurrent().Remove(dummy);
320   }
321   END_TEST;
322 }
323
324 int UtcDaliControlImplStageConnection(void)
325 {
326   ToolkitTestApplication application;
327
328   {
329     DummyControl dummy = DummyControl::New( true );
330     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
331
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 );
337
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 );
343   }
344
345   // Ensure full code coverage
346   {
347     unsigned int stageChildren = Stage::GetCurrent().GetLayer(0).GetChildCount();
348     DummyControl dummy = DummyControl::New();
349
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 );
355
356     Stage::GetCurrent().Remove(dummy);
357     application.Render();
358     application.SendNotification();
359     DALI_TEST_EQUALS( Stage::GetCurrent().GetLayer(0).GetChildCount(), stageChildren, TEST_LOCATION );
360   }
361   END_TEST;
362 }
363
364 int UtcDaliControlImplSizeSetP(void)
365 {
366   ToolkitTestApplication application;
367
368   {
369     DummyControl dummy = DummyControl::New( true );
370     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
371
372     Stage::GetCurrent().Add(dummy);
373     application.Render();
374     application.SendNotification();
375
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 );
379
380     DALI_TEST_EQUALS( dummyImpl.sizeSetCalled, false, TEST_LOCATION ); // Size is going to get negotiated, no onSizeSet called
381
382     application.SendNotification();
383     application.Render();
384
385     DALI_TEST_EQUALS( size, dummy.GetCurrentSize().GetVectorXY(), TEST_LOCATION );
386     DALI_TEST_EQUALS( dummyImpl.sizeSetCalled, true, TEST_LOCATION );
387
388     Stage::GetCurrent().Remove(dummy);
389   }
390
391   END_TEST;
392 }
393
394 int UtcDaliControlImplSizeSet2P(void)
395 {
396   ToolkitTestApplication application;
397
398   {
399     DummyControl dummy = DummyControl::New();
400     Stage::GetCurrent().Add(dummy);
401
402     Vector2 size(100.0f, 200.0f);
403     DALI_TEST_CHECK( size != dummy.GetCurrentSize().GetVectorXY() );
404
405     application.SendNotification();
406     application.Render();
407
408     dummy.SetSize(size);
409
410     application.SendNotification();
411     application.Render();
412
413     DALI_TEST_EQUALS(size, dummy.GetCurrentSize().GetVectorXY(), TEST_LOCATION);
414
415     Stage::GetCurrent().Remove(dummy);
416   }
417   END_TEST;
418 }
419
420
421 int UtcDaliControlImplSizeAnimation(void)
422 {
423   ToolkitTestApplication application;
424
425   {
426     DummyControl dummy = DummyControl::New( true );
427     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
428
429     Stage::GetCurrent().Add(dummy);
430
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 ) );
434     animation.Play();
435
436     application.Render();
437     application.SendNotification();
438     application.Render();
439     application.SendNotification();
440
441     DALI_TEST_EQUALS( dummyImpl.sizeAnimationCalled, true, TEST_LOCATION );
442
443     Stage::GetCurrent().Remove(dummy);
444   }
445
446   // Ensure full code coverage
447   {
448     DummyControl dummy = DummyControl::New();
449
450     Stage::GetCurrent().Add(dummy);
451
452     Animation animation = Animation::New(1.0f);
453     animation.AnimateTo( Property( dummy, Actor::Property::SIZE ), Vector3( 100.0f, 150.0f, 200.0f ) );
454     animation.Play();
455
456     application.Render();
457     application.SendNotification();
458     application.Render();
459     application.SendNotification();
460
461     Stage::GetCurrent().Remove(dummy);
462   }
463   END_TEST;
464 }
465
466 ///////////////////////////////////////////////////////////////////////////////////////////////////
467
468 int UtcDaliControlImplTouchEvent(void)
469 {
470   ToolkitTestApplication application;
471
472   {
473     DummyControl dummy = DummyControl::New( true );
474     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
475
476     dummy.SetSize( Vector2( 100.0f, 100.0f ) );
477     dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT);
478     Stage::GetCurrent().Add(dummy);
479
480     application.Render();
481     application.SendNotification();
482     application.Render();
483     application.SendNotification();
484
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 );
494
495     Stage::GetCurrent().Remove(dummy);
496   }
497
498   // Ensure full code coverage
499   {
500     DummyControl dummy = DummyControl::New();
501
502     dummy.SetSize( Vector2( 100.0f, 100.0f ) );
503     dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT);
504     Stage::GetCurrent().Add(dummy);
505
506     application.Render();
507     application.SendNotification();
508     application.Render();
509     application.SendNotification();
510
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);
518
519     Stage::GetCurrent().Remove(dummy);
520   }
521   END_TEST;
522 }
523
524 int UtcDaliControlImplHoverEvent(void)
525 {
526   ToolkitTestApplication application;
527
528   {
529     DummyControl dummy = DummyControl::New( true );
530     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
531
532     dummy.SetSize( Vector2( 100.0f, 100.0f ) );
533     dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT);
534     Stage::GetCurrent().Add(dummy);
535
536     application.Render();
537     application.SendNotification();
538     application.Render();
539     application.SendNotification();
540
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 );
550
551     Stage::GetCurrent().Remove(dummy);
552   }
553
554   // Ensure full code coverage
555   {
556     DummyControl dummy = DummyControl::New();
557
558     dummy.SetSize( Vector2( 100.0f, 100.0f ) );
559     dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT);
560     Stage::GetCurrent().Add(dummy);
561
562     application.Render();
563     application.SendNotification();
564     application.Render();
565     application.SendNotification();
566
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 );
574
575     Stage::GetCurrent().Remove(dummy);
576   }
577   END_TEST;
578 }
579
580 ///////////////////////////////////////////////////////////////////////////////////////////////////
581
582
583 int UtcDaliControlImplKeyEvent(void)
584 {
585   ToolkitTestApplication application;
586
587   {
588     DummyControl dummy = DummyControl::New( true );
589     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
590
591     Stage::GetCurrent().Add(dummy);
592     dummy.SetKeyInputFocus();
593
594     application.Render();
595     application.SendNotification();
596     application.Render();
597     application.SendNotification();
598
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 );
603
604     Stage::GetCurrent().Remove(dummy);
605   }
606
607   // Ensure full code coverage
608   {
609     DummyControl dummy = DummyControl::New();
610
611     Stage::GetCurrent().Add(dummy);
612     dummy.SetKeyInputFocus();
613
614     application.Render();
615     application.SendNotification();
616     application.Render();
617     application.SendNotification();
618
619     Integration::KeyEvent keyEvent;
620     application.ProcessEvent(keyEvent);
621
622     Stage::GetCurrent().Remove(dummy);
623   }
624   END_TEST;
625 }
626
627 int UtcDaliControlImplKeyInputFocusGained(void)
628 {
629   ToolkitTestApplication application;
630
631   {
632     DummyControl dummy = DummyControl::New( true );
633     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
634
635     Stage::GetCurrent().Add(dummy);
636
637     DALI_TEST_EQUALS( dummyImpl.keyInputFocusGained, false, TEST_LOCATION );
638
639     dummy.SetKeyInputFocus();
640
641     DALI_TEST_EQUALS( dummyImpl.keyInputFocusGained, true, TEST_LOCATION );
642
643     Stage::GetCurrent().Remove(dummy);
644   }
645
646   // Ensure full code coverage
647   {
648     DummyControl dummy = DummyControl::New();
649
650     Stage::GetCurrent().Add(dummy);
651     dummy.SetKeyInputFocus();
652     Stage::GetCurrent().Remove(dummy);
653   }
654   END_TEST;
655 }
656
657 int UtcDaliControlImplKeyInputFocusLost(void)
658 {
659   ToolkitTestApplication application;
660
661   {
662     DummyControl dummy = DummyControl::New( true );
663     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
664
665     Stage::GetCurrent().Add(dummy);
666
667     DALI_TEST_EQUALS( dummyImpl.keyInputFocusLost, false, TEST_LOCATION );
668
669     dummy.SetKeyInputFocus();
670     dummy.ClearKeyInputFocus();
671
672     DALI_TEST_EQUALS( dummyImpl.keyInputFocusLost, true, TEST_LOCATION );
673
674     Stage::GetCurrent().Remove(dummy);
675   }
676
677   // Ensure full code coverage
678   {
679     DummyControl dummy = DummyControl::New();
680
681     Stage::GetCurrent().Add(dummy);
682     dummy.SetKeyInputFocus();
683     dummy.ClearKeyInputFocus();
684
685     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
686
687     dummyImpl.IsKeyboardNavigationSupported();
688     dummyImpl.IsKeyboardFocusGroup();
689
690     Stage::GetCurrent().Remove(dummy);
691   }
692   END_TEST;
693 }
694
695 int UtcDaliControlImplTypeRegistry(void)
696 {
697   ToolkitTestApplication application;
698
699   // Register Type
700   TypeInfo type;
701   type = TypeRegistry::Get().GetTypeInfo( "Control" );
702   DALI_TEST_CHECK( type );
703   BaseHandle handle = type.CreateInstance();
704   DALI_TEST_CHECK( handle );
705
706   // Check if it's a control
707   DALI_TEST_CHECK( Control::DownCast(handle) );
708   END_TEST;
709 }
710
711
712 ///////////////////////////////////////////////////////////////////////////////////////////////////
713 namespace
714 {
715 static bool WheelEventCallback(Actor actor, const WheelEvent& event)
716 {
717   return false;
718 }
719 }
720
721 int UtcDaliControlImplWheelEvent(void)
722 {
723   ToolkitTestApplication application;
724
725   {
726     DummyControl dummy = DummyControl::New( true );
727     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
728
729     dummy.SetSize( Vector2( 100.0f, 100.0f ) );
730     dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT);
731     Stage::GetCurrent().Add(dummy);
732
733     dummy.WheelEventSignal().Connect(&WheelEventCallback);
734
735     application.Render();
736     application.SendNotification();
737     application.Render();
738     application.SendNotification();
739
740     DALI_TEST_EQUALS( dummyImpl.wheelEventCalled, false, TEST_LOCATION );
741
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 );
747
748     Stage::GetCurrent().Remove(dummy);
749   }
750
751   // Ensure full code coverage
752   {
753     DummyControl dummy = DummyControl::New();
754
755     dummy.SetSize( Vector2( 100.0f, 100.0f ) );
756     dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT);
757     Stage::GetCurrent().Add(dummy);
758
759     dummy.WheelEventSignal().Connect(&WheelEventCallback);
760
761     application.Render();
762     application.SendNotification();
763     application.Render();
764     application.SendNotification();
765
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 );
770
771     Stage::GetCurrent().Remove(dummy);
772   }
773   END_TEST;
774 }
775
776 int UtcDaliControlImplSetStyleName(void)
777 {
778   ToolkitTestApplication application;
779
780   {
781     DummyControl dummy = DummyControl::New( true );
782
783     dummy.SetSize( Vector2( 100.0f, 100.0f ) );
784     dummy.SetAnchorPoint(AnchorPoint::TOP_LEFT);
785     Stage::GetCurrent().Add(dummy);
786
787     dummy.SetStyleName("TestStyle");
788
789     DALI_TEST_CHECK( dummy.GetStyleName() == "TestStyle" );
790
791     Stage::GetCurrent().Remove(dummy);
792   }
793   END_TEST;
794 }
795
796 int UtcDaliControlImplOnStyleChangeN(void)
797 {
798   ToolkitTestApplication application;
799   Control dummy = Control::New();
800   Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
801
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);
807
808   END_TEST;
809 }
810
811
812 int UtcDaliControlImplOnAccessibilityPanP(void)
813 {
814   ToolkitTestApplication application;
815   Control dummy = Control::New();
816   Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
817
818   PanGesture pan;
819   DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityPan( pan ), TEST_LOCATION );
820
821   END_TEST;
822 }
823
824 int UtcDaliControlImplOnAccessibilityTouchP(void)
825 {
826   ToolkitTestApplication application;
827   Control dummy = Control::New();
828   Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
829   TouchEvent touch;
830   DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityTouch( touch ), TEST_LOCATION );
831
832   END_TEST;
833 }
834
835 int UtcDaliControlImplOnAccessibilityActivatedP(void)
836 {
837   ToolkitTestApplication application;
838
839   Control dummy = Control::New();
840   Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
841   DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityActivated(), TEST_LOCATION );
842
843   // Invoke the control's activate action
844   TypeInfo type = TypeRegistry::Get().GetTypeInfo( "Control" );
845   DALI_TEST_CHECK( type );
846
847   BaseHandle handle = type.CreateInstance();
848   DALI_TEST_CHECK( handle );
849
850   Property::Map attributes;
851   DALI_TEST_EQUALS( false, handle.DoAction("accessibilityActivated",  attributes), TEST_LOCATION );
852
853   END_TEST;
854 }
855
856 int UtcDaliControlImplGetNextKeyboardFocusableActorP(void)
857 {
858   ToolkitTestApplication application;
859   Control dummy = Control::New();
860   Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
861
862   Actor currentFocusedActor;
863   Actor result = controlImpl.GetNextKeyboardFocusableActor( currentFocusedActor, Control::KeyboardFocus::LEFT, false );
864
865   DALI_TEST_EQUALS( result, currentFocusedActor, TEST_LOCATION );
866
867   END_TEST;
868 }
869
870 int UtcDaliControlImplRegisterThenReRegisterVisual(void)
871 {
872   ToolkitTestApplication application;
873
874   DummyControl dummy = DummyControl::New();
875   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
876
877   Property::Index index =1;
878
879   DALI_TEST_CHECK( !dummyImpl.GetVisual( index )  );
880
881   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
882   Toolkit::Visual::Base visual;
883
884   Property::Map map;
885   map[Visual::Property::TYPE] = Visual::COLOR;
886   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
887
888   visual = visualFactory.CreateVisual( map );
889   DALI_TEST_CHECK(visual);
890
891   // Register index with a color visual
892   dummyImpl.RegisterVisual( index, visual );
893
894   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
895
896   Property::Map newMap;
897   newMap[Visual::Property::TYPE] = Visual::COLOR;
898   newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
899
900   visual = visualFactory.CreateVisual( newMap );
901   DALI_TEST_CHECK(visual);
902
903   // ReRegister with altered color visual
904   dummyImpl.RegisterVisual( index, visual );
905
906   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
907
908   tet_result(TET_PASS);
909
910   END_TEST;
911 }
912
913 int UtcDaliControlImplRegisterVisaulThenReRegisterToSelf(void)
914 {
915   ToolkitTestApplication application;
916
917   DummyControl dummy = DummyControl::New();
918   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
919
920   Property::Index index =1;
921
922   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
923   Toolkit::Visual::Base visual;
924
925   Property::Map map;
926   map[Visual::Property::TYPE] = Visual::COLOR;
927   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
928
929   visual = visualFactory.CreateVisual( map );
930   DALI_TEST_CHECK(visual);
931
932   // Register index with a color visual
933   dummyImpl.RegisterVisual( index, visual );
934
935   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
936
937   // ReRegister to self
938   dummyImpl.RegisterVisual( index, visual );
939
940   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
941
942   END_TEST;
943 }
944
945 int UtcDaliControlImplRegisterVisualToSelf(void)
946 {
947   ToolkitTestApplication application;
948
949   Test::ObjectDestructionTracker objectDestructionTracker;
950
951   {
952     DummyControl dummy = DummyControl::New();
953     DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
954     objectDestructionTracker.Start( dummy );
955
956     Property::Index index = 1;
957
958     Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
959     Toolkit::Visual::Base visual;
960
961     Property::Map map;
962     map[Visual::Property::TYPE] = Visual::COLOR;
963     map[ColorVisual::Property::MIX_COLOR] = Color::RED;
964
965     visual = visualFactory.CreateVisual( map );
966     DALI_TEST_CHECK(visual);
967
968     // Register to self
969     dummyImpl.RegisterVisual( index, visual );
970
971     DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
972     DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
973   }
974
975   DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
976
977   END_TEST;
978 }
979
980 int UtcDaliControlImplRegisterTwoVisuals(void)
981 {
982   ToolkitTestApplication application;
983
984   DummyControl dummy = DummyControl::New();
985   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
986
987   Property::Index index =1;
988   Property::Index index2 =2;
989
990   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
991   Toolkit::Visual::Base visual;
992   Toolkit::Visual::Base secondVisual;
993
994   Property::Map map;
995   map[Visual::Property::TYPE] = Visual::COLOR;
996   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
997
998   visual = visualFactory.CreateVisual( map );
999   DALI_TEST_CHECK(visual);
1000
1001   // Register index with a color visual
1002   dummyImpl.RegisterVisual( index, visual );
1003
1004   Property::Map newMap;
1005   newMap[Visual::Property::TYPE] = Visual::COLOR;
1006   newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
1007
1008   secondVisual = visualFactory.CreateVisual( newMap );
1009   DALI_TEST_CHECK( secondVisual );
1010
1011   // ReRegister with altered color visual
1012   dummyImpl.RegisterVisual( index2, secondVisual );
1013
1014   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
1015   DALI_TEST_CHECK( dummyImpl.GetVisual( index2 ) == secondVisual );
1016
1017   END_TEST;
1018 }
1019
1020 int UtcDaliControlImplRegisterUnregisterVisual(void)
1021 {
1022   ToolkitTestApplication application;
1023
1024   DummyControl dummy = DummyControl::New();
1025   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1026
1027   Property::Index index =1;
1028
1029   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1030   Toolkit::Visual::Base visual;
1031
1032   Property::Map map;
1033   map[Visual::Property::TYPE] = Visual::COLOR;
1034   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1035
1036   visual = visualFactory.CreateVisual( map );
1037   DALI_TEST_CHECK(visual);
1038
1039   // Register index with a color visual
1040   dummyImpl.RegisterVisual( index, visual );
1041
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();
1046
1047   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
1048   DALI_TEST_EQUALS( dummy.GetRendererCount(), 1, TEST_LOCATION );
1049
1050   // Unregister visual
1051   dummyImpl.UnregisterVisual( index );
1052
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();
1057
1058   DALI_TEST_EQUALS( dummy.GetRendererCount(), 0, TEST_LOCATION );
1059   DALI_TEST_CHECK( !dummyImpl.GetVisual( index ) );
1060
1061   END_TEST;
1062 }
1063
1064 int UtcDaliControlImplRegisterDisabledVisual(void)
1065 {
1066   ToolkitTestApplication application;
1067
1068   DummyControl dummy = DummyControl::New();
1069   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1070
1071   Property::Index TEST_PROPERTY =1;
1072
1073   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1074   Toolkit::Visual::Base visual;
1075
1076   Property::Map map;
1077   map[Visual::Property::TYPE] = Visual::COLOR;
1078   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1079
1080   visual = visualFactory.CreateVisual( map );
1081   DALI_TEST_CHECK(visual);
1082
1083   // Register index with a color visual
1084   dummyImpl.RegisterVisual( TEST_PROPERTY, visual, false );
1085
1086   DALI_TEST_CHECK( dummyImpl.GetVisual( TEST_PROPERTY ) == visual );
1087   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1088
1089   Stage::GetCurrent().Add(dummy);
1090
1091   // Render and notify
1092   application.SendNotification();
1093   application.Render();
1094
1095   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1096
1097   DALI_TEST_CHECK( dummy.OnStage() == true );
1098
1099   dummyImpl.EnableVisual( TEST_PROPERTY, true );
1100
1101   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true );
1102
1103   END_TEST;
1104 }
1105
1106 int UtcDaliControlImplDisableRegisteredVisual(void)
1107 {
1108   ToolkitTestApplication application;
1109
1110   DummyControl dummy = DummyControl::New();
1111   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1112
1113   Property::Index TEST_PROPERTY =1;
1114
1115   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1116   Toolkit::Visual::Base visual;
1117
1118   Property::Map map;
1119   map[Visual::Property::TYPE] = Visual::COLOR;
1120   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1121
1122   visual = visualFactory.CreateVisual( map );
1123   DALI_TEST_CHECK(visual);
1124
1125   // Register index with a color visual
1126   dummyImpl.RegisterVisual( TEST_PROPERTY, visual );
1127
1128   Stage::GetCurrent().Add(dummy);
1129
1130   // Render and notify
1131   application.SendNotification();
1132   application.Render();
1133
1134   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true);
1135
1136   DALI_TEST_CHECK( dummy.OnStage() == true );
1137
1138   dummyImpl.EnableVisual( TEST_PROPERTY, false );
1139
1140   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1141
1142   END_TEST;
1143 }
1144
1145 int UtcDaliControlImplEnabledVisualParentRemovedFromStage(void)
1146 {
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
1149
1150   ToolkitTestApplication application;
1151
1152   DummyControl dummy = DummyControl::New();
1153   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1154
1155   Property::Index TEST_PROPERTY =1;
1156
1157   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1158   Toolkit::Visual::Base visual;
1159
1160   Property::Map map;
1161   map[Visual::Property::TYPE] = Visual::COLOR;
1162   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1163
1164   visual = visualFactory.CreateVisual( map );
1165   DALI_TEST_CHECK(visual);
1166
1167   // Register index with a color visual
1168   dummyImpl.RegisterVisual( TEST_PROPERTY, visual, false );
1169
1170   Stage::GetCurrent().Add(dummy);
1171   // Render and notify
1172   application.SendNotification();
1173   application.Render();
1174
1175   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1176   DALI_TEST_CHECK( dummy.OnStage() == true );
1177   dummyImpl.EnableVisual( TEST_PROPERTY, true );
1178
1179   // Render and notify
1180   application.SendNotification();
1181   application.Render();
1182   DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1183
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 );
1190
1191   Stage::GetCurrent().Add(dummy);
1192   // Render and notify
1193   application.SendNotification();
1194   application.Render();
1195   DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1196
1197   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true );
1198
1199   END_TEST;
1200 }
1201
1202 int UtcDaliControlImplRegisterTwoVisualsAndEnableOnlyOne(void)
1203 {
1204   // Register 2 visuals and enable by default
1205   // Disable 1 visual
1206   // Remove control from stage then put it back
1207   // Check that only 1 visual/renderer is staged.
1208
1209   ToolkitTestApplication application;
1210
1211   DummyControl dummy = DummyControl::New();
1212   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1213
1214   Property::Index TEST_PROPERTY1 =1;
1215   Property::Index TEST_PROPERTY2 =2;
1216
1217   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1218   Toolkit::Visual::Base visual1;
1219   Toolkit::Visual::Base visual2;
1220
1221   Property::Map map;
1222   map[Visual::Property::TYPE] = Visual::COLOR;
1223   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1224
1225   Property::Map map2;
1226   map[Visual::Property::TYPE] = Visual::COLOR;
1227   map[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
1228
1229   visual1 = visualFactory.CreateVisual( map );
1230   DALI_TEST_CHECK(visual1);
1231
1232   visual2 = visualFactory.CreateVisual( map );
1233   DALI_TEST_CHECK(visual2);
1234
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 );
1239
1240   Stage::GetCurrent().Add(dummy);
1241   // Render and notify
1242   application.SendNotification();
1243   application.Render();
1244
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 );
1250
1251   // Render and notify
1252   application.SendNotification();
1253   application.Render();
1254   DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1255
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 );
1262
1263   Stage::GetCurrent().Add(dummy);
1264   // Render and notify
1265   application.SendNotification();
1266   application.Render();
1267   DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1268
1269   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true );
1270   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY2 ) == false );
1271
1272   END_TEST;
1273 }
1274 int UtcDaliControlImplAutoClippingWithVisuals(void)
1275 {
1276   ToolkitTestApplication application;
1277
1278   tet_infoline( "Test to ensure a renderer does NOT get added when we've already registered a visual which we haven't enabled" );
1279
1280   DummyControl control = DummyControl::New();
1281   DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
1282
1283   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1284   Toolkit::Visual::Base visual;
1285   Property::Map map;
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 );
1291
1292   DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1293
1294   control.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
1295
1296   Stage::GetCurrent().Add( control );
1297
1298   application.SendNotification();
1299   application.Render();
1300
1301   DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1302
1303   END_TEST;
1304 }
1305
1306 int UtcDaliControlImplAutoClippingWithVisualsAlreadyOnStage(void)
1307 {
1308   ToolkitTestApplication application;
1309
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" );
1311
1312   DummyControl control = DummyControl::New();
1313   DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
1314
1315   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1316   Toolkit::Visual::Base visual;
1317   Property::Map map;
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 );
1323
1324   DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1325
1326   Stage::GetCurrent().Add( control );
1327
1328   application.SendNotification();
1329   application.Render();
1330
1331   control.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
1332
1333   application.SendNotification();
1334   application.Render();
1335
1336   DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1337
1338   END_TEST;
1339 }