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