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_canvas.h"
19 #include "draw/core_canvas.h"
20
21 using namespace testing;
22 using namespace testing::ext;
23
24 namespace OHOS {
25 namespace Rosen {
26 namespace Drawing {
27 class SkiaCanvasTest : 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 SkiaCanvasTest::SetUpTestCase() {}
TearDownTestCase()36 void SkiaCanvasTest::TearDownTestCase() {}
SetUp()37 void SkiaCanvasTest::SetUp() {}
TearDown()38 void SkiaCanvasTest::TearDown() {}
39
40 /**
41 * @tc.name: Bind001
42 * @tc.desc:
43 * @tc.type: FUNC
44 * @tc.author:
45 */
46 HWTEST_F(SkiaCanvasTest, Bind001, TestSize.Level1)
47 {
48 Bitmap bitmap;
49 SkiaCanvas skiaCanvas;
50 skiaCanvas.Bind(bitmap);
51
52 skiaCanvas.ImportSkCanvas(nullptr);
53 skiaCanvas.Bind(bitmap);
54 }
55
56 /**
57 * @tc.name: DrawPoint001
58 * @tc.desc:
59 * @tc.type: FUNC
60 * @tc.author:
61 */
62 HWTEST_F(SkiaCanvasTest, DrawPoint001, TestSize.Level1)
63 {
64 Point point;
65 Pen pen;
66 SkiaCanvas skiaCanvas;
67 skiaCanvas.AttachPen(pen);
68 skiaCanvas.DrawPoint(point);
69
70 skiaCanvas.ImportSkCanvas(nullptr);
71 skiaCanvas.AttachPen(pen);
72 skiaCanvas.DrawPoint(point);
73 }
74
75 /**
76 * @tc.name: DrawLine001
77 * @tc.desc:
78 * @tc.type: FUNC
79 * @tc.author:
80 */
81 HWTEST_F(SkiaCanvasTest, DrawLine001, TestSize.Level1)
82 {
83 Point startPt;
84 Point endPt;
85 Pen pen;
86 SkiaCanvas skiaCanvas;
87 skiaCanvas.AttachPen(pen);
88 skiaCanvas.DrawLine(startPt, endPt);
89
90 skiaCanvas.ImportSkCanvas(nullptr);
91 skiaCanvas.DrawLine(startPt, endPt);
92 }
93
94 /**
95 * @tc.name: DrawRect001
96 * @tc.desc:
97 * @tc.type: FUNC
98 * @tc.author:
99 */
100 HWTEST_F(SkiaCanvasTest, DrawRect001, TestSize.Level1)
101 {
102 Rect rect;
103 Pen pen;
104 SkiaCanvas skiaCanvas;
105 skiaCanvas.AttachPen(pen);
106 skiaCanvas.DrawRect(rect);
107
108 skiaCanvas.ImportSkCanvas(nullptr);
109 skiaCanvas.DrawRect(rect);
110 }
111
112 /**
113 * @tc.name: DrawRoundRect001
114 * @tc.desc:
115 * @tc.type: FUNC
116 * @tc.author:
117 */
118 HWTEST_F(SkiaCanvasTest, DrawRoundRect001, TestSize.Level1)
119 {
120 RoundRect roundRect;
121 Pen pen;
122 SkiaCanvas skiaCanvas;
123 skiaCanvas.AttachPen(pen);
124 skiaCanvas.DrawRoundRect(roundRect);
125
126 skiaCanvas.ImportSkCanvas(nullptr);
127 skiaCanvas.DrawRoundRect(roundRect);
128 }
129
130 /**
131 * @tc.name: DrawNestedRoundRect001
132 * @tc.desc:
133 * @tc.type: FUNC
134 * @tc.author:
135 */
136 HWTEST_F(SkiaCanvasTest, DrawNestedRoundRect001, TestSize.Level1)
137 {
138 RoundRect outer;
139 RoundRect inner;
140 Pen pen;
141 SkiaCanvas skiaCanvas;
142 skiaCanvas.AttachPen(pen);
143 skiaCanvas.DrawNestedRoundRect(outer, inner);
144
145 skiaCanvas.ImportSkCanvas(nullptr);
146 skiaCanvas.DrawNestedRoundRect(outer, inner);
147 }
148
149 /**
150 * @tc.name: DrawArc001
151 * @tc.desc:
152 * @tc.type: FUNC
153 * @tc.author:
154 */
155 HWTEST_F(SkiaCanvasTest, DrawArc001, TestSize.Level1)
156 {
157 Rect oval;
158 scalar startAngle = 30.0f;
159 scalar sweepAngle = 45.0f;
160 Pen pen;
161 SkiaCanvas skiaCanvas;
162 skiaCanvas.AttachPen(pen);
163 skiaCanvas.DrawArc(oval, startAngle, sweepAngle);
164
165 skiaCanvas.ImportSkCanvas(nullptr);
166 skiaCanvas.DrawArc(oval, startAngle, sweepAngle);
167 }
168
169 /**
170 * @tc.name: DrawPie001
171 * @tc.desc:
172 * @tc.type: FUNC
173 * @tc.author:
174 */
175 HWTEST_F(SkiaCanvasTest, DrawPie001, TestSize.Level1)
176 {
177 Rect oval;
178 scalar startAngle = 45.0f;
179 scalar sweepAngle = 60.0f;
180 Pen pen;
181 SkiaCanvas skiaCanvas;
182 skiaCanvas.AttachPen(pen);
183 skiaCanvas.DrawPie(oval, startAngle, sweepAngle);
184
185 skiaCanvas.ImportSkCanvas(nullptr);
186 skiaCanvas.DrawPie(oval, startAngle, sweepAngle);
187 }
188
189 /**
190 * @tc.name: DrawOval001
191 * @tc.desc:
192 * @tc.type: FUNC
193 * @tc.author:
194 */
195 HWTEST_F(SkiaCanvasTest, DrawOval001, TestSize.Level1)
196 {
197 Rect oval;
198 Pen pen;
199 SkiaCanvas skiaCanvas;
200 skiaCanvas.AttachPen(pen);
201 skiaCanvas.DrawOval(oval);
202
203 skiaCanvas.ImportSkCanvas(nullptr);
204 skiaCanvas.DrawOval(oval);
205 }
206
207 /**
208 * @tc.name: DrawCircle001
209 * @tc.desc:
210 * @tc.type: FUNC
211 * @tc.author:
212 */
213 HWTEST_F(SkiaCanvasTest, DrawCircle001, TestSize.Level1)
214 {
215 Point centerPt;
216 scalar radius = 20.0f;
217 Pen pen;
218 SkiaCanvas skiaCanvas;
219 skiaCanvas.AttachPen(pen);
220 skiaCanvas.DrawCircle(centerPt, radius);
221
222 skiaCanvas.ImportSkCanvas(nullptr);
223 skiaCanvas.DrawCircle(centerPt, radius);
224 }
225
226 /**
227 * @tc.name: DrawPath001
228 * @tc.desc:
229 * @tc.type: FUNC
230 * @tc.author:
231 */
232 HWTEST_F(SkiaCanvasTest, DrawPath001, TestSize.Level1)
233 {
234 Path path;
235 Pen pen;
236 SkiaCanvas skiaCanvas;
237 skiaCanvas.AttachPen(pen);
238 skiaCanvas.DrawPath(path);
239
240 skiaCanvas.ImportSkCanvas(nullptr);
241 skiaCanvas.DrawPath(path);
242 }
243
244 /**
245 * @tc.name: DrawBackground001
246 * @tc.desc: Draw Background Test
247 * @tc.type: FUNC
248 * @tc.require: issuel#I6Q4ZH
249 */
250 HWTEST_F(SkiaCanvasTest, DrawBackground001, TestSize.Level2)
251 {
252 Brush brush;
253 SkiaCanvas skiaCanvas;
254 skiaCanvas.DrawBackground(brush);
255
256 skiaCanvas.ImportSkCanvas(nullptr);
257 skiaCanvas.DrawBackground(brush);
258 }
259
260 /**
261 * @tc.name: DrawShadow001
262 * @tc.desc: Draw Shadow Test
263 * @tc.type: FUNC
264 * @tc.require: issuel#I6Q4ZH
265 */
266 HWTEST_F(SkiaCanvasTest, DrawShadow001, TestSize.Level2)
267 {
268 Path path;
269 Point3 planeParams;
270 Point3 devLightPos;
271 Color ambientColor;
272 Color spotColor;
273 SkiaCanvas skiaCanvas;
274 skiaCanvas.DrawShadow(path, planeParams, devLightPos, 1.0f, ambientColor, spotColor, ShadowFlags::NONE);
275
276 skiaCanvas.ImportSkCanvas(nullptr);
277 skiaCanvas.DrawShadow(path, planeParams, devLightPos, 1.0f, ambientColor, spotColor, ShadowFlags::NONE);
278 }
279
280 /**
281 * @tc.name: DrawBitmap001
282 * @tc.desc:
283 * @tc.type: FUNC
284 * @tc.author:
285 */
286 HWTEST_F(SkiaCanvasTest, DrawBitmap001, TestSize.Level1)
287 {
288 Bitmap bitmap;
289 scalar px = 60.0f;
290 scalar py = 30.0f;
291 Pen pen;
292 SkiaCanvas skiaCanvas;
293 skiaCanvas.AttachPen(pen);
294 skiaCanvas.DrawBitmap(bitmap, px, py);
295
296 skiaCanvas.ImportSkCanvas(nullptr);
297 skiaCanvas.DrawBitmap(bitmap, px, py);
298 }
299
300 /**
301 * @tc.name: DrawImage001
302 * @tc.desc:
303 * @tc.type: FUNC
304 * @tc.author:
305 */
306 HWTEST_F(SkiaCanvasTest, DrawImage001, TestSize.Level1)
307 {
308 Image image;
309 scalar px = 30.0f;
310 scalar py = 65.0f;
311 SamplingOptions sampling;
312 Pen pen;
313 SkiaCanvas skiaCanvas;
314 skiaCanvas.AttachPen(pen);
315 skiaCanvas.DrawImage(image, px, py, sampling);
316
317 skiaCanvas.ImportSkCanvas(nullptr);
318 skiaCanvas.DrawImage(image, px, py, sampling);
319 }
320
321 /**
322 * @tc.name: DrawImageRect001
323 * @tc.desc:
324 * @tc.type: FUNC
325 * @tc.author:
326 */
327 HWTEST_F(SkiaCanvasTest, DrawImageRect001, TestSize.Level1)
328 {
329 Image image;
330 Rect src;
331 Rect dst;
332 SamplingOptions sampling;
333 Pen pen;
334 SkiaCanvas skiaCanvas;
335 skiaCanvas.AttachPen(pen);
336 skiaCanvas.DrawImageRect(image, src, dst, sampling, SrcRectConstraint::STRICT_SRC_RECT_CONSTRAINT);
337
338 skiaCanvas.ImportSkCanvas(nullptr);
339 skiaCanvas.DrawImageRect(image, src, dst, sampling, SrcRectConstraint::STRICT_SRC_RECT_CONSTRAINT);
340 }
341
342 /**
343 * @tc.name: DrawImageRect002
344 * @tc.desc:
345 * @tc.type: FUNC
346 * @tc.author:
347 */
348 HWTEST_F(SkiaCanvasTest, DrawImageRect002, TestSize.Level1)
349 {
350 Image image;
351 Rect dst;
352 SamplingOptions sampling;
353 Pen pen;
354 SkiaCanvas skiaCanvas;
355 skiaCanvas.AttachPen(pen);
356 skiaCanvas.DrawImageRect(image, dst, sampling);
357
358 skiaCanvas.ImportSkCanvas(nullptr);
359 skiaCanvas.DrawImageRect(image, dst, sampling);
360 }
361
362 /**
363 * @tc.name: DrawPicture001
364 * @tc.desc:
365 * @tc.type: FUNC
366 * @tc.author:
367 */
368 HWTEST_F(SkiaCanvasTest, DrawPicture001, TestSize.Level1)
369 {
370 Picture picture;
371 SkiaCanvas skiaCanvas;
372 skiaCanvas.DrawPicture(picture);
373
374 skiaCanvas.ImportSkCanvas(nullptr);
375 skiaCanvas.DrawPicture(picture);
376 }
377
378 /**
379 * @tc.name: ClipRoundRect001
380 * @tc.desc: Clip Round Rect Test
381 * @tc.type: FUNC
382 * @tc.require: issuel#I6Q4ZH
383 */
384 HWTEST_F(SkiaCanvasTest, ClipRoundRect001, TestSize.Level2)
385 {
386 RoundRect roundRect;
387 SkiaCanvas skiaCanvas;
388 skiaCanvas.ClipRoundRect(roundRect, ClipOp::DIFFERENCE, false);
389
390 skiaCanvas.ImportSkCanvas(nullptr);
391 skiaCanvas.ClipRoundRect(roundRect, ClipOp::DIFFERENCE, false);
392 }
393
394 /**
395 * @tc.name: ClipPath001
396 * @tc.desc:
397 * @tc.type: FUNC
398 * @tc.author:
399 */
400 HWTEST_F(SkiaCanvasTest, ClipPath001, TestSize.Level1)
401 {
402 Path path;
403 Pen pen;
404 SkiaCanvas skiaCanvas;
405 skiaCanvas.AttachPen(pen);
406 skiaCanvas.ClipPath(path, ClipOp::DIFFERENCE, false);
407
408 skiaCanvas.ImportSkCanvas(nullptr);
409 skiaCanvas.ClipPath(path, ClipOp::DIFFERENCE, false);
410 }
411
412 /**
413 * @tc.name: SetMatrix001
414 * @tc.desc:
415 * @tc.type: FUNC
416 * @tc.author:
417 */
418 HWTEST_F(SkiaCanvasTest, SetMatrix001, TestSize.Level1)
419 {
420 Matrix matrix;
421 Pen pen;
422 SkiaCanvas skiaCanvas;
423 skiaCanvas.AttachPen(pen);
424 skiaCanvas.SetMatrix(matrix);
425
426 skiaCanvas.ImportSkCanvas(nullptr);
427 skiaCanvas.SetMatrix(matrix);
428 }
429
430 /**
431 * @tc.name: ResetMatrix001
432 * @tc.desc: Reset Matrix Test
433 * @tc.type: FUNC
434 * @tc.require: issuel#I6Q4ZH
435 */
436 HWTEST_F(SkiaCanvasTest, ResetMatrix001, TestSize.Level2)
437 {
438 Matrix matrix;
439 SkiaCanvas skiaCanvas;
440 skiaCanvas.SetMatrix(matrix);
441 skiaCanvas.ResetMatrix();
442
443 skiaCanvas.ImportSkCanvas(nullptr);
444 skiaCanvas.ResetMatrix();
445 }
446
447 /**
448 * @tc.name: ConcatMatrix001
449 * @tc.desc:
450 * @tc.type: FUNC
451 * @tc.author:
452 */
453 HWTEST_F(SkiaCanvasTest, ConcatMatrix001, TestSize.Level1)
454 {
455 Matrix matrix;
456 Pen pen;
457 SkiaCanvas skiaCanvas;
458 skiaCanvas.AttachPen(pen);
459 skiaCanvas.ConcatMatrix(matrix);
460
461 skiaCanvas.ImportSkCanvas(nullptr);
462 skiaCanvas.ConcatMatrix(matrix);
463 }
464
465 /**
466 * @tc.name: Rotate001
467 * @tc.desc: Rotate Test
468 * @tc.type: FUNC
469 * @tc.require: issuel#I6Q4ZH
470 */
471 HWTEST_F(SkiaCanvasTest, Rotate001, TestSize.Level2)
472 {
473 SkiaCanvas skiaCanvas;
474 skiaCanvas.Rotate(0.1f, 0.2f, 0.3f);
475
476 skiaCanvas.ImportSkCanvas(nullptr);
477 skiaCanvas.Rotate(0.1f, 0.2f, 0.3f);
478 }
479
480 /**
481 * @tc.name: Shear001
482 * @tc.desc: Shear Test
483 * @tc.type: FUNC
484 * @tc.require: issuel#I6Q4ZH
485 */
486 HWTEST_F(SkiaCanvasTest, Shear001, TestSize.Level2)
487 {
488 SkiaCanvas skiaCanvas;
489 skiaCanvas.Shear(0.5f, 0.5f);
490
491 skiaCanvas.ImportSkCanvas(nullptr);
492 skiaCanvas.Shear(0.5f, 0.5f);
493 }
494
495 /**
496 * @tc.name: Flush001
497 * @tc.desc: Flush Test
498 * @tc.type: FUNC
499 * @tc.require: issuel#I6Q4ZH
500 */
501 HWTEST_F(SkiaCanvasTest, Flush001, TestSize.Level2)
502 {
503 SkiaCanvas skiaCanvas;
504 skiaCanvas.Flush();
505
506 skiaCanvas.ImportSkCanvas(nullptr);
507 skiaCanvas.Flush();
508 }
509
510 /**
511 * @tc.name: SaveLayer001
512 * @tc.desc: SaveLayer Test
513 * @tc.type: FUNC
514 * @tc.require: issuel#I6Q4ZH
515 */
516 HWTEST_F(SkiaCanvasTest, SaveLayer001, TestSize.Level2)
517 {
518 Rect rect;
519 Brush brush;
520 SaveLayerOps slo(&rect, &brush);
521 SkiaCanvas skiaCanvas;
522 skiaCanvas.SaveLayer(slo);
523
524 skiaCanvas.ImportSkCanvas(nullptr);
525 skiaCanvas.SaveLayer(slo);
526 }
527
528 /**
529 * @tc.name: GetTotalMatrixTest001
530 * @tc.desc: Test for geting the total matrix of SkiaCanvas to device.
531 * @tc.type: FUNC
532 * @tc.require: I782P9
533 */
534 HWTEST_F(SkiaCanvasTest, GetTotalMatrixTest001, TestSize.Level1)
535 {
536 auto skiaCanvas = std::make_shared<SkiaCanvas>();
537 ASSERT_TRUE(skiaCanvas != nullptr);
538
539 skiaCanvas->ImportSkCanvas(nullptr);
540 auto matrix = skiaCanvas->GetTotalMatrix();
541 }
542
543 /**
544 * @tc.name: GetLocalClipBoundsTest001
545 * @tc.desc: Test for geting bounds of clip in local coordinates.
546 * @tc.type: FUNC
547 * @tc.require: I782P9
548 */
549 HWTEST_F(SkiaCanvasTest, GetLocalClipBoundsTest001, TestSize.Level1)
550 {
551 auto skiaCanvas = std::make_shared<SkiaCanvas>();
552 ASSERT_TRUE(skiaCanvas != nullptr);
553
554 skiaCanvas->ImportSkCanvas(nullptr);
555 auto rect = skiaCanvas->GetLocalClipBounds();
556 }
557
558 /**
559 * @tc.name: GetDeviceClipBoundsTest001
560 * @tc.desc: Test for geting bounds of clip in device corrdinates.
561 * @tc.type: FUNC
562 * @tc.require: I782P9
563 */
564 HWTEST_F(SkiaCanvasTest, GetDeviceClipBoundsTest001, TestSize.Level1)
565 {
566 auto skiaCanvas = std::make_shared<SkiaCanvas>();
567 ASSERT_TRUE(skiaCanvas != nullptr);
568
569 skiaCanvas->ImportSkCanvas(nullptr);
570 auto rect = skiaCanvas->GetDeviceClipBounds();
571 }
572
573 #ifdef ACE_ENABLE_GPU
574 /**
575 * @tc.name: GetGPUContextTest001
576 * @tc.desc: Test for geting gpu context.
577 * @tc.type: FUNC
578 * @tc.require: I782P9
579 */
580 HWTEST_F(SkiaCanvasTest, GetGPUContextTest001, TestSize.Level1)
581 {
582 auto skiaCanvas = std::make_shared<SkiaCanvas>();
583 ASSERT_TRUE(skiaCanvas != nullptr);
584
585 skiaCanvas->ImportSkCanvas(nullptr);
586 auto gpuContetxt = skiaCanvas->GetGPUContext();
587 }
588 #endif
589 } // namespace Drawing
590 } // namespace Rosen
591 } // namespace OHOS