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