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_font.h"
19 #include "drawing_point.h"
20 #include "drawing_text_typography.h"
21 #include "drawing_font_collection.h"
22
23 using namespace testing;
24 using namespace testing::ext;
25
26 namespace OHOS {
27 namespace Rosen {
28 namespace Drawing {
29 class NativeFontTest : public testing::Test {
30 public:
31 static void SetUpTestCase();
32 static void TearDownTestCase();
33 void SetUp() override;
34 void TearDown() override;
35 };
36
SetUpTestCase()37 void NativeFontTest::SetUpTestCase() {}
TearDownTestCase()38 void NativeFontTest::TearDownTestCase() {}
SetUp()39 void NativeFontTest::SetUp() {}
TearDown()40 void NativeFontTest::TearDown() {}
41
42 /*
43 * @tc.name: NativeFontTest_GetMetrics001
44 * @tc.desc: test for GetMetrics.
45 * @tc.size : MediumTest
46 * @tc.type : Function
47 * @tc.level : Level 1
48 */
HWTEST_F(NativeFontTest, NativeFontTest_GetMetrics001, TestSize.Level1)49 HWTEST_F(NativeFontTest, NativeFontTest_GetMetrics001, TestSize.Level1)
50 {
51 OH_Drawing_Font* font = OH_Drawing_FontCreate();
52 EXPECT_NE(font, nullptr);
53 OH_Drawing_Font_Metrics cFontMetrics;
54 EXPECT_TRUE(OH_Drawing_FontGetMetrics(font, &cFontMetrics) >= 0);
55 EXPECT_TRUE(OH_Drawing_FontGetMetrics(font, nullptr) < 0);
56 EXPECT_TRUE(OH_Drawing_FontGetMetrics(nullptr, nullptr) < 0);
57 OH_Drawing_FontDestroy(font);
58 }
59
60 /*
61 * @tc.name: NativeFontTest_IsAndSetBaselineSnap002
62 * @tc.desc: test for SetBaselineSnap and IsBaselineSnap.
63 * @tc.size : MediumTest
64 * @tc.type : Function
65 * @tc.level : Level 1
66 */
HWTEST_F(NativeFontTest, NativeFontTest_IsAndSetBaselineSnap002, TestSize.Level1)67 HWTEST_F(NativeFontTest, NativeFontTest_IsAndSetBaselineSnap002, TestSize.Level1)
68 {
69 OH_Drawing_Font* font = OH_Drawing_FontCreate();
70 EXPECT_NE(font, nullptr);
71 OH_Drawing_FontSetBaselineSnap(nullptr, true);
72 EXPECT_EQ(OH_Drawing_FontIsBaselineSnap(nullptr), false);
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.size : MediumTest
86 * @tc.type : Function
87 * @tc.level : Level 1
88 */
HWTEST_F(NativeFontTest, NativeFontTest_IsAndSetSubpixel003, TestSize.Level1)89 HWTEST_F(NativeFontTest, NativeFontTest_IsAndSetSubpixel003, TestSize.Level1)
90 {
91 OH_Drawing_Font* font = OH_Drawing_FontCreate();
92 EXPECT_NE(font, nullptr);
93 OH_Drawing_FontSetSubpixel(nullptr, false);
94 EXPECT_EQ(OH_Drawing_FontIsSubpixel(nullptr), false);
95 OH_Drawing_FontSetSubpixel(nullptr, true);
96 EXPECT_EQ(OH_Drawing_FontIsSubpixel(nullptr), false);
97 OH_Drawing_FontSetSubpixel(font, true);
98 EXPECT_EQ(OH_Drawing_FontIsSubpixel(font), true);
99 OH_Drawing_FontSetSubpixel(font, false);
100 EXPECT_EQ(OH_Drawing_FontIsSubpixel(font), false);
101 OH_Drawing_FontDestroy(font);
102 }
103
104 /*
105 * @tc.name: NativeFontTest_TextToGlyphs004
106 * @tc.desc: test for TextToGlyphs.
107 * @tc.size : MediumTest
108 * @tc.type : Function
109 * @tc.level : Level 1
110 */
HWTEST_F(NativeFontTest, NativeFontTest_TextToGlyphs004, TestSize.Level1)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 uint32_t count = 0;
118 count = OH_Drawing_FontCountText(font, str, strlen(str), OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
119 EXPECT_EQ(11, count); // 11 means str length
120
121 uint16_t glyphs[50] = {0}; // 50 means glyphs array number
122 int glyphsCount = 0;
123 glyphsCount = OH_Drawing_FontTextToGlyphs(font, str, 0,
124 OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8, glyphs, 0);
125 EXPECT_EQ(0, glyphsCount);
126
127 glyphsCount = OH_Drawing_FontTextToGlyphs(font, str, strlen(str),
128 OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8, glyphs, count);
129 EXPECT_EQ(11, glyphsCount); // 11 means glyphsCount
130
131 float widths[50] = {0.f}; // 50 means widths array number
132 OH_Drawing_FontGetWidths(font, glyphs, glyphsCount, widths);
133 EXPECT_EQ(58.0, widths[0]); // 58.0 means glyphs[0] width
134 OH_Drawing_FontDestroy(font);
135 }
136
137 /*
138 * @tc.name: NativeFontTest_SetAndGetScaleX005
139 * @tc.desc: test for SetAndGetScaleX.
140 * @tc.size : MediumTest
141 * @tc.type : Function
142 * @tc.level : Level 1
143 */
HWTEST_F(NativeFontTest, NativeFontTest_SetAndGetScaleX005, TestSize.Level1)144 HWTEST_F(NativeFontTest, NativeFontTest_SetAndGetScaleX005, TestSize.Level1)
145 {
146 OH_Drawing_Font* font = OH_Drawing_FontCreate();
147 EXPECT_NE(font, nullptr);
148 OH_Drawing_FontSetScaleX(nullptr, 2);
149 EXPECT_TRUE(OH_Drawing_FontGetScaleX(nullptr) == -1);
150 EXPECT_TRUE(OH_Drawing_FontGetScaleX(font) == 1);
151 OH_Drawing_FontSetScaleX(font, 2);
152 EXPECT_TRUE(OH_Drawing_FontGetScaleX(font) == 2);
153 OH_Drawing_FontDestroy(font);
154 }
155
156 /*
157 * @tc.name: NativeFontTest_GetAndSetEdging006
158 * @tc.desc: test for GetAndSetEdging.
159 * @tc.size : MediumTest
160 * @tc.type : Function
161 * @tc.level : Level 1
162 */
HWTEST_F(NativeFontTest, NativeFontTest_GetAndSetEdging006, TestSize.Level1)163 HWTEST_F(NativeFontTest, NativeFontTest_GetAndSetEdging006, TestSize.Level1)
164 {
165 OH_Drawing_Font* font = OH_Drawing_FontCreate();
166 EXPECT_NE(font, nullptr);
167 EXPECT_EQ(OH_Drawing_FontGetEdging(font), OH_Drawing_FontEdging::FONT_EDGING_ANTI_ALIAS);
168 EXPECT_EQ(OH_Drawing_FontGetEdging(nullptr), OH_Drawing_FontEdging::FONT_EDGING_ALIAS);
169 OH_Drawing_FontSetEdging(nullptr, OH_Drawing_FontEdging::FONT_EDGING_ALIAS);
170 EXPECT_EQ(OH_Drawing_FontGetEdging(font), OH_Drawing_FontEdging::FONT_EDGING_ANTI_ALIAS);
171 OH_Drawing_FontSetEdging(font, OH_Drawing_FontEdging::FONT_EDGING_ALIAS);
172 EXPECT_EQ(OH_Drawing_FontGetEdging(font), OH_Drawing_FontEdging::FONT_EDGING_ALIAS);
173 OH_Drawing_FontSetEdging(font, OH_Drawing_FontEdging::FONT_EDGING_ANTI_ALIAS);
174 EXPECT_EQ(OH_Drawing_FontGetEdging(font), OH_Drawing_FontEdging::FONT_EDGING_ANTI_ALIAS);
175 OH_Drawing_FontSetEdging(font, OH_Drawing_FontEdging::FONT_EDGING_SUBPIXEL_ANTI_ALIAS);
176 EXPECT_EQ(OH_Drawing_FontGetEdging(font), OH_Drawing_FontEdging::FONT_EDGING_SUBPIXEL_ANTI_ALIAS);
177 OH_Drawing_FontDestroy(font);
178 }
179
180 /*
181 * @tc.name: NativeFontTest_GetAndSetForceAutoHinting007
182 * @tc.desc: test for GetAndSetForceAutoHinting.
183 * @tc.size : MediumTest
184 * @tc.type : Function
185 * @tc.level : Level 1
186 */
HWTEST_F(NativeFontTest, NativeFontTest_GetAndSetForceAutoHinting007, TestSize.Level1)187 HWTEST_F(NativeFontTest, NativeFontTest_GetAndSetForceAutoHinting007, TestSize.Level1)
188 {
189 OH_Drawing_Font* font = OH_Drawing_FontCreate();
190 EXPECT_NE(font, nullptr);
191 EXPECT_EQ(OH_Drawing_FontIsForceAutoHinting(nullptr), false);
192 OH_Drawing_FontSetForceAutoHinting(nullptr, true);
193 EXPECT_EQ(OH_Drawing_FontIsForceAutoHinting(font), false);
194 OH_Drawing_FontSetForceAutoHinting(font, true);
195 EXPECT_EQ(OH_Drawing_FontIsForceAutoHinting(font), true);
196 OH_Drawing_FontSetForceAutoHinting(font, false);
197 EXPECT_EQ(OH_Drawing_FontIsForceAutoHinting(font), false);
198 OH_Drawing_FontDestroy(font);
199 }
200
201 /*
202 * @tc.name: NativeFontTest_GetAndSetHinting008
203 * @tc.desc: test for GetHinting and SetHinting.
204 * @tc.size : MediumTest
205 * @tc.type : Function
206 * @tc.level : Level 1
207 */
HWTEST_F(NativeFontTest, NativeFontTest_GetAndSetHinting008, TestSize.Level1)208 HWTEST_F(NativeFontTest, NativeFontTest_GetAndSetHinting008, TestSize.Level1)
209 {
210 OH_Drawing_Font* font = OH_Drawing_FontCreate();
211 EXPECT_NE(font, nullptr);
212 EXPECT_TRUE(OH_Drawing_FontGetHinting(nullptr) == OH_Drawing_FontHinting::FONT_HINTING_NONE);
213 OH_Drawing_FontSetHinting(font, OH_Drawing_FontHinting::FONT_HINTING_NONE);
214 EXPECT_TRUE(OH_Drawing_FontGetHinting(font) == OH_Drawing_FontHinting::FONT_HINTING_NONE);
215 OH_Drawing_FontSetHinting(font, OH_Drawing_FontHinting::FONT_HINTING_SLIGHT);
216 EXPECT_TRUE(OH_Drawing_FontGetHinting(font) == OH_Drawing_FontHinting::FONT_HINTING_SLIGHT);
217 OH_Drawing_FontSetHinting(font, OH_Drawing_FontHinting::FONT_HINTING_SLIGHT);
218 EXPECT_TRUE(OH_Drawing_FontGetHinting(font) == OH_Drawing_FontHinting::FONT_HINTING_SLIGHT);
219 OH_Drawing_FontDestroy(font);
220 }
221
222 /*
223 * @tc.name: NativeFontTest_GetAndSetEmbeddedBitmaps009
224 * @tc.desc: test for GetEmbeddedBitmaps and SetEmbeddedBitmaps.
225 * @tc.size : MediumTest
226 * @tc.type : Function
227 * @tc.level : Level 1
228 */
HWTEST_F(NativeFontTest, NativeFontTest_GetAndSetEmbeddedBitmaps009, TestSize.Level1)229 HWTEST_F(NativeFontTest, NativeFontTest_GetAndSetEmbeddedBitmaps009, TestSize.Level1)
230 {
231 OH_Drawing_Font* font = OH_Drawing_FontCreate();
232 EXPECT_NE(font, nullptr);
233 EXPECT_TRUE(OH_Drawing_FontIsEmbeddedBitmaps(nullptr) == false);
234 OH_Drawing_FontSetEmbeddedBitmaps(font, true);
235 EXPECT_TRUE(OH_Drawing_FontIsEmbeddedBitmaps(font) == true);
236 OH_Drawing_FontSetEmbeddedBitmaps(font, false);
237 EXPECT_TRUE(OH_Drawing_FontIsEmbeddedBitmaps(font) == false);
238 OH_Drawing_FontDestroy(font);
239 }
240
241 /*
242 * @tc.name: NativeFontTest_GetTextSize010
243 * @tc.desc: test for GetTextSize.
244 * @tc.size : MediumTest
245 * @tc.type : Function
246 * @tc.level : Level 1
247 */
HWTEST_F(NativeFontTest, NativeFontTest_GetTextSize010, TestSize.Level1)248 HWTEST_F(NativeFontTest, NativeFontTest_GetTextSize010, TestSize.Level1)
249 {
250 OH_Drawing_Font* font = OH_Drawing_FontCreate();
251 EXPECT_NE(font, nullptr);
252 OH_Drawing_FontSetTextSize(font, 100);
253 float size = OH_Drawing_FontGetTextSize(font);
254 EXPECT_EQ(size, 100);
255 OH_Drawing_FontDestroy(font);
256 }
257
258 /*
259 * @tc.name: NativeFontTest_GetTextSkewX011
260 * @tc.desc: test for GetTextSkewX.
261 * @tc.size : MediumTest
262 * @tc.type : Function
263 * @tc.level : Level 1
264 */
HWTEST_F(NativeFontTest, NativeFontTest_GetTextSkewX011, TestSize.Level1)265 HWTEST_F(NativeFontTest, NativeFontTest_GetTextSkewX011, TestSize.Level1)
266 {
267 OH_Drawing_Font* font = OH_Drawing_FontCreate();
268 EXPECT_NE(font, nullptr);
269 OH_Drawing_FontSetTextSkewX(font, 10);
270 float size = OH_Drawing_FontGetTextSkewX(font);
271 EXPECT_EQ(size, 10);
272 OH_Drawing_FontDestroy(font);
273 }
274
275 /*
276 * @tc.name: NativeFontTest_IsLinearText012
277 * @tc.desc: test for IsLinearText.
278 * @tc.size : MediumTest
279 * @tc.type : Function
280 * @tc.level : Level 1
281 */
HWTEST_F(NativeFontTest, NativeFontTest_IsLinearText012, TestSize.Level1)282 HWTEST_F(NativeFontTest, NativeFontTest_IsLinearText012, TestSize.Level1)
283 {
284 OH_Drawing_Font* font = OH_Drawing_FontCreate();
285 EXPECT_NE(font, nullptr);
286 bool ret = OH_Drawing_FontIsLinearText(font);
287 EXPECT_EQ(ret, false);
288 OH_Drawing_FontSetLinearText(font, true);
289 ret = OH_Drawing_FontIsLinearText(font);
290 EXPECT_EQ(ret, true);
291 OH_Drawing_FontDestroy(font);
292 }
293
294 /*
295 * @tc.name: NativeFontTest_SetFakeBoldText013
296 * @tc.desc: test for SetFakeBoldText.
297 * @tc.size : MediumTest
298 * @tc.type : Function
299 * @tc.level : Level 1
300 */
HWTEST_F(NativeFontTest, NativeFontTest_SetFakeBoldText013, TestSize.Level1)301 HWTEST_F(NativeFontTest, NativeFontTest_SetFakeBoldText013, TestSize.Level1)
302 {
303 OH_Drawing_Font* font = OH_Drawing_FontCreate();
304 EXPECT_NE(font, nullptr);
305 bool ret = OH_Drawing_FontIsFakeBoldText(font);
306 EXPECT_EQ(ret, false);
307 OH_Drawing_FontSetFakeBoldText(font, true);
308 ret = OH_Drawing_FontIsFakeBoldText(font);
309 EXPECT_EQ(ret, true);
310 OH_Drawing_FontDestroy(font);
311 }
312
313 /*
314 * @tc.name: NativeFontTest_FontMeasureText014
315 * @tc.desc: test for FontMeasureText.
316 * @tc.type: FUNC
317 * @tc.require: AR000GTO5R
318 */
HWTEST_F(NativeFontTest, NativeFontTest_FontMeasureText014, TestSize.Level1)319 HWTEST_F(NativeFontTest, NativeFontTest_FontMeasureText014, TestSize.Level1)
320 {
321 OH_Drawing_Font* font = OH_Drawing_FontCreate();
322 EXPECT_NE(font, nullptr);
323 OH_Drawing_FontSetTextSize(font, 50);
324 const char* str = "hello world";
325 float textWidth = 0.f;
326 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_SUCCESS;
327 drawingErrorCode = OH_Drawing_FontMeasureText(nullptr, str, strlen(str),
328 OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8, nullptr, &textWidth);
329 EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
330 EXPECT_EQ(textWidth, 0.f);
331 drawingErrorCode = OH_Drawing_FontMeasureText(font, str, 0, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8,
332 nullptr, &textWidth);
333 EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
334 EXPECT_EQ(textWidth, 0.f);
335 drawingErrorCode = OH_Drawing_FontMeasureText(font, str, strlen(str), OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8,
336 nullptr, &textWidth);
337 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
338 EXPECT_EQ(textWidth, 254.0); // 254.0 is textWidth
339
340 OH_Drawing_FontDestroy(font);
341 }
342
343
344 /*
345 * @tc.name: NativeFontTest_FontMeasureText015
346 * @tc.desc: test for the textbox.
347 * @tc.type: FUNC
348 */
HWTEST_F(NativeFontTest, NativeFontTest_FontMeasureText015, TestSize.Level1)349 HWTEST_F(NativeFontTest, NativeFontTest_FontMeasureText015, TestSize.Level1)
350 {
351 OH_Drawing_TypographyStyle* typoStyle = OH_Drawing_CreateTypographyStyle();
352 OH_Drawing_TypographyCreate* handler = OH_Drawing_CreateTypographyHandler(typoStyle,
353 OH_Drawing_CreateFontCollection());
354 OH_Drawing_Typography* typography = OH_Drawing_CreateTypography(handler);
355 OH_Drawing_TextBox* textBox = OH_Drawing_TypographyGetRectsForPlaceholders(typography);
356 EXPECT_EQ(textBox == nullptr, false);
357 OH_Drawing_DestroyTypographyStyle(typoStyle);
358 OH_Drawing_DestroyTypographyHandler(handler);
359 OH_Drawing_DestroyTypography(typography);
360 OH_Drawing_TypographyDestroyTextBox(textBox);
361 }
362
363 /*
364 * @tc.name: NativeFontTest_FontMeasureText016
365 * @tc.desc: test for the textshadow.
366 * @tc.type: FUNC
367 */
HWTEST_F(NativeFontTest, NativeFontTest_FontMeasureText016, TestSize.Level1)368 HWTEST_F(NativeFontTest, NativeFontTest_FontMeasureText016, TestSize.Level1)
369 {
370 OH_Drawing_TextShadow* shadow = OH_Drawing_CreateTextShadow();
371 uint32_t color = 0;
372 OH_Drawing_Point* offset = OH_Drawing_PointCreate(0, 0);
373 double blurRadius = 0.0;
374 OH_Drawing_SetTextShadow(shadow, color, offset, blurRadius);
375 OH_Drawing_DestroyTextShadow(shadow);
376 OH_Drawing_PointDestroy(offset);
377 EXPECT_TRUE(shadow != nullptr);
378 }
379
380 /*
381 * @tc.name: NativeFontTest_FontMeasureText017
382 * @tc.desc: test for the fontVariation.
383 * @tc.type: FUNC
384 */
HWTEST_F(NativeFontTest, NativeFontTest_FontMeasureText017, TestSize.Level1)385 HWTEST_F(NativeFontTest, NativeFontTest_FontMeasureText017, TestSize.Level1)
386 {
387 OH_Drawing_TextStyle* txtStyle = OH_Drawing_CreateTextStyle();
388 EXPECT_EQ(txtStyle == nullptr, false);
389 const char* key = "宋体";
390 int value = 1;
391 OH_Drawing_TextStyleAddFontFeature(txtStyle, key, value);
392 OH_Drawing_TextStyleAddFontVariation(txtStyle, key, value);
393 EXPECT_EQ(OH_Drawing_TextStyleGetFontFeatureSize(txtStyle), 1);
394 OH_Drawing_FontCollection* fontCollection = OH_Drawing_CreateFontCollection();
395 OH_Drawing_ClearFontCaches(fontCollection);
396 EXPECT_EQ(fontCollection == nullptr, false);
397 OH_Drawing_DestroyFontCollection(fontCollection);
398 OH_Drawing_DestroyTextStyle(txtStyle);
399 }
400
401 } // namespace Drawing
402 } // namespace Rosen
403 } // namespace OHOS