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