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