[dali_2.0.15] Merge branch '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(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 UtcDaliControlImplKeyEvent(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     application.GetScene().Add(dummy);
477     dummy.SetKeyInputFocus();
478
479     application.Render();
480     application.SendNotification();
481     application.Render();
482     application.SendNotification();
483
484     DALI_TEST_EQUALS( dummyImpl.keyEventCalled, false, TEST_LOCATION );
485     Integration::KeyEvent keyEvent;
486     application.ProcessEvent(keyEvent);
487     DALI_TEST_EQUALS( dummyImpl.keyEventCalled, true, TEST_LOCATION );
488
489     application.GetScene().Remove(dummy);
490   }
491
492   // Ensure full code coverage
493   {
494     DummyControl dummy = DummyControl::New();
495
496     application.GetScene().Add(dummy);
497     dummy.SetKeyInputFocus();
498
499     application.Render();
500     application.SendNotification();
501     application.Render();
502     application.SendNotification();
503
504     Integration::KeyEvent keyEvent;
505     application.ProcessEvent(keyEvent);
506
507     application.GetScene().Remove(dummy);
508   }
509   END_TEST;
510 }
511
512 int UtcDaliControlImplKeyInputFocusGained(void)
513 {
514   ToolkitTestApplication application;
515
516   {
517     DummyControl dummy = DummyControl::New( true );
518     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
519
520     application.GetScene().Add(dummy);
521
522     DALI_TEST_EQUALS( dummyImpl.keyInputFocusGained, false, TEST_LOCATION );
523
524     dummy.SetKeyInputFocus();
525
526     DALI_TEST_EQUALS( dummyImpl.keyInputFocusGained, true, TEST_LOCATION );
527
528     application.GetScene().Remove(dummy);
529   }
530
531   // Ensure full code coverage
532   {
533     DummyControl dummy = DummyControl::New();
534
535     application.GetScene().Add(dummy);
536     dummy.SetKeyInputFocus();
537     application.GetScene().Remove(dummy);
538   }
539   END_TEST;
540 }
541
542 int UtcDaliControlImplKeyInputFocusLost(void)
543 {
544   ToolkitTestApplication application;
545
546   {
547     DummyControl dummy = DummyControl::New( true );
548     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
549
550     application.GetScene().Add(dummy);
551
552     DALI_TEST_EQUALS( dummyImpl.keyInputFocusLost, false, TEST_LOCATION );
553
554     dummy.SetKeyInputFocus();
555     dummy.ClearKeyInputFocus();
556
557     DALI_TEST_EQUALS( dummyImpl.keyInputFocusLost, true, TEST_LOCATION );
558
559     application.GetScene().Remove(dummy);
560   }
561
562   // Ensure full code coverage
563   {
564     DummyControl dummy = DummyControl::New();
565
566     application.GetScene().Add(dummy);
567     dummy.SetKeyInputFocus();
568     dummy.ClearKeyInputFocus();
569
570     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
571
572     dummyImpl.IsKeyboardNavigationSupported();
573     dummyImpl.IsKeyboardFocusGroup();
574
575     application.GetScene().Remove(dummy);
576   }
577   END_TEST;
578 }
579
580 int UtcDaliControlImplTypeRegistry(void)
581 {
582   ToolkitTestApplication application;
583
584   // Register Type
585   TypeInfo type;
586   type = TypeRegistry::Get().GetTypeInfo( "Control" );
587   DALI_TEST_CHECK( type );
588   BaseHandle handle = type.CreateInstance();
589   DALI_TEST_CHECK( handle );
590
591   // Check if it's a control
592   DALI_TEST_CHECK( Control::DownCast(handle) );
593   END_TEST;
594 }
595
596
597 ///////////////////////////////////////////////////////////////////////////////////////////////////
598
599 int UtcDaliControlImplSetStyleName(void)
600 {
601   ToolkitTestApplication application;
602
603   {
604     DummyControl dummy = DummyControl::New( true );
605
606     dummy.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
607     dummy.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::TOP_LEFT);
608     application.GetScene().Add(dummy);
609
610     dummy.SetStyleName("TestStyle");
611
612     DALI_TEST_CHECK( dummy.GetStyleName() == "TestStyle" );
613
614     application.GetScene().Remove(dummy);
615   }
616   END_TEST;
617 }
618
619 int UtcDaliControlImplOnStyleChangeN(void)
620 {
621   ToolkitTestApplication application;
622   Control dummy = Control::New();
623   Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
624
625   // test that style manager is being used, passing an empty handle does nothing but does not crash either
626   Dali::Toolkit::StyleManager styleManager;
627   controlImpl.OnStyleChange( styleManager, StyleChange::THEME_CHANGE );
628   // no crash so test passes
629   tet_result(TET_PASS);
630
631   END_TEST;
632 }
633
634
635 int UtcDaliControlImplOnAccessibilityPanP(void)
636 {
637   ToolkitTestApplication application;
638   Control dummy = Control::New();
639   Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
640
641   PanGesture pan;
642   DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityPan( pan ), TEST_LOCATION );
643
644   END_TEST;
645 }
646
647
648 int UtcDaliControlImplOnAccessibilityActivatedP(void)
649 {
650   ToolkitTestApplication application;
651
652   Control dummy = Control::New();
653   Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
654   DALI_TEST_EQUALS( false, controlImpl.OnAccessibilityActivated(), TEST_LOCATION );
655
656   // Invoke the control's activate action
657   TypeInfo type = TypeRegistry::Get().GetTypeInfo( "Control" );
658   DALI_TEST_CHECK( type );
659
660   BaseHandle handle = type.CreateInstance();
661   DALI_TEST_CHECK( handle );
662
663   Property::Map attributes;
664   DALI_TEST_EQUALS( false, handle.DoAction("accessibilityActivated",  attributes), TEST_LOCATION );
665
666   END_TEST;
667 }
668
669 int UtcDaliControlImplGetNextKeyboardFocusableActorP(void)
670 {
671   ToolkitTestApplication application;
672   Control dummy = Control::New();
673   Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( dummy );
674
675   Actor currentFocusedActor;
676   Actor result = controlImpl.GetNextKeyboardFocusableActor( currentFocusedActor, Control::KeyboardFocus::LEFT, false );
677
678   DALI_TEST_EQUALS( result, currentFocusedActor, TEST_LOCATION );
679
680   END_TEST;
681 }
682
683 int UtcDaliControlImplRegisterThenReRegisterVisual(void)
684 {
685   ToolkitTestApplication application;
686
687   DummyControl dummy = DummyControl::New();
688   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
689
690   Property::Index index =1;
691
692   DALI_TEST_CHECK( !dummyImpl.GetVisual( index )  );
693
694   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
695   Toolkit::Visual::Base visual;
696
697   Property::Map map;
698   map[Visual::Property::TYPE] = Visual::COLOR;
699   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
700
701   visual = visualFactory.CreateVisual( map );
702   DALI_TEST_CHECK(visual);
703
704   // Register index with a color visual
705   dummyImpl.RegisterVisual( index, visual );
706
707   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
708
709   Property::Map newMap;
710   newMap[Visual::Property::TYPE] = Visual::COLOR;
711   newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
712
713   visual = visualFactory.CreateVisual( newMap );
714   DALI_TEST_CHECK(visual);
715
716   // ReRegister with altered color visual
717   dummyImpl.RegisterVisual( index, visual );
718
719   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
720
721   tet_result(TET_PASS);
722
723   END_TEST;
724 }
725
726 int UtcDaliControlImplRegisterVisaulThenReRegisterToSelf(void)
727 {
728   ToolkitTestApplication application;
729
730   DummyControl dummy = DummyControl::New();
731   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
732
733   Property::Index index =1;
734
735   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
736   Toolkit::Visual::Base visual;
737
738   Property::Map map;
739   map[Visual::Property::TYPE] = Visual::COLOR;
740   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
741
742   visual = visualFactory.CreateVisual( map );
743   DALI_TEST_CHECK(visual);
744
745   // Register index with a color visual
746   dummyImpl.RegisterVisual( index, visual );
747
748   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
749
750   // ReRegister to self
751   dummyImpl.RegisterVisual( index, visual );
752
753   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
754
755   END_TEST;
756 }
757
758 int UtcDaliControlImplRegisterVisualToSelf(void)
759 {
760   ToolkitTestApplication application;
761
762   Test::ObjectDestructionTracker objectDestructionTracker( application.GetCore().GetObjectRegistry() );
763
764   {
765     DummyControl dummy = DummyControl::New();
766     DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
767     objectDestructionTracker.Start( dummy );
768
769     Property::Index index = 1;
770
771     Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
772     Toolkit::Visual::Base visual;
773
774     Property::Map map;
775     map[Visual::Property::TYPE] = Visual::COLOR;
776     map[ColorVisual::Property::MIX_COLOR] = Color::RED;
777
778     visual = visualFactory.CreateVisual( map );
779     DALI_TEST_CHECK(visual);
780
781     // Register to self
782     dummyImpl.RegisterVisual( index, visual );
783
784     DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
785     DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
786   }
787
788   DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
789
790   END_TEST;
791 }
792
793 int UtcDaliControlImplRegisterTwoVisuals(void)
794 {
795   ToolkitTestApplication application;
796
797   DummyControl dummy = DummyControl::New();
798   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
799
800   Property::Index index =1;
801   Property::Index index2 =2;
802
803   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
804   Toolkit::Visual::Base visual;
805   Toolkit::Visual::Base secondVisual;
806
807   Property::Map map;
808   map[Visual::Property::TYPE] = Visual::COLOR;
809   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
810
811   visual = visualFactory.CreateVisual( map );
812   DALI_TEST_CHECK(visual);
813
814   // Register index with a color visual
815   dummyImpl.RegisterVisual( index, visual );
816
817   Property::Map newMap;
818   newMap[Visual::Property::TYPE] = Visual::COLOR;
819   newMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
820
821   secondVisual = visualFactory.CreateVisual( newMap );
822   DALI_TEST_CHECK( secondVisual );
823
824   // ReRegister with altered color visual
825   dummyImpl.RegisterVisual( index2, secondVisual );
826
827   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
828   DALI_TEST_CHECK( dummyImpl.GetVisual( index2 ) == secondVisual );
829
830   END_TEST;
831 }
832
833 int UtcDaliControlImplRegisterUnregisterVisual(void)
834 {
835   ToolkitTestApplication application;
836
837   DummyControl dummy = DummyControl::New();
838   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
839
840   Property::Index index =1;
841
842   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
843   Toolkit::Visual::Base visual;
844
845   Property::Map map;
846   map[Visual::Property::TYPE] = Visual::COLOR;
847   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
848
849   visual = visualFactory.CreateVisual( map );
850   DALI_TEST_CHECK(visual);
851
852   // Register index with a color visual
853   dummyImpl.RegisterVisual( index, visual );
854
855   tet_infoline( "Add control with visual to stage and check renderer count is 1" );
856   application.GetScene().Add( dummy );
857   application.SendNotification();
858   application.Render();
859
860   DALI_TEST_CHECK( dummyImpl.GetVisual( index ) == visual );
861   DALI_TEST_EQUALS( dummy.GetRendererCount(), 1, TEST_LOCATION );
862
863   // Unregister visual
864   dummyImpl.UnregisterVisual( index );
865
866   tet_infoline( "Remove control with visual from stage and check renderer count is 0" );
867   application.GetScene().Remove( dummy );
868   application.SendNotification();
869   application.Render();
870
871   DALI_TEST_EQUALS( dummy.GetRendererCount(), 0, TEST_LOCATION );
872   DALI_TEST_CHECK( !dummyImpl.GetVisual( index ) );
873
874   END_TEST;
875 }
876
877 int UtcDaliControlImplRegisterDisabledVisual(void)
878 {
879   ToolkitTestApplication application;
880
881   DummyControl dummy = DummyControl::New();
882   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
883
884   Property::Index TEST_PROPERTY =1;
885
886   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
887   Toolkit::Visual::Base visual;
888
889   Property::Map map;
890   map[Visual::Property::TYPE] = Visual::COLOR;
891   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
892
893   visual = visualFactory.CreateVisual( map );
894   DALI_TEST_CHECK(visual);
895
896   // Register index with a color visual
897   dummyImpl.RegisterVisual( TEST_PROPERTY, visual, false );
898
899   DALI_TEST_CHECK( dummyImpl.GetVisual( TEST_PROPERTY ) == visual );
900   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
901
902   application.GetScene().Add(dummy);
903
904   // Render and notify
905   application.SendNotification();
906   application.Render();
907
908   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
909
910   DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
911
912   dummyImpl.EnableVisual( TEST_PROPERTY, true );
913
914   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true );
915
916   END_TEST;
917 }
918
919 int UtcDaliControlImplDisableRegisteredVisual(void)
920 {
921   ToolkitTestApplication application;
922
923   DummyControl dummy = DummyControl::New();
924   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
925
926   Property::Index TEST_PROPERTY =1;
927
928   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
929   Toolkit::Visual::Base visual;
930
931   Property::Map map;
932   map[Visual::Property::TYPE] = Visual::COLOR;
933   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
934
935   visual = visualFactory.CreateVisual( map );
936   DALI_TEST_CHECK(visual);
937
938   // Register index with a color visual
939   dummyImpl.RegisterVisual( TEST_PROPERTY, visual );
940
941   application.GetScene().Add(dummy);
942
943   // Render and notify
944   application.SendNotification();
945   application.Render();
946
947   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true);
948
949   DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
950
951   dummyImpl.EnableVisual( TEST_PROPERTY, false );
952
953   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
954
955   END_TEST;
956 }
957
958 int UtcDaliControlImplEnabledVisualParentRemovedFromStage(void)
959 {
960   // Visual enabled but then parent removed from stage, test ensures visual/renderer are also removed from stage.
961   // Then adding parent back to stage should automatically put visual/renderer back
962
963   ToolkitTestApplication application;
964
965   DummyControl dummy = DummyControl::New();
966   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
967
968   Property::Index TEST_PROPERTY =1;
969
970   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
971   Toolkit::Visual::Base visual;
972
973   Property::Map map;
974   map[Visual::Property::TYPE] = Visual::COLOR;
975   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
976
977   visual = visualFactory.CreateVisual( map );
978   DALI_TEST_CHECK(visual);
979
980   // Register index with a color visual
981   dummyImpl.RegisterVisual( TEST_PROPERTY, visual, false );
982
983   application.GetScene().Add(dummy);
984   // Render and notify
985   application.SendNotification();
986   application.Render();
987
988   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == false );
989   DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
990   dummyImpl.EnableVisual( TEST_PROPERTY, true );
991
992   // Render and notify
993   application.SendNotification();
994   application.Render();
995   DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
996
997   // Remove control from stage, visual should be removed from stage too
998   application.GetScene().Remove(dummy);
999   // Render and notify
1000   application.SendNotification();
1001   application.Render();
1002   DALI_TEST_CHECK( dummy.GetRendererCount() == 0u );
1003
1004   application.GetScene().Add(dummy);
1005   // Render and notify
1006   application.SendNotification();
1007   application.Render();
1008   DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1009
1010   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY ) == true );
1011
1012   END_TEST;
1013 }
1014
1015 int UtcDaliControlImplRegisterTwoVisualsAndEnableOnlyOne(void)
1016 {
1017   // Register 2 visuals and enable by default
1018   // Disable 1 visual
1019   // Remove control from stage then put it back
1020   // Check that only 1 visual/renderer is staged.
1021
1022   ToolkitTestApplication application;
1023
1024   DummyControl dummy = DummyControl::New();
1025   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
1026
1027   Property::Index TEST_PROPERTY1 =1;
1028   Property::Index TEST_PROPERTY2 =2;
1029
1030   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1031   Toolkit::Visual::Base visual1;
1032   Toolkit::Visual::Base visual2;
1033
1034   Property::Map map;
1035   map[Visual::Property::TYPE] = Visual::COLOR;
1036   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1037
1038   Property::Map map2;
1039   map[Visual::Property::TYPE] = Visual::COLOR;
1040   map[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
1041
1042   visual1 = visualFactory.CreateVisual( map );
1043   DALI_TEST_CHECK(visual1);
1044
1045   visual2 = visualFactory.CreateVisual( map );
1046   DALI_TEST_CHECK(visual2);
1047
1048   // Register index with a color visual
1049   dummyImpl.RegisterVisual( TEST_PROPERTY1, visual1 );
1050   // Register second index with a color visual
1051   dummyImpl.RegisterVisual( TEST_PROPERTY2, visual2 );
1052
1053   application.GetScene().Add(dummy);
1054   // Render and notify
1055   application.SendNotification();
1056   application.Render();
1057
1058   DALI_TEST_CHECK( dummy.GetRendererCount() == 2u );
1059   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true );
1060   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true);
1061   DALI_TEST_CHECK( dummy.GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) == true );
1062   dummyImpl.EnableVisual( TEST_PROPERTY2, false );
1063
1064   // Render and notify
1065   application.SendNotification();
1066   application.Render();
1067   DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1068
1069   // Remove control from stage, visual should be removed from stage too
1070   application.GetScene().Remove(dummy);
1071   // Render and notify
1072   application.SendNotification();
1073   application.Render();
1074   DALI_TEST_CHECK( dummy.GetRendererCount() == 0u );
1075
1076   application.GetScene().Add(dummy);
1077   // Render and notify
1078   application.SendNotification();
1079   application.Render();
1080   DALI_TEST_CHECK( dummy.GetRendererCount() == 1u );
1081
1082   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY1 ) == true );
1083   DALI_TEST_CHECK( dummyImpl.IsVisualEnabled( TEST_PROPERTY2 ) == false );
1084
1085   END_TEST;
1086 }
1087 int UtcDaliControlImplAutoClippingWithVisuals(void)
1088 {
1089   ToolkitTestApplication application;
1090
1091   tet_infoline( "Test to ensure a renderer does NOT get added when we've already registered a visual which we haven't enabled" );
1092
1093   DummyControl control = DummyControl::New();
1094   DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
1095
1096   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1097   Toolkit::Visual::Base visual;
1098   Property::Map map;
1099   map[Visual::Property::TYPE] = Visual::COLOR;
1100   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1101   visual = visualFactory.CreateVisual( map );
1102   DALI_TEST_CHECK(visual);
1103   controlImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual, false );
1104
1105   DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1106
1107   control.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
1108
1109   application.GetScene().Add( control );
1110
1111   application.SendNotification();
1112   application.Render();
1113
1114   DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1115
1116   END_TEST;
1117 }
1118
1119 int UtcDaliControlImplAutoClippingWithVisualsAlreadyOnStage(void)
1120 {
1121   ToolkitTestApplication application;
1122
1123   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" );
1124
1125   DummyControl control = DummyControl::New();
1126   DummyControlImpl& controlImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
1127
1128   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
1129   Toolkit::Visual::Base visual;
1130   Property::Map map;
1131   map[Visual::Property::TYPE] = Visual::COLOR;
1132   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
1133   visual = visualFactory.CreateVisual( map );
1134   DALI_TEST_CHECK(visual);
1135   controlImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual, false );
1136
1137   DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1138
1139   application.GetScene().Add( control );
1140
1141   application.SendNotification();
1142   application.Render();
1143
1144   control.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
1145
1146   application.SendNotification();
1147   application.Render();
1148
1149   DALI_TEST_EQUALS( 0, control.GetRendererCount(), TEST_LOCATION );
1150
1151   END_TEST;
1152 }
1153
1154 int UtcDaliControlImplOnPinch(void)
1155 {
1156   ToolkitTestApplication application;
1157
1158   Control control = Control::New();
1159   control.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
1160   control.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::TOP_LEFT);
1161   application.GetScene().Add(control);
1162
1163   application.SendNotification();
1164   application.Render();
1165
1166   Toolkit::Internal::Control& impl = Toolkit::Internal::GetImplementation(control);
1167   impl.EnableGestureDetection(GestureType::PINCH);
1168
1169   // Scale becomes 0.6666666
1170   TestStartPinch( application,  Vector2( 5.0f, 20.0f ), Vector2( 35.0f, 20.0f ),
1171                                 Vector2( 10.0f, 20.0f ), Vector2( 30.0f, 20.0f ), 100 );
1172
1173   DALI_TEST_EQUALS(0.666f, control.GetProperty( Actor::Property::SCALE_X).Get<float>(), 0.01f, TEST_LOCATION);
1174
1175   END_TEST;
1176
1177 }