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