Home | History | Annotate | Download | only in tests
      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 
     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  */
     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 
     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 
    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 
    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