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 "DrawingNativePathCommon.h"
17 #include "drawing_color.h"
18 #include "drawing_color_filter.h"
19 #include "drawing_filter.h"
20 #include "drawing_image.h"
21 #include "drawing_matrix.h"
22 #include "drawing_path.h"
23 #include "drawing_path_effect.h"
24 #include "drawing_pen.h"
25 #include "drawing_point.h"
26 #include "drawing_rect.h"
27 #include "drawing_region.h"
28 #include "drawing_round_rect.h"
29 #include "utils/scalar.h"
30 #include "gtest/gtest.h"
31 
32 using namespace testing;
33 using namespace testing::ext;
34 
35 namespace OHOS {
36 namespace Rosen {
37 namespace Drawing {
38 /*
39  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0100
40  * @tc.name: testPathCreateNormal
41  * @tc.desc: Test for creating a path object with normal parameters.
42  * @tc.size  : SmallTest
43  * @tc.type  : Function
44  * @tc.level : Level 0
45  */
HWTEST_F(DrawingNativePathTest, testPathCreateNormal, TestSize.Level0)46 HWTEST_F(DrawingNativePathTest, testPathCreateNormal, TestSize.Level0) {
47     // 1. Call OH_Drawing_PathCreate to create a path object
48     OH_Drawing_Path *path = OH_Drawing_PathCreate();
49     EXPECT_NE(path, nullptr);
50     // 2. Free memory
51     OH_Drawing_PathDestroy(path);
52 }
53 
54 /*
55  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0200
56  * @tc.name: testPathCopyNormal
57  * @tc.desc: Test for copying a path with normal parameters and checking the copied path length.
58  * @tc.size  : SmallTest
59  * @tc.type  : Function
60  * @tc.level : Level 0
61  */
HWTEST_F(DrawingNativePathTest, testPathCopyNormal, TestSize.Level0)62 HWTEST_F(DrawingNativePathTest, testPathCopyNormal, TestSize.Level0) {
63     // 1. Create a path object 1 by calling OH_Drawing_PathCreate
64     OH_Drawing_Path *path1 = OH_Drawing_PathCreate();
65     EXPECT_NE(path1, nullptr);
66     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
67     OH_Drawing_PathMoveTo(path1, 0, 0);
68     // 3. Add a line segment from the starting point to the target point to the path by calling OH_Drawing_PathLineTo
69     OH_Drawing_PathLineTo(path1, 100, 100);
70     // 4. Add a line segment from the last point of the path to the target point to the path by calling
71     // OH_Drawing_PathLineTo
72     OH_Drawing_PathLineTo(path1, 200, 200);
73     // 5. Add a line segment from the last point of the path to the target point to the path by calling
74     // OH_Drawing_PathLineTo
75     OH_Drawing_PathLineTo(path1, 300, 300);
76     // 6. Close the path by calling OH_Drawing_PathClose
77     OH_Drawing_PathClose(path1);
78     // 7. Copy path 1 to path 2 by calling OH_Drawing_PathCopy
79     OH_Drawing_Path *path2 = OH_Drawing_PathCopy(path1);
80     // 8. Get the length of path 2 by calling OH_Drawing_PathGetLength
81     bool isEqual = IsScalarAlmostEqual(OH_Drawing_PathGetLength(path1, false), OH_Drawing_PathGetLength(path2, false));
82     EXPECT_TRUE(isEqual);
83     // 9. Free memory
84     OH_Drawing_PathDestroy(path1);
85 }
86 
87 /*
88  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0201
89  * @tc.name: testPathCopyNull
90  * @tc.desc: Test for copying a path with NULL parameters.
91  * @tc.size  : SmallTest
92  * @tc.type  : Function
93  * @tc.level : Level 3
94  */
HWTEST_F(DrawingNativePathTest, testPathCopyNull, TestSize.Level3)95 HWTEST_F(DrawingNativePathTest, testPathCopyNull, TestSize.Level3) {
96     // 1. Create a path object by calling OH_Drawing_PathCreate
97     OH_Drawing_Path *path = OH_Drawing_PathCreate();
98     // 2. Copy a path with nullptr as the parameter
99     OH_Drawing_Path *path2 = OH_Drawing_PathCopy(nullptr);
100     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
101     // 3. Free memory
102     OH_Drawing_PathDestroy(path);
103     OH_Drawing_PathDestroy(path2);
104 }
105 
106 /*
107  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0202
108  * @tc.name: testPathCopyInputDestroyed
109  * @tc.desc: Test for copying a path and checking if the copied path is affected after the original path is destroyed.
110  * @tc.size  : SmallTest
111  * @tc.type  : Function
112  * @tc.level : Level 3
113  */
HWTEST_F(DrawingNativePathTest, testPathCopyInputDestroyed, TestSize.Level3)114 HWTEST_F(DrawingNativePathTest, testPathCopyInputDestroyed, TestSize.Level3) {
115     // 1. Create a path object 1 by calling OH_Drawing_PathCreate
116     OH_Drawing_Path *path1 = OH_Drawing_PathCreate();
117     EXPECT_NE(path1, nullptr);
118     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
119     OH_Drawing_PathMoveTo(path1, 0, 0);
120     // 3. Add a line segment from the starting point to the target point to the path by calling OH_Drawing_PathLineTo
121     OH_Drawing_PathLineTo(path1, 100, 100);
122     // 4. Add a line segment from the last point of the path to the target point to the path by calling
123     // OH_Drawing_PathLineTo
124     OH_Drawing_PathLineTo(path1, 200, 200);
125     // 5. Add a line segment from the last point of the path to the target point to the path by calling
126     // OH_Drawing_PathLineTo
127     OH_Drawing_PathLineTo(path1, 300, 300);
128     // 6. Close the path by calling OH_Drawing_PathClose
129     OH_Drawing_PathClose(path1);
130     // 7. Copy path 1 to path 2 by calling OH_Drawing_PathCopy
131     OH_Drawing_Path *path2 = OH_Drawing_PathCopy(path1);
132     // 8. Destroy path 1 by calling OH_Drawing_PathDestroy
133     OH_Drawing_PathDestroy(path1);
134     // 9. Get the length of path 2 by calling OH_Drawing_PathGetLength, if the return value is not 0, it means
135     // destroying path 1 does not affect path 2
136     EXPECT_NE(OH_Drawing_PathGetLength(path2, false), 0);
137     // 10. Free memory
138     OH_Drawing_PathDestroy(path2);
139 }
140 
141 /*
142  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0300
143  * @tc.name: testPathDestroyNormal
144  * @tc.desc: Test for creating and destroying a path object with normal parameters.
145  * @tc.size  : SmallTest
146  * @tc.type  : Function
147  * @tc.level : Level 0
148  */
HWTEST_F(DrawingNativePathTest, testPathDestroyNormal, TestSize.Level0)149 HWTEST_F(DrawingNativePathTest, testPathDestroyNormal, TestSize.Level0) {
150     // 1. Call OH_Drawing_PathCreate to create a path object
151     OH_Drawing_Path *path = OH_Drawing_PathCreate();
152     // 2. Free memory by calling OH_Drawing_PathDestroy
153     OH_Drawing_PathDestroy(path);
154 }
155 
156 /*
157  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0301
158  * @tc.name: testPathDestroyNull
159  * @tc.desc: Test for destroying a path object with NULL parameters.
160  * @tc.size  : SmallTest
161  * @tc.type  : Function
162  * @tc.level : Level 3
163  */
HWTEST_F(DrawingNativePathTest, testPathDestroyNull, TestSize.Level3)164 HWTEST_F(DrawingNativePathTest, testPathDestroyNull, TestSize.Level3) {
165     // 1. Call OH_Drawing_PathCreate to create a path object
166     OH_Drawing_Path *path = OH_Drawing_PathCreate();
167     // 2. Call OH_Drawing_PathDestroy with nullptr as the parameter, expecting OH_DRAWING_ERROR_INVALID_PARAMETER error
168     // code
169     OH_Drawing_PathDestroy(nullptr);
170     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
171     // 3. Free memory
172     OH_Drawing_PathDestroy(path);
173 }
174 
175 /*
176  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0400
177  * @tc.name: testPathMoveToNormal
178  * @tc.desc: Test for moving a path to a normal position with valid parameters.
179  * @tc.size  : SmallTest
180  * @tc.type  : Function
181  * @tc.level : Level 0
182  */
HWTEST_F(DrawingNativePathTest, testPathMoveToNormal, TestSize.Level0)183 HWTEST_F(DrawingNativePathTest, testPathMoveToNormal, TestSize.Level0) {
184     // 1. Create a path object by calling OH_Drawing_PathCreate
185     OH_Drawing_Path *path = OH_Drawing_PathCreate();
186     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
187     OH_Drawing_PathMoveTo(path, 0, 0);
188     // 3. Free memory by calling OH_Drawing_PathDestroy
189     OH_Drawing_PathDestroy(path);
190 }
191 
192 /*
193  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0401
194  * @tc.name: testPathMoveToNull
195  * @tc.desc: Test for moving a path with NULL or invalid parameters.
196  * @tc.size  : SmallTest
197  * @tc.type  : Function
198  * @tc.level : Level 3
199  */
HWTEST_F(DrawingNativePathTest, testPathMoveToNull, TestSize.Level3)200 HWTEST_F(DrawingNativePathTest, testPathMoveToNull, TestSize.Level3) {
201     // 1. Create a path object by calling OH_Drawing_PathCreate
202     OH_Drawing_Path *path = OH_Drawing_PathCreate();
203     // 2. Call OH_Drawing_PathMoveTo with nullptr as the first parameter, expecting OH_DRAWING_ERROR_INVALID_PARAMETER
204     // error code
205     OH_Drawing_PathMoveTo(nullptr, 1, 1);
206     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
207     // 3. Call OH_Drawing_PathMoveTo with 0.00 as the second parameter
208     OH_Drawing_PathMoveTo(path, 0.00, 1);
209     // 4. Call OH_Drawing_PathMoveTo with 0.00 as the third parameter
210     OH_Drawing_PathMoveTo(path, 1, 0.00);
211     // 5. Free memory
212     OH_Drawing_PathDestroy(path);
213 }
214 
215 /*
216  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0402
217  * @tc.name: testPathMoveToAbnormal
218  * @tc.desc: Test for moving a path with abnormal data types as parameters.
219  * @tc.size  : SmallTest
220  * @tc.type  : Function
221  * @tc.level : Level 3
222  */
HWTEST_F(DrawingNativePathTest, testPathMoveToAbnormal, TestSize.Level3)223 HWTEST_F(DrawingNativePathTest, testPathMoveToAbnormal, TestSize.Level3) {
224     // 1. Create a path object by calling OH_Drawing_PathCreate
225     OH_Drawing_Path *path = OH_Drawing_PathCreate();
226     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo with an integer or character type as the
227     // second parameter
228     OH_Drawing_PathMoveTo(path, 2, 1.0f);
229     // 3. Set the starting point of the path by calling OH_Drawing_PathMoveTo with an integer or character type as the
230     // third parameter
231     OH_Drawing_PathMoveTo(path, 1.0f, 2);
232     // 4. Free memory by calling OH_Drawing_PathDestroy
233     OH_Drawing_PathDestroy(path);
234 }
235 
236 /*
237  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0403
238  * @tc.name: testPathMoveToMaximal
239  * @tc.desc: Test for moving a path with maximal values as parameters.
240  * @tc.size  : SmallTest
241  * @tc.type  : Function
242  * @tc.level : Level 3
243  */
HWTEST_F(DrawingNativePathTest, testPathMoveToMaximal, TestSize.Level3)244 HWTEST_F(DrawingNativePathTest, testPathMoveToMaximal, TestSize.Level3) {
245     // 1. Create a path object by calling OH_Drawing_PathCreate
246     OH_Drawing_Path *path = OH_Drawing_PathCreate();
247     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo with the second parameter as the maximum
248     // value of FLT_MAX + 1, no crash
249     OH_Drawing_PathMoveTo(path, FLT_MAX + 1, 1.0);
250     // 3. Set the starting point of the path by calling OH_Drawing_PathMoveTo with the third parameter as the maximum
251     // value of FLT_MAX + 1, no crash
252     OH_Drawing_PathMoveTo(path, 1.0, FLT_MAX + 1);
253     // 4. Free memory
254     OH_Drawing_PathDestroy(path);
255 }
256 
257 /*
258  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0500
259  * @tc.name: testPathLineToNormal
260  * @tc.desc: Test for adding a line to a path with normal parameters.
261  * @tc.size  : SmallTest
262  * @tc.type  : Function
263  * @tc.level : Level 0
264  */
HWTEST_F(DrawingNativePathTest, testPathLineToNormal, TestSize.Level0)265 HWTEST_F(DrawingNativePathTest, testPathLineToNormal, TestSize.Level0) {
266     // 1. Create a path object by calling OH_Drawing_PathCreate
267     OH_Drawing_Path *path = OH_Drawing_PathCreate();
268     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
269     OH_Drawing_PathMoveTo(path, 0, 0);
270     // 3. Add a line segment from the starting point to the target point to the path by calling OH_Drawing_PathLineTo
271     OH_Drawing_PathLineTo(path, 100, 100);
272     // 4. Free memory by calling OH_Drawing_PathDestroy
273     OH_Drawing_PathDestroy(path);
274 }
275 
276 /*
277  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0501
278  * @tc.name: testPathLineToNull
279  * @tc.desc: Test for adding a line to a path with NULL or invalid parameters.
280  * @tc.size  : SmallTest
281  * @tc.type  : Function
282  * @tc.level : Level 3
283  */
HWTEST_F(DrawingNativePathTest, testPathLineToNull, TestSize.Level3)284 HWTEST_F(DrawingNativePathTest, testPathLineToNull, TestSize.Level3) {
285     // 1. Create a path object by calling OH_Drawing_PathCreate
286     OH_Drawing_Path *path = OH_Drawing_PathCreate();
287     // 2. Call OH_Drawing_PathLineTo with nullptr as the first parameter, expecting OH_DRAWING_ERROR_INVALID_PARAMETER
288     // error code
289     OH_Drawing_PathLineTo(nullptr, 1, 1);
290     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
291     // 3. Call OH_Drawing_PathLineTo with 0.00 as the second parameter, no crash
292     OH_Drawing_PathLineTo(path, 0.00, 1);
293     // 4. Call OH_Drawing_PathLineTo with 0.00 as the third parameter, no crash
294     OH_Drawing_PathLineTo(path, 1, 0.00);
295     // 5. Free memory
296     OH_Drawing_PathDestroy(path);
297 }
298 
299 /*
300  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0502
301  * @tc.name: testPathLineToAbnormal
302  * @tc.desc: Test for moving a path with abnormal data types as parameters.
303  * @tc.size  : SmallTest
304  * @tc.type  : Function
305  * @tc.level : Level 3
306  */
HWTEST_F(DrawingNativePathTest, testPathLineToAbnormal, TestSize.Level3)307 HWTEST_F(DrawingNativePathTest, testPathLineToAbnormal, TestSize.Level3) {
308     // 1. Create a path object by calling OH_Drawing_PathCreate
309     OH_Drawing_Path *path = OH_Drawing_PathCreate();
310     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
311     OH_Drawing_PathMoveTo(path, 0, 0);
312     // 3. Add a line segment from the starting point to the target point to the path by calling OH_Drawing_PathLineTo
313     // with an integer or character type as the second parameter
314     OH_Drawing_PathLineTo(path, 2, 1.0f);
315     // 4. Add a line segment from the starting point to the target point to the path by calling OH_Drawing_PathLineTo
316     // with an integer or character type as the third parameter
317     OH_Drawing_PathLineTo(path, 1.0f, 2);
318     // 5. Free memory by calling OH_Drawing_PathDestroy
319     OH_Drawing_PathDestroy(path);
320 }
321 
322 /*
323  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0503
324  * @tc.name: testPathLineToMaximal
325  * @tc.desc: Test for moving a path with maximal values as parameters.
326  * @tc.size  : SmallTest
327  * @tc.type  : Function
328  * @tc.level : Level 3
329  */
HWTEST_F(DrawingNativePathTest, testPathLineToMaximal, TestSize.Level3)330 HWTEST_F(DrawingNativePathTest, testPathLineToMaximal, TestSize.Level3) {
331     // 1. Create a path object by calling OH_Drawing_PathCreate
332     OH_Drawing_Path *path = OH_Drawing_PathCreate();
333     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
334     OH_Drawing_PathMoveTo(path, 0, 0);
335     // 3. Add a line segment from the starting point to the target point to the path by calling OH_Drawing_PathLineTo
336     // with the second parameter as the maximum value of FLT_MAX + 1, no crash
337     OH_Drawing_PathLineTo(path, FLT_MAX + 1, 1.0);
338     // 4. Add a line segment from the starting point to the target point to the path by calling OH_Drawing_PathLineTo
339     // with the third parameter as the maximum value of FLT_MAX + 1, no crash
340     OH_Drawing_PathLineTo(path, 1.0, FLT_MAX + 1);
341     // 5. Free memory by calling OH_Drawing_PathDestroy
342     OH_Drawing_PathDestroy(path);
343 }
344 
345 /*
346  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0600
347  * @tc.name: testPathArcToNormal
348  * @tc.desc: Test for adding an arc to a path with normal parameters.
349  * @tc.size  : SmallTest
350  * @tc.type  : Function
351  * @tc.level : Level 0
352  */
HWTEST_F(DrawingNativePathTest, testPathArcToNormal, TestSize.Level0)353 HWTEST_F(DrawingNativePathTest, testPathArcToNormal, TestSize.Level0) {
354     // 1. Create a path object by calling OH_Drawing_PathCreate
355     OH_Drawing_Path *path = OH_Drawing_PathCreate();
356     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
357     OH_Drawing_PathMoveTo(path, 0, 0);
358     // 3. Add a line segment from the starting point to the target point to the path by calling OH_Drawing_PathLineTo
359     OH_Drawing_PathLineTo(path, 100, 100);
360     // 4. Add a line segment from the last point of the path to the target point to the path by calling
361     // OH_Drawing_PathLineTo
362     OH_Drawing_PathLineTo(path, 200, 200);
363     // 5. Add a line segment from the last point of the path to the target point to the path by calling
364     // OH_Drawing_PathLineTo
365     OH_Drawing_PathLineTo(path, 300, 300);
366     // 6. Close the path by calling OH_Drawing_PathClose
367     OH_Drawing_PathClose(path);
368     // 7. Add an arc to the path by calling OH_Drawing_PathArcTo
369     OH_Drawing_PathArcTo(path, 10, 10, 20, 0, 0, 90);
370     // 8. Free memory by calling OH_Drawing_PathDestroy
371     OH_Drawing_PathDestroy(path);
372 }
373 
374 /*
375  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0601
376  * @tc.name: testPathArcToNull
377  * @tc.desc: Test for adding an arc to a path with NULL or invalid parameters.
378  * @tc.size  : SmallTest
379  * @tc.type  : Function
380  * @tc.level : Level 3
381  */
HWTEST_F(DrawingNativePathTest, testPathArcToNull, TestSize.Level3)382 HWTEST_F(DrawingNativePathTest, testPathArcToNull, TestSize.Level3) {
383     // 1. Create a path object by calling OH_Drawing_PathCreate
384     OH_Drawing_Path *path = OH_Drawing_PathCreate();
385     // 2. Call OH_Drawing_PathArcTo with nullptr as the first parameter, expecting OH_DRAWING_ERROR_INVALID_PARAMETER
386     // error code
387     OH_Drawing_PathArcTo(nullptr, 10, 10, 20, 0, 0, 90);
388     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
389     // 3. Call OH_Drawing_PathArcTo with 0.00 as the second parameter, no crash
390     OH_Drawing_PathArcTo(path, 0.00, 10, 20, 0, 0, 90);
391     // 4. Call OH_Drawing_PathArcTo with 0.00 as the third parameter, no crash
392     OH_Drawing_PathArcTo(path, 10, 0.00, 20, 0, 0, 90);
393     // 5. Call OH_Drawing_PathArcTo with 0.00 as the fourth parameter, no crash
394     OH_Drawing_PathArcTo(path, 10, 10, 0.00, 0, 0, 90);
395     // 6. Call OH_Drawing_PathArcTo with 0.00 as the fifth parameter, no crash
396     OH_Drawing_PathArcTo(path, 10, 10, 20, 0.00, 0, 90);
397     // 7. Call OH_Drawing_PathArcTo with 0.00 as the sixth parameter, no crash
398     OH_Drawing_PathArcTo(path, 10, 10, 20, 0, 0.00, 90);
399     // 8. Call OH_Drawing_PathArcTo with 0.00 as the seventh parameter, no crash
400     OH_Drawing_PathArcTo(path, 10, 10, 20, 0, 0, 0.00);
401     // 9. Free memory
402     OH_Drawing_PathDestroy(path);
403 }
404 
405 /*
406  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0602
407  * @tc.name: testPathArcToAbnormal
408  * @tc.desc: Test for adding an arc to a path with abnormal data types as parameters.
409  * @tc.size  : SmallTest
410  * @tc.type  : Function
411  * @tc.level : Level 3
412  */
HWTEST_F(DrawingNativePathTest, testPathArcToAbnormal, TestSize.Level3)413 HWTEST_F(DrawingNativePathTest, testPathArcToAbnormal, TestSize.Level3) {
414     // 1. Create a path object by calling OH_Drawing_PathCreate
415     OH_Drawing_Path *path = OH_Drawing_PathCreate();
416     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
417     OH_Drawing_PathMoveTo(path, 0, 0);
418     // 3. Add a line segment from the starting point to the target point to the path by calling OH_Drawing_PathLineTo
419     OH_Drawing_PathLineTo(path, 100, 100);
420     // 4. Add a line segment from the last point of the path to the target point to the path by calling
421     // OH_Drawing_PathLineTo
422     OH_Drawing_PathLineTo(path, 200, 200);
423     // 5. Add a line segment from the last point of the path to the target point to the path by calling
424     // OH_Drawing_PathLineTo
425     OH_Drawing_PathLineTo(path, 300, 300);
426     // 6. Close the path by calling OH_Drawing_PathClose
427     OH_Drawing_PathClose(path);
428     // 7. Add an arc to the path by calling OH_Drawing_PathArcTo with integer parameters
429     OH_Drawing_PathArcTo(path, 10, 10, 20, 20, 20, 90);
430     // 8. Free memory by calling OH_Drawing_PathDestroy
431     OH_Drawing_PathDestroy(path);
432 }
433 
434 /*
435  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0603
436  * @tc.name: testPathArcToMaximal
437  * @tc.desc: Test for adding an arc to a path with maximal values as parameters.
438  * @tc.size  : SmallTest
439  * @tc.type  : Function
440  * @tc.level : Level 3
441  */
HWTEST_F(DrawingNativePathTest, testPathArcToMaximal, TestSize.Level3)442 HWTEST_F(DrawingNativePathTest, testPathArcToMaximal, TestSize.Level3) {
443     // 1. Create a path object by calling OH_Drawing_PathCreate
444     OH_Drawing_Path *path = OH_Drawing_PathCreate();
445     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
446     OH_Drawing_PathMoveTo(path, 0, 0);
447     // 3. Add a line segment from the starting point to the target point to the path by calling OH_Drawing_PathLineTo
448     OH_Drawing_PathLineTo(path, 100, 100);
449     // 4. Add a line segment from the last point of the path to the target point to the path by calling
450     // OH_Drawing_PathLineTo
451     OH_Drawing_PathLineTo(path, 200, 200);
452     // 5. Add a line segment from the last point of the path to the target point to the path by calling
453     // OH_Drawing_PathLineTo
454     OH_Drawing_PathLineTo(path, 300, 300);
455     // 6. Close the path by calling OH_Drawing_PathClose
456     OH_Drawing_PathClose(path);
457     // 7. Add an arc to the path by calling OH_Drawing_PathArcTo with the second parameter as the maximum value of
458     // FLT_MAX + 1, no crash
459     OH_Drawing_PathArcTo(path, FLT_MAX + 1, 10, 20, 0, 0, 90);
460     // 8. Add an arc to the path by calling OH_Drawing_PathArcTo with the third parameter as the maximum value of
461     // FLT_MAX + 1, no crash
462     OH_Drawing_PathArcTo(path, 10, FLT_MAX + 1, 20, 0, 0, 90);
463     // 9. Add an arc to the path by calling OH_Drawing_PathArcTo with the fourth parameter as the maximum value of
464     // FLT_MAX + 1, no crash
465     OH_Drawing_PathArcTo(path, 10, 10, FLT_MAX + 1, 0, 0, 90);
466     // 10. Add an arc to the path by calling OH_Drawing_PathArcTo with the fifth parameter as the maximum value of
467     // FLT_MAX + 1, no crash
468     OH_Drawing_PathArcTo(path, 10, 10, 20, FLT_MAX + 1, 0, 90);
469     // 11. Add an arc to the path by calling OH_Drawing_PathArcTo with the sixth parameter as the maximum value of
470     // FLT_MAX + 1, no crash
471     OH_Drawing_PathArcTo(path, 10, 10, 20, 0, FLT_MAX + 1, 90);
472     // 12. Add an arc to the path by calling OH_Drawing_PathArcTo with the seventh parameter as the maximum value of
473     // FLT_MAX + 1, no crash
474     OH_Drawing_PathArcTo(path, 10, 10, 20, 0, 0, FLT_MAX + 1);
475     // 13. Free memory
476     OH_Drawing_PathDestroy(path);
477 }
478 
479 /*
480  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0700
481  * @tc.name: testPathQuadToNormal
482  * @tc.desc: Test for adding a quadratic Bezier curve to a path with normal parameters.
483  * @tc.size  : SmallTest
484  * @tc.type  : Function
485  * @tc.level : Level 0
486  */
HWTEST_F(DrawingNativePathTest, testPathQuadToNormal, TestSize.Level0)487 HWTEST_F(DrawingNativePathTest, testPathQuadToNormal, TestSize.Level0) {
488     // 1. Create a path object by calling OH_Drawing_PathCreate
489     OH_Drawing_Path *path = OH_Drawing_PathCreate();
490     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
491     OH_Drawing_PathMoveTo(path, 0, 0);
492     // 3. Add a quadratic Bezier curve from the last point of the path to the target point by calling
493     // OH_Drawing_PathQuadTo
494     OH_Drawing_PathQuadTo(path, 100, 100, 200, 200);
495     // 4. Free memory by calling OH_Drawing_PathDestroy
496     OH_Drawing_PathDestroy(path);
497 }
498 
499 /*
500  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0701
501  * @tc.name: testPathQuadToNull
502  * @tc.desc: Test for adding a quadratic Bezier curve to a path with NULL or invalid parameters.
503  * @tc.size  : SmallTest
504  * @tc.type  : Function
505  * @tc.level : Level 3
506  */
HWTEST_F(DrawingNativePathTest, testPathQuadToNull, TestSize.Level3)507 HWTEST_F(DrawingNativePathTest, testPathQuadToNull, TestSize.Level3) {
508     // 1. Create a path object by calling OH_Drawing_PathCreate
509     OH_Drawing_Path *path = OH_Drawing_PathCreate();
510     // 2. Call OH_Drawing_PathQuadTo with nullptr as the first parameter, expecting OH_DRAWING_ERROR_INVALID_PARAMETER
511     // error code
512     OH_Drawing_PathQuadTo(nullptr, 100, 100, 200, 200);
513     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
514     // 3. Call OH_Drawing_PathQuadTo with 0.00 as the second parameter, no crash
515     OH_Drawing_PathQuadTo(path, 0.00, 100, 200, 200);
516     // 4. Call OH_Drawing_PathQuadTo with 0.00 as the third parameter, no crash
517     OH_Drawing_PathQuadTo(path, 100, 0.00, 200, 200);
518     // 5. Call OH_Drawing_PathQuadTo with 0.00 as the fourth parameter, no crash
519     OH_Drawing_PathQuadTo(path, 100, 100, 0.00, 200);
520     // 6. Call OH_Drawing_PathQuadTo with 0.00 as the fifth parameter, no crash
521     OH_Drawing_PathQuadTo(path, 100, 100, 200, 0.00);
522     // 7. Free memory
523     OH_Drawing_PathDestroy(path);
524 }
525 
526 /*
527  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0702
528  * @tc.name: testPathQuadToAbnormal
529  * @tc.desc: Test for adding a quadratic Bezier curve to a path with abnormal data types as parameters.
530  * @tc.size  : SmallTest
531  * @tc.type  : Function
532  * @tc.level : Level 3
533  */
HWTEST_F(DrawingNativePathTest, testPathQuadToAbnormal, TestSize.Level3)534 HWTEST_F(DrawingNativePathTest, testPathQuadToAbnormal, TestSize.Level3) {
535     // 1. Create a path object by calling OH_Drawing_PathCreate
536     OH_Drawing_Path *path = OH_Drawing_PathCreate();
537     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
538     OH_Drawing_PathMoveTo(path, 0, 0);
539     // 3. Add a quadratic Bezier curve to the path with the second parameter as an integer
540     OH_Drawing_PathQuadTo(path, 100, 100.0f, 200.0f, 200.0f);
541     // 4. Add a quadratic Bezier curve to the path with the third parameter as an integer
542     OH_Drawing_PathQuadTo(path, 100.0f, 100, 200.0f, 200.0f);
543     // 5. Add a quadratic Bezier curve to the path with the fourth parameter as an integer
544     OH_Drawing_PathQuadTo(path, 100.0f, 100.0f, 200, 200.0f);
545     // 6. Add a quadratic Bezier curve to the path with the fifth parameter as an integer
546     OH_Drawing_PathQuadTo(path, 100.0f, 100.0f, 200.0f, 200);
547     // 7. Free memory by calling OH_Drawing_PathDestroy
548     OH_Drawing_PathDestroy(path);
549 }
550 
551 /*
552  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0703
553  * @tc.name: testPathQuadToMaximal
554  * @tc.desc: Test for adding a quadratic Bezier curve to a path with maximal values as parameters.
555  * @tc.size  : SmallTest
556  * @tc.type  : Function
557  * @tc.level : Level 3
558  */
HWTEST_F(DrawingNativePathTest, testPathQuadToMaximal, TestSize.Level3)559 HWTEST_F(DrawingNativePathTest, testPathQuadToMaximal, TestSize.Level3) {
560     // 1. Create a path object by calling OH_Drawing_PathCreate
561     OH_Drawing_Path *path = OH_Drawing_PathCreate();
562     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
563     OH_Drawing_PathMoveTo(path, 0, 0);
564     // 3. Call OH_Drawing_PathQuadTo with the second parameter as the maximum value of FLT_MAX + 1, no crash
565     OH_Drawing_PathQuadTo(path, FLT_MAX + 1, 100, 200, 200);
566     // 4. Call OH_Drawing_PathQuadTo with the third parameter as the maximum value of FLT_MAX + 1, no crash
567     OH_Drawing_PathQuadTo(path, 100, FLT_MAX + 1, 200, 200);
568     // 5. Call OH_Drawing_PathQuadTo with the fourth parameter as the maximum value of FLT_MAX + 1, no crash
569     OH_Drawing_PathQuadTo(path, 100, 100, FLT_MAX + 1, 200);
570     // 6. Call OH_Drawing_PathQuadTo with the fifth parameter as the maximum value of FLT_MAX + 1, no crash
571     OH_Drawing_PathQuadTo(path, 100, 100, 200, FLT_MAX + 1);
572     // 7. Free memory by calling OH_Drawing_PathDestroy
573     OH_Drawing_PathDestroy(path);
574 }
575 
576 /*
577  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0800
578  * @tc.name: testPathConicToNormal
579  * @tc.desc: Test for adding a conic curve to a path with normal parameters.
580  * @tc.size  : SmallTest
581  * @tc.type  : Function
582  * @tc.level : Level 0
583  */
HWTEST_F(DrawingNativePathTest, testPathConicToNormal, TestSize.Level0)584 HWTEST_F(DrawingNativePathTest, testPathConicToNormal, TestSize.Level0) {
585     // 1. Create a path object by calling OH_Drawing_PathCreate
586     OH_Drawing_Path *path = OH_Drawing_PathCreate();
587     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
588     OH_Drawing_PathMoveTo(path, 0, 0);
589     // 3. Add a line segment from the last point of the path to the target point by calling OH_Drawing_PathLineTo
590     OH_Drawing_PathLineTo(path, 100, 100);
591     // 4. Add a quadratic Bezier curve to the path by calling OH_Drawing_PathConicTo
592     OH_Drawing_PathConicTo(path, 50, 50, 100, 100, 0.5);
593     // 5. Free memory by calling OH_Drawing_PathDestroy
594     OH_Drawing_PathDestroy(path);
595 }
596 
597 /*
598  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0801
599  * @tc.name: testPathConicToNull
600  * @tc.desc: Test for adding a conic curve to a path with NULL or invalid parameters.
601  * @tc.size  : SmallTest
602  * @tc.type  : Function
603  * @tc.level : Level 3
604  */
HWTEST_F(DrawingNativePathTest, testPathConicToNull, TestSize.Level3)605 HWTEST_F(DrawingNativePathTest, testPathConicToNull, TestSize.Level3) {
606     // 1. Create a path object by calling OH_Drawing_PathCreate
607     OH_Drawing_Path *path = OH_Drawing_PathCreate();
608     // 2. Call OH_Drawing_PathConicTo with nullptr as the first parameter, expecting OH_DRAWING_ERROR_INVALID_PARAMETER
609     // error code
610     OH_Drawing_PathConicTo(nullptr, 50, 50, 100, 100, 0.5);
611     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
612     // 3. Call OH_Drawing_PathConicTo with 0.00 as the second parameter, no crash
613     OH_Drawing_PathConicTo(path, 0.00, 50, 100, 100, 0.5);
614     // 4. Call OH_Drawing_PathConicTo with 0.00 as the third parameter, no crash
615     OH_Drawing_PathConicTo(path, 50, 0.00, 100, 100, 0.5);
616     // 5. Call OH_Drawing_PathConicTo with 0.00 as the fourth parameter, no crash
617     OH_Drawing_PathConicTo(path, 50, 50, 0.00, 100, 0.5);
618     // 6. Call OH_Drawing_PathConicTo with 0.00 as the fifth parameter, no crash
619     OH_Drawing_PathConicTo(path, 50, 50, 100, 0.00, 0.5);
620     // 7. Call OH_Drawing_PathConicTo with 0.00 as the sixth parameter, no crash
621     OH_Drawing_PathConicTo(path, 50, 50, 100, 100, 0.00);
622     // 8. Free memory by calling OH_Drawing_PathDestroy
623     OH_Drawing_PathDestroy(path);
624 }
625 
626 /*
627  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0802
628  * @tc.name: testPathConicToAbnormal
629  * @tc.desc: Test for adding a conic curve to a path with abnormal data types as parameters.
630  * @tc.size  : SmallTest
631  * @tc.type  : Function
632  * @tc.level : Level 3
633  */
HWTEST_F(DrawingNativePathTest, testPathConicToAbnormal, TestSize.Level3)634 HWTEST_F(DrawingNativePathTest, testPathConicToAbnormal, TestSize.Level3) {
635     // 1. Create a path object by calling OH_Drawing_PathCreate
636     OH_Drawing_Path *path = OH_Drawing_PathCreate();
637     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
638     OH_Drawing_PathMoveTo(path, 0, 0);
639     // 3. Add a line segment from the last point of the path to the target point by calling OH_Drawing_PathLineTo
640     OH_Drawing_PathLineTo(path, 100.0f, 100.0f);
641     // 4. Add a conic curve to the path with the second parameter as an integer or character type
642     OH_Drawing_PathConicTo(path, 50, 50.0f, 100.0f, 100.0f, 0.5f);
643     // 5. Add a conic curve to the path with the third parameter as an integer or character type
644     OH_Drawing_PathConicTo(path, 50.0f, 50, 100.0f, 100.0f, 0.5f);
645     // 6. Add a conic curve to the path with the fourth parameter as an integer or character type
646     OH_Drawing_PathConicTo(path, 50.0f, 50.0f, 100, 100.0f, 0.5f);
647     // 7. Add a conic curve to the path with the fifth parameter as an integer or character type
648     OH_Drawing_PathConicTo(path, 50.0f, 50.0f, 100.0f, 100, 0.5f);
649     // 8. Add a conic curve to the path with the sixth parameter as an integer or character type
650     OH_Drawing_PathConicTo(path, 50.0f, 50.0f, 100.0f, 100.0f, 1);
651     // 9. Free memory by calling OH_Drawing_PathDestroy
652     OH_Drawing_PathDestroy(path);
653 }
654 
655 /*
656  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0803
657  * @tc.name: testPathConicToMaximal
658  * @tc.desc: Test for adding a conic curve to a path with maximal values as parameters.
659  * @tc.size  : SmallTest
660  * @tc.type  : Function
661  * @tc.level : Level 3
662  */
HWTEST_F(DrawingNativePathTest, testPathConicToMaximal, TestSize.Level3)663 HWTEST_F(DrawingNativePathTest, testPathConicToMaximal, TestSize.Level3) {
664     // 1. Create a path object by calling OH_Drawing_PathCreate
665     OH_Drawing_Path *path = OH_Drawing_PathCreate();
666     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
667     OH_Drawing_PathMoveTo(path, 0, 0);
668     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
669     OH_Drawing_PathLineTo(path, 100, 100);
670     // 4. Call OH_Drawing_PathConicTo with the second parameter as the maximum value of FLT_MAX + 1, no crash
671     OH_Drawing_PathConicTo(path, FLT_MAX + 1, 50, 100, 100, 0.5);
672     // 5. Call OH_Drawing_PathConicTo with the third parameter as the maximum value of FLT_MAX + 1, no crash
673     OH_Drawing_PathConicTo(path, 50, FLT_MAX + 1, 100, 100, 0.5);
674     // 6. Call OH_Drawing_PathConicTo with the fourth parameter as the maximum value of FLT_MAX + 1, no crash
675     OH_Drawing_PathConicTo(path, 50, 50, FLT_MAX + 1, 100, 0.5);
676     // 7. Call OH_Drawing_PathConicTo with the fifth parameter as the maximum value of FLT_MAX + 1, no crash
677     OH_Drawing_PathConicTo(path, 50, 50, 100, FLT_MAX + 1, 0.5);
678     // 8. Call OH_Drawing_PathConicTo with the sixth parameter as the maximum value of FLT_MAX + 1, no crash
679     OH_Drawing_PathConicTo(path, 50, 50, 100, 100, FLT_MAX + 1);
680     // 9. Free memory by calling OH_Drawing_PathDestroy
681     OH_Drawing_PathDestroy(path);
682 }
683 
684 /*
685  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0900
686  * @tc.name: testPathCubicToNormal
687  * @tc.desc: Test for adding a cubic Bezier curve to a path with normal parameters.
688  * @tc.size  : SmallTest
689  * @tc.type  : Function
690  * @tc.level : Level 0
691  */
HWTEST_F(DrawingNativePathTest, testPathCubicToNormal, TestSize.Level0)692 HWTEST_F(DrawingNativePathTest, testPathCubicToNormal, TestSize.Level0) {
693     // 1. Create a path object by calling OH_Drawing_PathCreate
694     OH_Drawing_Path *path = OH_Drawing_PathCreate();
695     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
696     OH_Drawing_PathMoveTo(path, 0, 0);
697     // 3. Add a cubic Bezier curve from the last point of the path to the target point by calling OH_Drawing_PathCubicTo
698     OH_Drawing_PathCubicTo(path, 100, 100, 200, 200, 300, 300);
699     // 4. Free memory by calling OH_Drawing_PathDestroy
700     OH_Drawing_PathDestroy(path);
701 }
702 
703 /*
704  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0901
705  * @tc.name: testPathCubicToNull
706  * @tc.desc: Test for adding a cubic Bezier curve to a path with NULL or invalid parameters.
707  * @tc.size  : SmallTest
708  * @tc.type  : Function
709  * @tc.level : Level 3
710  */
HWTEST_F(DrawingNativePathTest, testPathCubicToNull, TestSize.Level3)711 HWTEST_F(DrawingNativePathTest, testPathCubicToNull, TestSize.Level3) {
712     // 1. Create a path object by calling OH_Drawing_PathCreate
713     OH_Drawing_Path *path = OH_Drawing_PathCreate();
714     // 2. Call OH_Drawing_PathCubicTo with nullptr as the first parameter, expecting OH_DRAWING_ERROR_INVALID_PARAMETER
715     // error code
716     OH_Drawing_PathCubicTo(nullptr, 100, 100, 200, 200, 300, 300);
717     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
718     // 3. Call OH_Drawing_PathCubicTo with 0.00 as the second parameter, no crash
719     OH_Drawing_PathCubicTo(path, 0.00, 100, 200, 200, 300, 300);
720     // 4. Call OH_Drawing_PathCubicTo with 0.00 as the third parameter, no crash
721     OH_Drawing_PathCubicTo(path, 100, 0.00, 200, 200, 300, 300);
722     // 5. Call OH_Drawing_PathCubicTo with 0.00 as the fourth parameter, no crash
723     OH_Drawing_PathCubicTo(path, 100, 100, 0.00, 200, 300, 300);
724     // 6. Call OH_Drawing_PathCubicTo with 0.00 as the fifth parameter, no crash
725     OH_Drawing_PathCubicTo(path, 100, 100, 200, 0.00, 300, 300);
726     // 7. Call OH_Drawing_PathCubicTo with 0.00 as the sixth parameter, no crash
727     OH_Drawing_PathCubicTo(path, 100, 100, 200, 200, 0.00, 300);
728     // 8. Call OH_Drawing_PathCubicTo with 0.00 as the seventh parameter, no crash
729     OH_Drawing_PathCubicTo(path, 100, 100, 200, 200, 300, 0.00);
730     // 9. Free memory by calling OH_Drawing_PathDestroy
731     OH_Drawing_PathDestroy(path);
732 }
733 
734 /*
735  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0902
736  * @tc.name: testPathCubicToAbnormal
737  * @tc.desc: Test for adding a cubic Bezier curve to a path with abnormal data types as parameters.
738  * @tc.size  : SmallTest
739  * @tc.type  : Function
740  * @tc.level : Level 3
741  */
HWTEST_F(DrawingNativePathTest, testPathCubicToAbnormal, TestSize.Level3)742 HWTEST_F(DrawingNativePathTest, testPathCubicToAbnormal, TestSize.Level3) {
743     // 1. Create a path object by calling OH_Drawing_PathCreate
744     OH_Drawing_Path *path = OH_Drawing_PathCreate();
745     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
746     OH_Drawing_PathMoveTo(path, 0, 0);
747     // 3. Add a cubic Bezier curve to the path with the second parameter as an integer
748     OH_Drawing_PathCubicTo(path, 100, 100.0f, 200.0f, 200.0f, 300.0f, 300.0f);
749     // 4. Add a cubic Bezier curve to the path with the third parameter as an integer
750     OH_Drawing_PathCubicTo(path, 100.0f, 100, 200.0f, 200.0f, 300.0f, 300.0f);
751     // 5. Add a cubic Bezier curve to the path with the fourth parameter as an integer
752     OH_Drawing_PathCubicTo(path, 100.0f, 100.0f, 200, 200.0f, 300.0f, 300.0f);
753     // 6. Add a cubic Bezier curve to the path with the fifth parameter as an integer
754     OH_Drawing_PathCubicTo(path, 100.0f, 100.0f, 200.0f, 200, 300.0f, 300.0f);
755     // 7. Add a cubic Bezier curve to the path with the sixth parameter as an integer
756     OH_Drawing_PathCubicTo(path, 100.0f, 100.0f, 200.0f, 200.0f, 300, 300.0f);
757     // 8. Add a cubic Bezier curve to the path with the seventh parameter as an integer
758     OH_Drawing_PathCubicTo(path, 100.0f, 100.0f, 200.0f, 200.0f, 300.0f, 300);
759     // 9. Free memory by calling OH_Drawing_PathDestroy
760     OH_Drawing_PathDestroy(path);
761 }
762 
763 /*
764  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_0903
765  * @tc.name: testPathCubicToMaximal
766  * @tc.desc: Test for adding a cubic Bezier curve to a path with maximal values as parameters.
767  * @tc.size  : SmallTest
768  * @tc.type  : Function
769  * @tc.level : Level 3
770  */
HWTEST_F(DrawingNativePathTest, testPathCubicToMaximal, TestSize.Level3)771 HWTEST_F(DrawingNativePathTest, testPathCubicToMaximal, TestSize.Level3) {
772     // 1. Create a path object by calling OH_Drawing_PathCreate
773     OH_Drawing_Path *path = OH_Drawing_PathCreate();
774     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
775     OH_Drawing_PathMoveTo(path, 0, 0);
776     // 3. Call OH_Drawing_PathCubicTo with the second parameter as the maximum value of FLT_MAX + 1, no crash
777     OH_Drawing_PathCubicTo(path, FLT_MAX + 1, 100, 200, 200, 300, 300);
778     // 4. Call OH_Drawing_PathCubicTo with the third parameter as the maximum value of FLT_MAX + 1, no crash
779     OH_Drawing_PathCubicTo(path, 100, FLT_MAX + 1, 200, 200, 300, 300);
780     // 5. Call OH_Drawing_PathCubicTo with the fourth parameter as the maximum value of FLT_MAX + 1, no crash
781     OH_Drawing_PathCubicTo(path, 100, 100, FLT_MAX + 1, 200, 300, 300);
782     // 6. Call OH_Drawing_PathCubicTo with the fifth parameter as the maximum value of FLT_MAX + 1, no crash
783     OH_Drawing_PathCubicTo(path, 100, 100, 200, FLT_MAX + 1, 300, 300);
784     // 7. Call OH_Drawing_PathCubicTo with the sixth parameter as the maximum value of FLT_MAX + 1, no crash
785     OH_Drawing_PathCubicTo(path, 100, 100, 200, 200, FLT_MAX + 1, 300);
786     // 8. Call OH_Drawing_PathCubicTo with the seventh parameter as the maximum value of FLT_MAX + 1, no crash
787     OH_Drawing_PathCubicTo(path, 100, 100, 200, 200, 300, FLT_MAX + 1);
788     // 9. Free memory by calling OH_Drawing_PathDestroy
789     OH_Drawing_PathDestroy(path);
790 }
791 
792 /*
793  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1000
794  * @tc.name: testPathRMoveToNormal
795  * @tc.desc: Test for setting a relative move to a path with normal parameters.
796  * @tc.size  : SmallTest
797  * @tc.type  : Function
798  * @tc.level : Level 0
799  */
HWTEST_F(DrawingNativePathTest, testPathRMoveToNormal, TestSize.Level0)800 HWTEST_F(DrawingNativePathTest, testPathRMoveToNormal, TestSize.Level0) {
801     // 1. Create a path object by calling OH_Drawing_PathCreate
802     OH_Drawing_Path *path = OH_Drawing_PathCreate();
803     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
804     OH_Drawing_PathMoveTo(path, 0, 0);
805     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
806     OH_Drawing_PathLineTo(path, 100, 100);
807     // 4. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
808     OH_Drawing_PathRMoveTo(path, 100, 100);
809     // 5. Free memory by calling OH_Drawing_PathDestroy
810     OH_Drawing_PathDestroy(path);
811 }
812 
813 /*
814  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1001
815  * @tc.name: testPathRMoveToNull
816  * @tc.desc: Test for setting a relative move to a path with NULL or invalid parameters.
817  * @tc.size  : SmallTest
818  * @tc.type  : Function
819  * @tc.level : Level 3
820  */
HWTEST_F(DrawingNativePathTest, testPathRMoveToNull, TestSize.Level3)821 HWTEST_F(DrawingNativePathTest, testPathRMoveToNull, TestSize.Level3) {
822     // 1. Create a path object by calling OH_Drawing_PathCreate
823     OH_Drawing_Path *path = OH_Drawing_PathCreate();
824     // 2. Call OH_Drawing_PathRMoveTo with nullptr as the first parameter, expecting OH_DRAWING_ERROR_INVALID_PARAMETER
825     // error code
826     OH_Drawing_PathRMoveTo(nullptr, 100, 100);
827     // 3. Call OH_Drawing_PathRMoveTo with 0.00 as the second parameter, no crash
828     OH_Drawing_PathRMoveTo(path, 0.00, 100);
829     // 4. Call OH_Drawing_PathRMoveTo with 0.00 as the third parameter, no crash
830     OH_Drawing_PathRMoveTo(path, 100, 0.00);
831     // 5. Free memory by calling OH_Drawing_PathDestroy
832     OH_Drawing_PathDestroy(path);
833 }
834 
835 /*
836  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1002
837  * @tc.name: testPathRMoveToAbnormal
838  * @tc.desc: Test for setting a relative move to a path with abnormal data types as parameters.
839  * @tc.size  : SmallTest
840  * @tc.type  : Function
841  * @tc.level : Level 3
842  */
HWTEST_F(DrawingNativePathTest, testPathRMoveToAbnormal, TestSize.Level3)843 HWTEST_F(DrawingNativePathTest, testPathRMoveToAbnormal, TestSize.Level3) {
844     // 1. Create a path object by calling OH_Drawing_PathCreate
845     OH_Drawing_Path *path = OH_Drawing_PathCreate();
846     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
847     OH_Drawing_PathMoveTo(path, 0, 0);
848     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
849     OH_Drawing_PathLineTo(path, 100.0f, 100.0f);
850     // 4. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
851     OH_Drawing_PathRMoveTo(path, 100, 100.0f);
852     // 5. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
853     OH_Drawing_PathRMoveTo(path, 100.0f, 100);
854     // 6. Free memory by calling OH_Drawing_PathDestroy
855     OH_Drawing_PathDestroy(path);
856 }
857 
858 /*
859  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1003
860  * @tc.name: testPathRMoveToMaximal
861  * @tc.desc: Test for setting a relative move to a path with maximal values as parameters.
862  * @tc.size  : SmallTest
863  * @tc.type  : Function
864  * @tc.level : Level 3
865  */
HWTEST_F(DrawingNativePathTest, testPathRMoveToMaximal, TestSize.Level3)866 HWTEST_F(DrawingNativePathTest, testPathRMoveToMaximal, TestSize.Level3) {
867     // 1. Create a path object by calling OH_Drawing_PathCreate
868     OH_Drawing_Path *path = OH_Drawing_PathCreate();
869     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
870     OH_Drawing_PathMoveTo(path, 0, 0);
871     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
872     OH_Drawing_PathLineTo(path, 100, 100);
873     // 4. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
874     OH_Drawing_PathRMoveTo(path, FLT_MAX + 1, 100);
875     // 5. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
876     OH_Drawing_PathRMoveTo(path, 100, FLT_MAX + 1);
877     // 6. Free memory by calling OH_Drawing_PathDestroy
878     OH_Drawing_PathDestroy(path);
879 }
880 
881 /*
882  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1100
883  * @tc.name: testPathRLineToNormal
884  * @tc.desc: Test for adding a relative line to a path with normal parameters.
885  * @tc.size  : SmallTest
886  * @tc.type  : Function
887  * @tc.level : Level 0
888  */
HWTEST_F(DrawingNativePathTest, testPathRLineToNormal, TestSize.Level0)889 HWTEST_F(DrawingNativePathTest, testPathRLineToNormal, TestSize.Level0) {
890     // 1. Create a path object by calling OH_Drawing_PathCreate
891     OH_Drawing_Path *path = OH_Drawing_PathCreate();
892     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
893     OH_Drawing_PathMoveTo(path, 0, 0);
894     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
895     OH_Drawing_PathLineTo(path, 100, 100);
896     // 4. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
897     OH_Drawing_PathRMoveTo(path, 100, 100);
898     // 5. Add a relative line to the path from the current endpoint to the target point by calling
899     // OH_Drawing_PathRLineTo
900     OH_Drawing_PathRLineTo(path, 100, 100);
901     // 6. Free memory by calling OH_Drawing_PathDestroy
902     OH_Drawing_PathDestroy(path);
903 }
904 
905 /*
906  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1101
907  * @tc.name: testPathRLineToNull
908  * @tc.desc: Test for adding a relative line to a path with NULL or invalid parameters.
909  * @tc.size  : SmallTest
910  * @tc.type  : Function
911  * @tc.level : Level 3
912  */
HWTEST_F(DrawingNativePathTest, testPathRLineToNull, TestSize.Level3)913 HWTEST_F(DrawingNativePathTest, testPathRLineToNull, TestSize.Level3) {
914     // 1. Create a path object by calling OH_Drawing_PathCreate
915     OH_Drawing_Path *path = OH_Drawing_PathCreate();
916     // 2. Call OH_Drawing_PathRLineTo with nullptr as the first parameter, expecting OH_DRAWING_ERROR_INVALID_PARAMETER
917     // error code
918     OH_Drawing_PathRLineTo(nullptr, 100, 100);
919     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
920     // 3. Call OH_Drawing_PathRLineTo with 0.00 as the second parameter, no crash
921     OH_Drawing_PathRLineTo(path, 0.00, 100);
922     // 4. Call OH_Drawing_PathRLineTo with 0.00 as the third parameter, no crash
923     OH_Drawing_PathRLineTo(path, 100, 0.00);
924     // 5. Free memory by calling OH_Drawing_PathDestroy
925     OH_Drawing_PathDestroy(path);
926 }
927 
928 /*
929  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1102
930  * @tc.name: testPathRLineToAbnormal
931  * @tc.desc: Test for adding a relative line to a path with abnormal data types as parameters.
932  * @tc.size  : SmallTest
933  * @tc.type  : Function
934  * @tc.level : Level 3
935  */
HWTEST_F(DrawingNativePathTest, testPathRLineToAbnormal, TestSize.Level3)936 HWTEST_F(DrawingNativePathTest, testPathRLineToAbnormal, TestSize.Level3) {
937     // 1. Create a path object by calling OH_Drawing_PathCreate
938     OH_Drawing_Path *path = OH_Drawing_PathCreate();
939     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
940     OH_Drawing_PathMoveTo(path, 0, 0);
941     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
942     OH_Drawing_PathLineTo(path, 100.0f, 100.0f);
943     // 4. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
944     OH_Drawing_PathRMoveTo(path, 100, 100);
945     // 5. Add a relative line to the path from the current endpoint to the target point by calling
946     // OH_Drawing_PathRLineTo
947     OH_Drawing_PathRLineTo(path, 100.0f, 100);
948     // 6. Add a relative line to the path from the current endpoint to the target point by calling
949     // OH_Drawing_PathRLineTo
950     OH_Drawing_PathRLineTo(path, 100, 100.0f);
951     // 7. Free memory by calling OH_Drawing_PathDestroy
952     OH_Drawing_PathDestroy(path);
953 }
954 
955 /*
956  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1103
957  * @tc.name: testPathRLineToMaximal
958  * @tc.desc: Test for adding a relative line to a path with maximal values as parameters.
959  * @tc.size  : SmallTest
960  * @tc.type  : Function
961  * @tc.level : Level 3
962  */
HWTEST_F(DrawingNativePathTest, testPathRLineToMaximal, TestSize.Level3)963 HWTEST_F(DrawingNativePathTest, testPathRLineToMaximal, TestSize.Level3) {
964     // 1. Create a path object by calling OH_Drawing_PathCreate
965     OH_Drawing_Path *path = OH_Drawing_PathCreate();
966     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
967     OH_Drawing_PathMoveTo(path, 0, 0);
968     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
969     OH_Drawing_PathLineTo(path, 100, 100);
970     // 4. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
971     OH_Drawing_PathRMoveTo(path, 100, 100);
972     // 5. Add a relative line to the path from the current endpoint to the target point by calling
973     // OH_Drawing_PathRLineTo
974     OH_Drawing_PathRLineTo(path, FLT_MAX + 1, 100);
975     // 6. Add a relative line to the path from the current endpoint to the target point by calling
976     // OH_Drawing_PathRLineTo
977     OH_Drawing_PathRLineTo(path, 100, FLT_MAX + 1);
978     // 7. Free memory by calling OH_Drawing_PathDestroy
979     OH_Drawing_PathDestroy(path);
980 }
981 
982 /*
983  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1200
984  * @tc.name: testPathRQuadToNormal
985  * @tc.desc: Test for adding a relative quadratic Bezier curve to a path with normal parameters.
986  * @tc.size  : SmallTest
987  * @tc.type  : Function
988  * @tc.level : Level 0
989  */
HWTEST_F(DrawingNativePathTest, testPathRQuadToNormal, TestSize.Level0)990 HWTEST_F(DrawingNativePathTest, testPathRQuadToNormal, TestSize.Level0) {
991     // 1. Create a path object by calling OH_Drawing_PathCreate
992     OH_Drawing_Path *path = OH_Drawing_PathCreate();
993     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
994     OH_Drawing_PathMoveTo(path, 0, 0);
995     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
996     OH_Drawing_PathLineTo(path, 100, 100);
997     // 4. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
998     OH_Drawing_PathRMoveTo(path, 100, 100);
999     // 5. Add a relative quadratic Bezier curve to the path from the current endpoint to the target point by calling
1000     // OH_Drawing_PathRQuadTo
1001     OH_Drawing_PathRQuadTo(path, 100, 100, 200, 200);
1002     // 6. Free memory by calling OH_Drawing_PathDestroy
1003     OH_Drawing_PathDestroy(path);
1004 }
1005 
1006 /*
1007  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1201
1008  * @tc.name: testPathRQuadToNull
1009  * @tc.desc: Test for adding a relative quadratic Bezier curve to a path with NULL or invalid parameters.
1010  * @tc.size  : SmallTest
1011  * @tc.type  : Function
1012  * @tc.level : Level 3
1013  */
HWTEST_F(DrawingNativePathTest, testPathRQuadToNull, TestSize.Level3)1014 HWTEST_F(DrawingNativePathTest, testPathRQuadToNull, TestSize.Level3) {
1015     // 1. Create a path object by calling OH_Drawing_PathCreate
1016     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1017     // 2. Call OH_Drawing_PathRQuadTo with nullptr as the first parameter, expecting OH_DRAWING_ERROR_INVALID_PARAMETER
1018     // error code
1019     OH_Drawing_PathRQuadTo(nullptr, 0, 0, 0, 0);
1020     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
1021     // 3. Call OH_Drawing_PathRQuadTo with 0.00 as the second parameter, no crash
1022     OH_Drawing_PathRQuadTo(path, 0.00, 100, 100, 300);
1023     // 4. Call OH_Drawing_PathRQuadTo with 0.00 as the third parameter, no crash
1024     OH_Drawing_PathRQuadTo(path, 100, 0.00, 100, 300);
1025     // 5. Call OH_Drawing_PathRQuadTo with 0.00 as the fourth parameter, no crash
1026     OH_Drawing_PathRQuadTo(path, 100, 100, 0.00, 300);
1027     // 6. Call OH_Drawing_PathRQuadTo with 0.00 as the fifth parameter, no crash
1028     OH_Drawing_PathRQuadTo(path, 100, 100, 100, 0.00);
1029     // 7. Free memory by calling OH_Drawing_PathDestroy
1030     OH_Drawing_PathDestroy(path);
1031 }
1032 
1033 /*
1034  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1202
1035  * @tc.name: testPathRQuadToAbnormal
1036  * @tc.desc: Test for adding a relative quadratic Bezier curve to a path with abnormal data types as parameters.
1037  * @tc.size  : SmallTest
1038  * @tc.type  : Function
1039  * @tc.level : Level 3
1040  */
HWTEST_F(DrawingNativePathTest, testPathRQuadToAbnormal, TestSize.Level3)1041 HWTEST_F(DrawingNativePathTest, testPathRQuadToAbnormal, TestSize.Level3) {
1042     // 1. Create a path object by calling OH_Drawing_PathCreate
1043     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1044     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1045     OH_Drawing_PathMoveTo(path, 0, 0);
1046     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1047     OH_Drawing_PathLineTo(path, 100.0f, 100.0f);
1048     // 4. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
1049     OH_Drawing_PathRMoveTo(path, 100, 100);
1050     // 5. Call OH_Drawing_PathRQuadTo with an integer or character type as the second parameter
1051     OH_Drawing_PathRQuadTo(path, 100, 100.0f, 100.0f, 300.0f);
1052     // 6. Call OH_Drawing_PathRQuadTo with an integer or character type as the third parameter
1053     OH_Drawing_PathRQuadTo(path, 100.0f, 100, 100.0f, 300.0f);
1054     // 7. Call OH_Drawing_PathRQuadTo with an integer or character type as the fourth parameter
1055     OH_Drawing_PathRQuadTo(path, 100.0f, 100.0f, 100, 300.0f);
1056     // 8. Call OH_Drawing_PathRQuadTo with an integer or character type as the fifth parameter
1057     OH_Drawing_PathRQuadTo(path, 100.0f, 100.0f, 100.0f, 300);
1058     // 9. Free memory
1059     OH_Drawing_PathDestroy(path);
1060 }
1061 
1062 /*
1063  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1203
1064  * @tc.name: testPathRQuadToMaximal
1065  * @tc.desc: Test for adding a relative quadratic Bezier curve to a path with maximal values as parameters.
1066  * @tc.size  : SmallTest
1067  * @tc.type  : Function
1068  * @tc.level : Level 3
1069  */
HWTEST_F(DrawingNativePathTest, testPathRQuadToMaximal, TestSize.Level3)1070 HWTEST_F(DrawingNativePathTest, testPathRQuadToMaximal, TestSize.Level3) {
1071     // 1. Create a path object by calling OH_Drawing_PathCreate
1072     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1073     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1074     OH_Drawing_PathMoveTo(path, 0, 0);
1075     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1076     OH_Drawing_PathLineTo(path, 100, 100);
1077     // 4. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
1078     OH_Drawing_PathRMoveTo(path, 100, 100);
1079     // 5. Call OH_Drawing_PathRQuadTo with a second parameter of FLT_MAX + 1
1080     OH_Drawing_PathRQuadTo(path, FLT_MAX + 1, 100, 100, 300);
1081     // 6. Call OH_Drawing_PathRQuadTo with a third parameter of FLT_MAX + 1
1082     OH_Drawing_PathRQuadTo(path, 100, FLT_MAX + 1, 100, 300);
1083     // 7. Call OH_Drawing_PathRQuadTo with a fourth parameter of FLT_MAX + 1
1084     OH_Drawing_PathRQuadTo(path, 100, 100, FLT_MAX + 1, 300);
1085     // 8. Call OH_Drawing_PathRQuadTo with a fifth parameter of FLT_MAX + 1
1086     OH_Drawing_PathRQuadTo(path, 100, 100, 100, FLT_MAX + 1);
1087     // 9. Free memory by calling OH_Drawing_PathDestroy
1088     OH_Drawing_PathDestroy(path);
1089 }
1090 
1091 /*
1092  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1300
1093  * @tc.name: testPathRConicToNormal
1094  * @tc.desc: Test for adding a relative conic curve to a path with normal parameters.
1095  * @tc.size  : SmallTest
1096  * @tc.type  : Function
1097  * @tc.level : Level 0
1098  */
HWTEST_F(DrawingNativePathTest, testPathRConicToNormal, TestSize.Level0)1099 HWTEST_F(DrawingNativePathTest, testPathRConicToNormal, TestSize.Level0) {
1100     // 1. Create a path object by calling OH_Drawing_PathCreate
1101     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1102     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1103     OH_Drawing_PathMoveTo(path, 0, 0);
1104     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1105     OH_Drawing_PathLineTo(path, 100, 100);
1106     // 4. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
1107     OH_Drawing_PathRMoveTo(path, 100, 100);
1108     // 5. Add a relative conic curve to the path from the current endpoint to the target point by calling
1109     // OH_Drawing_PathRConicTo
1110     OH_Drawing_PathRConicTo(path, 100, 100, 100, 300, 5);
1111     // 6. Free memory by calling OH_Drawing_PathDestroy
1112     OH_Drawing_PathDestroy(path);
1113 }
1114 
1115 /*
1116  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1301
1117  * @tc.name: testPathRConicToNull
1118  * @tc.desc: Test for adding a relative conic curve to a path with NULL or invalid parameters.
1119  * @tc.size  : SmallTest
1120  * @tc.type  : Function
1121  * @tc.level : Level 3
1122  */
HWTEST_F(DrawingNativePathTest, testPathRConicToNull, TestSize.Level3)1123 HWTEST_F(DrawingNativePathTest, testPathRConicToNull, TestSize.Level3) {
1124     // 1. Create a path object by calling OH_Drawing_PathCreate
1125     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1126     // 2. Call OH_Drawing_PathRConicTo with nullptr as the first parameter, expecting OH_DRAWING_ERROR_INVALID_PARAMETER
1127     // error code
1128     OH_Drawing_PathRConicTo(nullptr, 100, 100, 100, 300, 5);
1129     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
1130     // 3. Call OH_Drawing_PathRConicTo with 0.00 as the second parameter, no crash
1131     OH_Drawing_PathRConicTo(path, 0.00, 100, 100, 300, 5);
1132     // 4. Call OH_Drawing_PathRConicTo with 0.00 as the third parameter, no crash
1133     OH_Drawing_PathRConicTo(path, 100, 0.00, 100, 300, 5);
1134     // 5. Call OH_Drawing_PathRConicTo with 0.00 as the fourth parameter, no crash
1135     OH_Drawing_PathRConicTo(path, 100, 100, 0.00, 300, 5);
1136     // 6. Call OH_Drawing_PathRConicTo with 0.00 as the fifth parameter, no crash
1137     OH_Drawing_PathRConicTo(path, 100, 100, 100, 0.00, 5);
1138     // 7. Call OH_Drawing_PathRConicTo with 0.00 as the sixth parameter, no crash
1139     OH_Drawing_PathRConicTo(path, 100, 100, 100, 300, 0.00);
1140     // 8. Free memory by calling OH_Drawing_PathDestroy
1141     OH_Drawing_PathDestroy(path);
1142 }
1143 
1144 /*
1145  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1302
1146  * @tc.name: testPathRConicToAbnormal
1147  * @tc.desc: Test for adding a relative conic curve to a path with abnormal data types as parameters.
1148  * @tc.size  : SmallTest
1149  * @tc.type  : Function
1150  * @tc.level : Level 3
1151  */
HWTEST_F(DrawingNativePathTest, testPathRConicToAbnormal, TestSize.Level3)1152 HWTEST_F(DrawingNativePathTest, testPathRConicToAbnormal, TestSize.Level3) {
1153     // 1. Create a path object by calling OH_Drawing_PathCreate
1154     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1155     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1156     OH_Drawing_PathMoveTo(path, 0, 0);
1157     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1158     OH_Drawing_PathLineTo(path, 100.0f, 100.0f);
1159     // 4. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
1160     OH_Drawing_PathRMoveTo(path, 100, 100);
1161     // 5. Call OH_Drawing_PathRConicTo with an integer as the second parameter
1162     OH_Drawing_PathRConicTo(path, 100, 100.0f, 100.0f, 300.0f, 5.0f);
1163     // 6. Call OH_Drawing_PathRConicTo with an integer as the third parameter
1164     OH_Drawing_PathRConicTo(path, 100.0f, 100, 100.0f, 300.0f, 5.0f);
1165     // 7. Call OH_Drawing_PathRConicTo with an integer as the fourth parameter
1166     OH_Drawing_PathRConicTo(path, 100.0f, 100.0f, 100, 300.0f, 5.0f);
1167     // 8. Call OH_Drawing_PathRConicTo with an integer as the fifth parameter
1168     OH_Drawing_PathRConicTo(path, 100.0f, 100.0f, 100.0f, 300, 5.0f);
1169     // 9. Call OH_Drawing_PathRConicTo with an integer as the sixth parameter
1170     OH_Drawing_PathRConicTo(path, 100.0f, 100.0f, 100.0f, 300.0f, 5);
1171     // 10. Free memory by calling OH_Drawing_PathDestroy
1172     OH_Drawing_PathDestroy(path);
1173 }
1174 
1175 /*
1176  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1303
1177  * @tc.name: testPathRConicToMaximal
1178  * @tc.desc: Test for adding a relative conic curve to a path with maximal values as parameters.
1179  * @tc.size  : SmallTest
1180  * @tc.type  : Function
1181  * @tc.level : Level 3
1182  */
HWTEST_F(DrawingNativePathTest, testPathRConicToMaximal, TestSize.Level3)1183 HWTEST_F(DrawingNativePathTest, testPathRConicToMaximal, TestSize.Level3) {
1184     // 1. Create a path object by calling OH_Drawing_PathCreate
1185     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1186     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1187     OH_Drawing_PathMoveTo(path, 0, 0);
1188     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1189     OH_Drawing_PathLineTo(path, 100, 100);
1190     // 4. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
1191     OH_Drawing_PathRMoveTo(path, 100, 100);
1192     // 5. Call OH_Drawing_PathRConicTo with a second parameter of FLT_MAX + 1, no crash
1193     OH_Drawing_PathRConicTo(path, FLT_MAX + 1, 100, 100, 300, 5);
1194     // 6. Call OH_Drawing_PathRConicTo with a third parameter of FLT_MAX + 1, no crash
1195     OH_Drawing_PathRConicTo(path, 100, FLT_MAX + 1, 100, 300, 5);
1196     // 7. Call OH_Drawing_PathRConicTo with a fourth parameter of FLT_MAX + 1, no crash
1197     OH_Drawing_PathRConicTo(path, 100, 100, FLT_MAX + 1, 300, 5);
1198     // 8. Call OH_Drawing_PathRConicTo with a fifth parameter of FLT_MAX + 1, no crash
1199     OH_Drawing_PathRConicTo(path, 100, 100, 100, FLT_MAX + 1, 5);
1200     // 9. Call OH_Drawing_PathRConicTo with a sixth parameter of FLT_MAX + 1, no crash
1201     OH_Drawing_PathRConicTo(path, 100, 100, 100, 300, FLT_MAX + 1);
1202     // 10. Free memory by calling OH_Drawing_PathDestroy
1203     OH_Drawing_PathDestroy(path);
1204 }
1205 
1206 /*
1207  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1400
1208  * @tc.name: testPathRCubicToNormal
1209  * @tc.desc: Test for adding a relative cubic Bezier curve to a path with normal parameters.
1210  * @tc.size  : SmallTest
1211  * @tc.type  : Function
1212  * @tc.level : Level 0
1213  */
HWTEST_F(DrawingNativePathTest, testPathRCubicToNormal, TestSize.Level0)1214 HWTEST_F(DrawingNativePathTest, testPathRCubicToNormal, TestSize.Level0) {
1215     // 1. Create a path object by calling OH_Drawing_PathCreate
1216     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1217     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1218     OH_Drawing_PathMoveTo(path, 0, 0);
1219     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1220     OH_Drawing_PathLineTo(path, 100, 100);
1221     // 4. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
1222     OH_Drawing_PathRMoveTo(path, 100, 100);
1223     // 5. Add a relative cubic Bezier curve to the path from the current endpoint to the target point by calling
1224     // OH_Drawing_PathRCubicTo
1225     OH_Drawing_PathRCubicTo(path, 100, 100, 200, 200, 300, 300);
1226     // 6. Free memory by calling OH_Drawing_PathDestroy
1227     OH_Drawing_PathDestroy(path);
1228 }
1229 
1230 /*
1231  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1401
1232  * @tc.name: testPathRCubicToNull
1233  * @tc.desc: Test for adding a relative cubic Bezier curve to a path with NULL or invalid parameters.
1234  * @tc.size  : SmallTest
1235  * @tc.type  : Function
1236  * @tc.level : Level 3
1237  */
HWTEST_F(DrawingNativePathTest, testPathRCubicToNull, TestSize.Level3)1238 HWTEST_F(DrawingNativePathTest, testPathRCubicToNull, TestSize.Level3) {
1239     // 1. Create a path object by calling OH_Drawing_PathCreate
1240     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1241     // 2. Call OH_Drawing_PathRCubicTo with nullptr as the first parameter, expecting OH_DRAWING_ERROR_INVALID_PARAMETER
1242     // error code
1243     OH_Drawing_PathRCubicTo(nullptr, 100, 100, 200, 200, 300, 300);
1244     // 3. Call OH_Drawing_PathRCubicTo with 0.00 as the second parameter, no crash
1245     OH_Drawing_PathRCubicTo(path, 0.00, 100, 200, 200, 300, 300);
1246     // 4. Call OH_Drawing_PathRCubicTo with 0.00 as the third parameter, no crash
1247     OH_Drawing_PathRCubicTo(path, 100, 0.00, 200, 200, 300, 300);
1248     // 5. Call OH_Drawing_PathRCubicTo with 0.00 as the fourth parameter, no crash
1249     OH_Drawing_PathRCubicTo(path, 100, 100, 0.00, 200, 300, 300);
1250     // 6. Call OH_Drawing_PathRCubicTo with 0.00 as the fifth parameter, no crash
1251     OH_Drawing_PathRCubicTo(path, 100, 100, 200, 0.00, 300, 300);
1252     // 7. Call OH_Drawing_PathRCubicTo with 0.00 as the sixth parameter, no crash
1253     OH_Drawing_PathRCubicTo(path, 100, 100, 200, 200, 0.00, 300);
1254     // 8. Call OH_Drawing_PathRCubicTo with 0.00 as the seventh parameter, no crash
1255     OH_Drawing_PathRCubicTo(path, 100, 100, 200, 200, 300, 0.00);
1256     // 9. Free memory by calling OH_Drawing_PathDestroy
1257     OH_Drawing_PathDestroy(path);
1258 }
1259 
1260 /*
1261  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1402
1262  * @tc.name: testPathRCubicToAbnormal
1263  * @tc.desc: Test for adding a relative cubic Bezier curve to a path with abnormal data types as parameters.
1264  * @tc.size  : SmallTest
1265  * @tc.type  : Function
1266  * @tc.level : Level 3
1267  */
HWTEST_F(DrawingNativePathTest, testPathRCubicToAbnormal, TestSize.Level3)1268 HWTEST_F(DrawingNativePathTest, testPathRCubicToAbnormal, TestSize.Level3) {
1269     // 1. Create a path object by calling OH_Drawing_PathCreate
1270     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1271     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1272     OH_Drawing_PathMoveTo(path, 0, 0);
1273     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1274     OH_Drawing_PathLineTo(path, 100.0f, 100.0f);
1275     // 4. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
1276     OH_Drawing_PathRMoveTo(path, 100, 100);
1277     // 5. Call OH_Drawing_PathRCubicTo with an integer as the second parameter
1278     OH_Drawing_PathRCubicTo(path, 100, 100.0f, 200.0f, 200.0f, 300.0f, 300.0f);
1279     // 6. Call OH_Drawing_PathRCubicTo with an integer as the third parameter
1280     OH_Drawing_PathRCubicTo(path, 100.0f, 100, 200.0f, 200.0f, 300.0f, 300.0f);
1281     // 7. Call OH_Drawing_PathRCubicTo with an integer as the fourth parameter
1282     OH_Drawing_PathRCubicTo(path, 100.0f, 100.0f, 200, 200.0f, 300.0f, 300.0f);
1283     // 8. Call OH_Drawing_PathRCubicTo with an integer as the fifth parameter
1284     OH_Drawing_PathRCubicTo(path, 100.0f, 100.0f, 200.0f, 200, 300.0f, 300.0f);
1285     // 9. Call OH_Drawing_PathRCubicTo with an integer as the sixth parameter
1286     OH_Drawing_PathRCubicTo(path, 100.0f, 100.0f, 200.0f, 200.0f, 300, 300.0f);
1287     // 10. Call OH_Drawing_PathRCubicTo with an integer as the seventh parameter
1288     OH_Drawing_PathRCubicTo(path, 100.0f, 100.0f, 200.0f, 200.0f, 300.0f, 300);
1289     // 11. Free memory
1290     OH_Drawing_PathDestroy(path);
1291 }
1292 
1293 /*
1294  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1403
1295  * @tc.name: testPathRCubicToMaximal
1296  * @tc.desc: Test for adding a relative cubic Bezier curve to a path with maximal values as parameters.
1297  * @tc.size  : SmallTest
1298  * @tc.type  : Function
1299  * @tc.level : Level 3
1300  */
HWTEST_F(DrawingNativePathTest, testPathRCubicToMaximal, TestSize.Level3)1301 HWTEST_F(DrawingNativePathTest, testPathRCubicToMaximal, TestSize.Level3) {
1302     // 1. Create a path object by calling OH_Drawing_PathCreate
1303     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1304     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1305     OH_Drawing_PathMoveTo(path, 0, 0);
1306     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1307     OH_Drawing_PathLineTo(path, 100, 100);
1308     // 4. Set a relative move to the path starting from the current endpoint by calling OH_Drawing_PathRMoveTo
1309     OH_Drawing_PathRMoveTo(path, 100, 100);
1310     // 5. Call OH_Drawing_PathRCubicTo with the second parameter as the maximum value FLT_MAX+1, no crash
1311     OH_Drawing_PathRCubicTo(path, FLT_MAX + 1, 100, 200, 200, 300, 300);
1312     // 6. Call OH_Drawing_PathRCubicTo with the third parameter as the maximum value FLT_MAX+1, no crash
1313     OH_Drawing_PathRCubicTo(path, 100, FLT_MAX + 1, 200, 200, 300, 300);
1314     // 7. Call OH_Drawing_PathRCubicTo with the fourth parameter as the maximum value FLT_MAX+1, no crash
1315     OH_Drawing_PathRCubicTo(path, 100, 100, FLT_MAX + 1, 200, 300, 300);
1316     // 8. Call OH_Drawing_PathRCubicTo with the fifth parameter as the maximum value FLT_MAX+1, no crash
1317     OH_Drawing_PathRCubicTo(path, 100, 100, 200, FLT_MAX + 1, 300, 300);
1318     // 9. Call OH_Drawing_PathRCubicTo with the sixth parameter as the maximum value FLT_MAX+1, no crash
1319     OH_Drawing_PathRCubicTo(path, 100, 100, 200, 200, FLT_MAX + 1, 300);
1320     // 10. Call OH_Drawing_PathRCubicTo with the seventh parameter as the maximum value FLT_MAX+1, no crash
1321     OH_Drawing_PathRCubicTo(path, 100, 100, 200, 200, 300, FLT_MAX + 1);
1322     // 11. Free memory
1323     OH_Drawing_PathDestroy(path);
1324 }
1325 
1326 /*
1327  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1500
1328  * @tc.name: testPathAddRectNormal
1329  * @tc.desc: Test for adding a rectangle to a path with normal parameters.
1330  * @tc.size  : SmallTest
1331  * @tc.type  : Function
1332  * @tc.level : Level 0
1333  */
HWTEST_F(DrawingNativePathTest, testPathAddRectNormal, TestSize.Level0)1334 HWTEST_F(DrawingNativePathTest, testPathAddRectNormal, TestSize.Level0) {
1335     // 1. Create a path object by calling OH_Drawing_PathCreate
1336     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1337     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1338     OH_Drawing_PathMoveTo(path, 0, 0);
1339     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1340     OH_Drawing_PathLineTo(path, 100, 100);
1341     // 4. Add a rectangle outline to the path with the specified direction by calling OH_Drawing_PathAddRect. Iterate
1342     // through the enum to call this interface.
1343     OH_Drawing_PathAddRect(path, 100, 100, 200, 200, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1344     // 5. Free memory
1345     OH_Drawing_PathDestroy(path);
1346 }
1347 
1348 /*
1349  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1501
1350  * @tc.name: testPathAddRectNull
1351  * @tc.desc: Test for adding a rectangle to a path with NULL or invalid parameters.
1352  * @tc.size  : SmallTest
1353  * @tc.type  : Function
1354  * @tc.level : Level 3
1355  */
HWTEST_F(DrawingNativePathTest, testPathAddRectNull, TestSize.Level3)1356 HWTEST_F(DrawingNativePathTest, testPathAddRectNull, TestSize.Level3) {
1357     // 1. Create a path object by calling OH_Drawing_PathCreate
1358     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1359     // 2. Call OH_Drawing_PathAddRect with the first parameter as nullptr, expect OH_DRAWING_ERROR_INVALID_PARAMETER
1360     OH_Drawing_PathAddRect(nullptr, 100, 100, 200, 200, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1361     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
1362     // 3. Call OH_Drawing_PathAddRect with 0.00 as the second parameter, no crash
1363     OH_Drawing_PathAddRect(path, 0.00, 100, 200, 200, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1364     // 4. Call OH_Drawing_PathAddRect with 0.00 as the third parameter, no crash
1365     OH_Drawing_PathAddRect(path, 100, 0.00, 200, 200, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1366     // 5. Call OH_Drawing_PathAddRect with 0.00 as the fourth parameter, no crash
1367     OH_Drawing_PathAddRect(path, 100, 100, 0.00, 200, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1368     // 6. Call OH_Drawing_PathAddRect with 0.00 as the fifth parameter, no crash
1369     OH_Drawing_PathAddRect(path, 100, 100, 200, 0.00, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1370     // 7. Free memory
1371     OH_Drawing_PathDestroy(path);
1372 }
1373 
1374 /*
1375  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1502
1376  * @tc.name: testPathAddRectAbnormal
1377  * @tc.desc: Test for adding a rectangle to a path with abnormal data types as parameters.
1378  * @tc.size  : SmallTest
1379  * @tc.type  : Function
1380  * @tc.level : Level 3
1381  */
HWTEST_F(DrawingNativePathTest, testPathAddRectAbnormal, TestSize.Level3)1382 HWTEST_F(DrawingNativePathTest, testPathAddRectAbnormal, TestSize.Level3) {
1383     // 1. Create a path object by calling OH_Drawing_PathCreate
1384     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1385     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1386     OH_Drawing_PathMoveTo(path, 0, 0);
1387     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1388     OH_Drawing_PathLineTo(path, 100.0f, 100.0f);
1389     // 4. Call OH_Drawing_PathAddRect with an integer as the second parameter
1390     OH_Drawing_PathAddRect(path, 100, 100.0f, 200.0f, 200.0f, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1391     // 5. Call OH_Drawing_PathAddRect with an integer as the third parameter
1392     OH_Drawing_PathAddRect(path, 100.0f, 100, 200.0f, 200.0f, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1393     // 6. Call OH_Drawing_PathAddRect with an integer as the fourth parameter
1394     OH_Drawing_PathAddRect(path, 100.0f, 100.0f, 200, 200.0f, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1395     // 7. Call OH_Drawing_PathAddRect with an integer as the fifth parameter
1396     OH_Drawing_PathAddRect(path, 100.0f, 100.0f, 200.0f, 200, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1397     // 8. Free memory
1398     OH_Drawing_PathDestroy(path);
1399 }
1400 
1401 /*
1402  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1503
1403  * @tc.name: testPathAddRectMaximal
1404  * @tc.desc: Test for adding a rectangle to a path with maximal values as parameters.
1405  * @tc.size  : SmallTest
1406  * @tc.type  : Function
1407  * @tc.level : Level 3
1408  */
HWTEST_F(DrawingNativePathTest, testPathAddRectMaximal, TestSize.Level3)1409 HWTEST_F(DrawingNativePathTest, testPathAddRectMaximal, TestSize.Level3) {
1410     // 1. Create a path object by calling OH_Drawing_PathCreate
1411     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1412     // 2. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1413     OH_Drawing_PathMoveTo(path, 0, 0);
1414     // 3. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1415     OH_Drawing_PathLineTo(path, 100, 100);
1416     // 4. Call OH_Drawing_PathAddRect with the second parameter as the maximum value FLT_MAX+1, no crash
1417     OH_Drawing_PathAddRect(path, FLT_MAX + 1, 100, 200, 200, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1418     // 5. Call OH_Drawing_PathAddRect with the third parameter as the maximum value FLT_MAX+1, no crash
1419     OH_Drawing_PathAddRect(path, 100, FLT_MAX + 1, 200, 200, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1420     // 6. Call OH_Drawing_PathAddRect with the fourth parameter as the maximum value FLT_MAX+1, no crash
1421     OH_Drawing_PathAddRect(path, 100, 100, FLT_MAX + 1, 200, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1422     // 7. Call OH_Drawing_PathAddRect with the fifth parameter as the maximum value FLT_MAX+1, no crash
1423     OH_Drawing_PathAddRect(path, 100, 100, 200, FLT_MAX + 1, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1424     // 8. Free memory
1425     OH_Drawing_PathDestroy(path);
1426 }
1427 
1428 /*
1429  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1600
1430  * @tc.name: testPathAddRectWithInitialCornerNormal
1431  * @tc.desc: Test for adding a rectangle to a path with initial corner and normal parameters.
1432  * @tc.size  : SmallTest
1433  * @tc.type  : Function
1434  * @tc.level : Level 0
1435  */
HWTEST_F(DrawingNativePathTest, testPathAddRectWithInitialCornerNormal, TestSize.Level0)1436 HWTEST_F(DrawingNativePathTest, testPathAddRectWithInitialCornerNormal, TestSize.Level0) {
1437     // 1. Create a path object by calling OH_Drawing_PathCreate
1438     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1439     // 2. Create a rectangle object by calling OH_Drawing_RectCreate
1440     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(100, 100, 200, 200);
1441     // 3. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1442     OH_Drawing_PathMoveTo(path, 0, 0);
1443     // 4. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1444     OH_Drawing_PathLineTo(path, 100, 100);
1445     // 5. Add a rectangle outline to the path with the specified direction by calling
1446     // OH_Drawing_PathAddRectWithInitialCorner. Iterate through the enum to call this interface.
1447     OH_Drawing_PathAddRectWithInitialCorner(path, rect, OH_Drawing_PathDirection::PATH_DIRECTION_CW, 0);
1448     // 6. Free memory
1449     OH_Drawing_PathDestroy(path);
1450     OH_Drawing_RectDestroy(rect);
1451 }
1452 
1453 /*
1454  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1601
1455  * @tc.name: testPathAddRectWithInitialCornerNull
1456  * @tc.desc: Test for adding a rectangle to a path with initial corner and NULL or invalid parameters.
1457  * @tc.size  : SmallTest
1458  * @tc.type  : Function
1459  * @tc.level : Level 3
1460  */
HWTEST_F(DrawingNativePathTest, testPathAddRectWithInitialCornerNull, TestSize.Level3)1461 HWTEST_F(DrawingNativePathTest, testPathAddRectWithInitialCornerNull, TestSize.Level3) {
1462     // 1. Create a path object by calling OH_Drawing_PathCreate
1463     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1464     // 2. Create a rectangle object by calling OH_Drawing_RectCreate
1465     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(100, 100, 200, 200);
1466     // 3. Call OH_Drawing_PathAddRectWithInitialCorner with the first parameter as nullptr, expect
1467     // OH_DRAWING_ERROR_INVALID_PARAMETER
1468     OH_Drawing_PathAddRectWithInitialCorner(nullptr, rect, OH_Drawing_PathDirection::PATH_DIRECTION_CW, 0);
1469     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
1470     // 4. Call OH_Drawing_PathAddRectWithInitialCorner with the second parameter as nullptr, expect
1471     // OH_DRAWING_ERROR_INVALID_PARAMETER
1472     OH_Drawing_PathAddRectWithInitialCorner(path, nullptr, OH_Drawing_PathDirection::PATH_DIRECTION_CW, 0);
1473     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
1474     // 5. Call OH_Drawing_PathAddRectWithInitialCorner with the fourth parameter as 0
1475     OH_Drawing_PathAddRectWithInitialCorner(path, rect, OH_Drawing_PathDirection::PATH_DIRECTION_CW, 0);
1476     // 6. Free memory
1477     OH_Drawing_PathDestroy(path);
1478     OH_Drawing_RectDestroy(rect);
1479 }
1480 
1481 /*
1482  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1602
1483  * @tc.name: testPathAddRectWithInitialCornerAbnormal
1484  * @tc.desc: Test for adding a rectangle to a path with initial corner and abnormal data types as parameters.
1485  * @tc.size  : SmallTest
1486  * @tc.type  : Function
1487  * @tc.level : Level 3
1488  */
HWTEST_F(DrawingNativePathTest, testPathAddRectWithInitialCornerAbnormal, TestSize.Level3)1489 HWTEST_F(DrawingNativePathTest, testPathAddRectWithInitialCornerAbnormal, TestSize.Level3) {
1490     // 1. Create a path object by calling OH_Drawing_PathCreate
1491     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1492     // 2. Create a rectangle object by calling OH_Drawing_RectCreate
1493     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(100, 100, 200, 200);
1494     // 3. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1495     OH_Drawing_PathMoveTo(path, 0, 0);
1496     // 4. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1497     OH_Drawing_PathLineTo(path, 100.0f, 100.0f);
1498     // 5. Call OH_Drawing_PathAddRectWithInitialCorner with the fourth parameter as a float or a character
1499     OH_Drawing_PathAddRectWithInitialCorner(path, rect, OH_Drawing_PathDirection::PATH_DIRECTION_CW, 5.0f);
1500     // 6. Free memory
1501     OH_Drawing_PathDestroy(path);
1502     OH_Drawing_RectDestroy(rect);
1503 }
1504 
1505 /*
1506  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1603
1507  * @tc.name: testPathAddRectWithInitialCornerMaximal
1508  * @tc.desc: Test for adding a rectangle to a path with initial corner and maximal values as parameters.
1509  * @tc.size  : SmallTest
1510  * @tc.type  : Function
1511  * @tc.level : Level 3
1512  */
HWTEST_F(DrawingNativePathTest, testPathAddRectWithInitialCornerMaximal, TestSize.Level3)1513 HWTEST_F(DrawingNativePathTest, testPathAddRectWithInitialCornerMaximal, TestSize.Level3) {
1514     // 1. Create a path object by calling OH_Drawing_PathCreate
1515     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1516     // 2. Create a rectangle object by calling OH_Drawing_RectCreate
1517     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(100, 100, 200, 200);
1518     // 3. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1519     OH_Drawing_PathMoveTo(path, 0, 0);
1520     // 4. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1521     OH_Drawing_PathLineTo(path, 100, 100);
1522     // 5. Call OH_Drawing_PathAddRectWithInitialCorner with the fourth parameter as the maximum value INT32_MAX, no
1523     // crash
1524     OH_Drawing_PathAddRectWithInitialCorner(path, rect, OH_Drawing_PathDirection::PATH_DIRECTION_CW, INT32_MAX);
1525     // 6. Free memory
1526     OH_Drawing_PathDestroy(path);
1527 }
1528 
1529 /*
1530  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1700
1531  * @tc.name: testPathAddRoundRectNormal
1532  * @tc.desc: Test for adding a round rectangle to a path with normal parameters.
1533  * @tc.size  : SmallTest
1534  * @tc.type  : Function
1535  * @tc.level : Level 0
1536  */
HWTEST_F(DrawingNativePathTest, testPathAddRoundRectNormal, TestSize.Level0)1537 HWTEST_F(DrawingNativePathTest, testPathAddRoundRectNormal, TestSize.Level0) {
1538     // 1. Create a path object by calling OH_Drawing_PathCreate
1539     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1540     // 2. Create a rounded rectangle object by calling OH_Drawing_RoundRectCreate
1541     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(100, 100, 200, 200);
1542     OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 20, 20);
1543     // 3. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1544     OH_Drawing_PathMoveTo(path, 0, 0);
1545     // 4. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1546     OH_Drawing_PathLineTo(path, 100, 100);
1547     // 5. Add the rounded rectangle outline to the path with the specified direction by calling
1548     // OH_Drawing_PathAddRoundRect. Iterate through the enum to call this interface.
1549     OH_Drawing_PathDirection directions[] = {
1550         PATH_DIRECTION_CW,
1551         PATH_DIRECTION_CCW,
1552     };
1553     for (int i = 0; i < sizeof(directions) / sizeof(directions[0]); i++) {
1554         OH_Drawing_PathAddRoundRect(path, roundRect, directions[i]);
1555     }
1556     // 6. Free memory
1557     OH_Drawing_PathDestroy(path);
1558     OH_Drawing_RoundRectDestroy(roundRect);
1559     OH_Drawing_RectDestroy(rect);
1560 }
1561 
1562 /*
1563  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1701
1564  * @tc.name: testPathAddRoundRectNull
1565  * @tc.desc: Test for adding a round rectangle to a path with NULL or invalid parameters.
1566  * @tc.size  : SmallTest
1567  * @tc.type  : Function
1568  * @tc.level : Level 3
1569  */
HWTEST_F(DrawingNativePathTest, testPathAddRoundRectNull, TestSize.Level3)1570 HWTEST_F(DrawingNativePathTest, testPathAddRoundRectNull, TestSize.Level3) {
1571     // 1. Create a path object by calling OH_Drawing_PathCreate
1572     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1573     // 2. Create a rounded rectangle object by calling OH_Drawing_RoundRectCreate
1574     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(100, 100, 200, 200);
1575     OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 20, 20);
1576     // 3. Call OH_Drawing_PathAddRoundRect with the first parameter as nullptr, expect
1577     // OH_DRAWING_ERROR_INVALID_PARAMETER
1578     OH_Drawing_PathAddRoundRect(nullptr, roundRect, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1579     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
1580     // 4. Call OH_Drawing_PathAddRoundRect with the second parameter as nullptr, expect
1581     // OH_DRAWING_ERROR_INVALID_PARAMETER
1582     OH_Drawing_PathAddRoundRect(path, nullptr, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1583     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
1584     // 5. Free memory
1585     OH_Drawing_PathDestroy(path);
1586     OH_Drawing_RoundRectDestroy(roundRect);
1587     OH_Drawing_RectDestroy(rect);
1588 }
1589 
1590 /*
1591  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1800
1592  * @tc.name: testPathAddOvalWithInitialPointNormal
1593  * @tc.desc: Test for adding an oval to a path with initial point and normal parameters.
1594  * @tc.size  : SmallTest
1595  * @tc.type  : Function
1596  * @tc.level : Level 0
1597  */
HWTEST_F(DrawingNativePathTest, testPathAddOvalWithInitialPointNormal, TestSize.Level0)1598 HWTEST_F(DrawingNativePathTest, testPathAddOvalWithInitialPointNormal, TestSize.Level0) {
1599     // 1. Create a path object by calling OH_Drawing_PathCreate
1600     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1601     // 2. Create a rectangle object by calling OH_Drawing_RectCreate
1602     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(100, 100, 200, 200);
1603     // 3. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1604     OH_Drawing_PathMoveTo(path, 0, 0);
1605     // 4. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1606     OH_Drawing_PathLineTo(path, 100, 100);
1607     // 5. Add an oval to the path, where the rectangle object is the bounding rectangle of the oval. Iterate through the
1608     // enum to call this interface.
1609     OH_Drawing_PathDirection directions[] = {
1610         PATH_DIRECTION_CW,
1611         PATH_DIRECTION_CCW,
1612     };
1613     for (int i = 0; i < sizeof(directions) / sizeof(directions[0]); i++) {
1614         OH_Drawing_PathAddOvalWithInitialPoint(path, rect, 10, directions[i]);
1615     }
1616     // 6. Free memory
1617     OH_Drawing_PathDestroy(path);
1618     OH_Drawing_RectDestroy(rect);
1619 }
1620 
1621 /*
1622  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1801
1623  * @tc.name: testPathAddOvalWithInitialPointNull
1624  * @tc.desc: Test for adding an oval to a path with initial point and NULL or invalid parameters.
1625  * @tc.size  : SmallTest
1626  * @tc.type  : Function
1627  * @tc.level : Level 3
1628  */
HWTEST_F(DrawingNativePathTest, testPathAddOvalWithInitialPointNull, TestSize.Level3)1629 HWTEST_F(DrawingNativePathTest, testPathAddOvalWithInitialPointNull, TestSize.Level3) {
1630     // 1. Create a path object by calling OH_Drawing_PathCreate
1631     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1632     // 2. Create a rectangle object by calling OH_Drawing_RectCreate
1633     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(100, 100, 200, 200);
1634     // 3. Call OH_Drawing_PathAddOvalWithInitialPoint with the first parameter as nullptr, expect
1635     // OH_DRAWING_ERROR_INVALID_PARAMETER
1636     OH_Drawing_PathAddOvalWithInitialPoint(nullptr, rect, 10, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1637     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
1638     // 4. Call OH_Drawing_PathAddOvalWithInitialPoint with the second parameter as nullptr, expect
1639     // OH_DRAWING_ERROR_INVALID_PARAMETER
1640     OH_Drawing_PathAddOvalWithInitialPoint(path, nullptr, 10, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1641     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
1642     // 5. Call OH_Drawing_PathAddOvalWithInitialPoint with the third parameter as 0, no crash
1643     OH_Drawing_PathAddOvalWithInitialPoint(path, rect, 0, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1644     // 6. Free memory
1645     OH_Drawing_PathDestroy(path);
1646     OH_Drawing_RectDestroy(rect);
1647 }
1648 
1649 /*
1650  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1802
1651  * @tc.name: testPathAddOvalWithInitialPointAbnormal
1652  * @tc.desc: Test for adding an oval to a path with initial point and abnormal data types as parameters.
1653  * @tc.size  : SmallTest
1654  * @tc.type  : Function
1655  * @tc.level : Level 3
1656  */
HWTEST_F(DrawingNativePathTest, testPathAddOvalWithInitialPointAbnormal, TestSize.Level3)1657 HWTEST_F(DrawingNativePathTest, testPathAddOvalWithInitialPointAbnormal, TestSize.Level3) {
1658     // 1. Create a path object by calling OH_Drawing_PathCreate
1659     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1660     // 2. Create a rectangle object by calling OH_Drawing_RectCreate
1661     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(100, 100, 200, 200);
1662     // 3. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1663     OH_Drawing_PathMoveTo(path, 0, 0);
1664     // 4. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1665     OH_Drawing_PathLineTo(path, 100.0f, 100.0f);
1666     // 5. Call OH_Drawing_PathAddOvalWithInitialPoint with the third parameter as a float or a character
1667     OH_Drawing_PathAddOvalWithInitialPoint(path, rect, 5.0f, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1668     // 6. Free memory
1669     OH_Drawing_PathDestroy(path);
1670     OH_Drawing_RectDestroy(rect);
1671 }
1672 
1673 /*
1674  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_1803
1675  * @tc.name: testPathAddOvalWithInitialPointMaximal
1676  * @tc.desc: Test for adding an oval to a path with initial point and maximal values as parameters.
1677  * @tc.size  : SmallTest
1678  * @tc.type  : Function
1679  * @tc.level : Level 3
1680  */
HWTEST_F(DrawingNativePathTest, testPathAddOvalWithInitialPointMaximal, TestSize.Level3)1681 HWTEST_F(DrawingNativePathTest, testPathAddOvalWithInitialPointMaximal, TestSize.Level3) {
1682     // 1. Create a path object by calling OH_Drawing_PathCreate
1683     OH_Drawing_Path *path = OH_Drawing_PathCreate();
1684     // 2. Create a rectangle object by calling OH_Drawing_RectCreate
1685     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(100, 100, 200, 200);
1686     // 3. Set the starting point of the path by calling OH_Drawing_PathMoveTo
1687     OH_Drawing_PathMoveTo(path, 0, 0);
1688     // 4. Add a line segment from the starting point of the path to the target point by calling OH_Drawing_PathLineTo
1689     OH_Drawing_PathLineTo(path, 100, 100);
1690     // 5. Call OH_Drawing_PathAddOvalWithInitialPoint with the third parameter as the maximum value UINT32_MAX + 1, no
1691     // crash
1692     OH_Drawing_PathAddOvalWithInitialPoint(path, rect, UINT32_MAX + 1, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
1693     // 6. Free memory
1694     OH_Drawing_PathDestroy(path);
1695     OH_Drawing_RectDestroy(rect);
1696 }
1697 
1698 } // namespace Drawing
1699 } // namespace Rosen
1700 } // namespace OHOS