b694a69ce9db22e7bef35cbde8c255881b930b80
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-Transition.cpp
1 /*
2  * Copyright (c) 2021 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 #include <dali-toolkit-test-suite-utils.h>
21 #include <dali-toolkit/dali-toolkit.h>
22 #include <dali/devel-api/actors/actor-devel.h>
23 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
24 #include <dali-toolkit/public-api/transition/transition-set.h>
25 #include <dali-toolkit/public-api/transition/transition-base.h>
26 #include <dali-toolkit/public-api/transition/transition.h>
27
28 using namespace Dali;
29 using namespace Dali::Toolkit;
30 namespace
31 {
32
33 const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg";
34
35 }
36
37 // Functor to test whether a Finish signal is emitted
38 struct TransitionFinishCheck
39 {
40   TransitionFinishCheck(bool& signalReceived)
41   : mSignalReceived(signalReceived)
42   {
43   }
44
45   void operator()(TransitionSet& transitionSet)
46   {
47     mSignalReceived = true;
48   }
49
50   void Reset()
51   {
52     mSignalReceived = false;
53   }
54
55   void CheckSignalReceived()
56   {
57     if(!mSignalReceived)
58     {
59       tet_printf("Expected Finish signal was not received\n");
60       tet_result(TET_FAIL);
61     }
62     else
63     {
64       tet_result(TET_PASS);
65     }
66   }
67
68   void CheckSignalNotReceived()
69   {
70     if(mSignalReceived)
71     {
72       tet_printf("Unexpected Finish signal was received\n");
73       tet_result(TET_FAIL);
74     }
75     else
76     {
77       tet_result(TET_PASS);
78     }
79   }
80
81   bool& mSignalReceived; // owned by individual tests
82 };
83
84 int UtcDaliTransitionSetGetProperty01(void)
85 {
86   ToolkitTestApplication application;
87   tet_infoline(" UtcDaliTransitionSetGetProperty01");
88
89   Control control1 = Control::New();
90   control1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
91   control1.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
92   control1.SetProperty(Actor::Property::POSITION, Vector3(100, 200, 0));
93   Property::Map controlProperty1;
94   controlProperty1.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
95   controlProperty1.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
96   controlProperty1.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS, 50.f);
97   control1.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty1);
98
99   Control control2 = Control::New();
100   control2.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
101   control2.SetProperty(Actor::Property::ANCHOR_POINT, ParentOrigin::TOP_LEFT);
102   control2.SetProperty(Actor::Property::POSITION, Vector3(50, 50, 0));
103   Property::Map controlProperty2;
104   controlProperty2.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
105   controlProperty2.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 1.0f, 0.0f, 0.5f));
106   controlProperty2.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS, 30.f);
107   control2.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty2);
108
109   application.GetScene().Add(control1);
110   application.GetScene().Add(control2);
111
112   application.SendNotification();
113   application.Render(20);
114
115   Transition transition = Transition::New(control1, control2, TimePeriod(-0.1f, -0.1f));
116   TimePeriod timePeriod = transition.GetTimePeriod();
117   DALI_TEST_EQUALS(0.0f, timePeriod.durationSeconds, TEST_LOCATION);
118   DALI_TEST_EQUALS(0.0f, timePeriod.delaySeconds, TEST_LOCATION);
119
120   transition.SetTimePeriod(TimePeriod(0.5f, 1.0f));
121   timePeriod = transition.GetTimePeriod();
122   DALI_TEST_EQUALS(1.0f, timePeriod.durationSeconds, TEST_LOCATION);
123   DALI_TEST_EQUALS(0.5f, timePeriod.delaySeconds, TEST_LOCATION);
124
125   DALI_TEST_EQUALS(Dali::AlphaFunction::DEFAULT, transition.GetAlphaFunction().GetBuiltinFunction(), TEST_LOCATION);
126   transition.SetAlphaFunction(Dali::AlphaFunction::EASE_IN_OUT);
127   DALI_TEST_EQUALS(Dali::AlphaFunction::EASE_IN_OUT, transition.GetAlphaFunction().GetBuiltinFunction(), TEST_LOCATION);
128
129   TransitionSet transitionSet = TransitionSet::New();
130   transitionSet.AddTransition(transition);
131
132   DALI_TEST_EQUALS(1, transitionSet.GetTransitionCount(), TEST_LOCATION);
133   DALI_TEST_EQUALS(transition, transitionSet.GetTransitionAt(0), TEST_LOCATION);
134
135   END_TEST;
136 }
137
138 int UtcDaliTransitionSetGetProperty02(void)
139 {
140   ToolkitTestApplication application;
141   tet_infoline(" UtcDaliTransitionSetGetProperty02");
142
143   Control control1 = Control::New();
144   control1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
145   control1.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
146   control1.SetProperty(Actor::Property::POSITION, Vector3(100, 200, 0));
147   Property::Map controlProperty1;
148   controlProperty1.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
149   controlProperty1.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
150   controlProperty1.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS, Vector4(50.0f, 30.0f, 40.0f, 20.0f));
151   control1.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty1);
152
153   Control control2 = Control::New();
154   control2.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
155   control2.SetProperty(Actor::Property::ANCHOR_POINT, ParentOrigin::TOP_LEFT);
156   control2.SetProperty(Actor::Property::POSITION, Vector3(50, 50, 0));
157   Property::Map controlProperty2;
158   controlProperty2.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
159   controlProperty2.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 1.0f, 0.0f, 0.5f));
160   controlProperty2.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS, Vector4(32.f, 54.0f, 24.0f, 42.0f));
161   control2.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty2);
162
163   application.GetScene().Add(control1);
164   application.GetScene().Add(control2);
165
166   application.SendNotification();
167   application.Render(20);
168
169   Transition transition = Transition::New(control1, control2, TimePeriod(-0.1f));
170   TimePeriod timePeriod = transition.GetTimePeriod();
171   DALI_TEST_EQUALS(0.0f, timePeriod.durationSeconds, TEST_LOCATION);
172   DALI_TEST_EQUALS(0.0f, timePeriod.delaySeconds, TEST_LOCATION);
173
174   transition.SetTimePeriod(TimePeriod(0.5f, 1.0f));
175   timePeriod = transition.GetTimePeriod();
176   DALI_TEST_EQUALS(1.0f, timePeriod.durationSeconds, TEST_LOCATION);
177   DALI_TEST_EQUALS(0.5f, timePeriod.delaySeconds, TEST_LOCATION);
178
179   DALI_TEST_EQUALS(Dali::AlphaFunction::DEFAULT, transition.GetAlphaFunction().GetBuiltinFunction(), TEST_LOCATION);
180   transition.SetAlphaFunction(Dali::AlphaFunction::EASE_IN_OUT);
181   DALI_TEST_EQUALS(Dali::AlphaFunction::EASE_IN_OUT, transition.GetAlphaFunction().GetBuiltinFunction(), TEST_LOCATION);
182
183   TransitionSet transitionSet = TransitionSet::New();
184   transitionSet.AddTransition(transition);
185
186   DALI_TEST_EQUALS(1, transitionSet.GetTransitionCount(), TEST_LOCATION);
187   DALI_TEST_EQUALS(transition, transitionSet.GetTransitionAt(0), TEST_LOCATION);
188
189   END_TEST;
190 }
191
192 int UtcDaliTransitionBetweenControlPair(void)
193 {
194   ToolkitTestApplication application;
195   tet_infoline(" UtcDaliTransitionBetweenControlPair");
196
197   Vector3 destinationPosition(50, 50, 0);
198   Vector3 destinationSize(120, 120, 0);
199   Vector3 destinationScale(2, 1, 0);
200   Vector4 destinationColor(1.0f, 0.5f, 1.0f, 0.8f);
201   float destinationOpacity(0.8f);
202   float destinationRadius(50.f);
203   Vector4 destinationRadiusV4 = Vector4(destinationRadius, destinationRadius, destinationRadius, destinationRadius);
204
205   Control control1 = Control::New();
206   control1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
207   control1.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
208   control1.SetProperty(Actor::Property::POSITION, Vector3(100, 200, 0));
209   control1.SetProperty(Actor::Property::SIZE, Vector3(150, 150, 0));
210   control1.SetProperty(Actor::Property::SCALE, Vector3(1, 2, 0));
211   control1.SetProperty(Actor::Property::COLOR, Vector4(1.0f, 1.0f, 1.0f, 0.5f));
212   control1.SetProperty(Actor::Property::OPACITY, 0.5f);
213   Property::Map controlProperty1;
214   controlProperty1.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
215   controlProperty1.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
216   controlProperty1.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS, 30.f);
217   control1.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty1);
218
219   Control control2 = Control::New();
220   control2.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
221   control2.SetProperty(Actor::Property::ANCHOR_POINT, ParentOrigin::TOP_LEFT);
222   control2.SetProperty(Actor::Property::POSITION, destinationPosition);
223   control2.SetProperty(Actor::Property::SIZE, destinationSize);
224   control2.SetProperty(Actor::Property::SCALE, destinationScale);
225   control2.SetProperty(Actor::Property::COLOR, destinationColor);
226   control2.SetProperty(Actor::Property::OPACITY, destinationOpacity);
227   Property::Map controlProperty2;
228   controlProperty2.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
229   controlProperty2.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 1.0f, 0.0f, 0.5f));
230   controlProperty2.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS, destinationRadius);
231   control2.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty2);
232
233   DALI_TEST_EQUALS(destinationPosition, control2.GetProperty<Vector3>(Actor::Property::POSITION), TEST_LOCATION);
234   Property::Map backgroundMap = control2.GetProperty<Property::Map>(Toolkit::Control::Property::BACKGROUND);
235   Vector4 cornerRadius = backgroundMap.Find(Toolkit::DevelVisual::Property::CORNER_RADIUS)->Get<Vector4>();
236   DALI_TEST_EQUALS(destinationRadiusV4, cornerRadius, TEST_LOCATION);
237
238   application.GetScene().Add(control1);
239   application.GetScene().Add(control2);
240
241   application.SendNotification();
242   application.Render(20);
243
244   Transition transition = Transition::New(control1, control2, TimePeriod(0.5f));
245   TransitionSet transitionSet = TransitionSet::New();
246   transitionSet.AddTransition(transition);
247   transitionSet.Play();
248
249   bool signalReceived(false);
250   TransitionFinishCheck finishCheck(signalReceived);
251   transitionSet.FinishedSignal().Connect(&application, finishCheck);
252
253   application.SendNotification();
254   application.Render(50);
255
256   // We didn't expect the animation to finish yet
257   application.SendNotification();
258   finishCheck.CheckSignalNotReceived();
259
260   DALI_TEST_NOT_EQUALS(destinationPosition, control2.GetCurrentProperty<Vector3>(Actor::Property::POSITION), 0.00001f, TEST_LOCATION);
261   DALI_TEST_EQUALS(1, control2.GetRendererCount(), TEST_LOCATION);
262   Dali::Renderer renderer = control2.GetRendererAt(0);
263   Property::Index index = renderer.GetPropertyIndex(DevelVisual::Property::CORNER_RADIUS);
264   cornerRadius = renderer.GetCurrentProperty<Vector4>(index);
265   DALI_TEST_NOT_EQUALS(destinationRadiusV4, cornerRadius, 0.00001f, TEST_LOCATION);
266
267   application.SendNotification();
268   application.Render(700);
269
270   // We did expect the animation to finish
271   application.SendNotification();
272   finishCheck.CheckSignalReceived();
273
274   application.SendNotification();
275   application.Render(20);
276
277   DALI_TEST_EQUALS(destinationPosition, control2.GetCurrentProperty<Vector3>(Actor::Property::POSITION), TEST_LOCATION);
278   DALI_TEST_EQUALS(destinationSize, control2.GetCurrentProperty<Vector3>(Actor::Property::SIZE), TEST_LOCATION);
279   DALI_TEST_EQUALS(destinationScale, control2.GetCurrentProperty<Vector3>(Actor::Property::SCALE), TEST_LOCATION);
280   DALI_TEST_EQUALS(destinationColor, control2.GetCurrentProperty<Vector4>(Actor::Property::COLOR), TEST_LOCATION);
281   DALI_TEST_EQUALS(destinationOpacity, control2.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
282   DALI_TEST_EQUALS(1, control2.GetRendererCount(), TEST_LOCATION);
283   renderer = control2.GetRendererAt(0);
284   index = renderer.GetPropertyIndex(DevelVisual::Property::CORNER_RADIUS);
285   cornerRadius = renderer.GetCurrentProperty<Vector4>(index);
286   DALI_TEST_EQUALS(destinationRadiusV4, cornerRadius, TEST_LOCATION);
287
288   END_TEST;
289 }
290
291 int UtcDaliTransitionBetweenControlPairWithoutEmptySourceBackground(void)
292 {
293   ToolkitTestApplication application;
294   tet_infoline(" UtcDaliTransitionBetweenControlPair");
295
296   Vector4 destinationRadius(50.f, 30.f, 40.f, 0.f);
297
298   Control control1 = Control::New();
299   control1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
300   control1.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
301   control1.SetProperty(Actor::Property::POSITION, Vector3(100, 200, 0));
302
303   Control control2 = Control::New();
304   control2.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
305   control2.SetProperty(Actor::Property::ANCHOR_POINT, ParentOrigin::TOP_LEFT);
306   control2.SetProperty(Actor::Property::POSITION, Vector3(50, 50, 0));
307   Property::Map controlProperty2;
308   controlProperty2.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
309   controlProperty2.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 1.0f, 0.0f, 0.5f));
310   controlProperty2.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS, destinationRadius);
311   control2.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty2);
312
313   Property::Map backgroundMap = control2.GetProperty<Property::Map>(Toolkit::Control::Property::BACKGROUND);
314   Vector4 cornerRadius = backgroundMap.Find(Toolkit::DevelVisual::Property::CORNER_RADIUS)->Get<Vector4>();
315   DALI_TEST_EQUALS(destinationRadius, cornerRadius, TEST_LOCATION);
316
317   application.GetScene().Add(control1);
318   application.GetScene().Add(control2);
319
320   application.SendNotification();
321   application.Render(20);
322
323   Transition transition = Transition::New(control1, control2, TimePeriod(0.5f));
324   TransitionSet transitionSet = TransitionSet::New();
325   transitionSet.AddTransition(transition);
326   transitionSet.Play();
327
328   bool signalReceived(false);
329   TransitionFinishCheck finishCheck(signalReceived);
330   transitionSet.FinishedSignal().Connect(&application, finishCheck);
331
332   application.SendNotification();
333   application.Render(50);
334
335   // We didn't expect the animation to finish yet
336   application.SendNotification();
337   finishCheck.CheckSignalNotReceived();
338
339   backgroundMap = control2.GetProperty<Property::Map>(Toolkit::Control::Property::BACKGROUND);
340   cornerRadius = backgroundMap.Find(Toolkit::DevelVisual::Property::CORNER_RADIUS)->Get<Vector4>();
341   DALI_TEST_EQUALS(destinationRadius, cornerRadius, TEST_LOCATION);
342
343   application.SendNotification();
344   application.Render(700);
345
346   // We did expect the animation to finish
347   application.SendNotification();
348   finishCheck.CheckSignalReceived();
349
350   application.SendNotification();
351   application.Render(20);
352
353   backgroundMap = control2.GetProperty<Property::Map>(Toolkit::Control::Property::BACKGROUND);
354   cornerRadius = backgroundMap.Find(Toolkit::DevelVisual::Property::CORNER_RADIUS)->Get<Vector4>();
355   DALI_TEST_EQUALS(destinationRadius, cornerRadius, TEST_LOCATION);
356
357   END_TEST;
358 }
359
360 int UtcDaliTransitionBetweenImageViewPair(void)
361 {
362   ToolkitTestApplication application;
363   tet_infoline(" UtcDaliTransitionBetweenControlPair");
364
365   Vector3 destinationPosition(50, 50, 0);
366
367   ImageView control1 = ImageView::New();
368   control1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
369   control1.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
370   control1.SetProperty(Actor::Property::POSITION, Vector3(100, 200, 0));
371   control1.SetProperty(Actor::Property::SIZE, Vector3(150, 150, 0));
372   Property::Map controlProperty1;
373   controlProperty1.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE);
374   controlProperty1.Insert(Toolkit::ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME);
375   controlProperty1.Insert(Toolkit::Visual::Property::MIX_COLOR, Vector4(1.0f, 1.0f, 0.5f, 0.5f));
376   controlProperty1.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS, 50.f);
377   control1.SetProperty(Toolkit::ImageView::Property::IMAGE, controlProperty1);
378
379   ImageView control2 = ImageView::New();
380   control2.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
381   control2.SetProperty(Actor::Property::ANCHOR_POINT, ParentOrigin::TOP_LEFT);
382   control2.SetProperty(Actor::Property::POSITION, destinationPosition);
383   control2.SetProperty(Actor::Property::SIZE, Vector3(120, 120, 0));
384   Property::Map controlProperty2;
385   controlProperty2.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE);
386   controlProperty2.Insert(Toolkit::ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME);
387   controlProperty2.Insert(Toolkit::Visual::Property::MIX_COLOR, Vector4(1.0f, 1.0f, 1.0f, 1.0f));
388   controlProperty2.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS, 30.f);
389   control2.SetProperty(Toolkit::ImageView::Property::IMAGE, controlProperty2);
390
391   DALI_TEST_EQUALS(destinationPosition, control2.GetProperty<Vector3>(Actor::Property::POSITION), TEST_LOCATION);
392
393   application.GetScene().Add(control1);
394   application.GetScene().Add(control2);
395
396   application.SendNotification();
397   application.Render(20);
398
399   Vector3 startWorldPosition = control1.GetProperty<Vector3>(Actor::Property::WORLD_POSITION);
400   Vector3 finishWorldPosition = control2.GetProperty<Vector3>(Actor::Property::WORLD_POSITION);
401
402   Transition transition = Transition::New(control1, control2, TimePeriod(0.5f));
403   TransitionSet transitionSet = TransitionSet::New();
404   transitionSet.AddTransition(transition);
405   transitionSet.Play();
406
407   bool signalReceived(false);
408   TransitionFinishCheck finishCheck(signalReceived);
409   transitionSet.FinishedSignal().Connect(&application, finishCheck);
410
411   application.SendNotification();
412   application.Render(400);
413
414   // We didn't expect the animation to finish yet
415   application.SendNotification();
416   finishCheck.CheckSignalNotReceived();
417
418   // control2 moved about 80%
419   Vector3 currentPosition = control2.GetCurrentProperty<Vector3>(Actor::Property::POSITION);
420   Vector3 expectedPosition_0_7 = startWorldPosition + (finishWorldPosition - startWorldPosition) * 0.7;
421   Vector3 expectedPosition_0_9 = startWorldPosition + (finishWorldPosition - startWorldPosition) * 0.9;
422   DALI_TEST_CHECK(currentPosition.x <= expectedPosition_0_7.x && currentPosition.x >= expectedPosition_0_9.x);
423   DALI_TEST_CHECK(currentPosition.y <= expectedPosition_0_7.y && currentPosition.y >= expectedPosition_0_9.y);
424
425   application.SendNotification();
426   application.Render(200);
427
428   // We did expect the animation to finish
429   application.SendNotification();
430   finishCheck.CheckSignalReceived();
431
432   DALI_TEST_NOT_EQUALS(destinationPosition, control2.GetCurrentProperty<Vector3>(Actor::Property::POSITION), 0.00001f, TEST_LOCATION);
433
434   application.SendNotification();
435   application.Render(20);
436
437   DALI_TEST_EQUALS(destinationPosition, control2.GetCurrentProperty<Vector3>(Actor::Property::POSITION), TEST_LOCATION);
438
439   END_TEST;
440 }
441
442 int UtcDaliTransitionBetweenImageViewPairWithDelay(void)
443 {
444   ToolkitTestApplication application;
445   tet_infoline(" UtcDaliTransitionBetweenControlPair");
446
447   Vector3 destinationPosition(50, 50, 0);
448
449   ImageView control1 = ImageView::New();
450   control1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
451   control1.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
452   control1.SetProperty(Actor::Property::POSITION, Vector3(100, 200, 0));
453   control1.SetProperty(Actor::Property::SIZE, Vector3(150, 150, 0));
454   Property::Map controlProperty1;
455   controlProperty1.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE);
456   controlProperty1.Insert(Toolkit::ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME);
457   controlProperty1.Insert(Toolkit::Visual::Property::MIX_COLOR, Vector4(1.0f, 1.0f, 0.5f, 0.5f));
458   controlProperty1.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS, 50.f);
459   control1.SetProperty(Toolkit::ImageView::Property::IMAGE, controlProperty1);
460
461   ImageView control2 = ImageView::New();
462   control2.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
463   control2.SetProperty(Actor::Property::ANCHOR_POINT, ParentOrigin::TOP_LEFT);
464   control2.SetProperty(Actor::Property::POSITION, destinationPosition);
465   control2.SetProperty(Actor::Property::SIZE, Vector3(120, 120, 0));
466   Property::Map controlProperty2;
467   controlProperty2.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE);
468   controlProperty2.Insert(Toolkit::ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME);
469   controlProperty2.Insert(Toolkit::Visual::Property::MIX_COLOR, Vector4(1.0f, 1.0f, 1.0f, 1.0f));
470   controlProperty2.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS, 30.f);
471   control2.SetProperty(Toolkit::ImageView::Property::IMAGE, controlProperty2);
472
473   DALI_TEST_EQUALS(destinationPosition, control2.GetProperty<Vector3>(Actor::Property::POSITION), TEST_LOCATION);
474
475   application.GetScene().Add(control1);
476   application.GetScene().Add(control2);
477
478   application.SendNotification();
479   application.Render(20);
480
481   Vector3 startWorldPosition = control1.GetProperty<Vector3>(Actor::Property::WORLD_POSITION);
482   Vector3 finishWorldPosition = control2.GetProperty<Vector3>(Actor::Property::WORLD_POSITION);
483
484   Transition transition = Transition::New(control1, control2, TimePeriod(0.5f, 0.5f));
485   TransitionSet transitionSet = TransitionSet::New();
486   transitionSet.AddTransition(transition);
487   transitionSet.Play();
488
489   bool signalReceived(false);
490   TransitionFinishCheck finishCheck(signalReceived);
491   transitionSet.FinishedSignal().Connect(&application, finishCheck);
492
493   application.SendNotification();
494   application.Render(400);
495
496   // We didn't expect the animation to finish yet
497   application.SendNotification();
498   finishCheck.CheckSignalNotReceived();
499
500   DALI_TEST_EQUALS(startWorldPosition, control2.GetCurrentProperty<Vector3>(Actor::Property::POSITION), TEST_LOCATION);
501
502
503   application.SendNotification();
504   application.Render(400);
505
506   // We didn't expect the animation to finish yet
507   application.SendNotification();
508   finishCheck.CheckSignalNotReceived();
509
510   // control2 moved about 60% (800ms)
511   Vector3 currentPosition = control2.GetCurrentProperty<Vector3>(Actor::Property::POSITION);
512   Vector3 expectedPosition_0_5 = startWorldPosition + (finishWorldPosition - startWorldPosition) * 0.5;
513   Vector3 expectedPosition_0_7 = startWorldPosition + (finishWorldPosition - startWorldPosition) * 0.7;
514   DALI_TEST_CHECK(currentPosition.x <= expectedPosition_0_5.x && currentPosition.x >= expectedPosition_0_7.x);
515   DALI_TEST_CHECK(currentPosition.y <= expectedPosition_0_5.y && currentPosition.y >= expectedPosition_0_7.y);
516
517   application.SendNotification();
518   application.Render(400);
519
520   // We did expect the animation to finish
521   application.SendNotification();
522   finishCheck.CheckSignalReceived();
523
524   DALI_TEST_NOT_EQUALS(destinationPosition, control2.GetCurrentProperty<Vector3>(Actor::Property::POSITION), 0.00001f, TEST_LOCATION);
525
526   application.SendNotification();
527   application.Render(20);
528
529   DALI_TEST_EQUALS(destinationPosition, control2.GetCurrentProperty<Vector3>(Actor::Property::POSITION), TEST_LOCATION);
530
531   END_TEST;
532 }
533
534 int UtcDaliTransitionBetweenControlPairWithTree(void)
535 {
536   ToolkitTestApplication application;
537   tet_infoline(" UtcDaliTransitionBetweenControlPairWithTree");
538
539   Vector3 destinationPosition(50, 50, 0);
540   Vector3 destinationWorldPosition(-130, -290, 0);
541
542   Control control1 = Control::New();
543   control1.SetProperty(Actor::Property::POSITION, Vector3(100, 200, 0));
544   control1.SetProperty(Actor::Property::SIZE, Vector3(150, 150, 0));
545   Property::Map controlProperty1;
546   controlProperty1.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
547   controlProperty1.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
548   control1.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty1);
549
550   Control control2 = Control::New();
551   control2.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
552   control2.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
553   control2.SetProperty(Actor::Property::POSITION, destinationPosition);
554   control2.SetProperty(Actor::Property::SIZE, Vector3(120, 120, 0));
555   Property::Map controlProperty2;
556   controlProperty2.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
557   controlProperty2.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
558   control2.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty2);
559
560   Control control3 = Control::New();
561   control3.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
562   control3.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
563   control3.SetProperty(Actor::Property::POSITION, Vector3(50, 50, 0));
564   control3.SetProperty(Actor::Property::SIZE, Vector3(120, 120, 0));
565   Property::Map controlProperty3;
566   controlProperty3.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
567   controlProperty3.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
568   control3.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty3);
569
570   application.GetScene().Add(control1);
571   application.GetScene().Add(control2);
572   control2.Add(control3);
573
574   application.SendNotification();
575   application.Render(20);
576
577   Transition transition = Transition::New(control1, control2, TimePeriod(0.5f));
578   TransitionSet transitionSet = TransitionSet::New();
579   transitionSet.AddTransition(transition);
580   transitionSet.Play();
581
582   bool signalReceived(false);
583   TransitionFinishCheck finishCheck(signalReceived);
584   transitionSet.FinishedSignal().Connect(&application, finishCheck);
585
586   application.SendNotification();
587   application.Render(600);
588
589   // We didn't expect the animation to finish yet
590   application.SendNotification();
591   finishCheck.CheckSignalReceived();
592
593   application.SendNotification();
594   application.Render(20);
595
596   DALI_TEST_EQUALS(destinationPosition, control2.GetCurrentProperty<Vector3>(Actor::Property::POSITION), TEST_LOCATION);
597   DALI_TEST_EQUALS(destinationWorldPosition, control2.GetProperty<Vector3>(Actor::Property::WORLD_POSITION), TEST_LOCATION);
598
599   END_TEST;
600 }
601
602 int UtcDaliTransitionBetweenControlPairWithTreeWithChild(void)
603 {
604   ToolkitTestApplication application;
605   tet_infoline(" UtcDaliTransitionBetweenControlPairWithTreeWithChild");
606
607   Vector3 destinationWorldPosition(-80, -240, 0);
608
609   Control control1 = Control::New();
610   control1.SetProperty(Actor::Property::POSITION, Vector3(100, 200, 0));
611   control1.SetProperty(Actor::Property::SIZE, Vector3(150, 150, 0));
612   Property::Map controlProperty1;
613   controlProperty1.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
614   controlProperty1.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
615   control1.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty1);
616
617   Control control2 = Control::New();
618   control2.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
619   control2.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
620   control2.SetProperty(Actor::Property::POSITION, Vector3(50, 50, 0));
621   control2.SetProperty(Actor::Property::SIZE, Vector3(120, 120, 0));
622   Property::Map controlProperty2;
623   controlProperty2.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
624   controlProperty2.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
625   control2.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty2);
626
627   Control control3 = Control::New();
628   control3.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
629   control3.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
630   control3.SetProperty(Actor::Property::POSITION, Vector3(50, 50, 0));
631   control3.SetProperty(Actor::Property::SIZE, Vector3(120, 120, 0));
632   Property::Map controlProperty3;
633   controlProperty3.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
634   controlProperty3.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
635   control3.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty3);
636
637   application.GetScene().Add(control1);
638   application.GetScene().Add(control2);
639   control2.Add(control3);
640
641   application.SendNotification();
642   application.Render(20);
643
644   Transition transition = Transition::New(control1, control2, TimePeriod(0.5f));
645   transition.TransitionWithChild(true);
646   TransitionSet transitionSet = TransitionSet::New();
647   transitionSet.AddTransition(transition);
648   transitionSet.Play();
649
650   bool signalReceived(false);
651   TransitionFinishCheck finishCheck(signalReceived);
652   transitionSet.FinishedSignal().Connect(&application, finishCheck);
653
654   application.SendNotification();
655   application.Render(600);
656
657   // We didn't expect the animation to finish yet
658   application.SendNotification();
659   finishCheck.CheckSignalReceived();
660
661   application.SendNotification();
662   application.Render(20);
663
664   DALI_TEST_EQUALS(destinationWorldPosition, control3.GetProperty<Vector3>(Actor::Property::WORLD_POSITION), TEST_LOCATION);
665
666   END_TEST;
667 }
668
669 int UtcDaliTransitionBetweenControlPairWithTreeWithoutPositionInheritance(void)
670 {
671   ToolkitTestApplication application;
672   tet_infoline(" UtcDaliTransitionBetweenControlPairWithTreeWithoutPositionInheritance");
673
674   Vector3 sourcePosition(50, 50, 0);
675   Vector3 destinationPosition(100, 100, 0);
676
677   Control control1 = Control::New();
678   control1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
679   control1.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
680   control1.SetProperty(Actor::Property::POSITION, sourcePosition);
681   control1.SetProperty(Actor::Property::SIZE, Vector3(150, 150, 0));
682   Property::Map controlProperty1;
683   controlProperty1.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
684   controlProperty1.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
685   control1.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty1);
686
687   Control control2 = Control::New();
688   control2.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
689   control2.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
690   control2.SetProperty(Actor::Property::POSITION, Vector3(150, 150, 0));
691   control2.SetProperty(Actor::Property::SIZE, Vector3(120, 120, 0));
692   Property::Map controlProperty2;
693   controlProperty2.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
694   controlProperty2.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
695   control2.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty2);
696
697   Control control3 = Control::New();
698   control3.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
699   control3.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
700   control3.SetProperty(Actor::Property::POSITION, destinationPosition);
701   control3.SetProperty(Actor::Property::SIZE, Vector3(120, 120, 0));
702   Property::Map controlProperty3;
703   controlProperty3.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
704   controlProperty3.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
705   control3.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty3);
706
707   application.GetScene().Add(control1);
708   application.GetScene().Add(control2);
709   control2.Add(control3);
710
711   application.SendNotification();
712   application.Render(20);
713
714   Transition transition;
715   TransitionSet transitionSet;
716   bool signalReceived(false);
717   TransitionFinishCheck finishCheck(signalReceived);
718
719   // not inherit Position.
720   control3.SetProperty(Actor::Property::INHERIT_POSITION, false);
721   control3.SetProperty(Actor::Property::INHERIT_ORIENTATION, true);
722   control3.SetProperty(Actor::Property::INHERIT_SCALE, true);
723
724   transition = Transition::New(control1, control3, TimePeriod(0.5f));
725   transitionSet = TransitionSet::New();
726   transitionSet.AddTransition(transition);
727   transitionSet.Play();
728   transitionSet.FinishedSignal().Connect(&application, finishCheck);
729
730   application.SendNotification();
731   application.Render(300);
732
733   Vector3 currentPosition = control3.GetProperty<Vector3>(Actor::Property::WORLD_POSITION);
734   DALI_TEST_CHECK(currentPosition.x <= destinationPosition.x && currentPosition.x >= sourcePosition.x);
735   DALI_TEST_CHECK(currentPosition.y <= destinationPosition.y && currentPosition.y >= sourcePosition.y);
736   DALI_TEST_CHECK(currentPosition.z <= destinationPosition.z && currentPosition.z >= sourcePosition.z);
737
738   application.SendNotification();
739   application.Render(300);
740
741   // We didn't expect the animation to finish yet
742   application.SendNotification();
743   finishCheck.CheckSignalReceived();
744
745   application.SendNotification();
746   application.Render(20);
747
748   DALI_TEST_EQUALS(destinationPosition, control3.GetProperty<Vector3>(Actor::Property::WORLD_POSITION), TEST_LOCATION);
749   END_TEST;
750 }
751
752 int UtcDaliTransitionBetweenControlPairWithTreeWithoutOrientationInheritance(void)
753 {
754   ToolkitTestApplication application;
755   tet_infoline(" UtcDaliTransitionBetweenControlPairWithTreeWithoutOrientationInheritance");
756
757   Radian sourceAngle(1.0f);
758   Radian destinationAngle(2.0f);
759   Quaternion sourceOrientation(sourceAngle, Vector3::XAXIS);
760   Quaternion destinationOrientation(destinationAngle, Vector3::XAXIS);
761
762   Control control1 = Control::New();
763   control1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
764   control1.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
765   control1.SetProperty(Actor::Property::ORIENTATION, sourceOrientation);
766   control1.SetProperty(Actor::Property::SIZE, Vector3(150, 150, 0));
767   Property::Map controlProperty1;
768   controlProperty1.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
769   controlProperty1.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
770   control1.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty1);
771
772   Control control2 = Control::New();
773   control2.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
774   control2.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
775   control2.SetProperty(Actor::Property::ORIENTATION, Quaternion(Radian(2.0f), Vector3::XAXIS));
776   control2.SetProperty(Actor::Property::SIZE, Vector3(120, 120, 0));
777   Property::Map controlProperty2;
778   controlProperty2.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
779   controlProperty2.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
780   control2.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty2);
781
782   Control control3 = Control::New();
783   control3.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
784   control3.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
785   control3.SetProperty(Actor::Property::ORIENTATION, destinationOrientation);
786   control3.SetProperty(Actor::Property::SIZE, Vector3(120, 120, 0));
787   Property::Map controlProperty3;
788   controlProperty3.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
789   controlProperty3.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
790   control3.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty3);
791
792   // not inherit Orientation.
793   control3.SetProperty(Actor::Property::INHERIT_POSITION, true);
794   control3.SetProperty(Actor::Property::INHERIT_ORIENTATION, false);
795   control3.SetProperty(Actor::Property::INHERIT_SCALE, true);
796
797   Vector3 currentAxis;
798   Radian currentRadian;
799
800   application.GetScene().Add(control1);
801   application.GetScene().Add(control2);
802   control2.Add(control3);
803
804   application.SendNotification();
805   application.Render(20);
806
807   Quaternion currentOrientation = control3.GetProperty<Quaternion>(Actor::Property::WORLD_ORIENTATION);
808   DALI_TEST_EQUALS(currentOrientation, destinationOrientation, 0.0001f, TEST_LOCATION);
809
810   Transition transition;
811   TransitionSet transitionSet;
812   bool signalReceived(false);
813   TransitionFinishCheck finishCheck(signalReceived);
814
815   transition = Transition::New(control1, control3, TimePeriod(0.5f));
816   transitionSet = TransitionSet::New();
817   transitionSet.AddTransition(transition);
818   transitionSet.Play();
819   transitionSet.FinishedSignal().Connect(&application, finishCheck);
820
821   application.SendNotification();
822   application.Render(300);
823
824   currentOrientation = control3.GetProperty<Quaternion>(Actor::Property::WORLD_ORIENTATION);
825   DALI_TEST_NOT_EQUALS(currentOrientation, destinationOrientation, 0.0001f, TEST_LOCATION);
826
827   application.SendNotification();
828   application.Render(300);
829
830   // We didn't expect the animation to finish yet
831   application.SendNotification();
832   finishCheck.CheckSignalReceived();
833
834   application.SendNotification();
835   application.Render(20);
836
837   currentOrientation = control3.GetProperty<Quaternion>(Actor::Property::WORLD_ORIENTATION);
838   DALI_TEST_EQUALS(currentOrientation, destinationOrientation, 0.0001f, TEST_LOCATION);
839
840   END_TEST;
841 }
842
843 int UtcDaliTransitionBetweenControlPairWithTreeWithoutScaleInheritance(void)
844 {
845   ToolkitTestApplication application;
846   tet_infoline(" UtcDaliTransitionBetweenControlPairWithTreeWithoutOrientationInheritance");
847
848   Vector3 sourceScale(1, 1, 1);
849   Vector3 destinationScale(2, 2, 1);
850
851   Control control1 = Control::New();
852   control1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
853   control1.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
854   control1.SetProperty(Actor::Property::SCALE, sourceScale);
855   control1.SetProperty(Actor::Property::SIZE, Vector3(150, 150, 0));
856   Property::Map controlProperty1;
857   controlProperty1.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
858   controlProperty1.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
859   control1.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty1);
860
861   Control control2 = Control::New();
862   control2.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
863   control2.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
864   control2.SetProperty(Actor::Property::SCALE, Vector3(3, 3, 1));
865   control2.SetProperty(Actor::Property::SIZE, Vector3(120, 120, 0));
866   Property::Map controlProperty2;
867   controlProperty2.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
868   controlProperty2.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
869   control2.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty2);
870
871   Control control3 = Control::New();
872   control3.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
873   control3.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
874   control3.SetProperty(Actor::Property::SCALE, destinationScale);
875   control3.SetProperty(Actor::Property::SIZE, Vector3(120, 120, 0));
876   Property::Map controlProperty3;
877   controlProperty3.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
878   controlProperty3.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
879   control3.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty3);
880
881   // not inherit Orientation.
882   control3.SetProperty(Actor::Property::INHERIT_POSITION, true);
883   control3.SetProperty(Actor::Property::INHERIT_ORIENTATION, true);
884   control3.SetProperty(Actor::Property::INHERIT_SCALE, false);
885
886   application.GetScene().Add(control1);
887   application.GetScene().Add(control2);
888   control2.Add(control3);
889
890   application.SendNotification();
891   application.Render(20);
892
893   Vector3 currentScale = control3.GetProperty<Vector3>(Actor::Property::WORLD_SCALE);
894   DALI_TEST_EQUALS(currentScale, destinationScale, 0.0001f, TEST_LOCATION);
895
896   Transition transition;
897   TransitionSet transitionSet;
898   bool signalReceived(false);
899   TransitionFinishCheck finishCheck(signalReceived);
900
901   transition = Transition::New(control1, control3, TimePeriod(0.5f));
902   transitionSet = TransitionSet::New();
903   transitionSet.AddTransition(transition);
904   transitionSet.Play();
905   transitionSet.FinishedSignal().Connect(&application, finishCheck);
906
907   application.SendNotification();
908   application.Render(300);
909
910   currentScale = control3.GetProperty<Vector3>(Actor::Property::WORLD_SCALE);
911   DALI_TEST_CHECK(currentScale.x <= destinationScale.x && currentScale.x >= sourceScale.x);
912   DALI_TEST_CHECK(currentScale.y <= destinationScale.y && currentScale.y >= sourceScale.y);
913   DALI_TEST_CHECK(currentScale.z <= destinationScale.z && currentScale.z >= sourceScale.z);
914
915   application.SendNotification();
916   application.Render(300);
917
918   // We didn't expect the animation to finish yet
919   application.SendNotification();
920   finishCheck.CheckSignalReceived();
921
922   application.SendNotification();
923   application.Render(20);
924
925   currentScale = control3.GetProperty<Vector3>(Actor::Property::WORLD_SCALE);
926   DALI_TEST_EQUALS(currentScale, destinationScale, 0.0001f, TEST_LOCATION);
927
928   END_TEST;
929 }