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