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