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