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
21 using namespace testing;
22 using namespace testing::ext;
23
24 namespace OHOS {
25 namespace Rosen {
26 namespace Drawing {
27 class 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 */
HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerCreateNormal, TestSize.Level0)37 HWTEST_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 */
HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerCreateNull, TestSize.Level3)56 HWTEST_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 */
HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerCreateAbnormal, TestSize.Level3)85 HWTEST_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 */
HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerCreateMaximum, TestSize.Level3)114 HWTEST_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 */
HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerCreateMultipleCalls, TestSize.Level3)142 HWTEST_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 */
HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerDestroyNormal, TestSize.Level0)166 HWTEST_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 */
HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerDestroyNull, TestSize.Level3)181 HWTEST_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