• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 
8 #include "SkCommandLineFlags.h"
9 #include "SkFontMgr.h"
10 #include "SkTypeface.h"
11 #include "Test.h"
12 
13 #include "SkFont.h"
14 #include "SkPaint.h"
15 
16 #include <initializer_list>
17 #include <limits>
18 #include <vector>
19 
test_font(skiatest::Reporter * reporter)20 static void test_font(skiatest::Reporter* reporter) {
21     uint32_t flags = 0;
22     sk_sp<SkFont> font(SkFont::Make(nullptr, 24, SkFont::kA8_MaskType, flags));
23 
24     REPORTER_ASSERT(reporter, font->getTypeface());
25     REPORTER_ASSERT(reporter, 24 == font->getSize());
26     REPORTER_ASSERT(reporter, 1 == font->getScaleX());
27     REPORTER_ASSERT(reporter, 0 == font->getSkewX());
28     REPORTER_ASSERT(reporter, SkFont::kA8_MaskType == font->getMaskType());
29 
30     uint16_t glyphs[5];
31     sk_bzero(glyphs, sizeof(glyphs));
32 
33     int count = font->textToGlyphs("Hello", 5, kUTF8_SkTextEncoding, glyphs, SK_ARRAY_COUNT(glyphs));
34 
35     REPORTER_ASSERT(reporter, 5 == count);
36     for (int i = 0; i < count; ++i) {
37         REPORTER_ASSERT(reporter, 0 != glyphs[i]);
38     }
39     REPORTER_ASSERT(reporter, glyphs[0] != glyphs[1]); // 'h' != 'e'
40     REPORTER_ASSERT(reporter, glyphs[2] == glyphs[3]); // 'l' == 'l'
41 
42     sk_sp<SkFont> newFont(font->makeWithSize(36));
43     REPORTER_ASSERT(reporter, newFont.get());
44     REPORTER_ASSERT(reporter, font->getTypeface() == newFont->getTypeface());
45     REPORTER_ASSERT(reporter, 36 == newFont->getSize());   // double check we haven't changed
46     REPORTER_ASSERT(reporter, 24 == font->getSize());   // double check we haven't changed
47 
48     SkPaint paint;
49     paint.setTextSize(18);
50     font = SkFont::Testing_CreateFromPaint(paint);
51     REPORTER_ASSERT(reporter, font.get());
52     REPORTER_ASSERT(reporter, font->getSize() == paint.getTextSize());
53     REPORTER_ASSERT(reporter, SkFont::kBW_MaskType == font->getMaskType());
54 }
55 
56 /*
57  *  If the font backend is going to "alias" some font names to other fonts
58  *  (e.g. sans -> Arial) then we want to at least get the same typeface back
59  *  if we request the alias name multiple times.
60  */
test_alias_names(skiatest::Reporter * reporter)61 static void test_alias_names(skiatest::Reporter* reporter) {
62     const char* inNames[] = {
63         "sans", "sans-serif", "serif", "monospace", "times", "helvetica"
64     };
65 
66     for (size_t i = 0; i < SK_ARRAY_COUNT(inNames); ++i) {
67         sk_sp<SkTypeface> first(SkTypeface::MakeFromName(inNames[i], SkFontStyle()));
68         if (nullptr == first.get()) {
69             continue;
70         }
71         for (int j = 0; j < 10; ++j) {
72             sk_sp<SkTypeface> face(SkTypeface::MakeFromName(inNames[i], SkFontStyle()));
73     #if 0
74             SkString name;
75             face->getFamilyName(&name);
76             printf("request %s, received %s, first id %x received %x\n",
77                    inNames[i], name.c_str(), first->uniqueID(), face->uniqueID());
78     #endif
79             REPORTER_ASSERT(reporter, first->uniqueID() == face->uniqueID());
80         }
81     }
82 }
83 
test_fontiter(skiatest::Reporter * reporter,bool verbose)84 static void test_fontiter(skiatest::Reporter* reporter, bool verbose) {
85     sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
86     int count = fm->countFamilies();
87 
88     for (int i = 0; i < count; ++i) {
89         SkString fname;
90         fm->getFamilyName(i, &fname);
91 
92         sk_sp<SkFontStyleSet> fnset(fm->matchFamily(fname.c_str()));
93         sk_sp<SkFontStyleSet> set(fm->createStyleSet(i));
94         REPORTER_ASSERT(reporter, fnset->count() == set->count());
95 
96         if (verbose) {
97             SkDebugf("[%2d] %s\n", i, fname.c_str());
98         }
99 
100         for (int j = 0; j < set->count(); ++j) {
101             SkString sname;
102             SkFontStyle fs;
103             set->getStyle(j, &fs, &sname);
104 //            REPORTER_ASSERT(reporter, sname.size() > 0);
105 
106             sk_sp<SkTypeface> face(set->createTypeface(j));
107 //            REPORTER_ASSERT(reporter, face.get());
108 
109             if (verbose) {
110                 SkDebugf("\t[%d] %s [%3d %d %d]\n", j, sname.c_str(),
111                          fs.weight(), fs.width(), fs.slant());
112             }
113         }
114     }
115 }
116 
test_matchStyleCSS3(skiatest::Reporter * reporter)117 static void test_matchStyleCSS3(skiatest::Reporter* reporter) {
118     static const SkFontStyle invalidFontStyle(101, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
119 
120     class TestTypeface : public SkTypeface {
121     public:
122         TestTypeface(const SkFontStyle& fontStyle) : SkTypeface(fontStyle, false){}
123     protected:
124         SkStreamAsset* onOpenStream(int* ttcIndex) const override { return nullptr; }
125         SkScalerContext* onCreateScalerContext(const SkScalerContextEffects&,
126                                                const SkDescriptor*) const override {
127             return nullptr;
128         }
129         void onFilterRec(SkScalerContextRec*) const override { }
130         virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics(
131             PerGlyphInfo,
132             const uint32_t*, uint32_t) const override { return nullptr; }
133         void onGetFontDescriptor(SkFontDescriptor*, bool*) const override { }
134         virtual int onCharsToGlyphs(const void* chars, Encoding encoding,
135             uint16_t glyphs[], int glyphCount) const override {
136             if (glyphs && glyphCount > 0) {
137                 sk_bzero(glyphs, glyphCount * sizeof(glyphs[0]));
138             }
139             return 0;
140         }
141         int onCountGlyphs() const override { return 0; }
142         int onGetUPEM() const override { return 0; }
143         class EmptyLocalizedStrings : public SkTypeface::LocalizedStrings {
144         public:
145             bool next(SkTypeface::LocalizedString*) override { return false; }
146         };
147         void onGetFamilyName(SkString* familyName) const override {
148             familyName->reset();
149         }
150         SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override {
151             return new EmptyLocalizedStrings;
152         }
153         int onGetVariationDesignPosition(
154                 SkFontArguments::VariationPosition::Coordinate coordinates[],
155                 int coordinateCount) const override
156         {
157             return 0;
158         }
159         int onGetTableTags(SkFontTableTag tags[]) const override { return 0; }
160         size_t onGetTableData(SkFontTableTag, size_t, size_t, void*) const override {
161             return 0;
162         }
163     };
164 
165     class TestFontStyleSet : public SkFontStyleSet {
166     public:
167         TestFontStyleSet(std::initializer_list<SkFontStyle> styles) : fStyles(styles) {}
168         int count() override { return static_cast<int>(fStyles.size()); }
169         void getStyle(int index, SkFontStyle* style, SkString*) override {
170             if (style) {
171                 *style = fStyles[index];
172             }
173         }
174         SkTypeface* createTypeface(int index) override {
175             if (index < 0 || this->count() <= index) {
176                 return new TestTypeface(invalidFontStyle);
177             }
178             return new TestTypeface(fStyles[index]);
179         }
180         SkTypeface* matchStyle(const SkFontStyle& pattern) override {
181             return this->matchStyleCSS3(pattern);
182         }
183     private:
184         std::vector<SkFontStyle> fStyles;
185     };
186 
187     SkFontStyle condensed_normal_100(SkFontStyle::kThin_Weight,  SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
188     SkFontStyle condensed_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
189     SkFontStyle condensed_italic_100(SkFontStyle::kThin_Weight,  SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
190     SkFontStyle condensed_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
191     SkFontStyle condensed_obliqu_100(SkFontStyle::kThin_Weight,  SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
192     SkFontStyle condensed_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
193     SkFontStyle  expanded_normal_100(SkFontStyle::kThin_Weight,  SkFontStyle::kExpanded_Width,  SkFontStyle::kUpright_Slant);
194     SkFontStyle  expanded_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width,  SkFontStyle::kUpright_Slant);
195     SkFontStyle  expanded_italic_100(SkFontStyle::kThin_Weight,  SkFontStyle::kExpanded_Width,  SkFontStyle::kItalic_Slant);
196     SkFontStyle  expanded_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width,  SkFontStyle::kItalic_Slant);
197     SkFontStyle  expanded_obliqu_100(SkFontStyle::kThin_Weight,  SkFontStyle::kExpanded_Width,  SkFontStyle::kOblique_Slant);
198     SkFontStyle  expanded_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width,  SkFontStyle::kOblique_Slant);
199 
200     SkFontStyle normal_normal_100(SkFontStyle::kThin_Weight,       SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
201     SkFontStyle normal_normal_200(SkFontStyle::kExtraLight_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
202     SkFontStyle normal_normal_300(SkFontStyle::kLight_Weight,      SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
203     SkFontStyle normal_normal_400(SkFontStyle::kNormal_Weight,     SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
204     SkFontStyle normal_normal_500(SkFontStyle::kMedium_Weight,     SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
205     SkFontStyle normal_normal_600(SkFontStyle::kSemiBold_Weight,   SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
206     SkFontStyle normal_normal_700(SkFontStyle::kBold_Weight,       SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
207     SkFontStyle normal_normal_800(SkFontStyle::kExtraBold_Weight,  SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
208     SkFontStyle normal_normal_900(SkFontStyle::kBlack_Weight,      SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
209 
210     struct StyleSetTest {
211         TestFontStyleSet styleSet;
212         struct Case {
213             SkFontStyle pattern;
214             SkFontStyle expectedResult;
215         };
216         std::vector<Case> cases;
217     } tests[] = {
218         {
219             { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900,
220                expanded_normal_100, expanded_normal_900, expanded_italic_100, expanded_italic_900 },
221             {
222                 { condensed_normal_100, condensed_normal_100 },
223                 { condensed_normal_900, condensed_normal_900 },
224                 { condensed_italic_100, condensed_italic_100 },
225                 { condensed_italic_900, condensed_italic_900 },
226                 { expanded_normal_100, expanded_normal_100 },
227                 { expanded_normal_900, expanded_normal_900 },
228                 { expanded_italic_100, expanded_italic_100 },
229                 { expanded_italic_900, expanded_italic_900 },
230             },
231         },
232 
233         {
234             { condensed_normal_100,condensed_italic_100,expanded_normal_100,expanded_italic_100 },
235             {
236                 { condensed_normal_100, condensed_normal_100 },
237                 { condensed_normal_900, condensed_normal_100 },
238                 { condensed_italic_100, condensed_italic_100 },
239                 { condensed_italic_900, condensed_italic_100 },
240                 { expanded_normal_100, expanded_normal_100 },
241                 { expanded_normal_900, expanded_normal_100 },
242                 { expanded_italic_100, expanded_italic_100 },
243                 { expanded_italic_900, expanded_italic_100 },
244             },
245         },
246 
247         {
248             { condensed_normal_900,condensed_italic_900,expanded_normal_900,expanded_italic_900 },
249             {
250                 { condensed_normal_100, condensed_normal_900 },
251                 { condensed_normal_900, condensed_normal_900 },
252                 { condensed_italic_100, condensed_italic_900 },
253                 { condensed_italic_900, condensed_italic_900 },
254                 { expanded_normal_100, expanded_normal_900 },
255                 { expanded_normal_900, expanded_normal_900 },
256                 { expanded_italic_100, expanded_italic_900 },
257                 { expanded_italic_900, expanded_italic_900 },
258             },
259         },
260 
261         {
262             { condensed_normal_100,condensed_normal_900,expanded_normal_100,expanded_normal_900 },
263             {
264                 { condensed_normal_100, condensed_normal_100 },
265                 { condensed_normal_900, condensed_normal_900 },
266                 { condensed_italic_100, condensed_normal_100 },
267                 { condensed_italic_900, condensed_normal_900 },
268                 { expanded_normal_100, expanded_normal_100 },
269                 { expanded_normal_900, expanded_normal_900 },
270                 { expanded_italic_100, expanded_normal_100 },
271                 { expanded_italic_900, expanded_normal_900 },
272             },
273         },
274 
275         {
276             { condensed_normal_100,expanded_normal_100 },
277             {
278                 { condensed_normal_100, condensed_normal_100 },
279                 { condensed_normal_900, condensed_normal_100 },
280                 { condensed_italic_100, condensed_normal_100 },
281                 { condensed_italic_900, condensed_normal_100 },
282                 { expanded_normal_100, expanded_normal_100 },
283                 { expanded_normal_900, expanded_normal_100 },
284                 { expanded_italic_100, expanded_normal_100 },
285                 { expanded_italic_900, expanded_normal_100 },
286             },
287         },
288 
289         {
290             { condensed_normal_900,expanded_normal_900 },
291             {
292                 { condensed_normal_100, condensed_normal_900 },
293                 { condensed_normal_900, condensed_normal_900 },
294                 { condensed_italic_100, condensed_normal_900 },
295                 { condensed_italic_900, condensed_normal_900 },
296                 { expanded_normal_100, expanded_normal_900 },
297                 { expanded_normal_900, expanded_normal_900 },
298                 { expanded_italic_100, expanded_normal_900 },
299                 { expanded_italic_900, expanded_normal_900 },
300             },
301         },
302 
303         {
304             { condensed_italic_100,condensed_italic_900,expanded_italic_100,expanded_italic_900 },
305             {
306                 { condensed_normal_100, condensed_italic_100 },
307                 { condensed_normal_900, condensed_italic_900 },
308                 { condensed_italic_100, condensed_italic_100 },
309                 { condensed_italic_900, condensed_italic_900 },
310                 { expanded_normal_100, expanded_italic_100 },
311                 { expanded_normal_900, expanded_italic_900 },
312                 { expanded_italic_100, expanded_italic_100 },
313                 { expanded_italic_900, expanded_italic_900 },
314             },
315         },
316 
317         {
318             { condensed_italic_100,expanded_italic_100 },
319             {
320                 { condensed_normal_100, condensed_italic_100 },
321                 { condensed_normal_900, condensed_italic_100 },
322                 { condensed_italic_100, condensed_italic_100 },
323                 { condensed_italic_900, condensed_italic_100 },
324                 { expanded_normal_100, expanded_italic_100 },
325                 { expanded_normal_900, expanded_italic_100 },
326                 { expanded_italic_100, expanded_italic_100 },
327                 { expanded_italic_900, expanded_italic_100 },
328             },
329         },
330 
331         {
332             { condensed_italic_900,expanded_italic_900 },
333             {
334                 { condensed_normal_100, condensed_italic_900 },
335                 { condensed_normal_900, condensed_italic_900 },
336                 { condensed_italic_100, condensed_italic_900 },
337                 { condensed_italic_900, condensed_italic_900 },
338                 { expanded_normal_100, expanded_italic_900 },
339                 { expanded_normal_900, expanded_italic_900 },
340                 { expanded_italic_100, expanded_italic_900 },
341                 { expanded_italic_900, expanded_italic_900 },
342             },
343         },
344 
345         {
346             { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900 },
347             {
348                 { condensed_normal_100, condensed_normal_100 },
349                 { condensed_normal_900, condensed_normal_900 },
350                 { condensed_italic_100, condensed_italic_100 },
351                 { condensed_italic_900, condensed_italic_900 },
352                 { expanded_normal_100, condensed_normal_100 },
353                 { expanded_normal_900, condensed_normal_900 },
354                 { expanded_italic_100, condensed_italic_100 },
355                 { expanded_italic_900, condensed_italic_900 },
356             },
357         },
358 
359         {
360             { condensed_normal_100,condensed_italic_100 },
361             {
362                 { condensed_normal_100, condensed_normal_100 },
363                 { condensed_normal_900, condensed_normal_100 },
364                 { condensed_italic_100, condensed_italic_100 },
365                 { condensed_italic_900, condensed_italic_100 },
366                 { expanded_normal_100, condensed_normal_100 },
367                 { expanded_normal_900, condensed_normal_100 },
368                 { expanded_italic_100, condensed_italic_100 },
369                 { expanded_italic_900, condensed_italic_100 },
370             },
371         },
372 
373         {
374             { condensed_normal_900,condensed_italic_900 },
375             {
376                 { condensed_normal_100, condensed_normal_900 },
377                 { condensed_normal_900, condensed_normal_900 },
378                 { condensed_italic_100, condensed_italic_900 },
379                 { condensed_italic_900, condensed_italic_900 },
380                 { expanded_normal_100, condensed_normal_900 },
381                 { expanded_normal_900, condensed_normal_900 },
382                 { expanded_italic_100, condensed_italic_900 },
383                 { expanded_italic_900, condensed_italic_900 },
384             },
385         },
386 
387         {
388             { condensed_normal_100,condensed_normal_900 },
389             {
390                 { condensed_normal_100, condensed_normal_100 },
391                 { condensed_normal_900, condensed_normal_900 },
392                 { condensed_italic_100, condensed_normal_100 },
393                 { condensed_italic_900, condensed_normal_900 },
394                 { expanded_normal_100, condensed_normal_100 },
395                 { expanded_normal_900, condensed_normal_900 },
396                 { expanded_italic_100, condensed_normal_100 },
397                 { expanded_italic_900, condensed_normal_900 },
398             },
399         },
400 
401         {
402             { condensed_normal_100 },
403             {
404                 { condensed_normal_100, condensed_normal_100 },
405                 { condensed_normal_900, condensed_normal_100 },
406                 { condensed_italic_100, condensed_normal_100 },
407                 { condensed_italic_900, condensed_normal_100 },
408                 { expanded_normal_100, condensed_normal_100 },
409                 { expanded_normal_900, condensed_normal_100 },
410                 { expanded_italic_100, condensed_normal_100 },
411                 { expanded_italic_900, condensed_normal_100 },
412             },
413         },
414 
415         {
416             { condensed_normal_900 },
417             {
418                 { condensed_normal_100, condensed_normal_900 },
419                 { condensed_normal_900, condensed_normal_900 },
420                 { condensed_italic_100, condensed_normal_900 },
421                 { condensed_italic_900, condensed_normal_900 },
422                 { expanded_normal_100, condensed_normal_900 },
423                 { expanded_normal_900, condensed_normal_900 },
424                 { expanded_italic_100, condensed_normal_900 },
425                 { expanded_italic_900, condensed_normal_900 },
426             },
427         },
428 
429         {
430             { condensed_italic_100,condensed_italic_900 },
431             {
432                 { condensed_normal_100, condensed_italic_100 },
433                 { condensed_normal_900, condensed_italic_900 },
434                 { condensed_italic_100, condensed_italic_100 },
435                 { condensed_italic_900, condensed_italic_900 },
436                 { expanded_normal_100, condensed_italic_100 },
437                 { expanded_normal_900, condensed_italic_900 },
438                 { expanded_italic_100, condensed_italic_100 },
439                 { expanded_italic_900, condensed_italic_900 },
440             },
441         },
442 
443         {
444             { condensed_italic_100 },
445             {
446                 { condensed_normal_100, condensed_italic_100 },
447                 { condensed_normal_900, condensed_italic_100 },
448                 { condensed_italic_100, condensed_italic_100 },
449                 { condensed_italic_900, condensed_italic_100 },
450                 { expanded_normal_100, condensed_italic_100 },
451                 { expanded_normal_900, condensed_italic_100 },
452                 { expanded_italic_100, condensed_italic_100 },
453                 { expanded_italic_900, condensed_italic_100 },
454             },
455         },
456 
457         {
458             { condensed_italic_900 },
459             {
460                 { condensed_normal_100, condensed_italic_900 },
461                 { condensed_normal_900, condensed_italic_900 },
462                 { condensed_italic_100, condensed_italic_900 },
463                 { condensed_italic_900, condensed_italic_900 },
464                 { expanded_normal_100, condensed_italic_900 },
465                 { expanded_normal_900, condensed_italic_900 },
466                 { expanded_italic_100, condensed_italic_900 },
467                 { expanded_italic_900, condensed_italic_900 },
468             },
469         },
470 
471         {
472             { expanded_normal_100,expanded_normal_900,
473               expanded_italic_100,expanded_italic_900 },
474             {
475                 { condensed_normal_100, expanded_normal_100 },
476                 { condensed_normal_900, expanded_normal_900 },
477                 { condensed_italic_100, expanded_italic_100 },
478                 { condensed_italic_900, expanded_italic_900 },
479                 { condensed_obliqu_100, expanded_italic_100 },
480                 { condensed_obliqu_900, expanded_italic_900 },
481                 { expanded_normal_100, expanded_normal_100 },
482                 { expanded_normal_900, expanded_normal_900 },
483                 { expanded_italic_100, expanded_italic_100 },
484                 { expanded_italic_900, expanded_italic_900 },
485                 { expanded_obliqu_100, expanded_italic_100 },
486                 { expanded_obliqu_900, expanded_italic_900 },
487             },
488         },
489 
490         {
491             { expanded_normal_100,expanded_italic_100 },
492             {
493                 { condensed_normal_100, expanded_normal_100 },
494                 { condensed_normal_900, expanded_normal_100 },
495                 { condensed_italic_100, expanded_italic_100 },
496                 { condensed_italic_900, expanded_italic_100 },
497                 { expanded_normal_100, expanded_normal_100 },
498                 { expanded_normal_900, expanded_normal_100 },
499                 { expanded_italic_100, expanded_italic_100 },
500                 { expanded_italic_900, expanded_italic_100 },
501             },
502         },
503 
504         {
505             { expanded_normal_900,expanded_italic_900 },
506             {
507                 { condensed_normal_100, expanded_normal_900 },
508                 { condensed_normal_900, expanded_normal_900 },
509                 { condensed_italic_100, expanded_italic_900 },
510                 { condensed_italic_900, expanded_italic_900 },
511                 { expanded_normal_100, expanded_normal_900 },
512                 { expanded_normal_900, expanded_normal_900 },
513                 { expanded_italic_100, expanded_italic_900 },
514                 { expanded_italic_900, expanded_italic_900 },
515             },
516         },
517 
518         {
519             { expanded_normal_100,expanded_normal_900 },
520             {
521                 { condensed_normal_100, expanded_normal_100 },
522                 { condensed_normal_900, expanded_normal_900 },
523                 { condensed_italic_100, expanded_normal_100 },
524                 { condensed_italic_900, expanded_normal_900 },
525                 { expanded_normal_100, expanded_normal_100 },
526                 { expanded_normal_900, expanded_normal_900 },
527                 { expanded_italic_100, expanded_normal_100 },
528                 { expanded_italic_900, expanded_normal_900 },
529             },
530         },
531 
532         {
533             { expanded_normal_100 },
534             {
535                 { condensed_normal_100, expanded_normal_100 },
536                 { condensed_normal_900, expanded_normal_100 },
537                 { condensed_italic_100, expanded_normal_100 },
538                 { condensed_italic_900, expanded_normal_100 },
539                 { expanded_normal_100, expanded_normal_100 },
540                 { expanded_normal_900, expanded_normal_100 },
541                 { expanded_italic_100, expanded_normal_100 },
542                 { expanded_italic_900, expanded_normal_100 },
543             },
544         },
545 
546         {
547             { expanded_normal_900 },
548             {
549                 { condensed_normal_100, expanded_normal_900 },
550                 { condensed_normal_900, expanded_normal_900 },
551                 { condensed_italic_100, expanded_normal_900 },
552                 { condensed_italic_900, expanded_normal_900 },
553                 { expanded_normal_100, expanded_normal_900 },
554                 { expanded_normal_900, expanded_normal_900 },
555                 { expanded_italic_100, expanded_normal_900 },
556                 { expanded_italic_900, expanded_normal_900 },
557             },
558         },
559 
560         {
561             { expanded_italic_100,expanded_italic_900 },
562             {
563                 { condensed_normal_100, expanded_italic_100 },
564                 { condensed_normal_900, expanded_italic_900 },
565                 { condensed_italic_100, expanded_italic_100 },
566                 { condensed_italic_900, expanded_italic_900 },
567                 { expanded_normal_100, expanded_italic_100 },
568                 { expanded_normal_900, expanded_italic_900 },
569                 { expanded_italic_100, expanded_italic_100 },
570                 { expanded_italic_900, expanded_italic_900 },
571             },
572         },
573 
574         {
575             { expanded_italic_100 },
576             {
577                 { condensed_normal_100, expanded_italic_100 },
578                 { condensed_normal_900, expanded_italic_100 },
579                 { condensed_italic_100, expanded_italic_100 },
580                 { condensed_italic_900, expanded_italic_100 },
581                 { expanded_normal_100, expanded_italic_100 },
582                 { expanded_normal_900, expanded_italic_100 },
583                 { expanded_italic_100, expanded_italic_100 },
584                 { expanded_italic_900, expanded_italic_100 },
585             },
586         },
587 
588         {
589             { expanded_italic_900 },
590             {
591                 { condensed_normal_100, expanded_italic_900 },
592                 { condensed_normal_900, expanded_italic_900 },
593                 { condensed_italic_100, expanded_italic_900 },
594                 { condensed_italic_900, expanded_italic_900 },
595                 { expanded_normal_100, expanded_italic_900 },
596                 { expanded_normal_900, expanded_italic_900 },
597                 { expanded_italic_100, expanded_italic_900 },
598                 { expanded_italic_900, expanded_italic_900 },
599             },
600         },
601 
602         {
603             { normal_normal_100, normal_normal_900 },
604             {
605                 { normal_normal_300, normal_normal_100 },
606                 { normal_normal_400, normal_normal_100 },
607                 { normal_normal_500, normal_normal_100 },
608                 { normal_normal_600, normal_normal_900 },
609             },
610         },
611 
612         {
613             { normal_normal_100, normal_normal_400, normal_normal_900 },
614             {
615                 { normal_normal_300, normal_normal_100 },
616                 { normal_normal_400, normal_normal_400 },
617                 { normal_normal_500, normal_normal_400 },
618                 { normal_normal_600, normal_normal_900 },
619             },
620         },
621 
622         {
623             { normal_normal_100, normal_normal_500, normal_normal_900 },
624             {
625                 { normal_normal_300, normal_normal_100 },
626                 { normal_normal_400, normal_normal_500 },
627                 { normal_normal_500, normal_normal_500 },
628                 { normal_normal_600, normal_normal_900 },
629             },
630         },
631 
632         {
633             { },
634             {
635                 { normal_normal_300, invalidFontStyle },
636                 { normal_normal_400, invalidFontStyle },
637                 { normal_normal_500, invalidFontStyle },
638                 { normal_normal_600, invalidFontStyle },
639             },
640         },
641         {
642             { expanded_normal_100,expanded_normal_900,
643               expanded_italic_100,expanded_italic_900,
644               expanded_obliqu_100,expanded_obliqu_900, },
645             {
646                 { condensed_normal_100, expanded_normal_100 },
647                 { condensed_normal_900, expanded_normal_900 },
648                 { condensed_italic_100, expanded_italic_100 },
649                 { condensed_italic_900, expanded_italic_900 },
650                 { condensed_obliqu_100, expanded_obliqu_100 },
651                 { condensed_obliqu_900, expanded_obliqu_900 },
652                 { expanded_normal_100, expanded_normal_100 },
653                 { expanded_normal_900, expanded_normal_900 },
654                 { expanded_italic_100, expanded_italic_100 },
655                 { expanded_italic_900, expanded_italic_900 },
656                 { expanded_obliqu_100, expanded_obliqu_100 },
657                 { expanded_obliqu_900, expanded_obliqu_900 },
658             },
659         },
660         {
661             { expanded_normal_100,expanded_normal_900,
662               expanded_obliqu_100,expanded_obliqu_900, },
663             {
664                 { condensed_normal_100, expanded_normal_100 },
665                 { condensed_normal_900, expanded_normal_900 },
666                 { condensed_italic_100, expanded_obliqu_100 },
667                 { condensed_italic_900, expanded_obliqu_900 },
668                 { condensed_obliqu_100, expanded_obliqu_100 },
669                 { condensed_obliqu_900, expanded_obliqu_900 },
670                 { expanded_normal_100, expanded_normal_100 },
671                 { expanded_normal_900, expanded_normal_900 },
672                 { expanded_italic_100, expanded_obliqu_100 },
673                 { expanded_italic_900, expanded_obliqu_900 },
674                 { expanded_obliqu_100, expanded_obliqu_100 },
675                 { expanded_obliqu_900, expanded_obliqu_900 },
676             },
677         },
678         {
679             { expanded_italic_100,expanded_italic_900,
680               expanded_obliqu_100,expanded_obliqu_900, },
681             {
682                 { condensed_normal_100, expanded_obliqu_100 },
683                 { condensed_normal_900, expanded_obliqu_900 },
684                 { condensed_italic_100, expanded_italic_100 },
685                 { condensed_italic_900, expanded_italic_900 },
686                 { condensed_obliqu_100, expanded_obliqu_100 },
687                 { condensed_obliqu_900, expanded_obliqu_900 },
688                 { expanded_normal_100, expanded_obliqu_100 },
689                 { expanded_normal_900, expanded_obliqu_900 },
690                 { expanded_italic_100, expanded_italic_100 },
691                 { expanded_italic_900, expanded_italic_900 },
692                 { expanded_obliqu_100, expanded_obliqu_100 },
693                 { expanded_obliqu_900, expanded_obliqu_900 },
694             },
695         },
696     };
697 
698     for (StyleSetTest& test : tests) {
699         for (const StyleSetTest::Case& testCase : test.cases) {
700             sk_sp<SkTypeface> typeface(test.styleSet.matchStyle(testCase.pattern));
701             if (typeface) {
702                 REPORTER_ASSERT(reporter, typeface->fontStyle() == testCase.expectedResult);
703             } else {
704                 REPORTER_ASSERT(reporter, invalidFontStyle == testCase.expectedResult);
705             }
706         }
707     }
708 }
709 
710 DEFINE_bool(verboseFontMgr, false, "run verbose fontmgr tests.");
711 
DEF_TEST(FontMgr,reporter)712 DEF_TEST(FontMgr, reporter) {
713     test_matchStyleCSS3(reporter);
714     test_fontiter(reporter, FLAGS_verboseFontMgr);
715     test_alias_names(reporter);
716     test_font(reporter);
717 }
718