blob: 414631c58f066ed43ac201e278d6d2c51a13a201 [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;
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) {
bungeman13b9c952016-05-12 10:09:30 -070067 sk_sp<SkTypeface> first(SkTypeface::MakeFromName(inNames[i], SkTypeface::kNormal));
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) {
bungeman13b9c952016-05-12 10:09:30 -070072 sk_sp<SkTypeface> face(SkTypeface::MakeFromName(inNames[i], SkTypeface::kNormal));
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) {
85 SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault());
86 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
bungeman@google.com71033442013-05-01 14:21:20 +000092 SkAutoTUnref<SkFontStyleSet> fnset(fm->matchFamily(fname.c_str()));
reed@google.com83165a52013-04-11 18:31:25 +000093 SkAutoTUnref<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
106 SkAutoTUnref<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
bungeman147ea2f2015-11-12 09:50:08 -0800117static void test_matchStyleCSS3(skiatest::Reporter* reporter) {
118 static const SkFontID invalidFontID = std::numeric_limits<SkFontID>::max();
119 static const SkFontStyle invalidFontStyle(101, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
120
121 class TestTypeface : public SkTypeface {
122 public:
123 TestTypeface(const SkFontStyle& fontStyle, SkFontID id) : SkTypeface(fontStyle, id, false){}
124 protected:
125 SkStreamAsset* onOpenStream(int* ttcIndex) const override { return nullptr; }
reeda9322c22016-04-12 06:47:05 -0700126 SkScalerContext* onCreateScalerContext(const SkScalerContextEffects&,
127 const SkDescriptor*) const override {
bungeman147ea2f2015-11-12 09:50:08 -0800128 return nullptr;
129 }
130 void onFilterRec(SkScalerContextRec*) const override { }
131 virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics(
132 PerGlyphInfo,
133 const uint32_t*, uint32_t) const override { return nullptr; }
134 void onGetFontDescriptor(SkFontDescriptor*, bool*) const override { }
135 virtual int onCharsToGlyphs(const void* chars, Encoding encoding,
136 uint16_t glyphs[], int glyphCount) const override {
137 if (glyphs && glyphCount > 0) {
138 sk_bzero(glyphs, glyphCount * sizeof(glyphs[0]));
139 }
140 return 0;
141 }
142 int onCountGlyphs() const override { return 0; };
143 int onGetUPEM() const override { return 0; };
144 class EmptyLocalizedStrings : public SkTypeface::LocalizedStrings {
145 public:
146 bool next(SkTypeface::LocalizedString*) override { return false; }
147 };
148 void onGetFamilyName(SkString* familyName) const override {
149 familyName->reset();
150 }
151 SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override {
152 return new EmptyLocalizedStrings;
153 };
154 int onGetTableTags(SkFontTableTag tags[]) const override { return 0; }
155 size_t onGetTableData(SkFontTableTag, size_t, size_t, void*) const override {
156 return 0;
157 }
158 };
159
160 class TestFontStyleSet : public SkFontStyleSet {
161 public:
162 TestFontStyleSet(std::initializer_list<SkFontStyle> styles) : fStyles(styles) {}
163 int count() override { return static_cast<int>(fStyles.size()); }
164 void getStyle(int index, SkFontStyle* style, SkString*) override {
165 if (style) {
166 *style = fStyles[index];
167 }
168 }
169 SkTypeface* createTypeface(int index) override {
170 if (index < 0 || this->count() <= index) {
171 return new TestTypeface(invalidFontStyle, invalidFontID);
172 }
173 return new TestTypeface(fStyles[index], index);
174 }
175 SkTypeface* matchStyle(const SkFontStyle& pattern) override {
176 return this->matchStyleCSS3(pattern);
177 }
178 private:
179 std::vector<SkFontStyle> fStyles;
180 };
181
182 SkFontStyle condensed_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
183 SkFontStyle condensed_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
184 SkFontStyle condensed_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
185 SkFontStyle condensed_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
bungemanb4bb7d82016-04-27 10:21:04 -0700186 SkFontStyle condensed_obliqu_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
187 SkFontStyle condensed_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800188 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);
bungemanb4bb7d82016-04-27 10:21:04 -0700192 SkFontStyle expanded_obliqu_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kOblique_Slant);
193 SkFontStyle expanded_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kOblique_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800194
195 SkFontStyle normal_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
196 SkFontStyle normal_normal_200(SkFontStyle::kExtraLight_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
197 SkFontStyle normal_normal_300(SkFontStyle::kLight_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
198 SkFontStyle normal_normal_400(SkFontStyle::kNormal_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
199 SkFontStyle normal_normal_500(SkFontStyle::kMedium_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
200 SkFontStyle normal_normal_600(SkFontStyle::kSemiBold_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
201 SkFontStyle normal_normal_700(SkFontStyle::kBold_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
202 SkFontStyle normal_normal_800(SkFontStyle::kExtraBold_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
203 SkFontStyle normal_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
204
205 struct StyleSetTest {
206 TestFontStyleSet styleSet;
207 struct Case {
208 SkFontStyle pattern;
209 SkFontStyle expectedResult;
210 };
211 std::vector<Case> cases;
212 } tests[] = {
213 {
214 { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900,
215 expanded_normal_100, expanded_normal_900, expanded_italic_100, expanded_italic_900 },
216 {
217 { condensed_normal_100, condensed_normal_100 },
218 { condensed_normal_900, condensed_normal_900 },
219 { condensed_italic_100, condensed_italic_100 },
220 { condensed_italic_900, condensed_italic_900 },
221 { expanded_normal_100, expanded_normal_100 },
222 { expanded_normal_900, expanded_normal_900 },
223 { expanded_italic_100, expanded_italic_100 },
224 { expanded_italic_900, expanded_italic_900 },
225 },
226 },
227
228 {
229 { condensed_normal_100,condensed_italic_100,expanded_normal_100,expanded_italic_100 },
230 {
231 { condensed_normal_100, condensed_normal_100 },
232 { condensed_normal_900, condensed_normal_100 },
233 { condensed_italic_100, condensed_italic_100 },
234 { condensed_italic_900, condensed_italic_100 },
235 { expanded_normal_100, expanded_normal_100 },
236 { expanded_normal_900, expanded_normal_100 },
237 { expanded_italic_100, expanded_italic_100 },
238 { expanded_italic_900, expanded_italic_100 },
239 },
240 },
241
242 {
243 { condensed_normal_900,condensed_italic_900,expanded_normal_900,expanded_italic_900 },
244 {
245 { condensed_normal_100, condensed_normal_900 },
246 { condensed_normal_900, condensed_normal_900 },
247 { condensed_italic_100, condensed_italic_900 },
248 { condensed_italic_900, condensed_italic_900 },
249 { expanded_normal_100, expanded_normal_900 },
250 { expanded_normal_900, expanded_normal_900 },
251 { expanded_italic_100, expanded_italic_900 },
252 { expanded_italic_900, expanded_italic_900 },
253 },
254 },
255
256 {
257 { condensed_normal_100,condensed_normal_900,expanded_normal_100,expanded_normal_900 },
258 {
259 { condensed_normal_100, condensed_normal_100 },
260 { condensed_normal_900, condensed_normal_900 },
261 { condensed_italic_100, condensed_normal_100 },
262 { condensed_italic_900, condensed_normal_900 },
263 { expanded_normal_100, expanded_normal_100 },
264 { expanded_normal_900, expanded_normal_900 },
265 { expanded_italic_100, expanded_normal_100 },
266 { expanded_italic_900, expanded_normal_900 },
267 },
268 },
269
270 {
271 { condensed_normal_100,expanded_normal_100 },
272 {
273 { condensed_normal_100, condensed_normal_100 },
274 { condensed_normal_900, condensed_normal_100 },
275 { condensed_italic_100, condensed_normal_100 },
276 { condensed_italic_900, condensed_normal_100 },
277 { expanded_normal_100, expanded_normal_100 },
278 { expanded_normal_900, expanded_normal_100 },
279 { expanded_italic_100, expanded_normal_100 },
280 { expanded_italic_900, expanded_normal_100 },
281 },
282 },
283
284 {
285 { condensed_normal_900,expanded_normal_900 },
286 {
287 { condensed_normal_100, condensed_normal_900 },
288 { condensed_normal_900, condensed_normal_900 },
289 { condensed_italic_100, condensed_normal_900 },
290 { condensed_italic_900, condensed_normal_900 },
291 { expanded_normal_100, expanded_normal_900 },
292 { expanded_normal_900, expanded_normal_900 },
293 { expanded_italic_100, expanded_normal_900 },
294 { expanded_italic_900, expanded_normal_900 },
295 },
296 },
297
298 {
299 { condensed_italic_100,condensed_italic_900,expanded_italic_100,expanded_italic_900 },
300 {
301 { condensed_normal_100, condensed_italic_100 },
302 { condensed_normal_900, condensed_italic_900 },
303 { condensed_italic_100, condensed_italic_100 },
304 { condensed_italic_900, condensed_italic_900 },
305 { expanded_normal_100, expanded_italic_100 },
306 { expanded_normal_900, expanded_italic_900 },
307 { expanded_italic_100, expanded_italic_100 },
308 { expanded_italic_900, expanded_italic_900 },
309 },
310 },
311
312 {
313 { condensed_italic_100,expanded_italic_100 },
314 {
315 { condensed_normal_100, condensed_italic_100 },
316 { condensed_normal_900, condensed_italic_100 },
317 { condensed_italic_100, condensed_italic_100 },
318 { condensed_italic_900, condensed_italic_100 },
319 { expanded_normal_100, expanded_italic_100 },
320 { expanded_normal_900, expanded_italic_100 },
321 { expanded_italic_100, expanded_italic_100 },
322 { expanded_italic_900, expanded_italic_100 },
323 },
324 },
325
326 {
327 { condensed_italic_900,expanded_italic_900 },
328 {
329 { condensed_normal_100, condensed_italic_900 },
330 { condensed_normal_900, condensed_italic_900 },
331 { condensed_italic_100, condensed_italic_900 },
332 { condensed_italic_900, condensed_italic_900 },
333 { expanded_normal_100, expanded_italic_900 },
334 { expanded_normal_900, expanded_italic_900 },
335 { expanded_italic_100, expanded_italic_900 },
336 { expanded_italic_900, expanded_italic_900 },
337 },
338 },
339
340 {
341 { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900 },
342 {
343 { condensed_normal_100, condensed_normal_100 },
344 { condensed_normal_900, condensed_normal_900 },
345 { condensed_italic_100, condensed_italic_100 },
346 { condensed_italic_900, condensed_italic_900 },
347 { expanded_normal_100, condensed_normal_100 },
348 { expanded_normal_900, condensed_normal_900 },
349 { expanded_italic_100, condensed_italic_100 },
350 { expanded_italic_900, condensed_italic_900 },
351 },
352 },
353
354 {
355 { condensed_normal_100,condensed_italic_100 },
356 {
357 { condensed_normal_100, condensed_normal_100 },
358 { condensed_normal_900, condensed_normal_100 },
359 { condensed_italic_100, condensed_italic_100 },
360 { condensed_italic_900, condensed_italic_100 },
361 { expanded_normal_100, condensed_normal_100 },
362 { expanded_normal_900, condensed_normal_100 },
363 { expanded_italic_100, condensed_italic_100 },
364 { expanded_italic_900, condensed_italic_100 },
365 },
366 },
367
368 {
369 { condensed_normal_900,condensed_italic_900 },
370 {
371 { condensed_normal_100, condensed_normal_900 },
372 { condensed_normal_900, condensed_normal_900 },
373 { condensed_italic_100, condensed_italic_900 },
374 { condensed_italic_900, condensed_italic_900 },
375 { expanded_normal_100, condensed_normal_900 },
376 { expanded_normal_900, condensed_normal_900 },
377 { expanded_italic_100, condensed_italic_900 },
378 { expanded_italic_900, condensed_italic_900 },
379 },
380 },
381
382 {
383 { condensed_normal_100,condensed_normal_900 },
384 {
385 { condensed_normal_100, condensed_normal_100 },
386 { condensed_normal_900, condensed_normal_900 },
387 { condensed_italic_100, condensed_normal_100 },
388 { condensed_italic_900, condensed_normal_900 },
389 { expanded_normal_100, condensed_normal_100 },
390 { expanded_normal_900, condensed_normal_900 },
391 { expanded_italic_100, condensed_normal_100 },
392 { expanded_italic_900, condensed_normal_900 },
393 },
394 },
395
396 {
397 { condensed_normal_100 },
398 {
399 { condensed_normal_100, condensed_normal_100 },
400 { condensed_normal_900, condensed_normal_100 },
401 { condensed_italic_100, condensed_normal_100 },
402 { condensed_italic_900, condensed_normal_100 },
403 { expanded_normal_100, condensed_normal_100 },
404 { expanded_normal_900, condensed_normal_100 },
405 { expanded_italic_100, condensed_normal_100 },
406 { expanded_italic_900, condensed_normal_100 },
407 },
408 },
409
410 {
411 { condensed_normal_900 },
412 {
413 { condensed_normal_100, condensed_normal_900 },
414 { condensed_normal_900, condensed_normal_900 },
415 { condensed_italic_100, condensed_normal_900 },
416 { condensed_italic_900, condensed_normal_900 },
417 { expanded_normal_100, condensed_normal_900 },
418 { expanded_normal_900, condensed_normal_900 },
419 { expanded_italic_100, condensed_normal_900 },
420 { expanded_italic_900, condensed_normal_900 },
421 },
422 },
423
424 {
425 { condensed_italic_100,condensed_italic_900 },
426 {
427 { condensed_normal_100, condensed_italic_100 },
428 { condensed_normal_900, condensed_italic_900 },
429 { condensed_italic_100, condensed_italic_100 },
430 { condensed_italic_900, condensed_italic_900 },
431 { expanded_normal_100, condensed_italic_100 },
432 { expanded_normal_900, condensed_italic_900 },
433 { expanded_italic_100, condensed_italic_100 },
434 { expanded_italic_900, condensed_italic_900 },
435 },
436 },
437
438 {
439 { condensed_italic_100 },
440 {
441 { condensed_normal_100, condensed_italic_100 },
442 { condensed_normal_900, condensed_italic_100 },
443 { condensed_italic_100, condensed_italic_100 },
444 { condensed_italic_900, condensed_italic_100 },
445 { expanded_normal_100, condensed_italic_100 },
446 { expanded_normal_900, condensed_italic_100 },
447 { expanded_italic_100, condensed_italic_100 },
448 { expanded_italic_900, condensed_italic_100 },
449 },
450 },
451
452 {
453 { condensed_italic_900 },
454 {
455 { condensed_normal_100, condensed_italic_900 },
456 { condensed_normal_900, condensed_italic_900 },
457 { condensed_italic_100, condensed_italic_900 },
458 { condensed_italic_900, condensed_italic_900 },
459 { expanded_normal_100, condensed_italic_900 },
460 { expanded_normal_900, condensed_italic_900 },
461 { expanded_italic_100, condensed_italic_900 },
462 { expanded_italic_900, condensed_italic_900 },
463 },
464 },
465
466 {
bungemanb4bb7d82016-04-27 10:21:04 -0700467 { expanded_normal_100,expanded_normal_900,
468 expanded_italic_100,expanded_italic_900 },
bungeman147ea2f2015-11-12 09:50:08 -0800469 {
470 { condensed_normal_100, expanded_normal_100 },
471 { condensed_normal_900, expanded_normal_900 },
472 { condensed_italic_100, expanded_italic_100 },
473 { condensed_italic_900, expanded_italic_900 },
bungemanb4bb7d82016-04-27 10:21:04 -0700474 { condensed_obliqu_100, expanded_italic_100 },
475 { condensed_obliqu_900, expanded_italic_900 },
bungeman147ea2f2015-11-12 09:50:08 -0800476 { expanded_normal_100, expanded_normal_100 },
477 { expanded_normal_900, expanded_normal_900 },
478 { expanded_italic_100, expanded_italic_100 },
479 { expanded_italic_900, expanded_italic_900 },
bungemanb4bb7d82016-04-27 10:21:04 -0700480 { expanded_obliqu_100, expanded_italic_100 },
481 { expanded_obliqu_900, expanded_italic_900 },
bungeman147ea2f2015-11-12 09:50:08 -0800482 },
483 },
484
485 {
486 { expanded_normal_100,expanded_italic_100 },
487 {
488 { condensed_normal_100, expanded_normal_100 },
489 { condensed_normal_900, expanded_normal_100 },
490 { condensed_italic_100, expanded_italic_100 },
491 { condensed_italic_900, expanded_italic_100 },
492 { expanded_normal_100, expanded_normal_100 },
493 { expanded_normal_900, expanded_normal_100 },
494 { expanded_italic_100, expanded_italic_100 },
495 { expanded_italic_900, expanded_italic_100 },
496 },
497 },
498
499 {
500 { expanded_normal_900,expanded_italic_900 },
501 {
502 { condensed_normal_100, expanded_normal_900 },
503 { condensed_normal_900, expanded_normal_900 },
504 { condensed_italic_100, expanded_italic_900 },
505 { condensed_italic_900, expanded_italic_900 },
506 { expanded_normal_100, expanded_normal_900 },
507 { expanded_normal_900, expanded_normal_900 },
508 { expanded_italic_100, expanded_italic_900 },
509 { expanded_italic_900, expanded_italic_900 },
510 },
511 },
512
513 {
514 { expanded_normal_100,expanded_normal_900 },
515 {
516 { condensed_normal_100, expanded_normal_100 },
517 { condensed_normal_900, expanded_normal_900 },
518 { condensed_italic_100, expanded_normal_100 },
519 { condensed_italic_900, expanded_normal_900 },
520 { expanded_normal_100, expanded_normal_100 },
521 { expanded_normal_900, expanded_normal_900 },
522 { expanded_italic_100, expanded_normal_100 },
523 { expanded_italic_900, expanded_normal_900 },
524 },
525 },
526
527 {
528 { expanded_normal_100 },
529 {
530 { condensed_normal_100, expanded_normal_100 },
531 { condensed_normal_900, expanded_normal_100 },
532 { condensed_italic_100, expanded_normal_100 },
533 { condensed_italic_900, expanded_normal_100 },
534 { expanded_normal_100, expanded_normal_100 },
535 { expanded_normal_900, expanded_normal_100 },
536 { expanded_italic_100, expanded_normal_100 },
537 { expanded_italic_900, expanded_normal_100 },
538 },
539 },
540
541 {
542 { expanded_normal_900 },
543 {
544 { condensed_normal_100, expanded_normal_900 },
545 { condensed_normal_900, expanded_normal_900 },
546 { condensed_italic_100, expanded_normal_900 },
547 { condensed_italic_900, expanded_normal_900 },
548 { expanded_normal_100, expanded_normal_900 },
549 { expanded_normal_900, expanded_normal_900 },
550 { expanded_italic_100, expanded_normal_900 },
551 { expanded_italic_900, expanded_normal_900 },
552 },
553 },
554
555 {
556 { expanded_italic_100,expanded_italic_900 },
557 {
558 { condensed_normal_100, expanded_italic_100 },
559 { condensed_normal_900, expanded_italic_900 },
560 { condensed_italic_100, expanded_italic_100 },
561 { condensed_italic_900, expanded_italic_900 },
562 { expanded_normal_100, expanded_italic_100 },
563 { expanded_normal_900, expanded_italic_900 },
564 { expanded_italic_100, expanded_italic_100 },
565 { expanded_italic_900, expanded_italic_900 },
566 },
567 },
568
569 {
570 { expanded_italic_100 },
571 {
572 { condensed_normal_100, expanded_italic_100 },
573 { condensed_normal_900, expanded_italic_100 },
574 { condensed_italic_100, expanded_italic_100 },
575 { condensed_italic_900, expanded_italic_100 },
576 { expanded_normal_100, expanded_italic_100 },
577 { expanded_normal_900, expanded_italic_100 },
578 { expanded_italic_100, expanded_italic_100 },
579 { expanded_italic_900, expanded_italic_100 },
580 },
581 },
582
583 {
584 { expanded_italic_900 },
585 {
586 { condensed_normal_100, expanded_italic_900 },
587 { condensed_normal_900, expanded_italic_900 },
588 { condensed_italic_100, expanded_italic_900 },
589 { condensed_italic_900, expanded_italic_900 },
590 { expanded_normal_100, expanded_italic_900 },
591 { expanded_normal_900, expanded_italic_900 },
592 { expanded_italic_100, expanded_italic_900 },
593 { expanded_italic_900, expanded_italic_900 },
594 },
595 },
596
597 {
598 { normal_normal_100, normal_normal_900 },
599 {
600 { normal_normal_300, normal_normal_100 },
601 { normal_normal_400, normal_normal_100 },
602 { normal_normal_500, normal_normal_100 },
603 { normal_normal_600, normal_normal_900 },
604 },
605 },
606
607 {
608 { normal_normal_100, normal_normal_400, normal_normal_900 },
609 {
610 { normal_normal_300, normal_normal_100 },
611 { normal_normal_400, normal_normal_400 },
612 { normal_normal_500, normal_normal_400 },
613 { normal_normal_600, normal_normal_900 },
614 },
615 },
616
617 {
618 { normal_normal_100, normal_normal_500, normal_normal_900 },
619 {
620 { normal_normal_300, normal_normal_100 },
621 { normal_normal_400, normal_normal_500 },
622 { normal_normal_500, normal_normal_500 },
623 { normal_normal_600, normal_normal_900 },
624 },
625 },
626
627 {
628 { },
629 {
630 { normal_normal_300, invalidFontStyle },
631 { normal_normal_400, invalidFontStyle },
632 { normal_normal_500, invalidFontStyle },
633 { normal_normal_600, invalidFontStyle },
634 },
635 },
bungemanb4bb7d82016-04-27 10:21:04 -0700636 {
637 { expanded_normal_100,expanded_normal_900,
638 expanded_italic_100,expanded_italic_900,
639 expanded_obliqu_100,expanded_obliqu_900, },
640 {
641 { condensed_normal_100, expanded_normal_100 },
642 { condensed_normal_900, expanded_normal_900 },
643 { condensed_italic_100, expanded_italic_100 },
644 { condensed_italic_900, expanded_italic_900 },
645 { condensed_obliqu_100, expanded_obliqu_100 },
646 { condensed_obliqu_900, expanded_obliqu_900 },
647 { expanded_normal_100, expanded_normal_100 },
648 { expanded_normal_900, expanded_normal_900 },
649 { expanded_italic_100, expanded_italic_100 },
650 { expanded_italic_900, expanded_italic_900 },
651 { expanded_obliqu_100, expanded_obliqu_100 },
652 { expanded_obliqu_900, expanded_obliqu_900 },
653 },
654 },
655 {
656 { expanded_normal_100,expanded_normal_900,
657 expanded_obliqu_100,expanded_obliqu_900, },
658 {
659 { condensed_normal_100, expanded_normal_100 },
660 { condensed_normal_900, expanded_normal_900 },
661 { condensed_italic_100, expanded_obliqu_100 },
662 { condensed_italic_900, expanded_obliqu_900 },
663 { condensed_obliqu_100, expanded_obliqu_100 },
664 { condensed_obliqu_900, expanded_obliqu_900 },
665 { expanded_normal_100, expanded_normal_100 },
666 { expanded_normal_900, expanded_normal_900 },
667 { expanded_italic_100, expanded_obliqu_100 },
668 { expanded_italic_900, expanded_obliqu_900 },
669 { expanded_obliqu_100, expanded_obliqu_100 },
670 { expanded_obliqu_900, expanded_obliqu_900 },
671 },
672 },
673 {
674 { expanded_italic_100,expanded_italic_900,
675 expanded_obliqu_100,expanded_obliqu_900, },
676 {
677 { condensed_normal_100, expanded_obliqu_100 },
678 { condensed_normal_900, expanded_obliqu_900 },
679 { condensed_italic_100, expanded_italic_100 },
680 { condensed_italic_900, expanded_italic_900 },
681 { condensed_obliqu_100, expanded_obliqu_100 },
682 { condensed_obliqu_900, expanded_obliqu_900 },
683 { expanded_normal_100, expanded_obliqu_100 },
684 { expanded_normal_900, expanded_obliqu_900 },
685 { expanded_italic_100, expanded_italic_100 },
686 { expanded_italic_900, expanded_italic_900 },
687 { expanded_obliqu_100, expanded_obliqu_100 },
688 { expanded_obliqu_900, expanded_obliqu_900 },
689 },
690 },
bungeman147ea2f2015-11-12 09:50:08 -0800691 };
692
693 for (StyleSetTest& test : tests) {
694 for (const StyleSetTest::Case testCase : test.cases) {
695 SkAutoTUnref<SkTypeface> typeface(test.styleSet.matchStyle(testCase.pattern));
696 if (typeface) {
697 REPORTER_ASSERT(reporter, typeface->fontStyle() == testCase.expectedResult);
698 } else {
699 REPORTER_ASSERT(reporter, invalidFontStyle == testCase.expectedResult);
700 }
701 }
702 }
703}
704
reed@google.com66c9f992013-04-11 19:04:34 +0000705DEFINE_bool(verboseFontMgr, false, "run verbose fontmgr tests.");
reed@google.com83165a52013-04-11 18:31:25 +0000706
tfarina@chromium.orge4fafb12013-12-12 21:11:12 +0000707DEF_TEST(FontMgr, reporter) {
bungeman147ea2f2015-11-12 09:50:08 -0800708 test_matchStyleCSS3(reporter);
reed@google.com83165a52013-04-11 18:31:25 +0000709 test_fontiter(reporter, FLAGS_verboseFontMgr);
reed@google.comc1a81eb2013-09-19 18:06:03 +0000710 test_alias_names(reporter);
reed@google.com43c27582014-04-08 15:04:29 +0000711 test_font(reporter);
reed@google.com83165a52013-04-11 18:31:25 +0000712}