1 /*
2  * Copyright (c) 2022-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, Hardware
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "gtest/gtest.h"
17 #include "drawing_brush.h"
18 #include "drawing_error_code.h"
19 #include "drawing_font.h"
20 
21 using namespace testing;
22 using namespace testing::ext;
23 
24 namespace OHOS {
25 namespace Rosen {
26 namespace Drawing {
27 class NativeFontTest : public testing::Test {
28 public:
29     static void SetUpTestCase();
30     static void TearDownTestCase();
31     void SetUp() override;
32     void TearDown() override;
33 };
34 
SetUpTestCase()35 void NativeFontTest::SetUpTestCase() {}
TearDownTestCase()36 void NativeFontTest::TearDownTestCase() {}
SetUp()37 void NativeFontTest::SetUp() {}
TearDown()38 void NativeFontTest::TearDown() {}
39 
40 /*
41  * @tc.name: NativeFontTest_GetMetrics001
42  * @tc.desc: test for GetMetrics.
43  * @tc.type: FUNC
44  * @tc.require: AR000GTO5R
45  */
46 HWTEST_F(NativeFontTest, NativeFontTest_GetMetrics001, TestSize.Level1)
47 {
48     OH_Drawing_Font* font = OH_Drawing_FontCreate();
49     EXPECT_NE(font, nullptr);
50     OH_Drawing_Font_Metrics cFontMetrics;
51     EXPECT_TRUE(OH_Drawing_FontGetMetrics(font, &cFontMetrics) >= 0);
52     EXPECT_TRUE(OH_Drawing_FontGetMetrics(font, nullptr) < 0);
53     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
54     EXPECT_TRUE(OH_Drawing_FontGetMetrics(nullptr, nullptr) < 0);
55     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
56     OH_Drawing_FontDestroy(font);
57 }
58 
59 /*
60  * @tc.name: NativeFontTest_IsAndSetBaselineSnap002
61  * @tc.desc: test for SetBaselineSnap and IsBaselineSnap.
62  * @tc.type: FUNC
63  * @tc.require: AR000GTO5R
64  */
65 HWTEST_F(NativeFontTest, NativeFontTest_IsAndSetBaselineSnap002, TestSize.Level1)
66 {
67     OH_Drawing_Font* font = OH_Drawing_FontCreate();
68     EXPECT_NE(font, nullptr);
69     OH_Drawing_FontSetBaselineSnap(nullptr, true);
70     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
71     EXPECT_EQ(OH_Drawing_FontIsBaselineSnap(nullptr), false);
72     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
73     OH_Drawing_FontSetBaselineSnap(nullptr, false);
74     EXPECT_EQ(OH_Drawing_FontIsBaselineSnap(nullptr), false);
75     OH_Drawing_FontSetBaselineSnap(font, true);
76     EXPECT_EQ(OH_Drawing_FontIsBaselineSnap(font), true);
77     OH_Drawing_FontSetBaselineSnap(font, false);
78     EXPECT_EQ(OH_Drawing_FontIsBaselineSnap(font), false);
79     OH_Drawing_FontDestroy(font);
80 }
81 
82 /*
83  * @tc.name: NativeFontTest_IsAndSetSubpixel003
84  * @tc.desc: test for SetSubpixel and IsSubpixel.
85  * @tc.type: FUNC
86  * @tc.require: AR000GTO5R
87  */
88 HWTEST_F(NativeFontTest, NativeFontTest_IsAndSetSubpixel003, TestSize.Level1)
89 {
90     OH_Drawing_Font* font = OH_Drawing_FontCreate();
91     EXPECT_NE(font, nullptr);
92     OH_Drawing_FontSetSubpixel(nullptr, false);
93     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
94     EXPECT_EQ(OH_Drawing_FontIsSubpixel(nullptr), false);
95     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
96     OH_Drawing_FontSetSubpixel(nullptr, true);
97     EXPECT_EQ(OH_Drawing_FontIsSubpixel(nullptr), false);
98     OH_Drawing_FontSetSubpixel(font, true);
99     EXPECT_EQ(OH_Drawing_FontIsSubpixel(font), true);
100     OH_Drawing_FontSetSubpixel(font, false);
101     EXPECT_EQ(OH_Drawing_FontIsSubpixel(font), false);
102     OH_Drawing_FontDestroy(font);
103 }
104 
105 /*
106  * @tc.name: NativeFontTest_TextToGlyphs004
107  * @tc.desc: test for TextToGlyphs.
108  * @tc.type: FUNC
109  * @tc.require: AR000GTO5R
110  */
111 HWTEST_F(NativeFontTest, NativeFontTest_TextToGlyphs004, TestSize.Level1)
112 {
113     OH_Drawing_Font* font = OH_Drawing_FontCreate();
114     OH_Drawing_FontSetTextSize(font, 100); // 100 means font text size
115     EXPECT_NE(font, nullptr);
116     const char *str = "hello world";
117     OH_Drawing_FontCountText(nullptr, str, strlen(str), OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
118     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
119     OH_Drawing_FontCountText(font, nullptr, strlen(str), OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
120     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
121     uint32_t count = 0;
122     count = OH_Drawing_FontCountText(font, str, strlen(str), OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
123     EXPECT_EQ(11, count); // 11 means str length
124 
125     uint16_t glyphs[50] = {0}; // 50 means glyphs array number
126     OH_Drawing_FontTextToGlyphs(nullptr, str, 0, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8, glyphs, 0);
127     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
128     OH_Drawing_FontTextToGlyphs(font, nullptr, 0, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8, glyphs, 0);
129     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
130     OH_Drawing_FontTextToGlyphs(font, str, strlen(str), OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8, nullptr, 0);
131     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
132     OH_Drawing_FontTextToGlyphs(font, str, strlen(str), OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8, glyphs, 0);
133     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
134     int glyphsCount = 0;
135     glyphsCount = OH_Drawing_FontTextToGlyphs(font, str, 0,
136         OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8, glyphs, 0);
137     EXPECT_EQ(0, glyphsCount);
138     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
139 
140     glyphsCount = OH_Drawing_FontTextToGlyphs(font, str, strlen(str),
141         OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8, glyphs, count);
142     EXPECT_EQ(11, glyphsCount); // 11 means glyphsCount
143 
144     float widths[50] = {0.f}; // 50 means widths array number
145     OH_Drawing_FontGetWidths(nullptr, glyphs, glyphsCount, widths);
146     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
147     OH_Drawing_FontGetWidths(font, nullptr, glyphsCount, widths);
148     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
149     OH_Drawing_FontGetWidths(font, glyphs, 0, widths);
150     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
151     OH_Drawing_FontGetWidths(font, glyphs, glyphsCount, nullptr);
152     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
153     OH_Drawing_FontGetWidths(font, glyphs, glyphsCount, widths);
154     EXPECT_EQ(58.0, widths[0]); // 58.0 means glyphs[0] width
155     OH_Drawing_FontDestroy(font);
156 }
157 
158 /*
159  * @tc.name: NativeFontTest_SetAndGetScaleX005
160  * @tc.desc: test for SetAndGetScaleX.
161  * @tc.type: FUNC
162  * @tc.require: AR000GTO5R
163  */
164 HWTEST_F(NativeFontTest, NativeFontTest_SetAndGetScaleX005, TestSize.Level1)
165 {
166     OH_Drawing_Font* font = OH_Drawing_FontCreate();
167     EXPECT_NE(font, nullptr);
168     OH_Drawing_FontSetScaleX(nullptr, 2);
169     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
170     EXPECT_TRUE(OH_Drawing_FontGetScaleX(nullptr) == -1);
171     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
172     EXPECT_TRUE(OH_Drawing_FontGetScaleX(font) == 1);
173     OH_Drawing_FontSetScaleX(font, 2);
174     EXPECT_TRUE(OH_Drawing_FontGetScaleX(font) == 2);
175     OH_Drawing_FontDestroy(font);
176 }
177 
178 /*
179  * @tc.name: NativeFontTest_GetAndSetEdging006
180  * @tc.desc: test for GetAndSetEdging.
181  * @tc.type: FUNC
182  * @tc.require: AR000GTO5R
183  */
184 HWTEST_F(NativeFontTest, NativeFontTest_GetAndSetEdging006, TestSize.Level1)
185 {
186     OH_Drawing_Font* font = OH_Drawing_FontCreate();
187     EXPECT_NE(font, nullptr);
188     EXPECT_EQ(OH_Drawing_FontGetEdging(font), OH_Drawing_FontEdging::FONT_EDGING_ANTI_ALIAS);
189     EXPECT_EQ(OH_Drawing_FontGetEdging(nullptr), OH_Drawing_FontEdging::FONT_EDGING_ALIAS);
190     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
191     OH_Drawing_FontSetEdging(nullptr, OH_Drawing_FontEdging::FONT_EDGING_ALIAS);
192     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
193     EXPECT_EQ(OH_Drawing_FontGetEdging(font), OH_Drawing_FontEdging::FONT_EDGING_ANTI_ALIAS);
194     OH_Drawing_FontSetEdging(font, OH_Drawing_FontEdging::FONT_EDGING_ALIAS);
195     EXPECT_EQ(OH_Drawing_FontGetEdging(font), OH_Drawing_FontEdging::FONT_EDGING_ALIAS);
196     OH_Drawing_FontSetEdging(font, OH_Drawing_FontEdging::FONT_EDGING_ANTI_ALIAS);
197     EXPECT_EQ(OH_Drawing_FontGetEdging(font), OH_Drawing_FontEdging::FONT_EDGING_ANTI_ALIAS);
198     OH_Drawing_FontSetEdging(font, OH_Drawing_FontEdging::FONT_EDGING_SUBPIXEL_ANTI_ALIAS);
199     EXPECT_EQ(OH_Drawing_FontGetEdging(font), OH_Drawing_FontEdging::FONT_EDGING_SUBPIXEL_ANTI_ALIAS);
200     OH_Drawing_FontDestroy(font);
201 }
202 
203 /*
204  * @tc.name: NativeFontTest_GetAndSetForceAutoHinting007
205  * @tc.desc: test for GetAndSetForceAutoHinting.
206  * @tc.type: FUNC
207  * @tc.require: AR000GTO5R
208  */
209 HWTEST_F(NativeFontTest, NativeFontTest_GetAndSetForceAutoHinting007, TestSize.Level1)
210 {
211     OH_Drawing_Font* font = OH_Drawing_FontCreate();
212     EXPECT_NE(font, nullptr);
213     EXPECT_EQ(OH_Drawing_FontIsForceAutoHinting(nullptr), false);
214     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
215     OH_Drawing_FontSetForceAutoHinting(nullptr, true);
216     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
217     EXPECT_EQ(OH_Drawing_FontIsForceAutoHinting(font), false);
218     OH_Drawing_FontSetForceAutoHinting(font, true);
219     EXPECT_EQ(OH_Drawing_FontIsForceAutoHinting(font), true);
220     OH_Drawing_FontSetForceAutoHinting(font, false);
221     EXPECT_EQ(OH_Drawing_FontIsForceAutoHinting(font), false);
222     OH_Drawing_FontDestroy(font);
223 }
224 
225 /*
226  * @tc.name: NativeFontTest_GetAndSetHinting008
227  * @tc.desc: test for GetHinting and SetHinting.
228  * @tc.type: FUNC
229  * @tc.require: AR000GTO5R
230  */
231 HWTEST_F(NativeFontTest, NativeFontTest_GetAndSetHinting008, TestSize.Level1)
232 {
233     OH_Drawing_Font* font = OH_Drawing_FontCreate();
234     EXPECT_NE(font, nullptr);
235     EXPECT_TRUE(OH_Drawing_FontGetHinting(nullptr) == OH_Drawing_FontHinting::FONT_HINTING_NONE);
236     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
237     OH_Drawing_FontSetHinting(nullptr, OH_Drawing_FontHinting::FONT_HINTING_NONE);
238     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
239     OH_Drawing_FontSetHinting(font, OH_Drawing_FontHinting::FONT_HINTING_NONE);
240     EXPECT_TRUE(OH_Drawing_FontGetHinting(font) == OH_Drawing_FontHinting::FONT_HINTING_NONE);
241     OH_Drawing_FontSetHinting(font, OH_Drawing_FontHinting::FONT_HINTING_SLIGHT);
242     EXPECT_TRUE(OH_Drawing_FontGetHinting(font) == OH_Drawing_FontHinting::FONT_HINTING_SLIGHT);
243     OH_Drawing_FontSetHinting(font, OH_Drawing_FontHinting::FONT_HINTING_SLIGHT);
244     EXPECT_TRUE(OH_Drawing_FontGetHinting(font) == OH_Drawing_FontHinting::FONT_HINTING_SLIGHT);
245     OH_Drawing_FontDestroy(font);
246 }
247 
248 /*
249  * @tc.name: NativeFontTest_GetAndSetEmbeddedBitmaps009
250  * @tc.desc: test for GetEmbeddedBitmaps and SetEmbeddedBitmaps.
251  * @tc.type: FUNC
252  * @tc.require: AR000GTO5R
253  */
254 HWTEST_F(NativeFontTest, NativeFontTest_GetAndSetEmbeddedBitmaps009, TestSize.Level1)
255 {
256     OH_Drawing_Font* font = OH_Drawing_FontCreate();
257     EXPECT_NE(font, nullptr);
258     EXPECT_TRUE(OH_Drawing_FontIsEmbeddedBitmaps(nullptr) == false);
259     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
260     OH_Drawing_FontSetEmbeddedBitmaps(nullptr, true);
261     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
262     OH_Drawing_FontSetEmbeddedBitmaps(font, true);
263     EXPECT_TRUE(OH_Drawing_FontIsEmbeddedBitmaps(font) == true);
264     OH_Drawing_FontSetEmbeddedBitmaps(font, false);
265     EXPECT_TRUE(OH_Drawing_FontIsEmbeddedBitmaps(font) == false);
266     OH_Drawing_FontDestroy(font);
267 }
268 
269 /*
270  * @tc.name: NativeFontTest_GetTextSize010
271  * @tc.desc: test for GetTextSize.
272  * @tc.type: FUNC
273  * @tc.require: AR000GTO5R
274  */
275 HWTEST_F(NativeFontTest, NativeFontTest_GetTextSize010, TestSize.Level1)
276 {
277     OH_Drawing_Font* font = OH_Drawing_FontCreate();
278     EXPECT_NE(font, nullptr);
279     OH_Drawing_FontSetTextSize(nullptr, 100);
280     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
281     OH_Drawing_FontGetTextSize(nullptr);
282     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
283     OH_Drawing_FontSetTextSize(font, 100);
284     float size = OH_Drawing_FontGetTextSize(font);
285     EXPECT_EQ(size, 100);
286     OH_Drawing_FontDestroy(font);
287 }
288 
289 /*
290  * @tc.name: NativeFontTest_GetTextSkewX011
291  * @tc.desc: test for GetTextSkewX.
292  * @tc.type: FUNC
293  * @tc.require: AR000GTO5R
294  */
295 HWTEST_F(NativeFontTest, NativeFontTest_GetTextSkewX011, TestSize.Level1)
296 {
297     OH_Drawing_Font* font = OH_Drawing_FontCreate();
298     EXPECT_NE(font, nullptr);
299     OH_Drawing_FontSetTextSkewX(nullptr, 10);
300     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
301     OH_Drawing_FontGetTextSkewX(nullptr);
302     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
303     OH_Drawing_FontSetTextSkewX(font, 10);
304     float size = OH_Drawing_FontGetTextSkewX(font);
305     EXPECT_EQ(size, 10);
306     OH_Drawing_FontDestroy(font);
307 }
308 
309 /*
310  * @tc.name: NativeFontTest_IsLinearText012
311  * @tc.desc: test for IsLinearText.
312  * @tc.type: FUNC
313  * @tc.require: AR000GTO5R
314  */
315 HWTEST_F(NativeFontTest, NativeFontTest_IsLinearText012, TestSize.Level1)
316 {
317     OH_Drawing_Font* font = OH_Drawing_FontCreate();
318     EXPECT_NE(font, nullptr);
319     OH_Drawing_FontSetLinearText(nullptr, true);
320     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
321     OH_Drawing_FontIsLinearText(nullptr);
322     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
323     bool ret = OH_Drawing_FontIsLinearText(font);
324     EXPECT_EQ(ret, false);
325     OH_Drawing_FontSetLinearText(font, true);
326     ret = OH_Drawing_FontIsLinearText(font);
327     EXPECT_EQ(ret, true);
328     OH_Drawing_FontDestroy(font);
329 }
330 
331 /*
332  * @tc.name: NativeFontTest_SetFakeBoldText013
333  * @tc.desc: test for SetFakeBoldText.
334  * @tc.type: FUNC
335  * @tc.require: AR000GTO5R
336  */
337 HWTEST_F(NativeFontTest, NativeFontTest_SetFakeBoldText013, TestSize.Level1)
338 {
339     OH_Drawing_Font* font = OH_Drawing_FontCreate();
340     EXPECT_NE(font, nullptr);
341     OH_Drawing_FontSetFakeBoldText(nullptr, true);
342     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
343     OH_Drawing_FontIsFakeBoldText(nullptr);
344     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
345     bool ret = OH_Drawing_FontIsFakeBoldText(font);
346     EXPECT_EQ(ret, false);
347     OH_Drawing_FontSetFakeBoldText(font, true);
348     ret = OH_Drawing_FontIsFakeBoldText(font);
349     EXPECT_EQ(ret, true);
350     OH_Drawing_FontDestroy(font);
351 }
352 
353 /*
354  * @tc.name: NativeFontTest_FontMeasureText014
355  * @tc.desc: test for FontMeasureText.
356  * @tc.type: FUNC
357  * @tc.require: AR000GTO5R
358  */
359 HWTEST_F(NativeFontTest, NativeFontTest_FontMeasureText014, TestSize.Level1)
360 {
361     OH_Drawing_Font* font = OH_Drawing_FontCreate();
362     EXPECT_NE(font, nullptr);
363     OH_Drawing_FontSetTextSize(font, 50);
364     const char* str = "hello world";
365     float textWidth = 0.f;
366     OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_SUCCESS;
367     drawingErrorCode = OH_Drawing_FontMeasureText(nullptr, str, strlen(str),
368                                                   OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8, nullptr, &textWidth);
369     EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
370     EXPECT_EQ(textWidth, 0.f);
371     drawingErrorCode = OH_Drawing_FontMeasureText(font, str, 0, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8,
372                                                   nullptr, &textWidth);
373     EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
374     EXPECT_EQ(textWidth, 0.f);
375     drawingErrorCode = OH_Drawing_FontMeasureText(font, str, strlen(str), OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8,
376                                                   nullptr, &textWidth);
377     EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
378     EXPECT_EQ(textWidth, 254.0); // 254.0 is textWidth
379 
380     OH_Drawing_FontDestroy(font);
381 }
382 
383 /*
384  * @tc.name: NativeFontTest_FontMeasureSingleCharacter015
385  * @tc.desc: test for OH_Drawing_FontMeasureSingleCharacter.
386  * @tc.type: FUNC
387  * @tc.require: AR000GTO5R
388  */
389 HWTEST_F(NativeFontTest, NativeFontTest_FontMeasureSingleCharacter015, TestSize.Level1)
390 {
391     OH_Drawing_Font* font = OH_Drawing_FontCreate();
392     EXPECT_NE(font, nullptr);
393     OH_Drawing_FontSetTextSize(font, 50); // 50 means font text size
394     const char* strOne = "a";
395     const char* strTwo = "你好";
396     float textWidth = 0.f;
397     OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_SUCCESS;
398     drawingErrorCode = OH_Drawing_FontMeasureSingleCharacter(nullptr, strOne, &textWidth);
399     EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
400     EXPECT_EQ(textWidth, 0.f);
401     drawingErrorCode = OH_Drawing_FontMeasureSingleCharacter(font, nullptr, &textWidth);
402     EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
403     EXPECT_EQ(textWidth, 0.f);
404     drawingErrorCode = OH_Drawing_FontMeasureSingleCharacter(font, strOne, nullptr);
405     EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
406     EXPECT_EQ(textWidth, 0.f);
407     const char* strThree = "";
408     drawingErrorCode = OH_Drawing_FontMeasureSingleCharacter(font, strThree, &textWidth);
409     EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
410     EXPECT_EQ(textWidth, 0.f);
411     drawingErrorCode = OH_Drawing_FontMeasureSingleCharacter(font, strOne, &textWidth);
412     EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
413     EXPECT_TRUE(textWidth > 0);
414     drawingErrorCode = OH_Drawing_FontMeasureSingleCharacter(font, strTwo, &textWidth);
415     EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
416     EXPECT_TRUE(textWidth > 0);
417     OH_Drawing_FontDestroy(font);
418 }
419 } // namespace Drawing
420 } // namespace Rosen
421 } // namespace OHOS