2 * Copyright (c) 2022 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 #include <dali-toolkit-test-suite-utils.h>
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>
31 using namespace Dali::Toolkit;
33 // Functor to test whether a Finish signal is emitted
34 struct TransitionFinishCheck
36 TransitionFinishCheck(bool& signalReceived)
37 : mSignalReceived(signalReceived)
41 void operator()(TransitionSet& transitionSet)
43 mSignalReceived = true;
48 mSignalReceived = false;
51 void CheckSignalReceived()
55 tet_printf("Expected Finish signal was not received\n");
64 void CheckSignalNotReceived()
68 tet_printf("Unexpected Finish signal was received\n");
77 bool& mSignalReceived; // owned by individual tests
80 int UtcDaliFadeTransitionSetGetProperty(void)
82 ToolkitTestApplication application;
83 tet_infoline("UtcDaliFadeTransitionSetGetProperty");
85 Control control = Control::New();
87 FadeTransition fade = FadeTransition::New(control, 0.5, TimePeriod(-0.5f, -0.5f));
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);
96 int UtcDaliFadeTransitionWithOffScene(void)
98 ToolkitTestApplication application;
99 tet_infoline("UtcDaliFadeTransitionWithOffScene");
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);
112 application.SendNotification();
113 application.Render(20);
115 DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
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();
123 bool signalReceived(false);
124 TransitionFinishCheck finishCheck(signalReceived);
125 transitionSet.FinishedSignal().Connect(&application, finishCheck);
127 application.SendNotification();
128 application.Render(400);
130 // We didn't expect the animation to finish yet
131 application.SendNotification();
132 finishCheck.CheckSignalNotReceived();
134 DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
136 application.SendNotification();
137 application.Render(200);
139 // We did expect the animation to finish
140 application.SendNotification();
141 finishCheck.CheckSignalReceived();
143 application.SendNotification();
144 application.Render(20);
146 DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
151 int UtcDaliFadeTransitionDisappearing(void)
153 ToolkitTestApplication application;
154 tet_infoline("UtcDaliFadeTransitionOut");
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);
167 application.GetScene().Add(control);
169 application.SendNotification();
170 application.Render(20);
172 DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
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();
180 bool signalReceived(false);
181 TransitionFinishCheck finishCheck(signalReceived);
182 transitionSet.FinishedSignal().Connect(&application, finishCheck);
184 application.SendNotification();
185 application.Render(400);
187 // We didn't expect the animation to finish yet
188 application.SendNotification();
189 finishCheck.CheckSignalNotReceived();
191 float currentOpacity = control.GetCurrentProperty<float>(Actor::Property::OPACITY);
192 DALI_TEST_CHECK(currentOpacity <= 0.7 && currentOpacity >= 0.5);
194 application.SendNotification();
195 application.Render(200);
197 // We did expect the animation to finish
198 application.SendNotification();
199 finishCheck.CheckSignalReceived();
201 application.SendNotification();
202 application.Render(20);
204 // Property is reset after animation.
205 DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
210 int UtcDaliFadeTransitionAppearing(void)
212 ToolkitTestApplication application;
213 tet_infoline("UtcDaliFadeTransitionIn");
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);
226 application.GetScene().Add(control);
228 application.SendNotification();
229 application.Render(20);
231 DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
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();
239 bool signalReceived(false);
240 TransitionFinishCheck finishCheck(signalReceived);
241 transitionSet.FinishedSignal().Connect(&application, finishCheck);
243 application.SendNotification();
244 application.Render(400);
246 // We didn't expect the animation to finish yet
247 application.SendNotification();
248 finishCheck.CheckSignalNotReceived();
250 float currentOpacity = control.GetCurrentProperty<float>(Actor::Property::OPACITY);
251 DALI_TEST_CHECK(currentOpacity <= 1.0 && currentOpacity >= 0.8);
253 application.SendNotification();
254 application.Render(200);
256 // We did expect the animation to finish
257 application.SendNotification();
258 finishCheck.CheckSignalReceived();
260 application.SendNotification();
261 application.Render(20);
263 DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
268 int UtcDaliFadeTransitionAppearingWithDelay(void)
270 ToolkitTestApplication application;
271 tet_infoline("UtcDaliFadeTransitionIn");
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);
284 application.GetScene().Add(control);
286 application.SendNotification();
287 application.Render(20);
289 DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);
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();
297 bool signalReceived(false);
298 TransitionFinishCheck finishCheck(signalReceived);
299 transitionSet.FinishedSignal().Connect(&application, finishCheck);
301 application.SendNotification();
302 application.Render(400);
304 // We didn't expect the animation to finish yet
305 application.SendNotification();
306 finishCheck.CheckSignalNotReceived();
308 float currentOpacity = control.GetCurrentProperty<float>(Actor::Property::OPACITY);
309 DALI_TEST_CHECK(currentOpacity <= 0.01f);
311 application.SendNotification();
312 application.Render(500);
314 // We didn't expect the animation to finish yet
315 application.SendNotification();
316 finishCheck.CheckSignalNotReceived();
318 currentOpacity = control.GetCurrentProperty<float>(Actor::Property::OPACITY);
319 DALI_TEST_CHECK(currentOpacity <= 1.0 && currentOpacity >= 0.8);
321 application.SendNotification();
322 application.Render(200);
324 // We did expect the animation to finish
325 application.SendNotification();
326 finishCheck.CheckSignalReceived();
328 application.SendNotification();
329 application.Render(20);
331 DALI_TEST_EQUALS(1.0f, control.GetCurrentProperty<float>(Actor::Property::OPACITY), TEST_LOCATION);