Merge "(Vector) Change event processing" into devel/master
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-ControlImpl.cpp
1 /*
2  * Copyright (c) 2020 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.SetProperty( Actor::Property::SIZE, Vector2(100.0f, 100.0f ) );
221
222     dummy.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::TOP_LEFT);
223     application.GetScene().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     application.GetScene().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     application.GetScene().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     application.GetScene().Remove(dummy);
295   }
296
297   // Ensure full code coverage
298   {
299     DummyControl dummy = DummyControl::New();
300     application.GetScene().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     application.GetScene().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     application.GetScene().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     application.GetScene().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 = application.GetScene().GetLayer(0).GetChildCount();
348     DummyControl dummy = DummyControl::New();
349
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 );
355
356     application.GetScene().Remove(dummy);
357     application.Render();
358     application.SendNotification();
359     DALI_TEST_EQUALS( application.GetScene().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     application.GetScene().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.SetProperty( Actor::Property::SIZE, 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.GetCurrentProperty< Vector3 >( Actor::Property::SIZE ).GetVectorXY(), TEST_LOCATION );
386     DALI_TEST_EQUALS( dummyImpl.sizeSetCalled, true, TEST_LOCATION );
387
388     application.GetScene().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     application.GetScene().Add(dummy);
401
402     Vector2 size(100.0f, 200.0f);
403     DALI_TEST_CHECK( size != dummy.GetCurrentProperty< Vector3 >( Actor::Property::SIZE ).GetVectorXY() );
404
405     application.SendNotification();
406     application.Render();
407
408     dummy.SetProperty( Actor::Property::SIZE, size);
409
410     application.SendNotification();
411     application.Render();
412
413     DALI_TEST_EQUALS(size, dummy.GetCurrentProperty< Vector3 >( Actor::Property::SIZE ).GetVectorXY(), TEST_LOCATION);
414
415     application.GetScene().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     application.GetScene().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     application.GetScene().Remove(dummy);
444   }
445
446   // Ensure full code coverage
447   {
448     DummyControl dummy = DummyControl::New();
449
450     application.GetScene().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     application.GetScene().Remove(dummy);
462   }
463   END_TEST;
464 }
465
466 ///////////////////////////////////////////////////////////////////////////////////////////////////
467
468 int UtcDaliControlImplHoverEvent(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.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
477     dummy.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::TOP_LEFT);
478     application.GetScene().Add(dummy);
479
480     application.Render();
481     application.SendNotification();
482     application.Render();
483     application.SendNotification();
484
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 );
494
495     application.GetScene().Remove(dummy);
496   }
497
498   // Ensure full code coverage
499   {
500     DummyControl dummy = DummyControl::New();
501
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);
505
506     application.Render();
507     application.SendNotification();
508     application.Render();
509     application.SendNotification();
510
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 );
518
519     application.GetScene().Remove(dummy);
520   }
521   END_TEST;
522 }
523
524 ///////////////////////////////////////////////////////////////////////////////////////////////////
525
526
527 int UtcDaliControlImplKeyEvent(void)
528 {
529   ToolkitTestApplication application;
530
531   {
532     DummyControl dummy = DummyControl::New( true );
533     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
534
535     application.GetScene().Add(dummy);
536     dummy.SetKeyInputFocus();
537
538     application.Render();
539     application.SendNotification();
540     application.Render();
541     application.SendNotification();
542
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 );
547
548     application.GetScene().Remove(dummy);
549   }
550
551   // Ensure full code coverage
552   {
553     DummyControl dummy = DummyControl::New();
554
555     application.GetScene().Add(dummy);
556     dummy.SetKeyInputFocus();
557
558     application.Render();
559     application.SendNotification();
560     application.Render();
561     application.SendNotification();
562
563     Integration::KeyEvent keyEvent;
564     application.ProcessEvent(keyEvent);
565
566     application.GetScene().Remove(dummy);
567   }
568   END_TEST;
569 }
570
571 int UtcDaliControlImplKeyInputFocusGained(void)
572 {
573   ToolkitTestApplication application;
574
575   {
576     DummyControl dummy = DummyControl::New( true );
577     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
578
579     application.GetScene().Add(dummy);
580
581     DALI_TEST_EQUALS( dummyImpl.keyInputFocusGained, false, TEST_LOCATION );
582
583     dummy.SetKeyInputFocus();
584
585     DALI_TEST_EQUALS( dummyImpl.keyInputFocusGained, true, TEST_LOCATION );
586
587     application.GetScene().Remove(dummy);
588   }
589
590   // Ensure full code coverage
591   {
592     DummyControl dummy = DummyControl::New();
593
594     application.GetScene().Add(dummy);
595     dummy.SetKeyInputFocus();
596     application.GetScene().Remove(dummy);
597   }
598   END_TEST;
599 }
600
601 int UtcDaliControlImplKeyInputFocusLost(void)
602 {
603   ToolkitTestApplication application;
604
605   {
606     DummyControl dummy = DummyControl::New( true );
607     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
608
609     application.GetScene().Add(dummy);
610
611     DALI_TEST_EQUALS( dummyImpl.keyInputFocusLost, false, TEST_LOCATION );
612
613     dummy.SetKeyInputFocus();
614     dummy.ClearKeyInputFocus();
615
616     DALI_TEST_EQUALS( dummyImpl.keyInputFocusLost, true, TEST_LOCATION );
617
618     application.GetScene().Remove(dummy);
619   }
620
621   // Ensure full code coverage
622   {
623     DummyControl dummy = DummyControl::New();
624
625     application.GetScene().Add(dummy);
626     dummy.SetKeyInputFocus();
627     dummy.ClearKeyInputFocus();
628
629     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
630
631     dummyImpl.IsKeyboardNavigationSupported();
632     dummyImpl.IsKeyboardFocusGroup();
633
634     application.GetScene().Remove(dummy);
635   }
636   END_TEST;
637 }
638
639 int UtcDaliControlImplTypeRegistry(void)
640 {
641   ToolkitTestApplication application;
642
643   // Register Type
644   TypeInfo type;
645   type = TypeRegistry::Get().GetTypeInfo( "Control" );
646   DALI_TEST_CHECK( type );
647   BaseHandle handle = type.CreateInstance();
648   DALI_TEST_CHECK( handle );
649
650   // Check if it's a control
651   DALI_TEST_CHECK( Control::DownCast(handle) );
652   END_TEST;
653 }
654
655
656 ///////////////////////////////////////////////////////////////////////////////////////////////////
657 namespace
658 {
659 static bool WheelEventCallback(Actor actor, const WheelEvent& event)
660 {
661   return false;
662 }
663 }
664
665 int UtcDaliControlImplWheelEvent(void)
666 {
667   ToolkitTestApplication application;
668
669   {
670     DummyControl dummy = DummyControl::New( true );
671     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
672
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);
676
677     dummy.WheelEventSignal().Connect(&WheelEventCallback);
678
679     application.Render();
680     application.SendNotification();
681     application.Render();
682     application.SendNotification();
683
684     DALI_TEST_EQUALS( dummyImpl.wheelEventCalled, false, TEST_LOCATION );
685
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 );
691
692     application.GetScene().Remove(dummy);
693   }
694
695   // Ensure full code coverage
696   {
697     DummyControl dummy = DummyControl::New();
698
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);
702
703     dummy.WheelEventSignal().Connect(&WheelEventCallback);
704
705     application.Render();
706     application.SendNotification();
707     application.Render();
708     application.SendNotification();
709
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 );
714
715     application.GetScene().Remove(dummy);
716   }
717   END_TEST;
718 }
719
720 int UtcDaliControlImplSetStyleName(void)
721 {
722   ToolkitTestApplication application;
723
724   {
725     DummyControl dummy = DummyControl::New( true );
726
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);
730
731     dummy.SetStyleName("TestStyle");
732
733     DALI_TEST_CHECK( dummy.GetStyleName() == "TestStyle" );
734
735     application.GetScene().Remove(dummy);
736   }
737   END_TEST;
738 }
739
740 int UtcDaliControlImplOnStyleChangeN(void)
741 {
742   ToolkitTestApplication application;
743   Control dummy = Control::New();
744   Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
745
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);
751
752   END_TEST;
753 }
754
755
756 int UtcDaliControlImplOnAccessibilityPanP(void)
757 {
758   ToolkitTestApplication application;
759   Control dummy = Control::New();
760   Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
761
762   PanGesture pan;
763   DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityPan( pan ), TEST_LOCATION );
764
765   END_TEST;
766 }
767
768 int UtcDaliControlImplOnAccessibilityTouchP(void)
769 {
770   ToolkitTestApplication application;
771   Control dummy = Control::New();
772   Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
773   TouchEvent touch;
774   DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityTouch( touch ), TEST_LOCATION );
775
776   END_TEST;
777 }
778
779 int UtcDaliControlImplOnAccessibilityActivatedP(void)
780 {
781   ToolkitTestApplication application;
782
783   Control dummy = Control::New();
784   Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
785   DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityActivated(), TEST_LOCATION );
786
787   // Invoke the control's activate action
788   TypeInfo type = TypeRegistry::Get().GetTypeInfo( "Control" );
789   DALI_TEST_CHECK( type );
790
791   BaseHandle handle = type.CreateInstance();
792   DALI_TEST_CHECK( handle );
793
794   Property::Map attributes;
795   DALI_TEST_EQUALS( false, handle.DoAction("accessibilityActivated",  attributes), TEST_LOCATION );
796
797   END_TEST;
798 }
799
800 int UtcDaliControlImplGetNextKeyboardFocusableActorP(void)
801 {
802   ToolkitTestApplication application;
803   Control dummy = Control::New();
804   Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
805
806   Actor currentFocusedActor;
807   Actor result = controlImpl.GetNextKeyboardFocusableActor( currentFocusedActor, Control::KeyboardFocus::LEFT, false );
808
809   DALI_TEST_EQUALS( result, currentFocusedActor, TEST_LOCATION );
810
811   END_TEST;
812 }
813
814 int UtcDaliControlImplRegisterThenReRegisterVisual(void)
815 {
816   ToolkitTestApplication application;
817
818   DummyControl dummy = DummyControl::New();
819   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
820
821   Property::Index index =1;
822
823   DALI_TEST_CHECK( !dummyImpl.GetVisual( index )  );
824
825   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
826   Toolkit::Visual::Base visual;
827
828   Property::Map map;
829   map[Visual::Property::TYPE] = Visual::COLOR;
830   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
831
832   visual = visualFactory.CreateVisual( map );
833   DALI_TEST_CHECK(visual);
834
835   // Register index with a color visual
836   dummyImpl.RegisterVisual( index, visual );
837
838   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
839
840   Property::Map newMap;
841   newMap[Visual::Property::TYPE] = Visual::COLOR;
842   newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
843
844   visual = visualFactory.CreateVisual( newMap );
845   DALI_TEST_CHECK(visual);
846
847   // ReRegister with altered color visual
848   dummyImpl.RegisterVisual( index, visual );
849
850   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
851
852   tet_result(TET_PASS);
853
854   END_TEST;
855 }
856
857 int UtcDaliControlImplRegisterVisaulThenReRegisterToSelf(void)
858 {
859   ToolkitTestApplication application;
860
861   DummyControl dummy = DummyControl::New();
862   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
863
864   Property::Index index =1;
865
866   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
867   Toolkit::Visual::Base visual;
868
869   Property::Map map;
870   map[Visual::Property::TYPE] = Visual::COLOR;
871   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
872
873   visual = visualFactory.CreateVisual( map );
874   DALI_TEST_CHECK(visual);
875
876   // Register index with a color visual
877   dummyImpl.RegisterVisual( index, visual );
878
879   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
880
881   // ReRegister to self
882   dummyImpl.RegisterVisual( index, visual );
883
884   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
885
886   END_TEST;
887 }
888
889 int UtcDaliControlImplRegisterVisualToSelf(void)
890 {
891   ToolkitTestApplication application;
892
893   Test::ObjectDestructionTracker objectDestructionTracker( application.GetCore().GetObjectRegistry() );
894
895   {
896     DummyControl dummy = DummyControl::New();
897     DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
898     objectDestructionTracker.Start( dummy );
899
900     Property::Index index = 1;
901
902     Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
903     Toolkit::Visual::Base visual;
904
905     Property::Map map;
906     map[Visual::Property::TYPE] = Visual::COLOR;
907     map[ColorVisual::Property::MIX_COLOR] = Color::RED;
908
909     visual = visualFactory.CreateVisual( map );
910     DALI_TEST_CHECK(visual);
911
912     // Register to self
913     dummyImpl.RegisterVisual( index, visual );
914
915     DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
916     DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
917   }
918
919   DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
920
921   END_TEST;
922 }
923
924 int UtcDaliControlImplRegisterTwoVisuals(void)
925 {
926   ToolkitTestApplication application;
927
928   DummyControl dummy = DummyControl::New();
929   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
930
931   Property::Index index =1;
932   Property::Index index2 =2;
933
934   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
935   Toolkit::Visual::Base visual;
936   Toolkit::Visual::Base secondVisual;
937
938   Property::Map map;
939   map[Visual::Property::TYPE] = Visual::COLOR;
940   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
941
942   visual = visualFactory.CreateVisual( map );
943   DALI_TEST_CHECK(visual);
944
945   // Register index with a color visual
946   dummyImpl.RegisterVisual( index, visual );
947
948   Property::Map newMap;
949   newMap[Visual::Property::TYPE] = Visual::COLOR;
950   newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
951
952   secondVisual = visualFactory.CreateVisual( newMap );
953   DALI_TEST_CHECK( secondVisual );
954
955   // ReRegister with altered color visual
956   dummyImpl.RegisterVisual( index2, secondVisual );
957
958   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
959   DALI_TEST_CHECK( dummyImpl.GetVisual( index2 ) == secondVisual );
960
961   END_TEST;
962 }
963
964 int UtcDaliControlImplRegisterUnregisterVisual(void)
965 {
966   ToolkitTestApplication application;
967
968   DummyControl dummy = DummyControl::New();
969   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
970
971   Property::Index index =1;
972
973   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
974   Toolkit::Visual::Base visual;
975
976   Property::Map map;
977   map[Visual::Property::TYPE] = Visual::COLOR;
978   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
979
980   visual = visualFactory.CreateVisual( map );
981   DALI_TEST_CHECK(visual);
982
983   // Register index with a color visual
984   dummyImpl.RegisterVisual( index, visual );
985
986   tet_infoline( "Add control with visual to stage and check renderer count is 1" );
987   application.GetScene().Add( dummy );
988   application.SendNotification();
989   application.Render();
990
991   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
992   DALI_TEST_EQUALS( dummy.GetRendererCount(), 1, TEST_LOCATION );
993
994   // Unregister visual
995   dummyImpl.UnregisterVisual( index );
996
997   tet_infoline( "Remove control with visual from stage and check renderer count is 0" );
998   application.GetScene().Remove( dummy );
999   application.SendNotification();
1000   application.Render();
1001
1002   DALI_TEST_EQUALS( dummy.GetRendererCount(), 0, TEST_LOCATION );
1003   DALI_TEST_CHECK( !dummyImpl.GetVisual( index ) );
1004
1005   END_TEST;
1006 }
1007
1008 int UtcDaliControlImplRegisterDisabledVisual(void)
1009 {
1010   ToolkitTestApplication application;
1011
1012   DummyControl dummy = DummyControl::New();
1013   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1014
1015   Property::Index TEST_PROPERTY =1;
1016
1017   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1018   Toolkit::Visual::Base visual;
1019
1020   Property::Map map;
1021   map[Visual::Property::TYPE] = Visual::COLOR;
1022   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1023
1024   visual = visualFactory.CreateVisual( map );
1025   DALI_TEST_CHECK(visual);
1026
1027   // Register index with a color visual
1028   dummyImpl.RegisterVisual( TEST_PROPERTY, visual, false );
1029
1030   DALI_TEST_CHECK( dummyImpl.GetVisual( TEST_PROPERTY ) == visual );
1031   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1032
1033   application.GetScene().Add(dummy);
1034
1035   // Render and notify
1036   application.SendNotification();
1037   application.Render();
1038
1039   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1040
1041   DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1042
1043   dummyImpl.EnableVisual( TEST_PROPERTY, true );
1044
1045   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true );
1046
1047   END_TEST;
1048 }
1049
1050 int UtcDaliControlImplDisableRegisteredVisual(void)
1051 {
1052   ToolkitTestApplication application;
1053
1054   DummyControl dummy = DummyControl::New();
1055   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1056
1057   Property::Index TEST_PROPERTY =1;
1058
1059   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1060   Toolkit::Visual::Base visual;
1061
1062   Property::Map map;
1063   map[Visual::Property::TYPE] = Visual::COLOR;
1064   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1065
1066   visual = visualFactory.CreateVisual( map );
1067   DALI_TEST_CHECK(visual);
1068
1069   // Register index with a color visual
1070   dummyImpl.RegisterVisual( TEST_PROPERTY, visual );
1071
1072   application.GetScene().Add(dummy);
1073
1074   // Render and notify
1075   application.SendNotification();
1076   application.Render();
1077
1078   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true);
1079
1080   DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1081
1082   dummyImpl.EnableVisual( TEST_PROPERTY, false );
1083
1084   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1085
1086   END_TEST;
1087 }
1088
1089 int UtcDaliControlImplEnabledVisualParentRemovedFromStage(void)
1090 {
1091   // Visual enabled but then parent removed from stage, test ensures visual/renderer are also removed from stage.
1092   // Then adding parent back to stage should automatically put visual/renderer back
1093
1094   ToolkitTestApplication application;
1095
1096   DummyControl dummy = DummyControl::New();
1097   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1098
1099   Property::Index TEST_PROPERTY =1;
1100
1101   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1102   Toolkit::Visual::Base visual;
1103
1104   Property::Map map;
1105   map[Visual::Property::TYPE] = Visual::COLOR;
1106   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1107
1108   visual = visualFactory.CreateVisual( map );
1109   DALI_TEST_CHECK(visual);
1110
1111   // Register index with a color visual
1112   dummyImpl.RegisterVisual( TEST_PROPERTY, visual, false );
1113
1114   application.GetScene().Add(dummy);
1115   // Render and notify
1116   application.SendNotification();
1117   application.Render();
1118
1119   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1120   DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1121   dummyImpl.EnableVisual( TEST_PROPERTY, true );
1122
1123   // Render and notify
1124   application.SendNotification();
1125   application.Render();
1126   DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1127
1128   // Remove control from stage, visual should be removed from stage too
1129   application.GetScene().Remove(dummy);
1130   // Render and notify
1131   application.SendNotification();
1132   application.Render();
1133   DALI_TEST_CHECK( dummy.GetRendererCount() == 0u );
1134
1135   application.GetScene().Add(dummy);
1136   // Render and notify
1137   application.SendNotification();
1138   application.Render();
1139   DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1140
1141   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true );
1142
1143   END_TEST;
1144 }
1145
1146 int UtcDaliControlImplRegisterTwoVisualsAndEnableOnlyOne(void)
1147 {
1148   // Register 2 visuals and enable by default
1149   // Disable 1 visual
1150   // Remove control from stage then put it back
1151   // Check that only 1 visual/renderer is staged.
1152
1153   ToolkitTestApplication application;
1154
1155   DummyControl dummy = DummyControl::New();
1156   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1157
1158   Property::Index TEST_PROPERTY1 =1;
1159   Property::Index TEST_PROPERTY2 =2;
1160
1161   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1162   Toolkit::Visual::Base visual1;
1163   Toolkit::Visual::Base visual2;
1164
1165   Property::Map map;
1166   map[Visual::Property::TYPE] = Visual::COLOR;
1167   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1168
1169   Property::Map map2;
1170   map[Visual::Property::TYPE] = Visual::COLOR;
1171   map[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
1172
1173   visual1 = visualFactory.CreateVisual( map );
1174   DALI_TEST_CHECK(visual1);
1175
1176   visual2 = visualFactory.CreateVisual( map );
1177   DALI_TEST_CHECK(visual2);
1178
1179   // Register index with a color visual
1180   dummyImpl.RegisterVisual( TEST_PROPERTY1, visual1 );
1181   // Register second index with a color visual
1182   dummyImpl.RegisterVisual( TEST_PROPERTY2, visual2 );
1183
1184   application.GetScene().Add(dummy);
1185   // Render and notify
1186   application.SendNotification();
1187   application.Render();
1188
1189   DALI_TEST_CHECK( dummy.GetRendererCount() == 2u );
1190   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true );
1191   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true);
1192   DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1193   dummyImpl.EnableVisual( TEST_PROPERTY2, false );
1194
1195   // Render and notify
1196   application.SendNotification();
1197   application.Render();
1198   DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1199
1200   // Remove control from stage, visual should be removed from stage too
1201   application.GetScene().Remove(dummy);
1202   // Render and notify
1203   application.SendNotification();
1204   application.Render();
1205   DALI_TEST_CHECK( dummy.GetRendererCount() == 0u );
1206
1207   application.GetScene().Add(dummy);
1208   // Render and notify
1209   application.SendNotification();
1210   application.Render();
1211   DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1212
1213   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true );
1214   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY2 ) == false );
1215
1216   END_TEST;
1217 }
1218 int UtcDaliControlImplAutoClippingWithVisuals(void)
1219 {
1220   ToolkitTestApplication application;
1221
1222   tet_infoline( "Test to ensure a renderer does NOT get added when we've already registered a visual which we haven't enabled" );
1223
1224   DummyControl control = DummyControl::New();
1225   DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
1226
1227   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1228   Toolkit::Visual::Base visual;
1229   Property::Map map;
1230   map[Visual::Property::TYPE] = Visual::COLOR;
1231   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1232   visual = visualFactory.CreateVisual( map );
1233   DALI_TEST_CHECK(visual);
1234   controlImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual, false );
1235
1236   DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1237
1238   control.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
1239
1240   application.GetScene().Add( control );
1241
1242   application.SendNotification();
1243   application.Render();
1244
1245   DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1246
1247   END_TEST;
1248 }
1249
1250 int UtcDaliControlImplAutoClippingWithVisualsAlreadyOnStage(void)
1251 {
1252   ToolkitTestApplication application;
1253
1254   tet_infoline( "Test to ensure a renderer does NOT get added when we've already registered a visual which we haven't enabled and we're already on the stage" );
1255
1256   DummyControl control = DummyControl::New();
1257   DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
1258
1259   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1260   Toolkit::Visual::Base visual;
1261   Property::Map map;
1262   map[Visual::Property::TYPE] = Visual::COLOR;
1263   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1264   visual = visualFactory.CreateVisual( map );
1265   DALI_TEST_CHECK(visual);
1266   controlImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual, false );
1267
1268   DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1269
1270   application.GetScene().Add( control );
1271
1272   application.SendNotification();
1273   application.Render();
1274
1275   control.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
1276
1277   application.SendNotification();
1278   application.Render();
1279
1280   DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1281
1282   END_TEST;
1283 }
1284
1285 int UtcDaliControlImplOnPinch(void)
1286 {
1287   ToolkitTestApplication application;
1288
1289   Control control = Control::New();
1290   control.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
1291   control.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::TOP_LEFT);
1292   application.GetScene().Add(control);
1293
1294   application.SendNotification();
1295   application.Render();
1296
1297   Toolkit::Internal::Control& impl = Toolkit::Internal::GetImplementation(control);
1298   impl.EnableGestureDetection(Gesture::Pinch);
1299
1300   // Scale becomes 0.6666666
1301   TestStartPinch( application,  Vector2( 5.0f, 20.0f ), Vector2( 35.0f, 20.0f ),
1302                                 Vector2( 10.0f, 20.0f ), Vector2( 30.0f, 20.0f ), 100 );
1303
1304   DALI_TEST_EQUALS(0.666f, control.GetProperty( Actor::Property::SCALE_X).Get<float>(), 0.01f, TEST_LOCATION);
1305
1306   END_TEST;
1307
1308 }