baa6b9ee7f2bfe536fbde013c794d70af55c8681
[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(GestureType::PINCH);
76     DALI_TEST_CHECK( dummyImpl.GetPinchGestureDetector() );
77
78     DALI_TEST_CHECK( !dummyImpl.GetPanGestureDetector() );
79     dummyImpl.EnableGestureDetection(GestureType::PAN);
80     DALI_TEST_CHECK( dummyImpl.GetPanGestureDetector() );
81
82     DALI_TEST_CHECK( !dummyImpl.GetTapGestureDetector() );
83     dummyImpl.EnableGestureDetection(GestureType::TAP);
84     DALI_TEST_CHECK( dummyImpl.GetTapGestureDetector() );
85
86     DALI_TEST_CHECK( !dummyImpl.GetLongPressGestureDetector() );
87     dummyImpl.EnableGestureDetection(GestureType::LONG_PRESS);
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( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
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( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
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( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
130
131     DALI_TEST_CHECK( dummyImpl.GetPinchGestureDetector() );
132     dummyImpl.DisableGestureDetection(GestureType::PINCH);
133     DALI_TEST_CHECK( !dummyImpl.GetPinchGestureDetector() );
134
135     DALI_TEST_CHECK( dummyImpl.GetPanGestureDetector() );
136     dummyImpl.DisableGestureDetection(GestureType::PAN);
137     DALI_TEST_CHECK( !dummyImpl.GetPanGestureDetector() );
138
139     DALI_TEST_CHECK( dummyImpl.GetTapGestureDetector() );
140     dummyImpl.DisableGestureDetection(GestureType::TAP);
141     DALI_TEST_CHECK( !dummyImpl.GetTapGestureDetector() );
142
143     DALI_TEST_CHECK( dummyImpl.GetLongPressGestureDetector() );
144     dummyImpl.DisableGestureDetection(GestureType::LONG_PRESS);
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( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
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( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
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( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
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( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
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( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
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( GestureType::Value(GestureType::PINCH | GestureType::PAN | GestureType::TAP | GestureType::LONG_PRESS) );
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
769 int UtcDaliControlImplOnAccessibilityActivatedP(void)
770 {
771   ToolkitTestApplication application;
772
773   Control dummy = Control::New();
774   Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
775   DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityActivated(), TEST_LOCATION );
776
777   // Invoke the control's activate action
778   TypeInfo type = TypeRegistry::Get().GetTypeInfo( "Control" );
779   DALI_TEST_CHECK( type );
780
781   BaseHandle handle = type.CreateInstance();
782   DALI_TEST_CHECK( handle );
783
784   Property::Map attributes;
785   DALI_TEST_EQUALS( false, handle.DoAction("accessibilityActivated",  attributes), TEST_LOCATION );
786
787   END_TEST;
788 }
789
790 int UtcDaliControlImplGetNextKeyboardFocusableActorP(void)
791 {
792   ToolkitTestApplication application;
793   Control dummy = Control::New();
794   Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
795
796   Actor currentFocusedActor;
797   Actor result = controlImpl.GetNextKeyboardFocusableActor( currentFocusedActor, Control::KeyboardFocus::LEFT, false );
798
799   DALI_TEST_EQUALS( result, currentFocusedActor, TEST_LOCATION );
800
801   END_TEST;
802 }
803
804 int UtcDaliControlImplRegisterThenReRegisterVisual(void)
805 {
806   ToolkitTestApplication application;
807
808   DummyControl dummy = DummyControl::New();
809   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
810
811   Property::Index index =1;
812
813   DALI_TEST_CHECK( !dummyImpl.GetVisual( index )  );
814
815   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
816   Toolkit::Visual::Base visual;
817
818   Property::Map map;
819   map[Visual::Property::TYPE] = Visual::COLOR;
820   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
821
822   visual = visualFactory.CreateVisual( map );
823   DALI_TEST_CHECK(visual);
824
825   // Register index with a color visual
826   dummyImpl.RegisterVisual( index, visual );
827
828   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
829
830   Property::Map newMap;
831   newMap[Visual::Property::TYPE] = Visual::COLOR;
832   newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
833
834   visual = visualFactory.CreateVisual( newMap );
835   DALI_TEST_CHECK(visual);
836
837   // ReRegister with altered color visual
838   dummyImpl.RegisterVisual( index, visual );
839
840   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
841
842   tet_result(TET_PASS);
843
844   END_TEST;
845 }
846
847 int UtcDaliControlImplRegisterVisaulThenReRegisterToSelf(void)
848 {
849   ToolkitTestApplication application;
850
851   DummyControl dummy = DummyControl::New();
852   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
853
854   Property::Index index =1;
855
856   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
857   Toolkit::Visual::Base visual;
858
859   Property::Map map;
860   map[Visual::Property::TYPE] = Visual::COLOR;
861   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
862
863   visual = visualFactory.CreateVisual( map );
864   DALI_TEST_CHECK(visual);
865
866   // Register index with a color visual
867   dummyImpl.RegisterVisual( index, visual );
868
869   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
870
871   // ReRegister to self
872   dummyImpl.RegisterVisual( index, visual );
873
874   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
875
876   END_TEST;
877 }
878
879 int UtcDaliControlImplRegisterVisualToSelf(void)
880 {
881   ToolkitTestApplication application;
882
883   Test::ObjectDestructionTracker objectDestructionTracker( application.GetCore().GetObjectRegistry() );
884
885   {
886     DummyControl dummy = DummyControl::New();
887     DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
888     objectDestructionTracker.Start( dummy );
889
890     Property::Index index = 1;
891
892     Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
893     Toolkit::Visual::Base visual;
894
895     Property::Map map;
896     map[Visual::Property::TYPE] = Visual::COLOR;
897     map[ColorVisual::Property::MIX_COLOR] = Color::RED;
898
899     visual = visualFactory.CreateVisual( map );
900     DALI_TEST_CHECK(visual);
901
902     // Register to self
903     dummyImpl.RegisterVisual( index, visual );
904
905     DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
906     DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
907   }
908
909   DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
910
911   END_TEST;
912 }
913
914 int UtcDaliControlImplRegisterTwoVisuals(void)
915 {
916   ToolkitTestApplication application;
917
918   DummyControl dummy = DummyControl::New();
919   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
920
921   Property::Index index =1;
922   Property::Index index2 =2;
923
924   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
925   Toolkit::Visual::Base visual;
926   Toolkit::Visual::Base secondVisual;
927
928   Property::Map map;
929   map[Visual::Property::TYPE] = Visual::COLOR;
930   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
931
932   visual = visualFactory.CreateVisual( map );
933   DALI_TEST_CHECK(visual);
934
935   // Register index with a color visual
936   dummyImpl.RegisterVisual( index, visual );
937
938   Property::Map newMap;
939   newMap[Visual::Property::TYPE] = Visual::COLOR;
940   newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
941
942   secondVisual = visualFactory.CreateVisual( newMap );
943   DALI_TEST_CHECK( secondVisual );
944
945   // ReRegister with altered color visual
946   dummyImpl.RegisterVisual( index2, secondVisual );
947
948   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
949   DALI_TEST_CHECK( dummyImpl.GetVisual( index2 ) == secondVisual );
950
951   END_TEST;
952 }
953
954 int UtcDaliControlImplRegisterUnregisterVisual(void)
955 {
956   ToolkitTestApplication application;
957
958   DummyControl dummy = DummyControl::New();
959   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
960
961   Property::Index index =1;
962
963   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
964   Toolkit::Visual::Base visual;
965
966   Property::Map map;
967   map[Visual::Property::TYPE] = Visual::COLOR;
968   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
969
970   visual = visualFactory.CreateVisual( map );
971   DALI_TEST_CHECK(visual);
972
973   // Register index with a color visual
974   dummyImpl.RegisterVisual( index, visual );
975
976   tet_infoline( "Add control with visual to stage and check renderer count is 1" );
977   application.GetScene().Add( dummy );
978   application.SendNotification();
979   application.Render();
980
981   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
982   DALI_TEST_EQUALS( dummy.GetRendererCount(), 1, TEST_LOCATION );
983
984   // Unregister visual
985   dummyImpl.UnregisterVisual( index );
986
987   tet_infoline( "Remove control with visual from stage and check renderer count is 0" );
988   application.GetScene().Remove( dummy );
989   application.SendNotification();
990   application.Render();
991
992   DALI_TEST_EQUALS( dummy.GetRendererCount(), 0, TEST_LOCATION );
993   DALI_TEST_CHECK( !dummyImpl.GetVisual( index ) );
994
995   END_TEST;
996 }
997
998 int UtcDaliControlImplRegisterDisabledVisual(void)
999 {
1000   ToolkitTestApplication application;
1001
1002   DummyControl dummy = DummyControl::New();
1003   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1004
1005   Property::Index TEST_PROPERTY =1;
1006
1007   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1008   Toolkit::Visual::Base visual;
1009
1010   Property::Map map;
1011   map[Visual::Property::TYPE] = Visual::COLOR;
1012   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1013
1014   visual = visualFactory.CreateVisual( map );
1015   DALI_TEST_CHECK(visual);
1016
1017   // Register index with a color visual
1018   dummyImpl.RegisterVisual( TEST_PROPERTY, visual, false );
1019
1020   DALI_TEST_CHECK( dummyImpl.GetVisual( TEST_PROPERTY ) == visual );
1021   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1022
1023   application.GetScene().Add(dummy);
1024
1025   // Render and notify
1026   application.SendNotification();
1027   application.Render();
1028
1029   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1030
1031   DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1032
1033   dummyImpl.EnableVisual( TEST_PROPERTY, true );
1034
1035   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true );
1036
1037   END_TEST;
1038 }
1039
1040 int UtcDaliControlImplDisableRegisteredVisual(void)
1041 {
1042   ToolkitTestApplication application;
1043
1044   DummyControl dummy = DummyControl::New();
1045   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1046
1047   Property::Index TEST_PROPERTY =1;
1048
1049   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1050   Toolkit::Visual::Base visual;
1051
1052   Property::Map map;
1053   map[Visual::Property::TYPE] = Visual::COLOR;
1054   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1055
1056   visual = visualFactory.CreateVisual( map );
1057   DALI_TEST_CHECK(visual);
1058
1059   // Register index with a color visual
1060   dummyImpl.RegisterVisual( TEST_PROPERTY, visual );
1061
1062   application.GetScene().Add(dummy);
1063
1064   // Render and notify
1065   application.SendNotification();
1066   application.Render();
1067
1068   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true);
1069
1070   DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1071
1072   dummyImpl.EnableVisual( TEST_PROPERTY, false );
1073
1074   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1075
1076   END_TEST;
1077 }
1078
1079 int UtcDaliControlImplEnabledVisualParentRemovedFromStage(void)
1080 {
1081   // Visual enabled but then parent removed from stage, test ensures visual/renderer are also removed from stage.
1082   // Then adding parent back to stage should automatically put visual/renderer back
1083
1084   ToolkitTestApplication application;
1085
1086   DummyControl dummy = DummyControl::New();
1087   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1088
1089   Property::Index TEST_PROPERTY =1;
1090
1091   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1092   Toolkit::Visual::Base visual;
1093
1094   Property::Map map;
1095   map[Visual::Property::TYPE] = Visual::COLOR;
1096   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1097
1098   visual = visualFactory.CreateVisual( map );
1099   DALI_TEST_CHECK(visual);
1100
1101   // Register index with a color visual
1102   dummyImpl.RegisterVisual( TEST_PROPERTY, visual, false );
1103
1104   application.GetScene().Add(dummy);
1105   // Render and notify
1106   application.SendNotification();
1107   application.Render();
1108
1109   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
1110   DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1111   dummyImpl.EnableVisual( TEST_PROPERTY, true );
1112
1113   // Render and notify
1114   application.SendNotification();
1115   application.Render();
1116   DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1117
1118   // Remove control from stage, visual should be removed from stage too
1119   application.GetScene().Remove(dummy);
1120   // Render and notify
1121   application.SendNotification();
1122   application.Render();
1123   DALI_TEST_CHECK( dummy.GetRendererCount() == 0u );
1124
1125   application.GetScene().Add(dummy);
1126   // Render and notify
1127   application.SendNotification();
1128   application.Render();
1129   DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1130
1131   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true );
1132
1133   END_TEST;
1134 }
1135
1136 int UtcDaliControlImplRegisterTwoVisualsAndEnableOnlyOne(void)
1137 {
1138   // Register 2 visuals and enable by default
1139   // Disable 1 visual
1140   // Remove control from stage then put it back
1141   // Check that only 1 visual/renderer is staged.
1142
1143   ToolkitTestApplication application;
1144
1145   DummyControl dummy = DummyControl::New();
1146   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1147
1148   Property::Index TEST_PROPERTY1 =1;
1149   Property::Index TEST_PROPERTY2 =2;
1150
1151   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1152   Toolkit::Visual::Base visual1;
1153   Toolkit::Visual::Base visual2;
1154
1155   Property::Map map;
1156   map[Visual::Property::TYPE] = Visual::COLOR;
1157   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1158
1159   Property::Map map2;
1160   map[Visual::Property::TYPE] = Visual::COLOR;
1161   map[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
1162
1163   visual1 = visualFactory.CreateVisual( map );
1164   DALI_TEST_CHECK(visual1);
1165
1166   visual2 = visualFactory.CreateVisual( map );
1167   DALI_TEST_CHECK(visual2);
1168
1169   // Register index with a color visual
1170   dummyImpl.RegisterVisual( TEST_PROPERTY1, visual1 );
1171   // Register second index with a color visual
1172   dummyImpl.RegisterVisual( TEST_PROPERTY2, visual2 );
1173
1174   application.GetScene().Add(dummy);
1175   // Render and notify
1176   application.SendNotification();
1177   application.Render();
1178
1179   DALI_TEST_CHECK( dummy.GetRendererCount() == 2u );
1180   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true );
1181   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true);
1182   DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1183   dummyImpl.EnableVisual( TEST_PROPERTY2, false );
1184
1185   // Render and notify
1186   application.SendNotification();
1187   application.Render();
1188   DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1189
1190   // Remove control from stage, visual should be removed from stage too
1191   application.GetScene().Remove(dummy);
1192   // Render and notify
1193   application.SendNotification();
1194   application.Render();
1195   DALI_TEST_CHECK( dummy.GetRendererCount() == 0u );
1196
1197   application.GetScene().Add(dummy);
1198   // Render and notify
1199   application.SendNotification();
1200   application.Render();
1201   DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1202
1203   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true );
1204   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY2 ) == false );
1205
1206   END_TEST;
1207 }
1208 int UtcDaliControlImplAutoClippingWithVisuals(void)
1209 {
1210   ToolkitTestApplication application;
1211
1212   tet_infoline( "Test to ensure a renderer does NOT get added when we've already registered a visual which we haven't enabled" );
1213
1214   DummyControl control = DummyControl::New();
1215   DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
1216
1217   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1218   Toolkit::Visual::Base visual;
1219   Property::Map map;
1220   map[Visual::Property::TYPE] = Visual::COLOR;
1221   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1222   visual = visualFactory.CreateVisual( map );
1223   DALI_TEST_CHECK(visual);
1224   controlImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual, false );
1225
1226   DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1227
1228   control.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
1229
1230   application.GetScene().Add( control );
1231
1232   application.SendNotification();
1233   application.Render();
1234
1235   DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1236
1237   END_TEST;
1238 }
1239
1240 int UtcDaliControlImplAutoClippingWithVisualsAlreadyOnStage(void)
1241 {
1242   ToolkitTestApplication application;
1243
1244   tet_infoline( "Test to ensure a renderer does NOT get added when we've already registered a visual which we haven't enabled and we're already on the stage" );
1245
1246   DummyControl control = DummyControl::New();
1247   DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
1248
1249   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1250   Toolkit::Visual::Base visual;
1251   Property::Map map;
1252   map[Visual::Property::TYPE] = Visual::COLOR;
1253   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1254   visual = visualFactory.CreateVisual( map );
1255   DALI_TEST_CHECK(visual);
1256   controlImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual, false );
1257
1258   DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1259
1260   application.GetScene().Add( control );
1261
1262   application.SendNotification();
1263   application.Render();
1264
1265   control.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
1266
1267   application.SendNotification();
1268   application.Render();
1269
1270   DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1271
1272   END_TEST;
1273 }
1274
1275 int UtcDaliControlImplOnPinch(void)
1276 {
1277   ToolkitTestApplication application;
1278
1279   Control control = Control::New();
1280   control.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
1281   control.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::TOP_LEFT);
1282   application.GetScene().Add(control);
1283
1284   application.SendNotification();
1285   application.Render();
1286
1287   Toolkit::Internal::Control& impl = Toolkit::Internal::GetImplementation(control);
1288   impl.EnableGestureDetection(GestureType::PINCH);
1289
1290   // Scale becomes 0.6666666
1291   TestStartPinch( application,  Vector2( 5.0f, 20.0f ), Vector2( 35.0f, 20.0f ),
1292                                 Vector2( 10.0f, 20.0f ), Vector2( 30.0f, 20.0f ), 100 );
1293
1294   DALI_TEST_EQUALS(0.666f, control.GetProperty( Actor::Property::SCALE_X).Get<float>(), 0.01f, TEST_LOCATION);
1295
1296   END_TEST;
1297
1298 }