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.
18 #include <dali-toolkit-test-suite-utils.h>
19 #include <dali-toolkit/dali-toolkit.h>
20 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
21 #include <dali-toolkit/public-api/transition/scale-transition.h>
22 #include <dali-toolkit/public-api/transition/transition-base.h>
23 #include <dali-toolkit/public-api/transition/transition-set.h>
24 #include <dali/devel-api/actors/actor-devel.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);
91 scale.SetScaleFactor(Vector2(1.5f, 1.2f));
92 scaleFactor = scale.GetScaleFactor();
93 DALI_TEST_EQUALS(1.5f, scaleFactor.x, TEST_LOCATION);
94 DALI_TEST_EQUALS(1.2f, scaleFactor.y, TEST_LOCATION);
99 int UtcDaliScaleTransitionWithOffScene(void)
101 ToolkitTestApplication application;
102 tet_infoline("UtcDaliScaleTransitionWithOffScene");
104 Control control = Control::New();
105 control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
106 control.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
107 control.SetProperty(Actor::Property::SIZE, Vector3(150, 150, 0));
108 Property::Map controlProperty;
109 controlProperty.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
110 controlProperty.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
111 control.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty);
113 application.SendNotification();
114 application.Render(20);
116 Vector3 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
117 DALI_TEST_CHECK(currentScale.x == 1.0f);
118 DALI_TEST_CHECK(currentScale.y == 1.0f);
120 ScaleTransition scale = ScaleTransition::New(control, 0.5f, TimePeriod(0.5f));
121 scale.SetAppearingTransition(false);
122 TransitionSet transitionSet = TransitionSet::New();
123 transitionSet.AddTransition(scale);
124 transitionSet.Play();
126 bool signalReceived(false);
127 TransitionFinishCheck finishCheck(signalReceived);
128 transitionSet.FinishedSignal().Connect(&application, finishCheck);
130 application.SendNotification();
131 application.Render(400);
133 // We didn't expect the animation to finish yet
134 application.SendNotification();
135 finishCheck.CheckSignalNotReceived();
137 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
138 DALI_TEST_CHECK(currentScale.x == 1.0f);
139 DALI_TEST_CHECK(currentScale.y == 1.0f);
141 application.SendNotification();
142 application.Render(200);
144 // We did expect the animation to finish
145 application.SendNotification();
146 finishCheck.CheckSignalReceived();
148 application.SendNotification();
149 application.Render(20);
151 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
152 DALI_TEST_CHECK(currentScale.x == 1.0f);
153 DALI_TEST_CHECK(currentScale.y == 1.0f);
158 int UtcDaliScaleTransitionDisappearing(void)
160 ToolkitTestApplication application;
161 tet_infoline("UtcDaliScaleTransitionDisappearing");
163 Control control = Control::New();
164 control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
165 control.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
166 control.SetProperty(Actor::Property::SIZE, Vector3(100, 100, 0));
167 control.SetProperty(Actor::Property::OPACITY, 1.0f);
168 Property::Map controlProperty;
169 controlProperty.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
170 controlProperty.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
171 control.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty);
173 application.GetScene().Add(control);
175 application.SendNotification();
176 application.Render(20);
178 Vector3 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
179 DALI_TEST_CHECK(currentScale.x == 1.0f);
180 DALI_TEST_CHECK(currentScale.y == 1.0f);
182 ScaleTransition scale = ScaleTransition::New(control, 0.5f, TimePeriod(0.5f));
183 scale.SetAppearingTransition(false);
185 TransitionSet transitionSet = TransitionSet::New();
186 transitionSet.AddTransition(scale);
187 transitionSet.Play();
189 bool signalReceived(false);
190 TransitionFinishCheck finishCheck(signalReceived);
191 transitionSet.FinishedSignal().Connect(&application, finishCheck);
193 application.SendNotification();
194 application.Render(400);
196 // We didn't expect the animation to finish yet
197 application.SendNotification();
198 finishCheck.CheckSignalNotReceived();
200 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
201 DALI_TEST_CHECK(currentScale.x > 0.55f && currentScale.x < 0.65f);
202 DALI_TEST_CHECK(currentScale.y > 0.55f && currentScale.y < 0.65f);
204 application.SendNotification();
205 application.Render(200);
207 // We did expect the animation to finish
208 application.SendNotification();
209 finishCheck.CheckSignalReceived();
211 application.SendNotification();
212 application.Render(20);
214 // Property is reset after animation.
215 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
216 DALI_TEST_CHECK(currentScale.x == 1.0f);
217 DALI_TEST_CHECK(currentScale.y == 1.0f);
222 int UtcDaliScaleTransitionAppearing(void)
224 ToolkitTestApplication application;
225 tet_infoline("UtcDaliScaleTransitionAppearing");
227 Control control = Control::New();
228 control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
229 control.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
230 control.SetProperty(Actor::Property::SIZE, Vector3(100, 100, 0));
231 control.SetProperty(Actor::Property::OPACITY, 1.0f);
232 Property::Map controlProperty;
233 controlProperty.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
234 controlProperty.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
235 control.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty);
237 application.GetScene().Add(control);
239 application.SendNotification();
240 application.Render(20);
242 Vector3 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
243 DALI_TEST_CHECK(currentScale.x == 1.0f);
244 DALI_TEST_CHECK(currentScale.y == 1.0f);
246 ScaleTransition scale = ScaleTransition::New(control, Vector2(2.0, 0.5), TimePeriod(0.5f));
247 scale.SetAppearingTransition(true);
248 TransitionSet transitionSet = TransitionSet::New();
249 transitionSet.AddTransition(scale);
250 transitionSet.Play();
252 bool signalReceived(false);
253 TransitionFinishCheck finishCheck(signalReceived);
254 transitionSet.FinishedSignal().Connect(&application, finishCheck);
256 application.SendNotification();
257 application.Render(400);
259 // We didn't expect the animation to finish yet
260 application.SendNotification();
261 finishCheck.CheckSignalNotReceived();
263 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
264 DALI_TEST_CHECK(currentScale.x > 1.1f && currentScale.x < 1.3f);
265 DALI_TEST_CHECK(currentScale.y > 0.85f && currentScale.y < 0.95f);
267 application.SendNotification();
268 application.Render(200);
270 // We did expect the animation to finish
271 application.SendNotification();
272 finishCheck.CheckSignalReceived();
274 application.SendNotification();
275 application.Render(20);
277 currentScale = control.GetCurrentProperty<Vector3>(Actor::Property::SCALE);
278 DALI_TEST_CHECK(currentScale.x == 1.0f);
279 DALI_TEST_CHECK(currentScale.y == 1.0f);