17839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger/* 27839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * Copyright 2013 Google Inc. 37839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * 47839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * Use of this source code is governed by a BSD-style license that can be 57839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * found in the LICENSE file. 67839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger */ 77839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 87839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#include "Test.h" 97839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 107839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#include "SkCommandLineFlags.h" 117839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#include "SkFontMgr.h" 127839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#include "SkTypeface.h" 137839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 147a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger/* 157a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger * If the font backend is going to "alias" some font names to other fonts 167a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger * (e.g. sans -> Arial) then we want to at least get the same typeface back 177a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger * if we request the alias name multiple times. 187a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger */ 197a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenbergerstatic void test_badnames(skiatest::Reporter* reporter) { 207a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger const char* inName = "sans"; 217a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger SkAutoTUnref<SkTypeface> first(SkTypeface::CreateFromName(inName, SkTypeface::kNormal)); 227a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger 237a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger SkString name; 247a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger for (int i = 0; i < 10; ++i) { 257a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger SkAutoTUnref<SkTypeface> face(SkTypeface::CreateFromName(inName, SkTypeface::kNormal)); 267a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger#if 0 277a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger face->getFamilyName(&name); 287a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger printf("request %s, received %s, first id %x received %x\n", 297a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger inName, name.c_str(), first->uniqueID(), face->uniqueID()); 307a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger#endif 317a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger REPORTER_ASSERT(reporter, first->uniqueID() == face->uniqueID()); 327a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger } 337a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger} 347a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger 357839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerstatic void test_fontiter(skiatest::Reporter* reporter, bool verbose) { 367839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault()); 377839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger int count = fm->countFamilies(); 387839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 397839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger for (int i = 0; i < count; ++i) { 407839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkString fname; 417839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fm->getFamilyName(i, &fname); 427839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger REPORTER_ASSERT(reporter, fname.size() > 0); 437839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 447839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkAutoTUnref<SkFontStyleSet> fnset(fm->matchFamily(fname.c_str())); 457839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkAutoTUnref<SkFontStyleSet> set(fm->createStyleSet(i)); 467839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger REPORTER_ASSERT(reporter, fnset->count() == set->count()); 477839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 487839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger if (verbose) { 497839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkDebugf("[%2d] %s\n", i, fname.c_str()); 507839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 517839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 527839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger for (int j = 0; j < set->count(); ++j) { 537839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkString sname; 547839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkFontStyle fs; 557839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger set->getStyle(j, &fs, &sname); 567839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger// REPORTER_ASSERT(reporter, sname.size() > 0); 577839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 587839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkAutoTUnref<SkTypeface> face(set->createTypeface(j)); 597839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger// REPORTER_ASSERT(reporter, face.get()); 607839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 617839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger if (verbose) { 627839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkDebugf("\t[%d] %s [%3d %d %d]\n", j, sname.c_str(), 637839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fs.weight(), fs.width(), fs.isItalic()); 647839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 657839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 667839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 677839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger} 687839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 697839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek SollenbergerDEFINE_bool(verboseFontMgr, false, "run verbose fontmgr tests."); 707839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 717839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerstatic void TestFontMgr(skiatest::Reporter* reporter) { 727839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger test_fontiter(reporter, FLAGS_verboseFontMgr); 737a4d6a99e99d8be9763fe9f00dca80a67f4ebcefDerek Sollenberger test_badnames(reporter); 747839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger} 757839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 767839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#include "TestClassDef.h" 777839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek SollenbergerDEFINE_TESTCLASS("FontMgr", FontMgrClass, TestFontMgr) 78