• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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