• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "drawing_color.h"
17 #include "drawing_color_filter.h"
18 #include "drawing_filter.h"
19 #include "drawing_image.h"
20 #include "drawing_matrix.h"
21 #include "drawing_path.h"
22 #include "drawing_path_effect.h"
23 #include "drawing_pen.h"
24 #include "drawing_point.h"
25 #include "drawing_rect.h"
26 #include "drawing_region.h"
27 #include "drawing_round_rect.h"
28 #include "utils/scalar.h"
29 #include "gtest/gtest.h"
30 
31 using namespace testing;
32 using namespace testing::ext;
33 
34 namespace OHOS {
35 namespace Rosen {
36 namespace Drawing {
37 class DrawingNativePathEffectTest : public testing::Test {
38     protected:
39     // 在每个测试用例执行前调用
SetUp()40     void SetUp() override
41     {
42         // 设置代码
43         std::cout << "DrawingNativePathEffectTest Setup code called before each test case." << std::endl;
44         OH_Drawing_ErrorCodeReset();
45         std::cout << "DrawingNativePathEffectTest errorCodeReset before each test case." << std::endl;
46     }
TearDown()47     void TearDown() override
48     {
49         std::cout << "DrawingNativePathEffectTest Setup code called after each test case." << std::endl;
50         OH_Drawing_ErrorCodeReset();
51         std::cout << "DrawingNativePathEffectTest errorCodeReset after each test case." << std::endl;
52     }
53 };
54 
55 /*
56  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0100
57  * @tc.name: testCreateDashPathEffectNormal
58  * @tc.desc: test for testCreateDashPathEffectNormal.
59  * @tc.size  : SmallTest
60  * @tc.type  : Function
61  * @tc.level : Level 0
62  */
63 HWTEST_F(DrawingNativePathEffectTest, testCreateDashPathEffectNormal, TestSize.Level0) {
64     // 1. OH_Drawing_CreateDashPathEffect
65     float intervals[] = {1, 1, 1};
66     OH_Drawing_PathEffect *pathEffect = OH_Drawing_CreateDashPathEffect(intervals, 3, 0.0);
67     // add assert
68     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_SUCCESS);
69     // add assert
70     EXPECT_NE(pathEffect, nullptr);
71     // 2. Free memory
72     OH_Drawing_PathEffectDestroy(pathEffect);
73 }
74 
75 /*
76  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0101
77  * @tc.name: testCreateDashPathEffectNull
78  * @tc.desc: test for testCreateDashPathEffectNull.
79  * @tc.size  : SmallTest
80  * @tc.type  : Function
81  * @tc.level : Level 3
82  */
83 HWTEST_F(DrawingNativePathEffectTest, testCreateDashPathEffectNull, TestSize.Level3) {
84     float intervals[] = {1, 1};
85     // 1. OH_Drawing_CreateDashPathEffect with nullptr as the first parameter, check the error code with
86     // OH_Drawing_ErrorCodeGet
87     OH_Drawing_PathEffect *pathEffect1 = OH_Drawing_CreateDashPathEffect(nullptr, 2, 1.0);
88     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
89     OH_Drawing_ErrorCodeReset();
90     // 2. OH_Drawing_CreateDashPathEffect with 0 as the second parameter, check the error code with
91     // OH_Drawing_ErrorCodeGet
92     OH_Drawing_PathEffect *pathEffect2 = OH_Drawing_CreateDashPathEffect(intervals, 0, 1.0);
93     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
94     // 3. OH_Drawing_CreateDashPathEffect with 0.0 as the third parameter
95     OH_Drawing_PathEffect *pathEffect3 = OH_Drawing_CreateDashPathEffect(intervals, 2, 0.0);
96     // add assert
97     EXPECT_NE(pathEffect3, nullptr);
98     // 4. Free memory
99     OH_Drawing_PathEffectDestroy(pathEffect1);
100     OH_Drawing_PathEffectDestroy(pathEffect2);
101     OH_Drawing_PathEffectDestroy(pathEffect3);
102 }
103 
104 /*
105  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0102
106  * @tc.name: testCreateDashPathEffectAbnormal
107  * @tc.desc: test for testCreateDashPathEffectAbnormal.
108  * @tc.size  : SmallTest
109  * @tc.type  : Function
110  * @tc.level : Level 3
111  */
112 HWTEST_F(DrawingNativePathEffectTest, testCreateDashPathEffectAbnormal, TestSize.Level3) {
113     float intervals[] = {1, 1, 1};
114     // 1. OH_Drawing_CreateDashPathEffect with the first parameter not being even
115     OH_Drawing_PathEffect *pathEffect1 = OH_Drawing_CreateDashPathEffect(intervals, 3, 1.0);
116     // add assert
117     EXPECT_NE(pathEffect1, nullptr);
118     // 2. OH_Drawing_CreateDashPathEffect with the second parameter being negative, check the error code with
119     // OH_Drawing_ErrorCodeGet
120     OH_Drawing_PathEffect *pathEffect2 = OH_Drawing_CreateDashPathEffect(intervals, -3, 1.0);
121     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
122     // 3. OH_Drawing_CreateDashPathEffect with the second parameter being 1
123     OH_Drawing_PathEffect *pathEffect3 = OH_Drawing_CreateDashPathEffect(intervals, 1, 1.0);
124     // add assert
125     EXPECT_NE(pathEffect3, nullptr);
126     // 4. OH_Drawing_CreateDashPathEffect with the third parameter being negative
127     OH_Drawing_PathEffect *pathEffect4 = OH_Drawing_CreateDashPathEffect(intervals, 3, -1.0);
128     // add assert
129     EXPECT_NE(pathEffect4, nullptr);
130     // 5. Free memory
131     OH_Drawing_PathEffectDestroy(pathEffect1);
132     OH_Drawing_PathEffectDestroy(pathEffect2);
133     OH_Drawing_PathEffectDestroy(pathEffect3);
134     OH_Drawing_PathEffectDestroy(pathEffect4);
135 }
136 
137 /*
138  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0104
139  * @tc.name: testCreateDashPathEffectMultipleCalls
140  * @tc.desc: test for testCreateDashPathEffectMultipleCalls.
141  * @tc.size  : SmallTest
142  * @tc.type  : Function
143  * @tc.level : Level 3
144  */
145 HWTEST_F(DrawingNativePathEffectTest, testCreateDashPathEffectMultipleCalls, TestSize.Level3) {
146     float intervals[] = {1, 1};
147     // 1. Call OH_Drawing_CreateDashPathEffect 10 times
148     for (int i = 0; i < 10; i++) {
149         OH_Drawing_PathEffect *pathEffect = OH_Drawing_CreateDashPathEffect(intervals, 2, 1.0);
150         // add assert
151         EXPECT_NE(pathEffect, nullptr);
152         // 2. Free memory
153         OH_Drawing_PathEffectDestroy(pathEffect);
154     }
155 }
156 
157 /*
158  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0200
159  * @tc.name: testPathEffectDestroyNormal
160  * @tc.desc: test for testPathEffectDestroyNormal.
161  * @tc.size  : SmallTest
162  * @tc.type  : Function
163  * @tc.level : Level 0
164  */
165 HWTEST_F(DrawingNativePathEffectTest, testPathEffectDestroyNormal, TestSize.Level0) {
166     float intervals[] = {1, 1, 1};
167     // 1. OH_Drawing_CreateDashPathEffect
168     OH_Drawing_PathEffect *pathEffect = OH_Drawing_CreateDashPathEffect(intervals, 3, 0.0);
169     // add assert
170     EXPECT_NE(pathEffect, nullptr);
171     // 2. OH_Drawing_PathEffectDestroy
172     OH_Drawing_PathEffectDestroy(pathEffect);
173 }
174 
175 /*
176  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0201
177  * @tc.name: testPathEffectDestroyNull
178  * @tc.desc: test for testPathEffectDestroyNull.
179  * @tc.size  : SmallTest
180  * @tc.type  : Function
181  * @tc.level : Level 3
182  */
183 HWTEST_F(DrawingNativePathEffectTest, testPathEffectDestroyNull, TestSize.Level3) {
184     // 1. OH_Drawing_PathEffectDestroy with nullptr as the parameter
185     OH_Drawing_PathEffectDestroy(nullptr);
186     // add assert
187     EXPECT_TRUE(true);
188 }
189 
190 /*
191  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0300
192  * @tc.name: testCreateCornerPathEffectNormal
193  * @tc.desc: test for testCreateCornerPathEffectNormal.
194  * @tc.size  : SmallTest
195  * @tc.type  : Function
196  * @tc.level : Level 0
197  */
198 HWTEST_F(DrawingNativePathEffectTest, testCreateCornerPathEffectNormal, TestSize.Level0) {
199     // 1. OH_Drawing_CreateCornerPathEffect with normal parameter
200     OH_Drawing_PathEffect *pathEffect = OH_Drawing_CreateCornerPathEffect(10.0);
201     // add assert
202     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_SUCCESS);
203     EXPECT_NE(pathEffect, nullptr);
204     // 2. Free memory
205     OH_Drawing_PathEffectDestroy(pathEffect);
206 }
207 
208 /*
209  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0301
210  * @tc.name: testCreateCornerPathEffectNull
211  * @tc.desc: test for testCreateCornerPathEffectNull.
212  * @tc.size  : SmallTest
213  * @tc.type  : Function
214  * @tc.level : Level 3
215  */
216 HWTEST_F(DrawingNativePathEffectTest, testCreateCornerPathEffectNull, TestSize.Level3) {
217     // 1. OH_Drawing_CreateCornerPathEffect with 0 as the parameter
218     OH_Drawing_PathEffect *pathEffect = OH_Drawing_CreateCornerPathEffect(0);
219     // add assert
220     EXPECT_EQ(pathEffect, nullptr);
221     // 2. Free memory
222     OH_Drawing_PathEffectDestroy(pathEffect);
223 }
224 
225 /*
226  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0302
227  * @tc.name: testCreateCornerPathEffectAbnormal
228  * @tc.desc: test for testCreateCornerPathEffectAbnormal.
229  * @tc.size  : SmallTest
230  * @tc.type  : Function
231  * @tc.level : Level 3
232  */
233 HWTEST_F(DrawingNativePathEffectTest, testCreateCornerPathEffectAbnormal, TestSize.Level3) {
234     // 1. OH_Drawing_CreateCornerPathEffect with 0xFFFFFFFF as the parameter
235     OH_Drawing_PathEffect *pathEffect1 = OH_Drawing_CreateCornerPathEffect(0xFFFFFFFF);
236     // add assert
237     EXPECT_NE(pathEffect1, nullptr);
238     // 2. OH_Drawing_CreateCornerPathEffect with 0.0001 as the parameter
239     OH_Drawing_PathEffect *pathEffect2 = OH_Drawing_CreateCornerPathEffect(0.0001);
240     // add assert
241     EXPECT_NE(pathEffect2, nullptr);
242     // 3. OH_Drawing_CreateCornerPathEffect with -0.1 as the parameter
243     OH_Drawing_PathEffect *pathEffect3 = OH_Drawing_CreateCornerPathEffect(-0.1);
244     // add assert
245     EXPECT_EQ(pathEffect3, nullptr);
246     // 4. OH_Drawing_CreateCornerPathEffect with -1 as the parameter
247     OH_Drawing_PathEffect *pathEffect4 = OH_Drawing_CreateCornerPathEffect(-1);
248     // add assert
249     EXPECT_EQ(pathEffect4, nullptr);
250     // 5. Free memory
251     OH_Drawing_PathEffectDestroy(pathEffect1);
252     OH_Drawing_PathEffectDestroy(pathEffect2);
253     OH_Drawing_PathEffectDestroy(pathEffect3);
254     OH_Drawing_PathEffectDestroy(pathEffect4);
255 }
256 
257 /*
258  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0400
259  * @tc.name: testCreateDiscreatePathEffectNormal
260  * @tc.desc: test for testCreateDiscreatePathEffectNormal.
261  * @tc.size  : SmallTest
262  * @tc.type  : Function
263  * @tc.level : Level 0
264  */
265 HWTEST_F(DrawingNativePathEffectTest, testCreateDiscreatePathEffectNormal, TestSize.Level0) {
266     // 1. OH_Drawing_CreateDiscretePathEffect with normal parameter
267     OH_Drawing_PathEffect *pathEffect = OH_Drawing_CreateDiscretePathEffect(10.0, 2.0);
268     // add assert
269     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_SUCCESS);
270     EXPECT_NE(pathEffect, nullptr);
271     // 2. Free memory
272     OH_Drawing_PathEffectDestroy(pathEffect);
273 }
274 
275 /*
276  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0401
277  * @tc.name: testCreateDiscreatePathEffectNull
278  * @tc.desc: test for testCreateDiscreatePathEffectNull.
279  * @tc.size  : SmallTest
280  * @tc.type  : Function
281  * @tc.level : Level 3
282  */
283 HWTEST_F(DrawingNativePathEffectTest, testCreateDiscreatePathEffectNull, TestSize.Level3) {
284     // 1. OH_Drawing_CreateDiscretePathEffect with 0 as the first parameter
285     OH_Drawing_PathEffect *pathEffect1 = OH_Drawing_CreateDiscretePathEffect(0, 2.0);
286     // add assert
287     EXPECT_NE(pathEffect1, nullptr);
288     // 2. OH_Drawing_CreateDiscretePathEffect with 0 as the second parameter
289     OH_Drawing_PathEffect *pathEffect2 = OH_Drawing_CreateDiscretePathEffect(10.0, 0);
290     // add assert
291     EXPECT_NE(pathEffect2, nullptr);
292     // 3. Free memory
293     OH_Drawing_PathEffectDestroy(pathEffect1);
294     OH_Drawing_PathEffectDestroy(pathEffect2);
295 }
296 
297 /*
298  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0402
299  * @tc.name: testCreateDiscreatePathEffectAbnormal
300  * @tc.desc: test for testCreateDiscreatePathEffectAbnormal.
301  * @tc.size  : SmallTest
302  * @tc.type  : Function
303  * @tc.level : Level 3
304  */
305 HWTEST_F(DrawingNativePathEffectTest, testCreateDiscreatePathEffectAbnormal, TestSize.Level3) {
306     // 1. OH_Drawing_CreateDiscretePathEffect with 0xFFFFFFFF as the first and second parameter
307     OH_Drawing_PathEffect *pathEffect1 = OH_Drawing_CreateDiscretePathEffect(0xFFFFFFFF, 0xFFFFFFFF);
308     // add assert
309     EXPECT_NE(pathEffect1, nullptr);
310     // 2. OH_Drawing_CreateDiscretePathEffect with 0xFFFFFFFF as the first parameter
311     OH_Drawing_PathEffect *pathEffect2 = OH_Drawing_CreateDiscretePathEffect(0xFFFFFFFF, 2.0);
312     // add assert
313     EXPECT_NE(pathEffect2, nullptr);
314     // 3. OH_Drawing_CreateDiscretePathEffect with 0xFFFFFFFF as the first parameter
315     OH_Drawing_PathEffect *pathEffect3 = OH_Drawing_CreateDiscretePathEffect(0xFFFFFFFF, -0.1);
316     // add assert
317     EXPECT_NE(pathEffect3, nullptr);
318     // 4. OH_Drawing_CreateDiscretePathEffect with 0xFFFFFFFF as the first parameter
319     OH_Drawing_PathEffect *pathEffect4 = OH_Drawing_CreateDiscretePathEffect(0xFFFFFFFF, -1);
320     // add assert
321     EXPECT_NE(pathEffect4, nullptr);
322     // 5. OH_Drawing_CreateDiscretePathEffect with -0.1 as the first parameter
323     OH_Drawing_PathEffect *pathEffect5 = OH_Drawing_CreateDiscretePathEffect(-0.1, 2.0);
324     // add assert
325     EXPECT_NE(pathEffect5, nullptr);
326     // 6. OH_Drawing_CreateDiscretePathEffect with -1 as the first parameter
327     OH_Drawing_PathEffect *pathEffect6 = OH_Drawing_CreateDiscretePathEffect(-1, 2.0);
328     // add assert
329     EXPECT_NE(pathEffect6, nullptr);
330     // 8. Free memory
331     OH_Drawing_PathEffectDestroy(pathEffect1);
332     OH_Drawing_PathEffectDestroy(pathEffect2);
333     OH_Drawing_PathEffectDestroy(pathEffect3);
334     OH_Drawing_PathEffectDestroy(pathEffect4);
335     OH_Drawing_PathEffectDestroy(pathEffect5);
336     OH_Drawing_PathEffectDestroy(pathEffect6);
337 }
338 
339 /*
340  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0500
341  * @tc.name: testCreateComposePathEffectNormal
342  * @tc.desc: test for testCreateComposePathEffectNormal.
343  * @tc.size  : SmallTest
344  * @tc.type  : Function
345  * @tc.level : Level 0
346  */
347 HWTEST_F(DrawingNativePathEffectTest, testCreateComposePathEffectNormal, TestSize.Level0) {
348     // 1. OH_Drawing_CreateCornerPathEffect
349     OH_Drawing_PathEffect *cornerPathEffect = OH_Drawing_CreateCornerPathEffect(10.0);
350     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_SUCCESS);
351     EXPECT_NE(cornerPathEffect, nullptr);
352 
353     // 2. OH_Drawing_CreateDiscretePathEffect
354     OH_Drawing_PathEffect *discretePathEffect = OH_Drawing_CreateDiscretePathEffect(10.0, 2.0);
355     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_SUCCESS);
356     EXPECT_NE(discretePathEffect, nullptr);
357 
358     // 3. OH_Drawing_CreateComposePathEffect with normal parameters
359     OH_Drawing_PathEffect *composePathEffect = OH_Drawing_CreateComposePathEffect(cornerPathEffect,
360         discretePathEffect);
361     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_SUCCESS);
362     EXPECT_NE(composePathEffect, nullptr);
363 
364     // 4. Free memory
365     OH_Drawing_PathEffectDestroy(cornerPathEffect);
366     OH_Drawing_PathEffectDestroy(discretePathEffect);
367     OH_Drawing_PathEffectDestroy(composePathEffect);
368 }
369 
370 /*
371  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0501
372  * @tc.name: testCreateComposePathEffectNull
373  * @tc.desc: test for testCreateComposePathEffectNull.
374  * @tc.size  : SmallTest
375  * @tc.type  : Function
376  * @tc.level : Level 3
377  */
378 HWTEST_F(DrawingNativePathEffectTest, testCreateComposePathEffectNull, TestSize.Level3) {
379     // 1. OH_Drawing_CreateCornerPathEffect
380     OH_Drawing_PathEffect *cornerPathEffect = OH_Drawing_CreateCornerPathEffect(10.0);
381     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_SUCCESS);
382     EXPECT_NE(cornerPathEffect, nullptr);
383 
384     // 2. OH_Drawing_CreateDiscretePathEffect
385     OH_Drawing_PathEffect *discretePathEffect = OH_Drawing_CreateDiscretePathEffect(10.0, 2.0);
386     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_SUCCESS);
387     EXPECT_NE(discretePathEffect, nullptr);
388 
389     // 3. OH_Drawing_CreateComposePathEffect with first parameter as nullptr
390     OH_Drawing_PathEffect *composePathEffect1 = OH_Drawing_CreateComposePathEffect(nullptr, discretePathEffect);
391     EXPECT_EQ(composePathEffect1, nullptr);
392 
393     // 4. OH_Drawing_CreateComposePathEffect with second parameter as nullptr
394     OH_Drawing_PathEffect *composePathEffect2 = OH_Drawing_CreateComposePathEffect(cornerPathEffect, nullptr);
395     EXPECT_EQ(composePathEffect2, nullptr);
396 
397     // 5. Free memory
398     OH_Drawing_PathEffectDestroy(cornerPathEffect);
399     OH_Drawing_PathEffectDestroy(discretePathEffect);
400     OH_Drawing_PathEffectDestroy(composePathEffect1);
401     OH_Drawing_PathEffectDestroy(composePathEffect2);
402 }
403 
404 /*
405  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0600
406  * @tc.name: testCreatePathDashEffectNormal
407  * @tc.desc: test for testCreatePathDashEffectNormal.
408  * @tc.size  : SmallTest
409  * @tc.type  : Function
410  * @tc.level : Level 0
411  */
412 HWTEST_F(DrawingNativePathEffectTest, testCreatePathDashEffectNormal, TestSize.Level0) {
413     // 1. OH_Drawing_PathCreate
414     OH_Drawing_Path *path = OH_Drawing_PathCreate();
415     EXPECT_NE(path, nullptr);
416     // 2. OH_Drawing_PathAddRect
417     OH_Drawing_PathAddRect(path, 10, 10, 100, 100, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
418     // 3. OH_Drawing_PathCreate
419     OH_Drawing_Path *path2 = OH_Drawing_PathCreate();
420     EXPECT_NE(path2, nullptr);
421     // 4. OH_Drawing_PathMoveTo
422     OH_Drawing_PathMoveTo(path2, 50.0f, 50.0f);
423     // 5. OH_Drawing_PathLineTo
424     OH_Drawing_PathLineTo(path2, 100.0f, 50.0f);
425     // 6. OH_Drawing_CreatePathDashEffect 参数正常入参并且遍历第四个枚举参数
426     OH_Drawing_PathEffect *pathEffect = OH_Drawing_CreatePathDashEffect(path2, 50.0f, 50.0f,
427         DRAWING_PATH_DASH_STYLE_TRANSLATE);
428         EXPECT_NE(pathEffect, nullptr);
429     pathEffect = OH_Drawing_CreatePathDashEffect(path2, 50.0f, 50.0f, DRAWING_PATH_DASH_STYLE_ROTATE);
430     EXPECT_NE(pathEffect, nullptr);
431     pathEffect = OH_Drawing_CreatePathDashEffect(path2, 50.0f, 50.0f, DRAWING_PATH_DASH_STYLE_MORPH);
432     EXPECT_NE(pathEffect, nullptr);
433     // 7. 释放内存
434     OH_Drawing_PathDestroy(path);
435     OH_Drawing_PathDestroy(path2);
436     OH_Drawing_PathEffectDestroy(pathEffect);
437 }
438 
439 /*
440  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0601
441  * @tc.name: testCreatePathDashEffectNull
442  * @tc.desc: test for testCreatePathDashEffectNull.
443  * @tc.size  : SmallTest
444  * @tc.type  : Function
445  * @tc.level : Level 3
446  */
447 HWTEST_F(DrawingNativePathEffectTest, testCreatePathDashEffectNull, TestSize.Level3) {
448     // 1. OH_Drawing_PathCreate
449     OH_Drawing_Path *path = OH_Drawing_PathCreate();
450     EXPECT_NE(path, nullptr);
451     // 2. OH_Drawing_PathAddRect
452     OH_Drawing_PathAddRect(path, 10, 10, 100, 100, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
453     // 3. OH_Drawing_PathCreate
454     OH_Drawing_Path *path2 = OH_Drawing_PathCreate();
455     // 4. OH_Drawing_PathMoveTo
456     OH_Drawing_PathMoveTo(path2, 50.0f, 50.0f);
457     // 5. OH_Drawing_PathLineTo
458     OH_Drawing_PathLineTo(path2, 100.0f, 50.0f);
459     // 6. OH_Drawing_CreatePathDashEffect第一个参数传nullptr
460     OH_Drawing_PathEffect *pathEffect = OH_Drawing_CreatePathDashEffect(nullptr, 50.0f, 50.0f,
461         DRAWING_PATH_DASH_STYLE_TRANSLATE);
462         EXPECT_EQ(pathEffect, nullptr);
463     // 7. OH_Drawing_CreatePathDashEffect第二个参数传0
464     pathEffect = OH_Drawing_CreatePathDashEffect(path2, 0, 50.0f, DRAWING_PATH_DASH_STYLE_TRANSLATE);
465     EXPECT_EQ(pathEffect, nullptr);
466     // 8. OH_Drawing_CreatePathDashEffect第三个参数传0
467     pathEffect = OH_Drawing_CreatePathDashEffect(path2, 50.0f, 0, DRAWING_PATH_DASH_STYLE_TRANSLATE);
468     EXPECT_NE(pathEffect, nullptr);
469     // 9. 释放内存
470     OH_Drawing_PathDestroy(path);
471     OH_Drawing_PathDestroy(path2);
472     OH_Drawing_PathEffectDestroy(pathEffect);
473 }
474 
475 /*
476  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0602
477  * @tc.name: testCreatePathDashEffectAbnormal
478  * @tc.desc: test for testCreatePathDashEffectAbnormal.
479  * @tc.size  : SmallTest
480  * @tc.type  : Function
481  * @tc.level : Level 3
482  */
483 HWTEST_F(DrawingNativePathEffectTest, testCreatePathDashEffectAbnormal, TestSize.Level3) {
484     // 1. OH_Drawing_PathCreate
485     OH_Drawing_Path *path = OH_Drawing_PathCreate();
486     EXPECT_NE(path, nullptr);
487     // 2. OH_Drawing_PathAddRect
488     OH_Drawing_PathAddRect(path, 10, 10, 100, 100, OH_Drawing_PathDirection::PATH_DIRECTION_CW);
489     // 3. OH_Drawing_PathCreate
490     OH_Drawing_Path *path2 = OH_Drawing_PathCreate();
491     // 4. OH_Drawing_PathMoveTo
492     OH_Drawing_PathMoveTo(path2, 50.0f, 50.0f);
493     // 5. OH_Drawing_PathLineTo
494     OH_Drawing_PathLineTo(path2, 100.0f, 50.0f);
495     // 6. OH_Drawing_CreatePathDashEffect第二个参数传0xFFFFFFFF
496     OH_Drawing_PathEffect *pathEffect = OH_Drawing_CreatePathDashEffect(path2, 0xFFFFFFFF,
497         50.0f, DRAWING_PATH_DASH_STYLE_TRANSLATE);
498         EXPECT_NE(pathEffect, nullptr);
499     // 7. OH_Drawing_CreatePathDashEffect第二个参数传0.0001
500     pathEffect = OH_Drawing_CreatePathDashEffect(path2, 0.0001, 50.0f, DRAWING_PATH_DASH_STYLE_TRANSLATE);
501     EXPECT_NE(pathEffect, nullptr);
502     // 8. OH_Drawing_CreatePathDashEffect第二个参数传-0.1
503     pathEffect = OH_Drawing_CreatePathDashEffect(path2, -0.1, 50.0f, DRAWING_PATH_DASH_STYLE_TRANSLATE);
504     EXPECT_EQ(pathEffect, nullptr);
505     // 9. OH_Drawing_CreatePathDashEffect第二个参数传-1
506     pathEffect = OH_Drawing_CreatePathDashEffect(path2, -1, 50.0f, DRAWING_PATH_DASH_STYLE_TRANSLATE);
507     EXPECT_EQ(pathEffect, nullptr);
508     // 10. 释放内存
509     OH_Drawing_PathDestroy(path);
510     OH_Drawing_PathDestroy(path2);
511     OH_Drawing_PathEffectDestroy(pathEffect);
512 }
513 
514 /*
515  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0700
516  * @tc.name: testCreateSumPathEffectNormal
517  * @tc.desc: test for testCreateSumPathEffectNormal.
518  * @tc.size  : SmallTest
519  * @tc.type  : Function
520  * @tc.level : Level 0
521  */
522 HWTEST_F(DrawingNativePathEffectTest, testCreateSumPathEffectNormal, TestSize.Level0) {
523     // 1. OH_Drawing_CreateCornerPathEffect
524     OH_Drawing_PathEffect *firstPathEffect = OH_Drawing_CreateCornerPathEffect(50.0f);
525     EXPECT_NE(firstPathEffect, nullptr);
526     // 2. OH_Drawing_CreateDiscreatePathEffect
527     OH_Drawing_PathEffect *secondPathEffect = OH_Drawing_CreateDiscretePathEffect(50.0f, 50.0f);
528     EXPECT_NE(secondPathEffect, nullptr);
529     // 3. OH_Drawing_CreateSumPathEffect正常入参
530     OH_Drawing_PathEffect *pathEffect = OH_Drawing_CreateSumPathEffect(firstPathEffect, secondPathEffect);
531     EXPECT_NE(pathEffect, nullptr);
532     // 4. 释放内存
533     OH_Drawing_PathEffectDestroy(firstPathEffect);
534     OH_Drawing_PathEffectDestroy(secondPathEffect);
535     OH_Drawing_PathEffectDestroy(pathEffect);
536 }
537 
538 /*
539  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_PATH_EFFECT_0701
540  * @tc.name: testCreateSumPathEffectNull
541  * @tc.desc: test for testCreateSumPathEffectNull.
542  * @tc.size  : SmallTest
543  * @tc.type  : Function
544  * @tc.level : Level 3
545  */
546 HWTEST_F(DrawingNativePathEffectTest, testCreateSumPathEffectNull, TestSize.Level3) {
547     // 1. OH_Drawing_CreateCornerPathEffect
548     OH_Drawing_PathEffect *firstPathEffect = OH_Drawing_CreateCornerPathEffect(50.0f);
549     EXPECT_NE(firstPathEffect, nullptr);
550     // 2. OH_Drawing_CreateDiscreatePathEffect
551     OH_Drawing_PathEffect *secondPathEffect = OH_Drawing_CreateDiscretePathEffect(50.0f, 50.0f);
552     EXPECT_NE(secondPathEffect, nullptr);
553     // 3. OH_Drawing_CreateSumPathEffect 第一个参数传nullptr
554     OH_Drawing_PathEffect *pathEffect = OH_Drawing_CreateSumPathEffect(nullptr, secondPathEffect);
555     EXPECT_EQ(pathEffect, nullptr);
556     // 4. OH_Drawing_CreateSumPathEffect 第二个参数传nullptr
557     pathEffect = OH_Drawing_CreateSumPathEffect(firstPathEffect, nullptr);
558     EXPECT_EQ(pathEffect, nullptr);
559     // 5. 释放内存
560     OH_Drawing_PathEffectDestroy(firstPathEffect);
561     OH_Drawing_PathEffectDestroy(secondPathEffect);
562     OH_Drawing_PathEffectDestroy(pathEffect);
563 }
564 
565 } // namespace Drawing
566 } // namespace Rosen
567 } // namespace OHOS