Home | History | Annotate | Download | only in tests
      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