blob: ffeb05e40040fd09b7dc3d91060ef423e085fdb3 [file] [log] [blame]
reed@google.com83165a52013-04-11 18:31:25 +00001/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
Mike Kleinc0bd9f92019-04-23 12:05:21 -05008#include "include/core/SkFont.h"
9#include "include/core/SkFontMgr.h"
10#include "include/core/SkPaint.h"
11#include "include/core/SkStream.h"
12#include "include/core/SkTypeface.h"
13#include "src/core/SkAdvancedTypefaceMetrics.h"
herb660317f2020-02-10 18:54:34 -050014#include "src/core/SkScalerContext.h"
Mike Kleinc0bd9f92019-04-23 12:05:21 -050015#include "tests/Test.h"
16#include "tools/flags/CommandLineFlags.h"
reed@google.com83165a52013-04-11 18:31:25 +000017
bungeman147ea2f2015-11-12 09:50:08 -080018#include <initializer_list>
19#include <limits>
20#include <vector>
21
reed@google.com43c27582014-04-08 15:04:29 +000022static void test_font(skiatest::Reporter* reporter) {
Mike Reed5f50f572018-11-12 13:19:37 -050023 SkFont font(nullptr, 24);
skia.committer@gmail.come1d94432014-04-09 03:04:11 +000024
Herb Derby087fad72019-01-22 14:45:16 -050025 //REPORTER_ASSERT(reporter, SkTypeface::GetDefaultTypeface() == font.getTypeface());
Mike Reedfe4fc142018-10-22 14:24:07 -040026 REPORTER_ASSERT(reporter, 24 == font.getSize());
27 REPORTER_ASSERT(reporter, 1 == font.getScaleX());
28 REPORTER_ASSERT(reporter, 0 == font.getSkewX());
reed@google.com43c27582014-04-08 15:04:29 +000029
30 uint16_t glyphs[5];
31 sk_bzero(glyphs, sizeof(glyphs));
32
Florin Malitad6db27c2018-11-02 12:08:31 -040033 // Check that no glyphs are copied with insufficient storage.
Ben Wagner51e15a62019-05-07 15:38:46 -040034 int count = font.textToGlyphs("Hello", 5, SkTextEncoding::kUTF8, glyphs, 2);
reed@google.com43c27582014-04-08 15:04:29 +000035 REPORTER_ASSERT(reporter, 5 == count);
Florin Malitad6db27c2018-11-02 12:08:31 -040036 for (const auto glyph : glyphs) { REPORTER_ASSERT(reporter, glyph == 0); }
37
Ben Wagner51e15a62019-05-07 15:38:46 -040038 SkAssertResult(font.textToGlyphs("Hello", 5, SkTextEncoding::kUTF8, glyphs,
Florin Malitad6db27c2018-11-02 12:08:31 -040039 SK_ARRAY_COUNT(glyphs)) == count);
40
reed@google.com43c27582014-04-08 15:04:29 +000041 for (int i = 0; i < count; ++i) {
42 REPORTER_ASSERT(reporter, 0 != glyphs[i]);
43 }
44 REPORTER_ASSERT(reporter, glyphs[0] != glyphs[1]); // 'h' != 'e'
45 REPORTER_ASSERT(reporter, glyphs[2] == glyphs[3]); // 'l' == 'l'
skia.committer@gmail.come1d94432014-04-09 03:04:11 +000046
Mike Reedfe4fc142018-10-22 14:24:07 -040047 const SkFont newFont(font.makeWithSize(36));
Herb Derby087fad72019-01-22 14:45:16 -050048 REPORTER_ASSERT(reporter, font.getTypefaceOrDefault() == newFont.getTypefaceOrDefault());
Mike Reedfe4fc142018-10-22 14:24:07 -040049 REPORTER_ASSERT(reporter, 36 == newFont.getSize()); // double check we haven't changed
50 REPORTER_ASSERT(reporter, 24 == font.getSize()); // double check we haven't changed
reed@google.com43c27582014-04-08 15:04:29 +000051}
52
reed@google.comd44d9882013-09-18 20:32:25 +000053/*
54 * If the font backend is going to "alias" some font names to other fonts
55 * (e.g. sans -> Arial) then we want to at least get the same typeface back
56 * if we request the alias name multiple times.
57 */
reed@google.comc1a81eb2013-09-19 18:06:03 +000058static void test_alias_names(skiatest::Reporter* reporter) {
59 const char* inNames[] = {
60 "sans", "sans-serif", "serif", "monospace", "times", "helvetica"
61 };
skia.committer@gmail.comf91e3d42013-09-20 07:01:33 +000062
reed@google.comc1a81eb2013-09-19 18:06:03 +000063 for (size_t i = 0; i < SK_ARRAY_COUNT(inNames); ++i) {
mbocee6a9912016-05-31 11:42:36 -070064 sk_sp<SkTypeface> first(SkTypeface::MakeFromName(inNames[i], SkFontStyle()));
halcanary96fcdcc2015-08-27 07:41:13 -070065 if (nullptr == first.get()) {
reed@google.comc1a81eb2013-09-19 18:06:03 +000066 continue;
67 }
68 for (int j = 0; j < 10; ++j) {
mbocee6a9912016-05-31 11:42:36 -070069 sk_sp<SkTypeface> face(SkTypeface::MakeFromName(inNames[i], SkFontStyle()));
reed@google.comc1a81eb2013-09-19 18:06:03 +000070 #if 0
71 SkString name;
72 face->getFamilyName(&name);
73 printf("request %s, received %s, first id %x received %x\n",
74 inNames[i], name.c_str(), first->uniqueID(), face->uniqueID());
75 #endif
76 REPORTER_ASSERT(reporter, first->uniqueID() == face->uniqueID());
77 }
reed@google.comd44d9882013-09-18 20:32:25 +000078 }
79}
80
reed@google.com83165a52013-04-11 18:31:25 +000081static void test_fontiter(skiatest::Reporter* reporter, bool verbose) {
Hal Canary342b7ac2016-11-04 11:49:42 -040082 sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
reed@google.com83165a52013-04-11 18:31:25 +000083 int count = fm->countFamilies();
84
85 for (int i = 0; i < count; ++i) {
86 SkString fname;
87 fm->getFamilyName(i, &fname);
reed@google.com83165a52013-04-11 18:31:25 +000088
Hal Canary342b7ac2016-11-04 11:49:42 -040089 sk_sp<SkFontStyleSet> fnset(fm->matchFamily(fname.c_str()));
90 sk_sp<SkFontStyleSet> set(fm->createStyleSet(i));
bungeman@google.com71033442013-05-01 14:21:20 +000091 REPORTER_ASSERT(reporter, fnset->count() == set->count());
reed@google.com83165a52013-04-11 18:31:25 +000092
93 if (verbose) {
94 SkDebugf("[%2d] %s\n", i, fname.c_str());
95 }
96
97 for (int j = 0; j < set->count(); ++j) {
98 SkString sname;
99 SkFontStyle fs;
100 set->getStyle(j, &fs, &sname);
reed@google.comeb029572013-04-25 14:59:32 +0000101// REPORTER_ASSERT(reporter, sname.size() > 0);
reed@google.com83165a52013-04-11 18:31:25 +0000102
Hal Canary342b7ac2016-11-04 11:49:42 -0400103 sk_sp<SkTypeface> face(set->createTypeface(j));
reed@google.comc1ccda32013-04-19 14:28:54 +0000104// REPORTER_ASSERT(reporter, face.get());
reed@google.com83165a52013-04-11 18:31:25 +0000105
106 if (verbose) {
107 SkDebugf("\t[%d] %s [%3d %d %d]\n", j, sname.c_str(),
bungemanb4bb7d82016-04-27 10:21:04 -0700108 fs.weight(), fs.width(), fs.slant());
reed@google.com83165a52013-04-11 18:31:25 +0000109 }
110 }
111 }
112}
113
bungeman7575bb12017-05-01 13:02:42 -0400114static void test_match(skiatest::Reporter* reporter) {
115 sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
116 sk_sp<SkFontStyleSet> styleSet(fm->matchFamily(nullptr));
117 REPORTER_ASSERT(reporter, styleSet);
118}
119
bungeman147ea2f2015-11-12 09:50:08 -0800120static void test_matchStyleCSS3(skiatest::Reporter* reporter) {
bungeman147ea2f2015-11-12 09:50:08 -0800121 static const SkFontStyle invalidFontStyle(101, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
122
123 class TestTypeface : public SkTypeface {
124 public:
bungemane3aea102016-07-13 05:16:58 -0700125 TestTypeface(const SkFontStyle& fontStyle) : SkTypeface(fontStyle, false){}
bungeman147ea2f2015-11-12 09:50:08 -0800126 protected:
Ben Wagner4212a7d2019-02-25 14:27:46 -0500127 std::unique_ptr<SkStreamAsset> onOpenStream(int* ttcIndex) const override { return nullptr; }
Bruce Wang536ad2c2018-06-25 11:37:25 -0400128 sk_sp<SkTypeface> onMakeClone(const SkFontArguments& args) const override {
129 return sk_ref_sp(this);
130 }
herb660317f2020-02-10 18:54:34 -0500131 SkScalerContext* onCreateScalerContext(const SkScalerContextEffects& effects,
132 const SkDescriptor* desc) const override {
133 return SkScalerContext::MakeEmptyContext(
134 sk_ref_sp(const_cast<TestTypeface*>(this)), effects, desc);
bungeman147ea2f2015-11-12 09:50:08 -0800135 }
136 void onFilterRec(SkScalerContextRec*) const override { }
Hal Canary209e4b12017-05-04 14:23:55 -0400137 std::unique_ptr<SkAdvancedTypefaceMetrics> onGetAdvancedMetrics() const override {
138 return nullptr;
139 }
bungeman147ea2f2015-11-12 09:50:08 -0800140 void onGetFontDescriptor(SkFontDescriptor*, bool*) const override { }
Mike Reed64670cb2019-04-16 11:37:38 -0700141 void onCharsToGlyphs(const SkUnichar* chars, int count, SkGlyphID glyphs[]) const override {
142 sk_bzero(glyphs, count * sizeof(glyphs[0]));
bungeman147ea2f2015-11-12 09:50:08 -0800143 }
Mike Kleinfc6c37b2016-09-27 09:34:10 -0400144 int onCountGlyphs() const override { return 0; }
Ben Wagner2c2240f2019-04-17 16:04:30 -0400145 void getPostScriptGlyphNames(SkString*) const override {}
146 void getGlyphToUnicodeMap(SkUnichar*) const override {}
Mike Kleinfc6c37b2016-09-27 09:34:10 -0400147 int onGetUPEM() const override { return 0; }
bungeman147ea2f2015-11-12 09:50:08 -0800148 class EmptyLocalizedStrings : public SkTypeface::LocalizedStrings {
149 public:
150 bool next(SkTypeface::LocalizedString*) override { return false; }
151 };
152 void onGetFamilyName(SkString* familyName) const override {
153 familyName->reset();
154 }
155 SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override {
156 return new EmptyLocalizedStrings;
Mike Kleinfc6c37b2016-09-27 09:34:10 -0400157 }
Ben Wagnerfc497342017-02-24 11:15:26 -0500158 int onGetVariationDesignPosition(
159 SkFontArguments::VariationPosition::Coordinate coordinates[],
160 int coordinateCount) const override
161 {
162 return 0;
163 }
Ben Wagner2c2240f2019-04-17 16:04:30 -0400164 int onGetVariationDesignParameters(SkFontParameters::Variation::Axis parameters[],
165 int parameterCount) const override
166 {
167 return -1;
168 }
bungeman147ea2f2015-11-12 09:50:08 -0800169 int onGetTableTags(SkFontTableTag tags[]) const override { return 0; }
170 size_t onGetTableData(SkFontTableTag, size_t, size_t, void*) const override {
171 return 0;
172 }
173 };
174
175 class TestFontStyleSet : public SkFontStyleSet {
176 public:
177 TestFontStyleSet(std::initializer_list<SkFontStyle> styles) : fStyles(styles) {}
178 int count() override { return static_cast<int>(fStyles.size()); }
179 void getStyle(int index, SkFontStyle* style, SkString*) override {
180 if (style) {
181 *style = fStyles[index];
182 }
183 }
184 SkTypeface* createTypeface(int index) override {
185 if (index < 0 || this->count() <= index) {
bungemane3aea102016-07-13 05:16:58 -0700186 return new TestTypeface(invalidFontStyle);
bungeman147ea2f2015-11-12 09:50:08 -0800187 }
bungemane3aea102016-07-13 05:16:58 -0700188 return new TestTypeface(fStyles[index]);
bungeman147ea2f2015-11-12 09:50:08 -0800189 }
190 SkTypeface* matchStyle(const SkFontStyle& pattern) override {
191 return this->matchStyleCSS3(pattern);
192 }
193 private:
194 std::vector<SkFontStyle> fStyles;
195 };
196
197 SkFontStyle condensed_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
198 SkFontStyle condensed_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
199 SkFontStyle condensed_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
200 SkFontStyle condensed_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
bungemanb4bb7d82016-04-27 10:21:04 -0700201 SkFontStyle condensed_obliqu_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
202 SkFontStyle condensed_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800203 SkFontStyle expanded_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant);
204 SkFontStyle expanded_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant);
205 SkFontStyle expanded_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant);
206 SkFontStyle expanded_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant);
bungemanb4bb7d82016-04-27 10:21:04 -0700207 SkFontStyle expanded_obliqu_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kOblique_Slant);
208 SkFontStyle expanded_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kOblique_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800209
210 SkFontStyle normal_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800211 SkFontStyle normal_normal_300(SkFontStyle::kLight_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
212 SkFontStyle normal_normal_400(SkFontStyle::kNormal_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
213 SkFontStyle normal_normal_500(SkFontStyle::kMedium_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
214 SkFontStyle normal_normal_600(SkFontStyle::kSemiBold_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800215 SkFontStyle normal_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
216
217 struct StyleSetTest {
218 TestFontStyleSet styleSet;
219 struct Case {
220 SkFontStyle pattern;
221 SkFontStyle expectedResult;
222 };
223 std::vector<Case> cases;
224 } tests[] = {
225 {
Ben Wagner22e04c62019-08-02 01:04:37 -0400226 { normal_normal_500, normal_normal_400 },
227 {
228 { normal_normal_400, normal_normal_400 },
229 { normal_normal_500, normal_normal_500 },
230 },
231 },
232
233 {
234 { normal_normal_500, normal_normal_300 },
235 {
236 { normal_normal_300, normal_normal_300 },
237 { normal_normal_400, normal_normal_500 },
238 { normal_normal_500, normal_normal_500 },
239 },
240 },
241
242 {
bungeman147ea2f2015-11-12 09:50:08 -0800243 { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900,
244 expanded_normal_100, expanded_normal_900, expanded_italic_100, expanded_italic_900 },
245 {
246 { condensed_normal_100, condensed_normal_100 },
247 { condensed_normal_900, condensed_normal_900 },
248 { condensed_italic_100, condensed_italic_100 },
249 { condensed_italic_900, condensed_italic_900 },
250 { expanded_normal_100, expanded_normal_100 },
251 { expanded_normal_900, expanded_normal_900 },
252 { expanded_italic_100, expanded_italic_100 },
253 { expanded_italic_900, expanded_italic_900 },
254 },
255 },
256
257 {
258 { condensed_normal_100,condensed_italic_100,expanded_normal_100,expanded_italic_100 },
259 {
260 { condensed_normal_100, condensed_normal_100 },
261 { condensed_normal_900, condensed_normal_100 },
262 { condensed_italic_100, condensed_italic_100 },
263 { condensed_italic_900, condensed_italic_100 },
264 { expanded_normal_100, expanded_normal_100 },
265 { expanded_normal_900, expanded_normal_100 },
266 { expanded_italic_100, expanded_italic_100 },
267 { expanded_italic_900, expanded_italic_100 },
268 },
269 },
270
271 {
272 { condensed_normal_900,condensed_italic_900,expanded_normal_900,expanded_italic_900 },
273 {
274 { condensed_normal_100, condensed_normal_900 },
275 { condensed_normal_900, condensed_normal_900 },
276 { condensed_italic_100, condensed_italic_900 },
277 { condensed_italic_900, condensed_italic_900 },
278 { expanded_normal_100, expanded_normal_900 },
279 { expanded_normal_900, expanded_normal_900 },
280 { expanded_italic_100, expanded_italic_900 },
281 { expanded_italic_900, expanded_italic_900 },
282 },
283 },
284
285 {
286 { condensed_normal_100,condensed_normal_900,expanded_normal_100,expanded_normal_900 },
287 {
288 { condensed_normal_100, condensed_normal_100 },
289 { condensed_normal_900, condensed_normal_900 },
290 { condensed_italic_100, condensed_normal_100 },
291 { condensed_italic_900, condensed_normal_900 },
292 { expanded_normal_100, expanded_normal_100 },
293 { expanded_normal_900, expanded_normal_900 },
294 { expanded_italic_100, expanded_normal_100 },
295 { expanded_italic_900, expanded_normal_900 },
296 },
297 },
298
299 {
300 { condensed_normal_100,expanded_normal_100 },
301 {
302 { condensed_normal_100, condensed_normal_100 },
303 { condensed_normal_900, condensed_normal_100 },
304 { condensed_italic_100, condensed_normal_100 },
305 { condensed_italic_900, condensed_normal_100 },
306 { expanded_normal_100, expanded_normal_100 },
307 { expanded_normal_900, expanded_normal_100 },
308 { expanded_italic_100, expanded_normal_100 },
309 { expanded_italic_900, expanded_normal_100 },
310 },
311 },
312
313 {
314 { condensed_normal_900,expanded_normal_900 },
315 {
316 { condensed_normal_100, condensed_normal_900 },
317 { condensed_normal_900, condensed_normal_900 },
318 { condensed_italic_100, condensed_normal_900 },
319 { condensed_italic_900, condensed_normal_900 },
320 { expanded_normal_100, expanded_normal_900 },
321 { expanded_normal_900, expanded_normal_900 },
322 { expanded_italic_100, expanded_normal_900 },
323 { expanded_italic_900, expanded_normal_900 },
324 },
325 },
326
327 {
328 { condensed_italic_100,condensed_italic_900,expanded_italic_100,expanded_italic_900 },
329 {
330 { condensed_normal_100, condensed_italic_100 },
331 { condensed_normal_900, condensed_italic_900 },
332 { condensed_italic_100, condensed_italic_100 },
333 { condensed_italic_900, condensed_italic_900 },
334 { expanded_normal_100, expanded_italic_100 },
335 { expanded_normal_900, expanded_italic_900 },
336 { expanded_italic_100, expanded_italic_100 },
337 { expanded_italic_900, expanded_italic_900 },
338 },
339 },
340
341 {
342 { condensed_italic_100,expanded_italic_100 },
343 {
344 { condensed_normal_100, condensed_italic_100 },
345 { condensed_normal_900, condensed_italic_100 },
346 { condensed_italic_100, condensed_italic_100 },
347 { condensed_italic_900, condensed_italic_100 },
348 { expanded_normal_100, expanded_italic_100 },
349 { expanded_normal_900, expanded_italic_100 },
350 { expanded_italic_100, expanded_italic_100 },
351 { expanded_italic_900, expanded_italic_100 },
352 },
353 },
354
355 {
356 { condensed_italic_900,expanded_italic_900 },
357 {
358 { condensed_normal_100, condensed_italic_900 },
359 { condensed_normal_900, condensed_italic_900 },
360 { condensed_italic_100, condensed_italic_900 },
361 { condensed_italic_900, condensed_italic_900 },
362 { expanded_normal_100, expanded_italic_900 },
363 { expanded_normal_900, expanded_italic_900 },
364 { expanded_italic_100, expanded_italic_900 },
365 { expanded_italic_900, expanded_italic_900 },
366 },
367 },
368
369 {
370 { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900 },
371 {
372 { condensed_normal_100, condensed_normal_100 },
373 { condensed_normal_900, condensed_normal_900 },
374 { condensed_italic_100, condensed_italic_100 },
375 { condensed_italic_900, condensed_italic_900 },
376 { expanded_normal_100, condensed_normal_100 },
377 { expanded_normal_900, condensed_normal_900 },
378 { expanded_italic_100, condensed_italic_100 },
379 { expanded_italic_900, condensed_italic_900 },
380 },
381 },
382
383 {
384 { condensed_normal_100,condensed_italic_100 },
385 {
386 { condensed_normal_100, condensed_normal_100 },
387 { condensed_normal_900, condensed_normal_100 },
388 { condensed_italic_100, condensed_italic_100 },
389 { condensed_italic_900, condensed_italic_100 },
390 { expanded_normal_100, condensed_normal_100 },
391 { expanded_normal_900, condensed_normal_100 },
392 { expanded_italic_100, condensed_italic_100 },
393 { expanded_italic_900, condensed_italic_100 },
394 },
395 },
396
397 {
398 { condensed_normal_900,condensed_italic_900 },
399 {
400 { condensed_normal_100, condensed_normal_900 },
401 { condensed_normal_900, condensed_normal_900 },
402 { condensed_italic_100, condensed_italic_900 },
403 { condensed_italic_900, condensed_italic_900 },
404 { expanded_normal_100, condensed_normal_900 },
405 { expanded_normal_900, condensed_normal_900 },
406 { expanded_italic_100, condensed_italic_900 },
407 { expanded_italic_900, condensed_italic_900 },
408 },
409 },
410
411 {
412 { condensed_normal_100,condensed_normal_900 },
413 {
414 { condensed_normal_100, condensed_normal_100 },
415 { condensed_normal_900, condensed_normal_900 },
416 { condensed_italic_100, condensed_normal_100 },
417 { condensed_italic_900, condensed_normal_900 },
418 { expanded_normal_100, condensed_normal_100 },
419 { expanded_normal_900, condensed_normal_900 },
420 { expanded_italic_100, condensed_normal_100 },
421 { expanded_italic_900, condensed_normal_900 },
422 },
423 },
424
425 {
426 { condensed_normal_100 },
427 {
428 { condensed_normal_100, condensed_normal_100 },
429 { condensed_normal_900, condensed_normal_100 },
430 { condensed_italic_100, condensed_normal_100 },
431 { condensed_italic_900, condensed_normal_100 },
432 { expanded_normal_100, condensed_normal_100 },
433 { expanded_normal_900, condensed_normal_100 },
434 { expanded_italic_100, condensed_normal_100 },
435 { expanded_italic_900, condensed_normal_100 },
436 },
437 },
438
439 {
440 { condensed_normal_900 },
441 {
442 { condensed_normal_100, condensed_normal_900 },
443 { condensed_normal_900, condensed_normal_900 },
444 { condensed_italic_100, condensed_normal_900 },
445 { condensed_italic_900, condensed_normal_900 },
446 { expanded_normal_100, condensed_normal_900 },
447 { expanded_normal_900, condensed_normal_900 },
448 { expanded_italic_100, condensed_normal_900 },
449 { expanded_italic_900, condensed_normal_900 },
450 },
451 },
452
453 {
454 { condensed_italic_100,condensed_italic_900 },
455 {
456 { condensed_normal_100, condensed_italic_100 },
457 { condensed_normal_900, condensed_italic_900 },
458 { condensed_italic_100, condensed_italic_100 },
459 { condensed_italic_900, condensed_italic_900 },
460 { expanded_normal_100, condensed_italic_100 },
461 { expanded_normal_900, condensed_italic_900 },
462 { expanded_italic_100, condensed_italic_100 },
463 { expanded_italic_900, condensed_italic_900 },
464 },
465 },
466
467 {
468 { condensed_italic_100 },
469 {
470 { condensed_normal_100, condensed_italic_100 },
471 { condensed_normal_900, condensed_italic_100 },
472 { condensed_italic_100, condensed_italic_100 },
473 { condensed_italic_900, condensed_italic_100 },
474 { expanded_normal_100, condensed_italic_100 },
475 { expanded_normal_900, condensed_italic_100 },
476 { expanded_italic_100, condensed_italic_100 },
477 { expanded_italic_900, condensed_italic_100 },
478 },
479 },
480
481 {
482 { condensed_italic_900 },
483 {
484 { condensed_normal_100, condensed_italic_900 },
485 { condensed_normal_900, condensed_italic_900 },
486 { condensed_italic_100, condensed_italic_900 },
487 { condensed_italic_900, condensed_italic_900 },
488 { expanded_normal_100, condensed_italic_900 },
489 { expanded_normal_900, condensed_italic_900 },
490 { expanded_italic_100, condensed_italic_900 },
491 { expanded_italic_900, condensed_italic_900 },
492 },
493 },
494
495 {
bungemanb4bb7d82016-04-27 10:21:04 -0700496 { expanded_normal_100,expanded_normal_900,
497 expanded_italic_100,expanded_italic_900 },
bungeman147ea2f2015-11-12 09:50:08 -0800498 {
499 { condensed_normal_100, expanded_normal_100 },
500 { condensed_normal_900, expanded_normal_900 },
501 { condensed_italic_100, expanded_italic_100 },
502 { condensed_italic_900, expanded_italic_900 },
bungemanb4bb7d82016-04-27 10:21:04 -0700503 { condensed_obliqu_100, expanded_italic_100 },
504 { condensed_obliqu_900, expanded_italic_900 },
bungeman147ea2f2015-11-12 09:50:08 -0800505 { expanded_normal_100, expanded_normal_100 },
506 { expanded_normal_900, expanded_normal_900 },
507 { expanded_italic_100, expanded_italic_100 },
508 { expanded_italic_900, expanded_italic_900 },
bungemanb4bb7d82016-04-27 10:21:04 -0700509 { expanded_obliqu_100, expanded_italic_100 },
510 { expanded_obliqu_900, expanded_italic_900 },
bungeman147ea2f2015-11-12 09:50:08 -0800511 },
512 },
513
514 {
515 { expanded_normal_100,expanded_italic_100 },
516 {
517 { condensed_normal_100, expanded_normal_100 },
518 { condensed_normal_900, expanded_normal_100 },
519 { condensed_italic_100, expanded_italic_100 },
520 { condensed_italic_900, expanded_italic_100 },
521 { expanded_normal_100, expanded_normal_100 },
522 { expanded_normal_900, expanded_normal_100 },
523 { expanded_italic_100, expanded_italic_100 },
524 { expanded_italic_900, expanded_italic_100 },
525 },
526 },
527
528 {
529 { expanded_normal_900,expanded_italic_900 },
530 {
531 { condensed_normal_100, expanded_normal_900 },
532 { condensed_normal_900, expanded_normal_900 },
533 { condensed_italic_100, expanded_italic_900 },
534 { condensed_italic_900, expanded_italic_900 },
535 { expanded_normal_100, expanded_normal_900 },
536 { expanded_normal_900, expanded_normal_900 },
537 { expanded_italic_100, expanded_italic_900 },
538 { expanded_italic_900, expanded_italic_900 },
539 },
540 },
541
542 {
543 { expanded_normal_100,expanded_normal_900 },
544 {
545 { condensed_normal_100, expanded_normal_100 },
546 { condensed_normal_900, expanded_normal_900 },
547 { condensed_italic_100, expanded_normal_100 },
548 { condensed_italic_900, expanded_normal_900 },
549 { expanded_normal_100, expanded_normal_100 },
550 { expanded_normal_900, expanded_normal_900 },
551 { expanded_italic_100, expanded_normal_100 },
552 { expanded_italic_900, expanded_normal_900 },
553 },
554 },
555
556 {
557 { expanded_normal_100 },
558 {
559 { condensed_normal_100, expanded_normal_100 },
560 { condensed_normal_900, expanded_normal_100 },
561 { condensed_italic_100, expanded_normal_100 },
562 { condensed_italic_900, expanded_normal_100 },
563 { expanded_normal_100, expanded_normal_100 },
564 { expanded_normal_900, expanded_normal_100 },
565 { expanded_italic_100, expanded_normal_100 },
566 { expanded_italic_900, expanded_normal_100 },
567 },
568 },
569
570 {
571 { expanded_normal_900 },
572 {
573 { condensed_normal_100, expanded_normal_900 },
574 { condensed_normal_900, expanded_normal_900 },
575 { condensed_italic_100, expanded_normal_900 },
576 { condensed_italic_900, expanded_normal_900 },
577 { expanded_normal_100, expanded_normal_900 },
578 { expanded_normal_900, expanded_normal_900 },
579 { expanded_italic_100, expanded_normal_900 },
580 { expanded_italic_900, expanded_normal_900 },
581 },
582 },
583
584 {
585 { expanded_italic_100,expanded_italic_900 },
586 {
587 { condensed_normal_100, expanded_italic_100 },
588 { condensed_normal_900, expanded_italic_900 },
589 { condensed_italic_100, expanded_italic_100 },
590 { condensed_italic_900, expanded_italic_900 },
591 { expanded_normal_100, expanded_italic_100 },
592 { expanded_normal_900, expanded_italic_900 },
593 { expanded_italic_100, expanded_italic_100 },
594 { expanded_italic_900, expanded_italic_900 },
595 },
596 },
597
598 {
599 { expanded_italic_100 },
600 {
601 { condensed_normal_100, expanded_italic_100 },
602 { condensed_normal_900, expanded_italic_100 },
603 { condensed_italic_100, expanded_italic_100 },
604 { condensed_italic_900, expanded_italic_100 },
605 { expanded_normal_100, expanded_italic_100 },
606 { expanded_normal_900, expanded_italic_100 },
607 { expanded_italic_100, expanded_italic_100 },
608 { expanded_italic_900, expanded_italic_100 },
609 },
610 },
611
612 {
613 { expanded_italic_900 },
614 {
615 { condensed_normal_100, expanded_italic_900 },
616 { condensed_normal_900, expanded_italic_900 },
617 { condensed_italic_100, expanded_italic_900 },
618 { condensed_italic_900, expanded_italic_900 },
619 { expanded_normal_100, expanded_italic_900 },
620 { expanded_normal_900, expanded_italic_900 },
621 { expanded_italic_100, expanded_italic_900 },
622 { expanded_italic_900, expanded_italic_900 },
623 },
624 },
625
626 {
627 { normal_normal_100, normal_normal_900 },
628 {
629 { normal_normal_300, normal_normal_100 },
630 { normal_normal_400, normal_normal_100 },
631 { normal_normal_500, normal_normal_100 },
632 { normal_normal_600, normal_normal_900 },
633 },
634 },
635
636 {
637 { normal_normal_100, normal_normal_400, normal_normal_900 },
638 {
639 { normal_normal_300, normal_normal_100 },
640 { normal_normal_400, normal_normal_400 },
641 { normal_normal_500, normal_normal_400 },
642 { normal_normal_600, normal_normal_900 },
643 },
644 },
645
646 {
647 { normal_normal_100, normal_normal_500, normal_normal_900 },
648 {
649 { normal_normal_300, normal_normal_100 },
650 { normal_normal_400, normal_normal_500 },
651 { normal_normal_500, normal_normal_500 },
652 { normal_normal_600, normal_normal_900 },
653 },
654 },
655
656 {
657 { },
658 {
659 { normal_normal_300, invalidFontStyle },
660 { normal_normal_400, invalidFontStyle },
661 { normal_normal_500, invalidFontStyle },
662 { normal_normal_600, invalidFontStyle },
663 },
664 },
bungemanb4bb7d82016-04-27 10:21:04 -0700665 {
666 { expanded_normal_100,expanded_normal_900,
667 expanded_italic_100,expanded_italic_900,
668 expanded_obliqu_100,expanded_obliqu_900, },
669 {
670 { condensed_normal_100, expanded_normal_100 },
671 { condensed_normal_900, expanded_normal_900 },
672 { condensed_italic_100, expanded_italic_100 },
673 { condensed_italic_900, expanded_italic_900 },
674 { condensed_obliqu_100, expanded_obliqu_100 },
675 { condensed_obliqu_900, expanded_obliqu_900 },
676 { expanded_normal_100, expanded_normal_100 },
677 { expanded_normal_900, expanded_normal_900 },
678 { expanded_italic_100, expanded_italic_100 },
679 { expanded_italic_900, expanded_italic_900 },
680 { expanded_obliqu_100, expanded_obliqu_100 },
681 { expanded_obliqu_900, expanded_obliqu_900 },
682 },
683 },
684 {
685 { expanded_normal_100,expanded_normal_900,
686 expanded_obliqu_100,expanded_obliqu_900, },
687 {
688 { condensed_normal_100, expanded_normal_100 },
689 { condensed_normal_900, expanded_normal_900 },
690 { condensed_italic_100, expanded_obliqu_100 },
691 { condensed_italic_900, expanded_obliqu_900 },
692 { condensed_obliqu_100, expanded_obliqu_100 },
693 { condensed_obliqu_900, expanded_obliqu_900 },
694 { expanded_normal_100, expanded_normal_100 },
695 { expanded_normal_900, expanded_normal_900 },
696 { expanded_italic_100, expanded_obliqu_100 },
697 { expanded_italic_900, expanded_obliqu_900 },
698 { expanded_obliqu_100, expanded_obliqu_100 },
699 { expanded_obliqu_900, expanded_obliqu_900 },
700 },
701 },
702 {
703 { expanded_italic_100,expanded_italic_900,
704 expanded_obliqu_100,expanded_obliqu_900, },
705 {
706 { condensed_normal_100, expanded_obliqu_100 },
707 { condensed_normal_900, expanded_obliqu_900 },
708 { condensed_italic_100, expanded_italic_100 },
709 { condensed_italic_900, expanded_italic_900 },
710 { condensed_obliqu_100, expanded_obliqu_100 },
711 { condensed_obliqu_900, expanded_obliqu_900 },
712 { expanded_normal_100, expanded_obliqu_100 },
713 { expanded_normal_900, expanded_obliqu_900 },
714 { expanded_italic_100, expanded_italic_100 },
715 { expanded_italic_900, expanded_italic_900 },
716 { expanded_obliqu_100, expanded_obliqu_100 },
717 { expanded_obliqu_900, expanded_obliqu_900 },
718 },
719 },
bungeman147ea2f2015-11-12 09:50:08 -0800720 };
721
722 for (StyleSetTest& test : tests) {
Mike Klein6ad99092016-10-26 10:35:22 -0400723 for (const StyleSetTest::Case& testCase : test.cases) {
Hal Canary342b7ac2016-11-04 11:49:42 -0400724 sk_sp<SkTypeface> typeface(test.styleSet.matchStyle(testCase.pattern));
bungeman147ea2f2015-11-12 09:50:08 -0800725 if (typeface) {
726 REPORTER_ASSERT(reporter, typeface->fontStyle() == testCase.expectedResult);
727 } else {
728 REPORTER_ASSERT(reporter, invalidFontStyle == testCase.expectedResult);
729 }
730 }
731 }
732}
733
reed@google.com66c9f992013-04-11 19:04:34 +0000734DEFINE_bool(verboseFontMgr, false, "run verbose fontmgr tests.");
reed@google.com83165a52013-04-11 18:31:25 +0000735
tfarina@chromium.orge4fafb12013-12-12 21:11:12 +0000736DEF_TEST(FontMgr, reporter) {
bungeman7575bb12017-05-01 13:02:42 -0400737 test_match(reporter);
bungeman147ea2f2015-11-12 09:50:08 -0800738 test_matchStyleCSS3(reporter);
reed@google.com83165a52013-04-11 18:31:25 +0000739 test_fontiter(reporter, FLAGS_verboseFontMgr);
reed@google.comc1a81eb2013-09-19 18:06:03 +0000740 test_alias_names(reporter);
reed@google.com43c27582014-04-08 15:04:29 +0000741 test_font(reporter);
reed@google.com83165a52013-04-11 18:31:25 +0000742}