blob: 471fb921da044346d06aed8dceb8a074a7774dc1 [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
Mike Kleinc0bd9f92019-04-23 12:05:21 -05008#include "include/core/SkFont.h"
9#include "include/core/SkFontMgr.h"
10#include "include/core/SkPaint.h"
11#include "include/core/SkStream.h"
12#include "include/core/SkTypeface.h"
13#include "src/core/SkAdvancedTypefaceMetrics.h"
14#include "tests/Test.h"
15#include "tools/flags/CommandLineFlags.h"
reed@google.com83165a52013-04-11 18:31:25 +000016
bungeman147ea2f2015-11-12 09:50:08 -080017#include <initializer_list>
18#include <limits>
19#include <vector>
20
reed@google.com43c27582014-04-08 15:04:29 +000021static void test_font(skiatest::Reporter* reporter) {
Mike Reed5f50f572018-11-12 13:19:37 -050022 SkFont font(nullptr, 24);
skia.committer@gmail.come1d94432014-04-09 03:04:11 +000023
Herb Derby087fad72019-01-22 14:45:16 -050024 //REPORTER_ASSERT(reporter, SkTypeface::GetDefaultTypeface() == font.getTypeface());
Mike Reedfe4fc142018-10-22 14:24:07 -040025 REPORTER_ASSERT(reporter, 24 == font.getSize());
26 REPORTER_ASSERT(reporter, 1 == font.getScaleX());
27 REPORTER_ASSERT(reporter, 0 == font.getSkewX());
reed@google.com43c27582014-04-08 15:04:29 +000028
29 uint16_t glyphs[5];
30 sk_bzero(glyphs, sizeof(glyphs));
31
Florin Malitad6db27c2018-11-02 12:08:31 -040032 // Check that no glyphs are copied with insufficient storage.
Ben Wagner51e15a62019-05-07 15:38:46 -040033 int count = font.textToGlyphs("Hello", 5, SkTextEncoding::kUTF8, glyphs, 2);
reed@google.com43c27582014-04-08 15:04:29 +000034 REPORTER_ASSERT(reporter, 5 == count);
Florin Malitad6db27c2018-11-02 12:08:31 -040035 for (const auto glyph : glyphs) { REPORTER_ASSERT(reporter, glyph == 0); }
36
Ben Wagner51e15a62019-05-07 15:38:46 -040037 SkAssertResult(font.textToGlyphs("Hello", 5, SkTextEncoding::kUTF8, glyphs,
Florin Malitad6db27c2018-11-02 12:08:31 -040038 SK_ARRAY_COUNT(glyphs)) == count);
39
reed@google.com43c27582014-04-08 15:04:29 +000040 for (int i = 0; i < count; ++i) {
41 REPORTER_ASSERT(reporter, 0 != glyphs[i]);
42 }
43 REPORTER_ASSERT(reporter, glyphs[0] != glyphs[1]); // 'h' != 'e'
44 REPORTER_ASSERT(reporter, glyphs[2] == glyphs[3]); // 'l' == 'l'
skia.committer@gmail.come1d94432014-04-09 03:04:11 +000045
Mike Reedfe4fc142018-10-22 14:24:07 -040046 const SkFont newFont(font.makeWithSize(36));
Herb Derby087fad72019-01-22 14:45:16 -050047 REPORTER_ASSERT(reporter, font.getTypefaceOrDefault() == newFont.getTypefaceOrDefault());
Mike Reedfe4fc142018-10-22 14:24:07 -040048 REPORTER_ASSERT(reporter, 36 == newFont.getSize()); // double check we haven't changed
49 REPORTER_ASSERT(reporter, 24 == font.getSize()); // double check we haven't changed
reed@google.com43c27582014-04-08 15:04:29 +000050}
51
reed@google.comd44d9882013-09-18 20:32:25 +000052/*
53 * If the font backend is going to "alias" some font names to other fonts
54 * (e.g. sans -> Arial) then we want to at least get the same typeface back
55 * if we request the alias name multiple times.
56 */
reed@google.comc1a81eb2013-09-19 18:06:03 +000057static void test_alias_names(skiatest::Reporter* reporter) {
58 const char* inNames[] = {
59 "sans", "sans-serif", "serif", "monospace", "times", "helvetica"
60 };
skia.committer@gmail.comf91e3d42013-09-20 07:01:33 +000061
reed@google.comc1a81eb2013-09-19 18:06:03 +000062 for (size_t i = 0; i < SK_ARRAY_COUNT(inNames); ++i) {
mbocee6a9912016-05-31 11:42:36 -070063 sk_sp<SkTypeface> first(SkTypeface::MakeFromName(inNames[i], SkFontStyle()));
halcanary96fcdcc2015-08-27 07:41:13 -070064 if (nullptr == first.get()) {
reed@google.comc1a81eb2013-09-19 18:06:03 +000065 continue;
66 }
67 for (int j = 0; j < 10; ++j) {
mbocee6a9912016-05-31 11:42:36 -070068 sk_sp<SkTypeface> face(SkTypeface::MakeFromName(inNames[i], SkFontStyle()));
reed@google.comc1a81eb2013-09-19 18:06:03 +000069 #if 0
70 SkString name;
71 face->getFamilyName(&name);
72 printf("request %s, received %s, first id %x received %x\n",
73 inNames[i], name.c_str(), first->uniqueID(), face->uniqueID());
74 #endif
75 REPORTER_ASSERT(reporter, first->uniqueID() == face->uniqueID());
76 }
reed@google.comd44d9882013-09-18 20:32:25 +000077 }
78}
79
reed@google.com83165a52013-04-11 18:31:25 +000080static void test_fontiter(skiatest::Reporter* reporter, bool verbose) {
Hal Canary342b7ac2016-11-04 11:49:42 -040081 sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
reed@google.com83165a52013-04-11 18:31:25 +000082 int count = fm->countFamilies();
83
84 for (int i = 0; i < count; ++i) {
85 SkString fname;
86 fm->getFamilyName(i, &fname);
reed@google.com83165a52013-04-11 18:31:25 +000087
Hal Canary342b7ac2016-11-04 11:49:42 -040088 sk_sp<SkFontStyleSet> fnset(fm->matchFamily(fname.c_str()));
89 sk_sp<SkFontStyleSet> set(fm->createStyleSet(i));
bungeman@google.com71033442013-05-01 14:21:20 +000090 REPORTER_ASSERT(reporter, fnset->count() == set->count());
reed@google.com83165a52013-04-11 18:31:25 +000091
92 if (verbose) {
93 SkDebugf("[%2d] %s\n", i, fname.c_str());
94 }
95
96 for (int j = 0; j < set->count(); ++j) {
97 SkString sname;
98 SkFontStyle fs;
99 set->getStyle(j, &fs, &sname);
reed@google.comeb029572013-04-25 14:59:32 +0000100// REPORTER_ASSERT(reporter, sname.size() > 0);
reed@google.com83165a52013-04-11 18:31:25 +0000101
Hal Canary342b7ac2016-11-04 11:49:42 -0400102 sk_sp<SkTypeface> face(set->createTypeface(j));
reed@google.comc1ccda32013-04-19 14:28:54 +0000103// REPORTER_ASSERT(reporter, face.get());
reed@google.com83165a52013-04-11 18:31:25 +0000104
105 if (verbose) {
106 SkDebugf("\t[%d] %s [%3d %d %d]\n", j, sname.c_str(),
bungemanb4bb7d82016-04-27 10:21:04 -0700107 fs.weight(), fs.width(), fs.slant());
reed@google.com83165a52013-04-11 18:31:25 +0000108 }
109 }
110 }
111}
112
bungeman7575bb12017-05-01 13:02:42 -0400113static void test_match(skiatest::Reporter* reporter) {
114 sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
115 sk_sp<SkFontStyleSet> styleSet(fm->matchFamily(nullptr));
116 REPORTER_ASSERT(reporter, styleSet);
117}
118
bungeman147ea2f2015-11-12 09:50:08 -0800119static void test_matchStyleCSS3(skiatest::Reporter* reporter) {
bungeman147ea2f2015-11-12 09:50:08 -0800120 static const SkFontStyle invalidFontStyle(101, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
121
122 class TestTypeface : public SkTypeface {
123 public:
bungemane3aea102016-07-13 05:16:58 -0700124 TestTypeface(const SkFontStyle& fontStyle) : SkTypeface(fontStyle, false){}
bungeman147ea2f2015-11-12 09:50:08 -0800125 protected:
Ben Wagner4212a7d2019-02-25 14:27:46 -0500126 std::unique_ptr<SkStreamAsset> onOpenStream(int* ttcIndex) const override { return nullptr; }
Bruce Wang536ad2c2018-06-25 11:37:25 -0400127 sk_sp<SkTypeface> onMakeClone(const SkFontArguments& args) const override {
128 return sk_ref_sp(this);
129 }
reeda9322c22016-04-12 06:47:05 -0700130 SkScalerContext* onCreateScalerContext(const SkScalerContextEffects&,
131 const SkDescriptor*) const override {
bungeman147ea2f2015-11-12 09:50:08 -0800132 return nullptr;
133 }
134 void onFilterRec(SkScalerContextRec*) const override { }
Hal Canary209e4b12017-05-04 14:23:55 -0400135 std::unique_ptr<SkAdvancedTypefaceMetrics> onGetAdvancedMetrics() const override {
136 return nullptr;
137 }
bungeman147ea2f2015-11-12 09:50:08 -0800138 void onGetFontDescriptor(SkFontDescriptor*, bool*) const override { }
Mike Reed64670cb2019-04-16 11:37:38 -0700139 void onCharsToGlyphs(const SkUnichar* chars, int count, SkGlyphID glyphs[]) const override {
140 sk_bzero(glyphs, count * sizeof(glyphs[0]));
bungeman147ea2f2015-11-12 09:50:08 -0800141 }
Mike Kleinfc6c37b2016-09-27 09:34:10 -0400142 int onCountGlyphs() const override { return 0; }
Ben Wagner2c2240f2019-04-17 16:04:30 -0400143 void getPostScriptGlyphNames(SkString*) const override {}
144 void getGlyphToUnicodeMap(SkUnichar*) const override {}
Mike Kleinfc6c37b2016-09-27 09:34:10 -0400145 int onGetUPEM() const override { return 0; }
bungeman147ea2f2015-11-12 09:50:08 -0800146 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;
Mike Kleinfc6c37b2016-09-27 09:34:10 -0400155 }
Ben Wagnerfc497342017-02-24 11:15:26 -0500156 int onGetVariationDesignPosition(
157 SkFontArguments::VariationPosition::Coordinate coordinates[],
158 int coordinateCount) const override
159 {
160 return 0;
161 }
Ben Wagner2c2240f2019-04-17 16:04:30 -0400162 int onGetVariationDesignParameters(SkFontParameters::Variation::Axis parameters[],
163 int parameterCount) const override
164 {
165 return -1;
166 }
bungeman147ea2f2015-11-12 09:50:08 -0800167 int onGetTableTags(SkFontTableTag tags[]) const override { return 0; }
168 size_t onGetTableData(SkFontTableTag, size_t, size_t, void*) const override {
169 return 0;
170 }
171 };
172
173 class TestFontStyleSet : public SkFontStyleSet {
174 public:
175 TestFontStyleSet(std::initializer_list<SkFontStyle> styles) : fStyles(styles) {}
176 int count() override { return static_cast<int>(fStyles.size()); }
177 void getStyle(int index, SkFontStyle* style, SkString*) override {
178 if (style) {
179 *style = fStyles[index];
180 }
181 }
182 SkTypeface* createTypeface(int index) override {
183 if (index < 0 || this->count() <= index) {
bungemane3aea102016-07-13 05:16:58 -0700184 return new TestTypeface(invalidFontStyle);
bungeman147ea2f2015-11-12 09:50:08 -0800185 }
bungemane3aea102016-07-13 05:16:58 -0700186 return new TestTypeface(fStyles[index]);
bungeman147ea2f2015-11-12 09:50:08 -0800187 }
188 SkTypeface* matchStyle(const SkFontStyle& pattern) override {
189 return this->matchStyleCSS3(pattern);
190 }
191 private:
192 std::vector<SkFontStyle> fStyles;
193 };
194
195 SkFontStyle condensed_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
196 SkFontStyle condensed_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
197 SkFontStyle condensed_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
198 SkFontStyle condensed_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
bungemanb4bb7d82016-04-27 10:21:04 -0700199 SkFontStyle condensed_obliqu_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
200 SkFontStyle condensed_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800201 SkFontStyle expanded_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant);
202 SkFontStyle expanded_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant);
203 SkFontStyle expanded_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant);
204 SkFontStyle expanded_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant);
bungemanb4bb7d82016-04-27 10:21:04 -0700205 SkFontStyle expanded_obliqu_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kOblique_Slant);
206 SkFontStyle expanded_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kOblique_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800207
208 SkFontStyle normal_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800209 SkFontStyle normal_normal_300(SkFontStyle::kLight_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
210 SkFontStyle normal_normal_400(SkFontStyle::kNormal_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
211 SkFontStyle normal_normal_500(SkFontStyle::kMedium_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
212 SkFontStyle normal_normal_600(SkFontStyle::kSemiBold_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
bungeman147ea2f2015-11-12 09:50:08 -0800213 SkFontStyle normal_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
214
215 struct StyleSetTest {
216 TestFontStyleSet styleSet;
217 struct Case {
218 SkFontStyle pattern;
219 SkFontStyle expectedResult;
220 };
221 std::vector<Case> cases;
222 } tests[] = {
223 {
224 { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900,
225 expanded_normal_100, expanded_normal_900, expanded_italic_100, expanded_italic_900 },
226 {
227 { condensed_normal_100, condensed_normal_100 },
228 { condensed_normal_900, condensed_normal_900 },
229 { condensed_italic_100, condensed_italic_100 },
230 { condensed_italic_900, condensed_italic_900 },
231 { expanded_normal_100, expanded_normal_100 },
232 { expanded_normal_900, expanded_normal_900 },
233 { expanded_italic_100, expanded_italic_100 },
234 { expanded_italic_900, expanded_italic_900 },
235 },
236 },
237
238 {
239 { condensed_normal_100,condensed_italic_100,expanded_normal_100,expanded_italic_100 },
240 {
241 { condensed_normal_100, condensed_normal_100 },
242 { condensed_normal_900, condensed_normal_100 },
243 { condensed_italic_100, condensed_italic_100 },
244 { condensed_italic_900, condensed_italic_100 },
245 { expanded_normal_100, expanded_normal_100 },
246 { expanded_normal_900, expanded_normal_100 },
247 { expanded_italic_100, expanded_italic_100 },
248 { expanded_italic_900, expanded_italic_100 },
249 },
250 },
251
252 {
253 { condensed_normal_900,condensed_italic_900,expanded_normal_900,expanded_italic_900 },
254 {
255 { condensed_normal_100, condensed_normal_900 },
256 { condensed_normal_900, condensed_normal_900 },
257 { condensed_italic_100, condensed_italic_900 },
258 { condensed_italic_900, condensed_italic_900 },
259 { expanded_normal_100, expanded_normal_900 },
260 { expanded_normal_900, expanded_normal_900 },
261 { expanded_italic_100, expanded_italic_900 },
262 { expanded_italic_900, expanded_italic_900 },
263 },
264 },
265
266 {
267 { condensed_normal_100,condensed_normal_900,expanded_normal_100,expanded_normal_900 },
268 {
269 { condensed_normal_100, condensed_normal_100 },
270 { condensed_normal_900, condensed_normal_900 },
271 { condensed_italic_100, condensed_normal_100 },
272 { condensed_italic_900, condensed_normal_900 },
273 { expanded_normal_100, expanded_normal_100 },
274 { expanded_normal_900, expanded_normal_900 },
275 { expanded_italic_100, expanded_normal_100 },
276 { expanded_italic_900, expanded_normal_900 },
277 },
278 },
279
280 {
281 { condensed_normal_100,expanded_normal_100 },
282 {
283 { condensed_normal_100, condensed_normal_100 },
284 { condensed_normal_900, condensed_normal_100 },
285 { condensed_italic_100, condensed_normal_100 },
286 { condensed_italic_900, condensed_normal_100 },
287 { expanded_normal_100, expanded_normal_100 },
288 { expanded_normal_900, expanded_normal_100 },
289 { expanded_italic_100, expanded_normal_100 },
290 { expanded_italic_900, expanded_normal_100 },
291 },
292 },
293
294 {
295 { condensed_normal_900,expanded_normal_900 },
296 {
297 { condensed_normal_100, condensed_normal_900 },
298 { condensed_normal_900, condensed_normal_900 },
299 { condensed_italic_100, condensed_normal_900 },
300 { condensed_italic_900, condensed_normal_900 },
301 { expanded_normal_100, expanded_normal_900 },
302 { expanded_normal_900, expanded_normal_900 },
303 { expanded_italic_100, expanded_normal_900 },
304 { expanded_italic_900, expanded_normal_900 },
305 },
306 },
307
308 {
309 { condensed_italic_100,condensed_italic_900,expanded_italic_100,expanded_italic_900 },
310 {
311 { condensed_normal_100, condensed_italic_100 },
312 { condensed_normal_900, condensed_italic_900 },
313 { condensed_italic_100, condensed_italic_100 },
314 { condensed_italic_900, condensed_italic_900 },
315 { expanded_normal_100, expanded_italic_100 },
316 { expanded_normal_900, expanded_italic_900 },
317 { expanded_italic_100, expanded_italic_100 },
318 { expanded_italic_900, expanded_italic_900 },
319 },
320 },
321
322 {
323 { condensed_italic_100,expanded_italic_100 },
324 {
325 { condensed_normal_100, condensed_italic_100 },
326 { condensed_normal_900, condensed_italic_100 },
327 { condensed_italic_100, condensed_italic_100 },
328 { condensed_italic_900, condensed_italic_100 },
329 { expanded_normal_100, expanded_italic_100 },
330 { expanded_normal_900, expanded_italic_100 },
331 { expanded_italic_100, expanded_italic_100 },
332 { expanded_italic_900, expanded_italic_100 },
333 },
334 },
335
336 {
337 { condensed_italic_900,expanded_italic_900 },
338 {
339 { condensed_normal_100, condensed_italic_900 },
340 { condensed_normal_900, condensed_italic_900 },
341 { condensed_italic_100, condensed_italic_900 },
342 { condensed_italic_900, condensed_italic_900 },
343 { expanded_normal_100, expanded_italic_900 },
344 { expanded_normal_900, expanded_italic_900 },
345 { expanded_italic_100, expanded_italic_900 },
346 { expanded_italic_900, expanded_italic_900 },
347 },
348 },
349
350 {
351 { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900 },
352 {
353 { condensed_normal_100, condensed_normal_100 },
354 { condensed_normal_900, condensed_normal_900 },
355 { condensed_italic_100, condensed_italic_100 },
356 { condensed_italic_900, condensed_italic_900 },
357 { expanded_normal_100, condensed_normal_100 },
358 { expanded_normal_900, condensed_normal_900 },
359 { expanded_italic_100, condensed_italic_100 },
360 { expanded_italic_900, condensed_italic_900 },
361 },
362 },
363
364 {
365 { condensed_normal_100,condensed_italic_100 },
366 {
367 { condensed_normal_100, condensed_normal_100 },
368 { condensed_normal_900, condensed_normal_100 },
369 { condensed_italic_100, condensed_italic_100 },
370 { condensed_italic_900, condensed_italic_100 },
371 { expanded_normal_100, condensed_normal_100 },
372 { expanded_normal_900, condensed_normal_100 },
373 { expanded_italic_100, condensed_italic_100 },
374 { expanded_italic_900, condensed_italic_100 },
375 },
376 },
377
378 {
379 { condensed_normal_900,condensed_italic_900 },
380 {
381 { condensed_normal_100, condensed_normal_900 },
382 { condensed_normal_900, condensed_normal_900 },
383 { condensed_italic_100, condensed_italic_900 },
384 { condensed_italic_900, condensed_italic_900 },
385 { expanded_normal_100, condensed_normal_900 },
386 { expanded_normal_900, condensed_normal_900 },
387 { expanded_italic_100, condensed_italic_900 },
388 { expanded_italic_900, condensed_italic_900 },
389 },
390 },
391
392 {
393 { condensed_normal_100,condensed_normal_900 },
394 {
395 { condensed_normal_100, condensed_normal_100 },
396 { condensed_normal_900, condensed_normal_900 },
397 { condensed_italic_100, condensed_normal_100 },
398 { condensed_italic_900, condensed_normal_900 },
399 { expanded_normal_100, condensed_normal_100 },
400 { expanded_normal_900, condensed_normal_900 },
401 { expanded_italic_100, condensed_normal_100 },
402 { expanded_italic_900, condensed_normal_900 },
403 },
404 },
405
406 {
407 { condensed_normal_100 },
408 {
409 { condensed_normal_100, condensed_normal_100 },
410 { condensed_normal_900, condensed_normal_100 },
411 { condensed_italic_100, condensed_normal_100 },
412 { condensed_italic_900, condensed_normal_100 },
413 { expanded_normal_100, condensed_normal_100 },
414 { expanded_normal_900, condensed_normal_100 },
415 { expanded_italic_100, condensed_normal_100 },
416 { expanded_italic_900, condensed_normal_100 },
417 },
418 },
419
420 {
421 { condensed_normal_900 },
422 {
423 { condensed_normal_100, condensed_normal_900 },
424 { condensed_normal_900, condensed_normal_900 },
425 { condensed_italic_100, condensed_normal_900 },
426 { condensed_italic_900, condensed_normal_900 },
427 { expanded_normal_100, condensed_normal_900 },
428 { expanded_normal_900, condensed_normal_900 },
429 { expanded_italic_100, condensed_normal_900 },
430 { expanded_italic_900, condensed_normal_900 },
431 },
432 },
433
434 {
435 { condensed_italic_100,condensed_italic_900 },
436 {
437 { condensed_normal_100, condensed_italic_100 },
438 { condensed_normal_900, condensed_italic_900 },
439 { condensed_italic_100, condensed_italic_100 },
440 { condensed_italic_900, condensed_italic_900 },
441 { expanded_normal_100, condensed_italic_100 },
442 { expanded_normal_900, condensed_italic_900 },
443 { expanded_italic_100, condensed_italic_100 },
444 { expanded_italic_900, condensed_italic_900 },
445 },
446 },
447
448 {
449 { condensed_italic_100 },
450 {
451 { condensed_normal_100, condensed_italic_100 },
452 { condensed_normal_900, condensed_italic_100 },
453 { condensed_italic_100, condensed_italic_100 },
454 { condensed_italic_900, condensed_italic_100 },
455 { expanded_normal_100, condensed_italic_100 },
456 { expanded_normal_900, condensed_italic_100 },
457 { expanded_italic_100, condensed_italic_100 },
458 { expanded_italic_900, condensed_italic_100 },
459 },
460 },
461
462 {
463 { condensed_italic_900 },
464 {
465 { condensed_normal_100, condensed_italic_900 },
466 { condensed_normal_900, condensed_italic_900 },
467 { condensed_italic_100, condensed_italic_900 },
468 { condensed_italic_900, condensed_italic_900 },
469 { expanded_normal_100, condensed_italic_900 },
470 { expanded_normal_900, condensed_italic_900 },
471 { expanded_italic_100, condensed_italic_900 },
472 { expanded_italic_900, condensed_italic_900 },
473 },
474 },
475
476 {
bungemanb4bb7d82016-04-27 10:21:04 -0700477 { expanded_normal_100,expanded_normal_900,
478 expanded_italic_100,expanded_italic_900 },
bungeman147ea2f2015-11-12 09:50:08 -0800479 {
480 { condensed_normal_100, expanded_normal_100 },
481 { condensed_normal_900, expanded_normal_900 },
482 { condensed_italic_100, expanded_italic_100 },
483 { condensed_italic_900, expanded_italic_900 },
bungemanb4bb7d82016-04-27 10:21:04 -0700484 { condensed_obliqu_100, expanded_italic_100 },
485 { condensed_obliqu_900, expanded_italic_900 },
bungeman147ea2f2015-11-12 09:50:08 -0800486 { expanded_normal_100, expanded_normal_100 },
487 { expanded_normal_900, expanded_normal_900 },
488 { expanded_italic_100, expanded_italic_100 },
489 { expanded_italic_900, expanded_italic_900 },
bungemanb4bb7d82016-04-27 10:21:04 -0700490 { expanded_obliqu_100, expanded_italic_100 },
491 { expanded_obliqu_900, expanded_italic_900 },
bungeman147ea2f2015-11-12 09:50:08 -0800492 },
493 },
494
495 {
496 { expanded_normal_100,expanded_italic_100 },
497 {
498 { condensed_normal_100, expanded_normal_100 },
499 { condensed_normal_900, expanded_normal_100 },
500 { condensed_italic_100, expanded_italic_100 },
501 { condensed_italic_900, expanded_italic_100 },
502 { expanded_normal_100, expanded_normal_100 },
503 { expanded_normal_900, expanded_normal_100 },
504 { expanded_italic_100, expanded_italic_100 },
505 { expanded_italic_900, expanded_italic_100 },
506 },
507 },
508
509 {
510 { expanded_normal_900,expanded_italic_900 },
511 {
512 { condensed_normal_100, expanded_normal_900 },
513 { condensed_normal_900, expanded_normal_900 },
514 { condensed_italic_100, expanded_italic_900 },
515 { condensed_italic_900, expanded_italic_900 },
516 { expanded_normal_100, expanded_normal_900 },
517 { expanded_normal_900, expanded_normal_900 },
518 { expanded_italic_100, expanded_italic_900 },
519 { expanded_italic_900, expanded_italic_900 },
520 },
521 },
522
523 {
524 { expanded_normal_100,expanded_normal_900 },
525 {
526 { condensed_normal_100, expanded_normal_100 },
527 { condensed_normal_900, expanded_normal_900 },
528 { condensed_italic_100, expanded_normal_100 },
529 { condensed_italic_900, expanded_normal_900 },
530 { expanded_normal_100, expanded_normal_100 },
531 { expanded_normal_900, expanded_normal_900 },
532 { expanded_italic_100, expanded_normal_100 },
533 { expanded_italic_900, expanded_normal_900 },
534 },
535 },
536
537 {
538 { expanded_normal_100 },
539 {
540 { condensed_normal_100, expanded_normal_100 },
541 { condensed_normal_900, expanded_normal_100 },
542 { condensed_italic_100, expanded_normal_100 },
543 { condensed_italic_900, expanded_normal_100 },
544 { expanded_normal_100, expanded_normal_100 },
545 { expanded_normal_900, expanded_normal_100 },
546 { expanded_italic_100, expanded_normal_100 },
547 { expanded_italic_900, expanded_normal_100 },
548 },
549 },
550
551 {
552 { expanded_normal_900 },
553 {
554 { condensed_normal_100, expanded_normal_900 },
555 { condensed_normal_900, expanded_normal_900 },
556 { condensed_italic_100, expanded_normal_900 },
557 { condensed_italic_900, expanded_normal_900 },
558 { expanded_normal_100, expanded_normal_900 },
559 { expanded_normal_900, expanded_normal_900 },
560 { expanded_italic_100, expanded_normal_900 },
561 { expanded_italic_900, expanded_normal_900 },
562 },
563 },
564
565 {
566 { expanded_italic_100,expanded_italic_900 },
567 {
568 { condensed_normal_100, expanded_italic_100 },
569 { condensed_normal_900, expanded_italic_900 },
570 { condensed_italic_100, expanded_italic_100 },
571 { condensed_italic_900, expanded_italic_900 },
572 { expanded_normal_100, expanded_italic_100 },
573 { expanded_normal_900, expanded_italic_900 },
574 { expanded_italic_100, expanded_italic_100 },
575 { expanded_italic_900, expanded_italic_900 },
576 },
577 },
578
579 {
580 { expanded_italic_100 },
581 {
582 { condensed_normal_100, expanded_italic_100 },
583 { condensed_normal_900, expanded_italic_100 },
584 { condensed_italic_100, expanded_italic_100 },
585 { condensed_italic_900, expanded_italic_100 },
586 { expanded_normal_100, expanded_italic_100 },
587 { expanded_normal_900, expanded_italic_100 },
588 { expanded_italic_100, expanded_italic_100 },
589 { expanded_italic_900, expanded_italic_100 },
590 },
591 },
592
593 {
594 { expanded_italic_900 },
595 {
596 { condensed_normal_100, expanded_italic_900 },
597 { condensed_normal_900, expanded_italic_900 },
598 { condensed_italic_100, expanded_italic_900 },
599 { condensed_italic_900, expanded_italic_900 },
600 { expanded_normal_100, expanded_italic_900 },
601 { expanded_normal_900, expanded_italic_900 },
602 { expanded_italic_100, expanded_italic_900 },
603 { expanded_italic_900, expanded_italic_900 },
604 },
605 },
606
607 {
608 { normal_normal_100, normal_normal_900 },
609 {
610 { normal_normal_300, normal_normal_100 },
611 { normal_normal_400, normal_normal_100 },
612 { normal_normal_500, normal_normal_100 },
613 { normal_normal_600, normal_normal_900 },
614 },
615 },
616
617 {
618 { normal_normal_100, normal_normal_400, normal_normal_900 },
619 {
620 { normal_normal_300, normal_normal_100 },
621 { normal_normal_400, normal_normal_400 },
622 { normal_normal_500, normal_normal_400 },
623 { normal_normal_600, normal_normal_900 },
624 },
625 },
626
627 {
628 { normal_normal_100, normal_normal_500, normal_normal_900 },
629 {
630 { normal_normal_300, normal_normal_100 },
631 { normal_normal_400, normal_normal_500 },
632 { normal_normal_500, normal_normal_500 },
633 { normal_normal_600, normal_normal_900 },
634 },
635 },
636
637 {
638 { },
639 {
640 { normal_normal_300, invalidFontStyle },
641 { normal_normal_400, invalidFontStyle },
642 { normal_normal_500, invalidFontStyle },
643 { normal_normal_600, invalidFontStyle },
644 },
645 },
bungemanb4bb7d82016-04-27 10:21:04 -0700646 {
647 { expanded_normal_100,expanded_normal_900,
648 expanded_italic_100,expanded_italic_900,
649 expanded_obliqu_100,expanded_obliqu_900, },
650 {
651 { condensed_normal_100, expanded_normal_100 },
652 { condensed_normal_900, expanded_normal_900 },
653 { condensed_italic_100, expanded_italic_100 },
654 { condensed_italic_900, expanded_italic_900 },
655 { condensed_obliqu_100, expanded_obliqu_100 },
656 { condensed_obliqu_900, expanded_obliqu_900 },
657 { expanded_normal_100, expanded_normal_100 },
658 { expanded_normal_900, expanded_normal_900 },
659 { expanded_italic_100, expanded_italic_100 },
660 { expanded_italic_900, expanded_italic_900 },
661 { expanded_obliqu_100, expanded_obliqu_100 },
662 { expanded_obliqu_900, expanded_obliqu_900 },
663 },
664 },
665 {
666 { expanded_normal_100,expanded_normal_900,
667 expanded_obliqu_100,expanded_obliqu_900, },
668 {
669 { condensed_normal_100, expanded_normal_100 },
670 { condensed_normal_900, expanded_normal_900 },
671 { condensed_italic_100, expanded_obliqu_100 },
672 { condensed_italic_900, expanded_obliqu_900 },
673 { condensed_obliqu_100, expanded_obliqu_100 },
674 { condensed_obliqu_900, expanded_obliqu_900 },
675 { expanded_normal_100, expanded_normal_100 },
676 { expanded_normal_900, expanded_normal_900 },
677 { expanded_italic_100, expanded_obliqu_100 },
678 { expanded_italic_900, expanded_obliqu_900 },
679 { expanded_obliqu_100, expanded_obliqu_100 },
680 { expanded_obliqu_900, expanded_obliqu_900 },
681 },
682 },
683 {
684 { expanded_italic_100,expanded_italic_900,
685 expanded_obliqu_100,expanded_obliqu_900, },
686 {
687 { condensed_normal_100, expanded_obliqu_100 },
688 { condensed_normal_900, expanded_obliqu_900 },
689 { condensed_italic_100, expanded_italic_100 },
690 { condensed_italic_900, expanded_italic_900 },
691 { condensed_obliqu_100, expanded_obliqu_100 },
692 { condensed_obliqu_900, expanded_obliqu_900 },
693 { expanded_normal_100, expanded_obliqu_100 },
694 { expanded_normal_900, expanded_obliqu_900 },
695 { expanded_italic_100, expanded_italic_100 },
696 { expanded_italic_900, expanded_italic_900 },
697 { expanded_obliqu_100, expanded_obliqu_100 },
698 { expanded_obliqu_900, expanded_obliqu_900 },
699 },
700 },
bungeman147ea2f2015-11-12 09:50:08 -0800701 };
702
703 for (StyleSetTest& test : tests) {
Mike Klein6ad99092016-10-26 10:35:22 -0400704 for (const StyleSetTest::Case& testCase : test.cases) {
Hal Canary342b7ac2016-11-04 11:49:42 -0400705 sk_sp<SkTypeface> typeface(test.styleSet.matchStyle(testCase.pattern));
bungeman147ea2f2015-11-12 09:50:08 -0800706 if (typeface) {
707 REPORTER_ASSERT(reporter, typeface->fontStyle() == testCase.expectedResult);
708 } else {
709 REPORTER_ASSERT(reporter, invalidFontStyle == testCase.expectedResult);
710 }
711 }
712 }
713}
714
reed@google.com66c9f992013-04-11 19:04:34 +0000715DEFINE_bool(verboseFontMgr, false, "run verbose fontmgr tests.");
reed@google.com83165a52013-04-11 18:31:25 +0000716
tfarina@chromium.orge4fafb12013-12-12 21:11:12 +0000717DEF_TEST(FontMgr, reporter) {
bungeman7575bb12017-05-01 13:02:42 -0400718 test_match(reporter);
bungeman147ea2f2015-11-12 09:50:08 -0800719 test_matchStyleCSS3(reporter);
reed@google.com83165a52013-04-11 18:31:25 +0000720 test_fontiter(reporter, FLAGS_verboseFontMgr);
reed@google.comc1a81eb2013-09-19 18:06:03 +0000721 test_alias_names(reporter);
reed@google.com43c27582014-04-08 15:04:29 +0000722 test_font(reporter);
reed@google.com83165a52013-04-11 18:31:25 +0000723}