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