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