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