1 /*
2  * Copyright (c) 2024 Shenzhen Kaihong Digital Industry Development 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 "DrawingNativeCanvasCommon.h"
19 #include "drawing_bitmap.h"
20 #include "drawing_brush.h"
21 #include "drawing_canvas.h"
22 #include "drawing_color.h"
23 #include "drawing_color_filter.h"
24 #include "drawing_filter.h"
25 #include "drawing_font.h"
26 #include "drawing_image.h"
27 #include "drawing_mask_filter.h"
28 #include "drawing_matrix.h"
29 #include "drawing_memory_stream.h"
30 #include "drawing_path.h"
31 #include "drawing_pen.h"
32 #include "drawing_point.h"
33 #include "drawing_rect.h"
34 #include "drawing_region.h"
35 #include "drawing_round_rect.h"
36 #include "drawing_sampling_options.h"
37 #include "drawing_shader_effect.h"
38 #include "drawing_text_blob.h"
39 #include "drawing_typeface.h"
40 
41 using namespace testing;
42 using namespace testing::ext;
43 
44 namespace OHOS {
45 namespace Rosen {
46 namespace Drawing {
47 
48 /*
49  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_1900
50  * @tc.name: testCanvasDrawOvalNormal
51  * @tc.desc: test for testCanvasDrawOvalNormal.
52  * @tc.size  : SmallTest
53  * @tc.type  : Function
54  * @tc.level : Level 0
55  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawOvalNormal, TestSize.Level0)56 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawOvalNormal, TestSize.Level0) {
57     // 1. Create OH_Drawing_Canvas
58     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
59 
60     // 2. Create OH_Drawing_Rect
61     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100);
62 
63     // 3. Draw oval on canvas
64     OH_Drawing_CanvasDrawOval(canvas, rect);
65 
66     // 4. Free memory
67     OH_Drawing_CanvasDestroy(canvas);
68     OH_Drawing_RectDestroy(rect);
69 }
70 
71 /*
72  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_1901
73  * @tc.name: testCanvasDrawOvalNull
74  * @tc.desc: test for testCanvasDrawOvalNull.
75  * @tc.size  : SmallTest
76  * @tc.type  : Function
77  * @tc.level : Level 3
78  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawOvalNull, TestSize.Level3)79 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawOvalNull, TestSize.Level3) {
80     // 1. Create OH_Drawing_Canvas
81     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
82     // 2. Create OH_Drawing_Rect
83     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 200, 200);
84     // 3. OH_Drawing_CanvasDrawOval with nullptr as the first parameter
85     OH_Drawing_CanvasDrawOval(nullptr, rect);
86     // 4. OH_Drawing_CanvasDrawOval with OH_Drawing_Rect created with 0 for left, top, right, and bottom
87     OH_Drawing_Rect *rect2 = OH_Drawing_RectCreate(0, 200, 200, 200);
88     OH_Drawing_CanvasDrawOval(canvas, rect2);
89     rect2 = OH_Drawing_RectCreate(200, 0, 200, 200);
90     OH_Drawing_CanvasDrawOval(canvas, rect2);
91     rect2 = OH_Drawing_RectCreate(200, 200, 0, 200);
92     OH_Drawing_CanvasDrawOval(canvas, rect2);
93     rect2 = OH_Drawing_RectCreate(200, 200, 200, 0);
94     OH_Drawing_CanvasDrawOval(canvas, rect2);
95     // 5. OH_Drawing_CanvasDrawOval with OH_Drawing_Rect created with all 0 values
96     OH_Drawing_Rect *rect3 = OH_Drawing_RectCreate(0, 0, 0, 0);
97     OH_Drawing_CanvasDrawOval(canvas, rect3);
98     // 6. OH_Drawing_CanvasDrawOval with nullptr as the second parameter
99     OH_Drawing_CanvasDrawOval(canvas, nullptr);
100     // 7. Free memory
101     OH_Drawing_CanvasDestroy(canvas);
102     OH_Drawing_RectDestroy(rect);
103     OH_Drawing_RectDestroy(rect2);
104     OH_Drawing_RectDestroy(rect3);
105 }
106 
107 /*
108  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_1902
109  * @tc.name: testCanvasDrawOvalAbnormal
110  * @tc.desc: test for testCanvasDrawOvalAbnormal.
111  * @tc.size  : SmallTest
112  * @tc.type  : Function
113  * @tc.level : Level 3
114  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawOvalAbnormal, TestSize.Level3)115 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawOvalAbnormal, TestSize.Level3) {
116     // 1. OH_Drawing_CanvasCreate
117     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
118     // 2. Create OH_Drawing_Rect with left, top, right, and bottom values as negative numbers
119     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(-100, 100, 200, 200);
120     OH_Drawing_CanvasDrawOval(canvas, rect);
121     rect = OH_Drawing_RectCreate(100, -100, 200, 200);
122     OH_Drawing_CanvasDrawOval(canvas, rect);
123     rect = OH_Drawing_RectCreate(100, 100, -200, 200);
124     OH_Drawing_CanvasDrawOval(canvas, rect);
125     rect = OH_Drawing_RectCreate(100, 100, 200, -200);
126     OH_Drawing_CanvasDrawOval(canvas, rect);
127     // 3. Create OH_Drawing_Rect with the horizontal coordinate of the top-left corner equal to the horizontal
128     // coordinate of the bottom-right corner, or the vertical coordinate of the top-left corner equal to the vertical
129     // coordinate of the bottom-right corner
130     OH_Drawing_Rect *rect2 = OH_Drawing_RectCreate(100, 0, 100, 100);
131     OH_Drawing_CanvasDrawOval(canvas, rect2);
132     OH_Drawing_Rect *rect3 = OH_Drawing_RectCreate(0, 100, 100, 100);
133     OH_Drawing_CanvasDrawOval(canvas, rect3);
134     // 4. Create OH_Drawing_Rect with the top-left corner coordinates equal to the bottom-right corner coordinates
135     OH_Drawing_Rect *rect4 = OH_Drawing_RectCreate(100, 100, 100, 100);
136     OH_Drawing_CanvasDrawOval(canvas, rect4);
137     // 5. Create OH_Drawing_Rect with the top-left corner coordinates greater than the bottom-right corner coordinates
138     OH_Drawing_Rect *rect5 = OH_Drawing_RectCreate(200, 200, 100, 100);
139     OH_Drawing_CanvasDrawOval(canvas, rect5);
140     // 6. Free memory
141     OH_Drawing_CanvasDestroy(canvas);
142     OH_Drawing_RectDestroy(rect);
143     OH_Drawing_RectDestroy(rect2);
144     OH_Drawing_RectDestroy(rect3);
145     OH_Drawing_RectDestroy(rect4);
146     OH_Drawing_RectDestroy(rect5);
147 }
148 
149 /*
150  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_1903
151  * @tc.name: testCanvasDrawOvalMaximum
152  * @tc.desc: test for testCanvasDrawOvalMaximum.
153  * @tc.size  : SmallTest
154  * @tc.type  : Function
155  * @tc.level : Level 3
156  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawOvalMaximum, TestSize.Level3)157 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawOvalMaximum, TestSize.Level3) {
158     // 1. OH_Drawing_CanvasCreate
159     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
160     // 2. Create OH_Drawing_Rect with FLT_MAX as the values for left, top, right, and bottom
161     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(FLT_MAX, 0, 0, 0);
162     OH_Drawing_CanvasDrawOval(canvas, rect);
163     rect = OH_Drawing_RectCreate(0, FLT_MAX, 0, 0);
164     OH_Drawing_CanvasDrawOval(canvas, rect);
165     rect = OH_Drawing_RectCreate(0, 0, FLT_MAX, 0);
166     OH_Drawing_CanvasDrawOval(canvas, rect);
167     rect = OH_Drawing_RectCreate(0, 0, 0, FLT_MAX);
168     OH_Drawing_CanvasDrawOval(canvas, rect);
169     // 3. Free memory
170     OH_Drawing_CanvasDestroy(canvas);
171     OH_Drawing_RectDestroy(rect);
172 }
173 
174 /*
175  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_1904
176  * @tc.name: testCanvasDrawOvalInputDestroyed
177  * @tc.desc: test for testCanvasDrawOvalInputDestroyed.
178  * @tc.size  : SmallTest
179  * @tc.type  : Function
180  * @tc.level : Level 3
181  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawOvalInputDestroyed, TestSize.Level3)182 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawOvalInputDestroyed, TestSize.Level3) {
183     // Deprecated
184 }
185 
186 /*
187  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2000
188  * @tc.name: testCanvasDrawArcNormal
189  * @tc.desc: test for testCanvasDrawArcNormal.
190  * @tc.size  : SmallTest
191  * @tc.type  : Function
192  * @tc.level : Level 0
193  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawArcNormal, TestSize.Level0)194 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawArcNormal, TestSize.Level0) {
195     // 1. OH_Drawing_CanvasCreate
196     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
197     // 2. OH_Drawing_RectCreate
198     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100);
199     // 3. OH_Drawing_CanvasDrawArc with startAngle iterating over 0°, 180°, and 360°
200     float startAngles[] = {0.0f, 180.0f, 360.0f};
201     for (float startAngle : startAngles) {
202         OH_Drawing_CanvasDrawArc(canvas, rect, startAngle, 90.0f);
203     }
204     // 4. OH_Drawing_CanvasDrawArc with sweepAngle iterating over 0°, 180°, and 360°
205     float sweepAngles[] = {0.0f, 180.0f, 360.0f};
206     for (float sweepAngle : sweepAngles) {
207         OH_Drawing_CanvasDrawArc(canvas, rect, 0.0f, sweepAngle);
208     }
209     // 5. Free memory
210     OH_Drawing_CanvasDestroy(canvas);
211     OH_Drawing_RectDestroy(rect);
212 }
213 
214 /*
215  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2001
216  * @tc.name: testCanvasDrawArcNull
217  * @tc.desc: test for testCanvasDrawArcNull.
218  * @tc.size  : SmallTest
219  * @tc.type  : Function
220  * @tc.level : Level 3
221  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawArcNull, TestSize.Level3)222 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawArcNull, TestSize.Level3) {
223     // 1. OH_Drawing_CanvasCreate
224     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
225     // 2. OH_Drawing_RectCreate
226     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100);
227     // 3. OH_Drawing_CanvasDrawArc with nullptr as the first parameter
228     OH_Drawing_CanvasDrawArc(nullptr, rect, 0.0f, 90.0f);
229     // 4. OH_Drawing_CanvasDrawArc with OH_Drawing_Rect created with 0 for left, top, right, and bottom
230     OH_Drawing_Rect *rect2 = OH_Drawing_RectCreate(0, 100, 200, 200);
231     OH_Drawing_CanvasDrawArc(canvas, rect2, 0.0f, 90.0f);
232     rect2 = OH_Drawing_RectCreate(100, 0, 200, 200);
233     OH_Drawing_CanvasDrawArc(canvas, rect2, 0.0f, 90.0f);
234     rect2 = OH_Drawing_RectCreate(100, 100, 0, 200);
235     OH_Drawing_CanvasDrawArc(canvas, rect2, 0.0f, 90.0f);
236     rect2 = OH_Drawing_RectCreate(100, 100, 200, 0);
237     OH_Drawing_CanvasDrawArc(canvas, rect2, 0.0f, 90.0f);
238     // 5. OH_Drawing_CanvasDrawArc with OH_Drawing_Rect created with all 0 values
239     OH_Drawing_Rect *rect3 = OH_Drawing_RectCreate(0, 0, 0, 0);
240     OH_Drawing_CanvasDrawArc(canvas, rect3, 0.0f, 90.0f);
241     // 6. OH_Drawing_CanvasDrawArc with nullptr as the second parameter
242     OH_Drawing_CanvasDrawArc(canvas, nullptr, 0.0f, 90.0f);
243     // 7. Free memory
244     OH_Drawing_CanvasDestroy(canvas);
245     OH_Drawing_RectDestroy(rect);
246     OH_Drawing_RectDestroy(rect2);
247     OH_Drawing_RectDestroy(rect3);
248 }
249 
250 /*
251  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2002
252  * @tc.name: testCanvasDrawArcAbnormal
253  * @tc.desc: test for testCanvasDrawArcAbnormal.
254  * @tc.size  : SmallTest
255  * @tc.type  : Function
256  * @tc.level : Level 3
257  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawArcAbnormal, TestSize.Level3)258 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawArcAbnormal, TestSize.Level3) {
259     // 1. OH_Drawing_CanvasCreate
260     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
261     // 2. OH_Drawing_CanvasDrawArc with OH_Drawing_Rect created with negative values for left, top, right, and bottom
262     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(-100, -100, -200, -200);
263     OH_Drawing_CanvasDrawArc(canvas, rect, 0.0f, 90.0f);
264     rect = OH_Drawing_RectCreate(-100, 100, 200, 200);
265     OH_Drawing_CanvasDrawArc(canvas, rect, 0.0f, 90.0f);
266     rect = OH_Drawing_RectCreate(100, -100, 200, 200);
267     OH_Drawing_CanvasDrawArc(canvas, rect, 0.0f, 90.0f);
268     rect = OH_Drawing_RectCreate(100, 100, -200, 200);
269     OH_Drawing_CanvasDrawArc(canvas, rect, 0.0f, 90.0f);
270     rect = OH_Drawing_RectCreate(100, 100, 200, -200);
271     OH_Drawing_CanvasDrawArc(canvas, rect, 0.0f, 90.0f);
272     // 3. OH_Drawing_CanvasDrawArc with OH_Drawing_Rect created with the horizontal coordinate of the top-left corner
273     // equal to the horizontal coordinate of the bottom-right corner, or the vertical coordinate of the top-left corner
274     // equal to the vertical coordinate of the bottom-right corner
275     OH_Drawing_Rect *rect2 = OH_Drawing_RectCreate(100, 0, 100, 100);
276     OH_Drawing_CanvasDrawArc(canvas, rect2, 0.0f, 90.0f);
277     OH_Drawing_Rect *rect3 = OH_Drawing_RectCreate(0, 100, 100, 100);
278     OH_Drawing_CanvasDrawArc(canvas, rect3, 0.0f, 90.0f);
279     // 4. OH_Drawing_CanvasDrawArc with OH_Drawing_Rect created with the top-left corner coordinates equal to the
280     // bottom-right corner coordinates
281     OH_Drawing_Rect *rect4 = OH_Drawing_RectCreate(100, 100, 100, 100);
282     OH_Drawing_CanvasDrawArc(canvas, rect4, 0.0f, 90.0f);
283     // 5. OH_Drawing_CanvasDrawArc with OH_Drawing_Rect created with the top-left corner coordinates greater than the
284     // bottom-right corner coordinates
285     OH_Drawing_Rect *rect5 = OH_Drawing_RectCreate(200, 200, 100, 100);
286     OH_Drawing_CanvasDrawArc(canvas, rect5, 0.0f, 90.0f);
287     // 6. OH_Drawing_CanvasDrawArc with negative startAngle
288     OH_Drawing_CanvasDrawArc(canvas, rect, -90.0f, 90.0f);
289     // 7. OH_Drawing_CanvasDrawArc with startAngle greater than 360°
290     OH_Drawing_CanvasDrawArc(canvas, rect, 400.0f, 90.0f);
291     // 8. OH_Drawing_CanvasDrawArc with negative sweepAngle
292     OH_Drawing_CanvasDrawArc(canvas, rect, 0.0f, -90.0f);
293     // 9. OH_Drawing_CanvasDrawArc with sweepAngle greater than 360°
294     OH_Drawing_CanvasDrawArc(canvas, rect, 0.0f, 400.0f);
295     // 10. Free memory
296     OH_Drawing_CanvasDestroy(canvas);
297     OH_Drawing_RectDestroy(rect);
298     OH_Drawing_RectDestroy(rect2);
299     OH_Drawing_RectDestroy(rect3);
300     OH_Drawing_RectDestroy(rect4);
301     OH_Drawing_RectDestroy(rect5);
302 }
303 
304 /*
305  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2003
306  * @tc.name: testCanvasDrawArcMaximum
307  * @tc.desc: test for testCanvasDrawArcMaximum.
308  * @tc.size  : SmallTest
309  * @tc.type  : Function
310  * @tc.level : Level 3
311  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawArcMaximum, TestSize.Level3)312 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawArcMaximum, TestSize.Level3) {
313     // 1. OH_Drawing_CanvasCreate
314     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
315     // 2. OH_Drawing_CanvasDrawArc with OH_Drawing_Rect created with FLT_MAX as the values for left, top, right, and
316     // bottom
317     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(FLT_MAX, 0, 0, 0);
318     OH_Drawing_CanvasDrawArc(canvas, rect, 0.0f, 90.0f);
319     OH_Drawing_RectDestroy(rect);
320     rect = OH_Drawing_RectCreate(0, FLT_MAX, 0, 0);
321     OH_Drawing_CanvasDrawArc(canvas, rect, 0.0f, 90.0f);
322     OH_Drawing_RectDestroy(rect);
323     rect = OH_Drawing_RectCreate(0, 0, FLT_MAX, 0);
324     OH_Drawing_CanvasDrawArc(canvas, rect, 0.0f, 90.0f);
325     OH_Drawing_RectDestroy(rect);
326     rect = OH_Drawing_RectCreate(0, 0, 0, FLT_MAX);
327     OH_Drawing_CanvasDrawArc(canvas, rect, 0.0f, 90.0f);
328     OH_Drawing_RectDestroy(rect);
329     // 3. OH_Drawing_CanvasDrawArc with startAngle FLT_MAX
330     rect = OH_Drawing_RectCreate(0, 0, 100, 100);
331     OH_Drawing_CanvasDrawArc(canvas, rect, FLT_MAX, 90.0f);
332     OH_Drawing_RectDestroy(rect);
333     // 4. OH_Drawing_CanvasDrawArc with sweepAngle FLT_MAX
334     rect = OH_Drawing_RectCreate(0, 0, 100, 100);
335     OH_Drawing_CanvasDrawArc(canvas, rect, 0.0f, FLT_MAX);
336     OH_Drawing_RectDestroy(rect);
337     // 5. Free memory
338     OH_Drawing_CanvasDestroy(canvas);
339 }
340 
341 /*
342  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2004
343  * @tc.name: testCanvasDrawArcInputDestroyed
344  * @tc.desc: test for testCanvasDrawArcInputDestroyed.
345  * @tc.size  : SmallTest
346  * @tc.type  : Function
347  * @tc.level : Level 3
348  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawArcInputDestroyed, TestSize.Level3)349 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawArcInputDestroyed, TestSize.Level3) {
350     // Deprecated
351 }
352 
353 /*
354  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2100
355  * @tc.name: testCanvasDrawRoundRectNormal
356  * @tc.desc: test for testCanvasDrawRoundRectNormal.
357  * @tc.size  : SmallTest
358  * @tc.type  : Function
359  * @tc.level : Level 0
360  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawRoundRectNormal, TestSize.Level0)361 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawRoundRectNormal, TestSize.Level0) {
362     // 1. OH_Drawing_CanvasCreate
363     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
364 
365     // 2. OH_Drawing_RoundRectCreate
366     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(10, 100, 200, 300);
367     OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 1.0f, 1.0f);
368 
369     // 3. OH_Drawing_CanvasDrawRoundRect
370     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
371 
372     // 4. Free memory
373     OH_Drawing_CanvasDestroy(canvas);
374     OH_Drawing_RectDestroy(rect);
375     OH_Drawing_RoundRectDestroy(roundRect);
376 }
377 
378 /*
379  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2101
380  * @tc.name: testCanvasDrawRoundRectNull
381  * @tc.desc: test for testCanvasDrawRoundRectNull.
382  * @tc.size  : SmallTest
383  * @tc.type  : Function
384  * @tc.level : Level 3
385  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawRoundRectNull, TestSize.Level3)386 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawRoundRectNull, TestSize.Level3) {
387     // 1. OH_Drawing_CanvasCreate
388     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
389 
390     // 2. OH_Drawing_RoundRectCreate
391     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(10, 100, 200, 300);
392     OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 1.0f, 1.0f);
393 
394     // 3. OH_Drawing_CanvasDrawRoundRect with the first parameter being nullptr
395     OH_Drawing_CanvasDrawRoundRect(nullptr, roundRect);
396 
397     // 4. OH_Drawing_CanvasDrawRoundRect with the second parameter being nullptr
398     OH_Drawing_CanvasDrawRoundRect(canvas, nullptr);
399 
400     // 5. OH_Drawing_CanvasDrawRoundRect with the second parameter OH_Drawing_RoundRectCreate created with rect having 0
401     // in any of the four positions
402     OH_Drawing_Rect *rect2 = OH_Drawing_RectCreate(0, 100, 200, 300);
403     OH_Drawing_RoundRect *roundRect2 = OH_Drawing_RoundRectCreate(rect2, 1.0f, 1.0f);
404     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect2);
405 
406     OH_Drawing_Rect *rect3 = OH_Drawing_RectCreate(10, 0, 200, 300);
407     OH_Drawing_RoundRect *roundRect3 = OH_Drawing_RoundRectCreate(rect3, 1.0f, 1.0f);
408     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect3);
409 
410     OH_Drawing_Rect *rect4 = OH_Drawing_RectCreate(10, 100, 0, 300);
411     OH_Drawing_RoundRect *roundRect4 = OH_Drawing_RoundRectCreate(rect4, 1.0f, 1.0f);
412     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect4);
413 
414     OH_Drawing_Rect *rect5 = OH_Drawing_RectCreate(10, 100, 200, 0);
415     OH_Drawing_RoundRect *roundRect5 = OH_Drawing_RoundRectCreate(rect5, 1.0f, 1.0f);
416     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect5);
417 
418     // 6. OH_Drawing_CanvasDrawRoundRect with the second parameter OH_Drawing_RoundRectCreate created with rect having
419     // all positions as 0
420     OH_Drawing_Rect *rect6 = OH_Drawing_RectCreate(0, 0, 0, 0);
421     OH_Drawing_RoundRect *roundRect6 = OH_Drawing_RoundRectCreate(rect6, 1.0f, 1.0f);
422     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect6);
423 
424     // 7. OH_Drawing_CanvasDrawRoundRect with the second parameter OH_Drawing_RoundRectCreate created with xRad as 0
425     OH_Drawing_Rect *rect7 = OH_Drawing_RectCreate(10, 100, 200, 300);
426     OH_Drawing_RoundRect *roundRect7 = OH_Drawing_RoundRectCreate(rect7, 0.0f, 1.0f);
427     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect7);
428 
429     // 8. OH_Drawing_CanvasDrawRoundRect with the second parameter OH_Drawing_RoundRectCreate created with yRad as 0
430     OH_Drawing_Rect *rect8 = OH_Drawing_RectCreate(10, 100, 200, 300);
431     OH_Drawing_RoundRect *roundRect8 = OH_Drawing_RoundRectCreate(rect8, 1.0f, 0.0f);
432     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect8);
433 
434     // 9. Free memory
435     OH_Drawing_CanvasDestroy(canvas);
436     OH_Drawing_RectDestroy(rect);
437     OH_Drawing_RoundRectDestroy(roundRect);
438     OH_Drawing_RectDestroy(rect2);
439     OH_Drawing_RoundRectDestroy(roundRect2);
440     OH_Drawing_RectDestroy(rect3);
441     OH_Drawing_RoundRectDestroy(roundRect3);
442     OH_Drawing_RectDestroy(rect4);
443     OH_Drawing_RoundRectDestroy(roundRect4);
444     OH_Drawing_RectDestroy(rect5);
445     OH_Drawing_RoundRectDestroy(roundRect5);
446     OH_Drawing_RectDestroy(rect6);
447     OH_Drawing_RoundRectDestroy(roundRect6);
448     OH_Drawing_RectDestroy(rect7);
449     OH_Drawing_RoundRectDestroy(roundRect7);
450     OH_Drawing_RectDestroy(rect8);
451     OH_Drawing_RoundRectDestroy(roundRect8);
452 }
453 
454 /*
455  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2102
456  * @tc.name: testCanvasDrawRoundRectAbnormal
457  * @tc.desc: test for testCanvasDrawRoundRectAbnormal.
458  * @tc.size  : SmallTest
459  * @tc.type  : Function
460  * @tc.level : Level 3
461  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawRoundRectAbnormal, TestSize.Level3)462 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawRoundRectAbnormal, TestSize.Level3) {
463     // 1. OH_Drawing_CanvasCreate
464     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
465 
466     // 2. OH_Drawing_CanvasDrawRoundRect with OH_Drawing_RoundRectCreate creating rect with left, top, right, bottom
467     // being set to negative numbers
468     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(-10, 100, 200, 300);
469     OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 0.0f, 1.0f);
470     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
471 
472     rect = OH_Drawing_RectCreate(10, -100, 200, 300);
473     roundRect = OH_Drawing_RoundRectCreate(rect, 0.0f, 1.0f);
474     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
475 
476     rect = OH_Drawing_RectCreate(10, 100, -200, 300);
477     roundRect = OH_Drawing_RoundRectCreate(rect, 0.0f, 1.0f);
478     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
479 
480     rect = OH_Drawing_RectCreate(10, 100, 200, -300);
481     roundRect = OH_Drawing_RoundRectCreate(rect, 0.0f, 1.0f);
482     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
483 
484     // 3. OH_Drawing_CanvasDrawRoundRect with OH_Drawing_CanvasDrawRoundRect creating rect with the horizontal
485     // coordinate of the top-left corner equal to the horizontal coordinate of the bottom-right corner, or the vertical
486     // coordinate of the top-left corner equal to the vertical coordinate of the bottom-right corner
487     rect = OH_Drawing_RectCreate(100, 0, 100, 100);
488     roundRect = OH_Drawing_RoundRectCreate(rect, 0.0f, 1.0f);
489     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
490 
491     rect = OH_Drawing_RectCreate(0, 100, 100, 100);
492     roundRect = OH_Drawing_RoundRectCreate(rect, 0.0f, 1.0f);
493     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
494 
495     // 4. OH_Drawing_CanvasDrawRoundRect with OH_Drawing_RoundRectCreate creating rect with the top-left corner
496     // coordinates equal to the bottom-right corner coordinates
497     rect = OH_Drawing_RectCreate(100, 100, 100, 100);
498     roundRect = OH_Drawing_RoundRectCreate(rect, 0.0f, 1.0f);
499     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
500 
501     // 5. OH_Drawing_CanvasDrawRoundRect with OH_Drawing_RoundRectCreate creating rect with the top-left corner
502     // coordinates greater than the bottom-right corner coordinates
503     rect = OH_Drawing_RectCreate(200, 200, 100, 100);
504     roundRect = OH_Drawing_RoundRectCreate(rect, 0.0f, 1.0f);
505     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
506 
507     // 6. OH_Drawing_CanvasDrawRoundRect with the second parameter OH_Drawing_RoundRectCreate creating roundRect with a
508     // negative xRad
509     rect = OH_Drawing_RectCreate(10, 100, 200, 300);
510     roundRect = OH_Drawing_RoundRectCreate(rect, -1.0f, 1.0f);
511     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
512 
513     // 7. OH_Drawing_CanvasDrawRoundRect with the second parameter OH_Drawing_RoundRectCreate creating roundRect with a
514     // negative yRad
515     rect = OH_Drawing_RectCreate(10, 100, 200, 300);
516     roundRect = OH_Drawing_RoundRectCreate(rect, 0.0f, -1.0f);
517     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
518 
519     // 8. Free memory
520     OH_Drawing_CanvasDestroy(canvas);
521     OH_Drawing_RectDestroy(rect);
522     OH_Drawing_RoundRectDestroy(roundRect);
523 }
524 
525 /*
526  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2103
527  * @tc.name: testCanvasDrawRoundRectMaximum
528  * @tc.desc: test for testCanvasDrawRoundRectMaximum.
529  * @tc.size  : SmallTest
530  * @tc.type  : Function
531  * @tc.level : Level 3
532  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawRoundRectMaximum, TestSize.Level3)533 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawRoundRectMaximum, TestSize.Level3) {
534     // 1. OH_Drawing_CanvasCreate
535     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
536     // 2. OH_Drawing_CanvasDrawRoundRect with OH_Drawing_RoundRectCreate creating rect with left, top, right, bottom
537     // being set to FLT_MAX
538     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(FLT_MAX, 100, 200, 300);
539     OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 1.0f, 1.0f);
540     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
541 
542     rect = OH_Drawing_RectCreate(10, FLT_MAX, 200, 300);
543     roundRect = OH_Drawing_RoundRectCreate(rect, 1.0f, 1.0f);
544     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
545 
546     rect = OH_Drawing_RectCreate(10, 100, FLT_MAX, 300);
547     roundRect = OH_Drawing_RoundRectCreate(rect, 1.0f, 1.0f);
548     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
549 
550     rect = OH_Drawing_RectCreate(10, 100, 200, FLT_MAX);
551     roundRect = OH_Drawing_RoundRectCreate(rect, 1.0f, 1.0f);
552     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
553 
554     // 3. OH_Drawing_CanvasDrawRoundRect with the second parameter OH_Drawing_RoundRectCreate created with xRad being
555     // set to FLT_MAX
556     rect = OH_Drawing_RectCreate(10, 100, 200, 300);
557     roundRect = OH_Drawing_RoundRectCreate(rect, FLT_MAX, 1.0f);
558     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
559 
560     // 4. OH_Drawing_CanvasDrawRoundRect with the second parameter OH_Drawing_RoundRectCreate created with yRad being
561     // set to FLT_MAX
562     rect = OH_Drawing_RectCreate(10, 100, 200, 300);
563     roundRect = OH_Drawing_RoundRectCreate(rect, 1.0f, FLT_MAX);
564     OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
565 
566     // 5. Free memory
567     OH_Drawing_CanvasDestroy(canvas);
568     OH_Drawing_RectDestroy(rect);
569     OH_Drawing_RoundRectDestroy(roundRect);
570 }
571 
572 /*
573  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2104
574  * @tc.name: testCanvasDrawRoundRectInputDestroyed
575  * @tc.desc: test for testCanvasDrawRoundRectInputDestroyed.
576  * @tc.size  : SmallTest
577  * @tc.type  : Function
578  * @tc.level : Level 3
579  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawRoundRectInputDestroyed, TestSize.Level3)580 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawRoundRectInputDestroyed, TestSize.Level3) {
581     // Deprecated
582 }
583 
584 /*
585  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2200
586  * @tc.name: testCanvasDrawTextBlobNormal
587  * @tc.desc: test for testCanvasDrawTextBlobNormal.
588  * @tc.size  : SmallTest
589  * @tc.type  : Function
590  * @tc.level : Level 0
591  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawTextBlobNormal, TestSize.Level0)592 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawTextBlobNormal, TestSize.Level0) {
593     // 1. OH_Drawing_CanvasCreate
594     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
595 
596     // 2. OH_Drawing_TextBlobCreateFromText
597     const char *str = "123456";
598 
599     OH_Drawing_Font *font = OH_Drawing_FontCreate();
600     OH_Drawing_TextBlob *textBlob =
601         OH_Drawing_TextBlobCreateFromText(str, strlen(str), font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
602     // 3. OH_Drawing_CanvasDrawTextBlob
603     OH_Drawing_CanvasDrawTextBlob(canvas, textBlob, 10, 10);
604     // 4. Free memory
605     OH_Drawing_TextBlobDestroy(textBlob);
606 
607     OH_Drawing_CanvasDestroy(canvas);
608 }
609 
610 /*
611  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2201
612  * @tc.name: testCanvasDrawTextBlobNull
613  * @tc.desc: test for testCanvasDrawTextBlobNull.
614  * @tc.size  : SmallTest
615  * @tc.type  : Function
616  * @tc.level : Level 3
617  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawTextBlobNull, TestSize.Level3)618 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawTextBlobNull, TestSize.Level3) {
619     // 1. OH_Drawing_CanvasCreate
620     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
621     // 2. OH_Drawing_TextBlobCreateFromString
622     const char *str = "123456";
623 
624     OH_Drawing_Font *font = OH_Drawing_FontCreate();
625     OH_Drawing_TextBlob *textBlob =
626         OH_Drawing_TextBlobCreateFromText(str, strlen(str), font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
627     // 3. OH_Drawing_CanvasDrawTextBlob with the first parameter being nullptr
628     OH_Drawing_CanvasDrawTextBlob(nullptr, textBlob, 10, 10);
629     // 4. OH_Drawing_CanvasDrawTextBlob with the second parameter being nullptr
630     OH_Drawing_CanvasDrawTextBlob(canvas, nullptr, 10, 10);
631     // 5. OH_Drawing_CanvasDrawTextBlob with the third parameter being 0
632     OH_Drawing_CanvasDrawTextBlob(canvas, textBlob, 0, 10);
633     // 6. OH_Drawing_CanvasDrawTextBlob with the fourth parameter being 0
634     OH_Drawing_CanvasDrawTextBlob(canvas, textBlob, 10, 0);
635     // 7. Free memory
636     OH_Drawing_TextBlobDestroy(textBlob);
637 
638     OH_Drawing_CanvasDestroy(canvas);
639 }
640 
641 /*
642  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2202
643  * @tc.name: testCanvasDrawTextBlobAbnormal
644  * @tc.desc: test for testCanvasDrawTextBlobAbnormal.
645  * @tc.size  : SmallTest
646  * @tc.type  : Function
647  * @tc.level : Level 3
648  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawTextBlobAbnormal, TestSize.Level3)649 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawTextBlobAbnormal, TestSize.Level3) {
650     // 1. OH_Drawing_CanvasCreate
651     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
652     // 2. Create OH_Drawing_TextBlob from text
653     const char *str = "123456";
654     OH_Drawing_Font *font = OH_Drawing_FontCreate();
655     OH_Drawing_TextBlob *textBlob =
656         OH_Drawing_TextBlobCreateFromText(str, strlen(str), font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
657     // 3. Draw OH_Drawing_TextBlob on canvas with x-coordinate of the bottom left corner of the text object set to a
658     // negative value
659     OH_Drawing_CanvasDrawTextBlob(canvas, textBlob, -10, 10);
660     // 4. Draw OH_Drawing_TextBlob on canvas with y-coordinate of the bottom left corner of the text object set to a
661     // negative value
662     OH_Drawing_CanvasDrawTextBlob(canvas, textBlob, 10, -10);
663     // 5. Release memory
664     OH_Drawing_TextBlobDestroy(textBlob);
665     OH_Drawing_CanvasDestroy(canvas);
666 }
667 
668 /*
669  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2203
670  * @tc.name: testCanvasDrawTextBlobMaximum
671  * @tc.desc: test for testCanvasDrawTextBlobMaximum.
672  * @tc.size  : SmallTest
673  * @tc.type  : Function
674  * @tc.level : Level 3
675  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawTextBlobMaximum, TestSize.Level3)676 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawTextBlobMaximum, TestSize.Level3) {
677     // 1. Create OH_Drawing_Canvas
678     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
679     // 2. Create OH_Drawing_TextBlob from text
680     const char *str = "123456";
681     OH_Drawing_Font *font = OH_Drawing_FontCreate();
682     OH_Drawing_TextBlob *textBlob =
683         OH_Drawing_TextBlobCreateFromText(str, strlen(str), font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
684     // 3. Draw OH_Drawing_TextBlob on canvas with x-coordinate of the bottom left corner of the text object set to
685     // maximum value
686     OH_Drawing_CanvasDrawTextBlob(canvas, textBlob, FLT_MAX, 10);
687     // 4. Draw OH_Drawing_TextBlob on canvas with y-coordinate of the bottom left corner of the text object set to
688     // maximum value
689     OH_Drawing_CanvasDrawTextBlob(canvas, textBlob, 10, FLT_MAX);
690     // 5. Release memory
691     OH_Drawing_TextBlobDestroy(textBlob);
692     // 5. Release memory
693     OH_Drawing_CanvasDestroy(canvas);
694 }
695 
696 /*
697  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2204
698  * @tc.name: testCanvasDrawTextBlobInputDestroyed
699  * @tc.desc: test for testCanvasDrawTextBlobInputDestroyed.
700  * @tc.size  : SmallTest
701  * @tc.type  : Function
702  * @tc.level : Level 3
703  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawTextBlobInputDestroyed, TestSize.Level3)704 HWTEST_F(DrawingNativeCanvasTest, testCanvasDrawTextBlobInputDestroyed, TestSize.Level3) {
705     // Deprecated
706 }
707 
708 /*
709  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2300
710  * @tc.name: testCanvasClipRectNormal
711  * @tc.desc: test for testCanvasClipRectNormal.
712  * @tc.size  : SmallTest
713  * @tc.type  : Function
714  * @tc.level : Level 0
715  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRectNormal, TestSize.Level0)716 HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRectNormal, TestSize.Level0) {
717     // 1. OH_Drawing_CanvasCreate
718     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
719     // 2. OH_Drawing_RectCreate
720     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(10, 10, 100, 100);
721     // 3. OH_Drawing_CanvasClipRect with clipOp and doAntiAlias parameters, iterate through enum values
722     OH_Drawing_CanvasClipOp clipOp[] = {OH_Drawing_CanvasClipOp::DIFFERENCE, OH_Drawing_CanvasClipOp::INTERSECT};
723     bool doAntiAlias[] = {true, false};
724     for (int i = 0; i < 2; i++) {
725         for (int j = 0; j < 2; j++) {
726             OH_Drawing_CanvasClipRect(canvas, rect, clipOp[i], doAntiAlias[j]);
727         }
728     }
729     // 4. Free memory
730     OH_Drawing_CanvasDestroy(canvas);
731 }
732 
733 /*
734  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2301
735  * @tc.name: testCanvasClipRectNull
736  * @tc.desc: test for testCanvasClipRectNull.
737  * @tc.size  : SmallTest
738  * @tc.type  : Function
739  * @tc.level : Level 3
740  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRectNull, TestSize.Level3)741 HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRectNull, TestSize.Level3) {
742     // 1. OH_Drawing_CanvasCreate
743     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
744     // 2. OH_Drawing_RectCreate
745     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(10, 10, 100, 100);
746     // 3. OH_Drawing_CanvasClipRect with the first parameter being nullptr
747     OH_Drawing_CanvasClipRect(nullptr, rect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
748     // 4. OH_Drawing_CanvasClipRect with the second parameter OH_Drawing_Rect created with left, top, right, and bottom
749     // values being 0
750     OH_Drawing_Rect *rect2 = OH_Drawing_RectCreate(0, 10, 100, 100);
751     OH_Drawing_CanvasClipRect(canvas, rect2, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
752     rect2 = OH_Drawing_RectCreate(10, 0, 100, 100);
753     OH_Drawing_CanvasClipRect(canvas, rect2, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
754     rect2 = OH_Drawing_RectCreate(10, 10, 0, 100);
755     OH_Drawing_CanvasClipRect(canvas, rect2, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
756     rect2 = OH_Drawing_RectCreate(10, 10, 100, 0);
757     OH_Drawing_CanvasClipRect(canvas, rect2, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
758     // 5. OH_Drawing_CanvasClipRect with the second parameter OH_Drawing_Rect created with all values being 0
759     OH_Drawing_Rect *rect3 = OH_Drawing_RectCreate(0, 0, 0, 0);
760     OH_Drawing_CanvasClipRect(canvas, rect3, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
761     // 6. OH_Drawing_CanvasClipRect with the second parameter being nullptr
762     OH_Drawing_CanvasClipRect(canvas, nullptr, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
763     // 7. Free memory
764     OH_Drawing_CanvasDestroy(canvas);
765     OH_Drawing_RectDestroy(rect);
766     OH_Drawing_RectDestroy(rect2);
767     OH_Drawing_RectDestroy(rect3);
768 }
769 
770 /*
771  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2302
772  * @tc.name: testCanvasClipRectAbnormal
773  * @tc.desc: test for testCanvasClipRectAbnormal.
774  * @tc.size  : SmallTest
775  * @tc.type  : Function
776  * @tc.level : Level 3
777  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRectAbnormal, TestSize.Level3)778 HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRectAbnormal, TestSize.Level3) {
779     // 1. OH_Drawing_CanvasCreate
780     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
781     // 2. OH_Drawing_CanvasClipRect with OH_Drawing_Rect created with negative values for left, top, right, and bottom
782     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(-10, 10, 100, 100);
783     OH_Drawing_CanvasClipRect(canvas, rect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
784     rect = OH_Drawing_RectCreate(10, -10, 100, 100);
785     OH_Drawing_CanvasClipRect(canvas, rect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
786     rect = OH_Drawing_RectCreate(10, 10, -100, 100);
787     OH_Drawing_CanvasClipRect(canvas, rect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
788     rect = OH_Drawing_RectCreate(10, 10, 100, -100);
789     OH_Drawing_CanvasClipRect(canvas, rect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
790     // 3. OH_Drawing_CanvasClipRect with OH_Drawing_Rect created where the x-coordinate of the top-left corner is equal
791     // to the x-coordinate of the bottom-right corner, or the y-coordinate of the top-left corner is equal to the
792     // y-coordinate of the bottom-right corner
793     rect = OH_Drawing_RectCreate(100, 10, 100, 100);
794     OH_Drawing_CanvasClipRect(canvas, rect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
795     rect = OH_Drawing_RectCreate(10, 100, 100, 100);
796     OH_Drawing_CanvasClipRect(canvas, rect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
797     // 4. OH_Drawing_CanvasClipRect with OH_Drawing_Rect created where the top-left corner coordinates are equal to the
798     // bottom-right corner coordinates
799     rect = OH_Drawing_RectCreate(100, 100, 100, 100);
800     OH_Drawing_CanvasClipRect(canvas, rect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
801     // 5. OH_Drawing_CanvasClipRect with OH_Drawing_Rect created where the top-left corner coordinates are greater than
802     // the bottom-right corner coordinates
803     rect = OH_Drawing_RectCreate(200, 200, 100, 100);
804     OH_Drawing_CanvasClipRect(canvas, rect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
805     // 6. Release memory
806     OH_Drawing_CanvasDestroy(canvas);
807     OH_Drawing_RectDestroy(rect);
808 }
809 
810 /*
811  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2303
812  * @tc.name: testCanvasClipRectMaximum
813  * @tc.desc: test for testCanvasClipRectMaximum.
814  * @tc.size  : SmallTest
815  * @tc.type  : Function
816  * @tc.level : Level 3
817  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRectMaximum, TestSize.Level3)818 HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRectMaximum, TestSize.Level3) {
819     // 1. OH_Drawing_CanvasCreate
820     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
821     // 2. OH_Drawing_CanvasClipRect with OH_Drawing_Rect created with extreme values for left, top, right, and bottom
822     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(FLT_MAX, 10, 100, 100);
823     OH_Drawing_CanvasClipRect(canvas, rect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
824     rect = OH_Drawing_RectCreate(10, FLT_MAX, 100, 100);
825     OH_Drawing_CanvasClipRect(canvas, rect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
826     rect = OH_Drawing_RectCreate(10, 10, FLT_MAX, 100);
827     OH_Drawing_CanvasClipRect(canvas, rect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
828     rect = OH_Drawing_RectCreate(10, 10, 100, FLT_MAX);
829     OH_Drawing_CanvasClipRect(canvas, rect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
830     // 3. Release memory
831     OH_Drawing_CanvasDestroy(canvas);
832     OH_Drawing_RectDestroy(rect);
833 }
834 
835 /*
836  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2304
837  * @tc.name: testCanvasClipRectInputDestroyed
838  * @tc.desc: test for testCanvasClipRectInputDestroyed.
839  * @tc.size  : SmallTest
840  * @tc.type  : Function
841  * @tc.level : Level 3
842  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRectInputDestroyed, TestSize.Level3)843 HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRectInputDestroyed, TestSize.Level3) {
844     // Deprecated
845 }
846 
847 /*
848  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2400
849  * @tc.name: testCanvasClipRoundRectNormal
850  * @tc.desc: test for testCanvasClipRoundRectNormal.
851  * @tc.size  : SmallTest
852  * @tc.type  : Function
853  * @tc.level : Level 0
854  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRoundRectNormal, TestSize.Level0)855 HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRoundRectNormal, TestSize.Level0) {
856     // 1. OH_Drawing_CanvasCreate
857     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
858     // 2. OH_Drawing_RoundRectCreate
859     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(10, 10, 100, 100);
860     OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 10, 10);
861     // 3. OH_Drawing_CanvasClipRoundRect with parameters clipOp and doAntiAlias, iterate through the enumeration values
862     OH_Drawing_CanvasClipOp clipOp[] = {OH_Drawing_CanvasClipOp::DIFFERENCE, OH_Drawing_CanvasClipOp::INTERSECT};
863     bool doAntiAlias[] = {true, false};
864     for (int i = 0; i < 2; i++) {
865         for (int j = 0; j < 2; j++) {
866             OH_Drawing_CanvasClipRoundRect(canvas, roundRect, clipOp[i], doAntiAlias[j]);
867         }
868     }
869     // 4. Free memory
870     OH_Drawing_CanvasDestroy(canvas);
871     OH_Drawing_RectDestroy(rect);
872 }
873 
874 /*
875  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2401
876  * @tc.name: testCanvasClipRoundRectNull
877  * @tc.desc: test for testCanvasClipRoundRectNull.
878  * @tc.size  : SmallTest
879  * @tc.type  : Function
880  * @tc.level : Level 3
881  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRoundRectNull, TestSize.Level3)882 HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRoundRectNull, TestSize.Level3) {
883     // 1. OH_Drawing_CanvasCreate
884     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
885     // 2. OH_Drawing_RoundRectCreate
886     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(10, 10, 100, 100);
887     OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 10, 10);
888     // 3. OH_Drawing_CanvasClipRoundRect with the first parameter being null
889     OH_Drawing_CanvasClipRoundRect(nullptr, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
890     // 4. OH_Drawing_CanvasClipRoundRect with the second parameter being null
891     OH_Drawing_CanvasClipRoundRect(canvas, nullptr, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
892     // 5. OH_Drawing_CanvasClipRoundRect with the second parameter OH_Drawing_RoundRectCreate created with rect's left,
893     // top, right, and bottom values all set to 0
894     OH_Drawing_Rect *rect2 = OH_Drawing_RectCreate(0, 10, 100, 100);
895     OH_Drawing_RoundRect *roundRect2 = OH_Drawing_RoundRectCreate(rect2, 10, 10);
896     OH_Drawing_CanvasClipRoundRect(canvas, roundRect2, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
897     rect2 = OH_Drawing_RectCreate(10, 0, 100, 100);
898     roundRect2 = OH_Drawing_RoundRectCreate(rect2, 10, 10);
899     OH_Drawing_CanvasClipRoundRect(canvas, roundRect2, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
900     rect2 = OH_Drawing_RectCreate(10, 10, 0, 100);
901     roundRect2 = OH_Drawing_RoundRectCreate(rect2, 10, 10);
902     OH_Drawing_CanvasClipRoundRect(canvas, roundRect2, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
903     rect2 = OH_Drawing_RectCreate(10, 10, 100, 0);
904     roundRect2 = OH_Drawing_RoundRectCreate(rect2, 10, 10);
905     OH_Drawing_CanvasClipRoundRect(canvas, roundRect2, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
906     // 6. OH_Drawing_CanvasClipRoundRect with the second parameter OH_Drawing_RoundRectCreate created with all rect's
907     // left, top, right, and bottom values set to 0
908     rect2 = OH_Drawing_RectCreate(0, 0, 0, 0);
909     roundRect2 = OH_Drawing_RoundRectCreate(rect2, 10, 10);
910     OH_Drawing_CanvasClipRoundRect(canvas, roundRect2, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
911     // 7. OH_Drawing_CanvasClipRoundRect with the second parameter OH_Drawing_RoundRectCreate created with xRad set to 0
912     rect2 = OH_Drawing_RectCreate(10, 10, 100, 100);
913     roundRect2 = OH_Drawing_RoundRectCreate(rect2, 0, 10);
914     OH_Drawing_CanvasClipRoundRect(canvas, roundRect2, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
915     // 8. OH_Drawing_CanvasClipRoundRect with the second parameter OH_Drawing_RoundRectCreate created with yRad set to 0
916     rect2 = OH_Drawing_RectCreate(10, 10, 100, 100);
917     roundRect2 = OH_Drawing_RoundRectCreate(rect2, 10, 0);
918     OH_Drawing_CanvasClipRoundRect(canvas, roundRect2, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
919     // 9. Release memory
920     OH_Drawing_CanvasDestroy(canvas);
921     OH_Drawing_RectDestroy(rect);
922     OH_Drawing_RectDestroy(rect2);
923     OH_Drawing_RoundRectDestroy(roundRect);
924     OH_Drawing_RoundRectDestroy(roundRect2);
925 }
926 
927 /*
928  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2402
929  * @tc.name: testCanvasClipRoundRectAbnormal
930  * @tc.desc: test for testCanvasClipRoundRectAbnormal.
931  * @tc.size  : SmallTest
932  * @tc.type  : Function
933  * @tc.level : Level 3
934  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRoundRectAbnormal, TestSize.Level3)935 HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRoundRectAbnormal, TestSize.Level3) {
936     // 1. OH_Drawing_CanvasCreate
937     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
938     // 2. OH_Drawing_CanvasClipRoundRect, pass negative values for left, top, right, and bottom when creating
939     // OH_Drawing_RoundRect
940     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(-10, 10, 100, 100);
941     OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 10, 10);
942     OH_Drawing_CanvasClipRoundRect(canvas, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
943     rect = OH_Drawing_RectCreate(10, -10, 100, 100);
944     roundRect = OH_Drawing_RoundRectCreate(rect, 10, 10);
945     OH_Drawing_CanvasClipRoundRect(canvas, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
946     rect = OH_Drawing_RectCreate(10, 10, -100, 100);
947     roundRect = OH_Drawing_RoundRectCreate(rect, 10, 10);
948     OH_Drawing_CanvasClipRoundRect(canvas, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
949     rect = OH_Drawing_RectCreate(10, 10, 100, -100);
950     roundRect = OH_Drawing_RoundRectCreate(rect, 10, 10);
951     OH_Drawing_CanvasClipRoundRect(canvas, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
952 
953     // 3. OH_Drawing_CanvasClipRoundRect, pass OH_Drawing_RoundRect with left-top coordinates equal to right-bottom
954     // coordinates
955     rect = OH_Drawing_RectCreate(100, 10, 100, 100);
956     roundRect = OH_Drawing_RoundRectCreate(rect, 10, 10);
957     OH_Drawing_CanvasClipRoundRect(canvas, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
958     rect = OH_Drawing_RectCreate(10, 100, 100, 100);
959     roundRect = OH_Drawing_RoundRectCreate(rect, 10, 10);
960     OH_Drawing_CanvasClipRoundRect(canvas, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
961 
962     // 4. OH_Drawing_CanvasClipRoundRect, pass OH_Drawing_RoundRect with left-top coordinates equal to right-bottom
963     // coordinates
964     rect = OH_Drawing_RectCreate(100, 100, 100, 100);
965     roundRect = OH_Drawing_RoundRectCreate(rect, 10, 10);
966     OH_Drawing_CanvasClipRoundRect(canvas, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
967 
968     // 5. OH_Drawing_CanvasClipRoundRect, pass OH_Drawing_RoundRect with left-top coordinates greater than right-bottom
969     // coordinates
970     rect = OH_Drawing_RectCreate(200, 200, 100, 100);
971     roundRect = OH_Drawing_RoundRectCreate(rect, 10, 10);
972     OH_Drawing_CanvasClipRoundRect(canvas, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
973 
974     // 6. OH_Drawing_CanvasClipRoundRect, pass OH_Drawing_RoundRect with negative xRad
975     rect = OH_Drawing_RectCreate(10, 10, 100, 100);
976     roundRect = OH_Drawing_RoundRectCreate(rect, -10, 10);
977     OH_Drawing_CanvasClipRoundRect(canvas, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
978 
979     // 7. OH_Drawing_CanvasClipRoundRect, pass OH_Drawing_RoundRect with negative yRad
980     rect = OH_Drawing_RectCreate(10, 10, 100, 100);
981     roundRect = OH_Drawing_RoundRectCreate(rect, 10, -10);
982     OH_Drawing_CanvasClipRoundRect(canvas, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
983 
984     // 8. Release memory
985     OH_Drawing_CanvasDestroy(canvas);
986     OH_Drawing_RectDestroy(rect);
987     OH_Drawing_RoundRectDestroy(roundRect);
988 }
989 
990 /*
991  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2403
992  * @tc.name: testCanvasClipRoundRectMaximum
993  * @tc.desc: test for testCanvasClipRoundRectMaximum.
994  * @tc.size  : SmallTest
995  * @tc.type  : Function
996  * @tc.level : Level 3
997  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRoundRectMaximum, TestSize.Level3)998 HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRoundRectMaximum, TestSize.Level3) {
999     // 1. OH_Drawing_CanvasCreate
1000     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1001     // 2. OH_Drawing_CanvasClipRoundRect, pass extreme values for left, top, right, and bottom when creating
1002     // OH_Drawing_RoundRect
1003     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(FLT_MAX, 10, 100, 100);
1004     OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 10, 10);
1005     OH_Drawing_CanvasClipRoundRect(canvas, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
1006     rect = OH_Drawing_RectCreate(10, FLT_MAX, 100, 100);
1007     roundRect = OH_Drawing_RoundRectCreate(rect, 10, 10);
1008     OH_Drawing_CanvasClipRoundRect(canvas, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
1009     rect = OH_Drawing_RectCreate(10, 10, FLT_MAX, 100);
1010     roundRect = OH_Drawing_RoundRectCreate(rect, 10, 10);
1011     OH_Drawing_CanvasClipRoundRect(canvas, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
1012     rect = OH_Drawing_RectCreate(10, 10, 100, FLT_MAX);
1013     roundRect = OH_Drawing_RoundRectCreate(rect, 10, 10);
1014     OH_Drawing_CanvasClipRoundRect(canvas, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
1015     // 3. OH_Drawing_CanvasClipRoundRect, pass FLT_MAX for xRad when creating OH_Drawing_RoundRect
1016     rect = OH_Drawing_RectCreate(10, 10, 100, 100);
1017     roundRect = OH_Drawing_RoundRectCreate(rect, FLT_MAX, 10);
1018     OH_Drawing_CanvasClipRoundRect(canvas, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
1019     // 4. OH_Drawing_CanvasClipRoundRect, pass FLT_MAX for yRad when creating OH_Drawing_RoundRect
1020     rect = OH_Drawing_RectCreate(10, 10, 100, 100);
1021     roundRect = OH_Drawing_RoundRectCreate(rect, 10, FLT_MAX);
1022     OH_Drawing_CanvasClipRoundRect(canvas, roundRect, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
1023     // 5. Free memory
1024     OH_Drawing_CanvasDestroy(canvas);
1025     OH_Drawing_RectDestroy(rect);
1026     OH_Drawing_RoundRectDestroy(roundRect);
1027 }
1028 
1029 /*
1030  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2404
1031  * @tc.name: testCanvasClipRoundRectInputDestroyed
1032  * @tc.desc: test for testCanvasClipRoundRectInputDestroyed.
1033  * @tc.size  : SmallTest
1034  * @tc.type  : Function
1035  * @tc.level : Level 3
1036  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRoundRectInputDestroyed, TestSize.Level3)1037 HWTEST_F(DrawingNativeCanvasTest, testCanvasClipRoundRectInputDestroyed, TestSize.Level3) {
1038     // Deprecated
1039 }
1040 
1041 /*
1042  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2500
1043  * @tc.name: testCanvasClipPathNormal
1044  * @tc.desc: test for testCanvasClipPathNormal.
1045  * @tc.size  : SmallTest
1046  * @tc.type  : Function
1047  * @tc.level : Level 0
1048  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasClipPathNormal, TestSize.Level0)1049 HWTEST_F(DrawingNativeCanvasTest, testCanvasClipPathNormal, TestSize.Level0) {
1050     // 1. OH_Drawing_CanvasCreate
1051     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1052     // 2. OH_Drawing_PathCreate
1053     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1054     OH_Drawing_PathMoveTo(path, 0, 0);
1055     OH_Drawing_PathLineTo(path, 100, 0);
1056     OH_Drawing_PathLineTo(path, 100, 100);
1057     OH_Drawing_PathLineTo(path, 0, 100);
1058     OH_Drawing_PathClose(path);
1059     // 3. OH_Drawing_PathAddRect
1060     OH_Drawing_PathAddRect(path, 10, 10, 100, 100, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1061     // 4. OH_Drawing_CanvasClipPath
1062     OH_Drawing_CanvasClipOp clipOp[] = {OH_Drawing_CanvasClipOp::DIFFERENCE, OH_Drawing_CanvasClipOp::INTERSECT};
1063     bool doAntiAlias[] = {true, false};
1064     for (int i = 0; i < 2; i++) {
1065         for (int j = 0; j < 2; j++) {
1066             OH_Drawing_CanvasClipPath(canvas, path, clipOp[i], doAntiAlias[j]);
1067         }
1068     }
1069     // 5. Free memory
1070     OH_Drawing_PathDestroy(path);
1071     OH_Drawing_CanvasDestroy(canvas);
1072 }
1073 
1074 /*
1075  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2501
1076  * @tc.name: testCanvasClipPathNull
1077  * @tc.desc: test for testCanvasClipPathNull.
1078  * @tc.size  : SmallTest
1079  * @tc.type  : Function
1080  * @tc.level : Level 3
1081  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasClipPathNull, TestSize.Level3)1082 HWTEST_F(DrawingNativeCanvasTest, testCanvasClipPathNull, TestSize.Level3) {
1083     // 1. OH_Drawing_CanvasCreate
1084     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1085     // 2. OH_Drawing_PathCreate
1086     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1087     OH_Drawing_PathMoveTo(path, 0, 0);
1088     OH_Drawing_PathLineTo(path, 100, 0);
1089     OH_Drawing_PathLineTo(path, 100, 100);
1090     OH_Drawing_PathLineTo(path, 0, 100);
1091     OH_Drawing_PathClose(path);
1092     // 3. OH_Drawing_PathAddRect
1093     OH_Drawing_PathAddRect(path, 10, 10, 100, 100, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1094     // 4. OH_Drawing_CanvasClipPath with the first parameter being null
1095     OH_Drawing_CanvasClipPath(nullptr, path, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
1096     // 5. OH_Drawing_CanvasClipPath with the second parameter being null
1097     OH_Drawing_CanvasClipPath(canvas, nullptr, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
1098     // 6. OH_Drawing_CanvasClipPath with the second parameter being an empty path
1099     OH_Drawing_Path *path2 = OH_Drawing_PathCreate();
1100     OH_Drawing_CanvasClipPath(canvas, path2, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
1101     // 7. Free memory
1102     OH_Drawing_PathDestroy(path);
1103     OH_Drawing_PathDestroy(path2);
1104     OH_Drawing_CanvasDestroy(canvas);
1105 }
1106 
1107 /*
1108  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2502
1109  * @tc.name: testCanvasClipPathInputDestroyed
1110  * @tc.desc: test for testCanvasClipPathInputDestroyed.
1111  * @tc.size  : SmallTest
1112  * @tc.type  : Function
1113  * @tc.level : Level 3
1114  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasClipPathInputDestroyed, TestSize.Level3)1115 HWTEST_F(DrawingNativeCanvasTest, testCanvasClipPathInputDestroyed, TestSize.Level3) {
1116     // Deprecated
1117 }
1118 
1119 /*
1120  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2600
1121  * @tc.name: testCanvasRotateNormal
1122  * @tc.desc: test for testCanvasRotateNormal.
1123  * @tc.size  : SmallTest
1124  * @tc.type  : Function
1125  * @tc.level : Level 0
1126  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasRotateNormal, TestSize.Level0)1127 HWTEST_F(DrawingNativeCanvasTest, testCanvasRotateNormal, TestSize.Level0) {
1128     // 1. OH_Drawing_CanvasCreate
1129     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1130     // 2. OH_Drawing_CanvasRotate, rotate degrees with values 0, 180, 360
1131     float degrees[] = {0, 180, 360};
1132     for (int i = 0; i < 3; i++) {
1133         OH_Drawing_CanvasRotate(canvas, degrees[i], 10, 10);
1134     }
1135     // 3. Call drawing class interface to draw a rectangle
1136     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(10, 10, 100, 100);
1137     OH_Drawing_CanvasDrawRect(canvas, rect);
1138     // 4. Free memory
1139     OH_Drawing_CanvasDestroy(canvas);
1140 }
1141 
1142 /*
1143  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2601
1144  * @tc.name: testCanvasRotateNull
1145  * @tc.desc: test for testCanvasRotateNull.
1146  * @tc.size  : SmallTest
1147  * @tc.type  : Function
1148  * @tc.level : Level 3
1149  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasRotateNull, TestSize.Level3)1150 HWTEST_F(DrawingNativeCanvasTest, testCanvasRotateNull, TestSize.Level3) {
1151     // 1. OH_Drawing_CanvasCreate
1152     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1153     // 2. OH_Drawing_CanvasRotate with the first parameter being null
1154     OH_Drawing_CanvasRotate(nullptr, 0, 10, 10);
1155     // 3. OH_Drawing_CanvasRotate with the third parameter being 0
1156     OH_Drawing_CanvasRotate(canvas, 0, 0, 10);
1157     // 4. OH_Drawing_CanvasRotate with the fourth parameter being 0
1158     OH_Drawing_CanvasRotate(canvas, 0, 10, 0);
1159     // 5. Free memory
1160     OH_Drawing_CanvasDestroy(canvas);
1161 }
1162 
1163 /*
1164  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2602
1165  * @tc.name: testCanvasRotateAbnormal
1166  * @tc.desc: test for testCanvasRotateAbnormal.
1167  * @tc.size  : SmallTest
1168  * @tc.type  : Function
1169  * @tc.level : Level 3
1170  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasRotateAbnormal, TestSize.Level3)1171 HWTEST_F(DrawingNativeCanvasTest, testCanvasRotateAbnormal, TestSize.Level3) {
1172     // 1. OH_Drawing_CanvasCreate
1173     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1174     // 2. OH_Drawing_CanvasRotate with negative degrees input
1175     OH_Drawing_CanvasRotate(canvas, -180, 10, 10);
1176     // 3. OH_Drawing_CanvasRotate with degrees input greater than 360
1177     OH_Drawing_CanvasRotate(canvas, 370, 10, 10);
1178     // 4. OH_Drawing_CanvasRotate with negative px input for rotation center
1179     OH_Drawing_CanvasRotate(canvas, 180, -10, 10);
1180     // 5. OH_Drawing_CanvasRotate with negative py input for rotation center
1181     OH_Drawing_CanvasRotate(canvas, 180, 10, -10);
1182     // 6. Free memory
1183     OH_Drawing_CanvasDestroy(canvas);
1184 }
1185 
1186 /*
1187  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2603
1188  * @tc.name: testCanvasRotateMaximum
1189  * @tc.desc: test for testCanvasRotateMaximum.
1190  * @tc.size  : SmallTest
1191  * @tc.type  : Function
1192  * @tc.level : Level 3
1193  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasRotateMaximum, TestSize.Level3)1194 HWTEST_F(DrawingNativeCanvasTest, testCanvasRotateMaximum, TestSize.Level3) {
1195     // 1. OH_Drawing_CanvasCreate
1196     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1197     // 2. OH_Drawing_CanvasRotate with maximum rotation angle degrees input
1198     OH_Drawing_CanvasRotate(canvas, FLT_MAX, 10, 10);
1199     // 3. OH_Drawing_CanvasRotate with maximum x-coordinate px input for rotation center
1200     OH_Drawing_CanvasRotate(canvas, 180, FLT_MAX, 10);
1201     // 4. OH_Drawing_CanvasRotate with maximum y-coordinate py input for rotation center
1202     OH_Drawing_CanvasRotate(canvas, 180, 10, FLT_MAX);
1203     // 5. Free memory
1204     OH_Drawing_CanvasDestroy(canvas);
1205 }
1206 
1207 /*
1208  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2604
1209  * @tc.name: testCanvasRotateInputDestroyed
1210  * @tc.desc: test for testCanvasRotateInputDestroyed.
1211  * @tc.size  : SmallTest
1212  * @tc.type  : Function
1213  * @tc.level : Level 3
1214  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasRotateInputDestroyed, TestSize.Level3)1215 HWTEST_F(DrawingNativeCanvasTest, testCanvasRotateInputDestroyed, TestSize.Level3) {
1216     // Deprecated
1217 }
1218 
1219 /*
1220  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2605
1221  * @tc.name: testCanvasRotateMultipleCalls
1222  * @tc.desc: test for testCanvasRotateMultipleCalls.
1223  * @tc.size  : SmallTest
1224  * @tc.type  : Function
1225  * @tc.level : Level 3
1226  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasRotateMultipleCalls, TestSize.Level3)1227 HWTEST_F(DrawingNativeCanvasTest, testCanvasRotateMultipleCalls, TestSize.Level3) {
1228     // 1. OH_Drawing_CanvasCreate
1229     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1230     // 2. Call OH_Drawing_CanvasRotate 10 times, each time with different rotation angles and rotation center
1231     // coordinates
1232     for (int i = 0; i < 10; i++) {
1233         OH_Drawing_CanvasRotate(canvas, i * 10, i * 10, i * 10);
1234         // 3. Call drawing class interface
1235         OH_Drawing_Rect *rect = OH_Drawing_RectCreate(10, 10, 100, 100);
1236         OH_Drawing_CanvasDrawRect(canvas, rect);
1237         OH_Drawing_RectDestroy(rect);
1238     }
1239     // 4. Free memory
1240     OH_Drawing_CanvasDestroy(canvas);
1241 }
1242 
1243 /*
1244  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2700
1245  * @tc.name: testCanvasTranslateNormal
1246  * @tc.desc: test for testCanvasTranslateNormal.
1247  * @tc.size  : SmallTest
1248  * @tc.type  : Function
1249  * @tc.level : Level 0
1250  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasTranslateNormal, TestSize.Level0)1251 HWTEST_F(DrawingNativeCanvasTest, testCanvasTranslateNormal, TestSize.Level0) {
1252     // 1. OH_Drawing_CanvasCreate
1253     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1254     // 2. OH_Drawing_CanvasTranslate
1255     OH_Drawing_CanvasTranslate(canvas, 10, 10);
1256     // 3. Call drawing class interface to draw a rectangle
1257     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(10, 10, 100, 100);
1258     OH_Drawing_CanvasDrawRect(canvas, rect);
1259     // 4. Free memory
1260     OH_Drawing_RectDestroy(rect);
1261     OH_Drawing_CanvasDestroy(canvas);
1262 }
1263 
1264 /*
1265  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2701
1266  * @tc.name: testCanvasTranslateNull
1267  * @tc.desc: test for testCanvasTranslateNull.
1268  * @tc.size  : SmallTest
1269  * @tc.type  : Function
1270  * @tc.level : Level 3
1271  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasTranslateNull, TestSize.Level3)1272 HWTEST_F(DrawingNativeCanvasTest, testCanvasTranslateNull, TestSize.Level3) {
1273     // 1. OH_Drawing_CanvasCreate
1274     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1275     // 2. OH_Drawing_CanvasTranslate with the first parameter being null
1276     OH_Drawing_CanvasTranslate(nullptr, 10, 10);
1277     // 3. OH_Drawing_CanvasTranslate with the second parameter being 0
1278     OH_Drawing_CanvasTranslate(canvas, 0, 10);
1279     // 4. OH_Drawing_CanvasTranslate with the third parameter being 0
1280     OH_Drawing_CanvasTranslate(canvas, 10, 0);
1281     // 5. Free memory
1282     OH_Drawing_CanvasDestroy(canvas);
1283 }
1284 
1285 /*
1286  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2702
1287  * @tc.name: testCanvasTranslateAbnormal
1288  * @tc.desc: test for testCanvasTranslateAbnormal.
1289  * @tc.size  : SmallTest
1290  * @tc.type  : Function
1291  * @tc.level : Level 3
1292  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasTranslateAbnormal, TestSize.Level3)1293 HWTEST_F(DrawingNativeCanvasTest, testCanvasTranslateAbnormal, TestSize.Level3) {
1294     // 1. OH_Drawing_CanvasCreate
1295     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1296     // 2. OH_Drawing_CanvasTranslate with negative movement distance dx in the x-axis direction
1297     OH_Drawing_CanvasTranslate(canvas, -10, 10);
1298     // 3. OH_Drawing_CanvasTranslate with negative movement distance dy in the y-axis direction
1299     OH_Drawing_CanvasTranslate(canvas, 10, -10);
1300     // 4. Free memory
1301     OH_Drawing_CanvasDestroy(canvas);
1302 }
1303 
1304 /*
1305  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2703
1306  * @tc.name: testCanvasTranslateMaximum
1307  * @tc.desc: test for testCanvasTranslateMaximum.
1308  * @tc.size  : SmallTest
1309  * @tc.type  : Function
1310  * @tc.level : Level 3
1311  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasTranslateMaximum, TestSize.Level3)1312 HWTEST_F(DrawingNativeCanvasTest, testCanvasTranslateMaximum, TestSize.Level3) {
1313     // 1. OH_Drawing_CanvasCreate
1314     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1315     // 2. OH_Drawing_CanvasTranslate with the movement distance dx in the x-axis direction being the maximum value
1316     OH_Drawing_CanvasTranslate(canvas, FLT_MAX, 10);
1317     // 3. OH_Drawing_CanvasTranslate with the movement distance dy in the y-axis direction being the maximum value
1318     OH_Drawing_CanvasTranslate(canvas, 10, FLT_MAX);
1319     // 4. Free memory
1320     OH_Drawing_CanvasDestroy(canvas);
1321 }
1322 
1323 /*
1324  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2704
1325  * @tc.name: testCanvasTranslateInputDestroyed
1326  * @tc.desc: test for testCanvasTranslateInputDestroyed.
1327  * @tc.size  : SmallTest
1328  * @tc.type  : Function
1329  * @tc.level : Level 3
1330  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasTranslateInputDestroyed, TestSize.Level3)1331 HWTEST_F(DrawingNativeCanvasTest, testCanvasTranslateInputDestroyed, TestSize.Level3) {
1332     // Deprecated
1333 }
1334 
1335 /*
1336  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2705
1337  * @tc.name: testCanvasTranslateMultipleCalls
1338  * @tc.desc: test for testCanvasTranslateMultipleCalls.
1339  * @tc.size  : SmallTest
1340  * @tc.type  : Function
1341  * @tc.level : Level 3
1342  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasTranslateMultipleCalls, TestSize.Level3)1343 HWTEST_F(DrawingNativeCanvasTest, testCanvasTranslateMultipleCalls, TestSize.Level3) {
1344     // 1. OH_Drawing_CanvasCreate
1345     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1346     // 2. Call OH_Drawing_CanvasTranslate 10 times, each time with different movement distances
1347     for (int i = 0; i < 10; i++) {
1348         OH_Drawing_CanvasTranslate(canvas, i * 10, i * 10);
1349         // 3. Call drawing class interface
1350         OH_Drawing_Rect *rect = OH_Drawing_RectCreate(10, 10, 100, 100);
1351         OH_Drawing_CanvasDrawRect(canvas, rect);
1352         OH_Drawing_RectDestroy(rect);
1353     }
1354     // 4. Free memory
1355     OH_Drawing_CanvasDestroy(canvas);
1356 }
1357 
1358 /*
1359  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2800
1360  * @tc.name: testCanvasScaleNormal
1361  * @tc.desc: test for testCanvasScaleNormal.
1362  * @tc.size  : SmallTest
1363  * @tc.type  : Function
1364  * @tc.level : Level 0
1365  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasScaleNormal, TestSize.Level0)1366 HWTEST_F(DrawingNativeCanvasTest, testCanvasScaleNormal, TestSize.Level0) {
1367     // 1. Create a canvas
1368     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1369 
1370     // 2. Scale the canvas
1371     OH_Drawing_CanvasScale(canvas, 2.0, 2.0);
1372 
1373     // 3. Call drawing class interface
1374     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(10, 10, 100, 100);
1375     OH_Drawing_CanvasDrawRect(canvas, rect);
1376     OH_Drawing_RectDestroy(rect);
1377 
1378     // 4. Free memory
1379     OH_Drawing_CanvasDestroy(canvas);
1380 }
1381 
1382 /*
1383  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2801
1384  * @tc.name: testCanvasScaleNull
1385  * @tc.desc: test for testCanvasScaleNull.
1386  * @tc.size  : SmallTest
1387  * @tc.type  : Function
1388  * @tc.level : Level 3
1389  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasScaleNull, TestSize.Level3)1390 HWTEST_F(DrawingNativeCanvasTest, testCanvasScaleNull, TestSize.Level3) {
1391     // 1. Create a canvas
1392     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1393 
1394     // 2. Scale the canvas, with the first parameter being null
1395     OH_Drawing_CanvasScale(NULL, 2.0, 2.0);
1396 
1397     // 3. Scale the canvas, with the second parameter being 0
1398     OH_Drawing_CanvasScale(canvas, 0, 2.0);
1399 
1400     // 4. Scale the canvas, with the third parameter being 0
1401     OH_Drawing_CanvasScale(canvas, 2.0, 0);
1402 
1403     // 5. Free memory
1404     OH_Drawing_CanvasDestroy(canvas);
1405 }
1406 
1407 /*
1408  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2802
1409  * @tc.name: testCanvasScaleAbnormal
1410  * @tc.desc: test for testCanvasScaleAbnormal.
1411  * @tc.size  : SmallTest
1412  * @tc.type  : Function
1413  * @tc.level : Level 3
1414  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasScaleAbnormal, TestSize.Level3)1415 HWTEST_F(DrawingNativeCanvasTest, testCanvasScaleAbnormal, TestSize.Level3) {
1416     // 1. Create a canvas
1417     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1418 
1419     // 2. Scale the canvas, with a negative scale ratio in the x-axis
1420     OH_Drawing_CanvasScale(canvas, -2.0, 2.0);
1421 
1422     // 3. Scale the canvas, with a negative scale ratio in the y-axis
1423     OH_Drawing_CanvasScale(canvas, 2.0, -2.0);
1424 
1425     // 4. Free memory
1426     OH_Drawing_CanvasDestroy(canvas);
1427 }
1428 
1429 /*
1430  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2803
1431  * @tc.name: testCanvasScaleMaximum
1432  * @tc.desc: test for testCanvasScaleMaximum.
1433  * @tc.size  : SmallTest
1434  * @tc.type  : Function
1435  * @tc.level : Level 3
1436  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasScaleMaximum, TestSize.Level3)1437 HWTEST_F(DrawingNativeCanvasTest, testCanvasScaleMaximum, TestSize.Level3) {
1438     // 1. Create a canvas
1439     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1440 
1441     // 2. Scale the canvas, with the maximum scale ratio in the x-axis
1442     OH_Drawing_CanvasScale(canvas, DBL_MAX, 2.0);
1443 
1444     // 3. Scale the canvas, with the maximum scale ratio in the y-axis
1445     OH_Drawing_CanvasScale(canvas, 2.0, DBL_MAX);
1446 
1447     // 4. Free memory
1448     OH_Drawing_CanvasDestroy(canvas);
1449 }
1450 
1451 /*
1452  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2804
1453  * @tc.name: testCanvasScaleInputDestroyed
1454  * @tc.desc: test for testCanvasScaleInputDestroyed.
1455  * @tc.size  : SmallTest
1456  * @tc.type  : Function
1457  * @tc.level : Level 3
1458  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasScaleInputDestroyed, TestSize.Level3)1459 HWTEST_F(DrawingNativeCanvasTest, testCanvasScaleInputDestroyed, TestSize.Level3) {
1460     // Deprecated
1461 }
1462 
1463 /*
1464  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_2805
1465  * @tc.name: testCanvasScaleMultipleCalls
1466  * @tc.desc: test for testCanvasScaleMultipleCalls.
1467  * @tc.size  : SmallTest
1468  * @tc.type  : Function
1469  * @tc.level : Level 3
1470  */
HWTEST_F(DrawingNativeCanvasTest, testCanvasScaleMultipleCalls, TestSize.Level3)1471 HWTEST_F(DrawingNativeCanvasTest, testCanvasScaleMultipleCalls, TestSize.Level3) {
1472     // 1. Create a canvas
1473     OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1474 
1475     // 2. Call OH_Drawing_CanvasScale 10 times, each time with different compression ratios
1476     for (int i = 1; i <= 10; i++) {
1477         OH_Drawing_CanvasScale(canvas, i * 1.0, i * 1.0);
1478     }
1479 
1480     // 3. Call drawing class interface
1481     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(10, 10, 100, 100);
1482     OH_Drawing_CanvasDrawRect(canvas, rect);
1483     OH_Drawing_RectDestroy(rect);
1484 
1485     // 4. Free memory
1486     OH_Drawing_CanvasDestroy(canvas);
1487 }
1488 
1489 } // namespace Drawing
1490 } // namespace Rosen
1491 } // namespace OHOS