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 */
test_alias_names(skiatest::Reporter * reporter)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
test_fontiter(skiatest::Reporter * reporter,bool verbose)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
DEF_TEST(FontMgr,reporter)80 DEF_TEST(FontMgr, reporter) {
81 test_fontiter(reporter, FLAGS_verboseFontMgr);
82 test_alias_names(reporter);
83 }
84