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 21using namespace testing; 22using namespace testing::ext; 23 24namespace OHOS { 25namespace Rosen { 26namespace Drawing { 27class NativeDrawingBitmapTest : public testing::Test { 28public: 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 37void NativeDrawingBitmapTest::SetUpTestCase() {} 38void NativeDrawingBitmapTest::TearDownTestCase() {} 39void NativeDrawingBitmapTest::SetUp() 40{ 41 bitmap_ = OH_Drawing_BitmapCreate(); 42 ASSERT_NE(bitmap_, nullptr); 43} 44 45void 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 */ 60HWTEST_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 */ 77HWTEST_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 */ 94HWTEST_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 */ 112HWTEST_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 */ 129HWTEST_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 */ 157HWTEST_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 */ 176HWTEST_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 */ 207HWTEST_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 */ 247HWTEST_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