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/js_constants.h"
21 #include "frameworks/bridge/js_frontend/engine/common/base_animation_bridge.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 } // namespace
45
46 class CommonUtilsTest : public testing::Test {
47 public:
48 static void SetUpTestCase();
49 static void TearDownTestCase();
50 void SetUp() override;
51 void TearDown() override;
52 };
53
SetUpTestCase()54 void CommonUtilsTest::SetUpTestCase() {}
TearDownTestCase()55 void CommonUtilsTest::TearDownTestCase() {}
SetUp()56 void CommonUtilsTest::SetUp() {}
TearDown()57 void CommonUtilsTest::TearDown() {}
58
59 /**
60 * @tc.name: CommonUtilsTest001
61 * @tc.desc: BackgroundPosition parse
62 * @tc.type: FUNC
63 */
64 HWTEST_F(CommonUtilsTest, CommonUtilsTest001, TestSize.Level1)
65 {
66 /**
67 * @tc.steps: step1. parse the param contain "top".
68 * @tc.expected: step1. The value of the params are as expected.
69 */
70 BackgroundImagePosition backgroundImagePosition;
71 EXPECT_TRUE(ParseBackgroundImagePosition("top", backgroundImagePosition));
72 EXPECT_EQ(backgroundImagePosition.GetSizeValueX(), SIZE_VALUE_FIFTY);
73 EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeX());
74 EXPECT_EQ(backgroundImagePosition.GetSizeValueY(), SIZE_VALUE_ZERO);
75 EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeY());
76
77 /**
78 * @tc.steps: step2. parse the param which is null.
79 * @tc.expected: step2. The value of the params are as expected.
80 */
81 EXPECT_TRUE(ParseBackgroundImagePosition("", backgroundImagePosition));
82 EXPECT_EQ(backgroundImagePosition.GetSizeValueX(), SIZE_VALUE_FIFTY);
83 EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeX());
84 EXPECT_EQ(backgroundImagePosition.GetSizeValueY(), SIZE_VALUE_FIFTY);
85 EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeY());
86 }
87
88 /**
89 * @tc.name: CommonUtilsTest002
90 * @tc.desc: Animation steps parse check
91 * @tc.type: FUNC
92 */
93 HWTEST_F(CommonUtilsTest, CommonUtilsTest002, TestSize.Level1)
94 {
95 /**
96 * @tc.steps: step1. parse the param of steps curve.
97 * @tc.expected: step1. steps curve parsed success.
98 */
99 auto stepsCurve = AceType::DynamicCast<StepsCurve>(CreateCurve(ANIMATION_EASING_STEPS_START));
100 EXPECT_TRUE(NearEqual(stepsCurve->MoveInternal(0.0), ANIMATION_ONE_VALUE));
101 EXPECT_TRUE(NearEqual(stepsCurve->MoveInternal(0.5), ANIMATION_ONE_VALUE));
102 stepsCurve = AceType::DynamicCast<StepsCurve>(CreateCurve(ANIMATION_EASING_STEPS_END));
103 EXPECT_TRUE(NearEqual(stepsCurve->MoveInternal(0.0), ANIMATION_ZERO_VALUE));
104 EXPECT_TRUE(NearEqual(stepsCurve->MoveInternal(1.0), ANIMATION_ONE_VALUE));
105
106 /**
107 * @tc.steps: step2. parse the param of cubic curve.
108 * @tc.expected: step2. cubic curve parsed success.
109 */
110 auto cubicCurve = AceType::DynamicCast<CubicCurve>(CreateCurve(ANIMATION_EASING_CUBIC_EASE));
111 EXPECT_TRUE(NearEqual(cubicCurve->MoveInternal(0.0), ANIMATION_CUBIC_VALUE_ONE));
112 EXPECT_TRUE(NearEqual(cubicCurve->MoveInternal(0.5), ANIMATION_CUBIC_VALUE_TWO));
113 cubicCurve = AceType::DynamicCast<CubicCurve>(CreateCurve(ANIMATION_EASING_EASE));
114 EXPECT_TRUE(NearEqual(cubicCurve->MoveInternal(0.0), ANIMATION_CUBIC_VALUE_ONE));
115 EXPECT_TRUE(NearEqual(cubicCurve->MoveInternal(1.0), ANIMATION_ONE_VALUE));
116
117 /**
118 * @tc.steps: step3. parse the param of responsive spring motion.
119 * @tc.expected: step3. responsive spring motion parsed success.
120 */
121 auto responsiveSpringMotion =
122 AceType::DynamicCast<ResponsiveSpringMotion>(CreateCurve(ANIMATION_EASING_RESPONSIVE));
123 EXPECT_EQ(responsiveSpringMotion->GetResponse(), ANIMATION_ONE_VALUE);
124 EXPECT_EQ(responsiveSpringMotion->GetDampingRatio(), ANIMATION_ONE_VALUE);
125 EXPECT_EQ(responsiveSpringMotion->GetBlendDuration(), ANIMATION_ONE_VALUE);
126
127 /**
128 * @tc.steps: step4. parse the param of spring curve.
129 * @tc.expected: step4. spring curve parsed success.
130 */
131 auto springCurve = AceType::DynamicCast<SpringCurve>(CreateCurve(ANIMATION_EASING_SPRING));
132 EXPECT_TRUE(NearEqual(springCurve->MoveInternal(0.0), ANIMATION_ZERO_VALUE));
133 EXPECT_TRUE(NearEqual(springCurve->MoveInternal(1.0), ANIMATION_SPRING_VALUE));
134
135 /**
136 * @tc.steps: step5. parse the param of spring motion.
137 * @tc.expected: step5. spring motion parsed success.
138 */
139 auto springMotion =
140 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 } // namespace OHOS::Ace::Framework
370