• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_bitmap.h"
17 #include "drawing_color.h"
18 #include "drawing_color_filter.h"
19 #include "drawing_error_code.h"
20 #include "drawing_image.h"
21 #include "drawing_image_filter.h"
22 #include "gtest/gtest.h"
23 #include <iostream>
24 #include <random>
25 
26 using namespace testing;
27 using namespace testing::ext;
28 
29 namespace OHOS {
30 namespace Rosen {
31 namespace Drawing {
32 class DrawingNativeImageFilterTest : public testing::Test {};
33 
34 /*
35  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_IMAGE_FILTER_0100
36  * @tc.name: testImageFilterCreateBlurNormal
37  * @tc.desc: Test for creating a blur image filter with normal parameters.
38  * @tc.size  : SmallTest
39  * @tc.type  : Function
40  * @tc.level : Level 0
41  */
42 HWTEST_F(DrawingNativeImageFilterTest, testImageFilterCreateBlurNormal, TestSize.Level0) {
43     // 1. Enumerate OH_Drawing_TileMode values in OH_Drawing_ImageFilterCreateBlur
44     OH_Drawing_TileMode modes[] = {CLAMP, REPEAT, MIRROR, DECAL};
45     for (OH_Drawing_TileMode mode : modes) {
46         OH_Drawing_ImageFilter *filter = OH_Drawing_ImageFilterCreateBlur(1.0f, 1.0f, mode, nullptr);
47         EXPECT_NE(filter, nullptr);
48         OH_Drawing_ImageFilterDestroy(filter);
49     }
50     // 2. Pass decimal values for sigmaX and sigmaY in OH_Drawing_ImageFilterCreateBlur
51     OH_Drawing_ImageFilter *filter = OH_Drawing_ImageFilterCreateBlur(1.0f, 1.0f, OH_Drawing_TileMode::MIRROR, nullptr);
52     // 3. Pass integer values for sigmaX and sigmaY in OH_Drawing_ImageFilterCreateBlur
53     filter = OH_Drawing_ImageFilterCreateBlur(1, 1, OH_Drawing_TileMode::MIRROR, nullptr);
54     // 4. Pass NULL for input parameter in OH_Drawing_ImageFilterCreateBlur
55     filter = OH_Drawing_ImageFilterCreateBlur(1.0f, 1.0f, OH_Drawing_TileMode::MIRROR, nullptr);
56     // 5. Pass non-NULL for input parameter in OH_Drawing_ImageFilterCreateBlur
57     filter = OH_Drawing_ImageFilterCreateBlur(1.0f, 1.0f, OH_Drawing_TileMode::MIRROR, filter);
58     // 6. Destroy the filter object
59     OH_Drawing_ImageFilterDestroy(filter);
60 }
61 
62 /*
63  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_IMAGE_FILTER_0101
64  * @tc.name: testImageFilterCreateBlurNULL
65  * @tc.desc: Test for creating a blur image filter with NULL parameters.
66  * @tc.size  : SmallTest
67  * @tc.type  : Function
68  * @tc.level : Level 3
69  */
70 HWTEST_F(DrawingNativeImageFilterTest, testImageFilterCreateBlurNULL, TestSize.Level3) {
71     // 1. OH_Drawing_ImageFilterCreateBlur with the first parameter being null
72     OH_Drawing_ImageFilter *filter = OH_Drawing_ImageFilterCreateBlur(0, 1.0f, OH_Drawing_TileMode::MIRROR, nullptr);
73     // 2. OH_Drawing_ImageFilterCreateBlur with the second parameter being null
74     filter = OH_Drawing_ImageFilterCreateBlur(1.0f, 0, OH_Drawing_TileMode::MIRROR, nullptr);
75     // 3. Destroy the filter object
76     OH_Drawing_ImageFilterDestroy(filter);
77 }
78 
79 /*
80  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_IMAGE_FILTER_0102
81  * @tc.name: testImageFilterCreateBlurMultipleCalls
82  * @tc.desc: Test for multiple calls of creating a blur image filter.
83  * @tc.size  : SmallTest
84  * @tc.type  : Function
85  * @tc.level : Level 3
86  */
87 HWTEST_F(DrawingNativeImageFilterTest, testImageFilterCreateBlurMultipleCalls, TestSize.Level3) {
88     // 1. OH_Drawing_ImageFilterCreateBlur (pass random values for sigmaX and sigmaY, random enum value for
89     // OH_Drawing_TileMode), call 10 times
90     for (int i = 0; i < 10; i++) {
91         std::random_device rd;
92         std::mt19937 gen(rd());
93         std::uniform_real_distribution<float> dis(0, 10);
94         OH_Drawing_ImageFilter *filter =
95             OH_Drawing_ImageFilterCreateBlur(dis(gen), dis(gen), OH_Drawing_TileMode::MIRROR, nullptr);
96         EXPECT_NE(filter, nullptr);
97         OH_Drawing_ImageFilterDestroy(filter);
98     }
99 }
100 
101 /*
102  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_IMAGE_FILTER_0103
103  * @tc.name: testImageFilterCreateBlurAbnormal
104  * @tc.desc: Test for creating a blur image filter with abnormal parameters.
105  * @tc.size  : SmallTest
106  * @tc.type  : Function
107  * @tc.level : Level 3
108  */
109 HWTEST_F(DrawingNativeImageFilterTest, testImageFilterCreateBlurAbnormal, TestSize.Level3) {
110     // 1. Pass negative values for sigmaX and sigmaY in OH_Drawing_ImageFilterCreateBlur
111     OH_Drawing_ImageFilter *filter =
112         OH_Drawing_ImageFilterCreateBlur(-1.0f, -1.0f, OH_Drawing_TileMode::MIRROR, nullptr);
113     // 2. Destroy the filter object
114     OH_Drawing_ImageFilterDestroy(filter);
115 }
116 
117 /*
118  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_IMAGE_FILTER_0104
119  * @tc.name: testImageFilterCreateBlurMaximum
120  * @tc.desc: Test for creating a blur image filter with maximum values.
121  * @tc.size  : SmallTest
122  * @tc.type  : Function
123  * @tc.level : Level 3
124  */
125 HWTEST_F(DrawingNativeImageFilterTest, testImageFilterCreateBlurMaximum, TestSize.Level3) {
126     // 1. Create a blur image filter with maximum values for sigmaX and sigmaY in OH_Drawing_ImageFilterCreateBlur
127     OH_Drawing_ImageFilter *filter =
128         OH_Drawing_ImageFilterCreateBlur(FLT_MAX, FLT_MAX, OH_Drawing_TileMode::MIRROR, nullptr);
129     // 2. Destroy the filter object
130     OH_Drawing_ImageFilterDestroy(filter);
131 }
132 
133 /*
134  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_IMAGE_FILTER_0200
135  * @tc.name: testImageFilterCreateFromColorFilterNormal
136  * @tc.desc: Test for creating an image filter from a color filter with normal parameters.
137  * @tc.size  : SmallTest
138  * @tc.type  : Function
139  * @tc.level : Level 0
140  */
141 HWTEST_F(DrawingNativeImageFilterTest, testImageFilterCreateFromColorFilterNormal, TestSize.Level0) {
142     // 1. OH_Drawing_ImageFilterCreateBlur
143     OH_Drawing_ImageFilter *filter = OH_Drawing_ImageFilterCreateBlur(1, 1, OH_Drawing_TileMode::MIRROR, nullptr);
144     // 2. OH_Drawing_ColorFilterCreateLinearToSrgbGamma
145     OH_Drawing_ColorFilter *colorFilter = OH_Drawing_ColorFilterCreateLinearToSrgbGamma();
146     // 3. OH_Drawing_ImageFilterCreateFromColorFilter with null input parameter
147     OH_Drawing_ImageFilter *imageFilter = OH_Drawing_ImageFilterCreateFromColorFilter(colorFilter, nullptr);
148     // 4. OH_Drawing_ImageFilterCreateFromColorFilter with non-null input parameter
149     imageFilter = OH_Drawing_ImageFilterCreateFromColorFilter(colorFilter, filter);
150     // 5. Free memory
151     OH_Drawing_ImageFilterDestroy(imageFilter);
152     OH_Drawing_ColorFilterDestroy(colorFilter);
153     OH_Drawing_ImageFilterDestroy(filter);
154 }
155 
156 /*
157  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_IMAGE_FILTER_0201
158  * @tc.name: testImageFilterCreateFromColorFilterNULL
159  * @tc.desc: Test for creating an image filter from a color filter with NULL parameters.
160  * @tc.size  : SmallTest
161  * @tc.type  : Function
162  * @tc.level : Level 3
163  */
164 HWTEST_F(DrawingNativeImageFilterTest, testImageFilterCreateFromColorFilterNULL, TestSize.Level3) {
165     OH_Drawing_ImageFilter *filter = OH_Drawing_ImageFilterCreateBlur(1, 1, OH_Drawing_TileMode::MIRROR, nullptr);
166     // 1. OH_Drawing_ImageFilterCreateFromColorFilter with the first parameter being null, check the error code using
167     // OH_Drawing_ErrorCodeGet
168     OH_Drawing_ImageFilterCreateFromColorFilter(nullptr, filter);
169     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
170     // 2. Free memory
171     OH_Drawing_ImageFilterDestroy(filter);
172 }
173 
174 /*
175  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_IMAGE_FILTER_0202
176  * @tc.name: testImageFilterCreateFromColorFilterMultipleCalls
177  * @tc.desc: Test for multiple calls of creating an image filter from a color filter.
178  * @tc.size  : SmallTest
179  * @tc.type  : Function
180  * @tc.level : Level 3
181  */
182 HWTEST_F(DrawingNativeImageFilterTest, testImageFilterCreateFromColorFilterMultipleCalls, TestSize.Level3) {
183     for (int i = 0; i < 10; i++) {
184         OH_Drawing_ColorFilter *colorFilter = OH_Drawing_ColorFilterCreateLinearToSrgbGamma();
185         OH_Drawing_ImageFilter *filter = OH_Drawing_ImageFilterCreateFromColorFilter(colorFilter, nullptr);
186         EXPECT_NE(filter, nullptr);
187         OH_Drawing_ImageFilterDestroy(filter);
188         OH_Drawing_ColorFilterDestroy(colorFilter);
189     }
190 }
191 
192 /*
193  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_IMAGE_FILTER_0300
194  * @tc.name: testImageFilterDestroyNormal
195  * @tc.desc: Test for destroying an image filter with normal parameters.
196  * @tc.size  : SmallTest
197  * @tc.type  : Function
198  * @tc.level : Level 0
199  */
200 HWTEST_F(DrawingNativeImageFilterTest, testImageFilterDestroyNormal, TestSize.Level0) {
201     OH_Drawing_ImageFilter *filter = OH_Drawing_ImageFilterCreateBlur(1, 1, OH_Drawing_TileMode::MIRROR, nullptr);
202     OH_Drawing_ImageFilterDestroy(filter);
203 }
204 
205 /*
206  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_IMAGE_FILTER_0301
207  * @tc.name: testImageFilterDestroyNULL
208  * @tc.desc: Test for destroying an image filter with NULL parameters.
209  * @tc.size  : SmallTest
210  * @tc.type  : Function
211  * @tc.level : Level 3
212  */
213 HWTEST_F(DrawingNativeImageFilterTest, testImageFilterDestroyNULL, TestSize.Level3) {
214     OH_Drawing_ImageFilterDestroy(nullptr);
215 }
216 
217 /*
218  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_IMAGE_FILTER_0302
219  * @tc.name: testImageFilterDestroyMultipleCalls
220  * @tc.desc: Test for multiple calls of destroying an image filter.
221  * @tc.size  : SmallTest
222  * @tc.type  : Function
223  * @tc.level : Level 3
224  */
225 HWTEST_F(DrawingNativeImageFilterTest, testImageFilterDestroyMultipleCalls, TestSize.Level3) {
226     // 1. Call OH_Drawing_ImageFilterCreateFromColorFilter 10 times
227     OH_Drawing_ColorFilter *colorFilters[10];
228     OH_Drawing_ImageFilter *filters[10];
229     for (int i = 0; i < 10; i++) {
230         colorFilters[i] = OH_Drawing_ColorFilterCreateLinearToSrgbGamma();
231         filters[i] = OH_Drawing_ImageFilterCreateFromColorFilter(colorFilters[i], nullptr);
232     }
233     // 2. Call OH_Drawing_ImageFilterDestroy 10 times
234     for (int i = 0; i < 10; i++) {
235         OH_Drawing_ImageFilterDestroy(filters[i]);
236         OH_Drawing_ColorFilterDestroy(colorFilters[i]);
237     }
238     // 3. Call OH_Drawing_ImageFilterCreateBlur and OH_Drawing_ImageFilterDestroy alternately 10 times
239     for (int i = 0; i < 10; i++) {
240         OH_Drawing_ImageFilter *filter = OH_Drawing_ImageFilterCreateBlur(1, 1, OH_Drawing_TileMode::MIRROR, nullptr);
241         OH_Drawing_ImageFilterDestroy(filter);
242     }
243 }
244 
245 } // namespace Drawing
246 } // namespace Rosen
247 } // namespace OHOS