blob: 96af746ace7436d7f5f3425375a3ff38efc946ca [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
reed@google.com83165a52013-04-11 18:31:25 +00008#include "SkCommandLineFlags.h"
9#include "SkFontMgr.h"
10#include "SkTypeface.h"
tfarina@chromium.org8f6884a2014-01-24 20:56:26 +000011#include "Test.h"
reed@google.com83165a52013-04-11 18:31:25 +000012
reed@google.com43c27582014-04-08 15:04:29 +000013#include "SkFont.h"
14#include "SkPaint.h"
bungeman147ea2f2015-11-12 09:50:08 -080015
16#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;
halcanary96fcdcc2015-08-27 07:41:13 -070022 SkAutoTUnref<SkFont> font(SkFont::Create(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
reed@google.com43c27582014-04-08 15:04:29 +000042 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
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) {
67 SkAutoTUnref<SkTypeface> first(SkTypeface::CreateFromName(inNames[i],
68 SkTypeface::kNormal));
halcanary96fcdcc2015-08-27 07:41:13 -070069 if (nullptr == first.get()) {
reed@google.comc1a81eb2013-09-19 18:06:03 +000070 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 }
reed@google.comd44d9882013-09-18 20:32:25 +000083 }
84}
85
reed@google.com83165a52013-04-11 18:31:25 +000086static 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);
reed@google.com83165a52013-04-11 18:31:25 +000093
bungeman@google.com71033442013-05-01 14:21:20 +000094 SkAutoTUnref<SkFontStyleSet> fnset(fm->matchFamily(fname.c_str()));
reed@google.com83165a52013-04-11 18:31:25 +000095 SkAutoTUnref<SkFontStyleSet> set(fm->createStyleSet(i));
bungeman@google.com71033442013-05-01 14:21:20 +000096 REPORTER_ASSERT(reporter, fnset->count() == set->count());
reed@google.com83165a52013-04-11 18:31:25 +000097
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);
reed@google.comeb029572013-04-25 14:59:32 +0000106// REPORTER_ASSERT(reporter, sname.size() > 0);
reed@google.com83165a52013-04-11 18:31:25 +0000107
108 SkAutoTUnref<SkTypeface> face(set->createTypeface(j));
reed@google.comc1ccda32013-04-19 14:28:54 +0000109// REPORTER_ASSERT(reporter, face.get());
reed@google.com83165a52013-04-11 18:31:25 +0000110
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
bungeman147ea2f2015-11-12 09:50:08 -0800119static 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; }
reeda9322c22016-04-12 06:47:05 -0700128 SkScalerContext* onCreateScalerContext(const SkScalerContextEffects&,
129 const SkDescriptor*) const override {
bungeman147ea2f2015-11-12 09:50:08 -0800130 return nullptr;
131 }
132 void onFilterRec(SkScalerContextRec*) const override { }
133 virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics(
134 PerGlyphInfo,
135 const uint32_t*, uint32_t) const override { return nullptr; }
136 void onGetFontDescriptor(SkFontDescriptor*, bool*) const override { }
137 virtual int onCharsToGlyphs(const void* chars, Encoding encoding,
138 uint16_t glyphs[], int glyphCount) const override {
139 if (glyphs && glyphCount > 0) {
140 sk_bzero(glyphs, glyphCount * sizeof(glyphs[0]));
141 }
142 return 0;
143 }
144 int onCountGlyphs() const override { return 0; };
145 int onGetUPEM() const override { return 0; };
146 class EmptyLocalizedStrings : public SkTypeface::LocalizedStrings {
147 public:
148 bool next(SkTypeface::LocalizedString*) override { return false; }
149 };
150 void onGetFamilyName(SkString* familyName) const override {
151 familyName->reset();
152 }
153 SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override {
154 return new EmptyLocalizedStrings;
155 };
156 int onGetTableTags(SkFontTableTag tags[]) const override { return 0; }
157 size_t onGetTableData(SkFontTableTag, size_t, size_t, void*) const override {
158 return 0;
159 }
160 };
161
162 class TestFontStyleSet : public SkFontStyleSet {
163 public:
164 TestFontStyleSet(std::initializer_list<SkFontStyle> styles) : fStyles(styles) {}
165 int count() override { return static_cast<int>(fStyles.size()); }
166 void getStyle(int index, SkFontStyle* style, SkString*) override {
167 if (style) {
168 *style = fStyles[index];
169 }
170 }
171 SkTypeface* createTypeface(int index) override {
172 if (index < 0 || this->count() <= index) {
173 return new TestTypeface(invalidFontStyle, invalidFontID);
174 }
175 return new TestTypeface(fStyles[index], index);
176 }
177 SkTypeface* matchStyle(const SkFontStyle& pattern) override {
178 return this->matchStyleCSS3(pattern);
179 }
180 private:
181 std::vector<SkFontStyle> fStyles;
182 };
183
184 SkFontStyle condensed_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
185 SkFontStyle condensed_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
186 SkFontStyle condensed_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
187 SkFontStyle condensed_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
188 SkFontStyle expanded_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant);
189 SkFontStyle expanded_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant);
190 SkFontStyle expanded_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant);
191 SkFontStyle expanded_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant);
192
193 SkFontStyle normal_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
194 SkFontStyle normal_normal_200(SkFontStyle::kExtraLight_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
195 SkFontStyle normal_normal_300(SkFontStyle::kLight_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
196 SkFontStyle normal_normal_400(SkFontStyle::kNormal_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
197 SkFontStyle normal_normal_500(SkFontStyle::kMedium_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
198 SkFontStyle normal_normal_600(SkFontStyle::kSemiBold_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
199 SkFontStyle normal_normal_700(SkFontStyle::kBold_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
200 SkFontStyle normal_normal_800(SkFontStyle::kExtraBold_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
201 SkFontStyle normal_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
202
203 struct StyleSetTest {
204 TestFontStyleSet styleSet;
205 struct Case {
206 SkFontStyle pattern;
207 SkFontStyle expectedResult;
208 };
209 std::vector<Case> cases;
210 } tests[] = {
211 {
212 { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900,
213 expanded_normal_100, expanded_normal_900, expanded_italic_100, expanded_italic_900 },
214 {
215 { condensed_normal_100, condensed_normal_100 },
216 { condensed_normal_900, condensed_normal_900 },
217 { condensed_italic_100, condensed_italic_100 },
218 { condensed_italic_900, condensed_italic_900 },
219 { expanded_normal_100, expanded_normal_100 },
220 { expanded_normal_900, expanded_normal_900 },
221 { expanded_italic_100, expanded_italic_100 },
222 { expanded_italic_900, expanded_italic_900 },
223 },
224 },
225
226 {
227 { condensed_normal_100,condensed_italic_100,expanded_normal_100,expanded_italic_100 },
228 {
229 { condensed_normal_100, condensed_normal_100 },
230 { condensed_normal_900, condensed_normal_100 },
231 { condensed_italic_100, condensed_italic_100 },
232 { condensed_italic_900, condensed_italic_100 },
233 { expanded_normal_100, expanded_normal_100 },
234 { expanded_normal_900, expanded_normal_100 },
235 { expanded_italic_100, expanded_italic_100 },
236 { expanded_italic_900, expanded_italic_100 },
237 },
238 },
239
240 {
241 { condensed_normal_900,condensed_italic_900,expanded_normal_900,expanded_italic_900 },
242 {
243 { condensed_normal_100, condensed_normal_900 },
244 { condensed_normal_900, condensed_normal_900 },
245 { condensed_italic_100, condensed_italic_900 },
246 { condensed_italic_900, condensed_italic_900 },
247 { expanded_normal_100, expanded_normal_900 },
248 { expanded_normal_900, expanded_normal_900 },
249 { expanded_italic_100, expanded_italic_900 },
250 { expanded_italic_900, expanded_italic_900 },
251 },
252 },
253
254 {
255 { condensed_normal_100,condensed_normal_900,expanded_normal_100,expanded_normal_900 },
256 {
257 { condensed_normal_100, condensed_normal_100 },
258 { condensed_normal_900, condensed_normal_900 },
259 { condensed_italic_100, condensed_normal_100 },
260 { condensed_italic_900, condensed_normal_900 },
261 { expanded_normal_100, expanded_normal_100 },
262 { expanded_normal_900, expanded_normal_900 },
263 { expanded_italic_100, expanded_normal_100 },
264 { expanded_italic_900, expanded_normal_900 },
265 },
266 },
267
268 {
269 { condensed_normal_100,expanded_normal_100 },
270 {
271 { condensed_normal_100, condensed_normal_100 },
272 { condensed_normal_900, condensed_normal_100 },
273 { condensed_italic_100, condensed_normal_100 },
274 { condensed_italic_900, condensed_normal_100 },
275 { expanded_normal_100, expanded_normal_100 },
276 { expanded_normal_900, expanded_normal_100 },
277 { expanded_italic_100, expanded_normal_100 },
278 { expanded_italic_900, expanded_normal_100 },
279 },
280 },
281
282 {
283 { condensed_normal_900,expanded_normal_900 },
284 {
285 { condensed_normal_100, condensed_normal_900 },
286 { condensed_normal_900, condensed_normal_900 },
287 { condensed_italic_100, condensed_normal_900 },
288 { condensed_italic_900, condensed_normal_900 },
289 { expanded_normal_100, expanded_normal_900 },
290 { expanded_normal_900, expanded_normal_900 },
291 { expanded_italic_100, expanded_normal_900 },
292 { expanded_italic_900, expanded_normal_900 },
293 },
294 },
295
296 {
297 { condensed_italic_100,condensed_italic_900,expanded_italic_100,expanded_italic_900 },
298 {
299 { condensed_normal_100, condensed_italic_100 },
300 { condensed_normal_900, condensed_italic_900 },
301 { condensed_italic_100, condensed_italic_100 },
302 { condensed_italic_900, condensed_italic_900 },
303 { expanded_normal_100, expanded_italic_100 },
304 { expanded_normal_900, expanded_italic_900 },
305 { expanded_italic_100, expanded_italic_100 },
306 { expanded_italic_900, expanded_italic_900 },
307 },
308 },
309
310 {
311 { condensed_italic_100,expanded_italic_100 },
312 {
313 { condensed_normal_100, condensed_italic_100 },
314 { condensed_normal_900, condensed_italic_100 },
315 { condensed_italic_100, condensed_italic_100 },
316 { condensed_italic_900, condensed_italic_100 },
317 { expanded_normal_100, expanded_italic_100 },
318 { expanded_normal_900, expanded_italic_100 },
319 { expanded_italic_100, expanded_italic_100 },
320 { expanded_italic_900, expanded_italic_100 },
321 },
322 },
323
324 {
325 { condensed_italic_900,expanded_italic_900 },
326 {
327 { condensed_normal_100, condensed_italic_900 },
328 { condensed_normal_900, condensed_italic_900 },
329 { condensed_italic_100, condensed_italic_900 },
330 { condensed_italic_900, condensed_italic_900 },
331 { expanded_normal_100, expanded_italic_900 },
332 { expanded_normal_900, expanded_italic_900 },
333 { expanded_italic_100, expanded_italic_900 },
334 { expanded_italic_900, expanded_italic_900 },
335 },
336 },
337
338 {
339 { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900 },
340 {
341 { condensed_normal_100, condensed_normal_100 },
342 { condensed_normal_900, condensed_normal_900 },
343 { condensed_italic_100, condensed_italic_100 },
344 { condensed_italic_900, condensed_italic_900 },
345 { expanded_normal_100, condensed_normal_100 },
346 { expanded_normal_900, condensed_normal_900 },
347 { expanded_italic_100, condensed_italic_100 },
348 { expanded_italic_900, condensed_italic_900 },
349 },
350 },
351
352 {
353 { condensed_normal_100,condensed_italic_100 },
354 {
355 { condensed_normal_100, condensed_normal_100 },
356 { condensed_normal_900, condensed_normal_100 },
357 { condensed_italic_100, condensed_italic_100 },
358 { condensed_italic_900, condensed_italic_100 },
359 { expanded_normal_100, condensed_normal_100 },
360 { expanded_normal_900, condensed_normal_100 },
361 { expanded_italic_100, condensed_italic_100 },
362 { expanded_italic_900, condensed_italic_100 },
363 },
364 },
365
366 {
367 { condensed_normal_900,condensed_italic_900 },
368 {
369 { condensed_normal_100, condensed_normal_900 },
370 { condensed_normal_900, condensed_normal_900 },
371 { condensed_italic_100, condensed_italic_900 },
372 { condensed_italic_900, condensed_italic_900 },
373 { expanded_normal_100, condensed_normal_900 },
374 { expanded_normal_900, condensed_normal_900 },
375 { expanded_italic_100, condensed_italic_900 },
376 { expanded_italic_900, condensed_italic_900 },
377 },
378 },
379
380 {
381 { condensed_normal_100,condensed_normal_900 },
382 {
383 { condensed_normal_100, condensed_normal_100 },
384 { condensed_normal_900, condensed_normal_900 },
385 { condensed_italic_100, condensed_normal_100 },
386 { condensed_italic_900, condensed_normal_900 },
387 { expanded_normal_100, condensed_normal_100 },
388 { expanded_normal_900, condensed_normal_900 },
389 { expanded_italic_100, condensed_normal_100 },
390 { expanded_italic_900, condensed_normal_900 },
391 },
392 },
393
394 {
395 { condensed_normal_100 },
396 {
397 { condensed_normal_100, condensed_normal_100 },
398 { condensed_normal_900, condensed_normal_100 },
399 { condensed_italic_100, condensed_normal_100 },
400 { condensed_italic_900, condensed_normal_100 },
401 { expanded_normal_100, condensed_normal_100 },
402 { expanded_normal_900, condensed_normal_100 },
403 { expanded_italic_100, condensed_normal_100 },
404 { expanded_italic_900, condensed_normal_100 },
405 },
406 },
407
408 {
409 { condensed_normal_900 },
410 {
411 { condensed_normal_100, condensed_normal_900 },
412 { condensed_normal_900, condensed_normal_900 },
413 { condensed_italic_100, condensed_normal_900 },
414 { condensed_italic_900, condensed_normal_900 },
415 { expanded_normal_100, condensed_normal_900 },
416 { expanded_normal_900, condensed_normal_900 },
417 { expanded_italic_100, condensed_normal_900 },
418 { expanded_italic_900, condensed_normal_900 },
419 },
420 },
421
422 {
423 { condensed_italic_100,condensed_italic_900 },
424 {
425 { condensed_normal_100, condensed_italic_100 },
426 { condensed_normal_900, condensed_italic_900 },
427 { condensed_italic_100, condensed_italic_100 },
428 { condensed_italic_900, condensed_italic_900 },
429 { expanded_normal_100, condensed_italic_100 },
430 { expanded_normal_900, condensed_italic_900 },
431 { expanded_italic_100, condensed_italic_100 },
432 { expanded_italic_900, condensed_italic_900 },
433 },
434 },
435
436 {
437 { condensed_italic_100 },
438 {
439 { condensed_normal_100, condensed_italic_100 },
440 { condensed_normal_900, condensed_italic_100 },
441 { condensed_italic_100, condensed_italic_100 },
442 { condensed_italic_900, condensed_italic_100 },
443 { expanded_normal_100, condensed_italic_100 },
444 { expanded_normal_900, condensed_italic_100 },
445 { expanded_italic_100, condensed_italic_100 },
446 { expanded_italic_900, condensed_italic_100 },
447 },
448 },
449
450 {
451 { condensed_italic_900 },
452 {
453 { condensed_normal_100, condensed_italic_900 },
454 { condensed_normal_900, condensed_italic_900 },
455 { condensed_italic_100, condensed_italic_900 },
456 { condensed_italic_900, condensed_italic_900 },
457 { expanded_normal_100, condensed_italic_900 },
458 { expanded_normal_900, condensed_italic_900 },
459 { expanded_italic_100, condensed_italic_900 },
460 { expanded_italic_900, condensed_italic_900 },
461 },
462 },
463
464 {
465 { expanded_normal_100,expanded_normal_900,expanded_italic_100,expanded_italic_900 },
466 {
467 { condensed_normal_100, expanded_normal_100 },
468 { condensed_normal_900, expanded_normal_900 },
469 { condensed_italic_100, expanded_italic_100 },
470 { condensed_italic_900, expanded_italic_900 },
471 { expanded_normal_100, expanded_normal_100 },
472 { expanded_normal_900, expanded_normal_900 },
473 { expanded_italic_100, expanded_italic_100 },
474 { expanded_italic_900, expanded_italic_900 },
475 },
476 },
477
478 {
479 { expanded_normal_100,expanded_italic_100 },
480 {
481 { condensed_normal_100, expanded_normal_100 },
482 { condensed_normal_900, expanded_normal_100 },
483 { condensed_italic_100, expanded_italic_100 },
484 { condensed_italic_900, expanded_italic_100 },
485 { expanded_normal_100, expanded_normal_100 },
486 { expanded_normal_900, expanded_normal_100 },
487 { expanded_italic_100, expanded_italic_100 },
488 { expanded_italic_900, expanded_italic_100 },
489 },
490 },
491
492 {
493 { expanded_normal_900,expanded_italic_900 },
494 {
495 { condensed_normal_100, expanded_normal_900 },
496 { condensed_normal_900, expanded_normal_900 },
497 { condensed_italic_100, expanded_italic_900 },
498 { condensed_italic_900, expanded_italic_900 },
499 { expanded_normal_100, expanded_normal_900 },
500 { expanded_normal_900, expanded_normal_900 },
501 { expanded_italic_100, expanded_italic_900 },
502 { expanded_italic_900, expanded_italic_900 },
503 },
504 },
505
506 {
507 { expanded_normal_100,expanded_normal_900 },
508 {
509 { condensed_normal_100, expanded_normal_100 },
510 { condensed_normal_900, expanded_normal_900 },
511 { condensed_italic_100, expanded_normal_100 },
512 { condensed_italic_900, expanded_normal_900 },
513 { expanded_normal_100, expanded_normal_100 },
514 { expanded_normal_900, expanded_normal_900 },
515 { expanded_italic_100, expanded_normal_100 },
516 { expanded_italic_900, expanded_normal_900 },
517 },
518 },
519
520 {
521 { expanded_normal_100 },
522 {
523 { condensed_normal_100, expanded_normal_100 },
524 { condensed_normal_900, expanded_normal_100 },
525 { condensed_italic_100, expanded_normal_100 },
526 { condensed_italic_900, expanded_normal_100 },
527 { expanded_normal_100, expanded_normal_100 },
528 { expanded_normal_900, expanded_normal_100 },
529 { expanded_italic_100, expanded_normal_100 },
530 { expanded_italic_900, expanded_normal_100 },
531 },
532 },
533
534 {
535 { expanded_normal_900 },
536 {
537 { condensed_normal_100, expanded_normal_900 },
538 { condensed_normal_900, expanded_normal_900 },
539 { condensed_italic_100, expanded_normal_900 },
540 { condensed_italic_900, expanded_normal_900 },
541 { expanded_normal_100, expanded_normal_900 },
542 { expanded_normal_900, expanded_normal_900 },
543 { expanded_italic_100, expanded_normal_900 },
544 { expanded_italic_900, expanded_normal_900 },
545 },
546 },
547
548 {
549 { expanded_italic_100,expanded_italic_900 },
550 {
551 { condensed_normal_100, expanded_italic_100 },
552 { condensed_normal_900, expanded_italic_900 },
553 { condensed_italic_100, expanded_italic_100 },
554 { condensed_italic_900, expanded_italic_900 },
555 { expanded_normal_100, expanded_italic_100 },
556 { expanded_normal_900, expanded_italic_900 },
557 { expanded_italic_100, expanded_italic_100 },
558 { expanded_italic_900, expanded_italic_900 },
559 },
560 },
561
562 {
563 { expanded_italic_100 },
564 {
565 { condensed_normal_100, expanded_italic_100 },
566 { condensed_normal_900, expanded_italic_100 },
567 { condensed_italic_100, expanded_italic_100 },
568 { condensed_italic_900, expanded_italic_100 },
569 { expanded_normal_100, expanded_italic_100 },
570 { expanded_normal_900, expanded_italic_100 },
571 { expanded_italic_100, expanded_italic_100 },
572 { expanded_italic_900, expanded_italic_100 },
573 },
574 },
575
576 {
577 { expanded_italic_900 },
578 {
579 { condensed_normal_100, expanded_italic_900 },
580 { condensed_normal_900, expanded_italic_900 },
581 { condensed_italic_100, expanded_italic_900 },
582 { condensed_italic_900, expanded_italic_900 },
583 { expanded_normal_100, expanded_italic_900 },
584 { expanded_normal_900, expanded_italic_900 },
585 { expanded_italic_100, expanded_italic_900 },
586 { expanded_italic_900, expanded_italic_900 },
587 },
588 },
589
590 {
591 { normal_normal_100, normal_normal_900 },
592 {
593 { normal_normal_300, normal_normal_100 },
594 { normal_normal_400, normal_normal_100 },
595 { normal_normal_500, normal_normal_100 },
596 { normal_normal_600, normal_normal_900 },
597 },
598 },
599
600 {
601 { normal_normal_100, normal_normal_400, normal_normal_900 },
602 {
603 { normal_normal_300, normal_normal_100 },
604 { normal_normal_400, normal_normal_400 },
605 { normal_normal_500, normal_normal_400 },
606 { normal_normal_600, normal_normal_900 },
607 },
608 },
609
610 {
611 { normal_normal_100, normal_normal_500, normal_normal_900 },
612 {
613 { normal_normal_300, normal_normal_100 },
614 { normal_normal_400, normal_normal_500 },
615 { normal_normal_500, normal_normal_500 },
616 { normal_normal_600, normal_normal_900 },
617 },
618 },
619
620 {
621 { },
622 {
623 { normal_normal_300, invalidFontStyle },
624 { normal_normal_400, invalidFontStyle },
625 { normal_normal_500, invalidFontStyle },
626 { normal_normal_600, invalidFontStyle },
627 },
628 },
629 };
630
631 for (StyleSetTest& test : tests) {
632 for (const StyleSetTest::Case testCase : test.cases) {
633 SkAutoTUnref<SkTypeface> typeface(test.styleSet.matchStyle(testCase.pattern));
634 if (typeface) {
635 REPORTER_ASSERT(reporter, typeface->fontStyle() == testCase.expectedResult);
636 } else {
637 REPORTER_ASSERT(reporter, invalidFontStyle == testCase.expectedResult);
638 }
639 }
640 }
641}
642
reed@google.com66c9f992013-04-11 19:04:34 +0000643DEFINE_bool(verboseFontMgr, false, "run verbose fontmgr tests.");
reed@google.com83165a52013-04-11 18:31:25 +0000644
tfarina@chromium.orge4fafb12013-12-12 21:11:12 +0000645DEF_TEST(FontMgr, reporter) {
bungeman147ea2f2015-11-12 09:50:08 -0800646 test_matchStyleCSS3(reporter);
reed@google.com83165a52013-04-11 18:31:25 +0000647 test_fontiter(reporter, FLAGS_verboseFontMgr);
reed@google.comc1a81eb2013-09-19 18:06:03 +0000648 test_alias_names(reporter);
reed@google.com43c27582014-04-08 15:04:29 +0000649 test_font(reporter);
reed@google.com83165a52013-04-11 18:31:25 +0000650}