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/slide-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 UtcDaliSlideTransitionSetGetProperty(void)
80 ToolkitTestApplication application;
81 tet_infoline("UtcDaliSlideTransitionSetGetProperty");
83 Control control = Control::New();
85 SlideTransition slide = SlideTransition::New(control, Dali::Toolkit::SlideTransitionDirection::TOP, TimePeriod(-0.5f, -0.5f));
87 TimePeriod timePeriod = slide.GetTimePeriod();
88 DALI_TEST_EQUALS(0.0f, timePeriod.delaySeconds, TEST_LOCATION);
89 DALI_TEST_EQUALS(0.0f, timePeriod.durationSeconds, TEST_LOCATION);
91 DALI_TEST_EQUALS(Dali::Toolkit::SlideTransitionDirection::TOP, slide.GetDirection(), TEST_LOCATION);
93 slide.SetDirection(Dali::Toolkit::SlideTransitionDirection::BOTTOM);
94 DALI_TEST_EQUALS(Dali::Toolkit::SlideTransitionDirection::BOTTOM, slide.GetDirection(), TEST_LOCATION);
99 int UtcDaliSlideTransitionWithOffScene(void)
101 ToolkitTestApplication application;
102 tet_infoline("UtcDaliSlideTransitionWithOffScene");
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 DALI_TEST_EQUALS(Vector2(0, 0), control.GetCurrentProperty<Vector2>(Actor::Property::POSITION), TEST_LOCATION);
118 SlideTransition slide = SlideTransition::New(control, Dali::Toolkit::SlideTransitionDirection::BOTTOM, TimePeriod(0.5f));
119 slide.SetAppearingTransition(false);
120 TransitionSet transitionSet = TransitionSet::New();
121 transitionSet.AddTransition(slide);
122 transitionSet.Play();
124 bool signalReceived(false);
125 TransitionFinishCheck finishCheck(signalReceived);
126 transitionSet.FinishedSignal().Connect(&application, finishCheck);
128 application.SendNotification();
129 application.Render(400);
131 // We didn't expect the animation to finish yet
132 application.SendNotification();
133 finishCheck.CheckSignalNotReceived();
135 DALI_TEST_EQUALS(Vector2(0, 0), control.GetCurrentProperty<Vector2>(Actor::Property::POSITION), TEST_LOCATION);
137 application.SendNotification();
138 application.Render(200);
140 // We did expect the animation to finish
141 application.SendNotification();
142 finishCheck.CheckSignalReceived();
144 application.SendNotification();
145 application.Render(20);
147 DALI_TEST_EQUALS(Vector2(0, 0), control.GetCurrentProperty<Vector2>(Actor::Property::POSITION), TEST_LOCATION);
152 int UtcDaliSlideTransitionOut(void)
154 ToolkitTestApplication application;
155 tet_infoline("UtcDaliSlideTransitionOut");
157 Control control = Control::New();
158 control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
159 control.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
160 control.SetProperty(Actor::Property::SIZE, Vector3(100, 100, 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(Vector2(0, 0), control.GetCurrentProperty<Vector2>(Actor::Property::POSITION), TEST_LOCATION);
174 Vector2 windowSize = application.GetScene().GetSize();
175 SlideTransition slide = SlideTransition::New(control, Dali::Toolkit::SlideTransitionDirection::BOTTOM, TimePeriod(0.5f));
176 slide.SetAppearingTransition(false);
178 TransitionSet transitionSet = TransitionSet::New();
179 transitionSet.AddTransition(slide);
180 transitionSet.Play();
182 bool signalReceived(false);
183 TransitionFinishCheck finishCheck(signalReceived);
184 transitionSet.FinishedSignal().Connect(&application, finishCheck);
186 application.SendNotification();
187 application.Render(400);
189 // We didn't expect the animation to finish yet
190 application.SendNotification();
191 finishCheck.CheckSignalNotReceived();
193 Vector2 currentPosition = control.GetCurrentProperty<Vector2>(Actor::Property::POSITION);
194 currentPosition += (windowSize / 2.0f) - Vector2(50, 50);
195 DALI_TEST_CHECK(currentPosition.y >= 0.7 * windowSize.y && currentPosition.y <= 0.9 * windowSize.y);
197 application.SendNotification();
198 application.Render(200);
200 // We did expect the animation to finish
201 application.SendNotification();
202 finishCheck.CheckSignalReceived();
204 application.SendNotification();
205 application.Render(20);
207 // Property is reset after animation.
208 DALI_TEST_EQUALS(Vector2(0, 0), control.GetCurrentProperty<Vector2>(Actor::Property::POSITION), TEST_LOCATION);
213 int UtcDaliSlideTransitionIn(void)
215 ToolkitTestApplication application;
216 tet_infoline("UtcDaliSlideTransitionIn");
218 Control control = Control::New();
219 control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
220 control.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
221 control.SetProperty(Actor::Property::SIZE, Vector3(100, 100, 0));
222 control.SetProperty(Actor::Property::OPACITY, 1.0f);
223 Property::Map controlProperty;
224 controlProperty.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR);
225 controlProperty.Insert(Toolkit::ColorVisual::Property::MIX_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
226 control.SetProperty(Toolkit::Control::Property::BACKGROUND, controlProperty);
228 application.GetScene().Add(control);
230 application.SendNotification();
231 application.Render(20);
233 DALI_TEST_EQUALS(Vector2(0, 0), control.GetCurrentProperty<Vector2>(Actor::Property::POSITION), TEST_LOCATION);
235 Vector2 windowSize = application.GetScene().GetSize();
237 SlideTransition slide = SlideTransition::New(control, Dali::Toolkit::SlideTransitionDirection::RIGHT, TimePeriod(0.5f));
238 slide.SetAppearingTransition(true);
239 TransitionSet transitionSet = TransitionSet::New();
240 transitionSet.AddTransition(slide);
241 transitionSet.Play();
243 bool signalReceived(false);
244 TransitionFinishCheck finishCheck(signalReceived);
245 transitionSet.FinishedSignal().Connect(&application, finishCheck);
247 application.SendNotification();
248 application.Render(400);
250 // We didn't expect the animation to finish yet
251 application.SendNotification();
252 finishCheck.CheckSignalNotReceived();
254 Vector2 currentPosition = control.GetCurrentProperty<Vector2>(Actor::Property::POSITION);
255 currentPosition += (windowSize / 2.0f) - Vector2(50, 50);
256 DALI_TEST_CHECK(currentPosition.x >= 0.1 * windowSize.x && currentPosition.x <= 0.3 * windowSize.x);
258 application.SendNotification();
259 application.Render(200);
261 // We did expect the animation to finish
262 application.SendNotification();
263 finishCheck.CheckSignalReceived();
265 application.SendNotification();
266 application.Render(20);
268 DALI_TEST_EQUALS(Vector2(0, 0), control.GetCurrentProperty<Vector2>(Actor::Property::POSITION), TEST_LOCATION);