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 "Test.h" 9 #include "TestClassDef.h" 10 #include "SkCommandLineFlags.h" 11 #include "SkFontMgr.h" 12 #include "SkTypeface.h" 13 14 /* 15 * If the font backend is going to "alias" some font names to other fonts 16 * (e.g. sans -> Arial) then we want to at least get the same typeface back 17 * if we request the alias name multiple times. 18 */ 19 static void test_alias_names(skiatest::Reporter* reporter) { 20 const char* inNames[] = { 21 "sans", "sans-serif", "serif", "monospace", "times", "helvetica" 22 }; 23 24 for (size_t i = 0; i < SK_ARRAY_COUNT(inNames); ++i) { 25 SkAutoTUnref<SkTypeface> first(SkTypeface::CreateFromName(inNames[i], 26 SkTypeface::kNormal)); 27 if (NULL == first.get()) { 28 continue; 29 } 30 for (int j = 0; j < 10; ++j) { 31 SkAutoTUnref<SkTypeface> face(SkTypeface::CreateFromName(inNames[i], 32 SkTypeface::kNormal)); 33 #if 0 34 SkString name; 35 face->getFamilyName(&name); 36 printf("request %s, received %s, first id %x received %x\n", 37 inNames[i], name.c_str(), first->uniqueID(), face->uniqueID()); 38 #endif 39 REPORTER_ASSERT(reporter, first->uniqueID() == face->uniqueID()); 40 } 41 } 42 } 43 44 static void test_fontiter(skiatest::Reporter* reporter, bool verbose) { 45 SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault()); 46 int count = fm->countFamilies(); 47 48 for (int i = 0; i < count; ++i) { 49 SkString fname; 50 fm->getFamilyName(i, &fname); 51 REPORTER_ASSERT(reporter, fname.size() > 0); 52 53 SkAutoTUnref<SkFontStyleSet> fnset(fm->matchFamily(fname.c_str())); 54 SkAutoTUnref<SkFontStyleSet> set(fm->createStyleSet(i)); 55 REPORTER_ASSERT(reporter, fnset->count() == set->count()); 56 57 if (verbose) { 58 SkDebugf("[%2d] %s\n", i, fname.c_str()); 59 } 60 61 for (int j = 0; j < set->count(); ++j) { 62 SkString sname; 63 SkFontStyle fs; 64 set->getStyle(j, &fs, &sname); 65 // REPORTER_ASSERT(reporter, sname.size() > 0); 66 67 SkAutoTUnref<SkTypeface> face(set->createTypeface(j)); 68 // REPORTER_ASSERT(reporter, face.get()); 69 70 if (verbose) { 71 SkDebugf("\t[%d] %s [%3d %d %d]\n", j, sname.c_str(), 72 fs.weight(), fs.width(), fs.isItalic()); 73 } 74 } 75 } 76 } 77 78 DEFINE_bool(verboseFontMgr, false, "run verbose fontmgr tests."); 79 80 DEF_TEST(FontMgr, reporter) { 81 test_fontiter(reporter, FLAGS_verboseFontMgr); 82 test_alias_names(reporter); 83 } 84