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 "SkCommandLineFlags.h" 9#include "SkFontMgr.h" 10#include "SkTypeface.h" 11#include "Test.h" 12 13#include "SkFont.h" 14#include "SkPaint.h" 15 16#include <initializer_list> 17#include <limits> 18#include <vector> 19 20static void test_font(skiatest::Reporter* reporter) { 21 uint32_t flags = 0; 22 SkAutoTUnref<SkFont> font(SkFont::Create(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 SkAutoTUnref<SkFont> newFont(font->cloneWithSize(36)); 43 REPORTER_ASSERT(reporter, newFont.get()); 44 REPORTER_ASSERT(reporter, font->getTypeface() == newFont->getTypeface()); 45 REPORTER_ASSERT(reporter, 36 == newFont->getSize()); // double check we haven't changed 46 REPORTER_ASSERT(reporter, 24 == font->getSize()); // double check we haven't changed 47 48 SkPaint paint; 49 paint.setTextSize(18); 50 font.reset(SkFont::Testing_CreateFromPaint(paint)); 51 REPORTER_ASSERT(reporter, font.get()); 52 REPORTER_ASSERT(reporter, font->getSize() == paint.getTextSize()); 53 REPORTER_ASSERT(reporter, SkFont::kBW_MaskType == font->getMaskType()); 54} 55 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 */ 61static 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 SkAutoTUnref<SkTypeface> first(SkTypeface::CreateFromName(inNames[i], 68 SkTypeface::kNormal)); 69 if (nullptr == first.get()) { 70 continue; 71 } 72 for (int j = 0; j < 10; ++j) { 73 SkAutoTUnref<SkTypeface> face(SkTypeface::CreateFromName(inNames[i], 74 SkTypeface::kNormal)); 75 #if 0 76 SkString name; 77 face->getFamilyName(&name); 78 printf("request %s, received %s, first id %x received %x\n", 79 inNames[i], name.c_str(), first->uniqueID(), face->uniqueID()); 80 #endif 81 REPORTER_ASSERT(reporter, first->uniqueID() == face->uniqueID()); 82 } 83 } 84} 85 86static void test_fontiter(skiatest::Reporter* reporter, bool verbose) { 87 SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault()); 88 int count = fm->countFamilies(); 89 90 for (int i = 0; i < count; ++i) { 91 SkString fname; 92 fm->getFamilyName(i, &fname); 93 94 SkAutoTUnref<SkFontStyleSet> fnset(fm->matchFamily(fname.c_str())); 95 SkAutoTUnref<SkFontStyleSet> set(fm->createStyleSet(i)); 96 REPORTER_ASSERT(reporter, fnset->count() == set->count()); 97 98 if (verbose) { 99 SkDebugf("[%2d] %s\n", i, fname.c_str()); 100 } 101 102 for (int j = 0; j < set->count(); ++j) { 103 SkString sname; 104 SkFontStyle fs; 105 set->getStyle(j, &fs, &sname); 106// REPORTER_ASSERT(reporter, sname.size() > 0); 107 108 SkAutoTUnref<SkTypeface> face(set->createTypeface(j)); 109// REPORTER_ASSERT(reporter, face.get()); 110 111 if (verbose) { 112 SkDebugf("\t[%d] %s [%3d %d %d]\n", j, sname.c_str(), 113 fs.weight(), fs.width(), fs.isItalic()); 114 } 115 } 116 } 117} 118 119static void test_matchStyleCSS3(skiatest::Reporter* reporter) { 120 static const SkFontID invalidFontID = std::numeric_limits<SkFontID>::max(); 121 static const SkFontStyle invalidFontStyle(101, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant); 122 123 class TestTypeface : public SkTypeface { 124 public: 125 TestTypeface(const SkFontStyle& fontStyle, SkFontID id) : SkTypeface(fontStyle, id, false){} 126 protected: 127 SkStreamAsset* onOpenStream(int* ttcIndex) const override { return nullptr; } 128 SkScalerContext* onCreateScalerContext(const SkDescriptor*) const override { 129 return nullptr; 130 } 131 void onFilterRec(SkScalerContextRec*) const override { } 132 virtual SkAdvancedTypefaceMetrics* onGetAdvancedTypefaceMetrics( 133 PerGlyphInfo, 134 const uint32_t*, uint32_t) const override { return nullptr; } 135 void onGetFontDescriptor(SkFontDescriptor*, bool*) const override { } 136 virtual int onCharsToGlyphs(const void* chars, Encoding encoding, 137 uint16_t glyphs[], int glyphCount) const override { 138 if (glyphs && glyphCount > 0) { 139 sk_bzero(glyphs, glyphCount * sizeof(glyphs[0])); 140 } 141 return 0; 142 } 143 int onCountGlyphs() const override { return 0; }; 144 int onGetUPEM() const override { return 0; }; 145 class EmptyLocalizedStrings : public SkTypeface::LocalizedStrings { 146 public: 147 bool next(SkTypeface::LocalizedString*) override { return false; } 148 }; 149 void onGetFamilyName(SkString* familyName) const override { 150 familyName->reset(); 151 } 152 SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override { 153 return new EmptyLocalizedStrings; 154 }; 155 int onGetTableTags(SkFontTableTag tags[]) const override { return 0; } 156 size_t onGetTableData(SkFontTableTag, size_t, size_t, void*) const override { 157 return 0; 158 } 159 }; 160 161 class TestFontStyleSet : public SkFontStyleSet { 162 public: 163 TestFontStyleSet(std::initializer_list<SkFontStyle> styles) : fStyles(styles) {} 164 int count() override { return static_cast<int>(fStyles.size()); } 165 void getStyle(int index, SkFontStyle* style, SkString*) override { 166 if (style) { 167 *style = fStyles[index]; 168 } 169 } 170 SkTypeface* createTypeface(int index) override { 171 if (index < 0 || this->count() <= index) { 172 return new TestTypeface(invalidFontStyle, invalidFontID); 173 } 174 return new TestTypeface(fStyles[index], index); 175 } 176 SkTypeface* matchStyle(const SkFontStyle& pattern) override { 177 return this->matchStyleCSS3(pattern); 178 } 179 private: 180 std::vector<SkFontStyle> fStyles; 181 }; 182 183 SkFontStyle condensed_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant); 184 SkFontStyle condensed_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant); 185 SkFontStyle condensed_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant); 186 SkFontStyle condensed_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant); 187 SkFontStyle expanded_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant); 188 SkFontStyle expanded_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant); 189 SkFontStyle expanded_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant); 190 SkFontStyle expanded_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant); 191 192 SkFontStyle normal_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant); 193 SkFontStyle normal_normal_200(SkFontStyle::kExtraLight_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant); 194 SkFontStyle normal_normal_300(SkFontStyle::kLight_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant); 195 SkFontStyle normal_normal_400(SkFontStyle::kNormal_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant); 196 SkFontStyle normal_normal_500(SkFontStyle::kMedium_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant); 197 SkFontStyle normal_normal_600(SkFontStyle::kSemiBold_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant); 198 SkFontStyle normal_normal_700(SkFontStyle::kBold_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant); 199 SkFontStyle normal_normal_800(SkFontStyle::kExtraBold_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant); 200 SkFontStyle normal_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant); 201 202 struct StyleSetTest { 203 TestFontStyleSet styleSet; 204 struct Case { 205 SkFontStyle pattern; 206 SkFontStyle expectedResult; 207 }; 208 std::vector<Case> cases; 209 } tests[] = { 210 { 211 { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900, 212 expanded_normal_100, expanded_normal_900, expanded_italic_100, expanded_italic_900 }, 213 { 214 { condensed_normal_100, condensed_normal_100 }, 215 { condensed_normal_900, condensed_normal_900 }, 216 { condensed_italic_100, condensed_italic_100 }, 217 { condensed_italic_900, condensed_italic_900 }, 218 { expanded_normal_100, expanded_normal_100 }, 219 { expanded_normal_900, expanded_normal_900 }, 220 { expanded_italic_100, expanded_italic_100 }, 221 { expanded_italic_900, expanded_italic_900 }, 222 }, 223 }, 224 225 { 226 { condensed_normal_100,condensed_italic_100,expanded_normal_100,expanded_italic_100 }, 227 { 228 { condensed_normal_100, condensed_normal_100 }, 229 { condensed_normal_900, condensed_normal_100 }, 230 { condensed_italic_100, condensed_italic_100 }, 231 { condensed_italic_900, condensed_italic_100 }, 232 { expanded_normal_100, expanded_normal_100 }, 233 { expanded_normal_900, expanded_normal_100 }, 234 { expanded_italic_100, expanded_italic_100 }, 235 { expanded_italic_900, expanded_italic_100 }, 236 }, 237 }, 238 239 { 240 { condensed_normal_900,condensed_italic_900,expanded_normal_900,expanded_italic_900 }, 241 { 242 { condensed_normal_100, condensed_normal_900 }, 243 { condensed_normal_900, condensed_normal_900 }, 244 { condensed_italic_100, condensed_italic_900 }, 245 { condensed_italic_900, condensed_italic_900 }, 246 { expanded_normal_100, expanded_normal_900 }, 247 { expanded_normal_900, expanded_normal_900 }, 248 { expanded_italic_100, expanded_italic_900 }, 249 { expanded_italic_900, expanded_italic_900 }, 250 }, 251 }, 252 253 { 254 { condensed_normal_100,condensed_normal_900,expanded_normal_100,expanded_normal_900 }, 255 { 256 { condensed_normal_100, condensed_normal_100 }, 257 { condensed_normal_900, condensed_normal_900 }, 258 { condensed_italic_100, condensed_normal_100 }, 259 { condensed_italic_900, condensed_normal_900 }, 260 { expanded_normal_100, expanded_normal_100 }, 261 { expanded_normal_900, expanded_normal_900 }, 262 { expanded_italic_100, expanded_normal_100 }, 263 { expanded_italic_900, expanded_normal_900 }, 264 }, 265 }, 266 267 { 268 { condensed_normal_100,expanded_normal_100 }, 269 { 270 { condensed_normal_100, condensed_normal_100 }, 271 { condensed_normal_900, condensed_normal_100 }, 272 { condensed_italic_100, condensed_normal_100 }, 273 { condensed_italic_900, condensed_normal_100 }, 274 { expanded_normal_100, expanded_normal_100 }, 275 { expanded_normal_900, expanded_normal_100 }, 276 { expanded_italic_100, expanded_normal_100 }, 277 { expanded_italic_900, expanded_normal_100 }, 278 }, 279 }, 280 281 { 282 { condensed_normal_900,expanded_normal_900 }, 283 { 284 { condensed_normal_100, condensed_normal_900 }, 285 { condensed_normal_900, condensed_normal_900 }, 286 { condensed_italic_100, condensed_normal_900 }, 287 { condensed_italic_900, condensed_normal_900 }, 288 { expanded_normal_100, expanded_normal_900 }, 289 { expanded_normal_900, expanded_normal_900 }, 290 { expanded_italic_100, expanded_normal_900 }, 291 { expanded_italic_900, expanded_normal_900 }, 292 }, 293 }, 294 295 { 296 { condensed_italic_100,condensed_italic_900,expanded_italic_100,expanded_italic_900 }, 297 { 298 { condensed_normal_100, condensed_italic_100 }, 299 { condensed_normal_900, condensed_italic_900 }, 300 { condensed_italic_100, condensed_italic_100 }, 301 { condensed_italic_900, condensed_italic_900 }, 302 { expanded_normal_100, expanded_italic_100 }, 303 { expanded_normal_900, expanded_italic_900 }, 304 { expanded_italic_100, expanded_italic_100 }, 305 { expanded_italic_900, expanded_italic_900 }, 306 }, 307 }, 308 309 { 310 { condensed_italic_100,expanded_italic_100 }, 311 { 312 { condensed_normal_100, condensed_italic_100 }, 313 { condensed_normal_900, condensed_italic_100 }, 314 { condensed_italic_100, condensed_italic_100 }, 315 { condensed_italic_900, condensed_italic_100 }, 316 { expanded_normal_100, expanded_italic_100 }, 317 { expanded_normal_900, expanded_italic_100 }, 318 { expanded_italic_100, expanded_italic_100 }, 319 { expanded_italic_900, expanded_italic_100 }, 320 }, 321 }, 322 323 { 324 { condensed_italic_900,expanded_italic_900 }, 325 { 326 { condensed_normal_100, condensed_italic_900 }, 327 { condensed_normal_900, condensed_italic_900 }, 328 { condensed_italic_100, condensed_italic_900 }, 329 { condensed_italic_900, condensed_italic_900 }, 330 { expanded_normal_100, expanded_italic_900 }, 331 { expanded_normal_900, expanded_italic_900 }, 332 { expanded_italic_100, expanded_italic_900 }, 333 { expanded_italic_900, expanded_italic_900 }, 334 }, 335 }, 336 337 { 338 { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900 }, 339 { 340 { condensed_normal_100, condensed_normal_100 }, 341 { condensed_normal_900, condensed_normal_900 }, 342 { condensed_italic_100, condensed_italic_100 }, 343 { condensed_italic_900, condensed_italic_900 }, 344 { expanded_normal_100, condensed_normal_100 }, 345 { expanded_normal_900, condensed_normal_900 }, 346 { expanded_italic_100, condensed_italic_100 }, 347 { expanded_italic_900, condensed_italic_900 }, 348 }, 349 }, 350 351 { 352 { condensed_normal_100,condensed_italic_100 }, 353 { 354 { condensed_normal_100, condensed_normal_100 }, 355 { condensed_normal_900, condensed_normal_100 }, 356 { condensed_italic_100, condensed_italic_100 }, 357 { condensed_italic_900, condensed_italic_100 }, 358 { expanded_normal_100, condensed_normal_100 }, 359 { expanded_normal_900, condensed_normal_100 }, 360 { expanded_italic_100, condensed_italic_100 }, 361 { expanded_italic_900, condensed_italic_100 }, 362 }, 363 }, 364 365 { 366 { condensed_normal_900,condensed_italic_900 }, 367 { 368 { condensed_normal_100, condensed_normal_900 }, 369 { condensed_normal_900, condensed_normal_900 }, 370 { condensed_italic_100, condensed_italic_900 }, 371 { condensed_italic_900, condensed_italic_900 }, 372 { expanded_normal_100, condensed_normal_900 }, 373 { expanded_normal_900, condensed_normal_900 }, 374 { expanded_italic_100, condensed_italic_900 }, 375 { expanded_italic_900, condensed_italic_900 }, 376 }, 377 }, 378 379 { 380 { condensed_normal_100,condensed_normal_900 }, 381 { 382 { condensed_normal_100, condensed_normal_100 }, 383 { condensed_normal_900, condensed_normal_900 }, 384 { condensed_italic_100, condensed_normal_100 }, 385 { condensed_italic_900, condensed_normal_900 }, 386 { expanded_normal_100, condensed_normal_100 }, 387 { expanded_normal_900, condensed_normal_900 }, 388 { expanded_italic_100, condensed_normal_100 }, 389 { expanded_italic_900, condensed_normal_900 }, 390 }, 391 }, 392 393 { 394 { condensed_normal_100 }, 395 { 396 { condensed_normal_100, condensed_normal_100 }, 397 { condensed_normal_900, condensed_normal_100 }, 398 { condensed_italic_100, condensed_normal_100 }, 399 { condensed_italic_900, condensed_normal_100 }, 400 { expanded_normal_100, condensed_normal_100 }, 401 { expanded_normal_900, condensed_normal_100 }, 402 { expanded_italic_100, condensed_normal_100 }, 403 { expanded_italic_900, condensed_normal_100 }, 404 }, 405 }, 406 407 { 408 { condensed_normal_900 }, 409 { 410 { condensed_normal_100, condensed_normal_900 }, 411 { condensed_normal_900, condensed_normal_900 }, 412 { condensed_italic_100, condensed_normal_900 }, 413 { condensed_italic_900, condensed_normal_900 }, 414 { expanded_normal_100, condensed_normal_900 }, 415 { expanded_normal_900, condensed_normal_900 }, 416 { expanded_italic_100, condensed_normal_900 }, 417 { expanded_italic_900, condensed_normal_900 }, 418 }, 419 }, 420 421 { 422 { condensed_italic_100,condensed_italic_900 }, 423 { 424 { condensed_normal_100, condensed_italic_100 }, 425 { condensed_normal_900, condensed_italic_900 }, 426 { condensed_italic_100, condensed_italic_100 }, 427 { condensed_italic_900, condensed_italic_900 }, 428 { expanded_normal_100, condensed_italic_100 }, 429 { expanded_normal_900, condensed_italic_900 }, 430 { expanded_italic_100, condensed_italic_100 }, 431 { expanded_italic_900, condensed_italic_900 }, 432 }, 433 }, 434 435 { 436 { condensed_italic_100 }, 437 { 438 { condensed_normal_100, condensed_italic_100 }, 439 { condensed_normal_900, condensed_italic_100 }, 440 { condensed_italic_100, condensed_italic_100 }, 441 { condensed_italic_900, condensed_italic_100 }, 442 { expanded_normal_100, condensed_italic_100 }, 443 { expanded_normal_900, condensed_italic_100 }, 444 { expanded_italic_100, condensed_italic_100 }, 445 { expanded_italic_900, condensed_italic_100 }, 446 }, 447 }, 448 449 { 450 { condensed_italic_900 }, 451 { 452 { condensed_normal_100, condensed_italic_900 }, 453 { condensed_normal_900, condensed_italic_900 }, 454 { condensed_italic_100, condensed_italic_900 }, 455 { condensed_italic_900, condensed_italic_900 }, 456 { expanded_normal_100, condensed_italic_900 }, 457 { expanded_normal_900, condensed_italic_900 }, 458 { expanded_italic_100, condensed_italic_900 }, 459 { expanded_italic_900, condensed_italic_900 }, 460 }, 461 }, 462 463 { 464 { expanded_normal_100,expanded_normal_900,expanded_italic_100,expanded_italic_900 }, 465 { 466 { condensed_normal_100, expanded_normal_100 }, 467 { condensed_normal_900, expanded_normal_900 }, 468 { condensed_italic_100, expanded_italic_100 }, 469 { condensed_italic_900, expanded_italic_900 }, 470 { expanded_normal_100, expanded_normal_100 }, 471 { expanded_normal_900, expanded_normal_900 }, 472 { expanded_italic_100, expanded_italic_100 }, 473 { expanded_italic_900, expanded_italic_900 }, 474 }, 475 }, 476 477 { 478 { expanded_normal_100,expanded_italic_100 }, 479 { 480 { condensed_normal_100, expanded_normal_100 }, 481 { condensed_normal_900, expanded_normal_100 }, 482 { condensed_italic_100, expanded_italic_100 }, 483 { condensed_italic_900, expanded_italic_100 }, 484 { expanded_normal_100, expanded_normal_100 }, 485 { expanded_normal_900, expanded_normal_100 }, 486 { expanded_italic_100, expanded_italic_100 }, 487 { expanded_italic_900, expanded_italic_100 }, 488 }, 489 }, 490 491 { 492 { expanded_normal_900,expanded_italic_900 }, 493 { 494 { condensed_normal_100, expanded_normal_900 }, 495 { condensed_normal_900, expanded_normal_900 }, 496 { condensed_italic_100, expanded_italic_900 }, 497 { condensed_italic_900, expanded_italic_900 }, 498 { expanded_normal_100, expanded_normal_900 }, 499 { expanded_normal_900, expanded_normal_900 }, 500 { expanded_italic_100, expanded_italic_900 }, 501 { expanded_italic_900, expanded_italic_900 }, 502 }, 503 }, 504 505 { 506 { expanded_normal_100,expanded_normal_900 }, 507 { 508 { condensed_normal_100, expanded_normal_100 }, 509 { condensed_normal_900, expanded_normal_900 }, 510 { condensed_italic_100, expanded_normal_100 }, 511 { condensed_italic_900, expanded_normal_900 }, 512 { expanded_normal_100, expanded_normal_100 }, 513 { expanded_normal_900, expanded_normal_900 }, 514 { expanded_italic_100, expanded_normal_100 }, 515 { expanded_italic_900, expanded_normal_900 }, 516 }, 517 }, 518 519 { 520 { expanded_normal_100 }, 521 { 522 { condensed_normal_100, expanded_normal_100 }, 523 { condensed_normal_900, expanded_normal_100 }, 524 { condensed_italic_100, expanded_normal_100 }, 525 { condensed_italic_900, expanded_normal_100 }, 526 { expanded_normal_100, expanded_normal_100 }, 527 { expanded_normal_900, expanded_normal_100 }, 528 { expanded_italic_100, expanded_normal_100 }, 529 { expanded_italic_900, expanded_normal_100 }, 530 }, 531 }, 532 533 { 534 { expanded_normal_900 }, 535 { 536 { condensed_normal_100, expanded_normal_900 }, 537 { condensed_normal_900, expanded_normal_900 }, 538 { condensed_italic_100, expanded_normal_900 }, 539 { condensed_italic_900, expanded_normal_900 }, 540 { expanded_normal_100, expanded_normal_900 }, 541 { expanded_normal_900, expanded_normal_900 }, 542 { expanded_italic_100, expanded_normal_900 }, 543 { expanded_italic_900, expanded_normal_900 }, 544 }, 545 }, 546 547 { 548 { expanded_italic_100,expanded_italic_900 }, 549 { 550 { condensed_normal_100, expanded_italic_100 }, 551 { condensed_normal_900, expanded_italic_900 }, 552 { condensed_italic_100, expanded_italic_100 }, 553 { condensed_italic_900, expanded_italic_900 }, 554 { expanded_normal_100, expanded_italic_100 }, 555 { expanded_normal_900, expanded_italic_900 }, 556 { expanded_italic_100, expanded_italic_100 }, 557 { expanded_italic_900, expanded_italic_900 }, 558 }, 559 }, 560 561 { 562 { expanded_italic_100 }, 563 { 564 { condensed_normal_100, expanded_italic_100 }, 565 { condensed_normal_900, expanded_italic_100 }, 566 { condensed_italic_100, expanded_italic_100 }, 567 { condensed_italic_900, expanded_italic_100 }, 568 { expanded_normal_100, expanded_italic_100 }, 569 { expanded_normal_900, expanded_italic_100 }, 570 { expanded_italic_100, expanded_italic_100 }, 571 { expanded_italic_900, expanded_italic_100 }, 572 }, 573 }, 574 575 { 576 { expanded_italic_900 }, 577 { 578 { condensed_normal_100, expanded_italic_900 }, 579 { condensed_normal_900, expanded_italic_900 }, 580 { condensed_italic_100, expanded_italic_900 }, 581 { condensed_italic_900, expanded_italic_900 }, 582 { expanded_normal_100, expanded_italic_900 }, 583 { expanded_normal_900, expanded_italic_900 }, 584 { expanded_italic_100, expanded_italic_900 }, 585 { expanded_italic_900, expanded_italic_900 }, 586 }, 587 }, 588 589 { 590 { normal_normal_100, normal_normal_900 }, 591 { 592 { normal_normal_300, normal_normal_100 }, 593 { normal_normal_400, normal_normal_100 }, 594 { normal_normal_500, normal_normal_100 }, 595 { normal_normal_600, normal_normal_900 }, 596 }, 597 }, 598 599 { 600 { normal_normal_100, normal_normal_400, normal_normal_900 }, 601 { 602 { normal_normal_300, normal_normal_100 }, 603 { normal_normal_400, normal_normal_400 }, 604 { normal_normal_500, normal_normal_400 }, 605 { normal_normal_600, normal_normal_900 }, 606 }, 607 }, 608 609 { 610 { normal_normal_100, normal_normal_500, normal_normal_900 }, 611 { 612 { normal_normal_300, normal_normal_100 }, 613 { normal_normal_400, normal_normal_500 }, 614 { normal_normal_500, normal_normal_500 }, 615 { normal_normal_600, normal_normal_900 }, 616 }, 617 }, 618 619 { 620 { }, 621 { 622 { normal_normal_300, invalidFontStyle }, 623 { normal_normal_400, invalidFontStyle }, 624 { normal_normal_500, invalidFontStyle }, 625 { normal_normal_600, invalidFontStyle }, 626 }, 627 }, 628 }; 629 630 for (StyleSetTest& test : tests) { 631 for (const StyleSetTest::Case testCase : test.cases) { 632 SkAutoTUnref<SkTypeface> typeface(test.styleSet.matchStyle(testCase.pattern)); 633 if (typeface) { 634 REPORTER_ASSERT(reporter, typeface->fontStyle() == testCase.expectedResult); 635 } else { 636 REPORTER_ASSERT(reporter, invalidFontStyle == testCase.expectedResult); 637 } 638 } 639 } 640} 641 642DEFINE_bool(verboseFontMgr, false, "run verbose fontmgr tests."); 643 644DEF_TEST(FontMgr, reporter) { 645 test_matchStyleCSS3(reporter); 646 test_fontiter(reporter, FLAGS_verboseFontMgr); 647 test_alias_names(reporter); 648 test_font(reporter); 649} 650