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