1/*
2 * Copyright (c) 2024 Shenzhen Kaihong Digital Industry Development Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#include "drawing_error_code.h"
17#include "drawing_shadow_layer.h"
18#include "gtest/gtest.h"
19#include <random>
20
21using namespace testing;
22using namespace testing::ext;
23
24namespace OHOS {
25namespace Rosen {
26namespace Drawing {
27class DrawingNativeShadowLayerTest : public testing::Test {};
28
29/*
30 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_SHADOW_LAYER_0100
31 * @tc.name: testShadowLayerCreateNormal
32 * @tc.desc: test for testShadowLayerCreateNormal.
33 * @tc.size  : SmallTest
34 * @tc.type  : Function
35 * @tc.level : Level 0
36 */
37HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerCreateNormal, TestSize.Level0) {
38    // 1. Call OH_Drawing_ShadowLayerCreate with integer values for blurRadius, x, and y
39    OH_Drawing_ShadowLayer *shadow = OH_Drawing_ShadowLayerCreate(3, -3, 3, 0xFF00FF00);
40    EXPECT_NE(shadow, nullptr);
41    OH_Drawing_ShadowLayerDestroy(shadow);
42    // 2. Call OH_Drawing_ShadowLayerCreate with floating-point values for blurRadius, x, and y
43    OH_Drawing_ShadowLayer *shadow2 = OH_Drawing_ShadowLayerCreate(3.f, -3.f, 3.f, 0xFF00FF00);
44    EXPECT_NE(shadow2, nullptr);
45    OH_Drawing_ShadowLayerDestroy(shadow2);
46}
47
48/*
49 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_SHADOW_LAYER_0101
50 * @tc.name: testShadowLayerCreateNull
51 * @tc.desc: test for testShadowLayerCreateNull.
52 * @tc.size  : SmallTest
53 * @tc.type  : Function
54 * @tc.level : Level 3
55 */
56HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerCreateNull, TestSize.Level3) {
57    // 1. OH_Drawing_ShadowLayerCreate with the first parameter being empty, check the error code using
58    // OH_Drawing_ErrorCodeGet
59    OH_Drawing_ShadowLayer *shadow = OH_Drawing_ShadowLayerCreate(0, -3, 3, 0xFF00FF00);
60    EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
61    // 2. OH_Drawing_ShadowLayerCreate with the second parameter being empty
62    OH_Drawing_ShadowLayer *shadow2 = OH_Drawing_ShadowLayerCreate(3, 0, 3, 0xFF00FF00);
63    EXPECT_NE(shadow2, nullptr);
64    // 3. OH_Drawing_ShadowLayerCreate with the third parameter being empty
65    OH_Drawing_ShadowLayer *shadow3 = OH_Drawing_ShadowLayerCreate(3, -3, 0, 0xFF00FF00);
66    EXPECT_NE(shadow3, nullptr);
67    // 4. OH_Drawing_ShadowLayerCreate with the fourth parameter being empty
68    OH_Drawing_ShadowLayer *shadow4 = OH_Drawing_ShadowLayerCreate(3, -3, 3, 0);
69    EXPECT_NE(shadow4, nullptr);
70    // 5. Free memory
71    OH_Drawing_ShadowLayerDestroy(shadow);
72    OH_Drawing_ShadowLayerDestroy(shadow2);
73    OH_Drawing_ShadowLayerDestroy(shadow3);
74    OH_Drawing_ShadowLayerDestroy(shadow4);
75}
76
77/*
78 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_SHADOW_LAYER_0102
79 * @tc.name: testShadowLayerCreateAbnormal
80 * @tc.desc: test for testShadowLayerCreateAbnormal.
81 * @tc.size  : SmallTest
82 * @tc.type  : Function
83 * @tc.level : Level 3
84 */
85HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerCreateAbnormal, TestSize.Level3) {
86    // 1. OH_Drawing_ShadowLayerCreate with the first parameter as a negative number, check the error code using
87    // OH_Drawing_ErrorCodeGet
88    OH_Drawing_ShadowLayer *shadow = OH_Drawing_ShadowLayerCreate(-3, 3, 3, 0xFF00FF00);
89    EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
90    // 2. OH_Drawing_ShadowLayerCreate with the second parameter as a negative number
91    OH_Drawing_ShadowLayer *shadow2 = OH_Drawing_ShadowLayerCreate(3, -3, 3, 0xFF00FF00);
92    EXPECT_NE(shadow2, nullptr);
93    // 3. OH_Drawing_ShadowLayerCreate with the third parameter as a negative number
94    OH_Drawing_ShadowLayer *shadow3 = OH_Drawing_ShadowLayerCreate(3, 3, -3, 0xFF00FF00);
95    EXPECT_NE(shadow3, nullptr);
96    // 4. OH_Drawing_ShadowLayerCreate with the fourth parameter as a negative number
97    OH_Drawing_ShadowLayer *shadow4 = OH_Drawing_ShadowLayerCreate(3, 3, 3, -0xFF00FF00);
98    EXPECT_NE(shadow4, nullptr);
99    // 5. Free memory
100    OH_Drawing_ShadowLayerDestroy(shadow);
101    OH_Drawing_ShadowLayerDestroy(shadow2);
102    OH_Drawing_ShadowLayerDestroy(shadow3);
103    OH_Drawing_ShadowLayerDestroy(shadow4);
104}
105
106/*
107 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_SHADOW_LAYER_0103
108 * @tc.name: testShadowLayerCreateMaximum
109 * @tc.desc: test for testShadowLayerCreateMaximum.
110 * @tc.size  : SmallTest
111 * @tc.type  : Function
112 * @tc.level : Level 3
113 */
114HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerCreateMaximum, TestSize.Level3) {
115    // 1. Call OH_Drawing_ShadowLayerCreate with the first parameter as the maximum value
116    OH_Drawing_ShadowLayer *shadow = OH_Drawing_ShadowLayerCreate(FLT_MAX, 3, 3, 0xFF00FF00);
117    EXPECT_NE(shadow, nullptr);
118    // 2. Call OH_Drawing_ShadowLayerCreate with the second parameter as the maximum value
119    OH_Drawing_ShadowLayer *shadow2 = OH_Drawing_ShadowLayerCreate(3, FLT_MAX, 3, 0xFF00FF00);
120    EXPECT_NE(shadow2, nullptr);
121    // 3. Call OH_Drawing_ShadowLayerCreate with the third parameter as the maximum value
122    OH_Drawing_ShadowLayer *shadow3 = OH_Drawing_ShadowLayerCreate(3, 3, FLT_MAX, 0xFF00FF00);
123    EXPECT_NE(shadow3, nullptr);
124    // 4. Call OH_Drawing_ShadowLayerCreate with the fourth parameter as the maximum value
125    OH_Drawing_ShadowLayer *shadow4 = OH_Drawing_ShadowLayerCreate(3, 3, 3, UINT32_MAX);
126    EXPECT_NE(shadow4, nullptr);
127    // 5. Free memory
128    OH_Drawing_ShadowLayerDestroy(shadow);
129    OH_Drawing_ShadowLayerDestroy(shadow2);
130    OH_Drawing_ShadowLayerDestroy(shadow3);
131    OH_Drawing_ShadowLayerDestroy(shadow4);
132}
133
134/*
135 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_SHADOW_LAYER_0104
136 * @tc.name: testShadowLayerCreateMultipleCalls
137 * @tc.desc: test for testShadowLayerCreateMultipleCalls.
138 * @tc.size  : SmallTest
139 * @tc.type  : Function
140 * @tc.level : Level 3
141 */
142HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerCreateMultipleCalls, TestSize.Level3) {
143    // 1. Call OH_Drawing_ShadowLayerCreate 10 times with random values for blurRadius, x, y, and different colors
144    std::random_device rd;
145    std::mt19937 gen(rd());
146    std::uniform_real_distribution<float> dis(0, 100);
147    for (int i = 0; i < 10; i++) {
148        float blurRadius = dis(gen);
149        float x = dis(gen);
150        float y = dis(gen);
151        uint32_t color = dis(gen);
152        OH_Drawing_ShadowLayer *shadow = OH_Drawing_ShadowLayerCreate(blurRadius, x, y, color);
153        EXPECT_NE(shadow, nullptr);
154        OH_Drawing_ShadowLayerDestroy(shadow);
155    }
156}
157
158/*
159 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_SHADOW_LAYER_0200
160 * @tc.name: testShadowLayerDestroyNormal
161 * @tc.desc: test for testShadowLayerDestroyNormal.
162 * @tc.size  : SmallTest
163 * @tc.type  : Function
164 * @tc.level : Level 0
165 */
166HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerDestroyNormal, TestSize.Level0) {
167    // 1. Call OH_Drawing_ShadowLayerCreate
168    OH_Drawing_ShadowLayer *shadow = OH_Drawing_ShadowLayerCreate(3, 3, 3, 0xFF00FF00);
169    // 2. Call OH_Drawing_ShadowLayerDestroy
170    OH_Drawing_ShadowLayerDestroy(shadow);
171}
172
173/*
174 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_SHADOW_LAYER_0201
175 * @tc.name: testShadowLayerDestroyNull
176 * @tc.desc: test for testShadowLayerDestroyNull.
177 * @tc.size  : SmallTest
178 * @tc.type  : Function
179 * @tc.level : Level 3
180 */
181HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerDestroyNull, TestSize.Level3) {
182    // 1. OH_Drawing_ShadowLayerDestroy with null parameter
183    OH_Drawing_ShadowLayerDestroy(nullptr);
184}
185
186} // namespace Drawing
187} // namespace Rosen
188} // namespace OHOS