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