1 /*
2  * Copyright (c) 2022-2024 Huawei Device 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, Hardware
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_error_code.h"
19 #include "drawing_filter.h"
20 #include "drawing_pen.h"
21 #include "drawing_point.h"
22 #include "drawing_shader_effect.h"
23 #include "drawing_shadow_layer.h"
24 #include "drawing_types.h"
25 #include "gtest/gtest.h"
26 
27 #include "effect/color_filter.h"
28 #include "effect/filter.h"
29 #include "draw/pen.h"
30 #include "drawing_helper.h"
31 #include "drawing_path.h"
32 #include "drawing_rect.h"
33 #include "drawing_matrix.h"
34 
35 using namespace testing;
36 using namespace testing::ext;
37 
38 namespace OHOS {
39 namespace Rosen {
40 namespace Drawing {
41 class NativeDrawingPenTest : public testing::Test {
42 public:
43     static void SetUpTestCase();
44     static void TearDownTestCase();
45     void SetUp() override;
46     void TearDown() override;
47 };
48 
SetUpTestCase()49 void NativeDrawingPenTest::SetUpTestCase() {}
TearDownTestCase()50 void NativeDrawingPenTest::TearDownTestCase() {}
SetUp()51 void NativeDrawingPenTest::SetUp() {}
TearDown()52 void NativeDrawingPenTest::TearDown() {}
53 
CastToFilter(OH_Drawing_Filter * cFilter)54 static Filter* CastToFilter(OH_Drawing_Filter* cFilter)
55 {
56     return reinterpret_cast<Filter*>(cFilter);
57 }
58 
59 /*
60  * @tc.name: NativeDrawingPenTest_penCreate001
61  * @tc.desc: test for create drawing_pen.
62  * @tc.type: FUNC
63  * @tc.require: AR000GTO5R
64  */
65 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penCreate001, TestSize.Level1)
66 {
67     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
68     EXPECT_EQ(pen == nullptr, false);
69     OH_Drawing_PenDestroy(pen);
70 }
71 
72 /*
73  * @tc.name: NativeDrawingPenTest_penSetAntiAlias002
74  * @tc.desc: test for the get and set methods about AntiAlias for a pen.
75  * @tc.type: FUNC
76  * @tc.require: AR000GTO5R
77  */
78 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetAntiAlias002, TestSize.Level1)
79 {
80     OH_Drawing_Pen* pen1 = OH_Drawing_PenCreate();
81     OH_Drawing_PenSetAntiAlias(pen1, true);
82     EXPECT_EQ(OH_Drawing_PenIsAntiAlias(pen1), true);
83     OH_Drawing_PenSetAntiAlias(pen1, false);
84     EXPECT_EQ(OH_Drawing_PenIsAntiAlias(pen1), false);
85     OH_Drawing_PenDestroy(pen1);
86 }
87 
88 /*
89  * @tc.name: NativeDrawingPenTest_penSetColor003
90  * @tc.desc: test for the get and set methods about the color for a pen.
91  * @tc.type: FUNC
92  * @tc.require: AR000GTO5R
93  */
94 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetColor003, TestSize.Level1)
95 {
96     OH_Drawing_Pen* pen2 = OH_Drawing_PenCreate();
97     OH_Drawing_PenSetColor(pen2, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0x00, 0x00));
98     EXPECT_EQ(OH_Drawing_PenGetColor(pen2), 0xFFFF0000);
99     OH_Drawing_PenDestroy(pen2);
100 }
101 
102 /*
103  * @tc.name: NativeDrawingPenTest_penSetWidth004
104  * @tc.desc: test for the get and set methods about the width for a pen.
105  * @tc.type: FUNC
106  * @tc.require: AR000GTO5R
107  */
108 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetWidth004, TestSize.Level1)
109 {
110     OH_Drawing_Pen* pen3 = OH_Drawing_PenCreate();
111     OH_Drawing_PenSetWidth(pen3, 10);
112     EXPECT_EQ(OH_Drawing_PenGetWidth(pen3), 10);
113     OH_Drawing_PenDestroy(pen3);
114 }
115 
116 /*
117  * @tc.name: NativeDrawingPenTest_penSetMiterLimit005
118  * @tc.desc: test for the get and set methods about the miterLimit for a pen.
119  * @tc.type: FUNC
120  * @tc.require: AR000GTO5R
121  */
122 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetMiterLimit005, TestSize.Level1)
123 {
124     OH_Drawing_Pen* pen4 = OH_Drawing_PenCreate();
125     OH_Drawing_PenSetMiterLimit(pen4, 5);
126     EXPECT_EQ(OH_Drawing_PenGetMiterLimit(pen4), 5);
127     OH_Drawing_PenDestroy(pen4);
128 }
129 
130 /*
131  * @tc.name: NativeDrawingPenTest_penSetCap006
132  * @tc.desc: test for the get and set methods about the line cap style for a pen.
133  * @tc.type: FUNC
134  * @tc.require: AR000GTO5R
135  */
136 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetCap006, TestSize.Level1)
137 {
138     OH_Drawing_Pen* pen5 = OH_Drawing_PenCreate();
139     EXPECT_EQ(OH_Drawing_PenGetCap(nullptr), OH_Drawing_PenLineCapStyle::LINE_FLAT_CAP);
140     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
141     OH_Drawing_PenSetCap(pen5, OH_Drawing_PenLineCapStyle::LINE_SQUARE_CAP);
142     EXPECT_EQ(OH_Drawing_PenGetCap(pen5), OH_Drawing_PenLineCapStyle::LINE_SQUARE_CAP);
143     OH_Drawing_PenSetCap(pen5, OH_Drawing_PenLineCapStyle::LINE_FLAT_CAP);
144     EXPECT_EQ(OH_Drawing_PenGetCap(pen5), OH_Drawing_PenLineCapStyle::LINE_FLAT_CAP);
145     OH_Drawing_PenSetCap(pen5, OH_Drawing_PenLineCapStyle::LINE_ROUND_CAP);
146     EXPECT_EQ(OH_Drawing_PenGetCap(pen5), OH_Drawing_PenLineCapStyle::LINE_ROUND_CAP);
147     OH_Drawing_PenDestroy(pen5);
148 }
149 
150 /*
151  * @tc.name: NativeDrawingPenTest_penSetJoin007
152  * @tc.desc: test for the get and set methods about the line join style for a pen.
153  * @tc.type: FUNC
154  * @tc.require: AR000GTO5R
155  */
156 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetJoin007, TestSize.Level1)
157 {
158     OH_Drawing_Pen* pen6 = OH_Drawing_PenCreate();
159     OH_Drawing_PenSetJoin(pen6, OH_Drawing_PenLineJoinStyle::LINE_ROUND_JOIN);
160     EXPECT_EQ(OH_Drawing_PenGetJoin(pen6), OH_Drawing_PenLineJoinStyle::LINE_ROUND_JOIN);
161     OH_Drawing_PenSetJoin(pen6, OH_Drawing_PenLineJoinStyle::LINE_MITER_JOIN);
162     EXPECT_EQ(OH_Drawing_PenGetJoin(pen6), OH_Drawing_PenLineJoinStyle::LINE_MITER_JOIN);
163     OH_Drawing_PenSetJoin(pen6, OH_Drawing_PenLineJoinStyle::LINE_BEVEL_JOIN);
164     EXPECT_EQ(OH_Drawing_PenGetJoin(pen6), OH_Drawing_PenLineJoinStyle::LINE_BEVEL_JOIN);
165     OH_Drawing_PenDestroy(pen6);
166 }
167 
168 /*
169  * @tc.name: NativeDrawingPenTest_penSetBlendMode008
170  * @tc.desc: test for the get and set methods about the line join style for a pen.
171  * @tc.type: FUNC
172  * @tc.require: AR000GTO5R
173  */
174 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetBlendMode008, TestSize.Level1)
175 {
176     OH_Drawing_Pen* pen8 = OH_Drawing_PenCreate();
177     EXPECT_NE(pen8, nullptr);
178     OH_Drawing_PenSetBlendMode(pen8, OH_Drawing_BlendMode::BLEND_MODE_SRC);
179     OH_Drawing_PenSetBlendMode(nullptr, OH_Drawing_BlendMode::BLEND_MODE_SRC);
180     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
181     OH_Drawing_PenSetBlendMode(pen8, (OH_Drawing_BlendMode)(BLEND_MODE_LUMINOSITY + 1));
182     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
183     OH_Drawing_PenSetBlendMode(pen8, (OH_Drawing_BlendMode)(BLEND_MODE_CLEAR - 1));
184     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
185     OH_Drawing_PenDestroy(pen8);
186 }
187 
188 /*
189  * @tc.name: NativeDrawingPenTest_penReset009
190  * @tc.desc: test for the reset method for a pen.
191  * @tc.type: FUNC
192  * @tc.require: AR000GTO5R
193  */
194 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penReset009, TestSize.Level1)
195 {
196     OH_Drawing_Pen* pen9 = OH_Drawing_PenCreate();
197     OH_Drawing_PenSetAntiAlias(pen9, true);
198     OH_Drawing_PenSetColor(pen9, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0x00, 0x00));
199     OH_Drawing_PenSetWidth(pen9, 10);
200     OH_Drawing_PenSetMiterLimit(pen9, 5);
201     OH_Drawing_PenSetCap(pen9, OH_Drawing_PenLineCapStyle::LINE_ROUND_CAP);
202     OH_Drawing_PenSetJoin(pen9, OH_Drawing_PenLineJoinStyle::LINE_BEVEL_JOIN);
203 
204     OH_Drawing_PenReset(pen9);
205     EXPECT_EQ(OH_Drawing_PenIsAntiAlias(pen9), false);
206     EXPECT_EQ(OH_Drawing_PenGetColor(pen9), 0xFF000000);
207     EXPECT_EQ(OH_Drawing_PenGetWidth(pen9), 0);
208     EXPECT_EQ(OH_Drawing_PenGetMiterLimit(pen9), -1);
209     EXPECT_EQ(OH_Drawing_PenGetCap(pen9), OH_Drawing_PenLineCapStyle::LINE_FLAT_CAP);
210     EXPECT_EQ(OH_Drawing_PenGetJoin(pen9), OH_Drawing_PenLineJoinStyle::LINE_MITER_JOIN);
211 
212     OH_Drawing_PenDestroy(pen9);
213 }
214 
215 /*
216  * @tc.name: NativeDrawingPenTest_penGetFilter010
217  * @tc.desc: gets the filter from a pen.
218  * @tc.type: FUNC
219  * @tc.require: AR000GTO5R
220  */
221 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penGetFilter010, TestSize.Level1)
222 {
223     OH_Drawing_Pen* pen9 = OH_Drawing_PenCreate();
224     EXPECT_NE(pen9, nullptr);
225     OH_Drawing_Filter* cFilter_ = OH_Drawing_FilterCreate();
226     EXPECT_NE(cFilter_, nullptr);
227 
228     OH_Drawing_ColorFilter* colorFilterTmp = OH_Drawing_ColorFilterCreateLinearToSrgbGamma();
229     OH_Drawing_FilterSetColorFilter(cFilter_, nullptr);
230     OH_Drawing_FilterGetColorFilter(cFilter_, colorFilterTmp);
231     EXPECT_EQ((reinterpret_cast<ColorFilter*>(colorFilterTmp))->GetType(), ColorFilter::FilterType::NO_TYPE);
232 
233     OH_Drawing_Filter* tmpFilter_ = OH_Drawing_FilterCreate();
234     EXPECT_NE(cFilter_, nullptr);
235     EXPECT_NE(tmpFilter_, nullptr);
236     OH_Drawing_ColorFilter* cColorFilter_ = OH_Drawing_ColorFilterCreateBlendMode(0xFF0000FF, BLEND_MODE_COLOR);
237     OH_Drawing_FilterSetColorFilter(cFilter_, cColorFilter_);
238     OH_Drawing_PenSetFilter(pen9, cFilter_);
239     OH_Drawing_PenGetFilter(pen9, tmpFilter_);
240 
241     EXPECT_NE(CastToFilter(tmpFilter_)->GetColorFilter(), nullptr);
242     EXPECT_EQ(CastToFilter(tmpFilter_)->GetColorFilter()->GetType(), ColorFilter::FilterType::BLEND_MODE);
243     OH_Drawing_FilterDestroy(cFilter_);
244     OH_Drawing_FilterDestroy(tmpFilter_);
245     OH_Drawing_ColorFilterDestroy(cColorFilter_);
246     OH_Drawing_ColorFilterDestroy(colorFilterTmp);
247     OH_Drawing_PenDestroy(pen9);
248 }
249 
250 /*
251  * @tc.name: NativeDrawingPenTest_PenSetShadowLayer011
252  * @tc.desc: test for the set methods of pen.
253  * @tc.type: FUNC
254  * @tc.require: AR000GTO5R
255  */
256 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetShadowLayer011, TestSize.Level1)
257 {
258     // blurRadius:3.f, offset:(-3.f, 3.f), shadowColor:green
259     OH_Drawing_ShadowLayer* shadowLayer = OH_Drawing_ShadowLayerCreate(3.f, -3.f, 3.f, 0xFF00FF00);
260     EXPECT_NE(shadowLayer, nullptr);
261     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
262     OH_Drawing_PenSetShadowLayer(nullptr, shadowLayer);
263     OH_Drawing_PenSetShadowLayer(pen, nullptr);
264     OH_Drawing_PenSetShadowLayer(pen, shadowLayer);
265     OH_Drawing_ShadowLayerDestroy(shadowLayer);
266     OH_Drawing_PenDestroy(pen);
267 }
268 
269 /*
270  * @tc.name: NativeDrawingPenTest_PenCopy012
271  * @tc.desc: test for creates an <b>OH_Drawing_Pen</b> copy object.
272  * @tc.type: FUNC
273  * @tc.require: AR000GTO5R
274  */
275 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenCopy012, TestSize.Level1)
276 {
277     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
278     EXPECT_NE(OH_Drawing_PenCopy(pen), nullptr);
279     pen = nullptr;
280     EXPECT_EQ(OH_Drawing_PenCopy(pen), nullptr);
281     OH_Drawing_PenDestroy(pen);
282 }
283 
284 /*
285  * @tc.name: NativeDrawingPenTest_PenGetFillPath013
286  * @tc.desc: test for gets the filled equivalent of the src path.
287  * @tc.type: FUNC
288  * @tc.require: AR000GTO5R
289  */
290 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetFillPath013, TestSize.Level1)
291 {
292     OH_Drawing_Pen *pen = OH_Drawing_PenCreate();
293     OH_Drawing_PenSetWidth(pen, 10); // 10: width of pen
294     OH_Drawing_Path *dst = OH_Drawing_PathCreate();
295     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(10, 10, 20, 20); // rect left[10], top[10], right[20], bottom[20]
296     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
297     EXPECT_FALSE(OH_Drawing_PenGetFillPath(pen, nullptr, dst, rect, matrix));
298 
299     OH_Drawing_Path *src = OH_Drawing_PathCreate();
300     OH_Drawing_PathMoveTo(src, 10, 10); // 10: point's x, 10 point's y
301     OH_Drawing_PathLineTo(src, 20, 20); // 20: point's x, 20 point's y
302     EXPECT_TRUE(OH_Drawing_PenGetFillPath(pen, src, dst, rect, matrix));
303 
304     OH_Drawing_PenDestroy(pen);
305     OH_Drawing_PathDestroy(src);
306     OH_Drawing_PathDestroy(dst);
307     OH_Drawing_RectDestroy(rect);
308     OH_Drawing_MatrixDestroy(matrix);
309 }
310 
311 /*
312  * @tc.name: NativeDrawingPenTest_PenIsAntiAlias
313  * @tc.desc: test for OH_Drawing_PenIsAntiAlias.
314  * @tc.type: FUNC
315  * @tc.require: AR000GTO5R
316  */
317 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenIsAntiAlias, TestSize.Level1)
318 {
319     ASSERT_TRUE(OH_Drawing_PenIsAntiAlias(nullptr) == false);
320     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
321 }
322 
323 /*
324  * @tc.name: NativeDrawingPenTest_PenSetAntiAlias
325  * @tc.desc: test for OH_Drawing_PenSetAntiAlias.
326  * @tc.type: FUNC
327  * @tc.require: AR000GTO5R
328  */
329 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetAntiAlias, TestSize.Level1)
330 {
331     OH_Drawing_PenSetAntiAlias(nullptr, false);
332     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
333 }
334 
335 /*
336  * @tc.name: NativeDrawingPenTest_PenGetColor
337  * @tc.desc: test for OH_Drawing_PenGetColor.
338  * @tc.type: FUNC
339  * @tc.require: AR000GTO5R
340  */
341 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetColor, TestSize.Level1)
342 {
343     ASSERT_TRUE(OH_Drawing_PenGetColor(nullptr) == 0);
344     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
345 }
346 
347 /*
348  * @tc.name: NativeDrawingPenTest_PenSetColor
349  * @tc.desc: test for OH_Drawing_PenSetColor.
350  * @tc.type: FUNC
351  * @tc.require: AR000GTO5R
352  */
353 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetColor, TestSize.Level1)
354 {
355     OH_Drawing_PenSetColor(nullptr, 0xFFFFFFFF);
356     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
357 }
358 
359 /*
360  * @tc.name: NativeDrawingPenTest_PenGetAlpha
361  * @tc.desc: test for OH_Drawing_PenGetAlpha.
362  * @tc.type: FUNC
363  * @tc.require: AR000GTO5R
364  */
365 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetAlpha, TestSize.Level1)
366 {
367     ASSERT_TRUE(OH_Drawing_PenGetAlpha(nullptr) == 0);
368     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
369 }
370 
371 /*
372  * @tc.name: NativeDrawingPenTest_PenGetAlpha002
373  * @tc.desc: test for OH_Drawing_PenGetAlpha.
374  * @tc.type: FUNC
375  * @tc.require: AR000GTO5R
376  */
377 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetAlpha002, TestSize.Level1)
378 {
379     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
380     OH_Drawing_PenSetAlpha(pen, 0xFF);
381     ASSERT_TRUE(OH_Drawing_PenGetAlpha(pen) == 0xFF);
382     OH_Drawing_PenDestroy(pen);
383 }
384 
385 /*
386  * @tc.name: NativeDrawingPenTest_PenSetAlpha
387  * @tc.desc: test for OH_Drawing_PenSetAlpha.
388  * @tc.type: FUNC
389  * @tc.require: AR000GTO5R
390  */
391 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetAlpha, TestSize.Level1)
392 {
393     OH_Drawing_PenSetAlpha(nullptr, 0xFF);
394     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
395 }
396 
397 /*
398  * @tc.name: NativeDrawingPenTest_PenSetAlpha
399  * @tc.desc: test for OH_Drawing_PenSetAlpha.
400  * @tc.type: FUNC
401  * @tc.require: AR000GTO5R
402  */
403 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetAlpha002, TestSize.Level1)
404 {
405     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
406     OH_Drawing_PenSetAlpha(pen, 0xFF);
407     EXPECT_EQ(OH_Drawing_PenGetAlpha(pen), 0xFF);
408     OH_Drawing_PenDestroy(pen);
409 }
410 
411 /*
412  * @tc.name: NativeDrawingPenTest_PenGetWidth
413  * @tc.desc: test for OH_Drawing_PenGetWidth.
414  * @tc.type: FUNC
415  * @tc.require: AR000GTO5R
416  */
417 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetWidth, TestSize.Level1)
418 {
419     EXPECT_EQ(OH_Drawing_PenGetWidth(nullptr), 0);
420     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
421 }
422 
423 /*
424  * @tc.name: NativeDrawingPenTest_PenSetWidth
425  * @tc.desc: test for OH_Drawing_PenSetWidth.
426  * @tc.type: FUNC
427  * @tc.require: AR000GTO5R
428  */
429 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetWidth, TestSize.Level1)
430 {
431     OH_Drawing_PenSetWidth(nullptr, 10);
432     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
433 }
434 
435 /*
436  * @tc.name: NativeDrawingPenTest_PenGetMiterLimit
437  * @tc.desc: test for OH_Drawing_PenGetMiterLimit.
438  * @tc.type: FUNC
439  * @tc.require: AR000GTO5R
440  */
441 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetMiterLimit, TestSize.Level1)
442 {
443     OH_Drawing_PenGetMiterLimit(nullptr);
444     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
445 }
446 
447 /*
448  * @tc.name: NativeDrawingPenTest_PenSetMiterLimit
449  * @tc.desc: test for OH_Drawing_PenSetMiterLimit.
450  * @tc.type: FUNC
451  * @tc.require: AR000GTO5R
452  */
453 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetMiterLimit, TestSize.Level1)
454 {
455     OH_Drawing_PenSetMiterLimit(nullptr, 0);
456     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
457 }
458 
459 /*
460  * @tc.name: NativeDrawingPenTest_PenSetCap
461  * @tc.desc: test for OH_Drawing_PenSetCap.
462  * @tc.type: FUNC
463  * @tc.require: AR000GTO5R
464  */
465 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetCap, TestSize.Level1)
466 {
467     OH_Drawing_PenSetCap(nullptr, OH_Drawing_PenLineCapStyle::LINE_FLAT_CAP);
468     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
469 }
470 
471 /*
472  * @tc.name: NativeDrawingPenTest_PenGetJoin001
473  * @tc.desc: test for OH_Drawing_PenGetJoin.
474  * @tc.type: FUNC
475  * @tc.require: AR000GTO5R
476  */
477 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetJoin001, TestSize.Level1)
478 {
479     ASSERT_TRUE(OH_Drawing_PenGetJoin(nullptr) == OH_Drawing_PenLineJoinStyle::LINE_MITER_JOIN);
480     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
481 }
482 
483 /*
484  * @tc.name: NativeDrawingPenTest_PenSetJoin001
485  * @tc.desc: test for OH_Drawing_PenSetJoin.
486  * @tc.type: FUNC
487  * @tc.require: AR000GTO5R
488  */
489 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetJoin001, TestSize.Level1)
490 {
491     OH_Drawing_PenSetJoin(nullptr, OH_Drawing_PenLineJoinStyle::LINE_MITER_JOIN);
492     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
493 }
494 
495 /*
496  * @tc.name: NativeDrawingPenTest_PenSetShaderEffect001
497  * @tc.desc: test for OH_Drawing_PenSetShaderEffect.
498  * @tc.type: FUNC
499  * @tc.require: AR000GTO5R
500  */
501 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetShaderEffect001, TestSize.Level1)
502 {
503     OH_Drawing_PenSetShaderEffect(nullptr, nullptr);
504     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
505 }
506 
507 /*
508  * @tc.name: NativeDrawingPenTest_PenSetShaderEffect002
509  * @tc.desc: test for OH_Drawing_PenSetShaderEffect.
510  * @tc.type: FUNC
511  * @tc.require: AR000GTO5R
512  */
513 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetShaderEffect002, TestSize.Level1)
514 {
515     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
516     OH_Drawing_Point* point = OH_Drawing_PointCreate(100, 100); // point 100,100
517     uint32_t colors[] = { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF };
518     float pos[] = { 0, 0.5, 1.0 };
519     OH_Drawing_ShaderEffect* effect =
520         OH_Drawing_ShaderEffectCreateRadialGradient(point, 100, colors, pos, 3, OH_Drawing_TileMode::CLAMP);
521     EXPECT_NE(effect, nullptr);
522     OH_Drawing_PenSetShaderEffect(pen, effect);
523     OH_Drawing_PointDestroy(point);
524     OH_Drawing_ShaderEffectDestroy(effect);
525     OH_Drawing_PenDestroy(pen);
526 }
527 
528 /*
529  * @tc.name: NativeDrawingPenTest_PenSetShadowLayer001
530  * @tc.desc: test for OH_Drawing_PenSetShadowLayer.
531  * @tc.type: FUNC
532  * @tc.require: AR000GTO5R
533  */
534 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetShadowLayer001, TestSize.Level1)
535 {
536     OH_Drawing_PenSetShadowLayer(nullptr, nullptr);
537     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
538 }
539 
540 /*
541  * @tc.name: NativeDrawingPenTest_PenSetShadowLayer002
542  * @tc.desc: test for OH_Drawing_PenSetShadowLayer.
543  * @tc.type: FUNC
544  * @tc.require: AR000GTO5R
545  */
546 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetShadowLayer002, TestSize.Level1)
547 {
548     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
549     float blurRadius = 10;
550     float x = 100;
551     float y = 100;
552     uint32_t color = 0xFF00FF00;
553     OH_Drawing_ShadowLayer* shadowLayer = OH_Drawing_ShadowLayerCreate(blurRadius, x, y, color);
554     OH_Drawing_PenSetShadowLayer(pen, shadowLayer);
555     auto blurDrawLooperHandle = Helper::CastTo<OH_Drawing_ShadowLayer*, NativeHandle<BlurDrawLooper>*>(shadowLayer);
556     EXPECT_EQ(reinterpret_cast<Pen*>(pen)->GetLooper(), blurDrawLooperHandle->value);
557     OH_Drawing_ShadowLayerDestroy(shadowLayer);
558     OH_Drawing_PenDestroy(pen);
559 }
560 
561 /*
562  * @tc.name: NativeDrawingPenTest_PenSetFilter001
563  * @tc.desc: OH_Drawing_PenSetFilter.
564  * @tc.type: FUNC
565  * @tc.require: AR000GTO5R
566  */
567 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetFilter001, TestSize.Level1)
568 {
569     OH_Drawing_PenSetFilter(nullptr, nullptr);
570     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
571 }
572 
573 /*
574  * @tc.name: NativeDrawingPenTest_PenSetFilter002
575  * @tc.desc: test for OH_Drawing_PenSetFilter.
576  * @tc.type: FUNC
577  * @tc.require: AR000GTO5R
578  */
579 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetFilter002, TestSize.Level1)
580 {
581     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
582     OH_Drawing_PenSetFilter(pen, nullptr);
583     OH_Drawing_Filter* cFilter = nullptr;
584     OH_Drawing_PenGetFilter(pen, cFilter);
585     EXPECT_EQ(cFilter, nullptr);
586     OH_Drawing_PenDestroy(pen);
587 }
588 
589 /*
590  * @tc.name: NativeDrawingPenTest_PenSetFilter003
591  * @tc.desc: test for OH_Drawing_PenSetFilter.
592  * @tc.type: FUNC
593  * @tc.require: AR000GTO5R
594  */
595 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetFilter003, TestSize.Level1)
596 {
597     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
598     OH_Drawing_Filter* filter = OH_Drawing_FilterCreate();
599     OH_Drawing_PenSetFilter(pen, filter);
600     OH_Drawing_Filter* cFilter = nullptr;
601     OH_Drawing_PenGetFilter(pen, cFilter);
602     ASSERT_TRUE(cFilter == nullptr);
603     OH_Drawing_FilterDestroy(filter);
604     OH_Drawing_PenDestroy(pen);
605 }
606 
607 /*
608  * @tc.name: NativeDrawingPenTest_PenGetFilter001
609  * @tc.desc: test for OH_Drawing_PenGetFilter.
610  * @tc.type: FUNC
611  * @tc.require: AR000GTO5R
612  */
613 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetFilter001, TestSize.Level1)
614 {
615     OH_Drawing_PenGetFilter(nullptr, nullptr);
616     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
617 }
618 
619 /*
620  * @tc.name: NativeDrawingPenTest_PenGetFilter001
621  * @tc.desc: test for OH_Drawing_PenGetFilter.
622  * @tc.type: FUNC
623  * @tc.require: AR000GTO5R
624  */
625 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetFilter002, TestSize.Level1)
626 {
627     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
628     OH_Drawing_Filter* filter = nullptr;
629     OH_Drawing_PenGetFilter(pen, filter);
630     ASSERT_TRUE(filter == nullptr);
631     OH_Drawing_FilterDestroy(filter);
632     OH_Drawing_PenDestroy(pen);
633 }
634 
635 /*
636  * @tc.name: NativeDrawingPenTest_PenGetFilter001
637  * @tc.desc: test for OH_Drawing_PenGetFilter.
638  * @tc.type: FUNC
639  * @tc.require: AR000GTO5R
640  */
641 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetFilter003, TestSize.Level1)
642 {
643     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
644     OH_Drawing_Filter* filter = nullptr;
645     OH_Drawing_PenGetFilter(pen, filter);
646     ASSERT_TRUE(filter == nullptr);
647     OH_Drawing_FilterDestroy(filter);
648     OH_Drawing_PenDestroy(pen);
649 }
650 
651 /*
652  * @tc.name: NativeDrawingPenTest_PenReset
653  * @tc.desc: test for OH_Drawing_PenReset.
654  * @tc.type: FUNC
655  * @tc.require: AR000GTO5R
656  */
657 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenReset, TestSize.Level1)
658 {
659     OH_Drawing_PenReset(nullptr);
660     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
661 }
662 
663 } // namespace Drawing
664 } // namespace Rosen
665 } // namespace OHOS