1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2013 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker *
4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker */
7*c8dee2aaSAndroid Build Coastguard Worker
8*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkFont.h"
9*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkFontArguments.h"
10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkFontMgr.h"
11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkFontParameters.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkFontStyle.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkFontTypes.h"
14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h"
15*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkStream.h"
16*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkString.h"
17*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypeface.h"
18*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h"
19*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkDebug.h"
20*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkMalloc.h"
21*c8dee2aaSAndroid Build Coastguard Worker #include "src/core/SkAdvancedTypefaceMetrics.h" // IWYU pragma: keep
22*c8dee2aaSAndroid Build Coastguard Worker #include "src/core/SkFontPriv.h"
23*c8dee2aaSAndroid Build Coastguard Worker #include "src/core/SkScalerContext.h"
24*c8dee2aaSAndroid Build Coastguard Worker #include "tests/Test.h"
25*c8dee2aaSAndroid Build Coastguard Worker #include "tools/flags/CommandLineFlags.h"
26*c8dee2aaSAndroid Build Coastguard Worker #include "tools/fonts/FontToolUtils.h"
27*c8dee2aaSAndroid Build Coastguard Worker
28*c8dee2aaSAndroid Build Coastguard Worker #include <cstddef>
29*c8dee2aaSAndroid Build Coastguard Worker #include <cstdint>
30*c8dee2aaSAndroid Build Coastguard Worker #include <initializer_list>
31*c8dee2aaSAndroid Build Coastguard Worker #include <memory>
32*c8dee2aaSAndroid Build Coastguard Worker #include <vector>
33*c8dee2aaSAndroid Build Coastguard Worker
34*c8dee2aaSAndroid Build Coastguard Worker class SkDescriptor;
35*c8dee2aaSAndroid Build Coastguard Worker class SkFontDescriptor;
36*c8dee2aaSAndroid Build Coastguard Worker
37*c8dee2aaSAndroid Build Coastguard Worker DECLARE_bool(verboseFontMgr)
38*c8dee2aaSAndroid Build Coastguard Worker
DEF_TEST(FontMgr_Font,reporter)39*c8dee2aaSAndroid Build Coastguard Worker DEF_TEST(FontMgr_Font, reporter) {
40*c8dee2aaSAndroid Build Coastguard Worker SkFont font(ToolUtils::DefaultTypeface(), 24);
41*c8dee2aaSAndroid Build Coastguard Worker
42*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, 24 == font.getSize());
43*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, 1 == font.getScaleX());
44*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, 0 == font.getSkewX());
45*c8dee2aaSAndroid Build Coastguard Worker
46*c8dee2aaSAndroid Build Coastguard Worker uint16_t glyphs[5];
47*c8dee2aaSAndroid Build Coastguard Worker sk_bzero(glyphs, sizeof(glyphs));
48*c8dee2aaSAndroid Build Coastguard Worker
49*c8dee2aaSAndroid Build Coastguard Worker // Check that no glyphs are copied with insufficient storage.
50*c8dee2aaSAndroid Build Coastguard Worker int count = font.textToGlyphs("Hello", 5, SkTextEncoding::kUTF8, glyphs, 2);
51*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, 5 == count);
52*c8dee2aaSAndroid Build Coastguard Worker for (const auto glyph : glyphs) { REPORTER_ASSERT(reporter, glyph == 0); }
53*c8dee2aaSAndroid Build Coastguard Worker
54*c8dee2aaSAndroid Build Coastguard Worker SkAssertResult(font.textToGlyphs("Hello", 5, SkTextEncoding::kUTF8, glyphs,
55*c8dee2aaSAndroid Build Coastguard Worker std::size(glyphs)) == count);
56*c8dee2aaSAndroid Build Coastguard Worker
57*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < count; ++i) {
58*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, 0 != glyphs[i]);
59*c8dee2aaSAndroid Build Coastguard Worker }
60*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, glyphs[0] != glyphs[1]); // 'h' != 'e'
61*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, glyphs[2] == glyphs[3]); // 'l' == 'l'
62*c8dee2aaSAndroid Build Coastguard Worker
63*c8dee2aaSAndroid Build Coastguard Worker const SkFont newFont(font.makeWithSize(36));
64*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, font.getTypeface() == newFont.getTypeface());
65*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, 36 == newFont.getSize()); // double check we haven't changed
66*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, 24 == font.getSize()); // double check we haven't changed
67*c8dee2aaSAndroid Build Coastguard Worker }
68*c8dee2aaSAndroid Build Coastguard Worker
69*c8dee2aaSAndroid Build Coastguard Worker /*
70*c8dee2aaSAndroid Build Coastguard Worker * If the font backend is going to "alias" some font names to other fonts
71*c8dee2aaSAndroid Build Coastguard Worker * (e.g. sans -> Arial) then we want to at least get the same typeface back
72*c8dee2aaSAndroid Build Coastguard Worker * if we request the alias name multiple times.
73*c8dee2aaSAndroid Build Coastguard Worker */
DEF_TEST(FontMgr_AliasNames,reporter)74*c8dee2aaSAndroid Build Coastguard Worker DEF_TEST(FontMgr_AliasNames, reporter) {
75*c8dee2aaSAndroid Build Coastguard Worker const char* inNames[] = {
76*c8dee2aaSAndroid Build Coastguard Worker "sans", "sans-serif", "serif", "monospace", "times", "helvetica"
77*c8dee2aaSAndroid Build Coastguard Worker };
78*c8dee2aaSAndroid Build Coastguard Worker
79*c8dee2aaSAndroid Build Coastguard Worker for (size_t i = 0; i < std::size(inNames); ++i) {
80*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> first(ToolUtils::CreateTestTypeface(inNames[i], SkFontStyle()));
81*c8dee2aaSAndroid Build Coastguard Worker if (nullptr == first.get()) {
82*c8dee2aaSAndroid Build Coastguard Worker continue;
83*c8dee2aaSAndroid Build Coastguard Worker }
84*c8dee2aaSAndroid Build Coastguard Worker SkString firstName;
85*c8dee2aaSAndroid Build Coastguard Worker first->getFamilyName(&firstName);
86*c8dee2aaSAndroid Build Coastguard Worker for (int j = 0; j < 10; ++j) {
87*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> face(ToolUtils::CreateTestTypeface(inNames[i], SkFontStyle()));
88*c8dee2aaSAndroid Build Coastguard Worker
89*c8dee2aaSAndroid Build Coastguard Worker SkString name;
90*c8dee2aaSAndroid Build Coastguard Worker face->getFamilyName(&name);
91*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, first->uniqueID() == face->uniqueID(),
92*c8dee2aaSAndroid Build Coastguard Worker "Request \"%s\" First Name: \"%s\" Id: %x Received Name \"%s\" Id %x",
93*c8dee2aaSAndroid Build Coastguard Worker inNames[i], firstName.c_str(), first->uniqueID(), name.c_str(), face->uniqueID());
94*c8dee2aaSAndroid Build Coastguard Worker }
95*c8dee2aaSAndroid Build Coastguard Worker }
96*c8dee2aaSAndroid Build Coastguard Worker }
97*c8dee2aaSAndroid Build Coastguard Worker
DEF_TEST(FontMgr_Iter,reporter)98*c8dee2aaSAndroid Build Coastguard Worker DEF_TEST(FontMgr_Iter, reporter) {
99*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkFontMgr> fm(ToolUtils::TestFontMgr());
100*c8dee2aaSAndroid Build Coastguard Worker int count = fm->countFamilies();
101*c8dee2aaSAndroid Build Coastguard Worker
102*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < count; ++i) {
103*c8dee2aaSAndroid Build Coastguard Worker SkString fname;
104*c8dee2aaSAndroid Build Coastguard Worker fm->getFamilyName(i, &fname);
105*c8dee2aaSAndroid Build Coastguard Worker
106*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkFontStyleSet> fnset(fm->matchFamily(fname.c_str()));
107*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkFontStyleSet> set(fm->createStyleSet(i));
108*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, fnset->count() == set->count());
109*c8dee2aaSAndroid Build Coastguard Worker
110*c8dee2aaSAndroid Build Coastguard Worker if (FLAGS_verboseFontMgr) {
111*c8dee2aaSAndroid Build Coastguard Worker SkDebugf("[%2d] %s\n", i, fname.c_str());
112*c8dee2aaSAndroid Build Coastguard Worker }
113*c8dee2aaSAndroid Build Coastguard Worker
114*c8dee2aaSAndroid Build Coastguard Worker for (int j = 0; j < set->count(); ++j) {
115*c8dee2aaSAndroid Build Coastguard Worker SkString sname;
116*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle fs;
117*c8dee2aaSAndroid Build Coastguard Worker set->getStyle(j, &fs, &sname);
118*c8dee2aaSAndroid Build Coastguard Worker
119*c8dee2aaSAndroid Build Coastguard Worker if (FLAGS_verboseFontMgr) {
120*c8dee2aaSAndroid Build Coastguard Worker SkDebugf("\t[%d] %s [%3d %d %d]", j, sname.c_str(),
121*c8dee2aaSAndroid Build Coastguard Worker fs.weight(), fs.width(), fs.slant());
122*c8dee2aaSAndroid Build Coastguard Worker }
123*c8dee2aaSAndroid Build Coastguard Worker
124*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> face1(set->createTypeface(j));
125*c8dee2aaSAndroid Build Coastguard Worker if (!face1) {
126*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, face1.get());
127*c8dee2aaSAndroid Build Coastguard Worker continue;
128*c8dee2aaSAndroid Build Coastguard Worker }
129*c8dee2aaSAndroid Build Coastguard Worker SkString name1;
130*c8dee2aaSAndroid Build Coastguard Worker face1->getFamilyName(&name1);
131*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle s1 = face1->fontStyle();
132*c8dee2aaSAndroid Build Coastguard Worker
133*c8dee2aaSAndroid Build Coastguard Worker SkString resource1;
134*c8dee2aaSAndroid Build Coastguard Worker face1->getResourceName(&resource1);
135*c8dee2aaSAndroid Build Coastguard Worker if (FLAGS_verboseFontMgr) {
136*c8dee2aaSAndroid Build Coastguard Worker SkDebugf(" \"%s\" \"%s\"\n", name1.c_str(), resource1.c_str());
137*c8dee2aaSAndroid Build Coastguard Worker }
138*c8dee2aaSAndroid Build Coastguard Worker
139*c8dee2aaSAndroid Build Coastguard Worker // Note that fs != s1 is fine, though probably rare.
140*c8dee2aaSAndroid Build Coastguard Worker
141*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> face2(fm->matchFamilyStyle(name1.c_str(), s1));
142*c8dee2aaSAndroid Build Coastguard Worker if (!face2) {
143*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, face2.get());
144*c8dee2aaSAndroid Build Coastguard Worker continue;
145*c8dee2aaSAndroid Build Coastguard Worker }
146*c8dee2aaSAndroid Build Coastguard Worker SkString name2;
147*c8dee2aaSAndroid Build Coastguard Worker face2->getFamilyName(&name2);
148*c8dee2aaSAndroid Build Coastguard Worker
149*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, name1 == name2, "%s == %s", name1.c_str(), name2.c_str());
150*c8dee2aaSAndroid Build Coastguard Worker
151*c8dee2aaSAndroid Build Coastguard Worker // TODO: This should work, but Mac matches the wrong font sometimes.
152*c8dee2aaSAndroid Build Coastguard Worker if ((false)) {
153*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle s2 = face2->fontStyle();
154*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, s1 == s2, "%s [%3d %d %d] != %s [%3d %d %d]",
155*c8dee2aaSAndroid Build Coastguard Worker name1.c_str(), s1.weight(), s1.width(), s1.slant(),
156*c8dee2aaSAndroid Build Coastguard Worker name2.c_str(), s2.weight(), s2.width(), s2.slant());
157*c8dee2aaSAndroid Build Coastguard Worker }
158*c8dee2aaSAndroid Build Coastguard Worker }
159*c8dee2aaSAndroid Build Coastguard Worker }
160*c8dee2aaSAndroid Build Coastguard Worker }
161*c8dee2aaSAndroid Build Coastguard Worker
DEF_TEST(FontMgr_Match,reporter)162*c8dee2aaSAndroid Build Coastguard Worker DEF_TEST(FontMgr_Match, reporter) {
163*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkFontMgr> fm(ToolUtils::TestFontMgr());
164*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkFontStyleSet> styleSet(fm->matchFamily(nullptr));
165*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, styleSet);
166*c8dee2aaSAndroid Build Coastguard Worker }
167*c8dee2aaSAndroid Build Coastguard Worker
DEF_TEST(FontMgr_MatchFamilyStyle,reporter)168*c8dee2aaSAndroid Build Coastguard Worker DEF_TEST(FontMgr_MatchFamilyStyle, reporter) {
169*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkFontMgr> fm(ToolUtils::TestFontMgr());
170*c8dee2aaSAndroid Build Coastguard Worker
171*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkFontStyleSet> styleSet(fm->matchFamily("Non Existing Family Name"));
172*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, styleSet);
173*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, styleSet->count() == 0);
174*c8dee2aaSAndroid Build Coastguard Worker
175*c8dee2aaSAndroid Build Coastguard Worker using FS = SkFontStyle;
176*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> typeface(fm->matchFamilyStyle("Non Existing Family Name", FS::Normal()));
177*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, !typeface);
178*c8dee2aaSAndroid Build Coastguard Worker
179*c8dee2aaSAndroid Build Coastguard Worker // TODO: enable after determining if a default font should be required.
180*c8dee2aaSAndroid Build Coastguard Worker if ((false)) {
181*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> def(fm->matchFamilyStyle(nullptr, FS::Normal()));
182*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, def);
183*c8dee2aaSAndroid Build Coastguard Worker }
184*c8dee2aaSAndroid Build Coastguard Worker }
185*c8dee2aaSAndroid Build Coastguard Worker
DEF_TEST(FontMgr_MatchStyleCSS3,reporter)186*c8dee2aaSAndroid Build Coastguard Worker DEF_TEST(FontMgr_MatchStyleCSS3, reporter) {
187*c8dee2aaSAndroid Build Coastguard Worker static const SkFontStyle invalidFontStyle(101, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
188*c8dee2aaSAndroid Build Coastguard Worker
189*c8dee2aaSAndroid Build Coastguard Worker class TestTypeface : public SkTypeface {
190*c8dee2aaSAndroid Build Coastguard Worker public:
191*c8dee2aaSAndroid Build Coastguard Worker TestTypeface(const SkFontStyle& fontStyle) : SkTypeface(fontStyle, false){}
192*c8dee2aaSAndroid Build Coastguard Worker protected:
193*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<SkStreamAsset> onOpenStream(int* ttcIndex) const override { return nullptr; }
194*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> onMakeClone(const SkFontArguments& args) const override {
195*c8dee2aaSAndroid Build Coastguard Worker return sk_ref_sp(this);
196*c8dee2aaSAndroid Build Coastguard Worker }
197*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<SkScalerContext> onCreateScalerContext(
198*c8dee2aaSAndroid Build Coastguard Worker const SkScalerContextEffects& effects, const SkDescriptor* desc) const override
199*c8dee2aaSAndroid Build Coastguard Worker {
200*c8dee2aaSAndroid Build Coastguard Worker return SkScalerContext::MakeEmpty(
201*c8dee2aaSAndroid Build Coastguard Worker sk_ref_sp(const_cast<TestTypeface*>(this)), effects, desc);
202*c8dee2aaSAndroid Build Coastguard Worker }
203*c8dee2aaSAndroid Build Coastguard Worker void onFilterRec(SkScalerContextRec*) const override { }
204*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<SkAdvancedTypefaceMetrics> onGetAdvancedMetrics() const override {
205*c8dee2aaSAndroid Build Coastguard Worker return nullptr;
206*c8dee2aaSAndroid Build Coastguard Worker }
207*c8dee2aaSAndroid Build Coastguard Worker void onGetFontDescriptor(SkFontDescriptor*, bool*) const override { }
208*c8dee2aaSAndroid Build Coastguard Worker void onCharsToGlyphs(const SkUnichar* chars, int count, SkGlyphID glyphs[]) const override {
209*c8dee2aaSAndroid Build Coastguard Worker sk_bzero(glyphs, count * sizeof(glyphs[0]));
210*c8dee2aaSAndroid Build Coastguard Worker }
211*c8dee2aaSAndroid Build Coastguard Worker int onCountGlyphs() const override { return 0; }
212*c8dee2aaSAndroid Build Coastguard Worker void getPostScriptGlyphNames(SkString*) const override {}
213*c8dee2aaSAndroid Build Coastguard Worker void getGlyphToUnicodeMap(SkUnichar*) const override {}
214*c8dee2aaSAndroid Build Coastguard Worker int onGetUPEM() const override { return 0; }
215*c8dee2aaSAndroid Build Coastguard Worker class EmptyLocalizedStrings : public SkTypeface::LocalizedStrings {
216*c8dee2aaSAndroid Build Coastguard Worker public:
217*c8dee2aaSAndroid Build Coastguard Worker bool next(SkTypeface::LocalizedString*) override { return false; }
218*c8dee2aaSAndroid Build Coastguard Worker };
219*c8dee2aaSAndroid Build Coastguard Worker void onGetFamilyName(SkString* familyName) const override {
220*c8dee2aaSAndroid Build Coastguard Worker familyName->reset();
221*c8dee2aaSAndroid Build Coastguard Worker }
222*c8dee2aaSAndroid Build Coastguard Worker bool onGetPostScriptName(SkString*) const override { return false; }
223*c8dee2aaSAndroid Build Coastguard Worker SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override {
224*c8dee2aaSAndroid Build Coastguard Worker return new EmptyLocalizedStrings;
225*c8dee2aaSAndroid Build Coastguard Worker }
226*c8dee2aaSAndroid Build Coastguard Worker bool onGlyphMaskNeedsCurrentColor() const override { return false; }
227*c8dee2aaSAndroid Build Coastguard Worker int onGetVariationDesignPosition(
228*c8dee2aaSAndroid Build Coastguard Worker SkFontArguments::VariationPosition::Coordinate coordinates[],
229*c8dee2aaSAndroid Build Coastguard Worker int coordinateCount) const override
230*c8dee2aaSAndroid Build Coastguard Worker {
231*c8dee2aaSAndroid Build Coastguard Worker return 0;
232*c8dee2aaSAndroid Build Coastguard Worker }
233*c8dee2aaSAndroid Build Coastguard Worker int onGetVariationDesignParameters(SkFontParameters::Variation::Axis parameters[],
234*c8dee2aaSAndroid Build Coastguard Worker int parameterCount) const override
235*c8dee2aaSAndroid Build Coastguard Worker {
236*c8dee2aaSAndroid Build Coastguard Worker return -1;
237*c8dee2aaSAndroid Build Coastguard Worker }
238*c8dee2aaSAndroid Build Coastguard Worker int onGetTableTags(SkFontTableTag tags[]) const override { return 0; }
239*c8dee2aaSAndroid Build Coastguard Worker size_t onGetTableData(SkFontTableTag, size_t, size_t, void*) const override {
240*c8dee2aaSAndroid Build Coastguard Worker return 0;
241*c8dee2aaSAndroid Build Coastguard Worker }
242*c8dee2aaSAndroid Build Coastguard Worker };
243*c8dee2aaSAndroid Build Coastguard Worker
244*c8dee2aaSAndroid Build Coastguard Worker class TestFontStyleSet : public SkFontStyleSet {
245*c8dee2aaSAndroid Build Coastguard Worker public:
246*c8dee2aaSAndroid Build Coastguard Worker TestFontStyleSet(std::initializer_list<SkFontStyle> styles) : fStyles(styles) {}
247*c8dee2aaSAndroid Build Coastguard Worker int count() override { return static_cast<int>(fStyles.size()); }
248*c8dee2aaSAndroid Build Coastguard Worker void getStyle(int index, SkFontStyle* style, SkString*) override {
249*c8dee2aaSAndroid Build Coastguard Worker if (style) {
250*c8dee2aaSAndroid Build Coastguard Worker *style = fStyles[index];
251*c8dee2aaSAndroid Build Coastguard Worker }
252*c8dee2aaSAndroid Build Coastguard Worker }
253*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> createTypeface(int index) override {
254*c8dee2aaSAndroid Build Coastguard Worker if (index < 0 || this->count() <= index) {
255*c8dee2aaSAndroid Build Coastguard Worker return sk_sp<SkTypeface>(new TestTypeface(invalidFontStyle));
256*c8dee2aaSAndroid Build Coastguard Worker }
257*c8dee2aaSAndroid Build Coastguard Worker return sk_sp<SkTypeface>(new TestTypeface(fStyles[index]));
258*c8dee2aaSAndroid Build Coastguard Worker }
259*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> matchStyle(const SkFontStyle& pattern) override {
260*c8dee2aaSAndroid Build Coastguard Worker return this->matchStyleCSS3(pattern);
261*c8dee2aaSAndroid Build Coastguard Worker }
262*c8dee2aaSAndroid Build Coastguard Worker private:
263*c8dee2aaSAndroid Build Coastguard Worker std::vector<SkFontStyle> fStyles;
264*c8dee2aaSAndroid Build Coastguard Worker };
265*c8dee2aaSAndroid Build Coastguard Worker
266*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle condensed_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
267*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle condensed_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
268*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle condensed_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
269*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle condensed_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
270*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle condensed_obliqu_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
271*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle condensed_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
272*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle expanded_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant);
273*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle expanded_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant);
274*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle expanded_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant);
275*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle expanded_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant);
276*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle expanded_obliqu_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kOblique_Slant);
277*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle expanded_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kOblique_Slant);
278*c8dee2aaSAndroid Build Coastguard Worker
279*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle normal_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
280*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle normal_normal_300(SkFontStyle::kLight_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
281*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle normal_normal_400(SkFontStyle::kNormal_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
282*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle normal_normal_500(SkFontStyle::kMedium_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
283*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle normal_normal_600(SkFontStyle::kSemiBold_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
284*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle normal_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
285*c8dee2aaSAndroid Build Coastguard Worker
286*c8dee2aaSAndroid Build Coastguard Worker struct StyleSetTest {
287*c8dee2aaSAndroid Build Coastguard Worker TestFontStyleSet styleSet;
288*c8dee2aaSAndroid Build Coastguard Worker struct Case {
289*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle pattern;
290*c8dee2aaSAndroid Build Coastguard Worker SkFontStyle expectedResult;
291*c8dee2aaSAndroid Build Coastguard Worker };
292*c8dee2aaSAndroid Build Coastguard Worker std::vector<Case> cases;
293*c8dee2aaSAndroid Build Coastguard Worker } tests[] = {
294*c8dee2aaSAndroid Build Coastguard Worker {
295*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_500, normal_normal_400 },
296*c8dee2aaSAndroid Build Coastguard Worker {
297*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_400, normal_normal_400 },
298*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_500, normal_normal_500 },
299*c8dee2aaSAndroid Build Coastguard Worker },
300*c8dee2aaSAndroid Build Coastguard Worker },
301*c8dee2aaSAndroid Build Coastguard Worker
302*c8dee2aaSAndroid Build Coastguard Worker {
303*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_500, normal_normal_300 },
304*c8dee2aaSAndroid Build Coastguard Worker {
305*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_300, normal_normal_300 },
306*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_400, normal_normal_500 },
307*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_500, normal_normal_500 },
308*c8dee2aaSAndroid Build Coastguard Worker },
309*c8dee2aaSAndroid Build Coastguard Worker },
310*c8dee2aaSAndroid Build Coastguard Worker
311*c8dee2aaSAndroid Build Coastguard Worker {
312*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900,
313*c8dee2aaSAndroid Build Coastguard Worker expanded_normal_100, expanded_normal_900, expanded_italic_100, expanded_italic_900 },
314*c8dee2aaSAndroid Build Coastguard Worker {
315*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_normal_100 },
316*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_normal_900 },
317*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_italic_100 },
318*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_italic_900 },
319*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_normal_100 },
320*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_normal_900 },
321*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_italic_100 },
322*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_italic_900 },
323*c8dee2aaSAndroid Build Coastguard Worker },
324*c8dee2aaSAndroid Build Coastguard Worker },
325*c8dee2aaSAndroid Build Coastguard Worker
326*c8dee2aaSAndroid Build Coastguard Worker {
327*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100,condensed_italic_100,expanded_normal_100,expanded_italic_100 },
328*c8dee2aaSAndroid Build Coastguard Worker {
329*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_normal_100 },
330*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_normal_100 },
331*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_italic_100 },
332*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_italic_100 },
333*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_normal_100 },
334*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_normal_100 },
335*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_italic_100 },
336*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_italic_100 },
337*c8dee2aaSAndroid Build Coastguard Worker },
338*c8dee2aaSAndroid Build Coastguard Worker },
339*c8dee2aaSAndroid Build Coastguard Worker
340*c8dee2aaSAndroid Build Coastguard Worker {
341*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900,condensed_italic_900,expanded_normal_900,expanded_italic_900 },
342*c8dee2aaSAndroid Build Coastguard Worker {
343*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_normal_900 },
344*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_normal_900 },
345*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_italic_900 },
346*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_italic_900 },
347*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_normal_900 },
348*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_normal_900 },
349*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_italic_900 },
350*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_italic_900 },
351*c8dee2aaSAndroid Build Coastguard Worker },
352*c8dee2aaSAndroid Build Coastguard Worker },
353*c8dee2aaSAndroid Build Coastguard Worker
354*c8dee2aaSAndroid Build Coastguard Worker {
355*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100,condensed_normal_900,expanded_normal_100,expanded_normal_900 },
356*c8dee2aaSAndroid Build Coastguard Worker {
357*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_normal_100 },
358*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_normal_900 },
359*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_normal_100 },
360*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_normal_900 },
361*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_normal_100 },
362*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_normal_900 },
363*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_normal_100 },
364*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_normal_900 },
365*c8dee2aaSAndroid Build Coastguard Worker },
366*c8dee2aaSAndroid Build Coastguard Worker },
367*c8dee2aaSAndroid Build Coastguard Worker
368*c8dee2aaSAndroid Build Coastguard Worker {
369*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100,expanded_normal_100 },
370*c8dee2aaSAndroid Build Coastguard Worker {
371*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_normal_100 },
372*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_normal_100 },
373*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_normal_100 },
374*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_normal_100 },
375*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_normal_100 },
376*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_normal_100 },
377*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_normal_100 },
378*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_normal_100 },
379*c8dee2aaSAndroid Build Coastguard Worker },
380*c8dee2aaSAndroid Build Coastguard Worker },
381*c8dee2aaSAndroid Build Coastguard Worker
382*c8dee2aaSAndroid Build Coastguard Worker {
383*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900,expanded_normal_900 },
384*c8dee2aaSAndroid Build Coastguard Worker {
385*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_normal_900 },
386*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_normal_900 },
387*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_normal_900 },
388*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_normal_900 },
389*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_normal_900 },
390*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_normal_900 },
391*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_normal_900 },
392*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_normal_900 },
393*c8dee2aaSAndroid Build Coastguard Worker },
394*c8dee2aaSAndroid Build Coastguard Worker },
395*c8dee2aaSAndroid Build Coastguard Worker
396*c8dee2aaSAndroid Build Coastguard Worker {
397*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100,condensed_italic_900,expanded_italic_100,expanded_italic_900 },
398*c8dee2aaSAndroid Build Coastguard Worker {
399*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_italic_100 },
400*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_italic_900 },
401*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_italic_100 },
402*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_italic_900 },
403*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_italic_100 },
404*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_italic_900 },
405*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_italic_100 },
406*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_italic_900 },
407*c8dee2aaSAndroid Build Coastguard Worker },
408*c8dee2aaSAndroid Build Coastguard Worker },
409*c8dee2aaSAndroid Build Coastguard Worker
410*c8dee2aaSAndroid Build Coastguard Worker {
411*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100,expanded_italic_100 },
412*c8dee2aaSAndroid Build Coastguard Worker {
413*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_italic_100 },
414*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_italic_100 },
415*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_italic_100 },
416*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_italic_100 },
417*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_italic_100 },
418*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_italic_100 },
419*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_italic_100 },
420*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_italic_100 },
421*c8dee2aaSAndroid Build Coastguard Worker },
422*c8dee2aaSAndroid Build Coastguard Worker },
423*c8dee2aaSAndroid Build Coastguard Worker
424*c8dee2aaSAndroid Build Coastguard Worker {
425*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900,expanded_italic_900 },
426*c8dee2aaSAndroid Build Coastguard Worker {
427*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_italic_900 },
428*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_italic_900 },
429*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_italic_900 },
430*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_italic_900 },
431*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_italic_900 },
432*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_italic_900 },
433*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_italic_900 },
434*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_italic_900 },
435*c8dee2aaSAndroid Build Coastguard Worker },
436*c8dee2aaSAndroid Build Coastguard Worker },
437*c8dee2aaSAndroid Build Coastguard Worker
438*c8dee2aaSAndroid Build Coastguard Worker {
439*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900 },
440*c8dee2aaSAndroid Build Coastguard Worker {
441*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_normal_100 },
442*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_normal_900 },
443*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_italic_100 },
444*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_italic_900 },
445*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, condensed_normal_100 },
446*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, condensed_normal_900 },
447*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, condensed_italic_100 },
448*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, condensed_italic_900 },
449*c8dee2aaSAndroid Build Coastguard Worker },
450*c8dee2aaSAndroid Build Coastguard Worker },
451*c8dee2aaSAndroid Build Coastguard Worker
452*c8dee2aaSAndroid Build Coastguard Worker {
453*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100,condensed_italic_100 },
454*c8dee2aaSAndroid Build Coastguard Worker {
455*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_normal_100 },
456*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_normal_100 },
457*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_italic_100 },
458*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_italic_100 },
459*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, condensed_normal_100 },
460*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, condensed_normal_100 },
461*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, condensed_italic_100 },
462*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, condensed_italic_100 },
463*c8dee2aaSAndroid Build Coastguard Worker },
464*c8dee2aaSAndroid Build Coastguard Worker },
465*c8dee2aaSAndroid Build Coastguard Worker
466*c8dee2aaSAndroid Build Coastguard Worker {
467*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900,condensed_italic_900 },
468*c8dee2aaSAndroid Build Coastguard Worker {
469*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_normal_900 },
470*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_normal_900 },
471*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_italic_900 },
472*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_italic_900 },
473*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, condensed_normal_900 },
474*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, condensed_normal_900 },
475*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, condensed_italic_900 },
476*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, condensed_italic_900 },
477*c8dee2aaSAndroid Build Coastguard Worker },
478*c8dee2aaSAndroid Build Coastguard Worker },
479*c8dee2aaSAndroid Build Coastguard Worker
480*c8dee2aaSAndroid Build Coastguard Worker {
481*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100,condensed_normal_900 },
482*c8dee2aaSAndroid Build Coastguard Worker {
483*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_normal_100 },
484*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_normal_900 },
485*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_normal_100 },
486*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_normal_900 },
487*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, condensed_normal_100 },
488*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, condensed_normal_900 },
489*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, condensed_normal_100 },
490*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, condensed_normal_900 },
491*c8dee2aaSAndroid Build Coastguard Worker },
492*c8dee2aaSAndroid Build Coastguard Worker },
493*c8dee2aaSAndroid Build Coastguard Worker
494*c8dee2aaSAndroid Build Coastguard Worker {
495*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100 },
496*c8dee2aaSAndroid Build Coastguard Worker {
497*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_normal_100 },
498*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_normal_100 },
499*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_normal_100 },
500*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_normal_100 },
501*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, condensed_normal_100 },
502*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, condensed_normal_100 },
503*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, condensed_normal_100 },
504*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, condensed_normal_100 },
505*c8dee2aaSAndroid Build Coastguard Worker },
506*c8dee2aaSAndroid Build Coastguard Worker },
507*c8dee2aaSAndroid Build Coastguard Worker
508*c8dee2aaSAndroid Build Coastguard Worker {
509*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900 },
510*c8dee2aaSAndroid Build Coastguard Worker {
511*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_normal_900 },
512*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_normal_900 },
513*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_normal_900 },
514*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_normal_900 },
515*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, condensed_normal_900 },
516*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, condensed_normal_900 },
517*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, condensed_normal_900 },
518*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, condensed_normal_900 },
519*c8dee2aaSAndroid Build Coastguard Worker },
520*c8dee2aaSAndroid Build Coastguard Worker },
521*c8dee2aaSAndroid Build Coastguard Worker
522*c8dee2aaSAndroid Build Coastguard Worker {
523*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100,condensed_italic_900 },
524*c8dee2aaSAndroid Build Coastguard Worker {
525*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_italic_100 },
526*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_italic_900 },
527*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_italic_100 },
528*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_italic_900 },
529*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, condensed_italic_100 },
530*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, condensed_italic_900 },
531*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, condensed_italic_100 },
532*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, condensed_italic_900 },
533*c8dee2aaSAndroid Build Coastguard Worker },
534*c8dee2aaSAndroid Build Coastguard Worker },
535*c8dee2aaSAndroid Build Coastguard Worker
536*c8dee2aaSAndroid Build Coastguard Worker {
537*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100 },
538*c8dee2aaSAndroid Build Coastguard Worker {
539*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_italic_100 },
540*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_italic_100 },
541*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_italic_100 },
542*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_italic_100 },
543*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, condensed_italic_100 },
544*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, condensed_italic_100 },
545*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, condensed_italic_100 },
546*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, condensed_italic_100 },
547*c8dee2aaSAndroid Build Coastguard Worker },
548*c8dee2aaSAndroid Build Coastguard Worker },
549*c8dee2aaSAndroid Build Coastguard Worker
550*c8dee2aaSAndroid Build Coastguard Worker {
551*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900 },
552*c8dee2aaSAndroid Build Coastguard Worker {
553*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, condensed_italic_900 },
554*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, condensed_italic_900 },
555*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, condensed_italic_900 },
556*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, condensed_italic_900 },
557*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, condensed_italic_900 },
558*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, condensed_italic_900 },
559*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, condensed_italic_900 },
560*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, condensed_italic_900 },
561*c8dee2aaSAndroid Build Coastguard Worker },
562*c8dee2aaSAndroid Build Coastguard Worker },
563*c8dee2aaSAndroid Build Coastguard Worker
564*c8dee2aaSAndroid Build Coastguard Worker {
565*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100,expanded_normal_900,
566*c8dee2aaSAndroid Build Coastguard Worker expanded_italic_100,expanded_italic_900 },
567*c8dee2aaSAndroid Build Coastguard Worker {
568*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, expanded_normal_100 },
569*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, expanded_normal_900 },
570*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, expanded_italic_100 },
571*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, expanded_italic_900 },
572*c8dee2aaSAndroid Build Coastguard Worker { condensed_obliqu_100, expanded_italic_100 },
573*c8dee2aaSAndroid Build Coastguard Worker { condensed_obliqu_900, expanded_italic_900 },
574*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_normal_100 },
575*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_normal_900 },
576*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_italic_100 },
577*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_italic_900 },
578*c8dee2aaSAndroid Build Coastguard Worker { expanded_obliqu_100, expanded_italic_100 },
579*c8dee2aaSAndroid Build Coastguard Worker { expanded_obliqu_900, expanded_italic_900 },
580*c8dee2aaSAndroid Build Coastguard Worker },
581*c8dee2aaSAndroid Build Coastguard Worker },
582*c8dee2aaSAndroid Build Coastguard Worker
583*c8dee2aaSAndroid Build Coastguard Worker {
584*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100,expanded_italic_100 },
585*c8dee2aaSAndroid Build Coastguard Worker {
586*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, expanded_normal_100 },
587*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, expanded_normal_100 },
588*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, expanded_italic_100 },
589*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, expanded_italic_100 },
590*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_normal_100 },
591*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_normal_100 },
592*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_italic_100 },
593*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_italic_100 },
594*c8dee2aaSAndroid Build Coastguard Worker },
595*c8dee2aaSAndroid Build Coastguard Worker },
596*c8dee2aaSAndroid Build Coastguard Worker
597*c8dee2aaSAndroid Build Coastguard Worker {
598*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900,expanded_italic_900 },
599*c8dee2aaSAndroid Build Coastguard Worker {
600*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, expanded_normal_900 },
601*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, expanded_normal_900 },
602*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, expanded_italic_900 },
603*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, expanded_italic_900 },
604*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_normal_900 },
605*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_normal_900 },
606*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_italic_900 },
607*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_italic_900 },
608*c8dee2aaSAndroid Build Coastguard Worker },
609*c8dee2aaSAndroid Build Coastguard Worker },
610*c8dee2aaSAndroid Build Coastguard Worker
611*c8dee2aaSAndroid Build Coastguard Worker {
612*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100,expanded_normal_900 },
613*c8dee2aaSAndroid Build Coastguard Worker {
614*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, expanded_normal_100 },
615*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, expanded_normal_900 },
616*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, expanded_normal_100 },
617*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, expanded_normal_900 },
618*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_normal_100 },
619*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_normal_900 },
620*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_normal_100 },
621*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_normal_900 },
622*c8dee2aaSAndroid Build Coastguard Worker },
623*c8dee2aaSAndroid Build Coastguard Worker },
624*c8dee2aaSAndroid Build Coastguard Worker
625*c8dee2aaSAndroid Build Coastguard Worker {
626*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100 },
627*c8dee2aaSAndroid Build Coastguard Worker {
628*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, expanded_normal_100 },
629*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, expanded_normal_100 },
630*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, expanded_normal_100 },
631*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, expanded_normal_100 },
632*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_normal_100 },
633*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_normal_100 },
634*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_normal_100 },
635*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_normal_100 },
636*c8dee2aaSAndroid Build Coastguard Worker },
637*c8dee2aaSAndroid Build Coastguard Worker },
638*c8dee2aaSAndroid Build Coastguard Worker
639*c8dee2aaSAndroid Build Coastguard Worker {
640*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900 },
641*c8dee2aaSAndroid Build Coastguard Worker {
642*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, expanded_normal_900 },
643*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, expanded_normal_900 },
644*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, expanded_normal_900 },
645*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, expanded_normal_900 },
646*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_normal_900 },
647*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_normal_900 },
648*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_normal_900 },
649*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_normal_900 },
650*c8dee2aaSAndroid Build Coastguard Worker },
651*c8dee2aaSAndroid Build Coastguard Worker },
652*c8dee2aaSAndroid Build Coastguard Worker
653*c8dee2aaSAndroid Build Coastguard Worker {
654*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100,expanded_italic_900 },
655*c8dee2aaSAndroid Build Coastguard Worker {
656*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, expanded_italic_100 },
657*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, expanded_italic_900 },
658*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, expanded_italic_100 },
659*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, expanded_italic_900 },
660*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_italic_100 },
661*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_italic_900 },
662*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_italic_100 },
663*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_italic_900 },
664*c8dee2aaSAndroid Build Coastguard Worker },
665*c8dee2aaSAndroid Build Coastguard Worker },
666*c8dee2aaSAndroid Build Coastguard Worker
667*c8dee2aaSAndroid Build Coastguard Worker {
668*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100 },
669*c8dee2aaSAndroid Build Coastguard Worker {
670*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, expanded_italic_100 },
671*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, expanded_italic_100 },
672*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, expanded_italic_100 },
673*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, expanded_italic_100 },
674*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_italic_100 },
675*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_italic_100 },
676*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_italic_100 },
677*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_italic_100 },
678*c8dee2aaSAndroid Build Coastguard Worker },
679*c8dee2aaSAndroid Build Coastguard Worker },
680*c8dee2aaSAndroid Build Coastguard Worker
681*c8dee2aaSAndroid Build Coastguard Worker {
682*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900 },
683*c8dee2aaSAndroid Build Coastguard Worker {
684*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, expanded_italic_900 },
685*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, expanded_italic_900 },
686*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, expanded_italic_900 },
687*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, expanded_italic_900 },
688*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_italic_900 },
689*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_italic_900 },
690*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_italic_900 },
691*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_italic_900 },
692*c8dee2aaSAndroid Build Coastguard Worker },
693*c8dee2aaSAndroid Build Coastguard Worker },
694*c8dee2aaSAndroid Build Coastguard Worker
695*c8dee2aaSAndroid Build Coastguard Worker {
696*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_100, normal_normal_900 },
697*c8dee2aaSAndroid Build Coastguard Worker {
698*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_300, normal_normal_100 },
699*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_400, normal_normal_100 },
700*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_500, normal_normal_100 },
701*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_600, normal_normal_900 },
702*c8dee2aaSAndroid Build Coastguard Worker },
703*c8dee2aaSAndroid Build Coastguard Worker },
704*c8dee2aaSAndroid Build Coastguard Worker
705*c8dee2aaSAndroid Build Coastguard Worker {
706*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_100, normal_normal_400, normal_normal_900 },
707*c8dee2aaSAndroid Build Coastguard Worker {
708*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_300, normal_normal_100 },
709*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_400, normal_normal_400 },
710*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_500, normal_normal_400 },
711*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_600, normal_normal_900 },
712*c8dee2aaSAndroid Build Coastguard Worker },
713*c8dee2aaSAndroid Build Coastguard Worker },
714*c8dee2aaSAndroid Build Coastguard Worker
715*c8dee2aaSAndroid Build Coastguard Worker {
716*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_100, normal_normal_500, normal_normal_900 },
717*c8dee2aaSAndroid Build Coastguard Worker {
718*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_300, normal_normal_100 },
719*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_400, normal_normal_500 },
720*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_500, normal_normal_500 },
721*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_600, normal_normal_900 },
722*c8dee2aaSAndroid Build Coastguard Worker },
723*c8dee2aaSAndroid Build Coastguard Worker },
724*c8dee2aaSAndroid Build Coastguard Worker
725*c8dee2aaSAndroid Build Coastguard Worker {
726*c8dee2aaSAndroid Build Coastguard Worker { },
727*c8dee2aaSAndroid Build Coastguard Worker {
728*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_300, invalidFontStyle },
729*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_400, invalidFontStyle },
730*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_500, invalidFontStyle },
731*c8dee2aaSAndroid Build Coastguard Worker { normal_normal_600, invalidFontStyle },
732*c8dee2aaSAndroid Build Coastguard Worker },
733*c8dee2aaSAndroid Build Coastguard Worker },
734*c8dee2aaSAndroid Build Coastguard Worker {
735*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100,expanded_normal_900,
736*c8dee2aaSAndroid Build Coastguard Worker expanded_italic_100,expanded_italic_900,
737*c8dee2aaSAndroid Build Coastguard Worker expanded_obliqu_100,expanded_obliqu_900, },
738*c8dee2aaSAndroid Build Coastguard Worker {
739*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, expanded_normal_100 },
740*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, expanded_normal_900 },
741*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, expanded_italic_100 },
742*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, expanded_italic_900 },
743*c8dee2aaSAndroid Build Coastguard Worker { condensed_obliqu_100, expanded_obliqu_100 },
744*c8dee2aaSAndroid Build Coastguard Worker { condensed_obliqu_900, expanded_obliqu_900 },
745*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_normal_100 },
746*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_normal_900 },
747*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_italic_100 },
748*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_italic_900 },
749*c8dee2aaSAndroid Build Coastguard Worker { expanded_obliqu_100, expanded_obliqu_100 },
750*c8dee2aaSAndroid Build Coastguard Worker { expanded_obliqu_900, expanded_obliqu_900 },
751*c8dee2aaSAndroid Build Coastguard Worker },
752*c8dee2aaSAndroid Build Coastguard Worker },
753*c8dee2aaSAndroid Build Coastguard Worker {
754*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100,expanded_normal_900,
755*c8dee2aaSAndroid Build Coastguard Worker expanded_obliqu_100,expanded_obliqu_900, },
756*c8dee2aaSAndroid Build Coastguard Worker {
757*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, expanded_normal_100 },
758*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, expanded_normal_900 },
759*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, expanded_obliqu_100 },
760*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, expanded_obliqu_900 },
761*c8dee2aaSAndroid Build Coastguard Worker { condensed_obliqu_100, expanded_obliqu_100 },
762*c8dee2aaSAndroid Build Coastguard Worker { condensed_obliqu_900, expanded_obliqu_900 },
763*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_normal_100 },
764*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_normal_900 },
765*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_obliqu_100 },
766*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_obliqu_900 },
767*c8dee2aaSAndroid Build Coastguard Worker { expanded_obliqu_100, expanded_obliqu_100 },
768*c8dee2aaSAndroid Build Coastguard Worker { expanded_obliqu_900, expanded_obliqu_900 },
769*c8dee2aaSAndroid Build Coastguard Worker },
770*c8dee2aaSAndroid Build Coastguard Worker },
771*c8dee2aaSAndroid Build Coastguard Worker {
772*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100,expanded_italic_900,
773*c8dee2aaSAndroid Build Coastguard Worker expanded_obliqu_100,expanded_obliqu_900, },
774*c8dee2aaSAndroid Build Coastguard Worker {
775*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_100, expanded_obliqu_100 },
776*c8dee2aaSAndroid Build Coastguard Worker { condensed_normal_900, expanded_obliqu_900 },
777*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_100, expanded_italic_100 },
778*c8dee2aaSAndroid Build Coastguard Worker { condensed_italic_900, expanded_italic_900 },
779*c8dee2aaSAndroid Build Coastguard Worker { condensed_obliqu_100, expanded_obliqu_100 },
780*c8dee2aaSAndroid Build Coastguard Worker { condensed_obliqu_900, expanded_obliqu_900 },
781*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_100, expanded_obliqu_100 },
782*c8dee2aaSAndroid Build Coastguard Worker { expanded_normal_900, expanded_obliqu_900 },
783*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_100, expanded_italic_100 },
784*c8dee2aaSAndroid Build Coastguard Worker { expanded_italic_900, expanded_italic_900 },
785*c8dee2aaSAndroid Build Coastguard Worker { expanded_obliqu_100, expanded_obliqu_100 },
786*c8dee2aaSAndroid Build Coastguard Worker { expanded_obliqu_900, expanded_obliqu_900 },
787*c8dee2aaSAndroid Build Coastguard Worker },
788*c8dee2aaSAndroid Build Coastguard Worker },
789*c8dee2aaSAndroid Build Coastguard Worker };
790*c8dee2aaSAndroid Build Coastguard Worker
791*c8dee2aaSAndroid Build Coastguard Worker for (StyleSetTest& test : tests) {
792*c8dee2aaSAndroid Build Coastguard Worker for (const StyleSetTest::Case& testCase : test.cases) {
793*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkTypeface> typeface(test.styleSet.matchStyle(testCase.pattern));
794*c8dee2aaSAndroid Build Coastguard Worker if (typeface) {
795*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, typeface->fontStyle() == testCase.expectedResult);
796*c8dee2aaSAndroid Build Coastguard Worker } else {
797*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, invalidFontStyle == testCase.expectedResult);
798*c8dee2aaSAndroid Build Coastguard Worker }
799*c8dee2aaSAndroid Build Coastguard Worker }
800*c8dee2aaSAndroid Build Coastguard Worker }
801*c8dee2aaSAndroid Build Coastguard Worker }
802*c8dee2aaSAndroid Build Coastguard Worker
DEF_TEST(FontMgr_MatchCharacter,reporter)803*c8dee2aaSAndroid Build Coastguard Worker DEF_TEST(FontMgr_MatchCharacter, reporter) {
804*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkFontMgr> fm(ToolUtils::TestFontMgr());
805*c8dee2aaSAndroid Build Coastguard Worker // 0xD800 <= codepoint <= 0xDFFF || 0x10FFFF < codepoint are invalid
806*c8dee2aaSAndroid Build Coastguard Worker fm->matchFamilyStyleCharacter("Blah", SkFontStyle::Normal(), nullptr, 0, 0x0);
807*c8dee2aaSAndroid Build Coastguard Worker fm->matchFamilyStyleCharacter("Blah", SkFontStyle::Normal(), nullptr, 0, 0xD800);
808*c8dee2aaSAndroid Build Coastguard Worker fm->matchFamilyStyleCharacter("Blah", SkFontStyle::Normal(), nullptr, 0, 0xDFFF);
809*c8dee2aaSAndroid Build Coastguard Worker fm->matchFamilyStyleCharacter("Blah", SkFontStyle::Normal(), nullptr, 0, 0x110000);
810*c8dee2aaSAndroid Build Coastguard Worker fm->matchFamilyStyleCharacter("Blah", SkFontStyle::Normal(), nullptr, 0, 0x1FFFFF);
811*c8dee2aaSAndroid Build Coastguard Worker fm->matchFamilyStyleCharacter("Blah", SkFontStyle::Normal(), nullptr, 0, -1);
812*c8dee2aaSAndroid Build Coastguard Worker }
813