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
40 using namespace testing;
41 using namespace testing::ext;
42
43 namespace OHOS {
44 namespace Rosen {
45 namespace Drawing {
46 class 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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderCreateDestroyNormal, TestSize.Level0)56 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderCreateDestroyNull, TestSize.Level3)79 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderCreateDestroyMultipleCalls, TestSize.Level3)92 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromTextNormal, TestSize.Level0)125 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromTextNull, TestSize.Level3)169 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromTextMultipleCalls, TestSize.Level3)206 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromTextAbnormal, TestSize.Level3)239 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromPosTextNormal, TestSize.Level0)264 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromPosTextNull, TestSize.Level3)289 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromPosTextMultipleCalls, TestSize.Level3)328 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromPosTextAbnormal, TestSize.Level3)358 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromStringNormal, TestSize.Level0)383 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromStringNull, TestSize.Level3)417 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromStringMultipleCalls, TestSize.Level3)449 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobCreateFromStringAbnormal, TestSize.Level3)481 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobGetBoundsNormal, TestSize.Level0)506 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobGetBoundsNull, TestSize.Level3)534 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobGetBoundsMultipleCalls, TestSize.Level3)565 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobGetBoundsAbnormal, TestSize.Level3)599 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobUniqueIDNormal, TestSize.Level0)627 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobUniqueIDNull, TestSize.Level3)650 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobUniqueIDMultipleCalls, TestSize.Level3)674 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderAllocRunPosNormal, TestSize.Level0)703 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderAllocRunPosNull, TestSize.Level3)730 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderAllocRunPosMultipleCalls, TestSize.Level3)770 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderMakeNormal, TestSize.Level0)802 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderMakeNull, TestSize.Level3)823 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobBuilderMakeMultipleCalls, TestSize.Level3)839 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobDestroyNormal, TestSize.Level0)862 HWTEST_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 */
HWTEST_F(DrawingNativeTextBlobTest, testTextBlobDestroyNull, TestSize.Level3)882 HWTEST_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