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