1 /*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "gtest/gtest.h"
17
18 #include "animation/rs_implicit_animator.h"
19 #include "animation/rs_motion_path_option.h"
20 #include "ui/rs_canvas_node.h"
21 #include "modifier/rs_property_modifier.h"
22
23 using namespace testing;
24 using namespace testing::ext;
25
26 namespace OHOS {
27 namespace Rosen {
28 class RSImplicitAnimatorTest : public testing::Test {
29 public:
30 static void SetUpTestCase();
31 static void TearDownTestCase();
32 void SetUp() override;
33 void TearDown() override;
34
35 const std::string ANIMATION_PATH = "L350 0 L150 100";
36 const Vector4f ANIMATION_START_BOUNDS = Vector4f(100.f, 100.f, 200.f, 300.f);
37 const Vector4f ANIMATION_END_BOUNDS = Vector4f(100.f, 100.f, 300.f, 300.f);
38 };
39
SetUpTestCase()40 void RSImplicitAnimatorTest::SetUpTestCase() {}
TearDownTestCase()41 void RSImplicitAnimatorTest::TearDownTestCase() {}
SetUp()42 void RSImplicitAnimatorTest::SetUp() {}
TearDown()43 void RSImplicitAnimatorTest::TearDown() {}
44
45 /**
46 * @tc.name: OpenImplicitAnimation001
47 * @tc.desc: Verify the OpenImplicitAnimation
48 * @tc.type:FUNC
49 */
50 HWTEST_F(RSImplicitAnimatorTest, GetBoundsTest, TestSize.Level1)
51 {
52 GTEST_LOG_(INFO) << "RSImplicitAnimatorTest OpenImplicitAnimation001 start";
53 RSAnimationTimingProtocol timingProtocol;
54 float mass = 0.5f;
55 float stiffness = 0.0f;
56 float damping = 0.5f;
57 float velocity = 1.0f;
58 auto timingCurve = RSAnimationTimingCurve::CreateInterpolatingSpring(mass, stiffness, damping, velocity);
59 auto implicitAnimator = std::make_shared<RSImplicitAnimator>();
60 implicitAnimator->OpenImplicitAnimation(RSAnimationTimingProtocol::DEFAULT, timingCurve);
61 EXPECT_TRUE(implicitAnimator != nullptr);
62 GTEST_LOG_(INFO) << "RSImplicitAnimatorTest OpenImplicitAnimation001 end";
63 }
64
65 /**
66 * @tc.name: BeginImplicitDurationKeyFrameAnimation001
67 * @tc.desc: Verify the BeginImplicitDurationKeyFrameAnimation
68 * @tc.type:FUNC
69 */
70 HWTEST_F(RSImplicitAnimatorTest, BeginImplicitDurationKeyFrameAnimation001, TestSize.Level1)
71 {
72 GTEST_LOG_(INFO) << "RSImplicitAnimatorTest BeginImplicitDurationKeyFrameAnimation001 start";
73 int duration = 1000;
74 RSAnimationTimingProtocol timingProtocol;
75 float mass = 0.5f;
76 float stiffness = 0.0f;
77 float damping = 0.5f;
78 float velocity = 1.0f;
79 auto timingCurve = RSAnimationTimingCurve::CreateSpringCurve(velocity, mass, stiffness, damping);
80 auto implicitAnimator = std::make_shared<RSImplicitAnimator>();
81 implicitAnimator->BeginImplicitDurationKeyFrameAnimation(duration, timingCurve);
82
83 implicitAnimator->OpenImplicitAnimation(RSAnimationTimingProtocol::DEFAULT, timingCurve);
84 implicitAnimator->BeginImplicitDurationKeyFrameAnimation(duration, timingCurve);
85
86 RSAnimationTimingProtocol timingProtocol1(0);
87 auto timingCurve1 = RSAnimationTimingCurve::DEFAULT;
88 implicitAnimator->OpenImplicitAnimation(timingProtocol1, timingCurve1);
89 implicitAnimator->BeginImplicitDurationKeyFrameAnimation(duration, timingCurve1);
90
91 implicitAnimator->OpenImplicitAnimation(timingProtocol, timingCurve1);
92 implicitAnimator->BeginImplicitDurationKeyFrameAnimation(duration, timingCurve1);
93 EXPECT_TRUE(implicitAnimator != nullptr);
94 GTEST_LOG_(INFO) << "RSImplicitAnimatorTest BeginImplicitDurationKeyFrameAnimation001 end";
95 }
96
97 /**
98 * @tc.name: EndImplicitDurationKeyFrameAnimation001
99 * @tc.desc: Verify the EndImplicitDurationKeyFrameAnimation
100 * @tc.type:FUNC
101 */
102 HWTEST_F(RSImplicitAnimatorTest, EndImplicitDurationKeyFrameAnimation001, TestSize.Level1)
103 {
104 GTEST_LOG_(INFO) << "RSImplicitAnimatorTest EndImplicitDurationKeyFrameAnimation001 start";
105 int duration = 1000;
106 auto implicitAnimator = std::make_shared<RSImplicitAnimator>();
107 implicitAnimator->EndImplicitDurationKeyFrameAnimation();
108
109 RSAnimationTimingProtocol timingProtocol;
110 auto timingCurve = RSAnimationTimingCurve::DEFAULT;
111 implicitAnimator->OpenImplicitAnimation(timingProtocol, timingCurve);
112 implicitAnimator->BeginImplicitDurationKeyFrameAnimation(duration, timingCurve);
113 implicitAnimator->EndImplicitDurationKeyFrameAnimation();
114 EXPECT_TRUE(implicitAnimator != nullptr);
115 GTEST_LOG_(INFO) << "RSImplicitAnimatorTest EndImplicitDurationKeyFrameAnimation001 end";
116 }
117
118 /**
119 * @tc.name: EndImplicitPathAnimation001
120 * @tc.desc: Verify the EndImplicitPathAnimation
121 * @tc.type:FUNC
122 */
123 HWTEST_F(RSImplicitAnimatorTest, EndImplicitPathAnimation001, TestSize.Level1)
124 {
125 GTEST_LOG_(INFO) << "RSImplicitAnimatorTest EndImplicitPathAnimation001 start";
126 auto implicitAnimator = std::make_shared<RSImplicitAnimator>();
127 implicitAnimator->EndImplicitPathAnimation();
128
129 auto motionPathOption = std::make_shared<RSMotionPathOption>(ANIMATION_PATH);
130 RSAnimationTimingProtocol timingProtocol;
131 auto timingCurve = RSAnimationTimingCurve::DEFAULT;
132 implicitAnimator->OpenImplicitAnimation(timingProtocol, timingCurve);
133 implicitAnimator->BeginImplicitPathAnimation(motionPathOption);
134 implicitAnimator->EndImplicitPathAnimation();
135 EXPECT_TRUE(implicitAnimator != nullptr);
136 GTEST_LOG_(INFO) << "RSImplicitAnimatorTest EndImplicitPathAnimation001 end";
137 }
138
139 /**
140 * @tc.name: CancelImplicitAnimation001
141 * @tc.desc: Verify the CancelImplicitAnimation
142 * @tc.type:FUNC
143 */
144 HWTEST_F(RSImplicitAnimatorTest, CancelImplicitAnimation001, TestSize.Level1)
145 {
146 GTEST_LOG_(INFO) << "RSImplicitAnimatorTest CancelImplicitAnimation001 start";
147
148 std::shared_ptr<RSCanvasNode> canvasNode = nullptr;
149 std::shared_ptr<RSAnimatableProperty<Vector2f>> property = nullptr;
150
151 auto implicitAnimator = std::make_shared<RSImplicitAnimator>();
152 implicitAnimator->CancelImplicitAnimation(canvasNode, property);
153
154 auto canvasNode1 = RSCanvasNode::Create();
155 std::shared_ptr<RSAnimatableProperty<Vector2f>> property1 = nullptr;
156 implicitAnimator->CancelImplicitAnimation(canvasNode1, property1);
157
158 auto canvasNode2 = RSCanvasNode::Create();
159 auto property2 = std::make_shared<RSAnimatableProperty<Vector2f>>(Vector2f(0.f, 0.f));
160 implicitAnimator->CancelImplicitAnimation(canvasNode2, property2);
161
162 auto property3 = std::make_shared<RSAnimatableProperty<Vector4f>>(ANIMATION_START_BOUNDS);
163 auto startProperty = std::make_shared<RSAnimatableProperty<Vector4f>>(ANIMATION_START_BOUNDS);
164 auto endProperty = std::make_shared<RSAnimatableProperty<Vector4f>>(ANIMATION_END_BOUNDS);
165 auto modifier3 = std::make_shared<RSBoundsModifier>(property3);
166 auto canvasNode3 = RSCanvasNode::Create();
167 canvasNode3->AddModifier(modifier3);
168
169 auto timingCurve = RSAnimationTimingCurve::DEFAULT;
170 RSAnimationTimingProtocol timingProtocol3;
171 implicitAnimator->OpenImplicitAnimation(timingProtocol3, timingCurve);
172 implicitAnimator->CreateImplicitAnimation(canvasNode3, property3, nullptr, endProperty);
173 implicitAnimator->CreateImplicitAnimation(canvasNode3, property3, startProperty, nullptr);
174 implicitAnimator->CreateImplicitAnimation(canvasNode3, property3, startProperty, endProperty);
175 implicitAnimator->CancelImplicitAnimation(canvasNode3, property3);
176
177 RSAnimationTimingProtocol timingProtocol4(0);
178 implicitAnimator->OpenImplicitAnimation(timingProtocol4, timingCurve);
179 implicitAnimator->CreateImplicitAnimation(canvasNode3, property3, startProperty, endProperty);
180 implicitAnimator->CancelImplicitAnimation(canvasNode3, property3);
181
182 EXPECT_TRUE(implicitAnimator != nullptr);
183 GTEST_LOG_(INFO) << "RSImplicitAnimatorTest CancelImplicitAnimation001 end";
184 }
185
186 /**
187 * @tc.name: CreateImplicitAnimationWithInitialVelocity001
188 * @tc.desc: Verify the CreateImplicitAnimationWithInitialVelocity
189 * @tc.type:FUNC
190 */
191 HWTEST_F(RSImplicitAnimatorTest, CreateImplicitAnimationWithInitialVelocity001, TestSize.Level1)
192 {
193 GTEST_LOG_(INFO) << "RSImplicitAnimatorTest CreateImplicitAnimationWithInitialVelocity001 start";
194 RSAnimationTimingProtocol timingProtocol;
195 auto timingCurve = RSAnimationTimingCurve::SPRING;
196 auto implicitAnimator = std::make_shared<RSImplicitAnimator>();
197
198 std::shared_ptr<RSCanvasNode> node = nullptr;
199 std::shared_ptr<RSAnimatableProperty<Vector4f>> prop = nullptr;
200 std::shared_ptr<RSAnimatableProperty<Vector4f>> prop_start = nullptr;
201 std::shared_ptr<RSAnimatableProperty<Vector4f>> prop_end = nullptr;
202 auto velocity = std::make_shared<RSAnimatableProperty<float>>(1.0f);
203
204 implicitAnimator->CreateImplicitAnimationWithInitialVelocity(node, prop, prop_start, prop_end, velocity);
205
206 auto node1 = RSCanvasNode::Create();
207 implicitAnimator->OpenImplicitAnimation(RSAnimationTimingProtocol::DEFAULT, RSAnimationTimingCurve::DEFAULT);
208 implicitAnimator->CreateImplicitAnimationWithInitialVelocity(node1, prop, prop_start, prop_end, velocity);
209
210 auto prop1 = std::make_shared<RSAnimatableProperty<Vector4f>>(ANIMATION_START_BOUNDS);
211 implicitAnimator->OpenImplicitAnimation(RSAnimationTimingProtocol::DEFAULT, RSAnimationTimingCurve::DEFAULT);
212 implicitAnimator->CreateImplicitAnimationWithInitialVelocity(node1, prop1, prop_start, prop_end, velocity);
213
214 EXPECT_TRUE(implicitAnimator != nullptr);
215 GTEST_LOG_(INFO) << "RSImplicitAnimatorTest CreateImplicitAnimationWithInitialVelocity001 end";
216 }
217
218 /**
219 * @tc.name: CreateImplicitAnimationWithInitialVelocity002
220 * @tc.desc: Verify the CreateImplicitAnimationWithInitialVelocity
221 * @tc.type:FUNC
222 */
223 HWTEST_F(RSImplicitAnimatorTest, CreateImplicitAnimationWithInitialVelocity002, TestSize.Level1)
224 {
225 GTEST_LOG_(INFO) << "RSImplicitAnimatorTest CreateImplicitAnimationWithInitialVelocity002 start";
226 RSAnimationTimingProtocol timingProtocol;
227 auto timingCurve = RSAnimationTimingCurve::SPRING;
228 auto implicitAnimator = std::make_shared<RSImplicitAnimator>();
229
230 auto canvasNode = RSCanvasNode::Create();
231 auto property = std::make_shared<RSAnimatableProperty<Vector4f>>(ANIMATION_START_BOUNDS);
232 auto startProperty = std::make_shared<RSAnimatableProperty<Vector4f>>(ANIMATION_START_BOUNDS);
233 auto endProperty = std::make_shared<RSAnimatableProperty<Vector4f>>(ANIMATION_END_BOUNDS);
234 auto velocity = std::make_shared<RSAnimatableProperty<float>>(1.0f);
235 auto modifier = std::make_shared<RSBoundsModifier>(property);
236 canvasNode->AddModifier(modifier);
237
238 implicitAnimator->OpenImplicitAnimation(RSAnimationTimingProtocol::DEFAULT, timingCurve);
239 implicitAnimator->CreateImplicitAnimationWithInitialVelocity(
240 canvasNode, property, startProperty, endProperty, velocity);
241
242 bool flag = false;
__anon94e943670102() 243 std::function<void()> func = [&]() { flag = !flag; };
244 auto finishCallback = std::make_shared<AnimationFinishCallback>(func);
245 auto repeatCallback = std::make_shared<AnimationRepeatCallback>(func);
246
247 implicitAnimator->OpenImplicitAnimation(
248 RSAnimationTimingProtocol::DEFAULT, timingCurve, std::move(finishCallback), nullptr);
249 implicitAnimator->CreateImplicitAnimationWithInitialVelocity(
250 canvasNode, property, startProperty, endProperty, velocity);
251
252 implicitAnimator->OpenImplicitAnimation(
253 RSAnimationTimingProtocol::DEFAULT, timingCurve, std::move(finishCallback), std::move(repeatCallback));
254 implicitAnimator->CreateImplicitAnimationWithInitialVelocity(
255 canvasNode, property, startProperty, endProperty, velocity);
256
257 EXPECT_TRUE(implicitAnimator != nullptr);
258 GTEST_LOG_(INFO) << "RSImplicitAnimatorTest CreateImplicitAnimationWithInitialVelocity002 end";
259 }
260 } // namespace Rosen
261 } // namespace OHOS
262