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 <cstddef>
17 #include "gtest/gtest.h"
18 #include "skia_adapter/skia_matrix.h"
19 #include "utils/matrix.h"
20
21 using namespace testing;
22 using namespace testing::ext;
23
24 namespace OHOS {
25 namespace Rosen {
26 namespace Drawing {
27 class SkiaMatrixTest : public testing::Test {
28 public:
29 static void SetUpTestCase();
30 static void TearDownTestCase();
31 void SetUp() override;
32 void TearDown() override;
33 };
34
SetUpTestCase()35 void SkiaMatrixTest::SetUpTestCase() {}
TearDownTestCase()36 void SkiaMatrixTest::TearDownTestCase() {}
SetUp()37 void SkiaMatrixTest::SetUp() {}
TearDown()38 void SkiaMatrixTest::TearDown() {}
39
40 /**
41 * @tc.name: Multiply001
42 * @tc.desc:
43 * @tc.type: FUNC
44 * @tc.author:
45 */
46 HWTEST_F(SkiaMatrixTest, Multiply001, TestSize.Level1)
47 {
48 Matrix matrix1;
49 Matrix matrix2;
50 SkiaMatrix skiaMatrix;
51 skiaMatrix.Multiply(matrix1, matrix2);
52 EXPECT_EQ(skiaMatrix.Get(0), 1);
53 }
54
55 /**
56 * @tc.name: MapPoints001
57 * @tc.desc:
58 * @tc.type: FUNC
59 * @tc.author:
60 */
61 HWTEST_F(SkiaMatrixTest, MapPoints001, TestSize.Level1)
62 {
63 PointF point1;
64 PointF point2;
65 std::vector<Point> dst { point1 };
66 std::vector<Point> src { point2 };
67 SkiaMatrix skiaMatrix;
68 skiaMatrix.MapPoints(dst, src, 0);
69 skiaMatrix.MapPoints(dst, src, 1);
70 EXPECT_EQ(skiaMatrix.Get(0), 1);
71 }
72
73 /**
74 * @tc.name: Equals001
75 * @tc.desc:
76 * @tc.type: FUNC
77 * @tc.author:
78 */
79 HWTEST_F(SkiaMatrixTest, Equals001, TestSize.Level1)
80 {
81 Matrix matrix1;
82 Matrix matrix2;
83 SkiaMatrix skiaMatrix;
84 EXPECT_EQ(skiaMatrix.Equals(matrix1, matrix2), true);
85 }
86
87 /**
88 * @tc.name: Scale001
89 * @tc.desc: Test Scale
90 * @tc.type: FUNC
91 * @tc.require: I91EH1
92 */
93 HWTEST_F(SkiaMatrixTest, Scale001, TestSize.Level1)
94 {
95 SkiaMatrix skiaMatrix;
96 scalar matrixParam = 5;
97 skiaMatrix.SetMatrix(matrixParam, matrixParam, matrixParam, matrixParam, matrixParam,
98 matrixParam, matrixParam, matrixParam, matrixParam);
99 scalar scale = 2;
100 skiaMatrix.Scale(scale, scale, scale, scale);
101 ASSERT_TRUE(IsScalarAlmostEqual(skiaMatrix.Get(Matrix::SCALE_X), scale));
102 }
103
104 /**
105 * @tc.name: PreRotate001
106 * @tc.desc: Test PreRotate
107 * @tc.type: FUNC
108 * @tc.require: I91EH1
109 */
110 HWTEST_F(SkiaMatrixTest, PreRotate001, TestSize.Level1)
111 {
112 SkiaMatrix skiaMatrix;
113 scalar matrixParam = 5;
114 skiaMatrix.SetMatrix(matrixParam, matrixParam, matrixParam, matrixParam, matrixParam,
115 matrixParam, matrixParam, matrixParam, matrixParam);
116 skiaMatrix.PreRotate(90); // 90: degree
117 ASSERT_TRUE(IsScalarAlmostEqual(skiaMatrix.Get(Matrix::SCALE_X), matrixParam));
118 }
119
120 /**
121 * @tc.name: PreRotate002
122 * @tc.desc: Test PreRotate
123 * @tc.type: FUNC
124 * @tc.require: I91EH1
125 */
126 HWTEST_F(SkiaMatrixTest, PreRotate002, TestSize.Level1)
127 {
128 SkiaMatrix skiaMatrix;
129 scalar matrixParam = 5;
130 skiaMatrix.SetMatrix(matrixParam, matrixParam, matrixParam, matrixParam, matrixParam,
131 matrixParam, matrixParam, matrixParam, matrixParam);
132 skiaMatrix.PreRotate(90, 0, 0); // 90: degree
133 ASSERT_TRUE(IsScalarAlmostEqual(skiaMatrix.Get(Matrix::SCALE_X), matrixParam));
134 }
135
136 /**
137 * @tc.name: PostRotate001
138 * @tc.desc: Test PostRotate
139 * @tc.type: FUNC
140 * @tc.require: I91EH1
141 */
142 HWTEST_F(SkiaMatrixTest, PostRotate001, TestSize.Level1)
143 {
144 SkiaMatrix skiaMatrix;
145 scalar matrixParam = 5;
146 skiaMatrix.SetMatrix(matrixParam, matrixParam, matrixParam, matrixParam, matrixParam,
147 matrixParam, matrixParam, matrixParam, matrixParam);
148 skiaMatrix.PostRotate(90); // 90: degree
149 ASSERT_TRUE(IsScalarAlmostEqual(skiaMatrix.Get(Matrix::SCALE_X), -matrixParam));
150 }
151
152 /**
153 * @tc.name: PostTranslate001
154 * @tc.desc: Test PostTranslate
155 * @tc.type: FUNC
156 * @tc.require: I91EH1
157 */
158 HWTEST_F(SkiaMatrixTest, PostTranslate001, TestSize.Level1)
159 {
160 SkiaMatrix skiaMatrix;
161 scalar matrixParam = 5;
162 skiaMatrix.SetMatrix(matrixParam, matrixParam, matrixParam, matrixParam, matrixParam,
163 matrixParam, matrixParam, matrixParam, matrixParam);
164 scalar trans = 100;
165 skiaMatrix.PostTranslate(trans, trans);
166 ASSERT_TRUE(IsScalarAlmostEqual(skiaMatrix.Get(Matrix::TRANS_X), matrixParam * trans + matrixParam));
167 }
168
169 /**
170 * @tc.name: PreScale001
171 * @tc.desc: Test PreScale
172 * @tc.type: FUNC
173 * @tc.require: I91EH1
174 */
175 HWTEST_F(SkiaMatrixTest, PreScale001, TestSize.Level1)
176 {
177 SkiaMatrix skiaMatrix;
178 scalar matrixParam = 5;
179 skiaMatrix.SetMatrix(matrixParam, matrixParam, matrixParam, matrixParam, matrixParam,
180 matrixParam, matrixParam, matrixParam, matrixParam);
181 scalar scale = 2;
182 skiaMatrix.PreScale(scale, scale);
183 ASSERT_TRUE(IsScalarAlmostEqual(skiaMatrix.Get(Matrix::SCALE_X), scale * matrixParam));
184 }
185
186 /**
187 * @tc.name: PostScale001
188 * @tc.desc: Test PostScale
189 * @tc.type: FUNC
190 * @tc.require: I91EH1
191 */
192 HWTEST_F(SkiaMatrixTest, PostScale001, TestSize.Level1)
193 {
194 SkiaMatrix skiaMatrix;
195 scalar matrixParam = 5;
196 skiaMatrix.SetMatrix(matrixParam, matrixParam, matrixParam, matrixParam, matrixParam,
197 matrixParam, matrixParam, matrixParam, matrixParam);
198 scalar scale = 2;
199 skiaMatrix.PostScale(scale, scale);
200 ASSERT_TRUE(IsScalarAlmostEqual(skiaMatrix.Get(Matrix::SCALE_X), matrixParam * scale));
201 }
202
203 /**
204 * @tc.name: PreConcat001
205 * @tc.desc: Test PreConcat
206 * @tc.type: FUNC
207 * @tc.require: I91EH1
208 */
209 HWTEST_F(SkiaMatrixTest, PreConcat001, TestSize.Level1)
210 {
211 SkiaMatrix skiaMatrix;
212 scalar matrixParam = 5;
213 skiaMatrix.SetMatrix(matrixParam, matrixParam, matrixParam, matrixParam, matrixParam,
214 matrixParam, matrixParam, matrixParam, matrixParam);
215 Matrix44 matrix44;
216 skiaMatrix.PreConcat(matrix44);
217 ASSERT_TRUE(IsScalarAlmostEqual(skiaMatrix.Get(Matrix::SCALE_X), matrixParam));
218 }
219
220 /**
221 * @tc.name: PostConcat001
222 * @tc.desc: Test PostConcat
223 * @tc.type: FUNC
224 * @tc.require: I91EH1
225 */
226 HWTEST_F(SkiaMatrixTest, PostConcat001, TestSize.Level1)
227 {
228 SkiaMatrix skiaMatrix;
229 scalar matrixParam = 5;
230 skiaMatrix.SetMatrix(matrixParam, matrixParam, matrixParam, matrixParam, matrixParam,
231 matrixParam, matrixParam, matrixParam, matrixParam);
232 Matrix matrix;
233 skiaMatrix.PostConcat(matrix);
234 ASSERT_TRUE(IsScalarAlmostEqual(skiaMatrix.Get(Matrix::SCALE_X), matrixParam));
235 }
236
237 /**
238 * @tc.name: PostConcat002
239 * @tc.desc: Test PostConcat
240 * @tc.type: FUNC
241 * @tc.require: I91EH1
242 */
243 HWTEST_F(SkiaMatrixTest, PostConcat002, TestSize.Level1)
244 {
245 SkiaMatrix skiaMatrix;
246 scalar matrixParam = 5;
247 skiaMatrix.SetMatrix(matrixParam, matrixParam, matrixParam, matrixParam, matrixParam,
248 matrixParam, matrixParam, matrixParam, matrixParam);
249 Matrix44 matrix44;
250 skiaMatrix.PostConcat(matrix44);
251 ASSERT_TRUE(IsScalarAlmostEqual(skiaMatrix.Get(Matrix::SCALE_X), matrixParam));
252 }
253
254 /**
255 * @tc.name: SetMatrix001
256 * @tc.desc: Test SetMatrix
257 * @tc.type: FUNC
258 * @tc.require: I91EH1
259 */
260 HWTEST_F(SkiaMatrixTest, SetMatrix001, TestSize.Level1)
261 {
262 SkiaMatrix skiaMatrix;
263 skiaMatrix.SetMatrix(5, 5, 5, 5, 5, 5, 5, 5, 5);
264 ASSERT_TRUE(skiaMatrix.Get(Matrix::SKEW_X) == 5);
265 ASSERT_TRUE(skiaMatrix.Get(Matrix::TRANS_X) == 5);
266 ASSERT_TRUE(skiaMatrix.Get(Matrix::SCALE_X) == 5);
267 ASSERT_TRUE(skiaMatrix.Get(Matrix::SCALE_Y) == 5);
268 ASSERT_TRUE(skiaMatrix.Get(Matrix::TRANS_X) == 5);
269 ASSERT_TRUE(skiaMatrix.Get(Matrix::TRANS_Y) == 5);
270 }
271
272 /**
273 * @tc.name: SetSkew001
274 * @tc.desc: Test SetSkew
275 * @tc.type: FUNC
276 * @tc.require: I91EH1
277 */
278 HWTEST_F(SkiaMatrixTest, SetSkew001, TestSize.Level1)
279 {
280 SkiaMatrix skiaMatrix;
281 skiaMatrix.SetSkew(10.0, 10.0);
282 ASSERT_TRUE(skiaMatrix.Get(Matrix::SKEW_X) == 10);
283 ASSERT_TRUE(skiaMatrix.Get(Matrix::SKEW_Y) == 10);
284 }
285
286 /**
287 * @tc.name: SetSkew002
288 * @tc.desc: Test SetSkew
289 * @tc.type: FUNC
290 * @tc.require: I91EH1
291 */
292 HWTEST_F(SkiaMatrixTest, SetSkew002, TestSize.Level1)
293 {
294 SkiaMatrix skiaMatrix;
295 skiaMatrix.SetSkew(10.0, 10.0, 20.0, 20);
296 ASSERT_TRUE(skiaMatrix.Get(Matrix::SKEW_X) == 10);
297 ASSERT_TRUE(skiaMatrix.Get(Matrix::SKEW_Y) == 10);
298 ASSERT_TRUE(skiaMatrix.Get(Matrix::TRANS_X) == -10*20);
299 ASSERT_TRUE(skiaMatrix.Get(Matrix::TRANS_Y) == -10*20);
300 }
301
302 /**
303 * @tc.name: PreSkew001
304 * @tc.desc: Test PreSkew
305 * @tc.type: FUNC
306 * @tc.require: I91EH1
307 */
308 HWTEST_F(SkiaMatrixTest, PreSkew001, TestSize.Level1)
309 {
310 SkiaMatrix skiaMatrix;
311 skiaMatrix.PreSkew(5.0, 5.0);
312 ASSERT_TRUE(skiaMatrix.Get(Matrix::SKEW_X) == 5);
313 ASSERT_TRUE(skiaMatrix.Get(Matrix::SKEW_Y) == 5);
314 }
315
316 /**
317 * @tc.name: PreSkew002
318 * @tc.desc: Test PreSkew
319 * @tc.type: FUNC
320 * @tc.require: I91EH1
321 */
322 HWTEST_F(SkiaMatrixTest, PreSkew002, TestSize.Level1)
323 {
324 SkiaMatrix skiaMatrix;
325 skiaMatrix.PreSkew(10.0, 10.0, 20.0, 20);
326 ASSERT_TRUE(skiaMatrix.Get(Matrix::SKEW_X) == 10);
327 ASSERT_TRUE(skiaMatrix.Get(Matrix::SKEW_Y) == 10);
328 ASSERT_TRUE(skiaMatrix.Get(Matrix::TRANS_X) == -10*20);
329 ASSERT_TRUE(skiaMatrix.Get(Matrix::TRANS_Y) == -10*20);
330 }
331
332 /**
333 * @tc.name: PostSkew001
334 * @tc.desc: Test PostSkew
335 * @tc.type: FUNC
336 * @tc.require: I91EH1
337 */
338 HWTEST_F(SkiaMatrixTest, PostSkew001, TestSize.Level1)
339 {
340 SkiaMatrix skiaMatrix;
341 skiaMatrix.PostSkew(5.0, 5.0);
342 ASSERT_TRUE(skiaMatrix.Get(Matrix::SKEW_X) == 5);
343 ASSERT_TRUE(skiaMatrix.Get(Matrix::SKEW_Y) == 5);
344 }
345
346 /**
347 * @tc.name: PostSkew002
348 * @tc.desc: Test PostSkew
349 * @tc.type: FUNC
350 * @tc.require: I91EH1
351 */
352 HWTEST_F(SkiaMatrixTest, PostSkew002, TestSize.Level1)
353 {
354 SkiaMatrix skiaMatrix;
355 skiaMatrix.PostSkew(10.0, 10.0, 20.0, 20);
356 ASSERT_TRUE(skiaMatrix.Get(Matrix::SKEW_X) == 10);
357 ASSERT_TRUE(skiaMatrix.Get(Matrix::SKEW_Y) == 10);
358 ASSERT_TRUE(skiaMatrix.Get(Matrix::TRANS_X) == -10*20);
359 ASSERT_TRUE(skiaMatrix.Get(Matrix::TRANS_Y) == -10*20);
360 }
361
362 /**
363 * @tc.name: Invert001
364 * @tc.desc: Test Invert
365 * @tc.type: FUNC
366 * @tc.require: I91EH1
367 */
368 HWTEST_F(SkiaMatrixTest, Invert001, TestSize.Level1)
369 {
370 SkiaMatrix skiaMatrix;
371 Matrix inverse;
372 ASSERT_TRUE(skiaMatrix.Invert(inverse) == true);
373 }
374
375 /**
376 * @tc.name: SetSinCos001
377 * @tc.desc: Test SetSinCos
378 * @tc.type: FUNC
379 * @tc.require: I91EH1
380 */
381 HWTEST_F(SkiaMatrixTest, SetSinCos001, TestSize.Level1)
382 {
383 SkiaMatrix skiaMatrix;
384 skiaMatrix.SetSinCos(2, 0.5, 0.5, 2);
385 ASSERT_TRUE(skiaMatrix.Get(Matrix::SCALE_X) == 0.5);
386 ASSERT_TRUE(skiaMatrix.Get(Matrix::SCALE_Y) == 0.5);
387 }
388
389 /**
390 * @tc.name: MapRadius001
391 * @tc.desc: Test MapRadius
392 * @tc.type: FUNC
393 * @tc.require: I91EH1
394 */
395 HWTEST_F(SkiaMatrixTest, MapRadius001, TestSize.Level1)
396 {
397 SkiaMatrix skiaMatrix;
398 skiaMatrix.SetSkew(2, 0.5, 0.5, 2);
399 float error = skiaMatrix.MapRadius(1) - 1.581139;
400 ASSERT_TRUE(error <= 1e-4);
401 }
402
403 /**
404 * @tc.name: IsAffine001
405 * @tc.desc: Test IsAffine
406 * @tc.type: FUNC
407 * @tc.require: I91EH1
408 */
409 HWTEST_F(SkiaMatrixTest, IsAffine001, TestSize.Level1)
410 {
411 SkiaMatrix skiaMatrix;
412 skiaMatrix.SetSkew(2, 0.5, 0.5, 2);
413 ASSERT_TRUE(skiaMatrix.IsAffine());
414 }
415
416 /**
417 * @tc.name: RectStayRect001
418 * @tc.desc: Test RectStayRect
419 * @tc.type: FUNC
420 * @tc.require: I91EH1
421 */
422 HWTEST_F(SkiaMatrixTest, RectStayRect001, TestSize.Level1)
423 {
424 SkiaMatrix skiaMatrix;
425 skiaMatrix.SetSkew(2, 0.5, 0.5, 2);
426 ASSERT_FALSE(skiaMatrix.RectStaysRect());
427 }
428 } // namespace Drawing
429 } // namespace Rosen
430 } // namespace OHOS