• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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_error_code.h"
17 #include "drawing_image.h"
18 #include "drawing_matrix.h"
19 #include "drawing_pixel_map.h"
20 #include "drawing_point.h"
21 #include "drawing_sampling_options.h"
22 #include "drawing_shader_effect.h"
23 #include "gtest/gtest.h"
24 #include "image/pixelmap_native.h"
25 
26 #ifdef RS_ENABLE_VK
27 #include "platform/ohos/backend/rs_vulkan_context.h"
28 #endif
29 
30 using namespace testing;
31 using namespace testing::ext;
32 
33 namespace OHOS {
34 namespace Rosen {
35 namespace Drawing {
36 class NativeDrawingShaderEffectTest : public testing::Test {
37 public:
38     static void SetUpTestCase();
39     static void TearDownTestCase();
40     void SetUp() override;
41     void TearDown() override;
42 };
43 
44 constexpr uint32_t POINT_NUM = 3;
45 
SetUpTestCase()46 void NativeDrawingShaderEffectTest::SetUpTestCase()
47 {
48 #ifdef RS_ENABLE_VK
49     RsVulkanContext::SetRecyclable(false);
50 #endif
51 }
TearDownTestCase()52 void NativeDrawingShaderEffectTest::TearDownTestCase() {}
SetUp()53 void NativeDrawingShaderEffectTest::SetUp() {}
TearDown()54 void NativeDrawingShaderEffectTest::TearDown() {}
55 
56 constexpr uint32_t NUM_20 = 20;
57 constexpr uint32_t NUM_300 = 300;
58 
59 /*
60  * @tc.name: OH_Drawing_ShaderEffectCreateLinearGradient
61  * @tc.desc: Test OH_Drawing_ShaderEffectCreateLinearGradient
62  * @tc.type: FUNC
63  */
64 HWTEST_F(NativeDrawingShaderEffectTest, OH_Drawing_ShaderEffectCreateLinearGradient, TestSize.Level1)
65 {
66     OH_Drawing_Point* startPt = OH_Drawing_PointCreate(NUM_20, NUM_20);
67     OH_Drawing_Point* endPt = OH_Drawing_PointCreate(NUM_300, NUM_300);
68     uint32_t colors[] = { 0xFFFFFFFF };
69     float pos[] = { 0.0f, 1.0f };
70     OH_Drawing_ShaderEffect* effect =
71         OH_Drawing_ShaderEffectCreateLinearGradient(nullptr, nullptr, nullptr, nullptr, 1, OH_Drawing_TileMode::CLAMP);
72     ASSERT_TRUE(effect == nullptr);
73     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
74     OH_Drawing_ShaderEffectCreateLinearGradient(nullptr, endPt, colors, pos, 1, OH_Drawing_TileMode::CLAMP);
75     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
76     OH_Drawing_ShaderEffectCreateLinearGradient(startPt, nullptr, colors, pos, 1, OH_Drawing_TileMode::CLAMP);
77     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
78     OH_Drawing_ShaderEffectCreateLinearGradient(startPt, endPt, nullptr, pos, 1, OH_Drawing_TileMode::CLAMP);
79     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
80     OH_Drawing_ShaderEffect* effect2 = OH_Drawing_ShaderEffectCreateLinearGradient(startPt,
81         endPt, nullptr, pos, 1, static_cast<OH_Drawing_TileMode>(-1));
82     EXPECT_EQ(effect2, nullptr);
83     OH_Drawing_ShaderEffect* effect3 = OH_Drawing_ShaderEffectCreateLinearGradient(startPt,
84         endPt, nullptr, pos, 1, static_cast<OH_Drawing_TileMode>(99));
85     EXPECT_EQ(effect3, nullptr);
86     OH_Drawing_ShaderEffect* effect4 = OH_Drawing_ShaderEffectCreateLinearGradient(startPt,
87         endPt, colors, nullptr, 1, OH_Drawing_TileMode::CLAMP);
88     EXPECT_NE(effect4, nullptr);
89     OH_Drawing_ShaderEffectDestroy(effect4);
90     OH_Drawing_PointDestroy(startPt);
91     OH_Drawing_PointDestroy(endPt);
92 }
93 
94 /*
95  * @tc.name: OH_Drawing_ShaderEffectCreateRadialGradient
96  * @tc.desc: Test OH_Drawing_ShaderEffectCreateRadialGradient
97  * @tc.type: FUNC
98  */
99 HWTEST_F(NativeDrawingShaderEffectTest, OH_Drawing_ShaderEffectCreateRadialGradient001, TestSize.Level1)
100 {
101     OH_Drawing_ShaderEffect* effect =
102         OH_Drawing_ShaderEffectCreateRadialGradient(nullptr, 1, nullptr, nullptr, 1, OH_Drawing_TileMode::CLAMP);
103     ASSERT_TRUE(effect == nullptr);
104     uint32_t gColors[] = { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, 0xFFFFFFFF, 0xFF000000 };
105     float_t gPos[] = { 0.25f, 0.75f };
106     float radius = 200;
107     float x = 200;
108     float y = 200;
109     OH_Drawing_Point* centerPt = OH_Drawing_PointCreate(x, y);
110     OH_Drawing_ShaderEffect* effect1 =
111         OH_Drawing_ShaderEffectCreateRadialGradient(centerPt, radius, gColors, gPos, 1, OH_Drawing_TileMode::REPEAT);
112     ASSERT_TRUE(effect1 != nullptr);
113     OH_Drawing_ShaderEffectCreateRadialGradient(nullptr, radius, gColors, gPos, 1, OH_Drawing_TileMode::REPEAT);
114     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
115     OH_Drawing_ShaderEffectCreateRadialGradient(centerPt, radius, nullptr, gPos, 1, OH_Drawing_TileMode::REPEAT);
116     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
117     EXPECT_EQ(OH_Drawing_ShaderEffectCreateRadialGradient(centerPt, radius, gColors, gPos, 1,
118         static_cast<OH_Drawing_TileMode>(-1)), nullptr);
119     EXPECT_EQ(OH_Drawing_ShaderEffectCreateRadialGradient(centerPt, radius, gColors, gPos, 1,
120         static_cast<OH_Drawing_TileMode>(99)), nullptr);
121     OH_Drawing_ShaderEffect* effect2 = OH_Drawing_ShaderEffectCreateRadialGradient(centerPt,
122         radius, gColors, nullptr, 1, OH_Drawing_TileMode::REPEAT);
123     EXPECT_NE(effect2, nullptr);
124     OH_Drawing_ShaderEffectDestroy(effect1);
125     OH_Drawing_ShaderEffectDestroy(effect2);
126 }
127 
128 /*
129  * @tc.name: OH_Drawing_ShaderEffectCreateImageShader
130  * @tc.desc: Test OH_Drawing_ShaderEffectCreateImageShader
131  * @tc.type: FUNC
132  */
133 HWTEST_F(NativeDrawingShaderEffectTest, OH_Drawing_ShaderEffectCreateImageShader, TestSize.Level1)
134 {
135     OH_Drawing_Image* image = OH_Drawing_ImageCreate();
136     ASSERT_TRUE(image != nullptr);
137     OH_Drawing_SamplingOptions* options = OH_Drawing_SamplingOptionsCreate(FILTER_MODE_LINEAR, MIPMAP_MODE_LINEAR);
138     ASSERT_TRUE(options != nullptr);
139     OH_Drawing_Matrix* matrix = nullptr;
140     OH_Drawing_ShaderEffect* effect = OH_Drawing_ShaderEffectCreateImageShader(image, CLAMP, CLAMP, options, matrix);
141     ASSERT_TRUE(effect != nullptr);
142     OH_Drawing_ShaderEffectCreateImageShader(nullptr, CLAMP, CLAMP, options, matrix);
143     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
144     OH_Drawing_ShaderEffectCreateImageShader(image, CLAMP, CLAMP, nullptr, matrix);
145     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
146     EXPECT_EQ(OH_Drawing_ShaderEffectCreateImageShader(image, static_cast<OH_Drawing_TileMode>(-1),
147         CLAMP, options, matrix), nullptr);
148     EXPECT_EQ(OH_Drawing_ShaderEffectCreateImageShader(image, static_cast<OH_Drawing_TileMode>(99),
149         CLAMP, options, matrix), nullptr);
150     EXPECT_EQ(OH_Drawing_ShaderEffectCreateImageShader(image, CLAMP,
151         static_cast<OH_Drawing_TileMode>(-1), options, matrix), nullptr);
152     EXPECT_EQ(OH_Drawing_ShaderEffectCreateImageShader(image, CLAMP,
153         static_cast<OH_Drawing_TileMode>(99), options, matrix), nullptr);
154 }
155 
156 /*
157  * @tc.name: OH_Drawing_ShaderEffectCreatePixelMapShader
158  * @tc.desc: Test OH_Drawing_ShaderEffectCreatePixelMapShader
159  * @tc.type: FUNC
160  */
161 HWTEST_F(NativeDrawingShaderEffectTest, OH_Drawing_ShaderEffectCreatePixelMapShader, TestSize.Level1)
162 {
163     OH_Pixelmap_InitializationOptions *options = nullptr;
164     OH_PixelmapNative *pixelMap = nullptr;
165     OH_PixelmapInitializationOptions_Create(&options);
166     // 4 means width
167     OH_PixelmapInitializationOptions_SetWidth(options, 4);
168     // 4 means height
169     OH_PixelmapInitializationOptions_SetHeight(options, 4);
170     // 3 means RGBA format
171     OH_PixelmapInitializationOptions_SetPixelFormat(options, 3);
172     // 2 means ALPHA_FORMAT_PREMUL format
173     OH_PixelmapInitializationOptions_SetAlphaType(options, 2);
174     // 255 means rgba data
175     uint8_t data[] = {
176         255, 255, 0, 255, 255, 255, 0, 255,
177         255, 255, 0, 255, 255, 255, 0, 255
178     };
179     // 16 means data length
180     size_t dataLength = 16;
181     OH_PixelmapNative_CreatePixelmap(data, dataLength, options, &pixelMap);
182     EXPECT_NE(pixelMap, nullptr);
183     OH_Drawing_PixelMap *drPixelMap = OH_Drawing_PixelMapGetFromOhPixelMapNative(pixelMap);
184     EXPECT_NE(drPixelMap, nullptr);
185     OH_Drawing_SamplingOptions* samplingOptions =
186         OH_Drawing_SamplingOptionsCreate(FILTER_MODE_LINEAR, MIPMAP_MODE_LINEAR);
187     ASSERT_TRUE(options != nullptr);
188     OH_Drawing_ShaderEffect* effect1 = OH_Drawing_ShaderEffectCreatePixelMapShader(
189         drPixelMap, CLAMP, CLAMP, samplingOptions, nullptr);
190     ASSERT_TRUE(effect1 != nullptr);
191     OH_Drawing_Matrix* matrix = OH_Drawing_MatrixCreate();
192     OH_Drawing_ShaderEffect* effect2 = OH_Drawing_ShaderEffectCreatePixelMapShader(
193         drPixelMap, CLAMP, CLAMP, samplingOptions, matrix);
194     ASSERT_TRUE(effect2 != nullptr);
195     EXPECT_EQ(OH_Drawing_ShaderEffectCreatePixelMapShader(nullptr, CLAMP, CLAMP, samplingOptions, matrix), nullptr);
196     EXPECT_EQ(OH_Drawing_ShaderEffectCreatePixelMapShader(drPixelMap, CLAMP, CLAMP, nullptr, matrix), nullptr);
197     EXPECT_EQ(OH_Drawing_ShaderEffectCreatePixelMapShader(drPixelMap, static_cast<OH_Drawing_TileMode>(-1),
198         CLAMP, samplingOptions, matrix), nullptr);
199     EXPECT_EQ(OH_Drawing_ShaderEffectCreatePixelMapShader(drPixelMap, static_cast<OH_Drawing_TileMode>(99),
200         CLAMP, samplingOptions, matrix), nullptr);
201     EXPECT_EQ(OH_Drawing_ShaderEffectCreatePixelMapShader(drPixelMap, CLAMP,
202         static_cast<OH_Drawing_TileMode>(-1), samplingOptions, matrix), nullptr);
203     EXPECT_EQ(OH_Drawing_ShaderEffectCreatePixelMapShader(drPixelMap, CLAMP,
204         static_cast<OH_Drawing_TileMode>(99), samplingOptions, matrix), nullptr);
205     OH_Drawing_PixelMapDissolve(drPixelMap);
206     OH_PixelmapNative_Release(pixelMap);
207     OH_PixelmapInitializationOptions_Release(options);
208     OH_Drawing_SamplingOptionsDestroy(samplingOptions);
209     OH_Drawing_MatrixDestroy(matrix);
210     OH_Drawing_ShaderEffectDestroy(effect1);
211     OH_Drawing_ShaderEffectDestroy(effect2);
212 }
213 
214 /*
215  * @tc.name: NativeDrawingShaderEffectTest_ShaderEffectCreateLinearGradientWithLocalMatrix001
216  * @tc.desc: test for creates an <b>OH_Drawing_ShaderEffect</b> that generates a linear gradient between
217  * the two specified points.
218  * @tc.type: FUNC
219  * @tc.require: AR000GTO5R
220  */
221 HWTEST_F(NativeDrawingShaderEffectTest,
222     NativeDrawingShaderEffectTest_ShaderEffectCreateLinearGradientWithLocalMatrix001, TestSize.Level1)
223 {
224     float pos[POINT_NUM] = {0.0f, 0.5f, 1.0f}; // 0.5f: gradient color points, 1.0f: gradient color points
225     OH_Drawing_Point2D start = {0, 0};
226     OH_Drawing_Point2D end = {100.f, 0}; // 100.f: end point's x
227     EXPECT_EQ(OH_Drawing_ShaderEffectCreateLinearGradientWithLocalMatrix(
228         &start, &end, nullptr, pos, POINT_NUM, OH_Drawing_TileMode::CLAMP, nullptr), nullptr);
229 
230     uint32_t colors[POINT_NUM] = {0xFF00FFFF, 0xFFFF00FF, 0xFFFFFF00};
231     EXPECT_EQ(OH_Drawing_ShaderEffectCreateLinearGradientWithLocalMatrix(
232         &start, nullptr, colors, pos, POINT_NUM, OH_Drawing_TileMode::CLAMP, nullptr), nullptr);
233     EXPECT_EQ(OH_Drawing_ShaderEffectCreateLinearGradientWithLocalMatrix(
234         nullptr, &end, colors, pos, POINT_NUM, OH_Drawing_TileMode::CLAMP, nullptr), nullptr);
235     EXPECT_EQ(OH_Drawing_ShaderEffectCreateLinearGradientWithLocalMatrix(
236         &start, &end, colors, pos, POINT_NUM, static_cast<OH_Drawing_TileMode>(-1), nullptr), nullptr);
237     EXPECT_EQ(OH_Drawing_ShaderEffectCreateLinearGradientWithLocalMatrix(
238         &start, &end, colors, pos, POINT_NUM, static_cast<OH_Drawing_TileMode>(99), nullptr), nullptr);
239     OH_Drawing_ShaderEffect* effect1 = OH_Drawing_ShaderEffectCreateLinearGradientWithLocalMatrix(
240         &start, &end, colors, nullptr, POINT_NUM, OH_Drawing_TileMode::CLAMP, nullptr);
241     EXPECT_NE(effect1, nullptr);
242     OH_Drawing_ShaderEffect* effect2 = OH_Drawing_ShaderEffectCreateLinearGradientWithLocalMatrix(
243         &start, &end, colors, pos, POINT_NUM, OH_Drawing_TileMode::CLAMP, nullptr);
244     EXPECT_NE(effect2, nullptr);
245     OH_Drawing_ShaderEffectDestroy(effect1);
246     OH_Drawing_ShaderEffectDestroy(effect2);
247 }
248 
249 /*
250  * @tc.name: NativeDrawingShaderEffectTest_ShaderEffectCreateRadialGradientWithLocalMatrix002
251  * @tc.desc: test for creates an <b>OH_Drawing_ShaderEffect</b> that generates a linear gradient between
252  * the two specified points.
253  * @tc.type: FUNC
254  * @tc.require: AR000GTO5R
255  */
256 HWTEST_F(NativeDrawingShaderEffectTest,
257     NativeDrawingShaderEffectTest_ShaderEffectCreateRadialGradientWithLocalMatrix002, TestSize.Level1)
258 {
259     float pos[POINT_NUM] = {0.0f, 0.5f, 1.0f}; // 0.5f: gradient color points, 1.0f: gradient color points
260     float radius = 5.0; // 5.0f: gradient color radius
261     OH_Drawing_Point2D start = {100.f, 0};  // 100.f: start point's x
262     EXPECT_EQ(OH_Drawing_ShaderEffectCreateRadialGradientWithLocalMatrix(
263         &start, radius, nullptr, pos, POINT_NUM, OH_Drawing_TileMode::CLAMP, nullptr), nullptr);
264 
265     uint32_t colors[POINT_NUM] = {0xFF00FFFF, 0xFFFF00FF, 0xFFFFFF00};
266     EXPECT_EQ(OH_Drawing_ShaderEffectCreateRadialGradientWithLocalMatrix(
267         nullptr, radius, colors, pos, POINT_NUM, OH_Drawing_TileMode::CLAMP, nullptr), nullptr);
268     EXPECT_EQ(OH_Drawing_ShaderEffectCreateRadialGradientWithLocalMatrix(
269         &start, radius, colors, pos, POINT_NUM, static_cast<OH_Drawing_TileMode>(-1), nullptr), nullptr);
270     EXPECT_EQ(OH_Drawing_ShaderEffectCreateRadialGradientWithLocalMatrix(
271         &start, radius, colors, pos, POINT_NUM, static_cast<OH_Drawing_TileMode>(99), nullptr), nullptr);
272     EXPECT_NE(OH_Drawing_ShaderEffectCreateRadialGradientWithLocalMatrix(
273         &start, radius, colors, pos, POINT_NUM, OH_Drawing_TileMode::CLAMP, nullptr), nullptr);
274     EXPECT_NE(OH_Drawing_ShaderEffectCreateRadialGradientWithLocalMatrix(
275         &start, radius, colors, nullptr, POINT_NUM, OH_Drawing_TileMode::CLAMP, nullptr), nullptr);
276 }
277 
278 /*
279  * @tc.name: NativeDrawingShaderEffectTest_ShaderEffectCreateTwoPointConicalGradient003
280  * @tc.desc: test for greates an <b>OH_Drawing_ShaderEffect</b> that generates a conical gradient given two circles.
281  * @tc.type: FUNC
282  * @tc.require: AR000GTO5R
283  */
284 HWTEST_F(NativeDrawingShaderEffectTest, NativeDrawingShaderEffectTest_ShaderEffectCreateTwoPointConicalGradient003,
285     TestSize.Level1)
286 {
287     OH_Drawing_Point2D startPt = {0, 0};
288     OH_Drawing_Point2D endPt = {100.f, 0}; // 100.f: end point's x
289     uint32_t colors[POINT_NUM] = {0xFF00FFFF, 0xFFFF00FF, 0xFFFFFF00};
290     float pos[POINT_NUM] = {0.0f, 0.5f, 1.0f}; // 0.5f: gradient color points, 1.0f: gradient color points
291     float startRadius = 5.0f, endRadius = 10.0f; // 5.0f: gradient color radius, 10.0f: gradient color radius
292     EXPECT_EQ(OH_Drawing_ShaderEffectCreateTwoPointConicalGradient(&startPt, startRadius, nullptr, endRadius, colors,
293         pos, POINT_NUM, OH_Drawing_TileMode::CLAMP, nullptr), nullptr);
294     EXPECT_EQ(OH_Drawing_ShaderEffectCreateTwoPointConicalGradient(nullptr, startRadius, &endPt, endRadius, colors,
295         pos, POINT_NUM, OH_Drawing_TileMode::CLAMP, nullptr), nullptr);
296     EXPECT_EQ(OH_Drawing_ShaderEffectCreateTwoPointConicalGradient(&startPt, startRadius, &endPt, endRadius, nullptr,
297         pos, POINT_NUM, OH_Drawing_TileMode::CLAMP, nullptr), nullptr);
298     EXPECT_EQ(OH_Drawing_ShaderEffectCreateTwoPointConicalGradient(&startPt, startRadius, &endPt, endRadius, colors,
299         pos, POINT_NUM, static_cast<OH_Drawing_TileMode>(-1), nullptr), nullptr);
300     EXPECT_EQ(OH_Drawing_ShaderEffectCreateTwoPointConicalGradient(&startPt, startRadius, &endPt, endRadius, colors,
301         pos, POINT_NUM, static_cast<OH_Drawing_TileMode>(99), nullptr), nullptr);
302     EXPECT_NE(OH_Drawing_ShaderEffectCreateTwoPointConicalGradient(&startPt, startRadius, &endPt, endRadius, colors,
303         pos, POINT_NUM, OH_Drawing_TileMode::CLAMP, nullptr), nullptr);
304     EXPECT_NE(OH_Drawing_ShaderEffectCreateTwoPointConicalGradient(&startPt, startRadius, &endPt, endRadius, colors,
305         nullptr, POINT_NUM, OH_Drawing_TileMode::CLAMP, nullptr), nullptr);
306 }
307 
308 /*
309  * @tc.name: NativeDrawingShaderEffectTest_ShaderEffectCreateSweepGradient001
310  * @tc.desc:
311  * @tc.type: FUNC
312  * @tc.require: AR000GTO5R
313  */
314 HWTEST_F(NativeDrawingShaderEffectTest, NativeDrawingShaderEffectTest_ShaderEffectCreateSweepGradient001,
315     TestSize.Level1)
316 {
317     OH_Drawing_Point* startPt = OH_Drawing_PointCreate(0, 0);
318     uint32_t colors[POINT_NUM] = {0xFF00FFFF, 0xFFFF00FF, 0xFFFFFF00};
319     float pos[POINT_NUM] = {0.0f, 0.5f, 1.0f}; // 0.5f: gradient color points, 1.0f: gradient color points
320     EXPECT_EQ(OH_Drawing_ShaderEffectCreateSweepGradient(nullptr, colors, pos, POINT_NUM,
321         OH_Drawing_TileMode::CLAMP), nullptr);
322     EXPECT_EQ(OH_Drawing_ShaderEffectCreateSweepGradient(nullptr, nullptr, pos, POINT_NUM,
323         OH_Drawing_TileMode::CLAMP), nullptr);
324     EXPECT_EQ(OH_Drawing_ShaderEffectCreateSweepGradient(startPt, nullptr, pos, POINT_NUM,
325         OH_Drawing_TileMode::CLAMP), nullptr);
326     EXPECT_EQ(OH_Drawing_ShaderEffectCreateSweepGradient(startPt, colors, pos, POINT_NUM,
327         static_cast<OH_Drawing_TileMode>(-1)), nullptr);
328     EXPECT_EQ(OH_Drawing_ShaderEffectCreateSweepGradient(startPt, colors, pos, POINT_NUM,
329         static_cast<OH_Drawing_TileMode>(99)), nullptr);
330     EXPECT_NE(OH_Drawing_ShaderEffectCreateSweepGradient(startPt, colors, nullptr, POINT_NUM,
331         OH_Drawing_TileMode::CLAMP), nullptr);
332 }
333 
334 HWTEST_F(NativeDrawingShaderEffectTest,
335     NativeDrawingShaderEffectTest_OH_Drawing_ShaderEffectCreateSweepGradientWithLocalMatrix001, TestSize.Level1)
336 {
337     OH_Drawing_Point* startPt = OH_Drawing_PointCreate(0, 0);
338     uint32_t colors[POINT_NUM] = {0xFF00FFFF, 0xFFFF00FF, 0xFFFFFF00};
339     float pos[POINT_NUM] = {0.0f, 0.5f, 1.0f}; // 0.5f: gradient color points, 1.0f: gradient color points
340     EXPECT_EQ(OH_Drawing_ShaderEffectCreateSweepGradientWithLocalMatrix(nullptr, colors, pos, POINT_NUM,
341         OH_Drawing_TileMode::CLAMP, nullptr), nullptr);
342     EXPECT_EQ(OH_Drawing_ShaderEffectCreateSweepGradientWithLocalMatrix(nullptr, nullptr, pos, POINT_NUM,
343         OH_Drawing_TileMode::CLAMP, nullptr), nullptr);
344     EXPECT_EQ(OH_Drawing_ShaderEffectCreateSweepGradientWithLocalMatrix(startPt, nullptr, pos, POINT_NUM,
345         OH_Drawing_TileMode::CLAMP, nullptr), nullptr);
346     EXPECT_EQ(OH_Drawing_ShaderEffectCreateSweepGradientWithLocalMatrix(startPt, colors, pos, POINT_NUM,
347         static_cast<OH_Drawing_TileMode>(-1), nullptr), nullptr);
348     EXPECT_EQ(OH_Drawing_ShaderEffectCreateSweepGradientWithLocalMatrix(startPt, colors, pos, POINT_NUM,
349         static_cast<OH_Drawing_TileMode>(99), nullptr), nullptr);
350     EXPECT_NE(OH_Drawing_ShaderEffectCreateSweepGradientWithLocalMatrix(startPt, colors, nullptr, POINT_NUM,
351         OH_Drawing_TileMode::CLAMP, nullptr), nullptr);
352 }
353 
354 HWTEST_F(NativeDrawingShaderEffectTest,
355     NativeDrawingShaderEffectTest_OH_Drawing_ShaderEffectCreateSweepGradientWithLocalMatrix002, TestSize.Level1)
356 {
357     OH_Drawing_Point* startPt = OH_Drawing_PointCreate(0, 0);
358     uint32_t colors[POINT_NUM] = {0xFF00FFFF, 0xFFFF00FF, 0xFFFFFF00};
359     OH_Drawing_Matrix* matrix = OH_Drawing_MatrixCreate();
360     OH_Drawing_MatrixSetMatrix(
361         matrix,
362         1, 0, 0,
363         0, 3, 1,
364         0, 0, 4);
365     float pos[POINT_NUM] = {0.0f, 0.5f, 1.0f}; // 0.5f: gradient color points, 1.0f: gradient color points
366 
367     EXPECT_EQ(OH_Drawing_ShaderEffectCreateSweepGradientWithLocalMatrix(nullptr, colors, pos, POINT_NUM,
368         OH_Drawing_TileMode::CLAMP, matrix), nullptr);
369     EXPECT_EQ(OH_Drawing_ShaderEffectCreateSweepGradientWithLocalMatrix(nullptr, nullptr, pos, POINT_NUM,
370         OH_Drawing_TileMode::CLAMP, matrix), nullptr);
371     EXPECT_EQ(OH_Drawing_ShaderEffectCreateSweepGradientWithLocalMatrix(startPt, nullptr, pos, POINT_NUM,
372         OH_Drawing_TileMode::CLAMP, matrix), nullptr);
373     EXPECT_EQ(OH_Drawing_ShaderEffectCreateSweepGradientWithLocalMatrix(startPt, colors, pos, POINT_NUM,
374         static_cast<OH_Drawing_TileMode>(-1), matrix), nullptr);
375     EXPECT_EQ(OH_Drawing_ShaderEffectCreateSweepGradientWithLocalMatrix(startPt, colors, pos, POINT_NUM,
376         static_cast<OH_Drawing_TileMode>(99), matrix), nullptr);
377     EXPECT_NE(OH_Drawing_ShaderEffectCreateSweepGradientWithLocalMatrix(startPt, colors, nullptr, POINT_NUM,
378         OH_Drawing_TileMode::CLAMP, matrix), nullptr);
379 }
380 
381 /*
382  * @tc.name: NativeDrawingShaderEffectTest_ShaderEffectCreateColorShader004
383  * @tc.desc: test for creates an <b>OH_Drawing_ShaderEffect</b> that generates a shader with single color.
384  * @tc.type: FUNC
385  * @tc.require: AR000GTO5R
386  */
387 HWTEST_F(NativeDrawingShaderEffectTest, NativeDrawingShaderEffectTest_ShaderEffectCreateColorShader004,
388     TestSize.Level1)
389 {
390     const uint32_t color = 0xFFFF0000;
391     OH_Drawing_ShaderEffect * colorShaderEffect = OH_Drawing_ShaderEffectCreateColorShader(color);
392     EXPECT_NE(colorShaderEffect, nullptr);
393     OH_Drawing_ShaderEffectDestroy(colorShaderEffect);
394 }
395 
396 /*
397  * @tc.name: OH_Drawing_ShaderEffectCreateCompose001
398  * @tc.desc: test for creates an <b>OH_Drawing_ShaderEffect</b> that generates a shader by two shaders.
399  * @tc.type: FUNC
400  * @tc.require: IAYWTV
401  */
402 HWTEST_F(NativeDrawingShaderEffectTest, OH_Drawing_ShaderEffectCreateCompose001, TestSize.Level1)
403 {
404     uint32_t gColors[] = { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, 0xFFFFFFFF, 0xFF000000 };
405     float_t gPos[] = { 0.25f, 0.75f }; // 0.25f: gradient color points, 0.75f: gradient color points
406     float radius = 200; // 200: gradient color radius
407     float x = 200; // 200: x coordinate
408     float y = 200; // 200: y coordinate
409     OH_Drawing_Point* centerPt = OH_Drawing_PointCreate(x, y);
410     OH_Drawing_ShaderEffect* srcEffect =
411         OH_Drawing_ShaderEffectCreateRadialGradient(centerPt, radius, gColors, gPos, 1, OH_Drawing_TileMode::REPEAT);
412     ASSERT_TRUE(srcEffect != nullptr);
413 
414     x = 500; // 500: x coordinate
415     y = 500; // 500: y coordinate
416     OH_Drawing_Point* centerPtTwo = OH_Drawing_PointCreate(x, y);
417     OH_Drawing_ShaderEffect* dstEffect =
418         OH_Drawing_ShaderEffectCreateRadialGradient(centerPtTwo, radius, gColors, gPos, 1, OH_Drawing_TileMode::REPEAT);
419     ASSERT_TRUE(dstEffect != nullptr);
420 
421     OH_Drawing_ShaderEffect* effect =
422     OH_Drawing_ShaderEffectCreateCompose(dstEffect, srcEffect, OH_Drawing_BlendMode::BLEND_MODE_SRC);
423     EXPECT_NE(effect, nullptr);
424 
425     OH_Drawing_ShaderEffectDestroy(srcEffect);
426     OH_Drawing_ShaderEffectDestroy(dstEffect);
427     OH_Drawing_ShaderEffectDestroy(effect);
428     OH_Drawing_PointDestroy(centerPt);
429     OH_Drawing_PointDestroy(centerPtTwo);
430 }
431 
432  /*
433   * @tc.name: OH_Drawing_ShaderEffectCreateCompose002
434   * @tc.desc: test for creates an <b>OH_Drawing_ShaderEffect</b> that generates a shader by two shaders.
435   * @tc.type: FUNC
436   * @tc.require: IAYWTV
437   */
438 HWTEST_F(NativeDrawingShaderEffectTest, OH_Drawing_ShaderEffectCreateCompose002, TestSize.Level1)
439 {
440     uint32_t gColors[] = { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, 0xFFFFFFFF, 0xFF000000 };
441     float_t gPos[] = { 0.25f, 0.75f }; // 0.25f: gradient color points, 0.75f: gradient color points
442     float radius = 200; // 200: gradient color radius
443     float x = 200; // 200: x coordinate
444     float y = 200; // 200: y coordinate
445     OH_Drawing_Point* centerPt = OH_Drawing_PointCreate(x, y);
446     OH_Drawing_ShaderEffect* srcEffect =
447         OH_Drawing_ShaderEffectCreateRadialGradient(centerPt, radius, gColors, gPos, 1, OH_Drawing_TileMode::REPEAT);
448     ASSERT_TRUE(srcEffect != nullptr);
449 
450     x = 500; // 500: x coordinate
451     y = 500; // 500: y coordinate
452     OH_Drawing_Point* centerPtT = OH_Drawing_PointCreate(x, y);
453     OH_Drawing_ShaderEffect* dstEffect =
454         OH_Drawing_ShaderEffectCreateRadialGradient(centerPtT, radius, gColors, gPos, 1, OH_Drawing_TileMode::REPEAT);
455     ASSERT_TRUE(dstEffect != nullptr);
456 
457     OH_Drawing_ShaderEffect* effect =
458         OH_Drawing_ShaderEffectCreateCompose(nullptr, srcEffect, OH_Drawing_BlendMode::BLEND_MODE_SRC);
459     EXPECT_EQ(effect, nullptr);
460 
461     effect = OH_Drawing_ShaderEffectCreateCompose(dstEffect, nullptr, OH_Drawing_BlendMode::BLEND_MODE_SRC);
462     EXPECT_EQ(effect, nullptr);
463 
464     OH_Drawing_ShaderEffectDestroy(srcEffect);
465     OH_Drawing_ShaderEffectDestroy(dstEffect);
466     OH_Drawing_PointDestroy(centerPt);
467     OH_Drawing_PointDestroy(centerPtT);
468 }
469 } // namespace Drawing
470 } // namespace Rosen
471 } // namespace OHOS