1/*
2 * Copyright (c) 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_font_mgr.h"
18#include "drawing_text_typography.h"
19#include "drawing_typeface.h"
20
21using namespace testing;
22using namespace testing::ext;
23
24namespace OHOS {
25namespace Rosen {
26namespace Drawing {
27class OH_Drawing_FontMgrTest : public testing::Test {
28};
29
30/*
31 * @tc.name: OH_Drawing_FontMgrTest001
32 * @tc.desc: test for creating and destroying font manager.
33 * @tc.type: FUNC
34 */
35HWTEST_F(OH_Drawing_FontMgrTest, OH_Drawing_FontMgrTest001, TestSize.Level1)
36{
37    OH_Drawing_FontMgr *mgr = OH_Drawing_FontMgrCreate();
38    EXPECT_NE(mgr, nullptr);
39    OH_Drawing_FontMgrDestroy(mgr);
40}
41
42/*
43 * @tc.name: OH_Drawing_FontMgrTest002
44 * @tc.desc: test for getting family name.
45 * @tc.type: FUNC
46 */
47HWTEST_F(OH_Drawing_FontMgrTest, OH_Drawing_FontMgrTest002, TestSize.Level1)
48{
49    OH_Drawing_FontMgr *mgr = OH_Drawing_FontMgrCreate();
50    EXPECT_NE(mgr, nullptr);
51    int count = OH_Drawing_FontMgrGetFamilyCount(mgr);
52    EXPECT_TRUE(count > 0);
53
54    char *familyName = OH_Drawing_FontMgrGetFamilyName(mgr, 0);
55    OH_Drawing_FontMgrDestroyFamilyName(familyName);
56
57    OH_Drawing_FontMgrDestroy(mgr);
58}
59
60/*
61 * @tc.name: OH_Drawing_FontMgrTest003
62 * @tc.desc: test for creating and destroying font style set by font mannager.
63 * @tc.type: FUNC
64 */
65HWTEST_F(OH_Drawing_FontMgrTest, OH_Drawing_FontMgrTest003, TestSize.Level1)
66{
67    OH_Drawing_FontMgr *mgr = OH_Drawing_FontMgrCreate();
68    EXPECT_NE(mgr, nullptr);
69
70    OH_Drawing_FontStyleSet* fontStyleSet = OH_Drawing_FontMgrCreateFontStyleSet(mgr, 0);
71    EXPECT_NE(fontStyleSet, nullptr);
72    OH_Drawing_FontMgrDestroyFontStyleSet(fontStyleSet);
73
74    OH_Drawing_FontMgrDestroy(mgr);
75}
76
77/*
78 * @tc.name: OH_Drawing_FontMgrTest004
79 * @tc.desc: test for matching font family by family name.
80 * @tc.type: FUNC
81 */
82HWTEST_F(OH_Drawing_FontMgrTest, OH_Drawing_FontMgrTest004, TestSize.Level1)
83{
84    OH_Drawing_FontMgr *mgr = OH_Drawing_FontMgrCreate();
85    EXPECT_NE(mgr, nullptr);
86    const char* matchFamilyName = "HarmonyOS-Sans";
87    OH_Drawing_FontStyleSet* fontStyleSet = OH_Drawing_FontMgrMatchFamily(mgr, matchFamilyName);
88    EXPECT_NE(fontStyleSet, nullptr);
89    OH_Drawing_FontMgrDestroyFontStyleSet(fontStyleSet);
90
91    OH_Drawing_FontMgrDestroy(mgr);
92}
93
94
95/*
96 * @tc.name: OH_Drawing_FontMgrTest005
97 * @tc.desc: test for matching font typeface by family name and font style.
98 * @tc.type: FUNC
99 */
100HWTEST_F(OH_Drawing_FontMgrTest, OH_Drawing_FontMgrTest005, TestSize.Level1)
101{
102    OH_Drawing_FontMgr *mgr = OH_Drawing_FontMgrCreate();
103    EXPECT_NE(mgr, nullptr);
104    const char* matchFamilyName = "HarmonyOS-Sans";
105    OH_Drawing_FontStyleStruct normalStyle;
106    normalStyle.weight = FONT_WEIGHT_400;
107    normalStyle.width = FONT_WIDTH_NORMAL;
108    normalStyle.slant = FONT_STYLE_NORMAL;
109    OH_Drawing_Typeface *typeface = OH_Drawing_FontMgrMatchFamilyStyle(mgr, matchFamilyName, normalStyle);
110    EXPECT_NE(typeface, nullptr);
111    OH_Drawing_TypefaceDestroy(typeface);
112
113    OH_Drawing_FontMgrDestroy(mgr);
114}
115
116/*
117 * @tc.name: OH_Drawing_FontMgrTest006
118 * @tc.desc: test for matching font typeface by family name, font style and specific character.
119 * @tc.type: FUNC
120 */
121HWTEST_F(OH_Drawing_FontMgrTest, OH_Drawing_FontMgrTest006, TestSize.Level1)
122{
123    OH_Drawing_FontMgr *mgr = OH_Drawing_FontMgrCreate();
124    EXPECT_NE(mgr, nullptr);
125
126    const char* matchFamilyName = "HarmonyOS-Sans";
127    OH_Drawing_FontStyleStruct normalStyle;
128    normalStyle.weight = FONT_WEIGHT_400;
129    normalStyle.width = FONT_WIDTH_NORMAL;
130    normalStyle.slant = FONT_STYLE_NORMAL;
131
132    const char *bcp47[] = {"zh-Hans", "zh-CN"};
133    OH_Drawing_Typeface *CharTypeface = OH_Drawing_FontMgrMatchFamilyStyleCharacter(mgr, matchFamilyName,
134                                                                                    normalStyle, bcp47, 1, ' ');
135    EXPECT_NE(CharTypeface, nullptr);
136    OH_Drawing_TypefaceDestroy(CharTypeface);
137
138    OH_Drawing_FontMgrDestroy(mgr);
139}
140
141/*
142 * @tc.name: OH_Drawing_FontMgrTest007
143 * @tc.desc: test for getting family name.
144 * @tc.type: FUNC
145 */
146HWTEST_F(OH_Drawing_FontMgrTest, OH_Drawing_FontMgrTest007, TestSize.Level1)
147{
148    int count = OH_Drawing_FontMgrGetFamilyCount(nullptr);
149    EXPECT_TRUE(count == 0);
150    OH_Drawing_FontMgr *mgr = OH_Drawing_FontMgrCreate();
151    EXPECT_NE(mgr, nullptr);
152    char *familyName = OH_Drawing_FontMgrGetFamilyName(nullptr, 0);
153    EXPECT_TRUE(familyName == nullptr);
154    OH_Drawing_FontMgrDestroyFamilyName(familyName);
155    OH_Drawing_FontMgrDestroy(mgr);
156}
157
158/*
159 * @tc.name: OH_Drawing_FontMgrTest008
160 * @tc.desc: test for matching family style.
161 * @tc.type: FUNC
162 */
163HWTEST_F(OH_Drawing_FontMgrTest, OH_Drawing_FontMgrTest008, TestSize.Level1)
164{
165    OH_Drawing_FontStyleSet* fontStyleSet = OH_Drawing_FontMgrCreateFontStyleSet(nullptr, 0);
166    EXPECT_TRUE(fontStyleSet == nullptr);
167    const char* matchFamilyName = "HarmonyOS-Sans";
168    fontStyleSet = OH_Drawing_FontMgrMatchFamily(nullptr, matchFamilyName);
169    EXPECT_TRUE(fontStyleSet == nullptr);
170
171    OH_Drawing_FontStyleStruct normalStyle;
172    normalStyle.weight = FONT_WEIGHT_400;
173    normalStyle.width = FONT_WIDTH_NORMAL;
174    normalStyle.slant = FONT_STYLE_NORMAL;
175    OH_Drawing_Typeface *typeface = OH_Drawing_FontMgrMatchFamilyStyle(nullptr, matchFamilyName, normalStyle);
176    EXPECT_TRUE(typeface == nullptr);
177}
178
179/*
180 * @tc.name: OH_Drawing_FontMgrTest009
181 * @tc.desc: test for matching family style character.
182 * @tc.type: FUNC
183 */
184HWTEST_F(OH_Drawing_FontMgrTest, OH_Drawing_FontMgrTest009, TestSize.Level1)
185{
186    const char* matchFamilyName = "HarmonyOS-Sans";
187    OH_Drawing_FontStyleStruct normalStyle;
188    normalStyle.weight = FONT_WEIGHT_400;
189    normalStyle.width = FONT_WIDTH_NORMAL;
190    normalStyle.slant = FONT_STYLE_NORMAL;
191
192    const char *bcp47[] = {"zh-Hans", "zh-CN"};
193    OH_Drawing_Typeface *CharTypeface = OH_Drawing_FontMgrMatchFamilyStyleCharacter(nullptr, matchFamilyName,
194                                                                                    normalStyle, bcp47, 1, ' ');
195    EXPECT_TRUE(CharTypeface == nullptr);
196}
197
198/*
199 * @tc.name: OH_Drawing_FontMgrTest010
200 * @tc.desc: test for create a typeface for the given index.
201 * @tc.type: FUNC
202 */
203HWTEST_F(OH_Drawing_FontMgrTest, OH_Drawing_FontMgrTest010, TestSize.Level1)
204{
205    OH_Drawing_FontMgr *mgr = OH_Drawing_FontMgrCreate();
206    OH_Drawing_FontStyleSet* fontStyleSet = OH_Drawing_FontMgrCreateFontStyleSet(mgr, 0);
207    OH_Drawing_Typeface *typeface = OH_Drawing_FontStyleSetCreateTypeface(fontStyleSet, 0);
208    EXPECT_NE(typeface, nullptr);
209    typeface = OH_Drawing_FontStyleSetCreateTypeface(nullptr, 0);
210    EXPECT_TRUE(typeface == nullptr);
211    OH_Drawing_FontMgrDestroyFontStyleSet(fontStyleSet);
212    OH_Drawing_TypefaceDestroy(typeface);
213    OH_Drawing_FontMgrDestroy(mgr);
214}
215
216/*
217 * @tc.name: OH_Drawing_FontMgrTest011
218 * @tc.desc: test for get font style struct.
219 * @tc.type: FUNC
220 */
221HWTEST_F(OH_Drawing_FontMgrTest, OH_Drawing_FontMgrTest011, TestSize.Level1)
222{
223    OH_Drawing_FontMgr *mgr = OH_Drawing_FontMgrCreate();
224    OH_Drawing_FontStyleSet* fontStyleSet = OH_Drawing_FontMgrCreateFontStyleSet(mgr, 0);
225    OH_Drawing_FontStyleStruct normalStyle;
226    char** styleName = nullptr;
227    normalStyle = OH_Drawing_FontStyleSetGetStyle(fontStyleSet, 0, styleName);
228    EXPECT_TRUE(normalStyle.weight == FONT_WEIGHT_400);
229    OH_Drawing_FontStyleSetFreeStyleName(styleName);
230    OH_Drawing_FontMgrDestroyFontStyleSet(fontStyleSet);
231    OH_Drawing_FontMgrDestroy(mgr);
232}
233
234/*
235 * @tc.name: OH_Drawing_FontMgrTest012
236 * @tc.desc: test for get typeface by match style.
237 * @tc.type: FUNC
238 */
239HWTEST_F(OH_Drawing_FontMgrTest, OH_Drawing_FontMgrTest012, TestSize.Level1)
240{
241    OH_Drawing_FontMgr *mgr = OH_Drawing_FontMgrCreate();
242    OH_Drawing_FontStyleSet* fontStyleSet = OH_Drawing_FontMgrCreateFontStyleSet(mgr, 0);
243    OH_Drawing_FontStyleStruct normalStyle;
244    normalStyle.weight = FONT_WEIGHT_400;
245    normalStyle.width = FONT_WIDTH_NORMAL;
246    normalStyle.slant = FONT_STYLE_NORMAL;
247    OH_Drawing_Typeface* typeface = OH_Drawing_FontStyleSetMatchStyle(fontStyleSet, normalStyle);
248    EXPECT_NE(typeface, nullptr);
249
250    typeface = OH_Drawing_FontStyleSetMatchStyle(nullptr, normalStyle);
251    EXPECT_TRUE(typeface == nullptr);
252    OH_Drawing_FontMgrDestroyFontStyleSet(fontStyleSet);
253    OH_Drawing_TypefaceDestroy(typeface);
254    OH_Drawing_FontMgrDestroy(mgr);
255}
256
257/*
258 * @tc.name: OH_Drawing_FontMgrTest013
259 * @tc.desc: test for get font style set.
260 * @tc.type: FUNC
261 */
262HWTEST_F(OH_Drawing_FontMgrTest, OH_Drawing_FontMgrTest013, TestSize.Level1)
263{
264    OH_Drawing_FontMgr *mgr = OH_Drawing_FontMgrCreate();
265    OH_Drawing_FontStyleSet* fontStyleSet = OH_Drawing_FontMgrCreateFontStyleSet(mgr, 0);
266    int count = OH_Drawing_FontStyleSetCount(fontStyleSet);
267    EXPECT_TRUE(count > 0);
268
269    count = OH_Drawing_FontStyleSetCount(nullptr);
270    EXPECT_TRUE(count == 0);
271    OH_Drawing_FontMgrDestroyFontStyleSet(fontStyleSet);
272    OH_Drawing_FontMgrDestroy(mgr);
273}
274} // namespace Drawing
275} // namespace Rosen
276} // namespace OHOS