Updating code formatting
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-FadeTransition.cpp
1 /*
2  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 #include <stdlib.h>
19 #include <iostream>
20
21 #include <dali-toolkit-test-suite-utils.h>
22
23 #include <dali-toolkit/dali-toolkit.h>
24 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
25 #include <dali-toolkit/public-api/transition/fade-transition.h>
26 #include <dali-toolkit/public-api/transition/transition-base.h>
27 #include <dali-toolkit/public-api/transition/transition-set.h>
28 #include <dali/devel-api/actors/actor-devel.h>
29
30 using namespace Dali;
31 using namespace Dali::Toolkit;
32
33 // Functor to test whether a Finish signal is emitted
34 struct TransitionFinishCheck
35 {
36   TransitionFinishCheck(bool& signalReceived)
37   : mSignalReceived(signalReceived)
38   {
39   }
40
41   void operator()(TransitionSet& transitionSet)
42   {
43     mSignalReceived = true;
44   }
45
46   void Reset()
47   {
48     mSignalReceived = false;
49   }
50
51   void CheckSignalReceived()
52   {
53     if(!mSignalReceived)
54     {
55       tet_printf("Expected Finish signal was not received\n");
56       tet_result(TET_FAIL);
57     }
58     else
59     {
60       tet_result(TET_PASS);
61     }
62   }
63
64   void CheckSignalNotReceived()
65   {
66     if(mSignalReceived)
67     {
68       tet_printf("Unexpected Finish signal was received\n");
69       tet_result(TET_FAIL);
70     }
71     else
72     {
73       tet_result(TET_PASS);
74     }
75   }
76
77   bool& mSignalReceived; // owned by individual tests
78 };
79
80 int UtcDaliFadeTransitionSetGetProperty(void)
81 {
82   ToolkitTestApplication application;
83   tet_infoline("UtcDaliFadeTransitionSetGetProperty");
84
85   Control control = Control::New();
86
87   FadeTransition fade = FadeTransition::New(control, 0.5, TimePeriod(-0.5f, -0.5f));
88
89   TimePeriod timePeriod = fade.GetTimePeriod();
90   DALI_TEST_EQUALS(0.0f, timePeriod.delaySeconds, TEST_LOCATION);
91   DALI_TEST_EQUALS(0.0f, timePeriod.durationSeconds, TEST_LOCATION);
92
93   END_TEST;
94 }
95
96 int UtcDaliFadeTransitionWithOffScene(void)
97 {
98   ToolkitTestApplication application;
99   tet_infoline("UtcDaliFadeTransitionWithOffScene");
100
101   Control control = Control::New();
102   control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
103   control.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
104   control.SetProperty(Actor::Property::POSITION, Vector3(100, 200, 0));
105   control.SetProperty(Actor::Property::SIZE, Vector3(150, 150, 0));
106   control.SetProperty(Actor::Property::OPACITY, 1.0f);
107   Property::Map controlProperty;
108   controlProperty.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
109   controlProperty.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
110   control.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty);
111
112   application.SendNotification();
113   application.Render(20);
114
115   DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
116
117   FadeTransition fade = FadeTransition::New(control, 0.5, TimePeriod(0.5f));
118   fade.SetAppearingTransition(false); // set fade out
119   TransitionSet transitionSet = TransitionSet::New();
120   transitionSet.AddTransition(fade);
121   transitionSet.Play();
122
123   bool                  signalReceived(false);
124   TransitionFinishCheck finishCheck(signalReceived);
125   transitionSet.FinishedSignal().Connect(&application, finishCheck);
126
127   application.SendNotification();
128   application.Render(400);
129
130   // We didn't expect the animation to finish yet
131   application.SendNotification();
132   finishCheck.CheckSignalNotReceived();
133
134   DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
135
136   application.SendNotification();
137   application.Render(200);
138
139   // We did expect the animation to finish
140   application.SendNotification();
141   finishCheck.CheckSignalReceived();
142
143   application.SendNotification();
144   application.Render(20);
145
146   DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
147
148   END_TEST;
149 }
150
151 int UtcDaliFadeTransitionDisappearing(void)
152 {
153   ToolkitTestApplication application;
154   tet_infoline("UtcDaliFadeTransitionOut");
155
156   Control control = Control::New();
157   control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
158   control.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
159   control.SetProperty(Actor::Property::POSITION, Vector3(100, 200, 0));
160   control.SetProperty(Actor::Property::SIZE, Vector3(150, 150, 0));
161   control.SetProperty(Actor::Property::OPACITY, 1.0f);
162   Property::Map controlProperty;
163   controlProperty.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
164   controlProperty.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
165   control.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty);
166
167   application.GetScene().Add(control);
168
169   application.SendNotification();
170   application.Render(20);
171
172   DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
173
174   FadeTransition fade = FadeTransition::New(control, 0.5, TimePeriod(0.5f));
175   fade.SetAppearingTransition(false); // set fade out
176   TransitionSet transitionSet = TransitionSet::New();
177   transitionSet.AddTransition(fade);
178   transitionSet.Play();
179
180   bool                  signalReceived(false);
181   TransitionFinishCheck finishCheck(signalReceived);
182   transitionSet.FinishedSignal().Connect(&application, finishCheck);
183
184   application.SendNotification();
185   application.Render(400);
186
187   // We didn't expect the animation to finish yet
188   application.SendNotification();
189   finishCheck.CheckSignalNotReceived();
190
191   float currentOpacity = control.GetCurrentProperty<float>(Actor::Property::OPACITY);
192   DALI_TEST_CHECK(currentOpacity <= 0.7 && currentOpacity >= 0.5);
193
194   application.SendNotification();
195   application.Render(200);
196
197   // We did expect the animation to finish
198   application.SendNotification();
199   finishCheck.CheckSignalReceived();
200
201   application.SendNotification();
202   application.Render(20);
203
204   // Property is reset after animation.
205   DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
206
207   END_TEST;
208 }
209
210 int UtcDaliFadeTransitionAppearing(void)
211 {
212   ToolkitTestApplication application;
213   tet_infoline("UtcDaliFadeTransitionIn");
214
215   Control control = Control::New();
216   control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
217   control.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
218   control.SetProperty(Actor::Property::POSITION, Vector3(100, 200, 0));
219   control.SetProperty(Actor::Property::SIZE, Vector3(150, 150, 0));
220   control.SetProperty(Actor::Property::OPACITY, 1.0f);
221   Property::Map controlProperty;
222   controlProperty.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
223   controlProperty.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
224   control.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty);
225
226   application.GetScene().Add(control);
227
228   application.SendNotification();
229   application.Render(20);
230
231   DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
232
233   FadeTransition fade = FadeTransition::New(control, 0.5, TimePeriod(0.5f));
234   fade.SetAppearingTransition(true); // set fade in
235   TransitionSet transitionSet = TransitionSet::New();
236   transitionSet.AddTransition(fade);
237   transitionSet.Play();
238
239   bool                  signalReceived(false);
240   TransitionFinishCheck finishCheck(signalReceived);
241   transitionSet.FinishedSignal().Connect(&application, finishCheck);
242
243   application.SendNotification();
244   application.Render(400);
245
246   // We didn't expect the animation to finish yet
247   application.SendNotification();
248   finishCheck.CheckSignalNotReceived();
249
250   float currentOpacity = control.GetCurrentProperty<float>(Actor::Property::OPACITY);
251   DALI_TEST_CHECK(currentOpacity <= 1.0 && currentOpacity >= 0.8);
252
253   application.SendNotification();
254   application.Render(200);
255
256   // We did expect the animation to finish
257   application.SendNotification();
258   finishCheck.CheckSignalReceived();
259
260   application.SendNotification();
261   application.Render(20);
262
263   DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
264
265   END_TEST;
266 }
267
268 int UtcDaliFadeTransitionAppearingWithDelay(void)
269 {
270   ToolkitTestApplication application;
271   tet_infoline("UtcDaliFadeTransitionIn");
272
273   Control control = Control::New();
274   control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
275   control.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
276   control.SetProperty(Actor::Property::POSITION, Vector3(100, 200, 0));
277   control.SetProperty(Actor::Property::SIZE, Vector3(150, 150, 0));
278   control.SetProperty(Actor::Property::OPACITY, 1.0f);
279   Property::Map controlProperty;
280   controlProperty.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
281   controlProperty.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
282   control.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty);
283
284   application.GetScene().Add(control);
285
286   application.SendNotification();
287   application.Render(20);
288
289   DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
290
291   FadeTransition fade = FadeTransition::New(control, 0.5, TimePeriod(0.5f, 0.5f));
292   fade.SetAppearingTransition(true); // set fade in
293   TransitionSet transitionSet = TransitionSet::New();
294   transitionSet.AddTransition(fade);
295   transitionSet.Play();
296
297   bool                  signalReceived(false);
298   TransitionFinishCheck finishCheck(signalReceived);
299   transitionSet.FinishedSignal().Connect(&application, finishCheck);
300
301   application.SendNotification();
302   application.Render(400);
303
304   // We didn't expect the animation to finish yet
305   application.SendNotification();
306   finishCheck.CheckSignalNotReceived();
307
308   float currentOpacity = control.GetCurrentProperty<float>(Actor::Property::OPACITY);
309   DALI_TEST_CHECK(currentOpacity <= 0.01f);
310
311   application.SendNotification();
312   application.Render(500);
313
314   // We didn't expect the animation to finish yet
315   application.SendNotification();
316   finishCheck.CheckSignalNotReceived();
317
318   currentOpacity = control.GetCurrentProperty<float>(Actor::Property::OPACITY);
319   DALI_TEST_CHECK(currentOpacity <= 1.0 && currentOpacity >= 0.8);
320
321   application.SendNotification();
322   application.Render(200);
323
324   // We did expect the animation to finish
325   application.SendNotification();
326   finishCheck.CheckSignalReceived();
327
328   application.SendNotification();
329   application.Render(20);
330
331   DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
332
333   END_TEST;
334 }