1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2013 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkCommandLineFlags.h"
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkFontMgr.h"
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkOTTable_name.h"
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTypeface.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "Test.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include <stddef.h>
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robottemplate <size_t R, size_t D> struct Format0NameTable {
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkOTTableName header;
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkOTTableName::Record nameRecord[R];
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    char data[D];
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robottemplate <size_t R, size_t L, size_t D> struct Format1NameTable {
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkOTTableName header;
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkOTTableName::Record nameRecord[R];
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    struct {
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkOTTableName::Format1Ext header;
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkOTTableName::Format1Ext::LangTagRecord langTagRecord[L];
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    } format1ext;
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    char data[D];
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robottypedef Format0NameTable<1, 9> SimpleFormat0NameTable;
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotSimpleFormat0NameTable simpleFormat0NameTable = {
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /*header*/ {
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /*format*/ SkOTTableName::format_0,
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /*count*/ SkTEndianSwap16<1>::value,
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /*stringOffset*/ SkTEndianSwap16<offsetof(SimpleFormat0NameTable, data)>::value,
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    },
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /*nameRecord[]*/ {
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /*Record*/ {
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            /*platformID*/ { SkOTTableName::Record::PlatformID::Windows },
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            /*encodingID*/ { SkOTTableName::Record::EncodingID::Windows::UnicodeBMPUCS2 },
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            /*languageID*/ { SkOTTableName::Record::LanguageID::Windows::English_UnitedStates },
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            /*nameID*/ { SkOTTableName::Record::NameID::Predefined::FontFamilyName },
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            /*length*/ SkTEndianSwap16<8>::value,
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            /*offset*/ SkTEndianSwap16<0>::value,
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    },
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /*data*/ "\x0" "T" "\x0" "e" "\x0" "s" "\x0" "t",
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robottypedef Format1NameTable<1, 1, 19> SimpleFormat1NameTable;
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotSimpleFormat1NameTable simpleFormat1NameTable = {
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /*header*/ {
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /*format*/ SkOTTableName::format_1,
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /*count*/ SkTEndianSwap16<1>::value,
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /*stringOffset*/ SkTEndianSwap16<offsetof(SimpleFormat1NameTable, data)>::value,
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    },
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /*nameRecord[]*/ {
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /*Record*/ {
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            /*platformID*/ { SkOTTableName::Record::PlatformID::Windows },
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            /*encodingID*/ { SkOTTableName::Record::EncodingID::Windows::UnicodeBMPUCS2 },
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            /*languageID*/ { SkTEndianSwap16<0x8000 + 0>::value },
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            /*nameID*/ { SkOTTableName::Record::NameID::Predefined::FontFamilyName },
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            /*length*/ SkTEndianSwap16<8>::value,
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            /*offset*/ SkTEndianSwap16<0>::value,
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    },
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /*format1ext*/ {
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /*header*/ {
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            /*langTagCount*/ SkTEndianSwap16<1>::value,
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        },
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /*langTagRecord[]*/ {
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            /*LangTagRecord*/ {
75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                /*length*/ SkTEndianSwap16<10>::value,
76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                /*offset*/ SkTEndianSwap16<8>::value,
77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            },
78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        },
79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    },
80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /*data*/ "\x0" "T" "\x0" "e" "\x0" "s" "\x0" "t"
81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot             "\x0" "e" "\x0" "n" "\x0" "-" "\x0" "U" "\x0" "S",
82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct FontNamesTest {
85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkOTTableName* data;
86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkOTTableName::Record::NameID nameID;
87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    size_t nameCount;
88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    struct {
89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        const char* name;
90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        const char* language;
91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    } names[10];
92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} test[] = {
94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    {
95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        (SkOTTableName*)&simpleFormat0NameTable,
96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        { SkOTTableName::Record::NameID::Predefined::FontFamilyName },
97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        1,
98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        {
99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            { "Test", "en-US" },
100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        },
101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    },
102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    {
103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        (SkOTTableName*)&simpleFormat1NameTable,
104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        { SkOTTableName::Record::NameID::Predefined::FontFamilyName },
105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        1,
106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        {
107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            { "Test", "en-US" },
108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        },
109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    },
110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void test_synthetic(skiatest::Reporter* reporter, bool verbose) {
113fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    for (size_t i = 0; i < SK_ARRAY_COUNT(test); ++i) {
114fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkOTTableName::Iterator iter(*test[i].data, test[i].nameID.predefined.value);
115fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkOTTableName::Iterator::Record record;
116fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        size_t nameIndex = 0;
117fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        while (nameIndex < test[i].nameCount && iter.next(record)) {
118fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            REPORTER_ASSERT(reporter,
119fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                            strcmp(test[i].names[nameIndex].name, record.name.c_str()) == 0,
120fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                            "Name did not match.");
121fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
122fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            REPORTER_ASSERT(reporter,
123fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                            strcmp(test[i].names[nameIndex].language, record.language.c_str()) == 0,
124fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                            "Language did not match.");
125fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
126fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            //printf("%s <%s>\n", record.name.c_str(), record.language.c_str());
127fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
128fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            ++nameIndex;
129fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
130fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
131fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        REPORTER_ASSERT(reporter, nameIndex == test[i].nameCount, "Fewer names than expected.");
132fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
133fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        REPORTER_ASSERT(reporter, !iter.next(record), "More names than expected.");
134fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
135fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
136fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
137fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define MAX_FAMILIES 1000
138fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void test_systemfonts(skiatest::Reporter* reporter, bool verbose) {
139fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    static const SkFontTableTag nameTag = SkSetFourByteTag('n','a','m','e');
140fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
141fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
142fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int count = SkMin32(fm->countFamilies(), MAX_FAMILIES);
143fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    for (int i = 0; i < count; ++i) {
144fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        sk_sp<SkFontStyleSet> set(fm->createStyleSet(i));
145fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        for (int j = 0; j < set->count(); ++j) {
146fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SkString sname;
147fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SkFontStyle fs;
148fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            set->getStyle(j, &fs, &sname);
149fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
150fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            sk_sp<SkTypeface> typeface(set->createTypeface(j));
151fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
152fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SkString familyName;
153fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            typeface->getFamilyName(&familyName);
154fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            if (verbose) {
155fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                SkDebugf("[%s]\n", familyName.c_str());
156fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
157fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
158fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            sk_sp<SkTypeface::LocalizedStrings> familyNamesIter(
159fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                typeface->createFamilyNameIterator());
160fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SkTypeface::LocalizedString familyNameLocalized;
161fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            while (familyNamesIter->next(&familyNameLocalized)) {
162fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                if (verbose) {
163fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                    SkDebugf("(%s) <%s>\n", familyNameLocalized.fString.c_str(),
164fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                            familyNameLocalized.fLanguage.c_str());
165fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                }
166fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
167fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
168fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            size_t nameTableSize = typeface->getTableSize(nameTag);
169fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            if (0 == nameTableSize) {
170fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                continue;
171fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
172fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SkAutoTMalloc<uint8_t> nameTableData(nameTableSize);
173fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            size_t copied = typeface->getTableData(nameTag, 0, nameTableSize, nameTableData.get());
174fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            if (copied != nameTableSize) {
175fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                continue;
176fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
177fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
178fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SkOTTableName::Iterator::Record record;
179fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SkOTTableName::Iterator familyNameIter(*((SkOTTableName*)nameTableData.get()),
180fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                SkOTTableName::Record::NameID::Predefined::FontFamilyName);
181fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            while (familyNameIter.next(record)) {
182fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                REPORTER_ASSERT(
183fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                        reporter,
184fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                        SkOTTableName::Record::NameID::Predefined::FontFamilyName == record.type,
185fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                        "Requested family name, got something else.");
186fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                if (verbose) {
187fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                    SkDebugf("{%s} <%s>\n", record.name.c_str(), record.language.c_str());
188fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                }
189fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
190fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
191fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SkOTTableName::Iterator styleNameIter(*((SkOTTableName*)nameTableData.get()),
192fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                SkOTTableName::Record::NameID::Predefined::FontSubfamilyName);
193fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            while (styleNameIter.next(record)) {
194fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                REPORTER_ASSERT(
195fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                        reporter,
196fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                        SkOTTableName::Record::NameID::Predefined::FontSubfamilyName == record.type,
197fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                        "Requested subfamily name, got something else.");
198fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                if (verbose) {
199fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                    SkDebugf("{{%s}} <%s>\n", record.name.c_str(), record.language.c_str());
200fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                }
201fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
202fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
203fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            if (verbose) {
204fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                SkDebugf("\n");
205fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
206fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
207fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
208fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
209fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
210fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEFINE_bool(verboseFontNames, false, "verbose FontNames test.");
211fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
212fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_TEST(FontNames, reporter) {
213fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    test_synthetic(reporter, FLAGS_verboseFontNames);
214fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    test_systemfonts(reporter, FLAGS_verboseFontNames);
215fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
216