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 "drawing_bitmap.h" 19#include "drawing_brush.h" 20#include "drawing_canvas.h" 21#include "drawing_color.h" 22#include "drawing_color_filter.h" 23#include "drawing_filter.h" 24#include "drawing_font.h" 25#include "drawing_image.h" 26#include "drawing_mask_filter.h" 27#include "drawing_matrix.h" 28#include "drawing_memory_stream.h" 29#include "drawing_path.h" 30#include "drawing_pen.h" 31#include "drawing_point.h" 32#include "drawing_rect.h" 33#include "drawing_region.h" 34#include "drawing_round_rect.h" 35#include "drawing_sampling_options.h" 36#include "drawing_shader_effect.h" 37#include "drawing_text_blob.h" 38#include "drawing_typeface.h" 39 40using namespace testing; 41using namespace testing::ext; 42 43namespace OHOS { 44namespace Rosen { 45namespace Drawing { 46class DrawingNativeTextBlobTest : public testing::Test {}; 47 48/* 49 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0100 50 * @tc.name: testTextBlobBuilderCreateDestroyNormal 51 * @tc.desc: test for testTextBlobBuilderCreateDestroyNormal. 52 * @tc.size : SmallTest 53 * @tc.type : Function 54 * @tc.level : Level 0 55 */ 56HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderCreateDestroyNormal, TestSize.Level0) { 57 OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate(); 58 EXPECT_NE(nullptr, canvas); 59 // 1. Use OH_Drawing_TextBlobBuilderCreate and OH_Drawing_CanvasDrawTextBlob together 60 OH_Drawing_TextBlobBuilder *builder = OH_Drawing_TextBlobBuilderCreate(); 61 OH_Drawing_TextBlob *textBlob = OH_Drawing_TextBlobBuilderMake(builder); 62 OH_Drawing_CanvasDrawTextBlob(canvas, textBlob, 0, 0); 63 if (0) { 64 // todo cpp crash 65 // 2. OH_Drawing_TextBlobBuilderDestroy 66 OH_Drawing_TextBlobBuilderDestroy(builder); 67 } 68 OH_Drawing_CanvasDestroy(canvas); 69} 70 71/* 72 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0101 73 * @tc.name: testTextBlobBuilderCreateDestroyNull 74 * @tc.desc: test for testTextBlobBuilderCreateDestroyNull. 75 * @tc.size : SmallTest 76 * @tc.type : Function 77 * @tc.level : Level 3 78 */ 79HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderCreateDestroyNull, TestSize.Level3) { 80 // 1. OH_Drawing_TextBlobBuilderDestroy with nullptr parameter 81 OH_Drawing_TextBlobBuilderDestroy(nullptr); 82} 83 84/* 85 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0102 86 * @tc.name: testTextBlobBuilderCreateDestroyMultipleCalls 87 * @tc.desc: test for testTextBlobBuilderCreateDestroyMultipleCalls. 88 * @tc.size : SmallTest 89 * @tc.type : Function 90 * @tc.level : Level 3 91 */ 92HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderCreateDestroyMultipleCalls, TestSize.Level3) { 93 OH_Drawing_TextBlobBuilder *builders[10]; 94 // 1. Call OH_Drawing_TextBlobBuilderCreate 10 times 95 for (int i = 0; i < 10; i++) { 96 builders[i] = OH_Drawing_TextBlobBuilderCreate(); 97 EXPECT_NE(nullptr, builders[i]); 98 } 99 // 2. Call OH_Drawing_TextBlobBuilderDestroy 10 times 100 for (int i = 0; i < 10; i++) { 101 if (0) { 102 // todo cpp crash 103 OH_Drawing_TextBlobBuilderDestroy(builders[i]); 104 } 105 } 106 // 3. Call OH_Drawing_TextBlobBuilderCreate and OH_Drawing_TextBlobBuilderDestroy alternately 10 times 107 for (int i = 0; i < 10; i++) { 108 OH_Drawing_TextBlobBuilder *builder = OH_Drawing_TextBlobBuilderCreate(); 109 EXPECT_NE(nullptr, builder); 110 if (0) { 111 // todo cpp crash 112 OH_Drawing_TextBlobBuilderDestroy(builder); 113 } 114 } 115} 116 117/* 118 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0200 119 * @tc.name: testTextBlobCreateFromTextNormal 120 * @tc.desc: test for testTextBlobCreateFromTextNormal. 121 * @tc.size : SmallTest 122 * @tc.type : Function 123 * @tc.level : Level 0 124 */ 125HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromTextNormal, TestSize.Level0) { 126 OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate(); 127 EXPECT_NE(nullptr, canvas); 128 // 1. Traverse the enumeration values of OH_Drawing_TextEncoding and use OH_Drawing_CanvasDrawTextBlob in 129 // combination 130 const char *str = "123456"; 131 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 132 EXPECT_NE(font, nullptr); 133 OH_Drawing_Typeface *typeSurface = OH_Drawing_TypefaceCreateDefault(); 134 OH_Drawing_FontSetTypeface(font, typeSurface); 135 OH_Drawing_TextEncoding encodeArray[] = { 136 TEXT_ENCODING_UTF8, 137 TEXT_ENCODING_UTF16, 138 TEXT_ENCODING_UTF32, 139 TEXT_ENCODING_GLYPH_ID, 140 }; 141 for (OH_Drawing_TextEncoding encode : encodeArray) { 142 size_t byteLength = 0; 143 if (encode == TEXT_ENCODING_UTF8) { 144 byteLength = strlen(str); 145 } else if (encode == TEXT_ENCODING_UTF16) { 146 byteLength = strlen(str) * 2; 147 } else if (encode == TEXT_ENCODING_UTF32) { 148 byteLength = strlen(str) * 4; 149 } else if (encode == TEXT_ENCODING_GLYPH_ID) { 150 byteLength = strlen(str) * 16; 151 } 152 OH_Drawing_TextBlob *textBlob = OH_Drawing_TextBlobCreateFromText(str, byteLength, font, encode); 153 OH_Drawing_CanvasDrawTextBlob(canvas, textBlob, 0, 0); 154 } 155 // 2. free memory 156 OH_Drawing_FontDestroy(font); 157 OH_Drawing_TypefaceDestroy(typeSurface); 158 OH_Drawing_CanvasDestroy(canvas); 159} 160 161/* 162 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0201 163 * @tc.name: testTextBlobCreateFromTextNull 164 * @tc.desc: test for testTextBlobCreateFromTextNull. 165 * @tc.size : SmallTest 166 * @tc.type : Function 167 * @tc.level : Level 3 168 */ 169HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromTextNull, TestSize.Level3) { 170 const char *str = "123456"; 171 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 172 EXPECT_NE(font, nullptr); 173 OH_Drawing_Typeface *typeSurface = OH_Drawing_TypefaceCreateDefault(); 174 OH_Drawing_FontSetTypeface(font, typeSurface); 175 // 1. OH_Drawing_TextBlobCreateFromText with the first parameter being nullptr, check the error code with 176 // OH_Drawing_ErrorCodeGet 177 OH_Drawing_TextBlob *textBlob1 = OH_Drawing_TextBlobCreateFromText(nullptr, strlen(str), font, TEXT_ENCODING_UTF8); 178 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 179 // 2. OH_Drawing_TextBlobCreateFromText with the second parameter being empty, check the error code with 180 // OH_Drawing_ErrorCodeGet 181 OH_Drawing_TextBlob *textBlob2 = OH_Drawing_TextBlobCreateFromText(str, 0, font, TEXT_ENCODING_UTF8); 182 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 183 // 3. OH_Drawing_TextBlobCreateFromText with the third parameter being nullptr, check the error code with 184 // OH_Drawing_ErrorCodeGet 185 OH_Drawing_TextBlob *textBlob3 = OH_Drawing_TextBlobCreateFromText(str, strlen(str), nullptr, TEXT_ENCODING_UTF8); 186 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 187 // 4. OH_Drawing_TextBlobCreateFromText with the first parameter being a string 188 OH_Drawing_TextBlob *textBlob4 = OH_Drawing_TextBlobCreateFromText("123456", 6, font, TEXT_ENCODING_UTF8); 189 // 5. Free memory 190 OH_Drawing_FontDestroy(font); 191 OH_Drawing_TypefaceDestroy(typeSurface); 192 OH_Drawing_TextBlobDestroy(textBlob1); 193 OH_Drawing_TextBlobDestroy(textBlob2); 194 OH_Drawing_TextBlobDestroy(textBlob3); 195 OH_Drawing_TextBlobDestroy(textBlob4); 196} 197 198/* 199 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0203 200 * @tc.name: testTextBlobCreateFromTextMultipleCalls 201 * @tc.desc: test for testTextBlobCreateFromTextMultipleCalls. 202 * @tc.size : SmallTest 203 * @tc.type : Function 204 * @tc.level : Level 3 205 */ 206HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromTextMultipleCalls, TestSize.Level3) { 207 const char *strs[] = { 208 "Hello World", "你好世界", "Hello 世界", "Hello 世界123", "Hello $#@!", "繁體中文", 209 }; 210 OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate(); 211 EXPECT_NE(nullptr, canvas); 212 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 213 EXPECT_NE(font, nullptr); 214 OH_Drawing_Typeface *typeSurface = OH_Drawing_TypefaceCreateDefault(); 215 OH_Drawing_FontSetTypeface(font, typeSurface); 216 // 1. Call OH_Drawing_TextBlobCreateFromText 10 times (passing in different types of strings with different lengths, 217 // such as Chinese, English, special characters, numbers, traditional Chinese characters, etc.) and use 218 // OH_Drawing_CanvasDrawTextBlob in combination 219 for (int i = 0; i < 10; i++) { 220 const char *str = strs[i % 6]; 221 OH_Drawing_TextBlob *textBlob = OH_Drawing_TextBlobCreateFromText(str, strlen(str), font, TEXT_ENCODING_UTF8); 222 OH_Drawing_CanvasDrawTextBlob(canvas, textBlob, 0, 0); 223 OH_Drawing_TextBlobDestroy(textBlob); 224 } 225 // 2. Free memory 226 OH_Drawing_FontDestroy(font); 227 OH_Drawing_TypefaceDestroy(typeSurface); 228 OH_Drawing_CanvasDestroy(canvas); 229} 230 231/* 232 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0204 233 * @tc.name: testTextBlobCreateFromTextAbnormal 234 * @tc.desc: test for testTextBlobCreateFromTextAbnormal. 235 * @tc.size : SmallTest 236 * @tc.type : Function 237 * @tc.level : Level 3 238 */ 239HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromTextAbnormal, TestSize.Level3) { 240 const char *str = "123456"; 241 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 242 EXPECT_NE(font, nullptr); 243 OH_Drawing_Typeface *typeSurface = OH_Drawing_TypefaceCreateDefault(); 244 OH_Drawing_FontSetTypeface(font, typeSurface); 245 // 1. OH_Drawing_TextBlobCreateFromText interface with OH_Drawing_TextEncoding out of range, check the error code 246 // with OH_Drawing_ErrorCodeGet 247 OH_Drawing_TextBlob *textBlob = 248 OH_Drawing_TextBlobCreateFromText(str, strlen(str), font, static_cast<OH_Drawing_TextEncoding>(-1)); 249 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE); 250 // 2. Free memory 251 OH_Drawing_FontDestroy(font); 252 OH_Drawing_TextBlobDestroy(textBlob); 253 OH_Drawing_TypefaceDestroy(typeSurface); 254} 255 256/* 257 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0300 258 * @tc.name: testTextBlobCreateFromPosTextNormal 259 * @tc.desc: test for testTextBlobCreateFromPosTextNormal. 260 * @tc.size : SmallTest 261 * @tc.type : Function 262 * @tc.level : Level 0 263 */ 264HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromPosTextNormal, TestSize.Level0) { 265 const char *str = "123456"; 266 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 267 EXPECT_NE(font, nullptr); 268 OH_Drawing_Typeface *typeSurface = OH_Drawing_TypefaceCreateDefault(); 269 OH_Drawing_FontSetTypeface(font, typeSurface); 270 // 1. Traverse the enumeration values of OH_Drawing_TextEncoding and use OH_Drawing_CanvasDrawTextBlob in 271 // combination 272 size_t byteLength = strlen(str); 273 int count = OH_Drawing_FontCountText(font, str, byteLength, TEXT_ENCODING_UTF8); 274 OH_Drawing_Point2D pts[count]; 275 OH_Drawing_TextBlobCreateFromPosText(str, count, &pts[0], font, TEXT_ENCODING_UTF8); 276 // 2. Free memory 277 OH_Drawing_FontDestroy(font); 278 OH_Drawing_TypefaceDestroy(typeSurface); 279} 280 281/* 282 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0301 283 * @tc.name: testTextBlobCreateFromPosTextNull 284 * @tc.desc: test for testTextBlobCreateFromPosTextNull. 285 * @tc.size : SmallTest 286 * @tc.type : Function 287 * @tc.level : Level 3 288 */ 289HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromPosTextNull, TestSize.Level3) { 290 const char *str = "123456"; 291 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 292 EXPECT_NE(font, nullptr); 293 OH_Drawing_Typeface *typeSurface = OH_Drawing_TypefaceCreateDefault(); 294 OH_Drawing_FontSetTypeface(font, typeSurface); 295 int count = OH_Drawing_FontCountText(font, str, strlen(str), TEXT_ENCODING_UTF8); 296 OH_Drawing_Point2D pts[count]; 297 // 1. OH_Drawing_TextBlobCreateFromPosText with the first parameter being nullptr, check the error code with 298 // OH_Drawing_ErrorCodeGet 299 OH_Drawing_TextBlobCreateFromPosText(nullptr, strlen(str), &pts[0], font, TEXT_ENCODING_UTF8); 300 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 301 // 2. OH_Drawing_TextBlobCreateFromPosText with the second parameter being empty, check the error code with 302 // OH_Drawing_ErrorCodeGet 303 OH_Drawing_TextBlobCreateFromPosText(str, 0, &pts[0], font, TEXT_ENCODING_UTF8); 304 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 305 // 3. OH_Drawing_TextBlobCreateFromPosText with the third parameter being nullptr, check the error code with 306 // OH_Drawing_ErrorCodeGet 307 OH_Drawing_TextBlobCreateFromPosText(str, strlen(str), nullptr, font, TEXT_ENCODING_UTF8); 308 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 309 // 4. OH_Drawing_TextBlobCreateFromPosText with the first parameter being a string 310 OH_Drawing_TextBlobCreateFromPosText("123456", 6, &pts[0], font, TEXT_ENCODING_UTF8); 311 // 5. OH_Drawing_TextBlobCreateFromPosText with the fourth parameter being nullptr, check the error code with 312 // OH_Drawing_ErrorCodeGet 313 OH_Drawing_TextBlobCreateFromPosText(str, strlen(str), &pts[0], nullptr, TEXT_ENCODING_UTF8); 314 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 315 // 6. Free memory 316 OH_Drawing_FontDestroy(font); 317 OH_Drawing_TypefaceDestroy(typeSurface); 318} 319 320/* 321 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0302 322 * @tc.name: testTextBlobCreateFromPosTextMultipleCalls 323 * @tc.desc: test for testTextBlobCreateFromPosTextMultipleCalls. 324 * @tc.size : SmallTest 325 * @tc.type : Function 326 * @tc.level : Level 3 327 */ 328HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromPosTextMultipleCalls, TestSize.Level3) { 329 const char *strs[] = { 330 "Hello World", "你好世界", "Hello 世界", "Hello 世界123", "Hello $#@!", "繁體中文", 331 }; 332 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 333 EXPECT_NE(font, nullptr); 334 OH_Drawing_Typeface *typeSurface = OH_Drawing_TypefaceCreateDefault(); 335 OH_Drawing_FontSetTypeface(font, typeSurface); 336 // 1. Call OH_Drawing_TextBlobCreateFromPosText 10 times (passing in different types of strings with different 337 // lengths, such as Chinese, English, special characters, numbers, traditional Chinese characters, etc.) and use 338 // OH_Drawing_CanvasDrawTextBlob in combination 339 for (int i = 0; i < 10; i++) { 340 const char *str = strs[i % 6]; 341 int count = OH_Drawing_FontCountText(font, str, strlen(str), TEXT_ENCODING_UTF8); 342 OH_Drawing_Point2D pts[count]; 343 OH_Drawing_TextBlobCreateFromPosText(str, strlen(str), &pts[0], font, TEXT_ENCODING_UTF8); 344 } 345 // 2. Free memory 346 OH_Drawing_FontDestroy(font); 347 OH_Drawing_TypefaceDestroy(typeSurface); 348} 349 350/* 351 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0303 352 * @tc.name: testTextBlobCreateFromPosTextAbnormal 353 * @tc.desc: test for testTextBlobCreateFromPosTextAbnormal. 354 * @tc.size : SmallTest 355 * @tc.type : Function 356 * @tc.level : Level 3 357 */ 358HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromPosTextAbnormal, TestSize.Level3) { 359 const char *str = "123456"; 360 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 361 EXPECT_NE(font, nullptr); 362 OH_Drawing_Typeface *typeSurface = OH_Drawing_TypefaceCreateDefault(); 363 OH_Drawing_FontSetTypeface(font, typeSurface); 364 int count = OH_Drawing_FontCountText(font, str, strlen(str), TEXT_ENCODING_UTF8); 365 OH_Drawing_Point2D pts[count]; 366 // 1. Call OH_Drawing_TextBlobCreateFromPosText interface with OH_Drawing_TextEncoding out of range, check the error 367 // code with OH_Drawing_ErrorCodeGet 368 OH_Drawing_TextBlobCreateFromPosText(str, strlen(str), &pts[0], font, static_cast<OH_Drawing_TextEncoding>(-1)); 369 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE); 370 // 2. Free memory 371 OH_Drawing_FontDestroy(font); 372 OH_Drawing_TypefaceDestroy(typeSurface); 373} 374 375/* 376 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0400 377 * @tc.name: testTextBlobCreateFromStringNormal 378 * @tc.desc: test for testTextBlobCreateFromStringNormal. 379 * @tc.size : SmallTest 380 * @tc.type : Function 381 * @tc.level : Level 0 382 */ 383HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromStringNormal, TestSize.Level0) { 384 const char *str = "123456"; 385 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 386 EXPECT_NE(font, nullptr); 387 OH_Drawing_Typeface *typeSurface = OH_Drawing_TypefaceCreateDefault(); 388 OH_Drawing_FontSetTypeface(font, typeSurface); 389 OH_Drawing_TextEncoding encodeArray[] = { 390 TEXT_ENCODING_UTF8, 391 TEXT_ENCODING_UTF16, 392 TEXT_ENCODING_UTF32, 393 TEXT_ENCODING_GLYPH_ID, 394 }; 395 // 1. Traverse the enumeration values of OH_Drawing_TextEncoding and use OH_Drawing_CanvasDrawTextBlob in 396 // combination 397 for (OH_Drawing_TextEncoding encode : encodeArray) { 398 OH_Drawing_TextBlob *textBlob = OH_Drawing_TextBlobCreateFromString(str, font, encode); 399 OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate(); 400 EXPECT_NE(nullptr, canvas); 401 OH_Drawing_CanvasDrawTextBlob(canvas, textBlob, 0, 0); 402 OH_Drawing_CanvasDestroy(canvas); 403 } 404 // 2. Free memory 405 OH_Drawing_FontDestroy(font); 406 OH_Drawing_TypefaceDestroy(typeSurface); 407} 408 409/* 410 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0401 411 * @tc.name: testTextBlobCreateFromStringNull 412 * @tc.desc: test for testTextBlobCreateFromStringNull. 413 * @tc.size : SmallTest 414 * @tc.type : Function 415 * @tc.level : Level 3 416 */ 417HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromStringNull, TestSize.Level3) { 418 const char *str = "123456"; 419 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 420 EXPECT_NE(font, nullptr); 421 OH_Drawing_Typeface *typeSurface = OH_Drawing_TypefaceCreateDefault(); 422 OH_Drawing_FontSetTypeface(font, typeSurface); 423 // 1. OH_Drawing_TextBlobCreateFromString with the first parameter being nullptr, check the error code with 424 // OH_Drawing_ErrorCodeGet 425 OH_Drawing_TextBlob *textBlob1 = OH_Drawing_TextBlobCreateFromString(nullptr, font, TEXT_ENCODING_UTF8); 426 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 427 // 2. OH_Drawing_TextBlobCreateFromString with the second parameter being nullptr, check the error code with 428 // OH_Drawing_ErrorCodeGet 429 OH_Drawing_TextBlob *textBlob2 = OH_Drawing_TextBlobCreateFromString(str, nullptr, TEXT_ENCODING_UTF8); 430 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 431 // 3. OH_Drawing_TextBlobCreateFromPosText with the first parameter being a string 432 OH_Drawing_TextBlob *textBlob3 = OH_Drawing_TextBlobCreateFromString("123456", font, TEXT_ENCODING_UTF8); 433 // 4. Free memory 434 OH_Drawing_FontDestroy(font); 435 OH_Drawing_TextBlobDestroy(textBlob1); 436 OH_Drawing_TextBlobDestroy(textBlob2); 437 OH_Drawing_TextBlobDestroy(textBlob3); 438 OH_Drawing_TypefaceDestroy(typeSurface); 439} 440 441/* 442 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0402 443 * @tc.name: testTextBlobCreateFromStringMultipleCalls 444 * @tc.desc: test for testTextBlobCreateFromStringMultipleCalls. 445 * @tc.size : SmallTest 446 * @tc.type : Function 447 * @tc.level : Level 3 448 */ 449HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromStringMultipleCalls, TestSize.Level3) { 450 const char *strs[] = { 451 "Hello World", "你好世界", "Hello 世界", "Hello 世界123", "Hello $#@!", "繁體中文", 452 }; 453 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 454 EXPECT_NE(font, nullptr); 455 OH_Drawing_Typeface *typeSurface = OH_Drawing_TypefaceCreateDefault(); 456 OH_Drawing_FontSetTypeface(font, typeSurface); 457 // 1. Call OH_Drawing_TextBlobCreateFromString 10 times (passing in strings of different lengths and types, such as 458 // Chinese, English, special characters, numbers, traditional Chinese characters, etc.) and use 459 // OH_Drawing_CanvasDrawTextBlob in combination 460 for (int i = 0; i < 10; i++) { 461 const char *str = strs[i % 6]; 462 OH_Drawing_TextBlob *textBlob = OH_Drawing_TextBlobCreateFromString(str, font, TEXT_ENCODING_UTF8); 463 OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate(); 464 EXPECT_NE(nullptr, canvas); 465 OH_Drawing_CanvasDrawTextBlob(canvas, textBlob, 0, 0); 466 OH_Drawing_CanvasDestroy(canvas); 467 } 468 // 2. Free memory 469 OH_Drawing_FontDestroy(font); 470 OH_Drawing_TypefaceDestroy(typeSurface); 471} 472 473/* 474 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0403 475 * @tc.name: testTextBlobCreateFromStringAbnormal 476 * @tc.desc: test for testTextBlobCreateFromStringAbnormal. 477 * @tc.size : SmallTest 478 * @tc.type : Function 479 * @tc.level : Level 3 480 */ 481HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromStringAbnormal, TestSize.Level3) { 482 const char *str = "123456"; 483 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 484 EXPECT_NE(font, nullptr); 485 OH_Drawing_Typeface *typeSurface = OH_Drawing_TypefaceCreateDefault(); 486 OH_Drawing_FontSetTypeface(font, typeSurface); 487 // 1. Call OH_Drawing_TextBlobCreateFromString interface with OH_Drawing_TextEncoding out of range, check the error 488 // code with OH_Drawing_ErrorCodeGet 489 OH_Drawing_TextBlob *textBlob = 490 OH_Drawing_TextBlobCreateFromString(str, font, static_cast<OH_Drawing_TextEncoding>(-1)); 491 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE); 492 // 2. Free memory 493 OH_Drawing_FontDestroy(font); 494 OH_Drawing_TextBlobDestroy(textBlob); 495 OH_Drawing_TypefaceDestroy(typeSurface); 496} 497 498/* 499 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0500 500 * @tc.name: testTextBlobGetBoundsNormal 501 * @tc.desc: test for testTextBlobGetBoundsNormal. 502 * @tc.size : SmallTest 503 * @tc.type : Function 504 * @tc.level : Level 0 505 */ 506HWTEST_F(DrawingNativeTextBlobTest, testTextBlobGetBoundsNormal, TestSize.Level0) { 507 // 1、创建OH_Drawing_TextBlob、OH_Drawing_Rect 508 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 0, 0); 509 EXPECT_NE(rect, nullptr); 510 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 511 EXPECT_NE(font, nullptr); 512 const char *str = "123456"; 513 OH_Drawing_TextBlob *textBlob = 514 OH_Drawing_TextBlobCreateFromString(str, font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8); 515 // 2. Call OH_Drawing_TextBlobGetBounds 516 OH_Drawing_TextBlobGetBounds(textBlob, rect); 517 float left = OH_Drawing_RectGetLeft(rect); 518 float right = OH_Drawing_RectGetRight(rect); 519 EXPECT_EQ(right - left > 0, true); 520 // 3. Free memory 521 OH_Drawing_RectDestroy(rect); 522 OH_Drawing_FontDestroy(font); 523 OH_Drawing_TextBlobDestroy(textBlob); 524} 525 526/* 527 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0501 528 * @tc.name: testTextBlobGetBoundsNull 529 * @tc.desc: test for testTextBlobGetBoundsNull. 530 * @tc.size : SmallTest 531 * @tc.type : Function 532 * @tc.level : Level 3 533 */ 534HWTEST_F(DrawingNativeTextBlobTest, testTextBlobGetBoundsNull, TestSize.Level3) { 535 // 1. Create OH_Drawing_TextBlob and OH_Drawing_Rect 536 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 0, 0); 537 EXPECT_NE(rect, nullptr); 538 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 539 EXPECT_NE(font, nullptr); 540 const char *str = "123456"; 541 OH_Drawing_TextBlob *textBlob = 542 OH_Drawing_TextBlobCreateFromString(str, font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8); 543 // 2. Pass nullptr as the first parameter to OH_Drawing_TextBlobGetBounds and check the error code with 544 // OH_Drawing_ErrorCodeGet 545 OH_Drawing_TextBlobGetBounds(nullptr, rect); 546 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 547 // 3. Pass nullptr as the second parameter to OH_Drawing_TextBlobGetBounds and check the error code with 548 // OH_Drawing_ErrorCodeGet 549 OH_Drawing_TextBlobGetBounds(textBlob, nullptr); 550 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 551 // 4. Free memory 552 OH_Drawing_RectDestroy(rect); 553 OH_Drawing_FontDestroy(font); 554 OH_Drawing_TextBlobDestroy(textBlob); 555} 556 557/* 558 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0502 559 * @tc.name: testTextBlobGetBoundsMultipleCalls 560 * @tc.desc: test for testTextBlobGetBoundsMultipleCalls. 561 * @tc.size : SmallTest 562 * @tc.type : Function 563 * @tc.level : Level 3 564 */ 565HWTEST_F(DrawingNativeTextBlobTest, testTextBlobGetBoundsMultipleCalls, TestSize.Level3) { 566 // 1. Create OH_Drawing_TextBlob and OH_Drawing_Rect 567 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 0, 0); 568 EXPECT_NE(rect, nullptr); 569 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 570 EXPECT_NE(font, nullptr); 571 // 2. Call OH_Drawing_TextBlobGetBounds 10 times (passing in strings of different lengths and types, such as 572 // Chinese, English, special characters, numbers, traditional Chinese characters, etc.) 573 const char *strs[] = { 574 "Hello World", "你好世界", "Hello 世界", "Hello 世界123", "Hello $#@!", "繁體中文", 575 }; 576 for (int i = 0; i < 10; i++) { 577 const char *str = strs[i % 6]; 578 OH_Drawing_TextBlob *textBlob = 579 OH_Drawing_TextBlobCreateFromString(str, font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8); 580 OH_Drawing_TextBlobGetBounds(textBlob, rect); 581 float left = OH_Drawing_RectGetLeft(rect); 582 float right = OH_Drawing_RectGetRight(rect); 583 EXPECT_EQ(right - left > 0, true); 584 OH_Drawing_TextBlobDestroy(textBlob); 585 } 586 // 3. Free memory 587 OH_Drawing_RectDestroy(rect); 588 OH_Drawing_FontDestroy(font); 589} 590 591/* 592 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0503 593 * @tc.name: testTextBlobGetBoundsAbnormal 594 * @tc.desc: test for testTextBlobGetBoundsAbnormal. 595 * @tc.size : SmallTest 596 * @tc.type : Function 597 * @tc.level : Level 3 598 */ 599HWTEST_F(DrawingNativeTextBlobTest, testTextBlobGetBoundsAbnormal, TestSize.Level3) { 600 // 1. Create OH_Drawing_TextBlob and OH_Drawing_Rect 601 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(-1, -1, -1, -1); 602 EXPECT_NE(rect, nullptr); 603 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 604 EXPECT_NE(font, nullptr); 605 const char *str = "123456"; 606 OH_Drawing_TextBlob *textBlob = 607 OH_Drawing_TextBlobCreateFromString(str, font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8); 608 // 2. Call OH_Drawing_TextBlobGetBounds with rect initialized with negative values 609 OH_Drawing_TextBlobGetBounds(textBlob, rect); 610 float left = OH_Drawing_RectGetLeft(rect); 611 float right = OH_Drawing_RectGetRight(rect); 612 EXPECT_EQ(right - left > 0, true); 613 // 3. Free memory 614 OH_Drawing_RectDestroy(rect); 615 OH_Drawing_FontDestroy(font); 616 OH_Drawing_TextBlobDestroy(textBlob); 617} 618 619/* 620 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0600 621 * @tc.name: testTextBlobUniqueIDNormal 622 * @tc.desc: test for testTextBlobUniqueIDNormal. 623 * @tc.size : SmallTest 624 * @tc.type : Function 625 * @tc.level : Level 0 626 */ 627HWTEST_F(DrawingNativeTextBlobTest, testTextBlobUniqueIDNormal, TestSize.Level0) { 628 // 1. Create OH_Drawing_TextBlob 629 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 630 EXPECT_NE(font, nullptr); 631 const char *str = "123456"; 632 OH_Drawing_TextBlob *textBlob = 633 OH_Drawing_TextBlobCreateFromString(str, font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8); 634 // 2. Call OH_Drawing_TextBlobUniqueID 635 uint32_t ret = OH_Drawing_TextBlobUniqueID(textBlob); 636 EXPECT_EQ(ret > 0, true); 637 // 3. Free memory 638 OH_Drawing_FontDestroy(font); 639 OH_Drawing_TextBlobDestroy(textBlob); 640} 641 642/* 643 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0601 644 * @tc.name: testTextBlobUniqueIDNull 645 * @tc.desc: test for testTextBlobUniqueIDNull. 646 * @tc.size : SmallTest 647 * @tc.type : Function 648 * @tc.level : Level 3 649 */ 650HWTEST_F(DrawingNativeTextBlobTest, testTextBlobUniqueIDNull, TestSize.Level3) { 651 // 1. Create OH_Drawing_TextBlob 652 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 653 EXPECT_NE(font, nullptr); 654 const char *str = "123456"; 655 OH_Drawing_TextBlob *textBlob = 656 OH_Drawing_TextBlobCreateFromString(str, font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8); 657 // 2. Pass nullptr as the parameter to OH_Drawing_TextBlobUniqueID and check the error code with 658 // OH_Drawing_ErrorCodeGet 659 OH_Drawing_TextBlobUniqueID(nullptr); 660 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 661 // 3. Free memory 662 OH_Drawing_FontDestroy(font); 663 OH_Drawing_TextBlobDestroy(textBlob); 664} 665 666/* 667 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0602 668 * @tc.name: testTextBlobUniqueIDMultipleCalls 669 * @tc.desc: test for testTextBlobUniqueIDMultipleCalls. 670 * @tc.size : SmallTest 671 * @tc.type : Function 672 * @tc.level : Level 3 673 */ 674HWTEST_F(DrawingNativeTextBlobTest, testTextBlobUniqueIDMultipleCalls, TestSize.Level3) { 675 // 1. Create OH_Drawing_TextBlob 676 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 677 EXPECT_NE(font, nullptr); 678 const char *strs[] = { 679 "Hello World", "你好世界", "Hello 世界", "Hello 世界123", "Hello $#@!", "繁體中文", 680 }; 681 // 2. Call OH_Drawing_TextBlobUniqueID 10 times (passing in strings of different lengths and types, such as Chinese, 682 // English, special characters, numbers, traditional Chinese characters, etc.) 683 for (int i = 0; i < 10; i++) { 684 const char *str = strs[i % 6]; 685 OH_Drawing_TextBlob *textBlob = 686 OH_Drawing_TextBlobCreateFromString(str, font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8); 687 uint32_t ret = OH_Drawing_TextBlobUniqueID(textBlob); 688 EXPECT_EQ(ret > 0, true); 689 OH_Drawing_TextBlobDestroy(textBlob); 690 } 691 // 3. Free memory 692 OH_Drawing_FontDestroy(font); 693} 694 695/* 696 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0700 697 * @tc.name: testTextBlobBuilderAllocRunPosNormal 698 * @tc.desc: test for testTextBlobBuilderAllocRunPosNormal. 699 * @tc.size : SmallTest 700 * @tc.type : Function 701 * @tc.level : Level 0 702 */ 703HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderAllocRunPosNormal, TestSize.Level0) { 704 // 1. Create OH_Drawing_TextBlobBuilder, OH_Drawing_Font, OH_Drawing_Rect 705 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 0, 0); 706 EXPECT_NE(rect, nullptr); 707 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 708 EXPECT_NE(font, nullptr); 709 OH_Drawing_TextBlobBuilder *builder = OH_Drawing_TextBlobBuilderCreate(); 710 // 2. OH_Drawing_TextBlobBuilderAllocRunPos 711 const OH_Drawing_RunBuffer *runBuffer = OH_Drawing_TextBlobBuilderAllocRunPos(builder, font, 9, rect); 712 EXPECT_NE(runBuffer, nullptr); 713 // 3. Free memory 714 OH_Drawing_RectDestroy(rect); 715 OH_Drawing_FontDestroy(font); 716 if (0) { 717 // todo cpp crash 718 OH_Drawing_TextBlobBuilderDestroy(builder); 719 } 720} 721 722/* 723 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0701 724 * @tc.name: testTextBlobBuilderAllocRunPosNull 725 * @tc.desc: test for testTextBlobBuilderAllocRunPosNull. 726 * @tc.size : SmallTest 727 * @tc.type : Function 728 * @tc.level : Level 3 729 */ 730HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderAllocRunPosNull, TestSize.Level3) { 731 // 1. Create OH_Drawing_TextBlobBuilder, OH_Drawing_Font, OH_Drawing_Rect 732 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 0, 0); 733 EXPECT_NE(rect, nullptr); 734 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 735 EXPECT_NE(font, nullptr); 736 OH_Drawing_TextBlobBuilder *builder = OH_Drawing_TextBlobBuilderCreate(); 737 // 2. Call OH_Drawing_TextBlobBuilderAllocRunPos with the first parameter as nullptr and check the error code with 738 // OH_Drawing_ErrorCodeGet 739 OH_Drawing_TextBlobBuilderAllocRunPos(nullptr, font, 9, rect); 740 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 741 // 3. Call OH_Drawing_TextBlobBuilderAllocRunPos with the second parameter as nullptr and check the error code with 742 // OH_Drawing_ErrorCodeGet 743 OH_Drawing_TextBlobBuilderAllocRunPos(builder, nullptr, 9, rect); 744 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 745 // 4. Call OH_Drawing_TextBlobBuilderAllocRunPos with the third parameter as nullptr and check the error code with 746 // OH_Drawing_ErrorCodeGet 747 OH_Drawing_TextBlobBuilderAllocRunPos(builder, font, 0, rect); 748 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 749 // 5. Call OH_Drawing_TextBlobBuilderAllocRunPos with the fourth parameter as nullptr and check the error code with 750 // OH_Drawing_ErrorCodeGet 751 OH_Drawing_TextBlobBuilderAllocRunPos(builder, font, 9, nullptr); 752 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 753 // 6. Free memory 754 OH_Drawing_RectDestroy(rect); 755 OH_Drawing_FontDestroy(font); 756 if (0) { 757 // todo cpp crash 758 OH_Drawing_TextBlobBuilderDestroy(builder); 759 } 760} 761 762/* 763 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0702 764 * @tc.name: testTextBlobBuilderAllocRunPosMultipleCalls 765 * @tc.desc: test for testTextBlobBuilderAllocRunPosMultipleCalls. 766 * @tc.size : SmallTest 767 * @tc.type : Function 768 * @tc.level : Level 3 769 */ 770HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderAllocRunPosMultipleCalls, TestSize.Level3) { 771 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 0, 0); 772 EXPECT_NE(rect, nullptr); 773 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 774 EXPECT_NE(font, nullptr); 775 OH_Drawing_TextBlobBuilder *builder = OH_Drawing_TextBlobBuilderCreate(); 776 // 1. Call OH_Drawing_TextBlobBuilderAllocRunPos 10 times 777 for (int i = 0; i < 10; i++) { 778 const OH_Drawing_RunBuffer *runBuffer = OH_Drawing_TextBlobBuilderAllocRunPos(builder, font, 9, rect); 779 EXPECT_NE(runBuffer, nullptr); 780 } 781 // 2. Call OH_Drawing_TextBlobBuilderMake and then call OH_Drawing_TextBlobBuilderAllocRunPos again 782 OH_Drawing_TextBlobBuilderMake(builder); 783 const OH_Drawing_RunBuffer *runBuffer = OH_Drawing_TextBlobBuilderAllocRunPos(builder, font, 9, rect); 784 EXPECT_NE(runBuffer, nullptr); 785 // 3. Free memory 786 OH_Drawing_RectDestroy(rect); 787 OH_Drawing_FontDestroy(font); 788 if (0) { 789 // todo cpp crash 790 OH_Drawing_TextBlobBuilderDestroy(builder); 791 } 792} 793 794/* 795 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0800 796 * @tc.name: testTextBlobBuilderMakeNormal 797 * @tc.desc: test for testTextBlobBuilderMakeNormal. 798 * @tc.size : SmallTest 799 * @tc.type : Function 800 * @tc.level : Level 0 801 */ 802HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderMakeNormal, TestSize.Level0) { 803 // 1. Create OH_Drawing_TextBlobBuilder 804 OH_Drawing_TextBlobBuilder *builder = OH_Drawing_TextBlobBuilderCreate(); 805 // 2. Call OH_Drawing_TextBlobBuilderMake 806 OH_Drawing_TextBlob *textBlob = OH_Drawing_TextBlobBuilderMake(builder); 807 // 3. Free memory 808 OH_Drawing_TextBlobDestroy(textBlob); 809 if (0) { 810 // todo cpp crash 811 OH_Drawing_TextBlobBuilderDestroy(builder); 812 } 813} 814 815/* 816 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0801 817 * @tc.name: testTextBlobBuilderMakeNull 818 * @tc.desc: test for testTextBlobBuilderMakeNull. 819 * @tc.size : SmallTest 820 * @tc.type : Function 821 * @tc.level : Level 3 822 */ 823HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderMakeNull, TestSize.Level3) { 824 // 1. Call OH_Drawing_TextBlobBuilderMake with nullptr as the parameter and check the error code with 825 // OH_Drawing_ErrorCodeGet 826 OH_Drawing_TextBlobBuilderMake(nullptr); 827 // 1. No crash, error code returns OH_DRAWING_ERROR_INVALID_PARAMETER 828 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 829} 830 831/* 832 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0802 833 * @tc.name: testTextBlobBuilderMakeMultipleCalls 834 * @tc.desc: test for testTextBlobBuilderMakeMultipleCalls. 835 * @tc.size : SmallTest 836 * @tc.type : Function 837 * @tc.level : Level 3 838 */ 839HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderMakeMultipleCalls, TestSize.Level3) { 840 // 1. Create OH_Drawing_TextBlobBuilder 841 OH_Drawing_TextBlobBuilder *builder = OH_Drawing_TextBlobBuilderCreate(); 842 // 2. Call OH_Drawing_TextBlobBuilderMake 10 times 843 for (int i = 0; i < 10; i++) { 844 OH_Drawing_TextBlob *textBlob = OH_Drawing_TextBlobBuilderMake(builder); 845 OH_Drawing_TextBlobDestroy(textBlob); 846 } 847 // 3. Free memory 848 if (0) { 849 // todo cpp crash 850 OH_Drawing_TextBlobBuilderDestroy(builder); 851 } 852} 853 854/* 855 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0800 856 * @tc.name: testTextBlobDestroyNormal 857 * @tc.desc: test for testTextBlobDestroyNormal. 858 * @tc.size : SmallTest 859 * @tc.type : Function 860 * @tc.level : Level 0 861 */ 862HWTEST_F(DrawingNativeTextBlobTest, testTextBlobDestroyNormal, TestSize.Level0) { 863 const char *str = "123456"; 864 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 865 EXPECT_NE(font, nullptr); 866 OH_Drawing_Typeface *typeSurface = OH_Drawing_TypefaceCreateDefault(); 867 OH_Drawing_FontSetTypeface(font, typeSurface); 868 // 1. Create OH_Drawing_TextBlob 869 OH_Drawing_TextBlob *textBlob = OH_Drawing_TextBlobCreateFromString(str, font, TEXT_ENCODING_UTF8); 870 // 2. OH_Drawing_TextBlobDestroy 871 OH_Drawing_TextBlobDestroy(textBlob); 872} 873 874/* 875 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_TEXTBLOB_0801 876 * @tc.name: testTextBlobDestroyNull 877 * @tc.desc: test for testTextBlobDestroyNull. 878 * @tc.size : SmallTest 879 * @tc.type : Function 880 * @tc.level : Level 3 881 */ 882HWTEST_F(DrawingNativeTextBlobTest, testTextBlobDestroyNull, TestSize.Level3) { 883 // 1. OH_Drawing_TextBlobDestroy with null parameter 884 OH_Drawing_TextBlobDestroy(nullptr); 885} 886 887} // namespace Drawing 888} // namespace Rosen 889} // namespace OHOS