• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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