• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2025 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 #include "native_color_space_manager.h"
35 
36 
37 #ifdef RS_ENABLE_VK
38 #include "platform/ohos/backend/rs_vulkan_context.h"
39 #endif
40 
41 using namespace testing;
42 using namespace testing::ext;
43 
44 namespace OHOS {
45 namespace Rosen {
46 namespace Drawing {
47 class NativeDrawingPenTest : public testing::Test {
48 public:
49     static void SetUpTestCase();
50     static void TearDownTestCase();
51     void SetUp() override;
52     void TearDown() override;
53 };
54 
SetUpTestCase()55 void NativeDrawingPenTest::SetUpTestCase()
56 {
57 #ifdef RS_ENABLE_VK
58     RsVulkanContext::SetRecyclable(false);
59 #endif
60 }
TearDownTestCase()61 void NativeDrawingPenTest::TearDownTestCase() {}
SetUp()62 void NativeDrawingPenTest::SetUp() {}
TearDown()63 void NativeDrawingPenTest::TearDown() {}
64 
CastToFilter(OH_Drawing_Filter * cFilter)65 static Filter* CastToFilter(OH_Drawing_Filter* cFilter)
66 {
67     return reinterpret_cast<Filter*>(cFilter);
68 }
69 
70 /*
71  * @tc.name: NativeDrawingPenTest_penCreate001
72  * @tc.desc: test for create drawing_pen.
73  * @tc.type: FUNC
74  * @tc.require: AR000GTO5R
75  */
76 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penCreate001, TestSize.Level1)
77 {
78     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
79     EXPECT_EQ(pen == nullptr, false);
80     OH_Drawing_PenDestroy(pen);
81 }
82 
83 /*
84  * @tc.name: NativeDrawingPenTest_penSetAntiAlias002
85  * @tc.desc: test for the get and set methods about AntiAlias for a pen.
86  * @tc.type: FUNC
87  * @tc.require: AR000GTO5R
88  */
89 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetAntiAlias002, TestSize.Level1)
90 {
91     OH_Drawing_Pen* pen1 = OH_Drawing_PenCreate();
92     OH_Drawing_PenSetAntiAlias(pen1, true);
93     EXPECT_EQ(OH_Drawing_PenIsAntiAlias(pen1), true);
94     OH_Drawing_PenSetAntiAlias(pen1, false);
95     EXPECT_EQ(OH_Drawing_PenIsAntiAlias(pen1), false);
96     OH_Drawing_PenDestroy(pen1);
97 }
98 
99 /*
100  * @tc.name: NativeDrawingPenTest_penSetColor003
101  * @tc.desc: test for the get and set methods about the color for a pen.
102  * @tc.type: FUNC
103  * @tc.require: AR000GTO5R
104  */
105 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetColor003, TestSize.Level1)
106 {
107     OH_Drawing_Pen* pen2 = OH_Drawing_PenCreate();
108     OH_Drawing_PenSetColor(pen2, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0x00, 0x00));
109     EXPECT_EQ(OH_Drawing_PenGetColor(pen2), 0xFFFF0000);
110     OH_Drawing_PenDestroy(pen2);
111 }
112 
113 /*
114  * @tc.name: NativeDrawingPenTest_penSetWidth004
115  * @tc.desc: test for the get and set methods about the width for a pen.
116  * @tc.type: FUNC
117  * @tc.require: AR000GTO5R
118  */
119 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetWidth004, TestSize.Level1)
120 {
121     OH_Drawing_Pen* pen3 = OH_Drawing_PenCreate();
122     OH_Drawing_PenSetWidth(pen3, 10);
123     EXPECT_EQ(OH_Drawing_PenGetWidth(pen3), 10);
124     OH_Drawing_PenDestroy(pen3);
125 }
126 
127 /*
128  * @tc.name: NativeDrawingPenTest_penSetMiterLimit005
129  * @tc.desc: test for the get and set methods about the miterLimit for a pen.
130  * @tc.type: FUNC
131  * @tc.require: AR000GTO5R
132  */
133 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetMiterLimit005, TestSize.Level1)
134 {
135     OH_Drawing_Pen* pen4 = OH_Drawing_PenCreate();
136     OH_Drawing_PenSetMiterLimit(pen4, 5);
137     EXPECT_EQ(OH_Drawing_PenGetMiterLimit(pen4), 5);
138     OH_Drawing_PenDestroy(pen4);
139 }
140 
141 /*
142  * @tc.name: NativeDrawingPenTest_penSetCap006
143  * @tc.desc: test for the get and set methods about the line cap style for a pen.
144  * @tc.type: FUNC
145  * @tc.require: AR000GTO5R
146  */
147 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetCap006, TestSize.Level1)
148 {
149     OH_Drawing_Pen* pen5 = OH_Drawing_PenCreate();
150     EXPECT_EQ(OH_Drawing_PenGetCap(nullptr), OH_Drawing_PenLineCapStyle::LINE_FLAT_CAP);
151     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
152     OH_Drawing_PenSetCap(pen5, OH_Drawing_PenLineCapStyle::LINE_SQUARE_CAP);
153     EXPECT_EQ(OH_Drawing_PenGetCap(pen5), OH_Drawing_PenLineCapStyle::LINE_SQUARE_CAP);
154     OH_Drawing_PenSetCap(pen5, OH_Drawing_PenLineCapStyle::LINE_FLAT_CAP);
155     EXPECT_EQ(OH_Drawing_PenGetCap(pen5), OH_Drawing_PenLineCapStyle::LINE_FLAT_CAP);
156     OH_Drawing_PenSetCap(pen5, OH_Drawing_PenLineCapStyle::LINE_ROUND_CAP);
157     EXPECT_EQ(OH_Drawing_PenGetCap(pen5), OH_Drawing_PenLineCapStyle::LINE_ROUND_CAP);
158     OH_Drawing_PenDestroy(pen5);
159 }
160 
161 /*
162  * @tc.name: NativeDrawingPenTest_penSetJoin007
163  * @tc.desc: test for the get and set methods about the line join style for a pen.
164  * @tc.type: FUNC
165  * @tc.require: AR000GTO5R
166  */
167 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetJoin007, TestSize.Level1)
168 {
169     OH_Drawing_Pen* pen6 = OH_Drawing_PenCreate();
170     OH_Drawing_PenSetJoin(pen6, OH_Drawing_PenLineJoinStyle::LINE_ROUND_JOIN);
171     EXPECT_EQ(OH_Drawing_PenGetJoin(pen6), OH_Drawing_PenLineJoinStyle::LINE_ROUND_JOIN);
172     OH_Drawing_PenSetJoin(pen6, OH_Drawing_PenLineJoinStyle::LINE_MITER_JOIN);
173     EXPECT_EQ(OH_Drawing_PenGetJoin(pen6), OH_Drawing_PenLineJoinStyle::LINE_MITER_JOIN);
174     OH_Drawing_PenSetJoin(pen6, OH_Drawing_PenLineJoinStyle::LINE_BEVEL_JOIN);
175     EXPECT_EQ(OH_Drawing_PenGetJoin(pen6), OH_Drawing_PenLineJoinStyle::LINE_BEVEL_JOIN);
176     OH_Drawing_PenDestroy(pen6);
177 }
178 
179 /*
180  * @tc.name: NativeDrawingPenTest_penSetBlendMode008
181  * @tc.desc: test for the get and set methods about the line join style for a pen.
182  * @tc.type: FUNC
183  * @tc.require: AR000GTO5R
184  */
185 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penSetBlendMode008, TestSize.Level1)
186 {
187     OH_Drawing_Pen* pen8 = OH_Drawing_PenCreate();
188     EXPECT_NE(pen8, nullptr);
189     OH_Drawing_PenSetBlendMode(pen8, OH_Drawing_BlendMode::BLEND_MODE_SRC);
190     OH_Drawing_PenSetBlendMode(nullptr, OH_Drawing_BlendMode::BLEND_MODE_SRC);
191     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
192     OH_Drawing_PenSetBlendMode(pen8, (OH_Drawing_BlendMode)(BLEND_MODE_LUMINOSITY + 1));
193     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
194     OH_Drawing_PenSetBlendMode(pen8, (OH_Drawing_BlendMode)(BLEND_MODE_CLEAR - 1));
195     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
196     OH_Drawing_PenDestroy(pen8);
197 }
198 
199 /*
200  * @tc.name: NativeDrawingPenTest_penReset009
201  * @tc.desc: test for the reset method for a pen.
202  * @tc.type: FUNC
203  * @tc.require: AR000GTO5R
204  */
205 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penReset009, TestSize.Level1)
206 {
207     OH_Drawing_Pen* pen9 = OH_Drawing_PenCreate();
208     OH_Drawing_PenSetAntiAlias(pen9, true);
209     OH_Drawing_PenSetColor(pen9, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0x00, 0x00));
210     OH_Drawing_PenSetWidth(pen9, 10);
211     OH_Drawing_PenSetMiterLimit(pen9, 5);
212     OH_Drawing_PenSetCap(pen9, OH_Drawing_PenLineCapStyle::LINE_ROUND_CAP);
213     OH_Drawing_PenSetJoin(pen9, OH_Drawing_PenLineJoinStyle::LINE_BEVEL_JOIN);
214 
215     OH_Drawing_PenReset(pen9);
216     EXPECT_EQ(OH_Drawing_PenIsAntiAlias(pen9), false);
217     EXPECT_EQ(OH_Drawing_PenGetColor(pen9), 0xFF000000);
218     EXPECT_EQ(OH_Drawing_PenGetWidth(pen9), 0);
219     EXPECT_EQ(OH_Drawing_PenGetMiterLimit(pen9), -1);
220     EXPECT_EQ(OH_Drawing_PenGetCap(pen9), OH_Drawing_PenLineCapStyle::LINE_FLAT_CAP);
221     EXPECT_EQ(OH_Drawing_PenGetJoin(pen9), OH_Drawing_PenLineJoinStyle::LINE_MITER_JOIN);
222 
223     OH_Drawing_PenDestroy(pen9);
224 }
225 
226 /*
227  * @tc.name: NativeDrawingPenTest_penGetFilter010
228  * @tc.desc: gets the filter from a pen.
229  * @tc.type: FUNC
230  * @tc.require: AR000GTO5R
231  */
232 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_penGetFilter010, TestSize.Level1)
233 {
234     OH_Drawing_Pen* pen9 = OH_Drawing_PenCreate();
235     EXPECT_NE(pen9, nullptr);
236     OH_Drawing_Filter* cFilter_ = OH_Drawing_FilterCreate();
237     EXPECT_NE(cFilter_, nullptr);
238 
239     OH_Drawing_ColorFilter* colorFilterTmp = OH_Drawing_ColorFilterCreateLinearToSrgbGamma();
240     OH_Drawing_FilterSetColorFilter(cFilter_, nullptr);
241     OH_Drawing_FilterGetColorFilter(cFilter_, colorFilterTmp);
242     NativeHandle<ColorFilter>* colorFilterHandle = Helper::CastTo<OH_Drawing_ColorFilter*,
243         NativeHandle<ColorFilter>*>(colorFilterTmp);
244     EXPECT_NE(colorFilterHandle, nullptr);
245     EXPECT_NE(colorFilterHandle->value, nullptr);
246     EXPECT_EQ(colorFilterHandle->value->GetType(), ColorFilter::FilterType::NO_TYPE);
247 
248     OH_Drawing_Filter* tmpFilter_ = OH_Drawing_FilterCreate();
249     EXPECT_NE(cFilter_, nullptr);
250     EXPECT_NE(tmpFilter_, nullptr);
251     OH_Drawing_ColorFilter* cColorFilter_ = OH_Drawing_ColorFilterCreateBlendMode(0xFF0000FF, BLEND_MODE_COLOR);
252     OH_Drawing_FilterSetColorFilter(cFilter_, cColorFilter_);
253     OH_Drawing_PenSetFilter(pen9, cFilter_);
254     OH_Drawing_PenGetFilter(pen9, tmpFilter_);
255 
256     EXPECT_NE(CastToFilter(tmpFilter_)->GetColorFilter(), nullptr);
257     EXPECT_EQ(CastToFilter(tmpFilter_)->GetColorFilter()->GetType(), ColorFilter::FilterType::BLEND_MODE);
258     OH_Drawing_FilterDestroy(cFilter_);
259     OH_Drawing_FilterDestroy(tmpFilter_);
260     OH_Drawing_ColorFilterDestroy(cColorFilter_);
261     OH_Drawing_ColorFilterDestroy(colorFilterTmp);
262     OH_Drawing_PenDestroy(pen9);
263 }
264 
265 /*
266  * @tc.name: NativeDrawingPenTest_PenSetShadowLayer011
267  * @tc.desc: test for the set methods of pen.
268  * @tc.type: FUNC
269  * @tc.require: AR000GTO5R
270  */
271 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetShadowLayer011, TestSize.Level1)
272 {
273     // blurRadius:3.f, offset:(-3.f, 3.f), shadowColor:green
274     OH_Drawing_ShadowLayer* shadowLayer = OH_Drawing_ShadowLayerCreate(3.f, -3.f, 3.f, 0xFF00FF00);
275     EXPECT_NE(shadowLayer, nullptr);
276     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
277     OH_Drawing_PenSetShadowLayer(nullptr, shadowLayer);
278     OH_Drawing_PenSetShadowLayer(pen, nullptr);
279     OH_Drawing_PenSetShadowLayer(pen, shadowLayer);
280     OH_Drawing_ShadowLayerDestroy(shadowLayer);
281     OH_Drawing_PenDestroy(pen);
282 }
283 
284 /*
285  * @tc.name: NativeDrawingPenTest_PenCopy012
286  * @tc.desc: test for creates an <b>OH_Drawing_Pen</b> copy object.
287  * @tc.type: FUNC
288  * @tc.require: AR000GTO5R
289  */
290 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenCopy012, TestSize.Level1)
291 {
292     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
293     EXPECT_NE(OH_Drawing_PenCopy(pen), nullptr);
294     pen = nullptr;
295     EXPECT_EQ(OH_Drawing_PenCopy(pen), nullptr);
296     OH_Drawing_PenDestroy(pen);
297 }
298 
299 /*
300  * @tc.name: NativeDrawingPenTest_PenGetFillPath013
301  * @tc.desc: test for gets the filled equivalent of the src path.
302  * @tc.type: FUNC
303  * @tc.require: AR000GTO5R
304  */
305 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetFillPath013, TestSize.Level1)
306 {
307     OH_Drawing_Pen *pen = OH_Drawing_PenCreate();
308     OH_Drawing_PenSetWidth(pen, 10); // 10: width of pen
309     OH_Drawing_Path *dst = OH_Drawing_PathCreate();
310     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(10, 10, 20, 20); // rect left[10], top[10], right[20], bottom[20]
311     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
312     EXPECT_FALSE(OH_Drawing_PenGetFillPath(pen, nullptr, dst, rect, matrix));
313 
314     OH_Drawing_Path *src = OH_Drawing_PathCreate();
315     OH_Drawing_PathMoveTo(src, 10, 10); // 10: point's x, 10 point's y
316     OH_Drawing_PathLineTo(src, 20, 20); // 20: point's x, 20 point's y
317     EXPECT_TRUE(OH_Drawing_PenGetFillPath(pen, src, dst, rect, matrix));
318 
319     OH_Drawing_PenDestroy(pen);
320     OH_Drawing_PathDestroy(src);
321     OH_Drawing_PathDestroy(dst);
322     OH_Drawing_RectDestroy(rect);
323     OH_Drawing_MatrixDestroy(matrix);
324 }
325 
326 /*
327  * @tc.name: NativeDrawingPenTest_PenIsAntiAlias
328  * @tc.desc: test for OH_Drawing_PenIsAntiAlias.
329  * @tc.type: FUNC
330  * @tc.require: AR000GTO5R
331  */
332 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenIsAntiAlias, TestSize.Level1)
333 {
334     ASSERT_TRUE(OH_Drawing_PenIsAntiAlias(nullptr) == false);
335     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
336 }
337 
338 /*
339  * @tc.name: NativeDrawingPenTest_PenSetAntiAlias
340  * @tc.desc: test for OH_Drawing_PenSetAntiAlias.
341  * @tc.type: FUNC
342  * @tc.require: AR000GTO5R
343  */
344 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetAntiAlias, TestSize.Level1)
345 {
346     OH_Drawing_PenSetAntiAlias(nullptr, false);
347     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
348 }
349 
350 /*
351  * @tc.name: NativeDrawingPenTest_PenGetColor
352  * @tc.desc: test for OH_Drawing_PenGetColor.
353  * @tc.type: FUNC
354  * @tc.require: AR000GTO5R
355  */
356 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetColor, TestSize.Level1)
357 {
358     ASSERT_TRUE(OH_Drawing_PenGetColor(nullptr) == 0);
359     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
360 }
361 
362 /*
363  * @tc.name: NativeDrawingPenTest_PenSetColor
364  * @tc.desc: test for OH_Drawing_PenSetColor.
365  * @tc.type: FUNC
366  * @tc.require: AR000GTO5R
367  */
368 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetColor, TestSize.Level1)
369 {
370     OH_Drawing_PenSetColor(nullptr, 0xFFFFFFFF);
371     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
372 }
373 
374 /*
375  * @tc.name: NativeDrawingPenTest_PenGetAlpha
376  * @tc.desc: test for OH_Drawing_PenGetAlpha.
377  * @tc.type: FUNC
378  * @tc.require: AR000GTO5R
379  */
380 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetAlpha, TestSize.Level1)
381 {
382     ASSERT_TRUE(OH_Drawing_PenGetAlpha(nullptr) == 0);
383     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
384 }
385 
386 /*
387  * @tc.name: NativeDrawingPenTest_PenGetAlpha002
388  * @tc.desc: test for OH_Drawing_PenGetAlpha.
389  * @tc.type: FUNC
390  * @tc.require: AR000GTO5R
391  */
392 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetAlpha002, TestSize.Level1)
393 {
394     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
395     OH_Drawing_PenSetAlpha(pen, 0xFF);
396     ASSERT_TRUE(OH_Drawing_PenGetAlpha(pen) == 0xFF);
397     OH_Drawing_PenDestroy(pen);
398 }
399 
400 /*
401  * @tc.name: NativeDrawingPenTest_PenSetAlpha
402  * @tc.desc: test for OH_Drawing_PenSetAlpha.
403  * @tc.type: FUNC
404  * @tc.require: AR000GTO5R
405  */
406 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetAlpha, TestSize.Level1)
407 {
408     OH_Drawing_PenSetAlpha(nullptr, 0xFF);
409     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
410 }
411 
412 /*
413  * @tc.name: NativeDrawingPenTest_PenSetAlpha
414  * @tc.desc: test for OH_Drawing_PenSetAlpha.
415  * @tc.type: FUNC
416  * @tc.require: AR000GTO5R
417  */
418 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetAlpha002, TestSize.Level1)
419 {
420     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
421     OH_Drawing_PenSetAlpha(pen, 0xFF);
422     EXPECT_EQ(OH_Drawing_PenGetAlpha(pen), 0xFF);
423     OH_Drawing_PenDestroy(pen);
424 }
425 
426 /*
427  * @tc.name: NativeDrawingPenTest_PenGetWidth
428  * @tc.desc: test for OH_Drawing_PenGetWidth.
429  * @tc.type: FUNC
430  * @tc.require: AR000GTO5R
431  */
432 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetWidth, TestSize.Level1)
433 {
434     EXPECT_EQ(OH_Drawing_PenGetWidth(nullptr), 0);
435     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
436 }
437 
438 /*
439  * @tc.name: NativeDrawingPenTest_PenSetWidth
440  * @tc.desc: test for OH_Drawing_PenSetWidth.
441  * @tc.type: FUNC
442  * @tc.require: AR000GTO5R
443  */
444 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetWidth, TestSize.Level1)
445 {
446     OH_Drawing_PenSetWidth(nullptr, 10);
447     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
448 }
449 
450 /*
451  * @tc.name: NativeDrawingPenTest_PenGetMiterLimit
452  * @tc.desc: test for OH_Drawing_PenGetMiterLimit.
453  * @tc.type: FUNC
454  * @tc.require: AR000GTO5R
455  */
456 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetMiterLimit, TestSize.Level1)
457 {
458     OH_Drawing_PenGetMiterLimit(nullptr);
459     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
460 }
461 
462 /*
463  * @tc.name: NativeDrawingPenTest_PenSetMiterLimit
464  * @tc.desc: test for OH_Drawing_PenSetMiterLimit.
465  * @tc.type: FUNC
466  * @tc.require: AR000GTO5R
467  */
468 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetMiterLimit, TestSize.Level1)
469 {
470     OH_Drawing_PenSetMiterLimit(nullptr, 0);
471     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
472 }
473 
474 /*
475  * @tc.name: NativeDrawingPenTest_PenSetCap
476  * @tc.desc: test for OH_Drawing_PenSetCap.
477  * @tc.type: FUNC
478  * @tc.require: AR000GTO5R
479  */
480 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetCap, TestSize.Level1)
481 {
482     OH_Drawing_PenSetCap(nullptr, OH_Drawing_PenLineCapStyle::LINE_FLAT_CAP);
483     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
484 }
485 
486 /*
487  * @tc.name: NativeDrawingPenTest_PenGetJoin001
488  * @tc.desc: test for OH_Drawing_PenGetJoin.
489  * @tc.type: FUNC
490  * @tc.require: AR000GTO5R
491  */
492 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetJoin001, TestSize.Level1)
493 {
494     ASSERT_TRUE(OH_Drawing_PenGetJoin(nullptr) == OH_Drawing_PenLineJoinStyle::LINE_MITER_JOIN);
495     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
496 }
497 
498 /*
499  * @tc.name: NativeDrawingPenTest_PenSetJoin001
500  * @tc.desc: test for OH_Drawing_PenSetJoin.
501  * @tc.type: FUNC
502  * @tc.require: AR000GTO5R
503  */
504 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetJoin001, TestSize.Level1)
505 {
506     OH_Drawing_PenSetJoin(nullptr, OH_Drawing_PenLineJoinStyle::LINE_MITER_JOIN);
507     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
508 }
509 
510 /*
511  * @tc.name: NativeDrawingPenTest_PenSetShaderEffect001
512  * @tc.desc: test for OH_Drawing_PenSetShaderEffect.
513  * @tc.type: FUNC
514  * @tc.require: AR000GTO5R
515  */
516 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetShaderEffect001, TestSize.Level1)
517 {
518     OH_Drawing_PenSetShaderEffect(nullptr, nullptr);
519     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
520 }
521 
522 /*
523  * @tc.name: NativeDrawingPenTest_PenSetShaderEffect002
524  * @tc.desc: test for OH_Drawing_PenSetShaderEffect.
525  * @tc.type: FUNC
526  * @tc.require: AR000GTO5R
527  */
528 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetShaderEffect002, TestSize.Level1)
529 {
530     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
531     OH_Drawing_Point* point = OH_Drawing_PointCreate(100, 100); // point 100,100
532     uint32_t colors[] = { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF };
533     float pos[] = { 0, 0.5, 1.0 };
534     OH_Drawing_ShaderEffect* effect =
535         OH_Drawing_ShaderEffectCreateRadialGradient(point, 100, colors, pos, 3, OH_Drawing_TileMode::CLAMP);
536     ASSERT_FALSE(effect == nullptr);
537     OH_Drawing_PenSetShaderEffect(pen, effect);
538     OH_Drawing_PointDestroy(point);
539     OH_Drawing_ShaderEffectDestroy(effect);
540     OH_Drawing_PenDestroy(pen);
541 }
542 
543 /*
544  * @tc.name: NativeDrawingPenTest_PenSetShadowLayer001
545  * @tc.desc: test for OH_Drawing_PenSetShadowLayer.
546  * @tc.type: FUNC
547  * @tc.require: AR000GTO5R
548  */
549 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetShadowLayer001, TestSize.Level1)
550 {
551     OH_Drawing_PenSetShadowLayer(nullptr, nullptr);
552     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
553 }
554 
555 /*
556  * @tc.name: NativeDrawingPenTest_PenSetShadowLayer002
557  * @tc.desc: test for OH_Drawing_PenSetShadowLayer.
558  * @tc.type: FUNC
559  * @tc.require: AR000GTO5R
560  */
561 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetShadowLayer002, TestSize.Level1)
562 {
563     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
564     float blurRadius = 10;
565     float x = 100;
566     float y = 100;
567     uint32_t color = 0xFF00FF00;
568     OH_Drawing_ShadowLayer* shadowLayer = OH_Drawing_ShadowLayerCreate(blurRadius, x, y, color);
569     OH_Drawing_PenSetShadowLayer(pen, shadowLayer);
570     auto blurDrawLooperHandle = Helper::CastTo<OH_Drawing_ShadowLayer*, NativeHandle<BlurDrawLooper>*>(shadowLayer);
571     EXPECT_EQ(reinterpret_cast<Pen*>(pen)->GetLooper(), blurDrawLooperHandle->value);
572     OH_Drawing_ShadowLayerDestroy(shadowLayer);
573     OH_Drawing_PenDestroy(pen);
574 }
575 
576 /*
577  * @tc.name: NativeDrawingPenTest_PenSetFilter001
578  * @tc.desc: OH_Drawing_PenSetFilter.
579  * @tc.type: FUNC
580  * @tc.require: AR000GTO5R
581  */
582 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetFilter001, TestSize.Level1)
583 {
584     OH_Drawing_PenSetFilter(nullptr, nullptr);
585     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
586 }
587 
588 /*
589  * @tc.name: NativeDrawingPenTest_PenSetFilter002
590  * @tc.desc: test for OH_Drawing_PenSetFilter.
591  * @tc.type: FUNC
592  * @tc.require: AR000GTO5R
593  */
594 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetFilter002, TestSize.Level1)
595 {
596     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
597     OH_Drawing_PenSetFilter(pen, nullptr);
598     OH_Drawing_Filter* cFilter = nullptr;
599     OH_Drawing_PenGetFilter(pen, cFilter);
600     EXPECT_EQ(cFilter, nullptr);
601     OH_Drawing_PenDestroy(pen);
602 }
603 
604 /*
605  * @tc.name: NativeDrawingPenTest_PenSetFilter003
606  * @tc.desc: test for OH_Drawing_PenSetFilter.
607  * @tc.type: FUNC
608  * @tc.require: AR000GTO5R
609  */
610 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetFilter003, TestSize.Level1)
611 {
612     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
613     OH_Drawing_Filter* filter = OH_Drawing_FilterCreate();
614     OH_Drawing_PenSetFilter(pen, filter);
615     OH_Drawing_Filter* cFilter = nullptr;
616     OH_Drawing_PenGetFilter(pen, cFilter);
617     ASSERT_TRUE(cFilter == nullptr);
618     OH_Drawing_FilterDestroy(filter);
619     OH_Drawing_PenDestroy(pen);
620 }
621 
622 /*
623  * @tc.name: NativeDrawingPenTest_PenGetFilter001
624  * @tc.desc: test for OH_Drawing_PenGetFilter.
625  * @tc.type: FUNC
626  * @tc.require: AR000GTO5R
627  */
628 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetFilter001, TestSize.Level1)
629 {
630     OH_Drawing_PenGetFilter(nullptr, nullptr);
631     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
632 }
633 
634 /*
635  * @tc.name: NativeDrawingPenTest_PenGetFilter001
636  * @tc.desc: test for OH_Drawing_PenGetFilter.
637  * @tc.type: FUNC
638  * @tc.require: AR000GTO5R
639  */
640 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetFilter002, TestSize.Level1)
641 {
642     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
643     OH_Drawing_Filter* filter = nullptr;
644     OH_Drawing_PenGetFilter(pen, filter);
645     ASSERT_TRUE(filter == nullptr);
646     OH_Drawing_FilterDestroy(filter);
647     OH_Drawing_PenDestroy(pen);
648 }
649 
650 /*
651  * @tc.name: NativeDrawingPenTest_PenGetFilter001
652  * @tc.desc: test for OH_Drawing_PenGetFilter.
653  * @tc.type: FUNC
654  * @tc.require: AR000GTO5R
655  */
656 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetFilter003, TestSize.Level1)
657 {
658     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
659     OH_Drawing_Filter* filter = nullptr;
660     OH_Drawing_PenGetFilter(pen, filter);
661     ASSERT_TRUE(filter == nullptr);
662     OH_Drawing_FilterDestroy(filter);
663     OH_Drawing_PenDestroy(pen);
664 }
665 
666 /*
667  * @tc.name: NativeDrawingPenTest_PenReset
668  * @tc.desc: test for OH_Drawing_PenReset.
669  * @tc.type: FUNC
670  * @tc.require: AR000GTO5R
671  */
672 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenReset, TestSize.Level1)
673 {
674     OH_Drawing_PenReset(nullptr);
675     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
676 }
677 
678 /*
679  * @tc.name: OH_Drawing_PenSetColor4f
680  * @tc.desc: test for OH_Drawing_PenSetColor4f.
681  * @tc.type: FUNC
682  * @tc.require: IC9835
683  */
684 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetColor4f, TestSize.Level1)
685 {
686     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
687     EXPECT_NE(pen, nullptr);
688     OH_NativeColorSpaceManager* colorSpaceManager =
689         OH_NativeColorSpaceManager_CreateFromName(ColorSpaceName::ADOBE_RGB);
690     EXPECT_EQ(OH_Drawing_PenSetColor4f(nullptr, 0.2f, 0.3f, 0.4f, 0.1f, colorSpaceManager),
691         OH_DRAWING_ERROR_INVALID_PARAMETER);
692     EXPECT_EQ(OH_Drawing_PenSetColor4f(pen, 0.2f, 0.3f, 0.4f, 0.1f, colorSpaceManager), OH_DRAWING_SUCCESS);
693     EXPECT_EQ(OH_Drawing_PenSetColor4f(pen, 0.2f, 0.3f, 0.4f, 0.1f, nullptr), OH_DRAWING_SUCCESS);
694     OH_Drawing_PenDestroy(pen);
695     OH_NativeColorSpaceManager_Destroy(colorSpaceManager);
696 }
697 
698 /*
699  * @tc.name: OH_Drawing_PenSetColor4f001
700  * @tc.desc: test for OH_Drawing_PenSetColor4f.
701  * @tc.type: FUNC
702  * @tc.require: IC9835
703  */
704 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenSetColor4f001, TestSize.Level1)
705 {
706     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
707     EXPECT_NE(pen, nullptr);
708     OH_NativeColorSpaceManager* colorSpaceManager =
709         OH_NativeColorSpaceManager_CreateFromName(ColorSpaceName::ADOBE_RGB);
710     float a = 0;
711     float r = 0;
712     float g = 0;
713     float b = 0;
714     EXPECT_EQ(OH_Drawing_PenSetColor4f(pen, 1.01f, 1.1f, 1.5f, 1.4f, colorSpaceManager), OH_DRAWING_SUCCESS);
715     EXPECT_EQ(OH_Drawing_PenGetAlphaFloat(pen, &a), OH_DRAWING_SUCCESS);
716     EXPECT_EQ(OH_Drawing_PenGetRedFloat(pen, &r), OH_DRAWING_SUCCESS);
717     EXPECT_EQ(OH_Drawing_PenGetGreenFloat(pen, &g), OH_DRAWING_SUCCESS);
718     EXPECT_EQ(OH_Drawing_PenGetBlueFloat(pen, &b), OH_DRAWING_SUCCESS);
719     EXPECT_TRUE(std::abs(a - 1.0f) < 0.01);
720     EXPECT_TRUE(std::abs(r - 1.0f) < 0.01);
721     EXPECT_TRUE(std::abs(g - 1.0f) < 0.01);
722     EXPECT_TRUE(std::abs(b - 1.0f) < 0.01);
723 
724     EXPECT_EQ(OH_Drawing_PenSetColor4f(pen, -0.1f, -1.1f, -1.5f, -1.4f, colorSpaceManager), OH_DRAWING_SUCCESS);
725     EXPECT_EQ(OH_Drawing_PenGetAlphaFloat(pen, &a), OH_DRAWING_SUCCESS);
726     EXPECT_EQ(OH_Drawing_PenGetRedFloat(pen, &r), OH_DRAWING_SUCCESS);
727     EXPECT_EQ(OH_Drawing_PenGetGreenFloat(pen, &g), OH_DRAWING_SUCCESS);
728     EXPECT_EQ(OH_Drawing_PenGetBlueFloat(pen, &b), OH_DRAWING_SUCCESS);
729     EXPECT_TRUE(std::abs(a) < 0.01);
730     EXPECT_TRUE(std::abs(r) < 0.01);
731     EXPECT_TRUE(std::abs(g) < 0.01);
732     EXPECT_TRUE(std::abs(b) < 0.01);
733     OH_Drawing_PenDestroy(pen);
734     OH_NativeColorSpaceManager_Destroy(colorSpaceManager);
735 }
736 
737 /*
738  * @tc.name: OH_Drawing_PenGetAlphaFloat
739  * @tc.desc: test for OH_Drawing_PenGetAlphaFloat.
740  * @tc.type: FUNC
741  * @tc.require: IC9835
742  */
743 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetAlphaFloat, TestSize.Level1)
744 {
745     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
746     EXPECT_NE(pen, nullptr);
747     float a = 0.4f;
748     OH_NativeColorSpaceManager* colorSpaceManager = nullptr;
749     OH_Drawing_PenSetColor4f(pen, 0.2f, 0.3f, 0.4f, 0.1f, colorSpaceManager);
750     EXPECT_EQ(OH_Drawing_PenGetAlphaFloat(nullptr, &a), OH_DRAWING_ERROR_INVALID_PARAMETER);
751     EXPECT_EQ(OH_Drawing_PenGetAlphaFloat(nullptr, nullptr), OH_DRAWING_ERROR_INVALID_PARAMETER);
752     EXPECT_EQ(OH_Drawing_PenGetAlphaFloat(pen, nullptr), OH_DRAWING_ERROR_INVALID_PARAMETER);
753     EXPECT_EQ(OH_Drawing_PenGetAlphaFloat(pen, &a), OH_DRAWING_SUCCESS);
754     EXPECT_TRUE(std::abs(a - 0.2f) < 0.01);
755     OH_Drawing_PenDestroy(pen);
756 }
757 
758 /*
759  * @tc.name: OH_Drawing_PenGetRedFloat
760  * @tc.desc: test for OH_Drawing_PenGetRedFloat.
761  * @tc.type: FUNC
762  * @tc.require: IC9835
763  */
764 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetRedFloat, TestSize.Level1)
765 {
766     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
767     EXPECT_NE(pen, nullptr);
768     float r = 0.1f;
769     OH_NativeColorSpaceManager* colorSpaceManager = nullptr;
770     OH_Drawing_PenSetColor4f(pen, 0.2f, 0.3f, 0.4f, 0.1f, colorSpaceManager);
771     EXPECT_EQ(OH_Drawing_PenGetRedFloat(nullptr, &r), OH_DRAWING_ERROR_INVALID_PARAMETER);
772     EXPECT_EQ(OH_Drawing_PenGetRedFloat(nullptr, nullptr), OH_DRAWING_ERROR_INVALID_PARAMETER);
773     EXPECT_EQ(OH_Drawing_PenGetRedFloat(pen, nullptr), OH_DRAWING_ERROR_INVALID_PARAMETER);
774     EXPECT_EQ(OH_Drawing_PenGetRedFloat(pen, &r), OH_DRAWING_SUCCESS);
775     OH_Drawing_PenDestroy(pen);
776     EXPECT_TRUE(std::abs(r - 0.3f) < 0.01);
777 }
778 
779 /*
780  * @tc.name: OH_Drawing_PenGetGreenFloat
781  * @tc.desc: test for OH_Drawing_PenGetGreenFloat.
782  * @tc.type: FUNC
783  * @tc.require: IC9835
784  */
785 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetGreenFloat, TestSize.Level1)
786 {
787     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
788     EXPECT_NE(pen, nullptr);
789     float g = 0.5f;
790     OH_NativeColorSpaceManager* colorSpaceManager = nullptr;
791     OH_Drawing_PenSetColor4f(pen, 0.2f, 0.3f, 0.4f, 0.1f, colorSpaceManager);
792     EXPECT_EQ(OH_Drawing_PenGetGreenFloat(nullptr, &g), OH_DRAWING_ERROR_INVALID_PARAMETER);
793     EXPECT_EQ(OH_Drawing_PenGetGreenFloat(nullptr, nullptr), OH_DRAWING_ERROR_INVALID_PARAMETER);
794     EXPECT_EQ(OH_Drawing_PenGetGreenFloat(pen, nullptr), OH_DRAWING_ERROR_INVALID_PARAMETER);
795     EXPECT_EQ(OH_Drawing_PenGetGreenFloat(pen, &g), OH_DRAWING_SUCCESS);
796     EXPECT_TRUE(std::abs(g - 0.4f) < 0.01);
797     OH_Drawing_PenDestroy(pen);
798 }
799 
800 /*
801  * @tc.name: OH_Drawing_PenGetBlueFloat
802  * @tc.desc: test for OH_Drawing_PenGetBlueFloat.
803  * @tc.type: FUNC
804  * @tc.require: IC9835
805  */
806 HWTEST_F(NativeDrawingPenTest, NativeDrawingPenTest_PenGetBlueFloat, TestSize.Level1)
807 {
808     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
809     EXPECT_NE(pen, nullptr);
810     float b = 0.5f;
811     OH_NativeColorSpaceManager* colorSpaceManager = nullptr;
812     OH_Drawing_PenSetColor4f(pen, 0.2f, 0.3f, 0.4f, 0.1f, colorSpaceManager);
813     EXPECT_EQ(OH_Drawing_PenGetBlueFloat(nullptr, &b), OH_DRAWING_ERROR_INVALID_PARAMETER);
814     EXPECT_EQ(OH_Drawing_PenGetBlueFloat(nullptr, nullptr), OH_DRAWING_ERROR_INVALID_PARAMETER);
815     EXPECT_EQ(OH_Drawing_PenGetBlueFloat(pen, nullptr), OH_DRAWING_ERROR_INVALID_PARAMETER);
816     EXPECT_EQ(OH_Drawing_PenGetBlueFloat(pen, &b), OH_DRAWING_SUCCESS);
817     EXPECT_TRUE(std::abs(b - 0.1f) < 0.01);
818     OH_Drawing_PenDestroy(pen);
819 }
820 } // namespace Drawing
821 } // namespace Rosen
822 } // namespace OHOS