2 * Copyright (c) 2021 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.
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/scale-transition.h>
29 using namespace Dali::Toolkit;
31 // Functor to test whether a Finish signal is emitted
32 struct TransitionFinishCheck
34 TransitionFinishCheck(bool& signalReceived)
35 : mSignalReceived(signalReceived)
39 void operator()(TransitionSet& transitionSet)
41 mSignalReceived = true;
46 mSignalReceived = false;
49 void CheckSignalReceived()
53 tet_printf("Expected Finish signal was not received\n");
62 void CheckSignalNotReceived()
66 tet_printf("Unexpected Finish signal was received\n");
75 bool& mSignalReceived; // owned by individual tests
78 int UtcDaliScaleTransitionSetGetProperty(void)
80 ToolkitTestApplication application;
81 tet_infoline("UtcDaliScaleTransitionSetGetProperty");
83 Control control = Control::New();
85 ScaleTransition scale = ScaleTransition::New(control, 0.5f, TimePeriod(-0.5f, -0.5f));
87 Vector2 scaleFactor = scale.GetScaleFactor();
88 DALI_TEST_EQUALS(0.5f, scaleFactor.x, TEST_LOCATION);
89 DALI_TEST_EQUALS(0.5f, scaleFactor.y, TEST_LOCATION);
92 scale.SetScaleFactor(Vector2(1.5f, 1.2f));
93 scaleFactor = scale.GetScaleFactor();
94 DALI_TEST_EQUALS(1.5f, scaleFactor.x, TEST_LOCATION);
95 DALI_TEST_EQUALS(1.2f, scaleFactor.y, TEST_LOCATION);
100 int UtcDaliScaleTransitionWithOffScene(void)
102 ToolkitTestApplication application;
103 tet_infoline("UtcDaliScaleTransitionWithOffScene");
105 Control control = Control::New();
106 control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
107 control.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
108 control.SetProperty(Actor::Property::SIZE, Vector3(150, 150, 0));
109 Property::Map controlProperty;
110 controlProperty.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
111 controlProperty.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
112 control.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty);
114 application.SendNotification();
115 application.Render(20);
117 Vector3 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
118 DALI_TEST_CHECK(currentScale.x == 1.0f);
119 DALI_TEST_CHECK(currentScale.y == 1.0f);
121 ScaleTransition scale = ScaleTransition::New(control, 0.5f, TimePeriod(0.5f));
122 scale.SetAppearingTransition(false);
123 TransitionSet transitionSet = TransitionSet::New();
124 transitionSet.AddTransition(scale);
125 transitionSet.Play();
127 bool signalReceived(false);
128 TransitionFinishCheck finishCheck(signalReceived);
129 transitionSet.FinishedSignal().Connect(&application, finishCheck);
131 application.SendNotification();
132 application.Render(400);
134 // We didn't expect the animation to finish yet
135 application.SendNotification();
136 finishCheck.CheckSignalNotReceived();
138 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
139 DALI_TEST_CHECK(currentScale.x == 1.0f);
140 DALI_TEST_CHECK(currentScale.y == 1.0f);
142 application.SendNotification();
143 application.Render(200);
145 // We did expect the animation to finish
146 application.SendNotification();
147 finishCheck.CheckSignalReceived();
149 application.SendNotification();
150 application.Render(20);
152 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
153 DALI_TEST_CHECK(currentScale.x == 1.0f);
154 DALI_TEST_CHECK(currentScale.y == 1.0f);
159 int UtcDaliScaleTransitionDisappearing(void)
161 ToolkitTestApplication application;
162 tet_infoline("UtcDaliScaleTransitionDisappearing");
164 Control control = Control::New();
165 control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
166 control.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
167 control.SetProperty(Actor::Property::SIZE, Vector3(100, 100, 0));
168 control.SetProperty(Actor::Property::OPACITY, 1.0f);
169 Property::Map controlProperty;
170 controlProperty.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
171 controlProperty.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
172 control.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty);
174 application.GetScene().Add(control);
176 application.SendNotification();
177 application.Render(20);
179 Vector3 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
180 DALI_TEST_CHECK(currentScale.x == 1.0f);
181 DALI_TEST_CHECK(currentScale.y == 1.0f);
183 ScaleTransition scale = ScaleTransition::New(control, 0.5f, TimePeriod(0.5f));
184 scale.SetAppearingTransition(false);
186 TransitionSet transitionSet = TransitionSet::New();
187 transitionSet.AddTransition(scale);
188 transitionSet.Play();
190 bool signalReceived(false);
191 TransitionFinishCheck finishCheck(signalReceived);
192 transitionSet.FinishedSignal().Connect(&application, finishCheck);
194 application.SendNotification();
195 application.Render(400);
197 // We didn't expect the animation to finish yet
198 application.SendNotification();
199 finishCheck.CheckSignalNotReceived();
201 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
202 DALI_TEST_CHECK(currentScale.x > 0.55f && currentScale.x < 0.65f);
203 DALI_TEST_CHECK(currentScale.y > 0.55f && currentScale.y < 0.65f);
205 application.SendNotification();
206 application.Render(200);
208 // We did expect the animation to finish
209 application.SendNotification();
210 finishCheck.CheckSignalReceived();
212 application.SendNotification();
213 application.Render(20);
215 // Property is reset after animation.
216 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
217 DALI_TEST_CHECK(currentScale.x == 1.0f);
218 DALI_TEST_CHECK(currentScale.y == 1.0f);
223 int UtcDaliScaleTransitionAppearing(void)
225 ToolkitTestApplication application;
226 tet_infoline("UtcDaliScaleTransitionAppearing");
228 Control control = Control::New();
229 control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
230 control.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
231 control.SetProperty(Actor::Property::SIZE, Vector3(100, 100, 0));
232 control.SetProperty(Actor::Property::OPACITY, 1.0f);
233 Property::Map controlProperty;
234 controlProperty.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
235 controlProperty.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
236 control.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty);
238 application.GetScene().Add(control);
240 application.SendNotification();
241 application.Render(20);
243 Vector3 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
244 DALI_TEST_CHECK(currentScale.x == 1.0f);
245 DALI_TEST_CHECK(currentScale.y == 1.0f);
247 ScaleTransition scale = ScaleTransition::New(control, Vector2(2.0, 0.5), TimePeriod(0.5f));
248 scale.SetAppearingTransition(true);
249 TransitionSet transitionSet = TransitionSet::New();
250 transitionSet.AddTransition(scale);
251 transitionSet.Play();
253 bool signalReceived(false);
254 TransitionFinishCheck finishCheck(signalReceived);
255 transitionSet.FinishedSignal().Connect(&application, finishCheck);
257 application.SendNotification();
258 application.Render(400);
260 // We didn't expect the animation to finish yet
261 application.SendNotification();
262 finishCheck.CheckSignalNotReceived();
264 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
265 DALI_TEST_CHECK(currentScale.x > 1.1f && currentScale.x < 1.3f);
266 DALI_TEST_CHECK(currentScale.y > 0.85f && currentScale.y < 0.95f);
268 application.SendNotification();
269 application.Render(200);
271 // We did expect the animation to finish
272 application.SendNotification();
273 finishCheck.CheckSignalReceived();
275 application.SendNotification();
276 application.Render(20);
278 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
279 DALI_TEST_CHECK(currentScale.x == 1.0f);
280 DALI_TEST_CHECK(currentScale.y == 1.0f);