1 /* 2 * Copyright (c) 2024 Shenzhen Kaihong Digital Industry Development 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, software 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 "DrawingNativeCanvasCommon.h" 19 #include "drawing_bitmap.h" 20 #include "drawing_brush.h" 21 #include "drawing_canvas.h" 22 #include "drawing_color.h" 23 #include "drawing_color_filter.h" 24 #include "drawing_filter.h" 25 #include "drawing_font.h" 26 #include "drawing_image.h" 27 #include "drawing_mask_filter.h" 28 #include "drawing_matrix.h" 29 #include "drawing_memory_stream.h" 30 #include "drawing_path.h" 31 #include "drawing_pen.h" 32 #include "drawing_point.h" 33 #include "drawing_rect.h" 34 #include "drawing_region.h" 35 #include "drawing_round_rect.h" 36 #include "drawing_sampling_options.h" 37 #include "drawing_shader_effect.h" 38 #include "drawing_text_blob.h" 39 #include "drawing_typeface.h" 40 #include "drawing_pixel_map.h" 41 #include "image/pixelmap_native.h" 42 43 #define DRAW_COLORBLUE 0xFF0000FF 44 45 using namespace testing; 46 using namespace testing::ext; 47 48 namespace OHOS { 49 namespace Rosen { 50 namespace Drawing { 51 class DrawingNativeCanvasPart5Test : public testing::Test { 52 protected: 53 // 在每个测试用例执行前调用 SetUp()54 void SetUp() override 55 { 56 // 设置代码 57 std::cout << "DrawingNativeCanvasPart5Test Setup code called before each test case." << std::endl; 58 OH_Drawing_ErrorCodeReset(); 59 std::cout << "DrawingNativeCanvasPart5Test errorCodeReset before each test case." << std::endl; 60 } TearDown()61 void TearDown() override 62 { 63 std::cout << "DrawingNativeCanvasPart5Test Setup code called after each test case." << std::endl; 64 OH_Drawing_ErrorCodeReset(); 65 std::cout << "DrawingNativeCanvasPart5Test errorCodeReset after each test case." << std::endl; 66 } 67 }; 68 69 /* 70 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_4800 71 * @tc.name: testCanvasQuickRejectPathNull 72 * @tc.desc: test for testCanvasQuickRejectPathNull. 73 * @tc.size : SmallTest 74 * @tc.type : Function 75 * @tc.level : Level 3 76 */ 77 HWTEST_F(DrawingNativeCanvasPart5Test, testCanvasQuickRejectPathNull, TestSize.Level3) 78 { 79 // OH_Drawing_CanvasCreate 80 OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate(); 81 EXPECT_NE(canvas, nullptr); 82 // OH_Drawing_PathCreate 83 OH_Drawing_Path* path = OH_Drawing_PathCreate(); 84 EXPECT_NE(path, nullptr); 85 bool quickReject = false; 86 87 // canvas参数传nullptr 88 auto result1 = OH_Drawing_CanvasQuickRejectPath(nullptr, path, &quickReject); 89 EXPECT_EQ(result1, OH_DRAWING_ERROR_INVALID_PARAMETER); 90 91 // path参数传nullptr 92 auto result2 = OH_Drawing_CanvasQuickRejectPath(canvas, nullptr, &quickReject); 93 EXPECT_EQ(result2, OH_DRAWING_ERROR_INVALID_PARAMETER); 94 95 // quickReject参数传nullptr 96 auto result3 = OH_Drawing_CanvasQuickRejectPath(canvas, path, nullptr); 97 EXPECT_EQ(result3, OH_DRAWING_ERROR_INVALID_PARAMETER); 98 99 // 调用销毁函数销毁指针 100 OH_Drawing_PathDestroy(path); 101 OH_Drawing_CanvasDestroy(canvas); 102 } 103 104 /* 105 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_4801 106 * @tc.name: testCanvasQuickRejectPathNormal 107 * @tc.desc: test for testCanvasQuickRejectPathNormal. 108 * @tc.size : SmallTest 109 * @tc.type : Function 110 * @tc.level : Level 1 111 */ 112 HWTEST_F(DrawingNativeCanvasPart5Test, testCanvasQuickRejectPathNormal, TestSize.Level1) 113 { 114 // OH_Drawing_CanvasCreate 115 OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate(); 116 EXPECT_NE(canvas, nullptr); 117 // OH_Drawing_PathCreate 118 OH_Drawing_Path* path = OH_Drawing_PathCreate(); 119 EXPECT_NE(path, nullptr); 120 bool quickReject = false; 121 122 // 正常传参,path部分在画布内 123 OH_Drawing_PathAddRect(path, -100, 100, 200, 300, OH_Drawing_PathDirection::PATH_DIRECTION_CW); 124 auto result1 = OH_Drawing_CanvasQuickRejectPath(canvas, path, &quickReject); 125 // add assert 126 EXPECT_EQ(result1, OH_DRAWING_SUCCESS); 127 128 // 正常传参,path在画布外 129 OH_Drawing_PathAddRect(path, -100, 100, -200, 300, OH_Drawing_PathDirection::PATH_DIRECTION_CW); 130 auto result2 = OH_Drawing_CanvasQuickRejectPath(canvas, path, &quickReject); 131 // add assert 132 EXPECT_EQ(result2, OH_DRAWING_SUCCESS); 133 134 // 正常传参,path只有一个顶点与画布相接 135 OH_Drawing_PathAddRect(path, -100, -100, 0, 0, OH_Drawing_PathDirection::PATH_DIRECTION_CW); 136 auto result3 = OH_Drawing_CanvasQuickRejectPath(canvas, path, &quickReject); 137 // add assert 138 EXPECT_EQ(result3, OH_DRAWING_SUCCESS); 139 140 // 调用销毁函数销毁指针 141 OH_Drawing_PathDestroy(path); 142 OH_Drawing_CanvasDestroy(canvas); 143 } 144 145 /* 146 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_4802 147 * @tc.name: testCanvasQuickRejectPathCalls 148 * @tc.desc: test for testCanvasQuickRejectPathCalls. 149 * @tc.size : SmallTest 150 * @tc.type : Function 151 * @tc.level : Level 2 152 */ 153 HWTEST_F(DrawingNativeCanvasPart5Test, testCanvasQuickRejectPathCalls, TestSize.Level2) 154 { 155 // OH_Drawing_CanvasCreate 156 OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate(); 157 EXPECT_NE(canvas, nullptr); 158 // OH_Drawing_PathCreate 159 OH_Drawing_Path* path = OH_Drawing_PathCreate(); 160 EXPECT_NE(path, nullptr); 161 bool quickReject = false; 162 163 // 正常传参,path在画布内,调用1000次 164 for (int i = 0; i < 1000; ++i) { 165 OH_Drawing_PathAddRect(path, 100, 100, 200, 200, OH_Drawing_PathDirection::PATH_DIRECTION_CW); 166 auto result = OH_Drawing_CanvasQuickRejectPath(canvas, path, &quickReject); 167 // add assert 168 EXPECT_EQ(result, OH_DRAWING_SUCCESS); 169 } 170 171 // 调用销毁函数销毁指针 172 OH_Drawing_PathDestroy(path); 173 OH_Drawing_CanvasDestroy(canvas); 174 } 175 176 /* 177 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_4900 178 * @tc.name: testCanvasQuickRejectRectNull 179 * @tc.desc: test for testCanvasQuickRejectRectNull. 180 * @tc.size : SmallTest 181 * @tc.type : Function 182 * @tc.level : Level 3 183 */ 184 HWTEST_F(DrawingNativeCanvasPart5Test, testCanvasQuickRejectRectNull, TestSize.Level3) 185 { 186 // OH_Drawing_CanvasCreate 187 OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate(); 188 EXPECT_NE(canvas, nullptr); 189 // OH_Drawing_RectCreate 190 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(0, 0, 100, 100); 191 EXPECT_NE(rect, nullptr); 192 bool quickReject = false; 193 194 // canvas参数传nullptr 195 auto result1 = OH_Drawing_CanvasQuickRejectRect(nullptr, rect, &quickReject); 196 EXPECT_EQ(result1, OH_DRAWING_ERROR_INVALID_PARAMETER); 197 198 // rect参数传nullptr 199 auto result2 = OH_Drawing_CanvasQuickRejectRect(canvas, nullptr, &quickReject); 200 EXPECT_EQ(result2, OH_DRAWING_ERROR_INVALID_PARAMETER); 201 202 // quickReject参数传nullptr 203 auto result3 = OH_Drawing_CanvasQuickRejectRect(canvas, rect, nullptr); 204 EXPECT_EQ(result3, OH_DRAWING_ERROR_INVALID_PARAMETER); 205 206 // 调用销毁函数销毁指针 207 OH_Drawing_RectDestroy(rect); 208 OH_Drawing_CanvasDestroy(canvas); 209 } 210 211 /* 212 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_4901 213 * @tc.name: testCanvasQuickRejectRectNormal 214 * @tc.desc: test for testCanvasQuickRejectRectNormal. 215 * @tc.size : SmallTest 216 * @tc.type : Function 217 * @tc.level : Level 1 218 */ 219 HWTEST_F(DrawingNativeCanvasPart5Test, testCanvasQuickRejectRectNormal, TestSize.Level1) 220 { 221 // OH_Drawing_CanvasCreate 222 OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate(); 223 EXPECT_NE(canvas, nullptr); 224 bool quickReject = false; 225 226 // 正常传参,rect部分在画布内 227 OH_Drawing_Rect* rect1 = OH_Drawing_RectCreate(-100, 0, 300, 200); 228 EXPECT_NE(rect1, nullptr); 229 auto result1 = OH_Drawing_CanvasQuickRejectRect(canvas, rect1, &quickReject); 230 EXPECT_EQ(result1, OH_DRAWING_SUCCESS); 231 232 // 正常传参,rect在画布外 233 OH_Drawing_Rect* rect2 = OH_Drawing_RectCreate(-100, -100, -200, -200); 234 EXPECT_NE(rect2, nullptr); 235 auto result2 = OH_Drawing_CanvasQuickRejectRect(canvas, rect2, &quickReject); 236 EXPECT_EQ(result2, OH_DRAWING_SUCCESS); 237 238 // 正常传参,rect比画布大包含画布 239 OH_Drawing_Rect* rect3 = OH_Drawing_RectCreate(-20, -20, 999999, 999999); 240 EXPECT_NE(rect3, nullptr); 241 auto result3 = OH_Drawing_CanvasQuickRejectRect(canvas, rect3, &quickReject); 242 EXPECT_EQ(result3, OH_DRAWING_SUCCESS); 243 244 // 调用销毁函数销毁指针 245 OH_Drawing_RectDestroy(rect1); 246 OH_Drawing_RectDestroy(rect2); 247 OH_Drawing_RectDestroy(rect3); 248 OH_Drawing_CanvasDestroy(canvas); 249 } 250 251 /* 252 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_4902 253 * @tc.name: testCanvasQuickRejectRectCalls 254 * @tc.desc: test for testCanvasQuickRejectRectCalls. 255 * @tc.size : SmallTest 256 * @tc.type : Function 257 * @tc.level : Level 2 258 */ 259 HWTEST_F(DrawingNativeCanvasPart5Test, testCanvasQuickRejectRectCalls, TestSize.Level2) 260 { 261 OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate(); 262 EXPECT_NE(canvas, nullptr); 263 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 100, 200, 200); 264 bool quickReject = false; 265 266 // 正常传参,rect在画布内,调用1000次 267 for (int i = 0; i < 1000; ++i) { 268 auto result = OH_Drawing_CanvasQuickRejectRect(canvas, rect, &quickReject); 269 EXPECT_EQ(result, OH_DRAWING_SUCCESS); 270 } 271 272 // 调用销毁函数销毁指针 273 OH_Drawing_RectDestroy(rect); 274 OH_Drawing_CanvasDestroy(canvas); 275 } 276 277 /* 278 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_5000 279 * @tc.name: testCanvasDrawArcWithCenterNull 280 * @tc.desc: test for testCanvasDrawArcWithCenterNull. 281 * @tc.size : SmallTest 282 * @tc.type : Function 283 * @tc.level : Level 3 284 */ 285 HWTEST_F(DrawingNativeCanvasPart5Test, testCanvasDrawArcWithCenterNull, TestSize.Level3) 286 { 287 OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate(); 288 EXPECT_NE(canvas, nullptr); 289 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(0, 0, 100, 100); 290 EXPECT_NE(rect, nullptr); 291 292 // canvas参数传nullptr 293 auto result = OH_Drawing_CanvasDrawArcWithCenter(nullptr, rect, 0, 180, false); 294 EXPECT_EQ(result, OH_DRAWING_ERROR_INVALID_PARAMETER); 295 296 // rect参数传nullptr 297 result = OH_Drawing_CanvasDrawArcWithCenter(canvas, nullptr, 0, 180, false); 298 EXPECT_EQ(result, OH_DRAWING_ERROR_INVALID_PARAMETER); 299 300 // 调用销毁函数销毁指针 301 OH_Drawing_RectDestroy(rect); 302 OH_Drawing_CanvasDestroy(canvas); 303 } 304 305 /* 306 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_5001 307 * @tc.name: testCanvasDrawArcWithCenterNormal 308 * @tc.desc: test for testCanvasDrawArcWithCenterNormal. 309 * @tc.size : SmallTest 310 * @tc.type : Function 311 * @tc.level : Level 1 312 */ 313 HWTEST_F(DrawingNativeCanvasPart5Test, testCanvasDrawArcWithCenterNormal, TestSize.Level1) 314 { 315 OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate(); 316 EXPECT_NE(canvas, nullptr); 317 318 // 正常传参,useCenter参数传true 319 OH_Drawing_Rect* rect1 = OH_Drawing_RectCreate(0, 0, 100, 100); 320 EXPECT_NE(rect1, nullptr); 321 auto result1 = OH_Drawing_CanvasDrawArcWithCenter(canvas, rect1, 0, 180, true); 322 EXPECT_EQ(result1, OH_DRAWING_SUCCESS); 323 324 // 正常传参,useCenter参数传true,起始角度小于0,扫描角度大于360 325 OH_Drawing_Rect* rect2 = OH_Drawing_RectCreate(0, 0, 100, 100); 326 EXPECT_NE(rect2, nullptr); 327 auto result2 = OH_Drawing_CanvasDrawArcWithCenter(canvas, rect2, -10.0, 650, true); 328 EXPECT_EQ(result2, OH_DRAWING_SUCCESS); 329 330 // 正常传参,useCenter参数传false,起始角度大于0,扫描角度小于0 331 OH_Drawing_Rect* rect3 = OH_Drawing_RectCreate(0, 0, 100, 100); 332 EXPECT_NE(rect3, nullptr); 333 auto result3 = OH_Drawing_CanvasDrawArcWithCenter(canvas, rect3, 66, -120, false); 334 EXPECT_EQ(result3, OH_DRAWING_SUCCESS); 335 336 // 调用销毁函数销毁指针 337 OH_Drawing_RectDestroy(rect1); 338 OH_Drawing_RectDestroy(rect2); 339 OH_Drawing_RectDestroy(rect3); 340 OH_Drawing_CanvasDestroy(canvas); 341 } 342 343 /* 344 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_5002 345 * @tc.name: testCanvasDrawArcWithCenterCalls 346 * @tc.desc: test for testCanvasDrawArcWithCenterCalls. 347 * @tc.size : SmallTest 348 * @tc.type : Function 349 * @tc.level : Level 2 350 */ 351 HWTEST_F(DrawingNativeCanvasPart5Test, testCanvasDrawArcWithCenterCalls, TestSize.Level2) 352 { 353 OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate(); 354 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 100, 300, 300); 355 356 // 正常传参,rect在画布内,调用1000次 357 for (int i = 0; i < 1000; ++i) { 358 auto result = OH_Drawing_CanvasDrawArcWithCenter(canvas, rect, 0, 180, true); 359 EXPECT_EQ(result, OH_DRAWING_SUCCESS); 360 } 361 362 // 调用销毁函数销毁指针 363 OH_Drawing_RectDestroy(rect); 364 OH_Drawing_CanvasDestroy(canvas); 365 } 366 367 /* 368 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_5100 369 * @tc.name: testCanvasDrawNestedRoundRectNull 370 * @tc.desc: test for testCanvasDrawNestedRoundRectNull. 371 * @tc.size : SmallTest 372 * @tc.type : Function 373 * @tc.level : Level 3 374 */ 375 HWTEST_F(DrawingNativeCanvasPart5Test, testCanvasDrawNestedRoundRectNull, TestSize.Level3) 376 { 377 OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate(); 378 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(0, 0, 200, 200); 379 OH_Drawing_RoundRect* outer = OH_Drawing_RoundRectCreate(rect, 10, 10); 380 OH_Drawing_Rect* rect1 = OH_Drawing_RectCreate(50, 50, 100, 100); 381 OH_Drawing_RoundRect* inner = OH_Drawing_RoundRectCreate(rect1, 10, 10); 382 383 // canvas参数传nullptr 384 auto result = OH_Drawing_CanvasDrawNestedRoundRect(nullptr, outer, inner); 385 EXPECT_EQ(result, OH_DRAWING_ERROR_INVALID_PARAMETER); 386 387 // outer参数传nullptr 388 result = OH_Drawing_CanvasDrawNestedRoundRect(canvas, nullptr, inner); 389 EXPECT_EQ(result, OH_DRAWING_ERROR_INVALID_PARAMETER); 390 391 // inner参数传nullptr 392 result = OH_Drawing_CanvasDrawNestedRoundRect(canvas, outer, nullptr); 393 EXPECT_EQ(result, OH_DRAWING_ERROR_INVALID_PARAMETER); 394 395 // 调用销毁函数销毁指针 396 OH_Drawing_RoundRectDestroy(inner); 397 OH_Drawing_RectDestroy(rect1); 398 OH_Drawing_RoundRectDestroy(outer); 399 OH_Drawing_RectDestroy(rect); 400 OH_Drawing_CanvasDestroy(canvas); 401 } 402 403 /* 404 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_5101 405 * @tc.name: testCanvasDrawNestedRoundRectNormal 406 * @tc.desc: test for testCanvasDrawNestedRoundRectNormal. 407 * @tc.size : SmallTest 408 * @tc.type : Function 409 * @tc.level : Level 1 410 */ 411 HWTEST_F(DrawingNativeCanvasPart5Test, testCanvasDrawNestedRoundRectNormal, TestSize.Level1) 412 { 413 OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate(); 414 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(0, 0, 200, 200); 415 OH_Drawing_RoundRect* outer = OH_Drawing_RoundRectCreate(rect, 10, 10); 416 OH_Drawing_Rect* rect1 = OH_Drawing_RectCreate(50, 50, 100, 100); 417 OH_Drawing_RoundRect* inner = OH_Drawing_RoundRectCreate(rect1, 10, 10); 418 419 // 正常传参,outer>inner 420 auto result1 = OH_Drawing_CanvasDrawNestedRoundRect(canvas, outer, inner); 421 EXPECT_EQ(result1, OH_DRAWING_SUCCESS); 422 423 // 正常传参,outer<inner 424 rect = OH_Drawing_RectCreate(50, 50, 100, 100); 425 outer = OH_Drawing_RoundRectCreate(rect, 10, 10); 426 rect1 = OH_Drawing_RectCreate(0, 0, 200, 200); 427 inner = OH_Drawing_RoundRectCreate(rect1, 10, 10); 428 auto result2 = OH_Drawing_CanvasDrawNestedRoundRect(canvas, outer, inner); 429 EXPECT_EQ(result2, OH_DRAWING_SUCCESS); 430 431 // 调用销毁函数销毁指针 432 OH_Drawing_RoundRectDestroy(inner); 433 OH_Drawing_RectDestroy(rect1); 434 OH_Drawing_RoundRectDestroy(outer); 435 OH_Drawing_RectDestroy(rect); 436 OH_Drawing_CanvasDestroy(canvas); 437 } 438 439 /* 440 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_5102 441 * @tc.name: testCanvasDrawNestedRoundRectCalls 442 * @tc.desc: test for testCanvasDrawNestedRoundRectCalls. 443 * @tc.size : SmallTest 444 * @tc.type : Function 445 * @tc.level : Level 2 446 */ 447 HWTEST_F(DrawingNativeCanvasPart5Test, testCanvasDrawNestedRoundRectCalls, TestSize.Level2) 448 { 449 OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate(); 450 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(0, 0, 200, 200); 451 OH_Drawing_RoundRect* outer = OH_Drawing_RoundRectCreate(rect, 10, 10); 452 OH_Drawing_Rect* rect1 = OH_Drawing_RectCreate(50, 50, 100, 100); 453 OH_Drawing_RoundRect* inner = OH_Drawing_RoundRectCreate(rect1, 10, 10); 454 455 // 正常传参,rect在画布内,调用1000次 456 for (int i = 0; i < 1000; ++i) { 457 auto result = OH_Drawing_CanvasDrawNestedRoundRect(canvas, outer, inner); 458 EXPECT_EQ(result, OH_DRAWING_SUCCESS); 459 } 460 461 // 调用销毁函数销毁指针 462 OH_Drawing_RoundRectDestroy(inner); 463 OH_Drawing_RectDestroy(rect1); 464 OH_Drawing_RoundRectDestroy(outer); 465 OH_Drawing_RectDestroy(rect); 466 OH_Drawing_CanvasDestroy(canvas); 467 } 468 469 /* 470 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_5200 471 * @tc.name: testCanvasDrawPixelMapNineNull 472 * @tc.desc: test for testCanvasDrawPixelMapNineNull. 473 * @tc.size : SmallTest 474 * @tc.type : Function 475 * @tc.level : Level 3 476 */ 477 HWTEST_F(DrawingNativeCanvasPart5Test, testCanvasDrawPixelMapNineNull, TestSize.Level3) 478 { 479 OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate(); 480 OH_Drawing_CanvasClear(canvas, 0xFFFFFFFF); 481 OH_Pixelmap_InitializationOptions* createOps = nullptr; 482 auto ret = OH_PixelmapInitializationOptions_Create(&createOps); 483 int32_t imageWidth = 100; 484 int32_t imageHeight = 100; 485 OH_PixelmapInitializationOptions_SetWidth(createOps, imageWidth); 486 OH_PixelmapInitializationOptions_SetHeight(createOps, imageHeight); 487 OH_PixelmapInitializationOptions_SetPixelFormat(createOps, 3); // 3 is RGBA fromat 488 OH_PixelmapInitializationOptions_SetSrcPixelFormat(createOps, 3); // 3 is RGBA fromat 489 OH_PixelmapInitializationOptions_SetAlphaType(createOps, 2); // 2 is ALPHA_FORMAT_PREMUL 490 size_t bufferSize = imageWidth * imageHeight * 4; // 4 for test 491 void* bitmapAddr = malloc(bufferSize); 492 if (bitmapAddr == nullptr) { 493 return; 494 } 495 for (int i = 0; i < imageWidth * imageHeight; i++) { 496 ((uint32_t*)bitmapAddr)[i] = DRAW_COLORBLUE; 497 } 498 OH_PixelmapNative* pixelMapNative = nullptr; 499 OH_Drawing_SamplingOptions* samplingOptions = 500 OH_Drawing_SamplingOptionsCreate(FILTER_MODE_NEAREST, MIPMAP_MODE_NEAREST); 501 ret = OH_PixelmapNative_CreatePixelmap((uint8_t*)bitmapAddr, bufferSize, createOps, &pixelMapNative); 502 OH_Drawing_PixelMap* pixelMap = OH_Drawing_PixelMapGetFromOhPixelMapNative(pixelMapNative); 503 OH_Drawing_Rect* center = OH_Drawing_RectCreate(0, 0, 100, 100); 504 OH_Drawing_Rect* dstRect = OH_Drawing_RectCreate(0, 0, 200, 200); 505 506 auto result1 = OH_Drawing_CanvasDrawPixelMapNine(nullptr, pixelMap, center, dstRect, 507 OH_Drawing_FilterMode::FILTER_MODE_NEAREST); 508 EXPECT_EQ(result1, OH_DRAWING_ERROR_INVALID_PARAMETER); 509 auto result2 = OH_Drawing_CanvasDrawPixelMapNine(canvas, nullptr, center, dstRect, 510 OH_Drawing_FilterMode::FILTER_MODE_NEAREST); 511 EXPECT_EQ(result2, OH_DRAWING_ERROR_INVALID_PARAMETER); 512 auto result3 = OH_Drawing_CanvasDrawPixelMapNine(canvas, pixelMap, nullptr, dstRect, 513 OH_Drawing_FilterMode::FILTER_MODE_NEAREST); 514 EXPECT_EQ(result3, OH_DRAWING_SUCCESS); 515 auto result4 = OH_Drawing_CanvasDrawPixelMapNine(canvas, pixelMap, center, nullptr, 516 OH_Drawing_FilterMode::FILTER_MODE_NEAREST); 517 EXPECT_EQ(result4, OH_DRAWING_ERROR_INVALID_PARAMETER); 518 // 调用销毁函数销毁指针 519 OH_Drawing_SamplingOptionsDestroy(samplingOptions); 520 OH_PixelmapNative_Release(pixelMapNative); 521 free(bitmapAddr); 522 OH_PixelmapInitializationOptions_Release(createOps); 523 OH_Drawing_CanvasDetachPen(canvas); 524 OH_Drawing_CanvasDetachBrush(canvas); 525 OH_Drawing_RectDestroy(dstRect); 526 OH_Drawing_RectDestroy(center); 527 OH_Drawing_CanvasDestroy(canvas); 528 } 529 530 /* 531 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_5201 532 * @tc.name: testCanvasDrawPixelMapNineNormal 533 * @tc.desc: test for testCanvasDrawPixelMapNineNormal. 534 * @tc.size : SmallTest 535 * @tc.type : Function 536 * @tc.level : Level 1 537 */ 538 HWTEST_F(DrawingNativeCanvasPart5Test, testCanvasDrawPixelMapNineNormal, TestSize.Level1) 539 { 540 OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate(); 541 EXPECT_NE(canvas, nullptr); 542 OH_Drawing_CanvasClear(canvas, 0xFFFFFFFF); 543 OH_Pixelmap_InitializationOptions* createOps = nullptr; 544 auto ret = OH_PixelmapInitializationOptions_Create(&createOps); 545 int32_t imageWidth = 100; 546 int32_t imageHeight = 100; 547 OH_PixelmapInitializationOptions_SetWidth(createOps, imageWidth); 548 OH_PixelmapInitializationOptions_SetHeight(createOps, imageHeight); 549 OH_PixelmapInitializationOptions_SetPixelFormat(createOps, 3); // 3 is RGBA fromat 550 OH_PixelmapInitializationOptions_SetSrcPixelFormat(createOps, 3); // 3 is RGBA fromat 551 OH_PixelmapInitializationOptions_SetAlphaType(createOps, 2); // 2 is ALPHA_FORMAT_PREMUL 552 size_t bufferSize = imageWidth * imageHeight * 4; // 4 for test 553 void* bitmapAddr = malloc(bufferSize); 554 if (bitmapAddr == nullptr) { 555 return; 556 } 557 for (int i = 0; i < imageWidth * imageHeight; i++) { 558 ((uint32_t*)bitmapAddr)[i] = DRAW_COLORBLUE; 559 } 560 OH_PixelmapNative* pixelMapNative = nullptr; 561 OH_Drawing_SamplingOptions* samplingOptions = 562 OH_Drawing_SamplingOptionsCreate(FILTER_MODE_NEAREST, MIPMAP_MODE_NEAREST); 563 ret = OH_PixelmapNative_CreatePixelmap((uint8_t*)bitmapAddr, bufferSize, createOps, &pixelMapNative); 564 OH_Drawing_PixelMap* pixelMap = OH_Drawing_PixelMapGetFromOhPixelMapNative(pixelMapNative); 565 OH_Drawing_Rect* center = OH_Drawing_RectCreate(0, 0, 100, 100); 566 EXPECT_NE(center, nullptr); 567 OH_Drawing_Rect* dstRect = OH_Drawing_RectCreate(0, 0, 200, 200); 568 EXPECT_NE(dstRect, nullptr); 569 // 正常传参 570 auto result = OH_Drawing_CanvasDrawPixelMapNine(canvas, pixelMap, center, dstRect, 571 OH_Drawing_FilterMode::FILTER_MODE_NEAREST); 572 EXPECT_EQ(result, OH_DRAWING_SUCCESS); 573 // 调用销毁函数销毁指针 574 OH_Drawing_SamplingOptionsDestroy(samplingOptions); 575 OH_PixelmapNative_Release(pixelMapNative); 576 free(bitmapAddr); 577 OH_PixelmapInitializationOptions_Release(createOps); 578 OH_Drawing_CanvasDetachPen(canvas); 579 OH_Drawing_CanvasDetachBrush(canvas); 580 OH_Drawing_RectDestroy(dstRect); 581 OH_Drawing_RectDestroy(center); 582 OH_Drawing_CanvasDestroy(canvas); 583 } 584 585 /* 586 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_5202 587 * @tc.name: testCanvasDrawPixelMapNineCalls 588 * @tc.desc: test for testCanvasDrawPixelMapNineCalls. 589 * @tc.size : SmallTest 590 * @tc.type : Function 591 * @tc.level : Level 2 592 */ 593 HWTEST_F(DrawingNativeCanvasPart5Test, testCanvasDrawPixelMapNineCalls, TestSize.Level2) 594 { 595 OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate(); 596 EXPECT_NE(canvas, nullptr); 597 OH_Drawing_CanvasClear(canvas, 0xFFFFFFFF); 598 OH_Pixelmap_InitializationOptions* createOps = nullptr; 599 auto ret = OH_PixelmapInitializationOptions_Create(&createOps); 600 int32_t imageWidth = 100; 601 int32_t imageHeight = 100; 602 OH_PixelmapInitializationOptions_SetWidth(createOps, imageWidth); 603 OH_PixelmapInitializationOptions_SetHeight(createOps, imageHeight); 604 OH_PixelmapInitializationOptions_SetPixelFormat(createOps, 3); // 3 is RGBA fromat 605 OH_PixelmapInitializationOptions_SetSrcPixelFormat(createOps, 3); // 3 is RGBA fromat 606 OH_PixelmapInitializationOptions_SetAlphaType(createOps, 2); // 2 is ALPHA_FORMAT_PREMUL 607 size_t bufferSize = imageWidth * imageHeight * 4; // 4 for test 608 void* bitmapAddr = malloc(bufferSize); 609 if (bitmapAddr == nullptr) { 610 return; 611 } 612 for (int i = 0; i < imageWidth * imageHeight; i++) { 613 ((uint32_t*)bitmapAddr)[i] = DRAW_COLORBLUE; 614 } 615 OH_PixelmapNative* pixelMapNative = nullptr; 616 OH_Drawing_SamplingOptions* samplingOptions = 617 OH_Drawing_SamplingOptionsCreate(FILTER_MODE_NEAREST, MIPMAP_MODE_NEAREST); 618 ret = OH_PixelmapNative_CreatePixelmap((uint8_t*)bitmapAddr, bufferSize, createOps, &pixelMapNative); 619 OH_Drawing_PixelMap* pixelMap = OH_Drawing_PixelMapGetFromOhPixelMapNative(pixelMapNative); 620 OH_Drawing_Rect* center = OH_Drawing_RectCreate(0, 0, 100, 100); 621 EXPECT_NE(center, nullptr); 622 OH_Drawing_Rect* dstRect = OH_Drawing_RectCreate(0, 0, 200, 200); 623 EXPECT_NE(dstRect, nullptr); 624 // 正常传参,调用1000次 625 for (int i = 0; i < 1000; ++i) { 626 auto result = OH_Drawing_CanvasDrawPixelMapNine(canvas, pixelMap, center, 627 dstRect, OH_Drawing_FilterMode::FILTER_MODE_NEAREST); 628 EXPECT_EQ(result, OH_DRAWING_SUCCESS); 629 } 630 // 调用销毁函数销毁指针 631 OH_Drawing_SamplingOptionsDestroy(samplingOptions); 632 OH_PixelmapNative_Release(pixelMapNative); 633 free(bitmapAddr); 634 OH_PixelmapInitializationOptions_Release(createOps); 635 OH_Drawing_CanvasDetachPen(canvas); 636 OH_Drawing_CanvasDetachBrush(canvas); 637 OH_Drawing_RectDestroy(dstRect); 638 OH_Drawing_RectDestroy(center); 639 OH_Drawing_CanvasDestroy(canvas); 640 } 641 642 } // namespace Drawing 643 } // namespace Rosen 644 } // namespace OHOS