blob: 17a60bbd792ac8f1775bde0414468c330b7315b8 [file] [log] [blame]
reed@google.com83165a52013-04-11 18:31:25 +00001/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
Hal Canary209e4b12017-05-04 14:23:55 -04008#include "SkAdvancedTypefaceMetrics.h"
reed@google.com83165a52013-04-11 18:31:25 +00009#include "SkCommandLineFlags.h"
Hal Canary209e4b12017-05-04 14:23:55 -040010#include "SkFont.h"
reed@google.com83165a52013-04-11 18:31:25 +000011#include "SkFontMgr.h"
Hal Canary209e4b12017-05-04 14:23:55 -040012#include "SkPaint.h"
reed@google.com83165a52013-04-11 18:31:25 +000013#include "SkTypeface.h"
tfarina@chromium.org8f6884a2014-01-24 20:56:26 +000014#include "Test.h"
reed@google.com83165a52013-04-11 18:31:25 +000015
bungeman147ea2f2015-11-12 09:50:08 -080016#include <initializer_list>
17#include <limits>
18#include <vector>
19
reed@google.com43c27582014-04-08 15:04:29 +000020static void test_font(skiatest::Reporter* reporter) {
21 uint32_t flags = 0;
bungeman13b9c952016-05-12 10:09:30 -070022 sk_sp<SkFont> font(SkFont::Make(nullptr, 24, SkFont::kA8_MaskType, flags));
skia.committer@gmail.come1d94432014-04-09 03:04:11 +000023
bsalomon49f085d2014-09-05 13:34:00 -070024 REPORTER_ASSERT(reporter, font->getTypeface());
reed@google.com43c27582014-04-08 15:04:29 +000025 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'
skia.committer@gmail.come1d94432014-04-09 03:04:11 +000041
bungeman13b9c952016-05-12 10:09:30 -070042 sk_sp<SkFont> newFont(font->makeWithSize(36));
reed@google.com43c27582014-04-08 15:04:29 +000043 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);
bungeman13b9c952016-05-12 10:09:30 -070050 font = SkFont::Testing_CreateFromPaint(paint);
reed@google.com43c27582014-04-08 15:04:29 +000051 REPORTER_ASSERT(reporter, font.get());
52 REPORTER_ASSERT(reporter, font->getSize() == paint.getTextSize());
53 REPORTER_ASSERT(reporter, SkFont::kBW_MaskType == font->getMaskType());
54}
55
reed@google.comd44d9882013-09-18 20:32:25 +000056/*
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 */
reed@google.comc1a81eb2013-09-19 18:06:03 +000061static void test_alias_names(skiatest::Reporter* reporter) {
62 const char* inNames[] = {
63 "sans", "sans-serif", "serif", "monospace", "times", "helvetica"
64 };
skia.committer@gmail.comf91e3d42013-09-20 07:01:33 +000065
reed@google.comc1a81eb2013-09-19 18:06:03 +000066 for (size_t i = 0; i < SK_ARRAY_COUNT(inNames); ++i) {
mbocee6a9912016-05-31 11:42:36 -070067 sk_sp<SkTypeface> first(SkTypeface::MakeFromName(inNames[i], SkFontStyle()));
halcanary96fcdcc2015-08-27 07:41:13 -070068 if (nullptr == first.get()) {
reed@google.comc1a81eb2013-09-19 18:06:03 +000069 continue;
70 }
71 for (int j = 0; j < 10; ++j) {
mbocee6a9912016-05-31 11:42:36 -070072 sk_sp<SkTypeface> face(SkTypeface::MakeFromName(inNames[i], SkFontStyle()));
reed@google.comc1a81eb2013-09-19 18:06:03 +000073 #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 }
reed@google.comd44d9882013-09-18 20:32:25 +000081 }
82}
83
reed@google.com83165a52013-04-11 18:31:25 +000084static void test_fontiter(skiatest::Reporter* reporter, bool verbose) {
Hal Canary342b7ac2016-11-04 11:49:42 -040085 sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
reed@google.com83165a52013-04-11 18:31:25 +000086 int count = fm->countFamilies();
87
88 for (int i = 0; i < count; ++i) {
89 SkString fname;
90 fm->getFamilyName(i, &fname);
reed@google.com83165a52013-04-11 18:31:25 +000091
Hal Canary342b7ac2016-11-04 11:49:42 -040092 sk_sp<SkFontStyleSet> fnset(fm->matchFamily(fname.c_str()));
93 sk_sp<SkFontStyleSet> set(fm->createStyleSet(i));
bungeman@google.com71033442013-05-01 14:21:20 +000094 REPORTER_ASSERT(reporter, fnset->count() == set->count());
reed@google.com83165a52013-04-11 18:31:25 +000095
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);
reed@google.comeb029572013-04-25 14:59:32 +0000104// REPORTER_ASSERT(reporter, sname.size() > 0);
reed@google.com83165a52013-04-11 18:31:25 +0000105
Hal Canary342b7ac2016-11-04 11:49:42 -0400106 sk_sp<SkTypeface> face(set->createTypeface(j));
reed@google.comc1ccda32013-04-19 14:28:54 +0000107// REPORTER_ASSERT(reporter, face.get());
reed@google.com83165a52013-04-11 18:31:25 +0000108
109 if (verbose) {
110 SkDebugf("\t[%d] %s [%3d %d %d]\n", j, sname.c_str(),
bungemanb4bb7d82016-04-27 10:21:04 -0700111 fs.weight(), fs.width(), fs.slant());
reed@google.com83165a52013-04-11 18:31:25 +0000112 }
113 }
114 }
115}
116
bungeman7575bb12017-05-01 13:02:42 -0400117static void test_match(skiatest::Reporter* reporter) {
118 sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
119 sk_sp<SkFontStyleSet> styleSet(fm->matchFamily(nullptr));
120 REPORTER_ASSERT(reporter, styleSet);
121}
122
bungeman147ea2f2015-11-12 09:50:08 -0800123static void test_matchStyleCSS3(skiatest::Reporter* reporter) {
bungeman147ea2f2015-11-12 09:50:08 -0800124 static const SkFontStyle invalidFontStyle(101, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
125
126 class TestTypeface : public SkTypeface {
127 public:
bungemane3aea102016-07-13 05:16:58 -0700128 TestTypeface(const SkFontStyle& fontStyle) : SkTypeface(fontStyle, false){}
bungeman147ea2f2015-11-12 09:50:08 -0800129 protected:
130 SkStreamAsset* onOpenStream(int* ttcIndex) const override { return nullptr; }
reeda9322c22016-04-12 06:47:05 -0700131 SkScalerContext* onCreateScalerContext(const SkScalerContextEffects&,
132 const SkDescriptor*) const override {
bungeman147ea2f2015-11-12 09:50:08 -0800133 return nullptr;
134 }
135 void onFilterRec(SkScalerContextRec*) const override { }
Hal Canary209e4b12017-05-04 14:23:55 -0400136 std::unique_ptr<SkAdvancedTypefaceMetrics> onGetAdvancedMetrics() const override {
137 return nullptr;
138 }
bungeman147ea2f2015-11-12 09:50:08 -0800139 void onGetFontDescriptor(SkFontDescriptor*, bool*) const override { }
140 virtual int onCharsToGlyphs(const void* chars, Encoding encoding,
141 uint16_t glyphs[], int glyphCount) const override {
142 if (glyphs && glyphCount > 0) {
143 sk_bzero(glyphs, glyphCount * sizeof(glyphs[0]));
144 }
145 return 0;
146 }
Mike Kleinfc6c37b2016-09-27 09:34:10 -0400147 int onCountGlyphs() const override { return 0; }
148 int onGetUPEM() const override { return 0; }
bungeman147ea2f2015-11-12 09:50:08 -0800149 class EmptyLocalizedStrings : public SkTypeface::LocalizedStrings {
150 public:
151 bool next(SkTypeface::LocalizedString*) override { return false; }
152 };
153 void onGetFamilyName(SkString* familyName) const override {
154 familyName->reset();
155 }
156 SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override {
157 return new EmptyLocalizedStrings;
Mike Kleinfc6c37b2016-09-27 09:34:10 -0400158 }
Ben Wagnerfc497342017-02-24 11:15:26 -0500159 int onGetVariationDesignPosition(
160 SkFontArguments::VariationPosition::Coordinate coordinates[],
161 int coordinateCount) const override
162 {
163 return 0;
164 }
bungeman147ea2f2015-11-12 09:50:08 -0800165 int onGetTableTags(SkFontTableTag tags[]) const override { return 0; }
166 size_t onGetTableData(SkFontTableTag, size_t, size_t, void*) const override {
167 return 0;
168 }
169 };
170
171 class TestFontStyleSet : public SkFontStyleSet {
172 public:
173 TestFontStyleSet(std::initializer_list<SkFontStyle> styles) : fStyles(styles) {}
174 int count() override { return static_cast<int>(fStyles.size()); }
175 void getStyle(int index, SkFontStyle* style, SkString*) override {
176 if (style) {
177 *style = fStyles[index];
178 }
179 }
180 SkTypeface* createTypeface(int index) override {
181 if (index < 0 || this->count() <= index) {
bungemane3aea102016-07-13 05:16:58 -0700182 return new TestTypeface(invalidFontStyle);
bungeman147ea2f2015-11-12 09:50:08 -0800183 }
bungemane3aea102016-07-13 05:16:58 -0700184 return new TestTypeface(fStyles[index]);
bungeman147ea2f2015-11-12 09:50:08 -0800185 }
186 SkTypeface* matchStyle(const SkFontStyle& pattern) override {
187 return this->matchStyleCSS3(pattern);
188 }
189 private:
190 std::vector<SkFontStyle> fStyles;
191 };
192
193 SkFontStyle condensed_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
194 SkFontStyle condensed_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
195 SkFontStyle condensed_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
196 SkFontStyle condensed_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
bungemanb4bb7d82016-04-27 10:21:04 -0700197 SkFontStyle condensed_obliqu_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
198 SkFontStyle condensed_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800199 SkFontStyle expanded_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant);
200 SkFontStyle expanded_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant);
201 SkFontStyle expanded_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant);
202 SkFontStyle expanded_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant);
bungemanb4bb7d82016-04-27 10:21:04 -0700203 SkFontStyle expanded_obliqu_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kOblique_Slant);
204 SkFontStyle expanded_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kOblique_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800205
206 SkFontStyle normal_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800207 SkFontStyle normal_normal_300(SkFontStyle::kLight_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
208 SkFontStyle normal_normal_400(SkFontStyle::kNormal_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
209 SkFontStyle normal_normal_500(SkFontStyle::kMedium_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
210 SkFontStyle normal_normal_600(SkFontStyle::kSemiBold_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800211 SkFontStyle normal_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
212
213 struct StyleSetTest {
214 TestFontStyleSet styleSet;
215 struct Case {
216 SkFontStyle pattern;
217 SkFontStyle expectedResult;
218 };
219 std::vector<Case> cases;
220 } tests[] = {
221 {
222 { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900,
223 expanded_normal_100, expanded_normal_900, expanded_italic_100, expanded_italic_900 },
224 {
225 { condensed_normal_100, condensed_normal_100 },
226 { condensed_normal_900, condensed_normal_900 },
227 { condensed_italic_100, condensed_italic_100 },
228 { condensed_italic_900, condensed_italic_900 },
229 { expanded_normal_100, expanded_normal_100 },
230 { expanded_normal_900, expanded_normal_900 },
231 { expanded_italic_100, expanded_italic_100 },
232 { expanded_italic_900, expanded_italic_900 },
233 },
234 },
235
236 {
237 { condensed_normal_100,condensed_italic_100,expanded_normal_100,expanded_italic_100 },
238 {
239 { condensed_normal_100, condensed_normal_100 },
240 { condensed_normal_900, condensed_normal_100 },
241 { condensed_italic_100, condensed_italic_100 },
242 { condensed_italic_900, condensed_italic_100 },
243 { expanded_normal_100, expanded_normal_100 },
244 { expanded_normal_900, expanded_normal_100 },
245 { expanded_italic_100, expanded_italic_100 },
246 { expanded_italic_900, expanded_italic_100 },
247 },
248 },
249
250 {
251 { condensed_normal_900,condensed_italic_900,expanded_normal_900,expanded_italic_900 },
252 {
253 { condensed_normal_100, condensed_normal_900 },
254 { condensed_normal_900, condensed_normal_900 },
255 { condensed_italic_100, condensed_italic_900 },
256 { condensed_italic_900, condensed_italic_900 },
257 { expanded_normal_100, expanded_normal_900 },
258 { expanded_normal_900, expanded_normal_900 },
259 { expanded_italic_100, expanded_italic_900 },
260 { expanded_italic_900, expanded_italic_900 },
261 },
262 },
263
264 {
265 { condensed_normal_100,condensed_normal_900,expanded_normal_100,expanded_normal_900 },
266 {
267 { condensed_normal_100, condensed_normal_100 },
268 { condensed_normal_900, condensed_normal_900 },
269 { condensed_italic_100, condensed_normal_100 },
270 { condensed_italic_900, condensed_normal_900 },
271 { expanded_normal_100, expanded_normal_100 },
272 { expanded_normal_900, expanded_normal_900 },
273 { expanded_italic_100, expanded_normal_100 },
274 { expanded_italic_900, expanded_normal_900 },
275 },
276 },
277
278 {
279 { condensed_normal_100,expanded_normal_100 },
280 {
281 { condensed_normal_100, condensed_normal_100 },
282 { condensed_normal_900, condensed_normal_100 },
283 { condensed_italic_100, condensed_normal_100 },
284 { condensed_italic_900, condensed_normal_100 },
285 { expanded_normal_100, expanded_normal_100 },
286 { expanded_normal_900, expanded_normal_100 },
287 { expanded_italic_100, expanded_normal_100 },
288 { expanded_italic_900, expanded_normal_100 },
289 },
290 },
291
292 {
293 { condensed_normal_900,expanded_normal_900 },
294 {
295 { condensed_normal_100, condensed_normal_900 },
296 { condensed_normal_900, condensed_normal_900 },
297 { condensed_italic_100, condensed_normal_900 },
298 { condensed_italic_900, condensed_normal_900 },
299 { expanded_normal_100, expanded_normal_900 },
300 { expanded_normal_900, expanded_normal_900 },
301 { expanded_italic_100, expanded_normal_900 },
302 { expanded_italic_900, expanded_normal_900 },
303 },
304 },
305
306 {
307 { condensed_italic_100,condensed_italic_900,expanded_italic_100,expanded_italic_900 },
308 {
309 { condensed_normal_100, condensed_italic_100 },
310 { condensed_normal_900, condensed_italic_900 },
311 { condensed_italic_100, condensed_italic_100 },
312 { condensed_italic_900, condensed_italic_900 },
313 { expanded_normal_100, expanded_italic_100 },
314 { expanded_normal_900, expanded_italic_900 },
315 { expanded_italic_100, expanded_italic_100 },
316 { expanded_italic_900, expanded_italic_900 },
317 },
318 },
319
320 {
321 { condensed_italic_100,expanded_italic_100 },
322 {
323 { condensed_normal_100, condensed_italic_100 },
324 { condensed_normal_900, condensed_italic_100 },
325 { condensed_italic_100, condensed_italic_100 },
326 { condensed_italic_900, condensed_italic_100 },
327 { expanded_normal_100, expanded_italic_100 },
328 { expanded_normal_900, expanded_italic_100 },
329 { expanded_italic_100, expanded_italic_100 },
330 { expanded_italic_900, expanded_italic_100 },
331 },
332 },
333
334 {
335 { condensed_italic_900,expanded_italic_900 },
336 {
337 { condensed_normal_100, condensed_italic_900 },
338 { condensed_normal_900, condensed_italic_900 },
339 { condensed_italic_100, condensed_italic_900 },
340 { condensed_italic_900, condensed_italic_900 },
341 { expanded_normal_100, expanded_italic_900 },
342 { expanded_normal_900, expanded_italic_900 },
343 { expanded_italic_100, expanded_italic_900 },
344 { expanded_italic_900, expanded_italic_900 },
345 },
346 },
347
348 {
349 { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900 },
350 {
351 { condensed_normal_100, condensed_normal_100 },
352 { condensed_normal_900, condensed_normal_900 },
353 { condensed_italic_100, condensed_italic_100 },
354 { condensed_italic_900, condensed_italic_900 },
355 { expanded_normal_100, condensed_normal_100 },
356 { expanded_normal_900, condensed_normal_900 },
357 { expanded_italic_100, condensed_italic_100 },
358 { expanded_italic_900, condensed_italic_900 },
359 },
360 },
361
362 {
363 { condensed_normal_100,condensed_italic_100 },
364 {
365 { condensed_normal_100, condensed_normal_100 },
366 { condensed_normal_900, condensed_normal_100 },
367 { condensed_italic_100, condensed_italic_100 },
368 { condensed_italic_900, condensed_italic_100 },
369 { expanded_normal_100, condensed_normal_100 },
370 { expanded_normal_900, condensed_normal_100 },
371 { expanded_italic_100, condensed_italic_100 },
372 { expanded_italic_900, condensed_italic_100 },
373 },
374 },
375
376 {
377 { condensed_normal_900,condensed_italic_900 },
378 {
379 { condensed_normal_100, condensed_normal_900 },
380 { condensed_normal_900, condensed_normal_900 },
381 { condensed_italic_100, condensed_italic_900 },
382 { condensed_italic_900, condensed_italic_900 },
383 { expanded_normal_100, condensed_normal_900 },
384 { expanded_normal_900, condensed_normal_900 },
385 { expanded_italic_100, condensed_italic_900 },
386 { expanded_italic_900, condensed_italic_900 },
387 },
388 },
389
390 {
391 { condensed_normal_100,condensed_normal_900 },
392 {
393 { condensed_normal_100, condensed_normal_100 },
394 { condensed_normal_900, condensed_normal_900 },
395 { condensed_italic_100, condensed_normal_100 },
396 { condensed_italic_900, condensed_normal_900 },
397 { expanded_normal_100, condensed_normal_100 },
398 { expanded_normal_900, condensed_normal_900 },
399 { expanded_italic_100, condensed_normal_100 },
400 { expanded_italic_900, condensed_normal_900 },
401 },
402 },
403
404 {
405 { condensed_normal_100 },
406 {
407 { condensed_normal_100, condensed_normal_100 },
408 { condensed_normal_900, condensed_normal_100 },
409 { condensed_italic_100, condensed_normal_100 },
410 { condensed_italic_900, condensed_normal_100 },
411 { expanded_normal_100, condensed_normal_100 },
412 { expanded_normal_900, condensed_normal_100 },
413 { expanded_italic_100, condensed_normal_100 },
414 { expanded_italic_900, condensed_normal_100 },
415 },
416 },
417
418 {
419 { condensed_normal_900 },
420 {
421 { condensed_normal_100, condensed_normal_900 },
422 { condensed_normal_900, condensed_normal_900 },
423 { condensed_italic_100, condensed_normal_900 },
424 { condensed_italic_900, condensed_normal_900 },
425 { expanded_normal_100, condensed_normal_900 },
426 { expanded_normal_900, condensed_normal_900 },
427 { expanded_italic_100, condensed_normal_900 },
428 { expanded_italic_900, condensed_normal_900 },
429 },
430 },
431
432 {
433 { condensed_italic_100,condensed_italic_900 },
434 {
435 { condensed_normal_100, condensed_italic_100 },
436 { condensed_normal_900, condensed_italic_900 },
437 { condensed_italic_100, condensed_italic_100 },
438 { condensed_italic_900, condensed_italic_900 },
439 { expanded_normal_100, condensed_italic_100 },
440 { expanded_normal_900, condensed_italic_900 },
441 { expanded_italic_100, condensed_italic_100 },
442 { expanded_italic_900, condensed_italic_900 },
443 },
444 },
445
446 {
447 { condensed_italic_100 },
448 {
449 { condensed_normal_100, condensed_italic_100 },
450 { condensed_normal_900, condensed_italic_100 },
451 { condensed_italic_100, condensed_italic_100 },
452 { condensed_italic_900, condensed_italic_100 },
453 { expanded_normal_100, condensed_italic_100 },
454 { expanded_normal_900, condensed_italic_100 },
455 { expanded_italic_100, condensed_italic_100 },
456 { expanded_italic_900, condensed_italic_100 },
457 },
458 },
459
460 {
461 { condensed_italic_900 },
462 {
463 { condensed_normal_100, condensed_italic_900 },
464 { condensed_normal_900, condensed_italic_900 },
465 { condensed_italic_100, condensed_italic_900 },
466 { condensed_italic_900, condensed_italic_900 },
467 { expanded_normal_100, condensed_italic_900 },
468 { expanded_normal_900, condensed_italic_900 },
469 { expanded_italic_100, condensed_italic_900 },
470 { expanded_italic_900, condensed_italic_900 },
471 },
472 },
473
474 {
bungemanb4bb7d82016-04-27 10:21:04 -0700475 { expanded_normal_100,expanded_normal_900,
476 expanded_italic_100,expanded_italic_900 },
bungeman147ea2f2015-11-12 09:50:08 -0800477 {
478 { condensed_normal_100, expanded_normal_100 },
479 { condensed_normal_900, expanded_normal_900 },
480 { condensed_italic_100, expanded_italic_100 },
481 { condensed_italic_900, expanded_italic_900 },
bungemanb4bb7d82016-04-27 10:21:04 -0700482 { condensed_obliqu_100, expanded_italic_100 },
483 { condensed_obliqu_900, expanded_italic_900 },
bungeman147ea2f2015-11-12 09:50:08 -0800484 { expanded_normal_100, expanded_normal_100 },
485 { expanded_normal_900, expanded_normal_900 },
486 { expanded_italic_100, expanded_italic_100 },
487 { expanded_italic_900, expanded_italic_900 },
bungemanb4bb7d82016-04-27 10:21:04 -0700488 { expanded_obliqu_100, expanded_italic_100 },
489 { expanded_obliqu_900, expanded_italic_900 },
bungeman147ea2f2015-11-12 09:50:08 -0800490 },
491 },
492
493 {
494 { expanded_normal_100,expanded_italic_100 },
495 {
496 { condensed_normal_100, expanded_normal_100 },
497 { condensed_normal_900, expanded_normal_100 },
498 { condensed_italic_100, expanded_italic_100 },
499 { condensed_italic_900, expanded_italic_100 },
500 { expanded_normal_100, expanded_normal_100 },
501 { expanded_normal_900, expanded_normal_100 },
502 { expanded_italic_100, expanded_italic_100 },
503 { expanded_italic_900, expanded_italic_100 },
504 },
505 },
506
507 {
508 { expanded_normal_900,expanded_italic_900 },
509 {
510 { condensed_normal_100, expanded_normal_900 },
511 { condensed_normal_900, expanded_normal_900 },
512 { condensed_italic_100, expanded_italic_900 },
513 { condensed_italic_900, expanded_italic_900 },
514 { expanded_normal_100, expanded_normal_900 },
515 { expanded_normal_900, expanded_normal_900 },
516 { expanded_italic_100, expanded_italic_900 },
517 { expanded_italic_900, expanded_italic_900 },
518 },
519 },
520
521 {
522 { expanded_normal_100,expanded_normal_900 },
523 {
524 { condensed_normal_100, expanded_normal_100 },
525 { condensed_normal_900, expanded_normal_900 },
526 { condensed_italic_100, expanded_normal_100 },
527 { condensed_italic_900, expanded_normal_900 },
528 { expanded_normal_100, expanded_normal_100 },
529 { expanded_normal_900, expanded_normal_900 },
530 { expanded_italic_100, expanded_normal_100 },
531 { expanded_italic_900, expanded_normal_900 },
532 },
533 },
534
535 {
536 { expanded_normal_100 },
537 {
538 { condensed_normal_100, expanded_normal_100 },
539 { condensed_normal_900, expanded_normal_100 },
540 { condensed_italic_100, expanded_normal_100 },
541 { condensed_italic_900, expanded_normal_100 },
542 { expanded_normal_100, expanded_normal_100 },
543 { expanded_normal_900, expanded_normal_100 },
544 { expanded_italic_100, expanded_normal_100 },
545 { expanded_italic_900, expanded_normal_100 },
546 },
547 },
548
549 {
550 { expanded_normal_900 },
551 {
552 { condensed_normal_100, expanded_normal_900 },
553 { condensed_normal_900, expanded_normal_900 },
554 { condensed_italic_100, expanded_normal_900 },
555 { condensed_italic_900, expanded_normal_900 },
556 { expanded_normal_100, expanded_normal_900 },
557 { expanded_normal_900, expanded_normal_900 },
558 { expanded_italic_100, expanded_normal_900 },
559 { expanded_italic_900, expanded_normal_900 },
560 },
561 },
562
563 {
564 { expanded_italic_100,expanded_italic_900 },
565 {
566 { condensed_normal_100, expanded_italic_100 },
567 { condensed_normal_900, expanded_italic_900 },
568 { condensed_italic_100, expanded_italic_100 },
569 { condensed_italic_900, expanded_italic_900 },
570 { expanded_normal_100, expanded_italic_100 },
571 { expanded_normal_900, expanded_italic_900 },
572 { expanded_italic_100, expanded_italic_100 },
573 { expanded_italic_900, expanded_italic_900 },
574 },
575 },
576
577 {
578 { expanded_italic_100 },
579 {
580 { condensed_normal_100, expanded_italic_100 },
581 { condensed_normal_900, expanded_italic_100 },
582 { condensed_italic_100, expanded_italic_100 },
583 { condensed_italic_900, expanded_italic_100 },
584 { expanded_normal_100, expanded_italic_100 },
585 { expanded_normal_900, expanded_italic_100 },
586 { expanded_italic_100, expanded_italic_100 },
587 { expanded_italic_900, expanded_italic_100 },
588 },
589 },
590
591 {
592 { expanded_italic_900 },
593 {
594 { condensed_normal_100, expanded_italic_900 },
595 { condensed_normal_900, expanded_italic_900 },
596 { condensed_italic_100, expanded_italic_900 },
597 { condensed_italic_900, expanded_italic_900 },
598 { expanded_normal_100, expanded_italic_900 },
599 { expanded_normal_900, expanded_italic_900 },
600 { expanded_italic_100, expanded_italic_900 },
601 { expanded_italic_900, expanded_italic_900 },
602 },
603 },
604
605 {
606 { normal_normal_100, normal_normal_900 },
607 {
608 { normal_normal_300, normal_normal_100 },
609 { normal_normal_400, normal_normal_100 },
610 { normal_normal_500, normal_normal_100 },
611 { normal_normal_600, normal_normal_900 },
612 },
613 },
614
615 {
616 { normal_normal_100, normal_normal_400, normal_normal_900 },
617 {
618 { normal_normal_300, normal_normal_100 },
619 { normal_normal_400, normal_normal_400 },
620 { normal_normal_500, normal_normal_400 },
621 { normal_normal_600, normal_normal_900 },
622 },
623 },
624
625 {
626 { normal_normal_100, normal_normal_500, normal_normal_900 },
627 {
628 { normal_normal_300, normal_normal_100 },
629 { normal_normal_400, normal_normal_500 },
630 { normal_normal_500, normal_normal_500 },
631 { normal_normal_600, normal_normal_900 },
632 },
633 },
634
635 {
636 { },
637 {
638 { normal_normal_300, invalidFontStyle },
639 { normal_normal_400, invalidFontStyle },
640 { normal_normal_500, invalidFontStyle },
641 { normal_normal_600, invalidFontStyle },
642 },
643 },
bungemanb4bb7d82016-04-27 10:21:04 -0700644 {
645 { expanded_normal_100,expanded_normal_900,
646 expanded_italic_100,expanded_italic_900,
647 expanded_obliqu_100,expanded_obliqu_900, },
648 {
649 { condensed_normal_100, expanded_normal_100 },
650 { condensed_normal_900, expanded_normal_900 },
651 { condensed_italic_100, expanded_italic_100 },
652 { condensed_italic_900, expanded_italic_900 },
653 { condensed_obliqu_100, expanded_obliqu_100 },
654 { condensed_obliqu_900, expanded_obliqu_900 },
655 { expanded_normal_100, expanded_normal_100 },
656 { expanded_normal_900, expanded_normal_900 },
657 { expanded_italic_100, expanded_italic_100 },
658 { expanded_italic_900, expanded_italic_900 },
659 { expanded_obliqu_100, expanded_obliqu_100 },
660 { expanded_obliqu_900, expanded_obliqu_900 },
661 },
662 },
663 {
664 { expanded_normal_100,expanded_normal_900,
665 expanded_obliqu_100,expanded_obliqu_900, },
666 {
667 { condensed_normal_100, expanded_normal_100 },
668 { condensed_normal_900, expanded_normal_900 },
669 { condensed_italic_100, expanded_obliqu_100 },
670 { condensed_italic_900, expanded_obliqu_900 },
671 { condensed_obliqu_100, expanded_obliqu_100 },
672 { condensed_obliqu_900, expanded_obliqu_900 },
673 { expanded_normal_100, expanded_normal_100 },
674 { expanded_normal_900, expanded_normal_900 },
675 { expanded_italic_100, expanded_obliqu_100 },
676 { expanded_italic_900, expanded_obliqu_900 },
677 { expanded_obliqu_100, expanded_obliqu_100 },
678 { expanded_obliqu_900, expanded_obliqu_900 },
679 },
680 },
681 {
682 { expanded_italic_100,expanded_italic_900,
683 expanded_obliqu_100,expanded_obliqu_900, },
684 {
685 { condensed_normal_100, expanded_obliqu_100 },
686 { condensed_normal_900, expanded_obliqu_900 },
687 { condensed_italic_100, expanded_italic_100 },
688 { condensed_italic_900, expanded_italic_900 },
689 { condensed_obliqu_100, expanded_obliqu_100 },
690 { condensed_obliqu_900, expanded_obliqu_900 },
691 { expanded_normal_100, expanded_obliqu_100 },
692 { expanded_normal_900, expanded_obliqu_900 },
693 { expanded_italic_100, expanded_italic_100 },
694 { expanded_italic_900, expanded_italic_900 },
695 { expanded_obliqu_100, expanded_obliqu_100 },
696 { expanded_obliqu_900, expanded_obliqu_900 },
697 },
698 },
bungeman147ea2f2015-11-12 09:50:08 -0800699 };
700
701 for (StyleSetTest& test : tests) {
Mike Klein6ad99092016-10-26 10:35:22 -0400702 for (const StyleSetTest::Case& testCase : test.cases) {
Hal Canary342b7ac2016-11-04 11:49:42 -0400703 sk_sp<SkTypeface> typeface(test.styleSet.matchStyle(testCase.pattern));
bungeman147ea2f2015-11-12 09:50:08 -0800704 if (typeface) {
705 REPORTER_ASSERT(reporter, typeface->fontStyle() == testCase.expectedResult);
706 } else {
707 REPORTER_ASSERT(reporter, invalidFontStyle == testCase.expectedResult);
708 }
709 }
710 }
711}
712
reed@google.com66c9f992013-04-11 19:04:34 +0000713DEFINE_bool(verboseFontMgr, false, "run verbose fontmgr tests.");
reed@google.com83165a52013-04-11 18:31:25 +0000714
tfarina@chromium.orge4fafb12013-12-12 21:11:12 +0000715DEF_TEST(FontMgr, reporter) {
bungeman7575bb12017-05-01 13:02:42 -0400716 test_match(reporter);
bungeman147ea2f2015-11-12 09:50:08 -0800717 test_matchStyleCSS3(reporter);
reed@google.com83165a52013-04-11 18:31:25 +0000718 test_fontiter(reporter, FLAGS_verboseFontMgr);
reed@google.comc1a81eb2013-09-19 18:06:03 +0000719 test_alias_names(reporter);
reed@google.com43c27582014-04-08 15:04:29 +0000720 test_font(reporter);
reed@google.com83165a52013-04-11 18:31:25 +0000721}