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