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 "drawing_bitmap.h"
17 #include "drawing_brush.h"
18 #include "drawing_canvas.h"
19 #include "drawing_color.h"
20 #include "drawing_color_filter.h"
21 #include "drawing_filter.h"
22 #include "drawing_font.h"
23 #include "drawing_image.h"
24 #include "drawing_mask_filter.h"
25 #include "drawing_matrix.h"
26 #include "drawing_memory_stream.h"
27 #include "drawing_path.h"
28 #include "drawing_pen.h"
29 #include "drawing_point.h"
30 #include "drawing_rect.h"
31 #include "drawing_region.h"
32 #include "drawing_round_rect.h"
33 #include "drawing_sampling_options.h"
34 #include "drawing_shader_effect.h"
35 #include "drawing_text_blob.h"
36 #include "drawing_typeface.h"
37 #include "utils/scalar.h"
38 #include "gtest/gtest.h"
39 #include <random>
40
41 using namespace testing;
42 using namespace testing::ext;
43
44 namespace OHOS {
45 namespace Rosen {
46 namespace Drawing {
47 class DrawingNativeFontTest : public testing::Test {};
48
49 /*
50 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0100
51 * @tc.name: testFontCreateDestroyNormal
52 * @tc.desc: Test for creating and destroying a font object with normal parameters.
53 * @tc.size : SmallTest
54 * @tc.type : Function
55 * @tc.level : Level 0
56 */
HWTEST_F(DrawingNativeFontTest, testFontCreateDestroyNormal, TestSize.Level0)57 HWTEST_F(DrawingNativeFontTest, testFontCreateDestroyNormal, TestSize.Level0) {
58 // 1. OH_Drawing_FontCreate
59 OH_Drawing_Font *font = OH_Drawing_FontCreate();
60 // 2. OH_Drawing_FontDestroy
61 OH_Drawing_FontDestroy(font);
62 }
63
64 /*
65 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0101
66 * @tc.name: testFontCreateDestroyNULL
67 * @tc.desc: test for testFontCreateDestroyNULL.
68 * @tc.size : SmallTest
69 * @tc.type : Function
70 * @tc.level : Level 3
71 */
HWTEST_F(DrawingNativeFontTest, testFontCreateDestroyNULL, TestSize.Level3)72 HWTEST_F(DrawingNativeFontTest, testFontCreateDestroyNULL, TestSize.Level3) {
73 // 1. OH_Drawing_FontDestroy with nullptr as parameter
74 OH_Drawing_FontDestroy(nullptr);
75 }
76
77 /*
78 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0102
79 * @tc.name: testFontCreateDestroyMultipleCalls
80 * @tc.desc: test for testFontCreateDestroyMultipleCalls.
81 * @tc.size : SmallTest
82 * @tc.type : Function
83 * @tc.level : Level 3
84 */
HWTEST_F(DrawingNativeFontTest, testFontCreateDestroyMultipleCalls, TestSize.Level3)85 HWTEST_F(DrawingNativeFontTest, testFontCreateDestroyMultipleCalls, TestSize.Level3) {
86 OH_Drawing_Font *fonts[10];
87 // 1. Call OH_Drawing_FontCreate 10 times
88 for (int i = 0; i < 10; i++) {
89 fonts[i] = OH_Drawing_FontCreate();
90 EXPECT_NE(fonts[i], nullptr);
91 }
92 // 2. Call OH_Drawing_FontDestroy 10 times
93 for (int i = 0; i < 10; i++) {
94 OH_Drawing_FontDestroy(fonts[i]);
95 }
96 // 3. Call OH_Drawing_FontCreate and OH_Drawing_FontDestroy alternately 10 times
97 for (int i = 0; i < 10; i++) {
98 OH_Drawing_Font *font = OH_Drawing_FontCreate();
99 OH_Drawing_FontDestroy(font);
100 }
101 }
102
103 /*
104 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0200
105 * @tc.name: testFontSetBaselineSnapNormal
106 * @tc.desc: test for testFontSetBaselineSnapNormal.
107 * @tc.size : SmallTest
108 * @tc.type : Function
109 * @tc.level : Level 0
110 */
HWTEST_F(DrawingNativeFontTest, testFontSetBaselineSnapNormal, TestSize.Level0)111 HWTEST_F(DrawingNativeFontTest, testFontSetBaselineSnapNormal, TestSize.Level0) {
112 // 1. OH_Drawing_FontCreate
113 OH_Drawing_Font *font = OH_Drawing_FontCreate();
114 // 2. Call OH_Drawing_FontSetBaselineSnap with isForce parameter set to false,
115 // verify by calling OH_Drawing_FontIsBaselineSnap to check if the font baseline is aligned with pixels
116 OH_Drawing_FontSetBaselineSnap(font, false);
117 bool isBaselineSnap = OH_Drawing_FontIsBaselineSnap(font);
118 EXPECT_FALSE(isBaselineSnap);
119 // 3. Call OH_Drawing_FontSetBaselineSnap with isForce parameter set to true,
120 // verify by calling OH_Drawing_FontIsBaselineSnap to check if the font baseline is aligned with pixels
121 OH_Drawing_FontSetBaselineSnap(font, true);
122 isBaselineSnap = OH_Drawing_FontIsBaselineSnap(font);
123 EXPECT_TRUE(isBaselineSnap);
124 // 4. Release memory
125 OH_Drawing_FontDestroy(font);
126 }
127
128 /*
129 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0201
130 * @tc.name: testFontSetBaselineSnapNULL
131 * @tc.desc: test for testFontSetBaselineSnapNULL.
132 * @tc.size : SmallTest
133 * @tc.type : Function
134 * @tc.level : Level 3
135 */
HWTEST_F(DrawingNativeFontTest, testFontSetBaselineSnapNULL, TestSize.Level3)136 HWTEST_F(DrawingNativeFontTest, testFontSetBaselineSnapNULL, TestSize.Level3) {
137 // 1. Call OH_Drawing_FontSetBaselineSnap with nullptr as the first parameter, check the error code using
138 // OH_Drawing_ErrorCodeGet
139 OH_Drawing_FontSetBaselineSnap(nullptr, false);
140 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
141 // 2. Call OH_Drawing_FontIsBaselineSnap with nullptr as the parameter, check the error code using
142 // OH_Drawing_ErrorCodeGet
143 OH_Drawing_FontIsBaselineSnap(nullptr);
144 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
145 }
146
147 /*
148 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0202
149 * @tc.name: testFontSetBaselineSnapMultipleCalls
150 * @tc.desc: test for testFontSetBaselineSnapMultipleCalls.
151 * @tc.size : SmallTest
152 * @tc.type : Function
153 * @tc.level : Level 3
154 */
HWTEST_F(DrawingNativeFontTest, testFontSetBaselineSnapMultipleCalls, TestSize.Level3)155 HWTEST_F(DrawingNativeFontTest, testFontSetBaselineSnapMultipleCalls, TestSize.Level3) {
156 // 1. OH_Drawing_FontCreate
157 OH_Drawing_Font *font = OH_Drawing_FontCreate();
158 // 2. Call OH_Drawing_FontSetBaselineSnap 10 times, and call OH_Drawing_FontIsBaselineSnap each time to check if the
159 // font baseline is aligned with pixels
160 for (int i = 0; i < 10; i++) {
161 OH_Drawing_FontSetBaselineSnap(font, i % 2 == 0);
162 bool isBaselineSnap = OH_Drawing_FontIsBaselineSnap(font);
163 EXPECT_EQ(isBaselineSnap, i % 2 == 0);
164 }
165 // 3. Release memory
166 OH_Drawing_FontDestroy(font);
167 }
168
169 /*
170 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0203
171 * @tc.name: testFontIsBaselineSnapWhenNoSet
172 * @tc.desc: test for testFontIsBaselineSnapWhenNoSet.
173 * @tc.size : SmallTest
174 * @tc.type : Function
175 * @tc.level : Level 2
176 */
HWTEST_F(DrawingNativeFontTest, testFontIsBaselineSnapWhenNoSet, TestSize.Level2)177 HWTEST_F(DrawingNativeFontTest, testFontIsBaselineSnapWhenNoSet, TestSize.Level2) {
178 // 1. OH_Drawing_FontCreate
179 OH_Drawing_Font *font = OH_Drawing_FontCreate();
180 // 2. OH_Drawing_FontIsBaselineSnap
181 bool isBaselineSnap = OH_Drawing_FontIsBaselineSnap(font);
182 EXPECT_TRUE(isBaselineSnap);
183 }
184
185 /*
186 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0300
187 * @tc.name: testFontSetSubpixelNormal
188 * @tc.desc: test for testFontSetSubpixelNormal.
189 * @tc.size : SmallTest
190 * @tc.type : Function
191 * @tc.level : Level 0
192 */
HWTEST_F(DrawingNativeFontTest, testFontSetSubpixelNormal, TestSize.Level0)193 HWTEST_F(DrawingNativeFontTest, testFontSetSubpixelNormal, TestSize.Level0) {
194 // 1. OH_Drawing_FontCreate
195 OH_Drawing_Font *font = OH_Drawing_FontCreate();
196 // 2. Call OH_Drawing_FontSetSubpixel with isSubpixel parameter set to false,
197 // verify by calling OH_Drawing_FontIsSubpixel to check if the glyph is rendered using subpixels
198 OH_Drawing_FontSetSubpixel(font, false);
199 bool isSubpixel = OH_Drawing_FontIsSubpixel(font);
200 EXPECT_FALSE(isSubpixel);
201 // 3. Call OH_Drawing_FontSetSubpixel with isSubpixel parameter set to true,
202 // verify by calling OH_Drawing_FontIsSubpixel to check if the glyph is rendered using subpixels
203 OH_Drawing_FontSetSubpixel(font, true);
204 isSubpixel = OH_Drawing_FontIsSubpixel(font);
205 EXPECT_TRUE(isSubpixel);
206 // 4. Release memory
207 OH_Drawing_FontDestroy(font);
208 }
209
210 /*
211 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0301
212 * @tc.name: testFontSetSubpixelNULL
213 * @tc.desc: test for testFontSetSubpixelNULL.
214 * @tc.size : SmallTest
215 * @tc.type : Function
216 * @tc.level : Level 3
217 */
HWTEST_F(DrawingNativeFontTest, testFontSetSubpixelNULL, TestSize.Level3)218 HWTEST_F(DrawingNativeFontTest, testFontSetSubpixelNULL, TestSize.Level3) {
219 // 1. Call OH_Drawing_FontSetSubpixel with nullptr as the first parameter, check the error code using
220 // OH_Drawing_ErrorCodeGet
221 OH_Drawing_FontSetSubpixel(nullptr, false);
222 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
223 // 2. Call OH_Drawing_FontIsSubpixel with nullptr as the parameter, check the error code using
224 // OH_Drawing_ErrorCodeGet
225 OH_Drawing_FontIsSubpixel(nullptr);
226 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
227 }
228
229 /*
230 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0302
231 * @tc.name: testFontSetSubpixelMultipleCalls
232 * @tc.desc: test for testFontSetSubpixelMultipleCalls.
233 * @tc.size : SmallTest
234 * @tc.type : Function
235 * @tc.level : Level 3
236 */
HWTEST_F(DrawingNativeFontTest, testFontSetSubpixelMultipleCalls, TestSize.Level3)237 HWTEST_F(DrawingNativeFontTest, testFontSetSubpixelMultipleCalls, TestSize.Level3) {
238 // 1. OH_Drawing_FontCreate
239 OH_Drawing_Font *font = OH_Drawing_FontCreate();
240 // 2. Call OH_Drawing_FontIsSubpixel 10 times, and call OH_Drawing_FontIsSubpixel each time to check if the glyph is
241 // rendered using subpixels
242 for (int i = 0; i < 10; i++) {
243 OH_Drawing_FontSetSubpixel(font, i % 2 == 0);
244 bool isSubpixel = OH_Drawing_FontIsSubpixel(font);
245 EXPECT_EQ(isSubpixel, i % 2 == 0);
246 }
247 // 3. Release memory
248 OH_Drawing_FontDestroy(font);
249 }
250
251 /*
252 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0303
253 * @tc.name: testFontIsSubpixelWhenNoSet
254 * @tc.desc: test for testFontIsSubpixelWhenNoSet.
255 * @tc.size : SmallTest
256 * @tc.type : Function
257 * @tc.level : Level 2
258 */
HWTEST_F(DrawingNativeFontTest, testFontIsSubpixelWhenNoSet, TestSize.Level2)259 HWTEST_F(DrawingNativeFontTest, testFontIsSubpixelWhenNoSet, TestSize.Level2) {
260 // 1. OH_Drawing_FontCreate
261 OH_Drawing_Font *font = OH_Drawing_FontCreate();
262 // 2. Call OH_Drawing_FontIsSubpixel
263 bool isSubpixel = OH_Drawing_FontIsSubpixel(font);
264 EXPECT_FALSE(isSubpixel);
265 // 3. Release memory
266 OH_Drawing_FontDestroy(font);
267 }
268
269 /*
270 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0400
271 * @tc.name: testFontSetForceAutoHintingNormal
272 * @tc.desc: test for testFontSetForceAutoHintingNormal.
273 * @tc.size : SmallTest
274 * @tc.type : Function
275 * @tc.level : Level 0
276 */
HWTEST_F(DrawingNativeFontTest, testFontSetForceAutoHintingNormal, TestSize.Level0)277 HWTEST_F(DrawingNativeFontTest, testFontSetForceAutoHintingNormal, TestSize.Level0) {
278 // 1. OH_Drawing_FontCreate
279 OH_Drawing_Font *font = OH_Drawing_FontCreate();
280 // 2. Call OH_Drawing_FontSetForceAutoHinting with isForceAutoHinting parameter set to false,
281 // verify by calling OH_Drawing_FontIsForceAutoHinting to check if the glyph outlines are automatically adjusted
282 OH_Drawing_FontSetForceAutoHinting(font, false);
283 bool isForceAutoHinting = OH_Drawing_FontIsForceAutoHinting(font);
284 EXPECT_FALSE(isForceAutoHinting);
285 // 3. Call OH_Drawing_FontSetForceAutoHinting with isForceAutoHinting parameter set to true,
286 // verify by calling OH_Drawing_FontIsForceAutoHinting to check if the glyph outlines are automatically adjusted
287 OH_Drawing_FontSetForceAutoHinting(font, true);
288 isForceAutoHinting = OH_Drawing_FontIsForceAutoHinting(font);
289 EXPECT_TRUE(isForceAutoHinting);
290 // 4. Release memory
291 OH_Drawing_FontDestroy(font);
292 }
293
294 /*
295 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0401
296 * @tc.name: testFontSetForceAutoHintingNULL
297 * @tc.desc: test for testFontSetForceAutoHintingNULL.
298 * @tc.size : SmallTest
299 * @tc.type : Function
300 * @tc.level : Level 3
301 */
HWTEST_F(DrawingNativeFontTest, testFontSetForceAutoHintingNULL, TestSize.Level3)302 HWTEST_F(DrawingNativeFontTest, testFontSetForceAutoHintingNULL, TestSize.Level3) {
303 // 1. Call OH_Drawing_FontSetForceAutoHinting with nullptr as the first parameter, check the error code using
304 // OH_Drawing_ErrorCodeGet
305 OH_Drawing_FontSetForceAutoHinting(nullptr, false);
306 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
307 // 2. Call OH_Drawing_FontIsForceAutoHinting with nullptr as the parameter, check the error code using
308 // OH_Drawing_ErrorCodeGet
309 OH_Drawing_FontIsForceAutoHinting(nullptr);
310 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
311 }
312
313 /*
314 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0402
315 * @tc.name: testFontSetForceAutoHintingMultipleCalls
316 * @tc.desc: test for testFontSetForceAutoHintingMultipleCalls.
317 * @tc.size : SmallTest
318 * @tc.type : Function
319 * @tc.level : Level 3
320 */
HWTEST_F(DrawingNativeFontTest, testFontSetForceAutoHintingMultipleCalls, TestSize.Level3)321 HWTEST_F(DrawingNativeFontTest, testFontSetForceAutoHintingMultipleCalls, TestSize.Level3) {
322 // 1. OH_Drawing_FontCreate
323 OH_Drawing_Font *font = OH_Drawing_FontCreate();
324 // 2. Call OH_Drawing_FontSetForceAutoHinting 10 times, and call OH_Drawing_FontIsForceAutoHinting each time to
325 // check if the glyph outlines are automatically adjusted
326 for (int i = 0; i < 10; i++) {
327 OH_Drawing_FontSetForceAutoHinting(font, i % 2 == 0);
328 bool isForceAutoHinting = OH_Drawing_FontIsForceAutoHinting(font);
329 EXPECT_EQ(isForceAutoHinting, i % 2 == 0);
330 }
331 // 3. Release memory
332 OH_Drawing_FontDestroy(font);
333 }
334
335 /*
336 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0403
337 * @tc.name: testFontIsForceAutoHintingWhenNoSet
338 * @tc.desc: test for testFontIsForceAutoHintingWhenNoSet.
339 * @tc.size : SmallTest
340 * @tc.type : Function
341 * @tc.level : Level 3
342 */
HWTEST_F(DrawingNativeFontTest, testFontIsForceAutoHintingWhenNoSet, TestSize.Level3)343 HWTEST_F(DrawingNativeFontTest, testFontIsForceAutoHintingWhenNoSet, TestSize.Level3) {
344 // 1. OH_Drawing_FontCreate
345 OH_Drawing_Font *font = OH_Drawing_FontCreate();
346 // 2. OH_Drawing_FontIsForceAutoHinting
347 bool isForceAutoHinting = OH_Drawing_FontIsForceAutoHinting(font);
348 EXPECT_FALSE(isForceAutoHinting);
349 // 3. Release memory
350 OH_Drawing_FontDestroy(font);
351 }
352
353 /*
354 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0500
355 * @tc.name: testFontSetTypefaceNormal
356 * @tc.desc: test for testFontSetTypefaceNormal.
357 * @tc.size : SmallTest
358 * @tc.type : Function
359 * @tc.level : Level 0
360 */
HWTEST_F(DrawingNativeFontTest, testFontSetTypefaceNormal, TestSize.Level0)361 HWTEST_F(DrawingNativeFontTest, testFontSetTypefaceNormal, TestSize.Level0) {
362 // 1. OH_Drawing_FontCreate
363 OH_Drawing_Font *font = OH_Drawing_FontCreate();
364 // 2. OH_Drawing_TypefaceCreateDefault
365 OH_Drawing_Typeface *typeface1 = OH_Drawing_TypefaceCreateDefault();
366 // 3. Call OH_Drawing_FontSetTypeface, and call OH_Drawing_FontGetTypeface to get the glyph object
367 OH_Drawing_FontSetTypeface(font, typeface1);
368 OH_Drawing_Typeface *typeface2 = OH_Drawing_FontGetTypeface(font);
369 // 4. Release memory
370 OH_Drawing_FontDestroy(font);
371 OH_Drawing_TypefaceDestroy(typeface1);
372 OH_Drawing_TypefaceDestroy(typeface2);
373 }
374
375 /*
376 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0501
377 * @tc.name: testFontSetTypefaceNULL
378 * @tc.desc: test for testFontSetTypefaceNULL.
379 * @tc.size : SmallTest
380 * @tc.type : Function
381 * @tc.level : Level 3
382 */
HWTEST_F(DrawingNativeFontTest, testFontSetTypefaceNULL, TestSize.Level3)383 HWTEST_F(DrawingNativeFontTest, testFontSetTypefaceNULL, TestSize.Level3) {
384 // 1. OH_Drawing_FontCreate
385 OH_Drawing_Font *font = OH_Drawing_FontCreate();
386 // 2. Call OH_Drawing_FontSetTypeface with nullptr as the first parameter, check the error code using
387 // OH_Drawing_ErrorCodeGet
388 OH_Drawing_Typeface *typeface = OH_Drawing_TypefaceCreateDefault();
389 OH_Drawing_FontSetTypeface(nullptr, typeface);
390 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
391 // 3. Call OH_Drawing_FontSetTypeface with nullptr as the second parameter, call OH_Drawing_FontGetTypeface to get
392 // the default value
393 OH_Drawing_FontSetTypeface(font, nullptr);
394 OH_Drawing_Typeface *typeface2 = OH_Drawing_FontGetTypeface(font);
395 EXPECT_NE(typeface2, nullptr);
396 // 4. Call OH_Drawing_FontGetTypeface with nullptr as the parameter, check the error code using
397 // OH_Drawing_ErrorCodeGet
398 OH_Drawing_FontGetTypeface(nullptr);
399 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
400 // 5. Release memory
401 OH_Drawing_FontDestroy(font);
402 OH_Drawing_TypefaceDestroy(typeface);
403 }
404
405 /*
406 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0502
407 * @tc.name: testFontSetTypefaceMultipleCalls
408 * @tc.desc: test for testFontSetTypefaceMultipleCalls.
409 * @tc.size : SmallTest
410 * @tc.type : Function
411 * @tc.level : Level 3
412 */
HWTEST_F(DrawingNativeFontTest, testFontSetTypefaceMultipleCalls, TestSize.Level3)413 HWTEST_F(DrawingNativeFontTest, testFontSetTypefaceMultipleCalls, TestSize.Level3) {
414 // 1. OH_Drawing_FontCreate
415 OH_Drawing_Font *font = OH_Drawing_FontCreate();
416 // 2. Call OH_Drawing_FontSetTypeface 10 times (with different typefaces), and call OH_Drawing_FontGetTypeface each
417 // time to get the glyph object
418 for (int i = 0; i < 10; i++) {
419 OH_Drawing_Typeface *typeface = OH_Drawing_TypefaceCreateDefault();
420 OH_Drawing_FontSetTypeface(font, typeface);
421 OH_Drawing_Typeface *typeface2 = OH_Drawing_FontGetTypeface(font);
422 EXPECT_EQ(typeface, typeface2);
423 OH_Drawing_TypefaceDestroy(typeface);
424 }
425 // 3. Release memory
426 OH_Drawing_FontDestroy(font);
427 }
428
429 /*
430 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0503
431 * @tc.name: testFontGetTypefaceWhenNoSet
432 * @tc.desc: test for testFontGetTypefaceWhenNoSet.
433 * @tc.size : SmallTest
434 * @tc.type : Function
435 * @tc.level : Level 3
436 */
HWTEST_F(DrawingNativeFontTest, testFontGetTypefaceWhenNoSet, TestSize.Level3)437 HWTEST_F(DrawingNativeFontTest, testFontGetTypefaceWhenNoSet, TestSize.Level3) {
438 // 1. OH_Drawing_FontCreate
439 OH_Drawing_Font *font = OH_Drawing_FontCreate();
440 // 2. Call OH_Drawing_FontGetTypeface to get the glyph object
441 OH_Drawing_Typeface *typeface = OH_Drawing_FontGetTypeface(font);
442 EXPECT_NE(typeface, nullptr);
443 // 3. Release memory
444 OH_Drawing_FontDestroy(font);
445 }
446
447 /*
448 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0600
449 * @tc.name: testFontSetTextSizeNormal
450 * @tc.desc: test for testFontSetTextSizeNormal.
451 * @tc.size : SmallTest
452 * @tc.type : Function
453 * @tc.level : Level 0
454 */
HWTEST_F(DrawingNativeFontTest, testFontSetTextSizeNormal, TestSize.Level0)455 HWTEST_F(DrawingNativeFontTest, testFontSetTextSizeNormal, TestSize.Level0) {
456 // 1. OH_Drawing_FontCreate
457 OH_Drawing_Font *font = OH_Drawing_FontCreate();
458 // 2. Call OH_Drawing_FontSetTextSize with textSize parameter set to 100, and call OH_Drawing_FontGetTextSize to get
459 // the text size
460 OH_Drawing_FontSetTextSize(font, 100);
461 float textSize = OH_Drawing_FontGetTextSize(font);
462 EXPECT_EQ(textSize, 100);
463 // 3. Call OH_Drawing_FontSetTextSize with textSize parameter set to 50.255, and call OH_Drawing_FontGetTextSize to
464 // get the text size
465 OH_Drawing_FontSetTextSize(font, 50.255);
466 textSize = OH_Drawing_FontGetTextSize(font);
467 EXPECT_EQ(IsScalarAlmostEqual(textSize, 50.255), true);
468 // 4. Release memory
469 OH_Drawing_FontDestroy(font);
470 }
471
472 /*
473 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0601
474 * @tc.name: testFontSetTextSizeNULL
475 * @tc.desc: test for testFontSetTextSizeNULL.
476 * @tc.size : SmallTest
477 * @tc.type : Function
478 * @tc.level : Level 3
479 */
HWTEST_F(DrawingNativeFontTest, testFontSetTextSizeNULL, TestSize.Level3)480 HWTEST_F(DrawingNativeFontTest, testFontSetTextSizeNULL, TestSize.Level3) {
481 // 1. OH_Drawing_FontCreate
482 OH_Drawing_Font *font = OH_Drawing_FontCreate();
483 // 2. Call OH_Drawing_FontSetTextSize with nullptr as the first parameter, check the error code using
484 // OH_Drawing_ErrorCodeGet
485 OH_Drawing_FontSetTextSize(nullptr, 100);
486 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
487 // 3. Call OH_Drawing_FontSetTextSize with 0 as the second parameter
488 OH_Drawing_FontSetTextSize(font, 0);
489 float textSize = OH_Drawing_FontGetTextSize(font);
490 EXPECT_EQ(textSize, 0);
491 // 4. Call OH_Drawing_FontGetTextSize with nullptr as the parameter, check the error code using
492 // OH_Drawing_ErrorCodeGet
493 OH_Drawing_FontGetTextSize(nullptr);
494 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
495 // 5. Release memory
496 OH_Drawing_FontDestroy(font);
497 }
498
499 /*
500 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0602
501 * @tc.name: testFontSetTextSizeMultipleCalls
502 * @tc.desc: test for testFontSetTextSizeMultipleCalls.
503 * @tc.size : SmallTest
504 * @tc.type : Function
505 * @tc.level : Level 3
506 */
HWTEST_F(DrawingNativeFontTest, testFontSetTextSizeMultipleCalls, TestSize.Level3)507 HWTEST_F(DrawingNativeFontTest, testFontSetTextSizeMultipleCalls, TestSize.Level3) {
508 // 1. OH_Drawing_FontCreate
509 OH_Drawing_Font *font = OH_Drawing_FontCreate();
510 // 2. Call OH_Drawing_FontSetTextSize 10 times (with random textSize parameter), and call OH_Drawing_FontGetTextSize
511 // each time to get the text size
512 std::random_device rd;
513 std::mt19937 gen(rd());
514 std::uniform_real_distribution<float> dis(0.0, 100.0);
515 for (int i = 0; i < 10; i++) {
516 float size = dis(gen);
517 OH_Drawing_FontSetTextSize(font, size);
518 float textSize = OH_Drawing_FontGetTextSize(font);
519 EXPECT_EQ(textSize, size);
520 }
521 // 3. Release memory
522 OH_Drawing_FontDestroy(font);
523 }
524
525 /*
526 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0603
527 * @tc.name: testFontGetTextSizeWhenNoSet
528 * @tc.desc: test for testFontGetTextSizeWhenNoSet.
529 * @tc.size : SmallTest
530 * @tc.type : Function
531 * @tc.level : Level 3
532 */
HWTEST_F(DrawingNativeFontTest, testFontGetTextSizeWhenNoSet, TestSize.Level3)533 HWTEST_F(DrawingNativeFontTest, testFontGetTextSizeWhenNoSet, TestSize.Level3) {
534 // 1. OH_Drawing_FontCreate
535 OH_Drawing_Font *font = OH_Drawing_FontCreate();
536 // 2. OH_Drawing_FontGetTextSize to get the text size
537 float textSize = OH_Drawing_FontGetTextSize(font);
538 EXPECT_EQ(textSize, 12);
539 // 3. Release memory
540 OH_Drawing_FontDestroy(font);
541 }
542
543 /*
544 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0604
545 * @tc.name: testFontSetTextSizeAbnormal
546 * @tc.desc: test for testFontSetTextSizeAbnormal.
547 * @tc.size : SmallTest
548 * @tc.type : Function
549 * @tc.level : Level 3
550 */
HWTEST_F(DrawingNativeFontTest, testFontSetTextSizeAbnormal, TestSize.Level3)551 HWTEST_F(DrawingNativeFontTest, testFontSetTextSizeAbnormal, TestSize.Level3) {
552 // 1. OH_Drawing_FontCreate
553 OH_Drawing_Font *font = OH_Drawing_FontCreate();
554 // 2. Call OH_Drawing_FontSetTextSize with textSize parameter set to -100, and call OH_Drawing_FontGetTextSize to
555 // get the text size
556 OH_Drawing_FontSetTextSize(font, -100);
557 float textSize = OH_Drawing_FontGetTextSize(font);
558 EXPECT_EQ(textSize, 0);
559 // 3. Release memory
560 OH_Drawing_FontDestroy(font);
561 }
562
563 /*
564 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0700
565 * @tc.name: testFontCountTextNormal
566 * @tc.desc: test for testFontCountTextNormal.
567 * @tc.size : SmallTest
568 * @tc.type : Function
569 * @tc.level : Level 0
570 */
HWTEST_F(DrawingNativeFontTest, testFontCountTextNormal, TestSize.Level0)571 HWTEST_F(DrawingNativeFontTest, testFontCountTextNormal, TestSize.Level0) {
572 // 1. OH_Drawing_FontCreate
573 OH_Drawing_Font *font = OH_Drawing_FontCreate();
574 // 2. Enumerate through the encoding values in OH_Drawing_FontCountText
575 const char *str = "Hello World";
576 OH_Drawing_TextEncoding encodes[] = {
577 TEXT_ENCODING_UTF8,
578 TEXT_ENCODING_UTF16,
579 TEXT_ENCODING_UTF32,
580 TEXT_ENCODING_GLYPH_ID,
581 };
582 for (OH_Drawing_TextEncoding encode : encodes) {
583 int count = OH_Drawing_FontCountText(font, str, strlen(str), encode);
584 switch (encode) {
585 case TEXT_ENCODING_UTF8:
586 EXPECT_EQ(count, 11);
587 break;
588 case TEXT_ENCODING_UTF16:
589 EXPECT_EQ(count, 11);
590 break;
591 case TEXT_ENCODING_UTF32:
592 EXPECT_EQ(count, 11);
593 break;
594 case TEXT_ENCODING_GLYPH_ID:
595 EXPECT_EQ(count, 11);
596 break;
597 default:
598 break;
599 }
600 }
601 // 3. Release memory
602 OH_Drawing_FontDestroy(font);
603 }
604
605 /*
606 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0701
607 * @tc.name: testFontCountTextNULL
608 * @tc.desc: test for testFontCountTextNULL.
609 * @tc.size : SmallTest
610 * @tc.type : Function
611 * @tc.level : Level 3
612 */
HWTEST_F(DrawingNativeFontTest, testFontCountTextNULL, TestSize.Level3)613 HWTEST_F(DrawingNativeFontTest, testFontCountTextNULL, TestSize.Level3) {
614 // 1. OH_Drawing_FontCreate
615 OH_Drawing_Font *font = OH_Drawing_FontCreate();
616 const char *str = "Hello World";
617 // 2. Pass nullptr as the first parameter to OH_Drawing_FontCountText and check the error code using
618 // OH_Drawing_ErrorCodeGet
619 OH_Drawing_FontCountText(nullptr, str, strlen(str), TEXT_ENCODING_UTF8);
620 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
621 // 3. Pass nullptr as the second parameter to OH_Drawing_FontCountText and check the error code using
622 // OH_Drawing_ErrorCodeGet
623 OH_Drawing_FontCountText(font, nullptr, strlen(str), TEXT_ENCODING_UTF8);
624 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
625 // 4. Pass an empty string as the second parameter and NULL as the third parameter to OH_Drawing_FontCountText
626 int count = OH_Drawing_FontCountText(font, "", 0, TEXT_ENCODING_UTF8);
627 EXPECT_EQ(count, 0);
628 // 5. Release memory
629 OH_Drawing_FontDestroy(font);
630 }
631
632 /*
633 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0702
634 * @tc.name: testFontCountTextMultipleCalls
635 * @tc.desc: test for testFontCountTextMultipleCalls.
636 * @tc.size : SmallTest
637 * @tc.type : Function
638 * @tc.level : Level 3
639 */
HWTEST_F(DrawingNativeFontTest, testFontCountTextMultipleCalls, TestSize.Level3)640 HWTEST_F(DrawingNativeFontTest, testFontCountTextMultipleCalls, TestSize.Level3) {
641 // 1. OH_Drawing_FontCreate
642 OH_Drawing_Font *font = OH_Drawing_FontCreate();
643 // 2. Call OH_Drawing_FontCountText 10 times (with different lengths and types of strings, such as Chinese, English,
644 // traditional characters, special characters, numbers, etc.)
645 const char *strs[] = {
646 "Hello World", "你好世界", "Hello 世界", "Hello 世界123", "Hello $#@!", "繁體中文",
647 };
648 for (const char *str : strs) {
649 int count = OH_Drawing_FontCountText(font, str, strlen(str), TEXT_ENCODING_UTF8);
650 if (strcmp(str, "Hello World") == 0) { // Use strcmp for string comparison
651 EXPECT_EQ(count, 11);
652 } else if (strcmp(str, "你好世界") == 0) {
653 EXPECT_EQ(count, 4);
654 } else if (strcmp(str, "Hello 世界") == 0) {
655 EXPECT_EQ(count, 8);
656 } else if (strcmp(str, "Hello 世界123") == 0) {
657 EXPECT_EQ(count, 11);
658 } else if (strcmp(str, "Hello $#@!") == 0) {
659 EXPECT_EQ(count, 10);
660 } else if (strcmp(str, "繁體中文") == 0) {
661 EXPECT_EQ(count, 4);
662 }
663 }
664 // 3. Release memory
665 OH_Drawing_FontDestroy(font);
666 }
667
668 /*
669 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0703
670 * @tc.name: testFontCountTextAbnormal
671 * @tc.desc: test for testFontCountTextAbnormal.
672 * @tc.size : SmallTest
673 * @tc.type : Function
674 * @tc.level : Level 3
675 */
HWTEST_F(DrawingNativeFontTest, testFontCountTextAbnormal, TestSize.Level3)676 HWTEST_F(DrawingNativeFontTest, testFontCountTextAbnormal, TestSize.Level3) {
677 // 1. OH_Drawing_FontCreate
678 OH_Drawing_Font *font = OH_Drawing_FontCreate();
679 // 2. Call OH_Drawing_FontSetTextSize with textSize parameter set to -1
680 const char *str = "Hello World";
681 int count = OH_Drawing_FontCountText(font, str, -1, TEXT_ENCODING_UTF8);
682 EXPECT_EQ(count, 0);
683 // 3. Release memory
684 OH_Drawing_FontDestroy(font);
685 }
686
687 /*
688 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0800
689 * @tc.name: testFontTextToGlyphsNormal
690 * @tc.desc: test for testFontTextToGlyphsNormal.
691 * @tc.size : SmallTest
692 * @tc.type : Function
693 * @tc.level : Level 0
694 */
HWTEST_F(DrawingNativeFontTest, testFontTextToGlyphsNormal, TestSize.Level0)695 HWTEST_F(DrawingNativeFontTest, testFontTextToGlyphsNormal, TestSize.Level0) {
696 // 1. OH_Drawing_FontCreate
697 OH_Drawing_Font *font = OH_Drawing_FontCreate();
698 // 2. Enumerate through the encoding values in OH_Drawing_FontTextToGlyphs
699 const char *str = "Hello World";
700 OH_Drawing_TextEncoding encodes[] = {
701 TEXT_ENCODING_UTF8,
702 TEXT_ENCODING_UTF16,
703 TEXT_ENCODING_UTF32,
704 TEXT_ENCODING_GLYPH_ID,
705 };
706 uint16_t glyphs[50] = {0}; // 50 means glyphs array number
707 for (OH_Drawing_TextEncoding encode : encodes) {
708 int count = OH_Drawing_FontCountText(font, str, strlen(str), encode);
709 OH_Drawing_FontTextToGlyphs(font, str, strlen(str), encode, glyphs, count);
710 }
711 // 3. Pass floating-point values for maxGlyphCount and byteLength parameters in OH_Drawing_FontTextToGlyphs
712 OH_Drawing_FontTextToGlyphs(font, str, 11.0f, TEXT_ENCODING_UTF8, glyphs, 11.0f);
713 // 4. Release memory
714 OH_Drawing_FontDestroy(font);
715 }
716
717 /*
718 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0801
719 * @tc.name: testFontTextToGlyphsNULL
720 * @tc.desc: test for testFontTextToGlyphsNULL.
721 * @tc.size : SmallTest
722 * @tc.type : Function
723 * @tc.level : Level 3
724 */
HWTEST_F(DrawingNativeFontTest, testFontTextToGlyphsNULL, TestSize.Level3)725 HWTEST_F(DrawingNativeFontTest, testFontTextToGlyphsNULL, TestSize.Level3) {
726 // 1. OH_Drawing_FontCreate
727 OH_Drawing_Font *font = OH_Drawing_FontCreate();
728 const char *str = "Hello World";
729 uint16_t glyphs[50] = {0}; // 50 means glyphs array number
730 int count = OH_Drawing_FontCountText(font, str, strlen(str), TEXT_ENCODING_UTF8);
731 // 2. Pass nullptr as the first parameter to OH_Drawing_FontTextToGlyphs and check the error code using
732 // OH_Drawing_ErrorCodeGet
733 OH_Drawing_FontTextToGlyphs(nullptr, str, strlen(str), TEXT_ENCODING_UTF8, glyphs, count);
734 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
735 // 3. Pass nullptr as the second parameter to OH_Drawing_FontTextToGlyphs and check the error code using
736 // OH_Drawing_ErrorCodeGet
737 OH_Drawing_FontTextToGlyphs(font, nullptr, strlen(str), TEXT_ENCODING_UTF8, glyphs, count);
738 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
739 // 4. Pass an empty string as the third parameter to OH_Drawing_FontTextToGlyphs and check the error code using
740 // OH_Drawing_ErrorCodeGet
741 OH_Drawing_FontTextToGlyphs(font, str, 0, TEXT_ENCODING_UTF8, glyphs, count);
742 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
743 // 5. Pass nullptr as the fifth parameter to OH_Drawing_FontTextToGlyphs and check the error code using
744 // OH_Drawing_ErrorCodeGet
745 OH_Drawing_FontTextToGlyphs(font, str, strlen(str), TEXT_ENCODING_UTF8, nullptr, count);
746 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
747 // 6. Pass 0 as the sixth parameter to OH_Drawing_FontTextToGlyphs and check the error code using
748 // OH_Drawing_ErrorCodeGet
749 OH_Drawing_FontTextToGlyphs(font, str, strlen(str), TEXT_ENCODING_UTF8, glyphs, 0);
750 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
751 // 7. Pass an empty string as the second parameter to OH_Drawing_FontTextToGlyphs
752 OH_Drawing_FontTextToGlyphs(font, "", 0, TEXT_ENCODING_UTF8, glyphs, count);
753 // 8. Release memory
754 OH_Drawing_FontDestroy(font);
755 }
756
757 /*
758 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0802
759 * @tc.name: testFontTextToGlyphsMultipleCalls
760 * @tc.desc: test for testFontTextToGlyphsMultipleCalls.
761 * @tc.size : SmallTest
762 * @tc.type : Function
763 * @tc.level : Level 3
764 */
HWTEST_F(DrawingNativeFontTest, testFontTextToGlyphsMultipleCalls, TestSize.Level3)765 HWTEST_F(DrawingNativeFontTest, testFontTextToGlyphsMultipleCalls, TestSize.Level3) {
766 // 1. OH_Drawing_FontCreate
767 OH_Drawing_Font *font = OH_Drawing_FontCreate();
768 // 2. Call OH_Drawing_FontTextToGlyphs 10 times (with different lengths and types of strings, such as Chinese,
769 // English, traditional characters, special characters, numbers, etc.)
770 const char *strs[] = {
771 "Hello World", "你好世界", "Hello 世界", "Hello 世界123", "Hello $#@!", "繁體中文",
772 };
773 uint16_t glyphs[50] = {0}; // 50 means glyphs array number
774 for (const char *str : strs) {
775 int count = OH_Drawing_FontCountText(font, str, strlen(str), TEXT_ENCODING_UTF8);
776 OH_Drawing_FontTextToGlyphs(font, str, strlen(str), TEXT_ENCODING_UTF8, glyphs, count);
777 }
778 // 3. Release memory
779 OH_Drawing_FontDestroy(font);
780 }
781
782 /*
783 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0803
784 * @tc.name: testFontTextToGlyphsAbnormal
785 * @tc.desc: test for testFontTextToGlyphsAbnormal.
786 * @tc.size : SmallTest
787 * @tc.type : Function
788 * @tc.level : Level 3
789 */
HWTEST_F(DrawingNativeFontTest, testFontTextToGlyphsAbnormal, TestSize.Level3)790 HWTEST_F(DrawingNativeFontTest, testFontTextToGlyphsAbnormal, TestSize.Level3) {
791 // 1. OH_Drawing_FontCreate
792 OH_Drawing_Font *font = OH_Drawing_FontCreate();
793 const char *str = "Hello World";
794 uint16_t glyphs[50] = {0}; // 50 means glyphs array number
795 // 2. Set byteLength parameter to -1 for OH_Drawing_FontTextToGlyphs interface
796 // Ignore, no need to test the case with byteLength parameter set to -1
797 // 3. Set maxGlyphCount parameter to -1 for OH_Drawing_FontTextToGlyphs interface and check the error code using
798 // OH_Drawing_ErrorCodeGet
799 OH_Drawing_FontTextToGlyphs(font, str, strlen(str), TEXT_ENCODING_UTF8, glyphs, -1);
800 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
801 // 4. Release memory
802 OH_Drawing_FontDestroy(font);
803 }
804
805 /*
806 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0804
807 * @tc.name: testFontTextToGlyphsMaximum
808 * @tc.desc: test for testFontTextToGlyphsMaximum.
809 * @tc.size : SmallTest
810 * @tc.type : Function
811 * @tc.level : Level 3
812 */
HWTEST_F(DrawingNativeFontTest, testFontTextToGlyphsMaximum, TestSize.Level3)813 HWTEST_F(DrawingNativeFontTest, testFontTextToGlyphsMaximum, TestSize.Level3) {
814 // 1. OH_Drawing_FontCreate
815 OH_Drawing_Font *font = OH_Drawing_FontCreate();
816 const char *str = "Hello World";
817 uint16_t glyphs[50] = {0}; // 50 means glyphs array number
818 int count = OH_Drawing_FontCountText(font, str, strlen(str), TEXT_ENCODING_UTF8);
819 // 2. Set byteLength parameter to maximum value for OH_Drawing_FontTextToGlyphs interface
820 // Ignore, no need to test the case with maximum byteLength parameter
821 // 3. Set maxGlyphCount parameter to maximum value for OH_Drawing_FontTextToGlyphs interface
822 OH_Drawing_FontTextToGlyphs(font, str, strlen(str), TEXT_ENCODING_UTF8, glyphs, INT32_MAX);
823 // 4. Set glyphs parameter to maximum value for OH_Drawing_FontTextToGlyphs interface
824 uint16_t glyphs2[50] = {UINT16_MAX};
825 OH_Drawing_FontTextToGlyphs(font, str, strlen(str), TEXT_ENCODING_UTF8, glyphs2, count);
826 // 5. Release memory
827 OH_Drawing_FontDestroy(font);
828 }
829
830 /*
831 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0900
832 * @tc.name: testFontGetWidthsNormal
833 * @tc.desc: test for testFontGetWidthsNormal.
834 * @tc.size : SmallTest
835 * @tc.type : Function
836 * @tc.level : Level 0
837 */
HWTEST_F(DrawingNativeFontTest, testFontGetWidthsNormal, TestSize.Level0)838 HWTEST_F(DrawingNativeFontTest, testFontGetWidthsNormal, TestSize.Level0) {
839 // 1. OH_Drawing_FontCreate
840 OH_Drawing_Font *font = OH_Drawing_FontCreate();
841 // 2. OH_Drawing_FontGetWidths
842 const char *str = "Hello World";
843 uint16_t glyphs[50] = {0}; // 50 means glyphs array number
844 int count = OH_Drawing_FontCountText(font, str, strlen(str), TEXT_ENCODING_UTF8);
845 int glyphsCount = OH_Drawing_FontTextToGlyphs(font, str, strlen(str), TEXT_ENCODING_UTF8, glyphs, count);
846 float widths[50] = {0.f};
847 OH_Drawing_FontGetWidths(font, glyphs, glyphsCount, widths);
848 EXPECT_GT(widths[0], 0.f);
849 // 3. Release memory
850 OH_Drawing_FontDestroy(font);
851 }
852
853 /*
854 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0901
855 * @tc.name: testFontGetWidthsNULL
856 * @tc.desc: test for testFontGetWidthsNULL.
857 * @tc.size : SmallTest
858 * @tc.type : Function
859 * @tc.level : Level 3
860 */
HWTEST_F(DrawingNativeFontTest, testFontGetWidthsNULL, TestSize.Level3)861 HWTEST_F(DrawingNativeFontTest, testFontGetWidthsNULL, TestSize.Level3) {
862 // 1. OH_Drawing_FontCreate
863 OH_Drawing_Font *font = OH_Drawing_FontCreate();
864 const char *str = "Hello World";
865 uint16_t glyphs[50] = {0}; // 50 means glyphs array number
866 int count = OH_Drawing_FontCountText(font, str, strlen(str), TEXT_ENCODING_UTF8);
867 int glyphsCount = OH_Drawing_FontTextToGlyphs(font, str, strlen(str), TEXT_ENCODING_UTF8, glyphs, count);
868 float widths[50] = {0.f};
869 // 2. Pass nullptr as the first parameter to OH_Drawing_FontGetWidths and check the error code using
870 // OH_Drawing_ErrorCodeGet
871 OH_Drawing_FontGetWidths(nullptr, glyphs, glyphsCount, widths);
872 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
873 // 3. Pass nullptr as the second parameter to OH_Drawing_FontGetWidths and check the error code using
874 // OH_Drawing_ErrorCodeGet
875 OH_Drawing_FontGetWidths(font, nullptr, glyphsCount, widths);
876 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
877 // 4. Pass 0 as the third parameter to OH_Drawing_FontGetWidths and check the error code using
878 // OH_Drawing_ErrorCodeGet
879 OH_Drawing_FontGetWidths(font, glyphs, 0, widths);
880 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
881 // 5. Pass nullptr as the fourth parameter to OH_Drawing_FontGetWidths and check the error code using
882 // OH_Drawing_ErrorCodeGet
883 OH_Drawing_FontGetWidths(font, glyphs, glyphsCount, nullptr);
884 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
885 // 6. Release memory
886 OH_Drawing_FontDestroy(font);
887 }
888
889 /*
890 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0902
891 * @tc.name: testFontGetWidthsMultipleCalls
892 * @tc.desc: test for testFontGetWidthsMultipleCalls.
893 * @tc.size : SmallTest
894 * @tc.type : Function
895 * @tc.level : Level 3
896 */
HWTEST_F(DrawingNativeFontTest, testFontGetWidthsMultipleCalls, TestSize.Level3)897 HWTEST_F(DrawingNativeFontTest, testFontGetWidthsMultipleCalls, TestSize.Level3) {
898 // 1. OH_Drawing_FontCreate
899 OH_Drawing_Font *font = OH_Drawing_FontCreate();
900 // 2. Call OH_Drawing_FontGetWidths 10 times (with different lengths and types of strings, such as Chinese, English,
901 // traditional characters, special characters, numbers, etc.)
902 const char *strs[] = {
903 "Hello World", "你好世界", "Hello 世界", "Hello 世界123", "Hello $#@!", "繁體中文",
904 };
905 uint16_t glyphs[50] = {0}; // 50 means glyphs array number
906 float widths[50] = {0.f};
907 for (const char *str : strs) {
908 int count = OH_Drawing_FontCountText(font, str, strlen(str), TEXT_ENCODING_UTF8);
909 int glyphsCount = OH_Drawing_FontTextToGlyphs(font, str, strlen(str), TEXT_ENCODING_UTF8, glyphs, count);
910 OH_Drawing_FontGetWidths(font, glyphs, glyphsCount, widths);
911 EXPECT_GT(widths[0], 0.f);
912 }
913 // 3. Release memory
914 OH_Drawing_FontDestroy(font);
915 }
916
917 /*
918 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0903
919 * @tc.name: testFontGetWidthsAbnormal
920 * @tc.desc: test for testFontGetWidthsAbnormal.
921 * @tc.size : SmallTest
922 * @tc.type : Function
923 * @tc.level : Level 3
924 */
HWTEST_F(DrawingNativeFontTest, testFontGetWidthsAbnormal, TestSize.Level3)925 HWTEST_F(DrawingNativeFontTest, testFontGetWidthsAbnormal, TestSize.Level3) {
926 // 1. OH_Drawing_FontCreate
927 OH_Drawing_Font *font = OH_Drawing_FontCreate();
928 const char *str = "Hello World";
929 uint16_t glyphs[50] = {0}; // 50 means glyphs array number
930 float widths[50] = {0.f};
931 int count = OH_Drawing_FontCountText(font, str, strlen(str), TEXT_ENCODING_UTF8);
932 int glyphsCount = OH_Drawing_FontTextToGlyphs(font, str, strlen(str), TEXT_ENCODING_UTF8, glyphs, count);
933 // 2. Set byteLength parameter to -1 for OH_Drawing_FontGetWidths interface
934 // There is no byteLength parameter
935 // 3. Set count parameter to -1 for OH_Drawing_FontGetWidths interface and check the error code using
936 // OH_Drawing_ErrorCodeGet
937 OH_Drawing_FontGetWidths(font, glyphs, -1, widths);
938 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
939 // 4. Set widths parameter to -1 for OH_Drawing_FontGetWidths interface
940 float widths2[50] = {-1};
941 OH_Drawing_FontGetWidths(font, glyphs, glyphsCount, widths2);
942 // 5. Set count parameter to a floating-point value greater than 0 for OH_Drawing_FontGetWidths interface
943 OH_Drawing_FontGetWidths(font, glyphs, 2.0f, widths);
944 // 6. Release memory
945 OH_Drawing_FontDestroy(font);
946 }
947
948 /*
949 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_0904
950 * @tc.name: testFontGetWidthsMaximum
951 * @tc.desc: test for testFontGetWidthsMaximum.
952 * @tc.size : SmallTest
953 * @tc.type : Function
954 * @tc.level : Level 3
955 */
HWTEST_F(DrawingNativeFontTest, testFontGetWidthsMaximum, TestSize.Level3)956 HWTEST_F(DrawingNativeFontTest, testFontGetWidthsMaximum, TestSize.Level3) {
957 // 1. OH_Drawing_FontCreate
958 OH_Drawing_Font *font = OH_Drawing_FontCreate();
959 const char *str = "Hello World";
960 uint16_t glyphs[50] = {0}; // 50 means glyphs array number
961 float widths[50] = {0.f};
962 int count = OH_Drawing_FontCountText(font, str, strlen(str), TEXT_ENCODING_UTF8);
963 int glyphsCount = OH_Drawing_FontTextToGlyphs(font, str, strlen(str), TEXT_ENCODING_UTF8, glyphs, count);
964 // 2. Call OH_Drawing_FontGetWidths interface with maximum value for glyphs parameter
965 uint16_t glyphs2[50] = {UINT16_MAX};
966 OH_Drawing_FontGetWidths(font, glyphs2, glyphsCount, widths);
967 // 3. Call OH_Drawing_FontGetWidths interface with maximum value for count parameter
968 // Ignore, no need to test the case with maximum count parameter
969 // 4. Call OH_Drawing_FontGetWidths interface with maximum value for widths parameter
970 float widths2[50] = {FLT_MAX};
971 OH_Drawing_FontGetWidths(font, glyphs, glyphsCount, widths2);
972 // 5. Release memory
973 OH_Drawing_FontDestroy(font);
974 }
975
976 /*
977 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1000
978 * @tc.name: testFontSetLinearTextNormal
979 * @tc.desc: test for testFontSetLinearTextNormal.
980 * @tc.size : SmallTest
981 * @tc.type : Function
982 * @tc.level : Level 0
983 */
HWTEST_F(DrawingNativeFontTest, testFontSetLinearTextNormal, TestSize.Level0)984 HWTEST_F(DrawingNativeFontTest, testFontSetLinearTextNormal, TestSize.Level0) {
985 // 1. OH_Drawing_FontCreate
986 OH_Drawing_Font *font = OH_Drawing_FontCreate();
987 // 2. Call OH_Drawing_FontSetLinearText with isLinearText parameter set to false, and then call
988 // OH_Drawing_FontIsLinearText to check if the glyphs are scaled linearly
989 OH_Drawing_FontSetLinearText(font, false);
990 bool isLinearText = OH_Drawing_FontIsLinearText(font);
991 EXPECT_EQ(isLinearText, false);
992 // 3. Call OH_Drawing_FontSetLinearText with isLinearText parameter set to true, and then call
993 // OH_Drawing_FontIsLinearText to check if the glyphs are scaled linearly
994 OH_Drawing_FontSetLinearText(font, true);
995 isLinearText = OH_Drawing_FontIsLinearText(font);
996 EXPECT_EQ(isLinearText, true);
997 // 4. Release memory
998 OH_Drawing_FontDestroy(font);
999 }
1000
1001 /*
1002 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1001
1003 * @tc.name: testFontSetLinearTextNULL
1004 * @tc.desc: test for testFontSetLinearTextNULL.
1005 * @tc.size : SmallTest
1006 * @tc.type : Function
1007 * @tc.level : Level 3
1008 */
HWTEST_F(DrawingNativeFontTest, testFontSetLinearTextNULL, TestSize.Level3)1009 HWTEST_F(DrawingNativeFontTest, testFontSetLinearTextNULL, TestSize.Level3) {
1010 // 1. Pass nullptr as the first parameter to OH_Drawing_FontSetLinearText and check the error code using
1011 // OH_Drawing_ErrorCodeGet
1012 OH_Drawing_FontSetLinearText(nullptr, false);
1013 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1014 // 2. Pass nullptr as the parameter to OH_Drawing_FontIsLinearText and check the error code using
1015 // OH_Drawing_ErrorCodeGet
1016 OH_Drawing_FontIsLinearText(nullptr);
1017 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1018 }
1019
1020 /*
1021 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1002
1022 * @tc.name: testFontSetLinearTextMultipleCalls
1023 * @tc.desc: test for testFontSetLinearTextMultipleCalls.
1024 * @tc.size : SmallTest
1025 * @tc.type : Function
1026 * @tc.level : Level 3
1027 */
HWTEST_F(DrawingNativeFontTest, testFontSetLinearTextMultipleCalls, TestSize.Level3)1028 HWTEST_F(DrawingNativeFontTest, testFontSetLinearTextMultipleCalls, TestSize.Level3) {
1029 // 1. OH_Drawing_FontCreate
1030 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1031 // 2. Call OH_Drawing_FontSetLinearText 10 times, and call OH_Drawing_FontIsLinearText to check if the glyphs are
1032 // scaled linearly
1033 for (int i = 0; i < 10; i++) {
1034 OH_Drawing_FontSetLinearText(font, i % 2 == 0);
1035 bool isLinearText = OH_Drawing_FontIsLinearText(font);
1036 EXPECT_EQ(isLinearText, i % 2 == 0);
1037 }
1038 // 3. Release memory
1039 OH_Drawing_FontDestroy(font);
1040 }
1041
1042 /*
1043 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1003
1044 * @tc.name: testFontIsLinearTextWhenNoSet
1045 * @tc.desc: test for testFontIsLinearTextWhenNoSet.
1046 * @tc.size : SmallTest
1047 * @tc.type : Function
1048 * @tc.level : Level 3
1049 */
HWTEST_F(DrawingNativeFontTest, testFontIsLinearTextWhenNoSet, TestSize.Level3)1050 HWTEST_F(DrawingNativeFontTest, testFontIsLinearTextWhenNoSet, TestSize.Level3) {
1051 // 1. OH_Drawing_FontCreate
1052 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1053 // 2. Call OH_Drawing_FontIsLinearText
1054 bool isLinearText = OH_Drawing_FontIsLinearText(font);
1055 EXPECT_EQ(isLinearText, false);
1056 // 3. Release memory
1057 OH_Drawing_FontDestroy(font);
1058 }
1059
1060 /*
1061 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1100
1062 * @tc.name: testFontSetTextSkewXNormal
1063 * @tc.desc: test for testFontSetTextSkewXNormal.
1064 * @tc.size : SmallTest
1065 * @tc.type : Function
1066 * @tc.level : Level 0
1067 */
HWTEST_F(DrawingNativeFontTest, testFontSetTextSkewXNormal, TestSize.Level0)1068 HWTEST_F(DrawingNativeFontTest, testFontSetTextSkewXNormal, TestSize.Level0) {
1069 // 1. OH_Drawing_FontCreate
1070 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1071 // 2. Call OH_Drawing_FontSetTextSkewX interface with skewX parameter set to 10, and then call
1072 // OH_Drawing_FontGetTextSkewX to get the text skew on the x-axis
1073 OH_Drawing_FontSetTextSkewX(font, 10);
1074 float skewX = OH_Drawing_FontGetTextSkewX(font);
1075 EXPECT_EQ(skewX, 10);
1076 // 3. Call OH_Drawing_FontSetTextSkewX interface with skewX parameter set to 0.55, and then call
1077 // OH_Drawing_FontGetTextSkewX to get the text skew on the x-axis
1078 OH_Drawing_FontSetTextSkewX(font, 0.55);
1079 skewX = OH_Drawing_FontGetTextSkewX(font);
1080 EXPECT_EQ(IsScalarAlmostEqual(skewX, 0.55), true);
1081 // 4. Release memory
1082 OH_Drawing_FontDestroy(font);
1083 }
1084
1085 /*
1086 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1101
1087 * @tc.name: testFontSetTextSkewXNULL
1088 * @tc.desc: test for testFontSetTextSkewXNULL.
1089 * @tc.size : SmallTest
1090 * @tc.type : Function
1091 * @tc.level : Level 3
1092 */
HWTEST_F(DrawingNativeFontTest, testFontSetTextSkewXNULL, TestSize.Level3)1093 HWTEST_F(DrawingNativeFontTest, testFontSetTextSkewXNULL, TestSize.Level3) {
1094 // 1. OH_Drawing_FontCreate
1095 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1096 // 2. Pass nullptr as the first parameter to OH_Drawing_FontSetTextSkewX and check the error code using
1097 // OH_Drawing_ErrorCodeGet
1098 OH_Drawing_FontSetTextSkewX(nullptr, 10);
1099 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1100 // 3. Pass 0 as the second parameter to OH_Drawing_FontSetTextSkewX
1101 OH_Drawing_FontSetTextSkewX(font, 0);
1102 // 4. Pass nullptr as the parameter to OH_Drawing_FontGetTextSkewX and check the error code using
1103 // OH_Drawing_ErrorCodeGet
1104 OH_Drawing_FontGetTextSkewX(nullptr);
1105 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1106 // 5. Release memory
1107 OH_Drawing_FontDestroy(font);
1108 }
1109
1110 /*
1111 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1102
1112 * @tc.name: testFontSetTextSkewXMultipleCalls
1113 * @tc.desc: test for testFontSetTextSkewXMultipleCalls.
1114 * @tc.size : SmallTest
1115 * @tc.type : Function
1116 * @tc.level : Level 3
1117 */
HWTEST_F(DrawingNativeFontTest, testFontSetTextSkewXMultipleCalls, TestSize.Level3)1118 HWTEST_F(DrawingNativeFontTest, testFontSetTextSkewXMultipleCalls, TestSize.Level3) {
1119 // 1. OH_Drawing_FontCreate
1120 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1121 // 2. Call OH_Drawing_FontSetTextSkewX 10 times (with random skewX values), and call OH_Drawing_FontGetTextSkewX to
1122 // get the text skew on the x-axis each time
1123 std::random_device rd;
1124 std::mt19937 gen(rd());
1125 std::uniform_real_distribution<float> dis(0, 30);
1126 for (int i = 0; i < 10; i++) {
1127 float val = dis(gen);
1128 OH_Drawing_FontSetTextSkewX(font, val);
1129 float skewX = OH_Drawing_FontGetTextSkewX(font);
1130 EXPECT_EQ(skewX, val);
1131 }
1132 // 3. Release memory
1133 OH_Drawing_FontDestroy(font);
1134 }
1135
1136 /*
1137 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1103
1138 * @tc.name: testFontGetTextSkewXWhenNoSet
1139 * @tc.desc: test for testFontGetTextSkewXWhenNoSet.
1140 * @tc.size : SmallTest
1141 * @tc.type : Function
1142 * @tc.level : Level 3
1143 */
HWTEST_F(DrawingNativeFontTest, testFontGetTextSkewXWhenNoSet, TestSize.Level3)1144 HWTEST_F(DrawingNativeFontTest, testFontGetTextSkewXWhenNoSet, TestSize.Level3) {
1145 // 1. OH_Drawing_FontCreate
1146 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1147 // 2. Call OH_Drawing_FontGetTextSkewX to get the text skew on the x-axis
1148 float skewX = OH_Drawing_FontGetTextSkewX(font);
1149 EXPECT_EQ(skewX, 0);
1150 // 3. Release memory
1151 OH_Drawing_FontDestroy(font);
1152 }
1153
1154 /*
1155 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1104
1156 * @tc.name: testFontSetTextSkewXAbnormal
1157 * @tc.desc: test for testFontSetTextSkewXAbnormal.
1158 * @tc.size : SmallTest
1159 * @tc.type : Function
1160 * @tc.level : Level 3
1161 */
HWTEST_F(DrawingNativeFontTest, testFontSetTextSkewXAbnormal, TestSize.Level3)1162 HWTEST_F(DrawingNativeFontTest, testFontSetTextSkewXAbnormal, TestSize.Level3) {
1163 // 1. OH_Drawing_FontCreate
1164 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1165 // 2. Call OH_Drawing_FontSetTextSkewX interface with skewX parameter set to -1, and then call
1166 // OH_Drawing_FontGetTextSkewX to get the text skew on the x-axis
1167 OH_Drawing_FontSetTextSkewX(font, -1);
1168 float skewX = OH_Drawing_FontGetTextSkewX(font);
1169 EXPECT_EQ(skewX, -1);
1170 // 3. Release memory
1171 OH_Drawing_FontDestroy(font);
1172 }
1173
1174 /*
1175 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1105
1176 * @tc.name: testFontSetTextSkewXMaximum
1177 * @tc.desc: test for testFontSetTextSkewXMaximum.
1178 * @tc.size : SmallTest
1179 * @tc.type : Function
1180 * @tc.level : Level 3
1181 */
HWTEST_F(DrawingNativeFontTest, testFontSetTextSkewXMaximum, TestSize.Level3)1182 HWTEST_F(DrawingNativeFontTest, testFontSetTextSkewXMaximum, TestSize.Level3) {
1183 // 1. OH_Drawing_FontCreate
1184 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1185 // 2. Call OH_Drawing_FontSetTextSkewX interface with skewX parameter set to FLT_MAX
1186 OH_Drawing_FontSetTextSkewX(font, FLT_MAX);
1187 // 3. Release memory
1188 OH_Drawing_FontDestroy(font);
1189 }
1190
1191 /*
1192 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1200
1193 * @tc.name: testFontSetFakeBoldTextNormal
1194 * @tc.desc: test for testFontSetFakeBoldTextNormal.
1195 * @tc.size : SmallTest
1196 * @tc.type : Function
1197 * @tc.level : Level 0
1198 */
HWTEST_F(DrawingNativeFontTest, testFontSetFakeBoldTextNormal, TestSize.Level0)1199 HWTEST_F(DrawingNativeFontTest, testFontSetFakeBoldTextNormal, TestSize.Level0) {
1200 // 1. OH_Drawing_FontCreate
1201 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1202 // 2. Call OH_Drawing_FontSetFakeBoldText interface with isFakeBoldText parameter set to false, and then call
1203 // OH_Drawing_FontIsFakeBoldText to check if the stroke width is increased to approximate bold text
1204 OH_Drawing_FontSetFakeBoldText(font, false);
1205 bool isFakeBoldText = OH_Drawing_FontIsFakeBoldText(font);
1206 EXPECT_EQ(isFakeBoldText, false);
1207 // 3. Call OH_Drawing_FontSetFakeBoldText interface with isFakeBoldText parameter set to true, and then call
1208 // OH_Drawing_FontIsFakeBoldText to check if the stroke width is increased to approximate bold text
1209 OH_Drawing_FontSetFakeBoldText(font, true);
1210 isFakeBoldText = OH_Drawing_FontIsFakeBoldText(font);
1211 EXPECT_EQ(isFakeBoldText, true);
1212 // 4. Release memory
1213 OH_Drawing_FontDestroy(font);
1214 }
1215
1216 /*
1217 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1201
1218 * @tc.name: testFontSetFakeBoldTextNULL
1219 * @tc.desc: test for testFontSetFakeBoldTextNULL.
1220 * @tc.size : SmallTest
1221 * @tc.type : Function
1222 * @tc.level : Level 3
1223 */
HWTEST_F(DrawingNativeFontTest, testFontSetFakeBoldTextNULL, TestSize.Level3)1224 HWTEST_F(DrawingNativeFontTest, testFontSetFakeBoldTextNULL, TestSize.Level3) {
1225 // 1. Pass nullptr as the first parameter to OH_Drawing_FontSetFakeBoldText and check the error code using
1226 // OH_Drawing_ErrorCodeGet
1227 OH_Drawing_FontSetFakeBoldText(nullptr, false);
1228 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1229 // 2. Pass nullptr as the parameter to OH_Drawing_FontIsFakeBoldText and check the error code using
1230 // OH_Drawing_ErrorCodeGet
1231 OH_Drawing_FontIsFakeBoldText(nullptr);
1232 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1233 }
1234
1235 /*
1236 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1202
1237 * @tc.name: testFontSetFakeBoldTextMultipleCalls
1238 * @tc.desc: test for testFontSetFakeBoldTextMultipleCalls.
1239 * @tc.size : SmallTest
1240 * @tc.type : Function
1241 * @tc.level : Level 3
1242 */
HWTEST_F(DrawingNativeFontTest, testFontSetFakeBoldTextMultipleCalls, TestSize.Level3)1243 HWTEST_F(DrawingNativeFontTest, testFontSetFakeBoldTextMultipleCalls, TestSize.Level3) {
1244 // 1. OH_Drawing_FontCreate
1245 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1246 // 2. Call OH_Drawing_FontSetFakeBoldText 10 times, and call OH_Drawing_FontIsFakeBoldText each time to check if the
1247 // stroke width is increased to approximate bold text
1248 for (int i = 0; i < 10; i++) {
1249 OH_Drawing_FontSetFakeBoldText(font, i % 2 == 0);
1250 bool isFakeBoldText = OH_Drawing_FontIsFakeBoldText(font);
1251 EXPECT_EQ(isFakeBoldText, i % 2 == 0);
1252 }
1253 // 3. Release memory
1254 OH_Drawing_FontDestroy(font);
1255 }
1256
1257 /*
1258 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1203
1259 * @tc.name: testFontIsFakeBoldTextWhenNoSet
1260 * @tc.desc: test for testFontIsFakeBoldTextWhenNoSet.
1261 * @tc.size : SmallTest
1262 * @tc.type : Function
1263 * @tc.level : Level 3
1264 */
HWTEST_F(DrawingNativeFontTest, testFontIsFakeBoldTextWhenNoSet, TestSize.Level3)1265 HWTEST_F(DrawingNativeFontTest, testFontIsFakeBoldTextWhenNoSet, TestSize.Level3) {
1266 // 1. OH_Drawing_FontCreate
1267 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1268 // 2. Call OH_Drawing_FontIsFakeBoldText
1269 bool isFakeBoldText = OH_Drawing_FontIsFakeBoldText(font);
1270 EXPECT_EQ(isFakeBoldText, false);
1271 // 3. Release memory
1272 OH_Drawing_FontDestroy(font);
1273 }
1274
1275 /*
1276 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1300
1277 * @tc.name: testFontSetScaleXNormal
1278 * @tc.desc: test for testFontSetScaleXNormal.
1279 * @tc.size : SmallTest
1280 * @tc.type : Function
1281 * @tc.level : Level 0
1282 */
HWTEST_F(DrawingNativeFontTest, testFontSetScaleXNormal, TestSize.Level0)1283 HWTEST_F(DrawingNativeFontTest, testFontSetScaleXNormal, TestSize.Level0) {
1284 // 1. OH_Drawing_FontCreate
1285 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1286 // 2. Call OH_Drawing_FontSetScaleX interface with scaleX parameter set to 10, and then call
1287 // OH_Drawing_FontGetScaleX to get the text scale on the x-axis
1288 OH_Drawing_FontSetScaleX(font, 10);
1289 float scaleX = OH_Drawing_FontGetScaleX(font);
1290 EXPECT_EQ(scaleX, 10);
1291 // 3. Call OH_Drawing_FontSetScaleX interface with scaleX parameter set to 0.55, and then call
1292 // OH_Drawing_FontGetScaleX to get the text scale on the x-axis
1293 OH_Drawing_FontSetScaleX(font, 0.55);
1294 scaleX = OH_Drawing_FontGetScaleX(font);
1295 EXPECT_EQ(IsScalarAlmostEqual(scaleX, 0.55), true);
1296 // 4. Release memory
1297 OH_Drawing_FontDestroy(font);
1298 }
1299
1300 /*
1301 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1301
1302 * @tc.name: testFontSetScaleXNULL
1303 * @tc.desc: test for testFontSetScaleXNULL.
1304 * @tc.size : SmallTest
1305 * @tc.type : Function
1306 * @tc.level : Level 3
1307 */
HWTEST_F(DrawingNativeFontTest, testFontSetScaleXNULL, TestSize.Level3)1308 HWTEST_F(DrawingNativeFontTest, testFontSetScaleXNULL, TestSize.Level3) {
1309 // 1. OH_Drawing_FontCreate
1310 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1311 // 2. Call OH_Drawing_FontSetScaleX with nullptr as the first parameter and check the error code using
1312 // OH_Drawing_ErrorCodeGet
1313 OH_Drawing_FontSetScaleX(nullptr, 10);
1314 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1315 // 3. Call OH_Drawing_FontSetScaleX with 0 as the second parameter
1316 OH_Drawing_FontSetScaleX(font, 0);
1317 // 4. Call OH_Drawing_FontGetScaleX with nullptr as the parameter and check the error code using
1318 // OH_Drawing_ErrorCodeGet
1319 OH_Drawing_FontGetScaleX(nullptr);
1320 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1321 // 5. Release memory
1322 OH_Drawing_FontDestroy(font);
1323 }
1324
1325 /*
1326 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1302
1327 * @tc.name: testFontSetScaleXMultipleCalls
1328 * @tc.desc: test for testFontSetScaleXMultipleCalls.
1329 * @tc.size : SmallTest
1330 * @tc.type : Function
1331 * @tc.level : Level 3
1332 */
HWTEST_F(DrawingNativeFontTest, testFontSetScaleXMultipleCalls, TestSize.Level3)1333 HWTEST_F(DrawingNativeFontTest, testFontSetScaleXMultipleCalls, TestSize.Level3) {
1334 // 1. OH_Drawing_FontCreate
1335 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1336 // 2. Call OH_Drawing_FontSetScaleX 10 times (with random values for scaleX parameter), and call
1337 // OH_Drawing_FontGetScaleX each time to get the text scale on the x-axis
1338 std::random_device rd;
1339 std::mt19937 gen(rd());
1340 std::uniform_real_distribution<float> dis(0, 30);
1341 for (int i = 0; i < 10; i++) {
1342 float val = dis(gen);
1343 OH_Drawing_FontSetScaleX(font, val);
1344 float scaleX = OH_Drawing_FontGetScaleX(font);
1345 EXPECT_EQ(scaleX, val);
1346 }
1347 // 3. Release memory
1348 OH_Drawing_FontDestroy(font);
1349 }
1350
1351 /*
1352 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1303
1353 * @tc.name: testFontGetScaleXWhenNoSet
1354 * @tc.desc: test for testFontGetScaleXWhenNoSet.
1355 * @tc.size : SmallTest
1356 * @tc.type : Function
1357 * @tc.level : Level 3
1358 */
HWTEST_F(DrawingNativeFontTest, testFontGetScaleXWhenNoSet, TestSize.Level3)1359 HWTEST_F(DrawingNativeFontTest, testFontGetScaleXWhenNoSet, TestSize.Level3) {
1360 // 1. OH_Drawing_FontCreate
1361 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1362 // 2. Call OH_Drawing_FontGetScaleX to get the text scale on the x-axis
1363 float scaleX = OH_Drawing_FontGetScaleX(font);
1364 EXPECT_EQ(scaleX, 1);
1365 // 3. Release memory
1366 OH_Drawing_FontDestroy(font);
1367 }
1368
1369 /*
1370 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1304
1371 * @tc.name: testFontSetScaleXAbnormal
1372 * @tc.desc: test for testFontSetScaleXAbnormal.
1373 * @tc.size : SmallTest
1374 * @tc.type : Function
1375 * @tc.level : Level 3
1376 */
HWTEST_F(DrawingNativeFontTest, testFontSetScaleXAbnormal, TestSize.Level3)1377 HWTEST_F(DrawingNativeFontTest, testFontSetScaleXAbnormal, TestSize.Level3) {
1378 // 1. OH_Drawing_FontCreate
1379 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1380 // 2. Call OH_Drawing_FontSetScaleX interface with scaleX parameter set to -1, and then call
1381 // OH_Drawing_FontGetScaleX to get the text scale on the x-axis
1382 OH_Drawing_FontSetScaleX(font, -1);
1383 float scaleX = OH_Drawing_FontGetScaleX(font);
1384 EXPECT_EQ(scaleX, -1);
1385 // 3. Release memory
1386 OH_Drawing_FontDestroy(font);
1387 }
1388
1389 /*
1390 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1305
1391 * @tc.name: testFontSetScaleXMaximum
1392 * @tc.desc: test for testFontSetScaleXMaximum.
1393 * @tc.size : SmallTest
1394 * @tc.type : Function
1395 * @tc.level : Level 3
1396 */
HWTEST_F(DrawingNativeFontTest, testFontSetScaleXMaximum, TestSize.Level3)1397 HWTEST_F(DrawingNativeFontTest, testFontSetScaleXMaximum, TestSize.Level3) {
1398 // 1. OH_Drawing_FontCreate
1399 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1400 // 2. Call OH_Drawing_FontSetScaleX interface with scaleX parameter set to FLT_MAX, and then call
1401 // OH_Drawing_FontGetScaleX to get the text scale on the x-axis
1402 OH_Drawing_FontSetScaleX(font, FLT_MAX);
1403 // 3. Release memory
1404 OH_Drawing_FontDestroy(font);
1405 }
1406
1407 /*
1408 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1400
1409 * @tc.name: testFontSetHintingNormal
1410 * @tc.desc: test for testFontSetHintingNormal.
1411 * @tc.size : SmallTest
1412 * @tc.type : Function
1413 * @tc.level : Level 0
1414 */
HWTEST_F(DrawingNativeFontTest, testFontSetHintingNormal, TestSize.Level0)1415 HWTEST_F(DrawingNativeFontTest, testFontSetHintingNormal, TestSize.Level0) {
1416 // 1. OH_Drawing_FontCreate
1417 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1418 // 2. OH_Drawing_FontSetHinting enum value OH_Drawing_FontHinting coverage verification, call
1419 // OH_Drawing_FontGetHinting to get the font outline effect enum type
1420 OH_Drawing_FontHinting hinting[] = {
1421 FONT_HINTING_NONE,
1422 FONT_HINTING_SLIGHT,
1423 FONT_HINTING_NORMAL,
1424 FONT_HINTING_FULL,
1425 };
1426 for (OH_Drawing_FontHinting h : hinting) {
1427 OH_Drawing_FontSetHinting(font, h);
1428 OH_Drawing_FontHinting hinting2 = OH_Drawing_FontGetHinting(font);
1429 EXPECT_EQ(hinting2, h);
1430 }
1431 // 3. Release memory
1432 OH_Drawing_FontDestroy(font);
1433 }
1434
1435 /*
1436 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1401
1437 * @tc.name: testFontSetHintingNULL
1438 * @tc.desc: test for testFontSetHintingNULL.
1439 * @tc.size : SmallTest
1440 * @tc.type : Function
1441 * @tc.level : Level 3
1442 */
HWTEST_F(DrawingNativeFontTest, testFontSetHintingNULL, TestSize.Level3)1443 HWTEST_F(DrawingNativeFontTest, testFontSetHintingNULL, TestSize.Level3) {
1444 // 1. Call OH_Drawing_FontSetHinting with nullptr as the first parameter and check the error code using
1445 // OH_Drawing_ErrorCodeGet
1446 OH_Drawing_FontSetHinting(nullptr, FONT_HINTING_NONE);
1447 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1448 // 2. Call OH_Drawing_FontGetHinting with nullptr as the parameter and check the error code using
1449 // OH_Drawing_ErrorCodeGet
1450 OH_Drawing_FontGetHinting(nullptr);
1451 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1452 }
1453
1454 /*
1455 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1402
1456 * @tc.name: testFontSetHintingMultipleCalls
1457 * @tc.desc: test for testFontSetHintingMultipleCalls.
1458 * @tc.size : SmallTest
1459 * @tc.type : Function
1460 * @tc.level : Level 3
1461 */
HWTEST_F(DrawingNativeFontTest, testFontSetHintingMultipleCalls, TestSize.Level3)1462 HWTEST_F(DrawingNativeFontTest, testFontSetHintingMultipleCalls, TestSize.Level3) {
1463 // 1. OH_Drawing_FontCreate
1464 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1465 // 2. Call OH_Drawing_FontSetHinting 10 times (with random enum values), and call OH_Drawing_FontGetHinting each
1466 // time to get the font outline effect enum type
1467 std::random_device rd;
1468 std::mt19937 gen(rd());
1469 std::uniform_int_distribution<int> dis(0, 3);
1470 for (int i = 0; i < 10; i++) {
1471 OH_Drawing_FontHinting hinting = static_cast<OH_Drawing_FontHinting>(dis(gen));
1472 OH_Drawing_FontSetHinting(font, hinting);
1473 OH_Drawing_FontHinting hinting2 = OH_Drawing_FontGetHinting(font);
1474 EXPECT_EQ(hinting2, hinting);
1475 }
1476 // 3. Release memory
1477 OH_Drawing_FontDestroy(font);
1478 }
1479
1480 /*
1481 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1403
1482 * @tc.name: testFontGetHintingWhenNoSet
1483 * @tc.desc: test for testFontGetHintingWhenNoSet.
1484 * @tc.size : SmallTest
1485 * @tc.type : Function
1486 * @tc.level : Level 3
1487 */
HWTEST_F(DrawingNativeFontTest, testFontGetHintingWhenNoSet, TestSize.Level3)1488 HWTEST_F(DrawingNativeFontTest, testFontGetHintingWhenNoSet, TestSize.Level3) {
1489 // 1. OH_Drawing_FontCreate
1490 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1491 // 2. Call OH_Drawing_FontGetHinting
1492 OH_Drawing_FontHinting hinting = OH_Drawing_FontGetHinting(font);
1493 EXPECT_EQ(hinting, FONT_HINTING_NORMAL);
1494 // 3. Release memory
1495 OH_Drawing_FontDestroy(font);
1496 }
1497
1498 /*
1499 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1500
1500 * @tc.name: testFontSetEmbeddedBitmapsNormal
1501 * @tc.desc: test for testFontSetEmbeddedBitmapsNormal.
1502 * @tc.size : SmallTest
1503 * @tc.type : Function
1504 * @tc.level : Level 0
1505 */
HWTEST_F(DrawingNativeFontTest, testFontSetEmbeddedBitmapsNormal, TestSize.Level0)1506 HWTEST_F(DrawingNativeFontTest, testFontSetEmbeddedBitmapsNormal, TestSize.Level0) {
1507 // 1. OH_Drawing_FontCreate
1508 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1509 // 2. Call OH_Drawing_FontSetEmbeddedBitmaps with false as the isEmbeddedBitmaps parameter, and call
1510 // OH_Drawing_FontIsEmbeddedBitmaps to check if the glyph is converted to a bitmap
1511 OH_Drawing_FontSetEmbeddedBitmaps(font, false);
1512 bool isEmbeddedBitmaps = OH_Drawing_FontIsEmbeddedBitmaps(font);
1513 EXPECT_EQ(isEmbeddedBitmaps, false);
1514 // 3. Call OH_Drawing_FontSetEmbeddedBitmaps with true as the isEmbeddedBitmaps parameter, and call
1515 // OH_Drawing_FontIsEmbeddedBitmaps to check if the glyph is converted to a bitmap
1516 OH_Drawing_FontSetEmbeddedBitmaps(font, true);
1517 isEmbeddedBitmaps = OH_Drawing_FontIsEmbeddedBitmaps(font);
1518 EXPECT_EQ(isEmbeddedBitmaps, true);
1519 // 4. Release memory
1520 OH_Drawing_FontDestroy(font);
1521 }
1522
1523 /*
1524 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1501
1525 * @tc.name: testFontSetEmbeddedBitmapsNULL
1526 * @tc.desc: test for testFontSetEmbeddedBitmapsNULL.
1527 * @tc.size : SmallTest
1528 * @tc.type : Function
1529 * @tc.level : Level 3
1530 */
HWTEST_F(DrawingNativeFontTest, testFontSetEmbeddedBitmapsNULL, TestSize.Level3)1531 HWTEST_F(DrawingNativeFontTest, testFontSetEmbeddedBitmapsNULL, TestSize.Level3) {
1532 // 1. Call OH_Drawing_FontSetEmbeddedBitmaps with nullptr as the first parameter and check the error code using
1533 // OH_Drawing_ErrorCodeGet
1534 OH_Drawing_FontSetEmbeddedBitmaps(nullptr, false);
1535 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1536 // 2. Call OH_Drawing_FontIsEmbeddedBitmaps with nullptr as the parameter and check the error code using
1537 // OH_Drawing_ErrorCodeGet
1538 OH_Drawing_FontIsEmbeddedBitmaps(nullptr);
1539 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1540 }
1541
1542 /*
1543 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1502
1544 * @tc.name: testFontSetEmbeddedBitmapsMultipleCalls
1545 * @tc.desc: test for testFontSetEmbeddedBitmapsMultipleCalls.
1546 * @tc.size : SmallTest
1547 * @tc.type : Function
1548 * @tc.level : Level 3
1549 */
HWTEST_F(DrawingNativeFontTest, testFontSetEmbeddedBitmapsMultipleCalls, TestSize.Level3)1550 HWTEST_F(DrawingNativeFontTest, testFontSetEmbeddedBitmapsMultipleCalls, TestSize.Level3) {
1551 // 1. OH_Drawing_FontCreate
1552 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1553 // 2. Call OH_Drawing_FontSetEmbeddedBitmaps 10 times, and call OH_Drawing_FontIsEmbeddedBitmaps each time to check
1554 // if the glyph is converted to a bitmap
1555 for (int i = 0; i < 10; i++) {
1556 OH_Drawing_FontSetEmbeddedBitmaps(font, i % 2 == 0);
1557 bool isEmbeddedBitmaps = OH_Drawing_FontIsEmbeddedBitmaps(font);
1558 EXPECT_EQ(isEmbeddedBitmaps, i % 2 == 0);
1559 }
1560 // 3. Release memory
1561 OH_Drawing_FontDestroy(font);
1562 }
1563
1564 /*
1565 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1503
1566 * @tc.name: testFontIsEmbeddedBitmapsWhenNoSet
1567 * @tc.desc: test for testFontIsEmbeddedBitmapsWhenNoSet.
1568 * @tc.size : SmallTest
1569 * @tc.type : Function
1570 * @tc.level : Level 3
1571 */
HWTEST_F(DrawingNativeFontTest, testFontIsEmbeddedBitmapsWhenNoSet, TestSize.Level3)1572 HWTEST_F(DrawingNativeFontTest, testFontIsEmbeddedBitmapsWhenNoSet, TestSize.Level3) {
1573 // 1. OH_Drawing_FontCreate
1574 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1575 // 2. Call OH_Drawing_FontIsEmbeddedBitmaps
1576 bool isEmbeddedBitmaps = OH_Drawing_FontIsEmbeddedBitmaps(font);
1577 EXPECT_EQ(isEmbeddedBitmaps, false);
1578 // 3. Release memory
1579 OH_Drawing_FontDestroy(font);
1580 }
1581
1582 /*
1583 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1600
1584 * @tc.name: testFontSetEdgingNormal
1585 * @tc.desc: test for testFontSetEdgingNormal.
1586 * @tc.size : SmallTest
1587 * @tc.type : Function
1588 * @tc.level : Level 0
1589 */
HWTEST_F(DrawingNativeFontTest, testFontSetEdgingNormal, TestSize.Level0)1590 HWTEST_F(DrawingNativeFontTest, testFontSetEdgingNormal, TestSize.Level0) {
1591 // 1. OH_Drawing_FontCreate
1592 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1593 // 2. OH_Drawing_FontSetEdging enum value OH_Drawing_FontEdging coverage verification, call OH_Drawing_FontGetEdging
1594 // to get the font edge effect enum type
1595 OH_Drawing_FontEdging edging[] = {
1596 FONT_EDGING_ALIAS,
1597 FONT_EDGING_ANTI_ALIAS,
1598 FONT_EDGING_SUBPIXEL_ANTI_ALIAS,
1599 };
1600 for (OH_Drawing_FontEdging e : edging) {
1601 OH_Drawing_FontSetEdging(font, e);
1602 OH_Drawing_FontEdging e2 = OH_Drawing_FontGetEdging(font);
1603 EXPECT_EQ(e2, e);
1604 }
1605 // 3. Release memory
1606 OH_Drawing_FontDestroy(font);
1607 }
1608
1609 /*
1610 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1601
1611 * @tc.name: testFontSetEdgingNULL
1612 * @tc.desc: test for testFontSetEdgingNULL.
1613 * @tc.size : SmallTest
1614 * @tc.type : Function
1615 * @tc.level : Level 3
1616 */
HWTEST_F(DrawingNativeFontTest, testFontSetEdgingNULL, TestSize.Level3)1617 HWTEST_F(DrawingNativeFontTest, testFontSetEdgingNULL, TestSize.Level3) {
1618 // 1. Call OH_Drawing_FontSetEdging with nullptr as the first parameter and check the error code using
1619 // OH_Drawing_ErrorCodeGet
1620 OH_Drawing_FontSetEdging(nullptr, FONT_EDGING_ALIAS);
1621 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1622 // 2. Call OH_Drawing_FontGetEdging with nullptr as the parameter and check the error code using
1623 // OH_Drawing_ErrorCodeGet
1624 OH_Drawing_FontGetEdging(nullptr);
1625 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1626 }
1627
1628 /*
1629 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1602
1630 * @tc.name: testFontSetEdgingMultipleCalls
1631 * @tc.desc: test for testFontSetEdgingMultipleCalls.
1632 * @tc.size : SmallTest
1633 * @tc.type : Function
1634 * @tc.level : Level 3
1635 */
HWTEST_F(DrawingNativeFontTest, testFontSetEdgingMultipleCalls, TestSize.Level3)1636 HWTEST_F(DrawingNativeFontTest, testFontSetEdgingMultipleCalls, TestSize.Level3) {
1637 // 1. OH_Drawing_FontCreate
1638 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1639 // 2. Call OH_Drawing_FontSetEdging 10 times (with random enum values), and call OH_Drawing_FontGetEdging each time
1640 // to get the font edge effect enum type
1641 std::random_device rd;
1642 std::mt19937 gen(rd());
1643 std::uniform_int_distribution<int> dis(0, 2);
1644 for (int i = 0; i < 10; i++) {
1645 OH_Drawing_FontEdging edging = static_cast<OH_Drawing_FontEdging>(dis(gen));
1646 OH_Drawing_FontSetEdging(font, edging);
1647 OH_Drawing_FontEdging edging2 = OH_Drawing_FontGetEdging(font);
1648 EXPECT_EQ(edging2, edging);
1649 }
1650 // 3. Release memory
1651 OH_Drawing_FontDestroy(font);
1652 }
1653
1654 /*
1655 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1603
1656 * @tc.name: testFontGetEdgingWhenNoSet
1657 * @tc.desc: test for testFontGetEdgingWhenNoSet.
1658 * @tc.size : SmallTest
1659 * @tc.type : Function
1660 * @tc.level : Level 3
1661 */
HWTEST_F(DrawingNativeFontTest, testFontGetEdgingWhenNoSet, TestSize.Level3)1662 HWTEST_F(DrawingNativeFontTest, testFontGetEdgingWhenNoSet, TestSize.Level3) {
1663 // 1. OH_Drawing_FontCreate
1664 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1665 // 2. Call OH_Drawing_FontGetEdging
1666 OH_Drawing_FontEdging edging = OH_Drawing_FontGetEdging(font);
1667 EXPECT_EQ(edging, FONT_EDGING_ANTI_ALIAS);
1668 // 3. Release memory
1669 OH_Drawing_FontDestroy(font);
1670 }
1671
1672 /*
1673 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1700
1674 * @tc.name: testFontGetMetricsNormal
1675 * @tc.desc: test for testFontGetMetricsNormal.
1676 * @tc.size : SmallTest
1677 * @tc.type : Function
1678 * @tc.level : Level 0
1679 */
HWTEST_F(DrawingNativeFontTest, testFontGetMetricsNormal, TestSize.Level0)1680 HWTEST_F(DrawingNativeFontTest, testFontGetMetricsNormal, TestSize.Level0) {
1681 // 1. OH_Drawing_FontCreate
1682 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1683 // 2. Call OH_Drawing_FontGetMetrics
1684 OH_Drawing_Font_Metrics cFontMetrics;
1685 EXPECT_TRUE(OH_Drawing_FontGetMetrics(font, &cFontMetrics) >= 0);
1686 // 3. Release memory
1687 OH_Drawing_FontDestroy(font);
1688 }
1689
1690 /*
1691 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1701
1692 * @tc.name: testFontGetMetricsNULL
1693 * @tc.desc: test for testFontGetMetricsNULL.
1694 * @tc.size : SmallTest
1695 * @tc.type : Function
1696 * @tc.level : Level 3
1697 */
HWTEST_F(DrawingNativeFontTest, testFontGetMetricsNULL, TestSize.Level3)1698 HWTEST_F(DrawingNativeFontTest, testFontGetMetricsNULL, TestSize.Level3) {
1699 // 1. OH_Drawing_FontCreate
1700 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1701 // 2. Call OH_Drawing_FontGetMetrics with nullptr as the first parameter and check the error code using
1702 // OH_Drawing_ErrorCodeGet
1703 OH_Drawing_Font_Metrics cFontMetrics;
1704 OH_Drawing_FontGetMetrics(nullptr, &cFontMetrics);
1705 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1706 // 3. Call OH_Drawing_FontGetMetrics with nullptr as the second parameter and check the error code using
1707 // OH_Drawing_ErrorCodeGet
1708 OH_Drawing_FontGetMetrics(font, nullptr);
1709 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1710 // 4. Release memory
1711 OH_Drawing_FontDestroy(font);
1712 }
1713
1714 /*
1715 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1702
1716 * @tc.name: testFontGetMetricsMultipleCalls
1717 * @tc.desc: test for testFontGetMetricsMultipleCalls.
1718 * @tc.size : SmallTest
1719 * @tc.type : Function
1720 * @tc.level : Level 3
1721 */
HWTEST_F(DrawingNativeFontTest, testFontGetMetricsMultipleCalls, TestSize.Level3)1722 HWTEST_F(DrawingNativeFontTest, testFontGetMetricsMultipleCalls, TestSize.Level3) {
1723 // 1. OH_Drawing_FontCreate
1724 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1725 // 2. Call OH_Drawing_FontGetMetrics 10 times
1726 for (int i = 0; i < 10; i++) {
1727 OH_Drawing_Font_Metrics cFontMetrics;
1728 EXPECT_TRUE(OH_Drawing_FontGetMetrics(font, &cFontMetrics) >= 0);
1729 }
1730 // 3. Release memory
1731 OH_Drawing_FontDestroy(font);
1732 }
1733
1734 /*
1735 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1800
1736 * @tc.name: testFontMeasureSingleCharacterNormal
1737 * @tc.desc: test for testFontMeasureSingleCharacterNormal.
1738 * @tc.size : SmallTest
1739 * @tc.type : Function
1740 * @tc.level : Level 0
1741 */
HWTEST_F(DrawingNativeFontTest, testFontMeasureSingleCharacterNormal, TestSize.Level0)1742 HWTEST_F(DrawingNativeFontTest, testFontMeasureSingleCharacterNormal, TestSize.Level0)
1743 {
1744 //1. OH_Drawing_FontCreate
1745 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1746 //2. All OH_Drawing_FontMeasureSingleCharacter parameters are entered normally, including str single character,
1747 // UTF8 encoded Chinese/English characters
1748 float textWidth = 0.f;
1749 const char* strOne = "a";
1750 OH_Drawing_FontMeasureSingleCharacter(font, strOne, &textWidth);
1751 strOne = "我";
1752 OH_Drawing_FontMeasureSingleCharacter(font, strOne, &textWidth);
1753 //3. All OH_Drawing_FontMeasureSingleCharacter parameters are entered normally, including str multi-character,
1754 // UTF8 encoded Chinese/English characters
1755 const char* strTwo = "你好";
1756 OH_Drawing_FontMeasureSingleCharacter(font, strTwo, &textWidth);
1757 strTwo = "baby";
1758 OH_Drawing_FontMeasureSingleCharacter(font, strTwo, &textWidth);
1759 //4. free memory
1760 OH_Drawing_FontDestroy(font);
1761 }
1762
1763 /*
1764 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1801
1765 * @tc.name: testFontMeasureSingleCharacterNull
1766 * @tc.desc: test for testFontMeasureSingleCharacterNull.
1767 * @tc.size : SmallTest
1768 * @tc.type : Function
1769 * @tc.level : Level 3
1770 */
HWTEST_F(DrawingNativeFontTest, testFontMeasureSingleCharacterNull, TestSize.Level3)1771 HWTEST_F(DrawingNativeFontTest, testFontMeasureSingleCharacterNull, TestSize.Level3)
1772 {
1773 //1. OH_Drawing_FontCreate
1774 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1775 //2. OH_Drawing_FontMeasureSingleCharacter with the parameter font as null
1776 float textWidth = 0.f;
1777 const char *strOne = "a";
1778 OH_Drawing_FontMeasureSingleCharacter(nullptr, strOne, &textWidth);
1779 //3. OH_Drawing_FontMeasureSingleCharacter with the parameter str as null
1780 OH_Drawing_FontMeasureSingleCharacter(font, nullptr, &textWidth);
1781 //4. OH_Drawing_FontMeasureSingleCharacter with the parameter textWidth as null
1782 OH_Drawing_FontMeasureSingleCharacter(font, strOne, nullptr);
1783 //5. free memory
1784 OH_Drawing_FontDestroy(font);
1785 }
1786
1787 /*
1788 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1802
1789 * @tc.name: testFontMeasureSingleCharacterMultipleCalls
1790 * @tc.desc: test for testFontMeasureSingleCharacterMultipleCalls.
1791 * @tc.size : SmallTest
1792 * @tc.type : Function
1793 * @tc.level : Level 3
1794 */
HWTEST_F(DrawingNativeFontTest, testFontMeasureSingleCharacterMultipleCalls, TestSize.Level3)1795 HWTEST_F(DrawingNativeFontTest, testFontMeasureSingleCharacterMultipleCalls, TestSize.Level3)
1796 {
1797 //1. OH_Drawing_FontCreate
1798 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1799 //2. OH_Drawing_FontMeasureSingleCharacter API is called 10 times as a normal input parameter
1800 const char *str[] = {
1801 "a", "b", "c", "d", "e", "f", "g", "h", "i", "j"
1802 };
1803 float textWidth = 0.f;
1804 for (int i = 0; i < 10; i++) {
1805 OH_Drawing_FontMeasureSingleCharacter(font, str[i], &textWidth);
1806 }
1807 //3. free memory
1808 OH_Drawing_FontDestroy(font);
1809 }
1810
1811
1812 /*
1813 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1900
1814 * @tc.name: testFontMeasuretextNormal
1815 * @tc.desc: test for testFontMeasuretextNormal.
1816 * @tc.size : SmallTest
1817 * @tc.type : Function
1818 * @tc.level : Level 0
1819 */
HWTEST_F(DrawingNativeFontTest, testFontMeasuretextNormal, TestSize.Level0)1820 HWTEST_F(DrawingNativeFontTest, testFontMeasuretextNormal, TestSize.Level0)
1821 {
1822 //1. OH_Drawing_FontCreate
1823 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1824 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100);
1825 OH_Drawing_Rect *bounds = OH_Drawing_RectCreate(0, 0, 100, 100);
1826 //2. OH_Drawing_FontMeasureText enumeration traversal
1827 const void *text = "abc";
1828 const size_t byteLength = 3;
1829 float textWidth = 0.f;
1830 OH_Drawing_TextEncoding encodes[] = {
1831 TEXT_ENCODING_UTF8,
1832 TEXT_ENCODING_UTF16,
1833 TEXT_ENCODING_UTF32,
1834 TEXT_ENCODING_GLYPH_ID,
1835 };
1836 for (int i = 0; i < 4; i++) {
1837 OH_Drawing_FontMeasureText(font, text, byteLength, encodes[i], bounds, &textWidth);
1838 }
1839 //3. OH_Drawing_FontMeasureText with the fifth parameter as null(normally)
1840 OH_Drawing_FontMeasureText(font, text, byteLength, TEXT_ENCODING_UTF8, bounds, &textWidth);
1841 //4. free memory
1842 OH_Drawing_FontDestroy(font);
1843 OH_Drawing_RectDestroy(rect);
1844 OH_Drawing_RectDestroy(bounds);
1845 }
1846
1847 /*
1848 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1901
1849 * @tc.name: testFontMeasuretextNull
1850 * @tc.desc: test for testFontMeasuretextNull.
1851 * @tc.size : SmallTest
1852 * @tc.type : Function
1853 * @tc.level : Level 3
1854 */
HWTEST_F(DrawingNativeFontTest, testFontMeasuretextNull, TestSize.Level3)1855 HWTEST_F(DrawingNativeFontTest, testFontMeasuretextNull, TestSize.Level3)
1856 {
1857 //1. OH_Drawing_FontCreate
1858 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1859 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100);
1860 OH_Drawing_Rect *bounds = OH_Drawing_RectCreate(0, 0, 100, 100);
1861 // 2. Call OH_Drawing_FontMeasureText with nullptr as the first parameter, check the error code using
1862 // OH_Drawing_ErrorCodeGet
1863 const void *text = "abc";
1864 const size_t byteLength = 3;
1865 float textWidth = 0.f;
1866 OH_Drawing_FontMeasureText(nullptr, text, byteLength, TEXT_ENCODING_UTF8, bounds, &textWidth);
1867 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1868 // 3. Call OH_Drawing_FontMeasureText with nullptr as the second parameter, check the error code using
1869 // OH_Drawing_ErrorCodeGet
1870 OH_Drawing_FontMeasureText(font, nullptr, byteLength, TEXT_ENCODING_UTF8, bounds, &textWidth);
1871 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1872 // 4. Call OH_Drawing_FontMeasureText with nullptr or 0 as the third parameter, check the error code using
1873 // OH_Drawing_ErrorCodeGet
1874 OH_Drawing_FontMeasureText(font, text, 0, TEXT_ENCODING_UTF8, bounds, &textWidth);
1875 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1876 // 5. Call OH_Drawing_FontMeasureText with nullptr as the sixth parameter, check the error code using
1877 // OH_Drawing_ErrorCodeGet
1878 OH_Drawing_FontMeasureText(font, text, byteLength, TEXT_ENCODING_UTF8, bounds, nullptr);
1879 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1880 // 6. free memory
1881 OH_Drawing_FontDestroy(font);
1882 OH_Drawing_RectDestroy(rect);
1883 OH_Drawing_RectDestroy(bounds);
1884 }
1885
1886
1887 /*
1888 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1902
1889 * @tc.name: testFontMeasuretextMultipleCalls
1890 * @tc.desc: test for testFontMeasuretextMultipleCalls.
1891 * @tc.size : SmallTest
1892 * @tc.type : Function
1893 * @tc.level : Level 3
1894 */
HWTEST_F(DrawingNativeFontTest, testFontMeasuretextMultipleCalls, TestSize.Level3)1895 HWTEST_F(DrawingNativeFontTest, testFontMeasuretextMultipleCalls, TestSize.Level3)
1896 {
1897 //1. OH_Drawing_FontCreate
1898 OH_Drawing_Font *fonts[10];
1899 for (int i = 0; i < 10; i++) {
1900 fonts[i] = OH_Drawing_FontCreate();
1901 }
1902 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100);
1903 OH_Drawing_Rect *bounds = OH_Drawing_RectCreate(0, 0, 100, 100);
1904 //2. Call OH_Drawing_FontMeasureText 10 times
1905 const void *text = "abc";
1906 const size_t byteLength = 3;
1907 float textWidth = 0.f;
1908 for (int i = 0; i < 10; i++) {
1909 OH_Drawing_FontMeasureText(fonts[i], text, byteLength, TEXT_ENCODING_UTF8, bounds, &textWidth);
1910 }
1911 //3. free memory
1912 for (int i = 0; i < 10; i++) {
1913 OH_Drawing_FontDestroy(fonts[i]);
1914 }
1915 OH_Drawing_RectDestroy(rect);
1916 OH_Drawing_RectDestroy(bounds);
1917 }
1918
1919
1920 /*
1921 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_1703
1922 * @tc.name: testFontMeasureSingleCharacter
1923 * @tc.desc: test for testFontMeasureSingleCharacter.
1924 * @tc.size : SmallTest
1925 * @tc.type : Function
1926 * @tc.level : Level 1
1927 */
HWTEST_F(DrawingNativeFontTest, testFontMeasureSingleCharacter, TestSize.Level1)1928 HWTEST_F(DrawingNativeFontTest, testFontMeasureSingleCharacter, TestSize.Level1)
1929 {
1930 OH_Drawing_Font* font = OH_Drawing_FontCreate();
1931 EXPECT_NE(font, nullptr);
1932 OH_Drawing_FontSetTextSize(font, 50); // 50 means font text size
1933 const char* strOne = "a";
1934 const char* strTwo = "你好";
1935 float textWidth = 0.f;
1936 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_SUCCESS;
1937 drawingErrorCode = OH_Drawing_FontMeasureSingleCharacter(nullptr, strOne, &textWidth);
1938 EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
1939 EXPECT_EQ(textWidth, 0.f);
1940 drawingErrorCode = OH_Drawing_FontMeasureSingleCharacter(font, nullptr, &textWidth);
1941 EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
1942 EXPECT_EQ(textWidth, 0.f);
1943 drawingErrorCode = OH_Drawing_FontMeasureSingleCharacter(font, strOne, nullptr);
1944 EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
1945 EXPECT_EQ(textWidth, 0.f);
1946 const char* strThree = "";
1947 drawingErrorCode = OH_Drawing_FontMeasureSingleCharacter(font, strThree, &textWidth);
1948 EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
1949 EXPECT_EQ(textWidth, 0.f);
1950 drawingErrorCode = OH_Drawing_FontMeasureSingleCharacter(font, strOne, &textWidth);
1951 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
1952 EXPECT_TRUE(textWidth > 0);
1953 drawingErrorCode = OH_Drawing_FontMeasureSingleCharacter(font, strTwo, &textWidth);
1954 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
1955 EXPECT_TRUE(textWidth > 0);
1956 OH_Drawing_FontDestroy(font);
1957 }
1958 } // namespace Drawing
1959 } // namespace Rosen
1960 } // namespace OHOS