1 /*
2 * Copyright (c) 2023 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, 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 <fstream>
17 #include <gtest/gtest.h>
18
19 #include "font_parser.h"
20 #include "texgine/font_manager.h"
21 #include "texgine/utils/exlog.h"
22
23 using namespace testing;
24 using namespace testing::ext;
25
26 namespace OHOS {
27 namespace Rosen {
28 namespace TextEngine {
29 namespace {
30 static constexpr int WEIGHT_TEST = 900;
31 static const std::string FILE_NAME = "/system/fonts/visibility_list.json";
32
33 class FontManagerTest : public testing::Test {};
34
ShowVisibilityFonts(std::vector<FontParser::FontDescriptor> & visibilityFonts)35 void ShowVisibilityFonts(std::vector<FontParser::FontDescriptor>& visibilityFonts)
36 {
37 for (auto& it : visibilityFonts) {
38 LOGSO_FUNC_LINE(INFO) << "\n fontFamily: " << it.fontFamily << "\n fontSubfamily: " << it.fontSubfamily <<
39 "\n fullName: " << it.fullName << "\n italic: " << it.italic <<
40 "\n monoSpace: " << it.monoSpace << "\n path: " << it.path <<
41 "\n postScriptName: " << it.postScriptName << "\n symbolic: " << it.symbolic <<
42 "\n weight: " << it.weight << "\n width: " << it.width;
43 }
44 }
45
FindFontPsn(std::vector<FontParser::FontDescriptor> & visibilityFonts)46 void FindFontPsn(std::vector<FontParser::FontDescriptor>& visibilityFonts)
47 {
48 FontParser::FontDescriptor fontDescriptorPn;
49 fontDescriptorPn.postScriptName = "HarmonyOS_Sans_Black";
50
51 auto fontFindPn = FontManager::GetInstance()->FindFont(&visibilityFonts, fontDescriptorPn);
52 ASSERT_NE(fontFindPn, nullptr);
53
54 if (fontFindPn != nullptr) {
55 LOGSO_FUNC_LINE(INFO) << "\n postScriptName = [ postScriptName: " << fontDescriptorPn.postScriptName << " ]" <<
56 "\n [ FontDescriptor: path: " << fontFindPn->path <<
57 "\n postScriptName: " << fontFindPn->postScriptName <<
58 "\n fullName: " << fontFindPn->fullName << "\n fontFamily: " << fontFindPn->fontFamily <<
59 "\n fontSubfamily: " << fontFindPn->fontSubfamily <<
60 "\n weight: " << fontFindPn->weight << "\n width: " << fontFindPn->width <<
61 "\n italic: " << fontFindPn->italic << "\n monoSpace: " << fontFindPn->monoSpace <<
62 "\n symbolic: " << fontFindPn->symbolic << " ]";
63 }
64 }
65
FindFontFn(std::vector<FontParser::FontDescriptor> & visibilityFonts)66 void FindFontFn(std::vector<FontParser::FontDescriptor>& visibilityFonts)
67 {
68 FontParser::FontDescriptor fontDescriptorFn;
69 fontDescriptorFn.fullName = "HarmonyOS Sans Black Italic";
70
71 auto fontFindFn = FontManager::GetInstance()->FindFont(&visibilityFonts, fontDescriptorFn);
72 ASSERT_NE(fontFindFn, nullptr);
73
74 if (fontFindFn != nullptr) {
75 LOGSO_FUNC_LINE(INFO) << "\n fullName = [ fullName: " << fontDescriptorFn.fullName << " ]" <<
76 "\n [ FontDescriptor: path: " << fontFindFn->path <<
77 "\n postScriptName: " << fontFindFn->postScriptName <<
78 "\n fullName: " << fontFindFn->fullName << "\n fontFamily: " << fontFindFn->fontFamily <<
79 "\n fontSubfamily: " << fontFindFn->fontSubfamily <<
80 "\n weight: " << fontFindFn->weight << "\n width: " << fontFindFn->width <<
81 "\n italic: " << fontFindFn->italic << "\n monoSpace: " << fontFindFn->monoSpace <<
82 "\n symbolic: " << fontFindFn->symbolic << " ]";
83 }
84 }
85
FindFontFsy(std::vector<FontParser::FontDescriptor> & visibilityFonts)86 void FindFontFsy(std::vector<FontParser::FontDescriptor>& visibilityFonts)
87 {
88 FontParser::FontDescriptor fontDescriptorFsy;
89 fontDescriptorFsy.fontFamily = "HarmonyOS Sans";
90 fontDescriptorFsy.fontSubfamily = "Black Italic";
91
92 auto fontFindFsy = FontManager::GetInstance()->FindFont(&visibilityFonts, fontDescriptorFsy);
93 ASSERT_NE(fontFindFsy, nullptr);
94
95 if (fontFindFsy != nullptr) {
96 LOGSO_FUNC_LINE(INFO) << "\n fontFamily + fontSubfamily = [ fontFamily: " << fontDescriptorFsy.fontFamily <<
97 "\n fontSubfamily: " << fontDescriptorFsy.fontSubfamily << " ]" <<
98 "\n [ FontDescriptor: path: " << fontFindFsy->path <<
99 "\n postScriptName: " << fontFindFsy->postScriptName <<
100 "\n fullName: " << fontFindFsy->fullName <<
101 "\n fontFamily: " << fontFindFsy->fontFamily <<
102 "\n fontSubfamily: " << fontFindFsy->fontSubfamily <<
103 "\n weight: " << fontFindFsy->weight << "\n width: " << fontFindFsy->width <<
104 "\n italic: " << fontFindFsy->italic << "\n monoSpace: " << fontFindFsy->monoSpace <<
105 "\n symbolic: " << fontFindFsy->symbolic << " ]";
106 }
107 }
108
FindFontFni(std::vector<FontParser::FontDescriptor> & visibilityFonts)109 void FindFontFni(std::vector<FontParser::FontDescriptor>& visibilityFonts)
110 {
111 FontParser::FontDescriptor fontDescriptorFni;
112 fontDescriptorFni.fontFamily = "HarmonyOS Sans Condensed";
113 fontDescriptorFni.italic = false;
114
115 auto fontFindFni = FontManager::GetInstance()->FindFont(&visibilityFonts, fontDescriptorFni);
116 ASSERT_NE(fontFindFni, nullptr);
117
118 if (fontFindFni != nullptr) {
119 LOGSO_FUNC_LINE(INFO) << "\n fontFamily + italic = [ fontFamily: " << fontDescriptorFni.fontFamily <<
120 "\n italic: " << fontDescriptorFni.italic << " ]" <<
121 "\n [ FontDescriptor: path: " << fontFindFni->path <<
122 "\n postScriptName: " << fontFindFni->postScriptName <<
123 "\n fullName: " << fontFindFni->fullName <<
124 "\n fontFamily: " << fontFindFni->fontFamily <<
125 "\n fontSubfamily: " << fontFindFni->fontSubfamily <<
126 "\n weight: " << fontFindFni->weight << "\n width: " << fontFindFni->width <<
127 "\n italic: " << fontFindFni->italic << "\n monoSpace: " << fontFindFni->monoSpace <<
128 "\n symbolic: " << fontFindFni->symbolic << " ]";
129 }
130 }
131
FindFontFnw(std::vector<FontParser::FontDescriptor> & visibilityFonts)132 void FindFontFnw(std::vector<FontParser::FontDescriptor>& visibilityFonts)
133 {
134 FontParser::FontDescriptor fontDescriptorFnw;
135 fontDescriptorFnw.fontFamily = "HarmonyOS Sans Condensed";
136 fontDescriptorFnw.weight = WEIGHT_TEST;
137
138 auto fontFindFnw = FontManager::GetInstance()->FindFont(&visibilityFonts, fontDescriptorFnw);
139 ASSERT_NE(fontFindFnw, nullptr);
140
141 if (fontFindFnw != nullptr) {
142 LOGSO_FUNC_LINE(INFO) << "\n fontFamily + weight = [ fontFamily: " << fontDescriptorFnw.fontFamily <<
143 "\n weight: " << fontDescriptorFnw.weight << " ]" <<
144 "\n [ FontDescriptor: path: " << fontFindFnw->path <<
145 "\n postScriptName: " << fontFindFnw->postScriptName <<
146 "\n fullName: " << fontFindFnw->fullName <<
147 "\n fontFamily: " << fontFindFnw->fontFamily <<
148 "\n fontSubfamily: " << fontFindFnw->fontSubfamily <<
149 "\n weight: " << fontFindFnw->weight << "\n width: " << fontFindFnw->width <<
150 "\n italic: " << fontFindFnw->italic << "\n monoSpace: " << fontFindFnw->monoSpace <<
151 "\n symbolic: " << fontFindFnw->symbolic << " ]";
152 }
153 }
154
FindFontFfw(std::vector<FontParser::FontDescriptor> & visibilityFonts)155 void FindFontFfw(std::vector<FontParser::FontDescriptor>& visibilityFonts)
156 {
157 FontParser::FontDescriptor fontDescriptorFfw;
158 fontDescriptorFfw.fontFamily = "HarmonyOS Sans Naskh Arabic";
159 fontDescriptorFfw.fontSubfamily = "Black";
160 fontDescriptorFfw.weight = WEIGHT_TEST;
161
162 auto fontFindFfw = FontManager::GetInstance()->FindFont(&visibilityFonts, fontDescriptorFfw);
163 ASSERT_NE(fontFindFfw, nullptr);
164
165 if (fontFindFfw != nullptr) {
166 LOGSO_FUNC_LINE(INFO) << "\n fontFamily + fontSubfamily + weight = [ fontFamily: " <<
167 fontDescriptorFfw.fontFamily << "\n fontSubfamily: " << fontDescriptorFfw.fontSubfamily <<
168 "\n weight: " << fontDescriptorFfw.weight << " ]" <<
169 "\n [ FontDescriptor: path: " << fontFindFfw->path <<
170 "\n postScriptName: " << fontFindFfw->postScriptName <<
171 "\n fullName: " << fontFindFfw->fullName <<
172 "\n fontFamily: " << fontFindFfw->fontFamily <<
173 "\n fontSubfamily: " << fontFindFfw->fontSubfamily <<
174 "\n weight: " << fontFindFfw->weight << "\n width: " << fontFindFfw->width <<
175 "\n italic: " << fontFindFfw->italic << "\n monoSpace: " << fontFindFfw->monoSpace <<
176 "\n symbolic: " << fontFindFfw->symbolic << " ]";
177 }
178 }
179
FindFontFfwc(std::vector<FontParser::FontDescriptor> & visibilityFonts)180 void FindFontFfwc(std::vector<FontParser::FontDescriptor>& visibilityFonts)
181 {
182 FontParser::FontDescriptor fontDescriptorFfwc;
183 fontDescriptorFfwc.fontFamily = "HarmonyOS Sans Naskh Arabic";
184 fontDescriptorFfwc.fontSubfamily = "Black";
185 fontDescriptorFfwc.weight = WEIGHT_TEST;
186
187 auto fontFindFfwc = FontManager::GetInstance()->FindFont(&visibilityFonts, fontDescriptorFfwc);
188 ASSERT_NE(fontFindFfwc, nullptr);
189
190 if (fontFindFfwc != nullptr) {
191 LOGSO_FUNC_LINE(INFO) << "\n fontFamily + fontSubfamily + weight = [ fontFamily: " <<
192 fontDescriptorFfwc.fontFamily <<
193 "\n fontSubfamily: " << fontDescriptorFfwc.fontSubfamily <<
194 "\n weight: " << fontDescriptorFfwc.weight << " ]" <<
195 "\n [ FontDescriptor: path: " << fontFindFfwc->path <<
196 "\n postScriptName: " << fontFindFfwc->postScriptName <<
197 "\n fullName: " << fontFindFfwc->fullName <<
198 "\n fontFamily: " << fontFindFfwc->fontFamily <<
199 "\n fontSubfamily: " << fontFindFfwc->fontSubfamily <<
200 "\n weight: " << fontFindFfwc->weight << "\n width: " << fontFindFfwc->width <<
201 "\n italic: " << fontFindFfwc->italic << "\n monoSpace: " << fontFindFfwc->monoSpace <<
202 "\n symbolic: " << fontFindFfwc->symbolic << " ]";
203 }
204 }
205
FindFontFfiw(std::vector<FontParser::FontDescriptor> & visibilityFonts)206 void FindFontFfiw(std::vector<FontParser::FontDescriptor>& visibilityFonts)
207 {
208 FontParser::FontDescriptor fontDescriptorFfiw;
209 fontDescriptorFfiw.fontFamily = "HarmonyOS Sans Naskh Arabic UI";
210 fontDescriptorFfiw.fontSubfamily = "Black";
211 fontDescriptorFfiw.italic = false;
212 fontDescriptorFfiw.weight = WEIGHT_TEST;
213
214 auto fontFindFfiw = FontManager::GetInstance()->FindFont(&visibilityFonts, fontDescriptorFfiw);
215 ASSERT_NE(fontFindFfiw, nullptr);
216
217 if (fontFindFfiw != nullptr) {
218 LOGSO_FUNC_LINE(INFO) << "\n fontFamily + fontSubfamily + italic + weight = [ fontFamily: " <<
219 fontDescriptorFfiw.fontFamily <<
220 "\n fontSubfamily: " << fontDescriptorFfiw.fontSubfamily <<
221 "\n italic: " << fontDescriptorFfiw.italic <<
222 "\n weight: " << fontDescriptorFfiw.weight << " ]" <<
223 "\n [ FontDescriptor: path: " << fontFindFfiw->path <<
224 "\n postScriptName: " << fontFindFfiw->postScriptName <<
225 "\n fullName: " << fontFindFfiw->fullName <<
226 "\n fontFamily: " << fontFindFfiw->fontFamily <<
227 "\n fontSubfamily: " << fontFindFfiw->fontSubfamily <<
228 "\n weight: " << fontFindFfiw->weight << "\n width: " << fontFindFfiw->width <<
229 "\n italic: " << fontFindFfiw->italic << "\n monoSpace: " << fontFindFfiw->monoSpace <<
230 "\n symbolic: " << fontFindFfiw->symbolic << " ]";
231 }
232 }
233
234 /**
235 * @tc.name: FontManager
236 * @tc.desc: Verify the FontManager
237 * @tc.type FUNC
238 */
239 HWTEST_F(FontManagerTest, FontManager, TestSize.Level1)
240 {
241 FontParser fontParser;
242 auto fontSrc = fontParser.GetVisibilityFonts();
243 std::ifstream fileStream(FILE_NAME.c_str());
244 if (fileStream.is_open()) {
245 ASSERT_NE(fontSrc.size(), 0);
246 ShowVisibilityFonts(fontSrc);
247 FindFontPsn(fontSrc);
248 FindFontFn(fontSrc);
249 FindFontFsy(fontSrc);
250 FindFontFni(fontSrc);
251 FindFontFnw(fontSrc);
252 FindFontFfw(fontSrc);
253 FindFontFfwc(fontSrc);
254 FindFontFfiw(fontSrc);
255 fileStream.close();
256 } else {
257 ASSERT_EQ(fontSrc.size(), 0);
258 }
259 }
260 } // namespace
261 } // namespace TextEngine
262 } // namespace Rosen
263 } // namespace OHOS
264