1 /*
2 * Copyright (c) 2022-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 "gtest/gtest.h"
17
18 #include "drawing_bitmap.h"
19 #include "drawing_error_code.h"
20 #include "drawing_types.h"
21
22 #ifdef RS_ENABLE_VK
23 #include "platform/ohos/backend/rs_vulkan_context.h"
24 #endif
25
26 using namespace testing;
27 using namespace testing::ext;
28
29 namespace OHOS {
30 namespace Rosen {
31 namespace Drawing {
32 class NativeDrawingBitmapTest : public testing::Test {
33 public:
34 static void SetUpTestCase();
35 static void TearDownTestCase();
36 void SetUp() override;
37 void TearDown() override;
38 protected:
39 OH_Drawing_Bitmap* bitmap_ = nullptr;
40 };
41
SetUpTestCase()42 void NativeDrawingBitmapTest::SetUpTestCase()
43 {
44 #ifdef RS_ENABLE_VK
45 RsVulkanContext::SetRecyclable(false);
46 #endif
47 }
TearDownTestCase()48 void NativeDrawingBitmapTest::TearDownTestCase() {}
SetUp()49 void NativeDrawingBitmapTest::SetUp()
50 {
51 bitmap_ = OH_Drawing_BitmapCreate();
52 ASSERT_NE(bitmap_, nullptr);
53 }
54
TearDown()55 void NativeDrawingBitmapTest::TearDown()
56 {
57 if (bitmap_ != nullptr) {
58 OH_Drawing_BitmapDestroy(bitmap_);
59 bitmap_ = nullptr;
60 }
61 }
62
63 /*
64 * @tc.name: NativeDrawingBitmapTest_bitmapBuild001
65 * @tc.desc: test for drawing_bitmap build.
66 * @tc.type: FUNC
67 * @tc.require: AR000GTO5R
68 */
69 HWTEST_F(NativeDrawingBitmapTest, NativeDrawingBitmapTest_bitmapBuild001, TestSize.Level1)
70 {
71 const unsigned int width = 500;
72 const unsigned int height = 500;
73 OH_Drawing_BitmapFormat bitmapFormat { COLOR_FORMAT_ALPHA_8, ALPHA_FORMAT_PREMUL };
74 OH_Drawing_BitmapBuild(bitmap_, width, height, &bitmapFormat);
75 EXPECT_EQ(width, OH_Drawing_BitmapGetWidth(bitmap_));
76 EXPECT_EQ(height, OH_Drawing_BitmapGetHeight(bitmap_));
77 OH_Drawing_BitmapBuild(bitmap_, width, height, nullptr);
78 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
79 OH_Drawing_BitmapBuild(nullptr, width, height, &bitmapFormat);
80 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
81 EXPECT_EQ(OH_Drawing_BitmapGetWidth(nullptr), 0);
82 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
83 EXPECT_EQ(OH_Drawing_BitmapGetHeight(nullptr), 0);
84 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
85 }
86
87 /*
88 * @tc.name: NativeDrawingBitmapTest_bitmapBuild002
89 * @tc.desc: test for drawing_bitmap build.
90 * @tc.type: FUNC
91 * @tc.require: AR000GTO5R
92 */
93 HWTEST_F(NativeDrawingBitmapTest, NativeDrawingBitmapTest_bitmapBuild002, TestSize.Level1)
94 {
95 const unsigned int width = 0;
96 const unsigned int height = 0;
97 OH_Drawing_BitmapFormat bitmapFormat { COLOR_FORMAT_RGB_565, ALPHA_FORMAT_OPAQUE };
98 OH_Drawing_BitmapBuild(bitmap_, width, height, &bitmapFormat);
99 EXPECT_EQ(width, OH_Drawing_BitmapGetWidth(bitmap_));
100 EXPECT_EQ(height, OH_Drawing_BitmapGetHeight(bitmap_));
101 }
102
103 /*
104 * @tc.name: NativeDrawingBitmapTest_bitmapBuild003
105 * @tc.desc: test for drawing_bitmap build.
106 * @tc.type: FUNC
107 * @tc.require: AR000GTO5R
108 */
109 HWTEST_F(NativeDrawingBitmapTest, NativeDrawingBitmapTest_bitmapBuild003, TestSize.Level1)
110 {
111 const unsigned int width = 500;
112 const unsigned int height = 500;
113 OH_Drawing_BitmapFormat bitmapFormat { COLOR_FORMAT_ARGB_4444, ALPHA_FORMAT_UNPREMUL };
114 OH_Drawing_BitmapBuild(bitmap_, width, height, &bitmapFormat);
115 EXPECT_EQ(width, OH_Drawing_BitmapGetWidth(bitmap_));
116 EXPECT_EQ(height, OH_Drawing_BitmapGetHeight(bitmap_));
117 EXPECT_EQ(OH_Drawing_BitmapGetPixels(bitmap_) == nullptr, false);
118 EXPECT_EQ(OH_Drawing_BitmapGetPixels(nullptr) == nullptr, true);
119 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
120 }
121
122 /*
123 * @tc.name: NativeDrawingBitmapTest_bitmapBuild004
124 * @tc.desc: test for drawing_bitmap build.
125 * @tc.type: FUNC
126 * @tc.require: AR000GTO5R
127 */
128 HWTEST_F(NativeDrawingBitmapTest, NativeDrawingBitmapTest_bitmapBuild004, TestSize.Level1)
129 {
130 const unsigned int width = 500;
131 const unsigned int height = 500;
132 OH_Drawing_BitmapFormat bitmapFormat { COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_UNPREMUL };
133 OH_Drawing_BitmapBuild(bitmap_, width, height, &bitmapFormat);
134 EXPECT_EQ(width, OH_Drawing_BitmapGetWidth(bitmap_));
135 EXPECT_EQ(height, OH_Drawing_BitmapGetHeight(bitmap_));
136 }
137
138 /*
139 * @tc.name: NativeDrawingBitmapTest_bitmapCreateFromPixels005
140 * @tc.desc: test for OH_Drawing_BitmapCreateFromPixels.
141 * @tc.type: FUNC
142 * @tc.require: AR000GTO5R
143 */
144 HWTEST_F(NativeDrawingBitmapTest, NativeDrawingBitmapTest_bitmapCreateFromPixels005, TestSize.Level1)
145 {
146 OH_Drawing_Image_Info imageInfo;
147 OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
148 EXPECT_NE(bitmap, nullptr);
149 OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
150 constexpr uint32_t width = 200;
151 constexpr uint32_t height = 200;
152 OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
153 void* pixels = OH_Drawing_BitmapGetPixels(bitmap);
154 EXPECT_NE(pixels, nullptr);
155 uint32_t rowBytes = width * height * 4;
156 bitmap_ = OH_Drawing_BitmapCreateFromPixels(&imageInfo, pixels, rowBytes);
157 EXPECT_NE(bitmap_, nullptr);
158 bitmap_ = OH_Drawing_BitmapCreateFromPixels(&imageInfo, pixels, 0);
159 EXPECT_EQ(bitmap_, nullptr);
160 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
161 bitmap_ = OH_Drawing_BitmapCreateFromPixels(&imageInfo, nullptr, 0);
162 EXPECT_EQ(bitmap_, nullptr);
163 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
164 bitmap_ = OH_Drawing_BitmapCreateFromPixels(nullptr, nullptr, 0);
165 EXPECT_EQ(bitmap_, nullptr);
166 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
167 }
168
169 /*
170 * @tc.name: NativeDrawingBitmapTest_bitmapGetImageInfo006
171 * @tc.desc: test for drawing_bitmapGetImageInfo.
172 * @tc.type: FUNC
173 * @tc.require: AR20240104201189
174 */
175 HWTEST_F(NativeDrawingBitmapTest, NativeDrawingBitmapTest_bitmapGetImageInfo006, TestSize.Level1)
176 {
177 const unsigned int width = 500;
178 const unsigned int height = 500;
179 OH_Drawing_BitmapFormat bitmapFormat { COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_UNPREMUL };
180 OH_Drawing_BitmapBuild(bitmap_, width, height, &bitmapFormat);
181 OH_Drawing_Image_Info* imageInfo = new OH_Drawing_Image_Info();
182 OH_Drawing_BitmapGetImageInfo(bitmap_, imageInfo);
183 EXPECT_EQ(width, imageInfo->width);
184 EXPECT_EQ(height, imageInfo->height);
185 OH_Drawing_BitmapGetImageInfo(nullptr, imageInfo);
186 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
187 OH_Drawing_BitmapGetImageInfo(bitmap_, nullptr);
188 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
189 }
190
191 /*
192 * @tc.name: NativeDrawingBitmapTest_BitmapReadPixels007
193 * @tc.desc: test for drawing_BitmapReadPixels.
194 * @tc.type: FUNC
195 * @tc.require: AR20240104201189
196 */
197 HWTEST_F(NativeDrawingBitmapTest, NativeDrawingBitmapTest_BitmapReadPixels007, TestSize.Level1)
198 {
199 const unsigned int width = 500;
200 const unsigned int height = 500;
201 OH_Drawing_BitmapFormat bitmapFormat {COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_UNPREMUL};
202 OH_Drawing_BitmapBuild(bitmap_, width, height, &bitmapFormat);
203 OH_Drawing_Image_Info imageInfo {width, height, COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_UNPREMUL};
204 void* pixels = new uint32_t[width * height];
205 bool res = OH_Drawing_BitmapReadPixels(nullptr, nullptr, nullptr, width * 4, 0, 0);
206 EXPECT_EQ(res, false);
207 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
208 res = OH_Drawing_BitmapReadPixels(nullptr, &imageInfo, pixels, width * 4, 0, 0);
209 EXPECT_EQ(res, false);
210 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
211 res = OH_Drawing_BitmapReadPixels(bitmap_, nullptr, pixels, width * 4, 0, 0);
212 EXPECT_EQ(res, false);
213 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
214 res = OH_Drawing_BitmapReadPixels(bitmap_, &imageInfo, nullptr, width * 4, 0, 0);
215 EXPECT_EQ(res, false);
216 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
217 res = OH_Drawing_BitmapReadPixels(bitmap_, &imageInfo, pixels, width * 4, 0, 0);
218 EXPECT_EQ(res, true);
219 if (pixels != nullptr) {
220 delete[] reinterpret_cast<uint32_t*>(pixels);
221 pixels = nullptr;
222 }
223 }
224
225 /*
226 * @tc.name: NativeDrawingBitmapTest_GetColorFormat008
227 * @tc.desc: test for drawing_BitmapGetColorFormat.
228 * @tc.type: FUNC
229 * @tc.require: AR20240104201189
230 */
231 HWTEST_F(NativeDrawingBitmapTest, NativeDrawingBitmapTest_GetColorFormat008, TestSize.Level1)
232 {
233 const unsigned int width = 500;
234 const unsigned int height = 500;
235 OH_Drawing_ColorFormat formats[] = {
236 COLOR_FORMAT_UNKNOWN,
237 COLOR_FORMAT_ALPHA_8,
238 COLOR_FORMAT_RGB_565,
239 COLOR_FORMAT_ARGB_4444,
240 COLOR_FORMAT_RGBA_8888,
241 COLOR_FORMAT_BGRA_8888
242 };
243
244 OH_Drawing_AlphaFormat alphaFormats[] = {
245 ALPHA_FORMAT_UNKNOWN,
246 ALPHA_FORMAT_OPAQUE,
247 ALPHA_FORMAT_PREMUL,
248 ALPHA_FORMAT_UNPREMUL
249 };
250 OH_Drawing_ColorFormat colorFormat_;
251 for (int i = 1; i < 6; i++) {
252 OH_Drawing_Bitmap *bitmap = OH_Drawing_BitmapCreate();
253 OH_Drawing_BitmapFormat bitmapFormat = {formats[i], alphaFormats[2]};
254 OH_Drawing_BitmapBuild(bitmap, width, height, &bitmapFormat);
255 if (bitmap == nullptr) {
256 colorFormat_ = OH_Drawing_BitmapGetColorFormat(bitmap);
257 EXPECT_EQ(colorFormat_, formats[0]);
258 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
259 }
260 colorFormat_ = OH_Drawing_BitmapGetColorFormat(bitmap);
261 EXPECT_EQ(colorFormat_, formats[i]);
262 }
263 }
264
265 /*
266 * @tc.name: NativeDrawingBitmapTest_GetAlphaFormat009
267 * @tc.desc: test for drawing_BitmapGetAlphaFormat.
268 * @tc.type: FUNC
269 * @tc.require: AR20240104201189
270 */
271 HWTEST_F(NativeDrawingBitmapTest, NativeDrawingBitmapTest_GetAlphaFormat009, TestSize.Level1)
272 {
273 const unsigned int width = 500;
274 const unsigned int height = 500;
275 OH_Drawing_ColorFormat formats[] = {
276 COLOR_FORMAT_UNKNOWN,
277 COLOR_FORMAT_ALPHA_8,
278 COLOR_FORMAT_RGB_565,
279 COLOR_FORMAT_ARGB_4444,
280 COLOR_FORMAT_RGBA_8888,
281 COLOR_FORMAT_BGRA_8888
282 };
283
284 OH_Drawing_AlphaFormat alphaFormats[] = {
285 ALPHA_FORMAT_UNKNOWN,
286 ALPHA_FORMAT_OPAQUE,
287 ALPHA_FORMAT_PREMUL,
288 ALPHA_FORMAT_UNPREMUL
289 };
290 OH_Drawing_AlphaFormat alphaFormat_;
291 for (int i = 1; i < 4; i++) {
292 OH_Drawing_Bitmap *bitmap = OH_Drawing_BitmapCreate();
293 OH_Drawing_BitmapFormat bitmapFormat = {formats[3], alphaFormats[i]};
294 OH_Drawing_BitmapBuild(bitmap, width, height, &bitmapFormat);
295 if (bitmap == nullptr) {
296 alphaFormat_ = OH_Drawing_BitmapGetAlphaFormat(bitmap);
297 EXPECT_EQ(alphaFormat_, alphaFormats[0]);
298 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
299 }
300 alphaFormat_ = OH_Drawing_BitmapGetAlphaFormat(bitmap);
301 EXPECT_EQ(alphaFormat_, alphaFormats[i]);
302 }
303 }
304 } // namespace Drawing
305 } // namespace Rosen
306 } // namespace OHOS
307