blob: 308d791e37be6abea91bea0d0cb91228467c5f4f [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) {
Mike Reed5f50f572018-11-12 13:19:37 -050021 SkFont font(nullptr, 24);
skia.committer@gmail.come1d94432014-04-09 03:04:11 +000022
Herb Derby087fad72019-01-22 14:45:16 -050023 //REPORTER_ASSERT(reporter, SkTypeface::GetDefaultTypeface() == font.getTypeface());
Mike Reedfe4fc142018-10-22 14:24:07 -040024 REPORTER_ASSERT(reporter, 24 == font.getSize());
25 REPORTER_ASSERT(reporter, 1 == font.getScaleX());
26 REPORTER_ASSERT(reporter, 0 == font.getSkewX());
reed@google.com43c27582014-04-08 15:04:29 +000027
28 uint16_t glyphs[5];
29 sk_bzero(glyphs, sizeof(glyphs));
30
Florin Malitad6db27c2018-11-02 12:08:31 -040031 // Check that no glyphs are copied with insufficient storage.
32 int count = font.textToGlyphs("Hello", 5, kUTF8_SkTextEncoding, glyphs, 2);
reed@google.com43c27582014-04-08 15:04:29 +000033 REPORTER_ASSERT(reporter, 5 == count);
Florin Malitad6db27c2018-11-02 12:08:31 -040034 for (const auto glyph : glyphs) { REPORTER_ASSERT(reporter, glyph == 0); }
35
36 SkAssertResult(font.textToGlyphs("Hello", 5, kUTF8_SkTextEncoding, glyphs,
37 SK_ARRAY_COUNT(glyphs)) == count);
38
reed@google.com43c27582014-04-08 15:04:29 +000039 for (int i = 0; i < count; ++i) {
40 REPORTER_ASSERT(reporter, 0 != glyphs[i]);
41 }
42 REPORTER_ASSERT(reporter, glyphs[0] != glyphs[1]); // 'h' != 'e'
43 REPORTER_ASSERT(reporter, glyphs[2] == glyphs[3]); // 'l' == 'l'
skia.committer@gmail.come1d94432014-04-09 03:04:11 +000044
Mike Reedfe4fc142018-10-22 14:24:07 -040045 const SkFont newFont(font.makeWithSize(36));
Herb Derby087fad72019-01-22 14:45:16 -050046 REPORTER_ASSERT(reporter, font.getTypefaceOrDefault() == newFont.getTypefaceOrDefault());
Mike Reedfe4fc142018-10-22 14:24:07 -040047 REPORTER_ASSERT(reporter, 36 == newFont.getSize()); // double check we haven't changed
48 REPORTER_ASSERT(reporter, 24 == font.getSize()); // double check we haven't changed
reed@google.com43c27582014-04-08 15:04:29 +000049}
50
reed@google.comd44d9882013-09-18 20:32:25 +000051/*
52 * If the font backend is going to "alias" some font names to other fonts
53 * (e.g. sans -> Arial) then we want to at least get the same typeface back
54 * if we request the alias name multiple times.
55 */
reed@google.comc1a81eb2013-09-19 18:06:03 +000056static void test_alias_names(skiatest::Reporter* reporter) {
57 const char* inNames[] = {
58 "sans", "sans-serif", "serif", "monospace", "times", "helvetica"
59 };
skia.committer@gmail.comf91e3d42013-09-20 07:01:33 +000060
reed@google.comc1a81eb2013-09-19 18:06:03 +000061 for (size_t i = 0; i < SK_ARRAY_COUNT(inNames); ++i) {
mbocee6a9912016-05-31 11:42:36 -070062 sk_sp<SkTypeface> first(SkTypeface::MakeFromName(inNames[i], SkFontStyle()));
halcanary96fcdcc2015-08-27 07:41:13 -070063 if (nullptr == first.get()) {
reed@google.comc1a81eb2013-09-19 18:06:03 +000064 continue;
65 }
66 for (int j = 0; j < 10; ++j) {
mbocee6a9912016-05-31 11:42:36 -070067 sk_sp<SkTypeface> face(SkTypeface::MakeFromName(inNames[i], SkFontStyle()));
reed@google.comc1a81eb2013-09-19 18:06:03 +000068 #if 0
69 SkString name;
70 face->getFamilyName(&name);
71 printf("request %s, received %s, first id %x received %x\n",
72 inNames[i], name.c_str(), first->uniqueID(), face->uniqueID());
73 #endif
74 REPORTER_ASSERT(reporter, first->uniqueID() == face->uniqueID());
75 }
reed@google.comd44d9882013-09-18 20:32:25 +000076 }
77}
78
reed@google.com83165a52013-04-11 18:31:25 +000079static void test_fontiter(skiatest::Reporter* reporter, bool verbose) {
Hal Canary342b7ac2016-11-04 11:49:42 -040080 sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
reed@google.com83165a52013-04-11 18:31:25 +000081 int count = fm->countFamilies();
82
83 for (int i = 0; i < count; ++i) {
84 SkString fname;
85 fm->getFamilyName(i, &fname);
reed@google.com83165a52013-04-11 18:31:25 +000086
Hal Canary342b7ac2016-11-04 11:49:42 -040087 sk_sp<SkFontStyleSet> fnset(fm->matchFamily(fname.c_str()));
88 sk_sp<SkFontStyleSet> set(fm->createStyleSet(i));
bungeman@google.com71033442013-05-01 14:21:20 +000089 REPORTER_ASSERT(reporter, fnset->count() == set->count());
reed@google.com83165a52013-04-11 18:31:25 +000090
91 if (verbose) {
92 SkDebugf("[%2d] %s\n", i, fname.c_str());
93 }
94
95 for (int j = 0; j < set->count(); ++j) {
96 SkString sname;
97 SkFontStyle fs;
98 set->getStyle(j, &fs, &sname);
reed@google.comeb029572013-04-25 14:59:32 +000099// REPORTER_ASSERT(reporter, sname.size() > 0);
reed@google.com83165a52013-04-11 18:31:25 +0000100
Hal Canary342b7ac2016-11-04 11:49:42 -0400101 sk_sp<SkTypeface> face(set->createTypeface(j));
reed@google.comc1ccda32013-04-19 14:28:54 +0000102// REPORTER_ASSERT(reporter, face.get());
reed@google.com83165a52013-04-11 18:31:25 +0000103
104 if (verbose) {
105 SkDebugf("\t[%d] %s [%3d %d %d]\n", j, sname.c_str(),
bungemanb4bb7d82016-04-27 10:21:04 -0700106 fs.weight(), fs.width(), fs.slant());
reed@google.com83165a52013-04-11 18:31:25 +0000107 }
108 }
109 }
110}
111
bungeman7575bb12017-05-01 13:02:42 -0400112static void test_match(skiatest::Reporter* reporter) {
113 sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
114 sk_sp<SkFontStyleSet> styleSet(fm->matchFamily(nullptr));
115 REPORTER_ASSERT(reporter, styleSet);
116}
117
bungeman147ea2f2015-11-12 09:50:08 -0800118static void test_matchStyleCSS3(skiatest::Reporter* reporter) {
bungeman147ea2f2015-11-12 09:50:08 -0800119 static const SkFontStyle invalidFontStyle(101, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
120
121 class TestTypeface : public SkTypeface {
122 public:
bungemane3aea102016-07-13 05:16:58 -0700123 TestTypeface(const SkFontStyle& fontStyle) : SkTypeface(fontStyle, false){}
bungeman147ea2f2015-11-12 09:50:08 -0800124 protected:
125 SkStreamAsset* onOpenStream(int* ttcIndex) const override { return nullptr; }
Bruce Wang536ad2c2018-06-25 11:37:25 -0400126 sk_sp<SkTypeface> onMakeClone(const SkFontArguments& args) const override {
127 return sk_ref_sp(this);
128 }
reeda9322c22016-04-12 06:47:05 -0700129 SkScalerContext* onCreateScalerContext(const SkScalerContextEffects&,
130 const SkDescriptor*) const override {
bungeman147ea2f2015-11-12 09:50:08 -0800131 return nullptr;
132 }
133 void onFilterRec(SkScalerContextRec*) const override { }
Hal Canary209e4b12017-05-04 14:23:55 -0400134 std::unique_ptr<SkAdvancedTypefaceMetrics> onGetAdvancedMetrics() const override {
135 return nullptr;
136 }
bungeman147ea2f2015-11-12 09:50:08 -0800137 void onGetFontDescriptor(SkFontDescriptor*, bool*) const override { }
138 virtual int onCharsToGlyphs(const void* chars, Encoding encoding,
139 uint16_t glyphs[], int glyphCount) const override {
140 if (glyphs && glyphCount > 0) {
141 sk_bzero(glyphs, glyphCount * sizeof(glyphs[0]));
142 }
143 return 0;
144 }
Mike Kleinfc6c37b2016-09-27 09:34:10 -0400145 int onCountGlyphs() const override { return 0; }
146 int onGetUPEM() const override { return 0; }
bungeman147ea2f2015-11-12 09:50:08 -0800147 class EmptyLocalizedStrings : public SkTypeface::LocalizedStrings {
148 public:
149 bool next(SkTypeface::LocalizedString*) override { return false; }
150 };
151 void onGetFamilyName(SkString* familyName) const override {
152 familyName->reset();
153 }
154 SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override {
155 return new EmptyLocalizedStrings;
Mike Kleinfc6c37b2016-09-27 09:34:10 -0400156 }
Ben Wagnerfc497342017-02-24 11:15:26 -0500157 int onGetVariationDesignPosition(
158 SkFontArguments::VariationPosition::Coordinate coordinates[],
159 int coordinateCount) const override
160 {
161 return 0;
162 }
bungeman147ea2f2015-11-12 09:50:08 -0800163 int onGetTableTags(SkFontTableTag tags[]) const override { return 0; }
164 size_t onGetTableData(SkFontTableTag, size_t, size_t, void*) const override {
165 return 0;
166 }
167 };
168
169 class TestFontStyleSet : public SkFontStyleSet {
170 public:
171 TestFontStyleSet(std::initializer_list<SkFontStyle> styles) : fStyles(styles) {}
172 int count() override { return static_cast<int>(fStyles.size()); }
173 void getStyle(int index, SkFontStyle* style, SkString*) override {
174 if (style) {
175 *style = fStyles[index];
176 }
177 }
178 SkTypeface* createTypeface(int index) override {
179 if (index < 0 || this->count() <= index) {
bungemane3aea102016-07-13 05:16:58 -0700180 return new TestTypeface(invalidFontStyle);
bungeman147ea2f2015-11-12 09:50:08 -0800181 }
bungemane3aea102016-07-13 05:16:58 -0700182 return new TestTypeface(fStyles[index]);
bungeman147ea2f2015-11-12 09:50:08 -0800183 }
184 SkTypeface* matchStyle(const SkFontStyle& pattern) override {
185 return this->matchStyleCSS3(pattern);
186 }
187 private:
188 std::vector<SkFontStyle> fStyles;
189 };
190
191 SkFontStyle condensed_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
192 SkFontStyle condensed_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
193 SkFontStyle condensed_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
194 SkFontStyle condensed_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
bungemanb4bb7d82016-04-27 10:21:04 -0700195 SkFontStyle condensed_obliqu_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
196 SkFontStyle condensed_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800197 SkFontStyle expanded_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant);
198 SkFontStyle expanded_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant);
199 SkFontStyle expanded_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant);
200 SkFontStyle expanded_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant);
bungemanb4bb7d82016-04-27 10:21:04 -0700201 SkFontStyle expanded_obliqu_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kOblique_Slant);
202 SkFontStyle expanded_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kOblique_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800203
204 SkFontStyle normal_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800205 SkFontStyle normal_normal_300(SkFontStyle::kLight_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
206 SkFontStyle normal_normal_400(SkFontStyle::kNormal_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
207 SkFontStyle normal_normal_500(SkFontStyle::kMedium_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
208 SkFontStyle normal_normal_600(SkFontStyle::kSemiBold_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800209 SkFontStyle normal_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
210
211 struct StyleSetTest {
212 TestFontStyleSet styleSet;
213 struct Case {
214 SkFontStyle pattern;
215 SkFontStyle expectedResult;
216 };
217 std::vector<Case> cases;
218 } tests[] = {
219 {
220 { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900,
221 expanded_normal_100, expanded_normal_900, expanded_italic_100, expanded_italic_900 },
222 {
223 { condensed_normal_100, condensed_normal_100 },
224 { condensed_normal_900, condensed_normal_900 },
225 { condensed_italic_100, condensed_italic_100 },
226 { condensed_italic_900, condensed_italic_900 },
227 { expanded_normal_100, expanded_normal_100 },
228 { expanded_normal_900, expanded_normal_900 },
229 { expanded_italic_100, expanded_italic_100 },
230 { expanded_italic_900, expanded_italic_900 },
231 },
232 },
233
234 {
235 { condensed_normal_100,condensed_italic_100,expanded_normal_100,expanded_italic_100 },
236 {
237 { condensed_normal_100, condensed_normal_100 },
238 { condensed_normal_900, condensed_normal_100 },
239 { condensed_italic_100, condensed_italic_100 },
240 { condensed_italic_900, condensed_italic_100 },
241 { expanded_normal_100, expanded_normal_100 },
242 { expanded_normal_900, expanded_normal_100 },
243 { expanded_italic_100, expanded_italic_100 },
244 { expanded_italic_900, expanded_italic_100 },
245 },
246 },
247
248 {
249 { condensed_normal_900,condensed_italic_900,expanded_normal_900,expanded_italic_900 },
250 {
251 { condensed_normal_100, condensed_normal_900 },
252 { condensed_normal_900, condensed_normal_900 },
253 { condensed_italic_100, condensed_italic_900 },
254 { condensed_italic_900, condensed_italic_900 },
255 { expanded_normal_100, expanded_normal_900 },
256 { expanded_normal_900, expanded_normal_900 },
257 { expanded_italic_100, expanded_italic_900 },
258 { expanded_italic_900, expanded_italic_900 },
259 },
260 },
261
262 {
263 { condensed_normal_100,condensed_normal_900,expanded_normal_100,expanded_normal_900 },
264 {
265 { condensed_normal_100, condensed_normal_100 },
266 { condensed_normal_900, condensed_normal_900 },
267 { condensed_italic_100, condensed_normal_100 },
268 { condensed_italic_900, condensed_normal_900 },
269 { expanded_normal_100, expanded_normal_100 },
270 { expanded_normal_900, expanded_normal_900 },
271 { expanded_italic_100, expanded_normal_100 },
272 { expanded_italic_900, expanded_normal_900 },
273 },
274 },
275
276 {
277 { condensed_normal_100,expanded_normal_100 },
278 {
279 { condensed_normal_100, condensed_normal_100 },
280 { condensed_normal_900, condensed_normal_100 },
281 { condensed_italic_100, condensed_normal_100 },
282 { condensed_italic_900, condensed_normal_100 },
283 { expanded_normal_100, expanded_normal_100 },
284 { expanded_normal_900, expanded_normal_100 },
285 { expanded_italic_100, expanded_normal_100 },
286 { expanded_italic_900, expanded_normal_100 },
287 },
288 },
289
290 {
291 { condensed_normal_900,expanded_normal_900 },
292 {
293 { condensed_normal_100, condensed_normal_900 },
294 { condensed_normal_900, condensed_normal_900 },
295 { condensed_italic_100, condensed_normal_900 },
296 { condensed_italic_900, condensed_normal_900 },
297 { expanded_normal_100, expanded_normal_900 },
298 { expanded_normal_900, expanded_normal_900 },
299 { expanded_italic_100, expanded_normal_900 },
300 { expanded_italic_900, expanded_normal_900 },
301 },
302 },
303
304 {
305 { condensed_italic_100,condensed_italic_900,expanded_italic_100,expanded_italic_900 },
306 {
307 { condensed_normal_100, condensed_italic_100 },
308 { condensed_normal_900, condensed_italic_900 },
309 { condensed_italic_100, condensed_italic_100 },
310 { condensed_italic_900, condensed_italic_900 },
311 { expanded_normal_100, expanded_italic_100 },
312 { expanded_normal_900, expanded_italic_900 },
313 { expanded_italic_100, expanded_italic_100 },
314 { expanded_italic_900, expanded_italic_900 },
315 },
316 },
317
318 {
319 { condensed_italic_100,expanded_italic_100 },
320 {
321 { condensed_normal_100, condensed_italic_100 },
322 { condensed_normal_900, condensed_italic_100 },
323 { condensed_italic_100, condensed_italic_100 },
324 { condensed_italic_900, condensed_italic_100 },
325 { expanded_normal_100, expanded_italic_100 },
326 { expanded_normal_900, expanded_italic_100 },
327 { expanded_italic_100, expanded_italic_100 },
328 { expanded_italic_900, expanded_italic_100 },
329 },
330 },
331
332 {
333 { condensed_italic_900,expanded_italic_900 },
334 {
335 { condensed_normal_100, condensed_italic_900 },
336 { condensed_normal_900, condensed_italic_900 },
337 { condensed_italic_100, condensed_italic_900 },
338 { condensed_italic_900, condensed_italic_900 },
339 { expanded_normal_100, expanded_italic_900 },
340 { expanded_normal_900, expanded_italic_900 },
341 { expanded_italic_100, expanded_italic_900 },
342 { expanded_italic_900, expanded_italic_900 },
343 },
344 },
345
346 {
347 { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900 },
348 {
349 { condensed_normal_100, condensed_normal_100 },
350 { condensed_normal_900, condensed_normal_900 },
351 { condensed_italic_100, condensed_italic_100 },
352 { condensed_italic_900, condensed_italic_900 },
353 { expanded_normal_100, condensed_normal_100 },
354 { expanded_normal_900, condensed_normal_900 },
355 { expanded_italic_100, condensed_italic_100 },
356 { expanded_italic_900, condensed_italic_900 },
357 },
358 },
359
360 {
361 { condensed_normal_100,condensed_italic_100 },
362 {
363 { condensed_normal_100, condensed_normal_100 },
364 { condensed_normal_900, condensed_normal_100 },
365 { condensed_italic_100, condensed_italic_100 },
366 { condensed_italic_900, condensed_italic_100 },
367 { expanded_normal_100, condensed_normal_100 },
368 { expanded_normal_900, condensed_normal_100 },
369 { expanded_italic_100, condensed_italic_100 },
370 { expanded_italic_900, condensed_italic_100 },
371 },
372 },
373
374 {
375 { condensed_normal_900,condensed_italic_900 },
376 {
377 { condensed_normal_100, condensed_normal_900 },
378 { condensed_normal_900, condensed_normal_900 },
379 { condensed_italic_100, condensed_italic_900 },
380 { condensed_italic_900, condensed_italic_900 },
381 { expanded_normal_100, condensed_normal_900 },
382 { expanded_normal_900, condensed_normal_900 },
383 { expanded_italic_100, condensed_italic_900 },
384 { expanded_italic_900, condensed_italic_900 },
385 },
386 },
387
388 {
389 { condensed_normal_100,condensed_normal_900 },
390 {
391 { condensed_normal_100, condensed_normal_100 },
392 { condensed_normal_900, condensed_normal_900 },
393 { condensed_italic_100, condensed_normal_100 },
394 { condensed_italic_900, condensed_normal_900 },
395 { expanded_normal_100, condensed_normal_100 },
396 { expanded_normal_900, condensed_normal_900 },
397 { expanded_italic_100, condensed_normal_100 },
398 { expanded_italic_900, condensed_normal_900 },
399 },
400 },
401
402 {
403 { condensed_normal_100 },
404 {
405 { condensed_normal_100, condensed_normal_100 },
406 { condensed_normal_900, condensed_normal_100 },
407 { condensed_italic_100, condensed_normal_100 },
408 { condensed_italic_900, condensed_normal_100 },
409 { expanded_normal_100, condensed_normal_100 },
410 { expanded_normal_900, condensed_normal_100 },
411 { expanded_italic_100, condensed_normal_100 },
412 { expanded_italic_900, condensed_normal_100 },
413 },
414 },
415
416 {
417 { condensed_normal_900 },
418 {
419 { condensed_normal_100, condensed_normal_900 },
420 { condensed_normal_900, condensed_normal_900 },
421 { condensed_italic_100, condensed_normal_900 },
422 { condensed_italic_900, condensed_normal_900 },
423 { expanded_normal_100, condensed_normal_900 },
424 { expanded_normal_900, condensed_normal_900 },
425 { expanded_italic_100, condensed_normal_900 },
426 { expanded_italic_900, condensed_normal_900 },
427 },
428 },
429
430 {
431 { condensed_italic_100,condensed_italic_900 },
432 {
433 { condensed_normal_100, condensed_italic_100 },
434 { condensed_normal_900, condensed_italic_900 },
435 { condensed_italic_100, condensed_italic_100 },
436 { condensed_italic_900, condensed_italic_900 },
437 { expanded_normal_100, condensed_italic_100 },
438 { expanded_normal_900, condensed_italic_900 },
439 { expanded_italic_100, condensed_italic_100 },
440 { expanded_italic_900, condensed_italic_900 },
441 },
442 },
443
444 {
445 { condensed_italic_100 },
446 {
447 { condensed_normal_100, condensed_italic_100 },
448 { condensed_normal_900, condensed_italic_100 },
449 { condensed_italic_100, condensed_italic_100 },
450 { condensed_italic_900, condensed_italic_100 },
451 { expanded_normal_100, condensed_italic_100 },
452 { expanded_normal_900, condensed_italic_100 },
453 { expanded_italic_100, condensed_italic_100 },
454 { expanded_italic_900, condensed_italic_100 },
455 },
456 },
457
458 {
459 { condensed_italic_900 },
460 {
461 { condensed_normal_100, condensed_italic_900 },
462 { condensed_normal_900, condensed_italic_900 },
463 { condensed_italic_100, condensed_italic_900 },
464 { condensed_italic_900, condensed_italic_900 },
465 { expanded_normal_100, condensed_italic_900 },
466 { expanded_normal_900, condensed_italic_900 },
467 { expanded_italic_100, condensed_italic_900 },
468 { expanded_italic_900, condensed_italic_900 },
469 },
470 },
471
472 {
bungemanb4bb7d82016-04-27 10:21:04 -0700473 { expanded_normal_100,expanded_normal_900,
474 expanded_italic_100,expanded_italic_900 },
bungeman147ea2f2015-11-12 09:50:08 -0800475 {
476 { condensed_normal_100, expanded_normal_100 },
477 { condensed_normal_900, expanded_normal_900 },
478 { condensed_italic_100, expanded_italic_100 },
479 { condensed_italic_900, expanded_italic_900 },
bungemanb4bb7d82016-04-27 10:21:04 -0700480 { condensed_obliqu_100, expanded_italic_100 },
481 { condensed_obliqu_900, expanded_italic_900 },
bungeman147ea2f2015-11-12 09:50:08 -0800482 { expanded_normal_100, expanded_normal_100 },
483 { expanded_normal_900, expanded_normal_900 },
484 { expanded_italic_100, expanded_italic_100 },
485 { expanded_italic_900, expanded_italic_900 },
bungemanb4bb7d82016-04-27 10:21:04 -0700486 { expanded_obliqu_100, expanded_italic_100 },
487 { expanded_obliqu_900, expanded_italic_900 },
bungeman147ea2f2015-11-12 09:50:08 -0800488 },
489 },
490
491 {
492 { expanded_normal_100,expanded_italic_100 },
493 {
494 { condensed_normal_100, expanded_normal_100 },
495 { condensed_normal_900, expanded_normal_100 },
496 { condensed_italic_100, expanded_italic_100 },
497 { condensed_italic_900, expanded_italic_100 },
498 { expanded_normal_100, expanded_normal_100 },
499 { expanded_normal_900, expanded_normal_100 },
500 { expanded_italic_100, expanded_italic_100 },
501 { expanded_italic_900, expanded_italic_100 },
502 },
503 },
504
505 {
506 { expanded_normal_900,expanded_italic_900 },
507 {
508 { condensed_normal_100, expanded_normal_900 },
509 { condensed_normal_900, expanded_normal_900 },
510 { condensed_italic_100, expanded_italic_900 },
511 { condensed_italic_900, expanded_italic_900 },
512 { expanded_normal_100, expanded_normal_900 },
513 { expanded_normal_900, expanded_normal_900 },
514 { expanded_italic_100, expanded_italic_900 },
515 { expanded_italic_900, expanded_italic_900 },
516 },
517 },
518
519 {
520 { expanded_normal_100,expanded_normal_900 },
521 {
522 { condensed_normal_100, expanded_normal_100 },
523 { condensed_normal_900, expanded_normal_900 },
524 { condensed_italic_100, expanded_normal_100 },
525 { condensed_italic_900, expanded_normal_900 },
526 { expanded_normal_100, expanded_normal_100 },
527 { expanded_normal_900, expanded_normal_900 },
528 { expanded_italic_100, expanded_normal_100 },
529 { expanded_italic_900, expanded_normal_900 },
530 },
531 },
532
533 {
534 { expanded_normal_100 },
535 {
536 { condensed_normal_100, expanded_normal_100 },
537 { condensed_normal_900, expanded_normal_100 },
538 { condensed_italic_100, expanded_normal_100 },
539 { condensed_italic_900, expanded_normal_100 },
540 { expanded_normal_100, expanded_normal_100 },
541 { expanded_normal_900, expanded_normal_100 },
542 { expanded_italic_100, expanded_normal_100 },
543 { expanded_italic_900, expanded_normal_100 },
544 },
545 },
546
547 {
548 { expanded_normal_900 },
549 {
550 { condensed_normal_100, expanded_normal_900 },
551 { condensed_normal_900, expanded_normal_900 },
552 { condensed_italic_100, expanded_normal_900 },
553 { condensed_italic_900, expanded_normal_900 },
554 { expanded_normal_100, expanded_normal_900 },
555 { expanded_normal_900, expanded_normal_900 },
556 { expanded_italic_100, expanded_normal_900 },
557 { expanded_italic_900, expanded_normal_900 },
558 },
559 },
560
561 {
562 { expanded_italic_100,expanded_italic_900 },
563 {
564 { condensed_normal_100, expanded_italic_100 },
565 { condensed_normal_900, expanded_italic_900 },
566 { condensed_italic_100, expanded_italic_100 },
567 { condensed_italic_900, expanded_italic_900 },
568 { expanded_normal_100, expanded_italic_100 },
569 { expanded_normal_900, expanded_italic_900 },
570 { expanded_italic_100, expanded_italic_100 },
571 { expanded_italic_900, expanded_italic_900 },
572 },
573 },
574
575 {
576 { expanded_italic_100 },
577 {
578 { condensed_normal_100, expanded_italic_100 },
579 { condensed_normal_900, expanded_italic_100 },
580 { condensed_italic_100, expanded_italic_100 },
581 { condensed_italic_900, expanded_italic_100 },
582 { expanded_normal_100, expanded_italic_100 },
583 { expanded_normal_900, expanded_italic_100 },
584 { expanded_italic_100, expanded_italic_100 },
585 { expanded_italic_900, expanded_italic_100 },
586 },
587 },
588
589 {
590 { expanded_italic_900 },
591 {
592 { condensed_normal_100, expanded_italic_900 },
593 { condensed_normal_900, expanded_italic_900 },
594 { condensed_italic_100, expanded_italic_900 },
595 { condensed_italic_900, expanded_italic_900 },
596 { expanded_normal_100, expanded_italic_900 },
597 { expanded_normal_900, expanded_italic_900 },
598 { expanded_italic_100, expanded_italic_900 },
599 { expanded_italic_900, expanded_italic_900 },
600 },
601 },
602
603 {
604 { normal_normal_100, normal_normal_900 },
605 {
606 { normal_normal_300, normal_normal_100 },
607 { normal_normal_400, normal_normal_100 },
608 { normal_normal_500, normal_normal_100 },
609 { normal_normal_600, normal_normal_900 },
610 },
611 },
612
613 {
614 { normal_normal_100, normal_normal_400, normal_normal_900 },
615 {
616 { normal_normal_300, normal_normal_100 },
617 { normal_normal_400, normal_normal_400 },
618 { normal_normal_500, normal_normal_400 },
619 { normal_normal_600, normal_normal_900 },
620 },
621 },
622
623 {
624 { normal_normal_100, normal_normal_500, normal_normal_900 },
625 {
626 { normal_normal_300, normal_normal_100 },
627 { normal_normal_400, normal_normal_500 },
628 { normal_normal_500, normal_normal_500 },
629 { normal_normal_600, normal_normal_900 },
630 },
631 },
632
633 {
634 { },
635 {
636 { normal_normal_300, invalidFontStyle },
637 { normal_normal_400, invalidFontStyle },
638 { normal_normal_500, invalidFontStyle },
639 { normal_normal_600, invalidFontStyle },
640 },
641 },
bungemanb4bb7d82016-04-27 10:21:04 -0700642 {
643 { expanded_normal_100,expanded_normal_900,
644 expanded_italic_100,expanded_italic_900,
645 expanded_obliqu_100,expanded_obliqu_900, },
646 {
647 { condensed_normal_100, expanded_normal_100 },
648 { condensed_normal_900, expanded_normal_900 },
649 { condensed_italic_100, expanded_italic_100 },
650 { condensed_italic_900, expanded_italic_900 },
651 { condensed_obliqu_100, expanded_obliqu_100 },
652 { condensed_obliqu_900, expanded_obliqu_900 },
653 { expanded_normal_100, expanded_normal_100 },
654 { expanded_normal_900, expanded_normal_900 },
655 { expanded_italic_100, expanded_italic_100 },
656 { expanded_italic_900, expanded_italic_900 },
657 { expanded_obliqu_100, expanded_obliqu_100 },
658 { expanded_obliqu_900, expanded_obliqu_900 },
659 },
660 },
661 {
662 { expanded_normal_100,expanded_normal_900,
663 expanded_obliqu_100,expanded_obliqu_900, },
664 {
665 { condensed_normal_100, expanded_normal_100 },
666 { condensed_normal_900, expanded_normal_900 },
667 { condensed_italic_100, expanded_obliqu_100 },
668 { condensed_italic_900, expanded_obliqu_900 },
669 { condensed_obliqu_100, expanded_obliqu_100 },
670 { condensed_obliqu_900, expanded_obliqu_900 },
671 { expanded_normal_100, expanded_normal_100 },
672 { expanded_normal_900, expanded_normal_900 },
673 { expanded_italic_100, expanded_obliqu_100 },
674 { expanded_italic_900, expanded_obliqu_900 },
675 { expanded_obliqu_100, expanded_obliqu_100 },
676 { expanded_obliqu_900, expanded_obliqu_900 },
677 },
678 },
679 {
680 { expanded_italic_100,expanded_italic_900,
681 expanded_obliqu_100,expanded_obliqu_900, },
682 {
683 { condensed_normal_100, expanded_obliqu_100 },
684 { condensed_normal_900, expanded_obliqu_900 },
685 { condensed_italic_100, expanded_italic_100 },
686 { condensed_italic_900, expanded_italic_900 },
687 { condensed_obliqu_100, expanded_obliqu_100 },
688 { condensed_obliqu_900, expanded_obliqu_900 },
689 { expanded_normal_100, expanded_obliqu_100 },
690 { expanded_normal_900, expanded_obliqu_900 },
691 { expanded_italic_100, expanded_italic_100 },
692 { expanded_italic_900, expanded_italic_900 },
693 { expanded_obliqu_100, expanded_obliqu_100 },
694 { expanded_obliqu_900, expanded_obliqu_900 },
695 },
696 },
bungeman147ea2f2015-11-12 09:50:08 -0800697 };
698
699 for (StyleSetTest& test : tests) {
Mike Klein6ad99092016-10-26 10:35:22 -0400700 for (const StyleSetTest::Case& testCase : test.cases) {
Hal Canary342b7ac2016-11-04 11:49:42 -0400701 sk_sp<SkTypeface> typeface(test.styleSet.matchStyle(testCase.pattern));
bungeman147ea2f2015-11-12 09:50:08 -0800702 if (typeface) {
703 REPORTER_ASSERT(reporter, typeface->fontStyle() == testCase.expectedResult);
704 } else {
705 REPORTER_ASSERT(reporter, invalidFontStyle == testCase.expectedResult);
706 }
707 }
708 }
709}
710
reed@google.com66c9f992013-04-11 19:04:34 +0000711DEFINE_bool(verboseFontMgr, false, "run verbose fontmgr tests.");
reed@google.com83165a52013-04-11 18:31:25 +0000712
tfarina@chromium.orge4fafb12013-12-12 21:11:12 +0000713DEF_TEST(FontMgr, reporter) {
bungeman7575bb12017-05-01 13:02:42 -0400714 test_match(reporter);
bungeman147ea2f2015-11-12 09:50:08 -0800715 test_matchStyleCSS3(reporter);
reed@google.com83165a52013-04-11 18:31:25 +0000716 test_fontiter(reporter, FLAGS_verboseFontMgr);
reed@google.comc1a81eb2013-09-19 18:06:03 +0000717 test_alias_names(reporter);
reed@google.com43c27582014-04-08 15:04:29 +0000718 test_font(reporter);
reed@google.com83165a52013-04-11 18:31:25 +0000719}