1 /*
2 * Copyright (c) 2022 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 "base/utils/string_utils.h"
19 #include "frameworks/bridge/common/utils/utils.h"
20 #include "frameworks/bridge/js_frontend/engine/common/base_animation_bridge.h"
21 #include "frameworks/bridge/js_frontend/engine/common/js_constants.h"
22 #include "frameworks/core/animation/curve.h"
23
24 using namespace testing;
25 using namespace testing::ext;
26 namespace OHOS::Ace::Framework {
27 namespace {
28 constexpr double SIZE_VALUE_ZERO = 0;
29 constexpr double SIZE_VALUE_TEN = 10;
30 constexpr double SIZE_VALUE_FIFTY = 50;
31 constexpr double SIZE_VALUE_HUNDRED = 100;
32 constexpr float ANIMATION_ZERO_VALUE = 0.0f;
33 constexpr float ANIMATION_ONE_VALUE = 1.0f;
34 constexpr float ANIMATION_CUBIC_VALUE_ONE = 0.000295256f;
35 constexpr float ANIMATION_CUBIC_VALUE_TWO = 0.801992f;
36 constexpr float ANIMATION_SPRING_VALUE = -0.193207f;
37 const std::string ANIMATION_EASING_CUBIC_EASE = "cubic-bezier(0.25, 0.1, 0.25, 1.0)";
38 const std::string ANIMATION_EASING_SPRING = "spring(1.0, 1.0, 1.0, 1.0)";
39 const std::string ANIMATION_EASING_SPRING_MOTION = "spring-motion(1.0, 1.0, 1.0)";
40 const std::string ANIMATION_EASING_RESPONSIVE = "responsive-spring-motion(1.0, 1.0, 1.0)";
41 const std::string ANIMATION_EASING_EASE = "ease";
42 const std::string ANIMATION_EASING_STEPS_START = "steps(1, start)";
43 const std::string ANIMATION_EASING_STEPS_END = "steps(1, end)";
44 const std::string ANIMATION_EASING_CUSTOM = "customCallback";
45 } // namespace
46
47 class CommonUtilsTest : public testing::Test {
48 public:
49 static void SetUpTestCase();
50 static void TearDownTestCase();
51 void SetUp() override;
52 void TearDown() override;
53 };
54
SetUpTestCase()55 void CommonUtilsTest::SetUpTestCase() {}
TearDownTestCase()56 void CommonUtilsTest::TearDownTestCase() {}
SetUp()57 void CommonUtilsTest::SetUp() {}
TearDown()58 void CommonUtilsTest::TearDown() {}
59
60 /**
61 * @tc.name: CommonUtilsTest001
62 * @tc.desc: BackgroundPosition parse
63 * @tc.type: FUNC
64 */
65 HWTEST_F(CommonUtilsTest, CommonUtilsTest001, TestSize.Level1)
66 {
67 /**
68 * @tc.steps: step1. parse the param contain "top".
69 * @tc.expected: step1. The value of the params are as expected.
70 */
71 BackgroundImagePosition backgroundImagePosition;
72 EXPECT_TRUE(ParseBackgroundImagePosition("top", backgroundImagePosition));
73 EXPECT_EQ(backgroundImagePosition.GetSizeValueX(), SIZE_VALUE_FIFTY);
74 EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeX());
75 EXPECT_EQ(backgroundImagePosition.GetSizeValueY(), SIZE_VALUE_ZERO);
76 EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeY());
77
78 /**
79 * @tc.steps: step2. parse the param which is null.
80 * @tc.expected: step2. The value of the params are as expected.
81 */
82 EXPECT_TRUE(ParseBackgroundImagePosition("", backgroundImagePosition));
83 EXPECT_EQ(backgroundImagePosition.GetSizeValueX(), SIZE_VALUE_FIFTY);
84 EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeX());
85 EXPECT_EQ(backgroundImagePosition.GetSizeValueY(), SIZE_VALUE_FIFTY);
86 EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeY());
87 }
88
89 /**
90 * @tc.name: CommonUtilsTest002
91 * @tc.desc: Animation steps parse check
92 * @tc.type: FUNC
93 */
94 HWTEST_F(CommonUtilsTest, CommonUtilsTest002, TestSize.Level1)
95 {
96 /**
97 * @tc.steps: step1. parse the param of steps curve.
98 * @tc.expected: step1. steps curve parsed success.
99 */
100 auto stepsCurve = AceType::DynamicCast<StepsCurve>(CreateCurve(ANIMATION_EASING_STEPS_START));
101 EXPECT_TRUE(NearEqual(stepsCurve->MoveInternal(0.0), ANIMATION_ONE_VALUE));
102 EXPECT_TRUE(NearEqual(stepsCurve->MoveInternal(0.5), ANIMATION_ONE_VALUE));
103 stepsCurve = AceType::DynamicCast<StepsCurve>(CreateCurve(ANIMATION_EASING_STEPS_END));
104 EXPECT_TRUE(NearEqual(stepsCurve->MoveInternal(0.0), ANIMATION_ZERO_VALUE));
105 EXPECT_TRUE(NearEqual(stepsCurve->MoveInternal(1.0), ANIMATION_ONE_VALUE));
106
107 /**
108 * @tc.steps: step2. parse the param of cubic curve.
109 * @tc.expected: step2. cubic curve parsed success.
110 */
111 auto cubicCurve = AceType::DynamicCast<CubicCurve>(CreateCurve(ANIMATION_EASING_CUBIC_EASE));
112 EXPECT_TRUE(NearEqual(cubicCurve->MoveInternal(0.0), ANIMATION_CUBIC_VALUE_ONE));
113 EXPECT_TRUE(NearEqual(cubicCurve->MoveInternal(0.5), ANIMATION_CUBIC_VALUE_TWO));
114 cubicCurve = AceType::DynamicCast<CubicCurve>(CreateCurve(ANIMATION_EASING_EASE));
115 EXPECT_TRUE(NearEqual(cubicCurve->MoveInternal(0.0), ANIMATION_CUBIC_VALUE_ONE));
116 EXPECT_TRUE(NearEqual(cubicCurve->MoveInternal(1.0), ANIMATION_ONE_VALUE));
117
118 /**
119 * @tc.steps: step3. parse the param of responsive spring motion.
120 * @tc.expected: step3. responsive spring motion parsed success.
121 */
122 auto responsiveSpringMotion =
123 AceType::DynamicCast<ResponsiveSpringMotion>(CreateCurve(ANIMATION_EASING_RESPONSIVE));
124 EXPECT_EQ(responsiveSpringMotion->GetResponse(), ANIMATION_ONE_VALUE);
125 EXPECT_EQ(responsiveSpringMotion->GetDampingRatio(), ANIMATION_ONE_VALUE);
126 EXPECT_EQ(responsiveSpringMotion->GetBlendDuration(), ANIMATION_ONE_VALUE);
127
128 /**
129 * @tc.steps: step4. parse the param of spring curve.
130 * @tc.expected: step4. spring curve parsed success.
131 */
132 auto springCurve = AceType::DynamicCast<SpringCurve>(CreateCurve(ANIMATION_EASING_SPRING));
133 EXPECT_TRUE(NearEqual(springCurve->MoveInternal(0.0), ANIMATION_ZERO_VALUE));
134 EXPECT_TRUE(NearEqual(springCurve->MoveInternal(1.0), ANIMATION_SPRING_VALUE));
135
136 /**
137 * @tc.steps: step5. parse the param of spring motion.
138 * @tc.expected: step5. spring motion parsed success.
139 */
140 auto springMotion = AceType::DynamicCast<ResponsiveSpringMotion>(CreateCurve(ANIMATION_EASING_SPRING_MOTION));
141 EXPECT_EQ(springMotion->GetResponse(), ANIMATION_ONE_VALUE);
142 EXPECT_EQ(springMotion->GetDampingRatio(), ANIMATION_ONE_VALUE);
143 EXPECT_EQ(springMotion->GetBlendDuration(), ANIMATION_ONE_VALUE);
144 }
145
146 /**
147 * @tc.name: CommonUtilsTest003
148 * @tc.desc: BackgroundImageSize parse
149 * @tc.type: FUNC
150 */
151 HWTEST_F(CommonUtilsTest, CommonUtilsTest003, TestSize.Level1)
152 {
153 /**
154 * @tc.steps: step1. parse the param contain "%", "px" and " ".
155 * @tc.expected: step1. The value of the params are as expected.
156 */
157 BackgroundImageSize bgImgSize;
158 EXPECT_TRUE(ParseBackgroundImageSize("50% 50px", bgImgSize));
159 EXPECT_EQ(bgImgSize.GetSizeValueX(), SIZE_VALUE_FIFTY);
160 EXPECT_EQ(bgImgSize.GetSizeTypeX(), BackgroundImageSizeType::PERCENT);
161 EXPECT_EQ(bgImgSize.GetSizeValueY(), SIZE_VALUE_FIFTY);
162 EXPECT_EQ(bgImgSize.GetSizeTypeY(), BackgroundImageSizeType::LENGTH);
163
164 /**
165 * @tc.steps: step2. parse the param contain "px", "%" and " ".
166 * @tc.expected: step2. The value of the params are as expected.
167 */
168 EXPECT_TRUE(ParseBackgroundImageSize("50px 50%", bgImgSize));
169 EXPECT_EQ(bgImgSize.GetSizeValueX(), SIZE_VALUE_FIFTY);
170 EXPECT_EQ(bgImgSize.GetSizeTypeX(), BackgroundImageSizeType::LENGTH);
171 EXPECT_EQ(bgImgSize.GetSizeValueY(), SIZE_VALUE_FIFTY);
172 EXPECT_EQ(bgImgSize.GetSizeTypeY(), BackgroundImageSizeType::PERCENT);
173
174 /**
175 * @tc.steps: step3. parse the param contain " ".
176 * @tc.expected: step3. The value of the params are as expected.
177 */
178 EXPECT_TRUE(ParseBackgroundImageSize("test test", bgImgSize));
179 EXPECT_EQ(bgImgSize.GetSizeValueX(), SIZE_VALUE_FIFTY);
180 EXPECT_EQ(bgImgSize.GetSizeTypeX(), BackgroundImageSizeType::AUTO);
181 EXPECT_EQ(bgImgSize.GetSizeValueY(), SIZE_VALUE_FIFTY);
182 EXPECT_EQ(bgImgSize.GetSizeTypeY(), BackgroundImageSizeType::AUTO);
183 }
184
185 /**
186 * @tc.name: CommonUtilsTest004
187 * @tc.desc: BackgroundImageSize parse
188 * @tc.type: FUNC
189 */
190 HWTEST_F(CommonUtilsTest, CommonUtilsTest004, TestSize.Level1)
191 {
192 /**
193 * @tc.steps: step1. parse the param contain "px".
194 * @tc.expected: step1. The value of the params are as expected.
195 */
196 BackgroundImageSize bgImgSize;
197 EXPECT_TRUE(ParseBackgroundImageSize("50px", bgImgSize));
198 EXPECT_EQ(bgImgSize.GetSizeValueX(), SIZE_VALUE_FIFTY);
199 EXPECT_EQ(bgImgSize.GetSizeTypeX(), BackgroundImageSizeType::LENGTH);
200 EXPECT_EQ(bgImgSize.GetSizeValueY(), SIZE_VALUE_ZERO);
201 EXPECT_EQ(bgImgSize.GetSizeTypeY(), BackgroundImageSizeType::AUTO);
202
203 /**
204 * @tc.steps: step2. parse the param contain "%".
205 * @tc.expected: step2. The value of the params are as expected.
206 */
207 EXPECT_TRUE(ParseBackgroundImageSize("50%", bgImgSize));
208 EXPECT_EQ(bgImgSize.GetSizeValueX(), SIZE_VALUE_FIFTY);
209 EXPECT_EQ(bgImgSize.GetSizeTypeX(), BackgroundImageSizeType::PERCENT);
210 EXPECT_EQ(bgImgSize.GetSizeValueY(), SIZE_VALUE_ZERO);
211 EXPECT_EQ(bgImgSize.GetSizeTypeY(), BackgroundImageSizeType::AUTO);
212
213 /**
214 * @tc.steps: step3. parse the param.
215 * @tc.expected: step3. The value of the params are as expected.
216 */
217 EXPECT_TRUE(ParseBackgroundImageSize("test", bgImgSize));
218 EXPECT_EQ(bgImgSize.GetSizeValueX(), SIZE_VALUE_FIFTY);
219 EXPECT_EQ(bgImgSize.GetSizeTypeX(), BackgroundImageSizeType::AUTO);
220 EXPECT_EQ(bgImgSize.GetSizeValueY(), SIZE_VALUE_ZERO);
221 EXPECT_EQ(bgImgSize.GetSizeTypeY(), BackgroundImageSizeType::AUTO);
222
223 /**
224 * @tc.steps: step4. parse the param which is "auto".
225 * @tc.expected: step4. The value of the params are as expected.
226 */
227 EXPECT_TRUE(ParseBackgroundImageSize("auto", bgImgSize));
228 EXPECT_EQ(bgImgSize.GetSizeValueX(), SIZE_VALUE_FIFTY);
229 EXPECT_EQ(bgImgSize.GetSizeTypeX(), BackgroundImageSizeType::AUTO);
230 EXPECT_EQ(bgImgSize.GetSizeValueY(), SIZE_VALUE_ZERO);
231 EXPECT_EQ(bgImgSize.GetSizeTypeY(), BackgroundImageSizeType::AUTO);
232
233 /**
234 * @tc.steps: step5. parse the param which is "contain".
235 * @tc.expected: step5. The value of the params are as expected.
236 */
237 EXPECT_TRUE(ParseBackgroundImageSize("contain", bgImgSize));
238 EXPECT_EQ(bgImgSize.GetSizeValueX(), SIZE_VALUE_FIFTY);
239 EXPECT_EQ(bgImgSize.GetSizeTypeX(), BackgroundImageSizeType::CONTAIN);
240 EXPECT_EQ(bgImgSize.GetSizeValueY(), SIZE_VALUE_ZERO);
241 EXPECT_EQ(bgImgSize.GetSizeTypeY(), BackgroundImageSizeType::AUTO);
242
243 /**
244 * @tc.steps: step6. parse the param which is "cover".
245 * @tc.expected: step6. The value of the params are as expected.
246 */
247 EXPECT_TRUE(ParseBackgroundImageSize("cover", bgImgSize));
248 EXPECT_EQ(bgImgSize.GetSizeValueX(), SIZE_VALUE_FIFTY);
249 EXPECT_EQ(bgImgSize.GetSizeTypeX(), BackgroundImageSizeType::COVER);
250 EXPECT_EQ(bgImgSize.GetSizeValueY(), SIZE_VALUE_ZERO);
251 EXPECT_EQ(bgImgSize.GetSizeTypeY(), BackgroundImageSizeType::AUTO);
252 }
253
254 /**
255 * @tc.name: CommonUtilsTest005
256 * @tc.desc: ObjectPosition parse
257 * @tc.type: FUNC
258 */
259 HWTEST_F(CommonUtilsTest, CommonUtilsTest005, TestSize.Level1)
260 {
261 /**
262 * @tc.steps: step1. parse the param contain "px" and "%".
263 * @tc.expected: step1. The value of the params are as expected.
264 */
265 auto imageObjectPosition = ParseImageObjectPosition("10px 10%");
266 EXPECT_EQ(imageObjectPosition.GetSizeValueX(), SIZE_VALUE_TEN);
267 EXPECT_EQ(imageObjectPosition.GetSizeTypeX(), BackgroundImagePositionType::PX);
268 EXPECT_EQ(imageObjectPosition.GetSizeValueY(), SIZE_VALUE_TEN);
269 EXPECT_EQ(imageObjectPosition.GetSizeTypeY(), BackgroundImagePositionType::PERCENT);
270
271 /**
272 * @tc.steps: step2. parse the param contain "%" and "px".
273 * @tc.expected: step2. The value of the params are as expected.
274 */
275 imageObjectPosition = ParseImageObjectPosition("10% 10px");
276 EXPECT_EQ(imageObjectPosition.GetSizeValueX(), SIZE_VALUE_TEN);
277 EXPECT_EQ(imageObjectPosition.GetSizeTypeX(), BackgroundImagePositionType::PERCENT);
278 EXPECT_EQ(imageObjectPosition.GetSizeValueY(), SIZE_VALUE_TEN);
279 EXPECT_EQ(imageObjectPosition.GetSizeTypeY(), BackgroundImagePositionType::PX);
280
281 /**
282 * @tc.steps: step3. parse the param.
283 * @tc.expected: step3. The value of the params are as expected.
284 */
285 imageObjectPosition = ParseImageObjectPosition("test");
286 EXPECT_EQ(imageObjectPosition.GetSizeValueX(), SIZE_VALUE_FIFTY);
287 EXPECT_EQ(imageObjectPosition.GetSizeTypeX(), BackgroundImagePositionType::PERCENT);
288 EXPECT_EQ(imageObjectPosition.GetSizeValueY(), SIZE_VALUE_FIFTY);
289 EXPECT_EQ(imageObjectPosition.GetSizeTypeY(), BackgroundImagePositionType::PERCENT);
290
291 /**
292 * @tc.steps: step4. parse the param contain "left" and "bottom".
293 * @tc.expected: step4. The value of the params are as expected.
294 */
295 imageObjectPosition = ParseImageObjectPosition("left bottom");
296 EXPECT_EQ(imageObjectPosition.GetSizeValueX(), SIZE_VALUE_ZERO);
297 EXPECT_EQ(imageObjectPosition.GetSizeTypeX(), BackgroundImagePositionType::PERCENT);
298 EXPECT_EQ(imageObjectPosition.GetSizeValueY(), SIZE_VALUE_HUNDRED);
299 EXPECT_EQ(imageObjectPosition.GetSizeTypeY(), BackgroundImagePositionType::PERCENT);
300
301 /**
302 * @tc.steps: step5. parse the param contain "right" and "top".
303 * @tc.expected: step5. The value of the params are as expected.
304 */
305 imageObjectPosition = ParseImageObjectPosition("right top");
306 EXPECT_EQ(imageObjectPosition.GetSizeValueX(), SIZE_VALUE_HUNDRED);
307 EXPECT_EQ(imageObjectPosition.GetSizeTypeX(), BackgroundImagePositionType::PERCENT);
308 EXPECT_EQ(imageObjectPosition.GetSizeValueY(), SIZE_VALUE_ZERO);
309 EXPECT_EQ(imageObjectPosition.GetSizeTypeY(), BackgroundImagePositionType::PERCENT);
310 }
311
312 /**
313 * @tc.name: CommonUtilsTest006
314 * @tc.desc: ClipPath prase
315 * @tc.type: FUNC
316 */
317 HWTEST_F(CommonUtilsTest, CommonUtilsTest006, TestSize.Level1)
318 {
319 /**
320 * @tc.steps: step1. Create ClipPath ,input a string which contain "inset()" and "margin-box"
321 * @tc.expected: step1. The value of the params are as expected.
322 */
323 auto clipPath = CreateClipPath("inset(margin-box)");
324 EXPECT_NE(clipPath, nullptr);
325 EXPECT_EQ(clipPath->GetGeometryBoxType(), GeometryBoxType::MARGIN_BOX);
326 }
327
328 /**
329 * @tc.name: CommonUtilsTest007
330 * @tc.desc: RadialGradient parse
331 * @tc.type: FUNC
332 */
333 HWTEST_F(CommonUtilsTest, CommonUtilsTest007, TestSize.Level1)
334 {
335 /**
336 * @tc.steps: step1. parse the param.
337 * @tc.expected: step1. The value of the params are as expected.
338 */
339 auto radialGradient = ParseRadialGradientSize("closest-corner");
340 EXPECT_EQ(radialGradient, RadialSizeType::CLOSEST_CORNER);
341 radialGradient = ParseRadialGradientSize("closest-side");
342 EXPECT_EQ(radialGradient, RadialSizeType::CLOSEST_SIDE);
343 radialGradient = ParseRadialGradientSize("farthest-corner");
344 EXPECT_EQ(radialGradient, RadialSizeType::FARTHEST_CORNER);
345 radialGradient = ParseRadialGradientSize("farthest-side");
346 EXPECT_EQ(radialGradient, RadialSizeType::FARTHEST_SIDE);
347 }
348
349 /**
350 * @tc.name: CommonUtilsTest008
351 * @tc.desc: TransitionType parse
352 * @tc.type: FUNC
353 */
354 HWTEST_F(CommonUtilsTest, CommonUtilsTest008, TestSize.Level1)
355 {
356 /**
357 * @tc.steps: step1. parse the param.
358 * @tc.expected: step1. The value of the params are as expected.
359 */
360 auto transitionType = ParseTransitionType("All");
361 EXPECT_EQ(transitionType, TransitionType::ALL);
362 transitionType = ParseTransitionType("Insert");
363 EXPECT_EQ(transitionType, TransitionType::APPEARING);
364 transitionType = ParseTransitionType("Delete");
365 EXPECT_EQ(transitionType, TransitionType::DISAPPEARING);
366 transitionType = ParseTransitionType("Modify");
367 EXPECT_EQ(transitionType, TransitionType::ALL);
368 }
369
370 /**
371 * @tc.name: CommonUtilsTest009
372 * @tc.desc: Animation CreateCurve step check
373 * @tc.type: FUNC
374 */
375 HWTEST_F(CommonUtilsTest, CommonUtilsTest009, TestSize.Level1)
376 {
377 /**
378 * @tc.steps: step1. parse the param of Custom curve.
379 * @tc.expected: Custom curve parsed success.
380 */
__anon7c30f0a50202(float time) 381 auto customCallback = [](float time) -> float { return time; };
382 auto customCurve = AceType::DynamicCast<CustomCurve>(CreateCurve(customCallback));
383 ASSERT_NE(customCurve, nullptr);
384 EXPECT_TRUE(NearEqual(customCurve->MoveInternal(0.0), ANIMATION_ZERO_VALUE));
385 EXPECT_TRUE(NearEqual(customCurve->MoveInternal(1.0), ANIMATION_ONE_VALUE));
386 EXPECT_EQ(customCurve->ToString(), ANIMATION_EASING_CUSTOM);
387 }
388 } // namespace OHOS::Ace::Framework
389