aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/FontNamesTest.cpp
diff options
context:
space:
mode:
authorGravatar bungeman@google.com <bungeman@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-08-06 22:53:04 +0000
committerGravatar bungeman@google.com <bungeman@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-08-06 22:53:04 +0000
commit990d85f02ba6efaf6f3d75262d7ed650edc8afd5 (patch)
treea78ea0deb1c45b661ac1bdd25036cafc35229f9b /tests/FontNamesTest.cpp
parent2273f9b45fb78b0cc7df81f96f74b0c3c0e6cc37 (diff)
Add getFamilyNames to SkTypeface.
Review URL: https://codereview.chromium.org/21716005 git-svn-id: http://skia.googlecode.com/svn/trunk@10589 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tests/FontNamesTest.cpp')
-rw-r--r--tests/FontNamesTest.cpp115
1 files changed, 81 insertions, 34 deletions
diff --git a/tests/FontNamesTest.cpp b/tests/FontNamesTest.cpp
index 3845c3b6c5..18ba35695e 100644
--- a/tests/FontNamesTest.cpp
+++ b/tests/FontNamesTest.cpp
@@ -7,6 +7,8 @@
#include "Test.h"
+#include "SkCommandLineFlags.h"
+#include "SkFontMgr.h"
#include "SkOTTable_name.h"
#include "SkTypeface.h"
@@ -108,40 +110,7 @@ struct FontNamesTest {
},
};
-static void TestFontNames(skiatest::Reporter* reporter) {
- static const char* interestingFont[] = {
- "Arial",
- "Times New Roman",
- "MS PGothic", // Has Japanese name.
- "Wingdings", // Uses 'Symbol' name encoding.
- };
- static const SkFontTableTag nameTag = SkSetFourByteTag('n','a','m','e');
-
- for (size_t i = 0; i < SK_ARRAY_COUNT(interestingFont); ++i) {
- SkAutoTUnref<SkTypeface> typeface(SkTypeface::CreateFromName(interestingFont[i],
- SkTypeface::kNormal));
- if (NULL == typeface.get()) {
- continue;
- }
- size_t nameTableSize = typeface->getTableSize(nameTag);
- if (0 == nameTableSize) {
- continue;
- }
- uint8_t* nameTableData = new uint8_t[nameTableSize];
- SkAutoTDeleteArray<uint8_t> ada(nameTableData);
- size_t copied = typeface->getTableData(nameTag, 0, nameTableSize, nameTableData);
- if (copied != nameTableSize) {
- continue;
- }
-
- SkOTTableName::Iterator iter(*((SkOTTableName*)nameTableData),
- SkOTTableName::Record::NameID::Predefined::FontFamilyName);
- SkOTTableName::Iterator::Record record;
- while (iter.next(record)) {
- //printf("%s <%s>\n", record.name.c_str(), record.language.c_str());
- }
- }
-
+static void test_synthetic(skiatest::Reporter* reporter, bool verbose) {
for (size_t i = 0; i < SK_ARRAY_COUNT(test); ++i) {
SkOTTableName::Iterator iter(*test[i].data, test[i].nameID.predefined.value);
SkOTTableName::Iterator::Record record;
@@ -170,6 +139,84 @@ static void TestFontNames(skiatest::Reporter* reporter) {
}
}
+#define MAX_FAMILIES 1000
+static void test_systemfonts(skiatest::Reporter* reporter, bool verbose) {
+ static const SkFontTableTag nameTag = SkSetFourByteTag('n','a','m','e');
+
+ SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault());
+ int count = SkMin32(fm->countFamilies(), MAX_FAMILIES);
+ for (int i = 0; i < count; ++i) {
+ SkAutoTUnref<SkFontStyleSet> set(fm->createStyleSet(i));
+ for (int j = 0; j < set->count(); ++j) {
+ SkString sname;
+ SkFontStyle fs;
+ set->getStyle(j, &fs, &sname);
+
+ SkAutoTUnref<SkTypeface> typeface(set->createTypeface(j));
+
+ SkString familyName;
+ typeface->getFamilyName(&familyName);
+ if (verbose) {
+ printf("[%s]\n", familyName.c_str());
+ }
+
+ SkAutoTDelete<SkTypeface::LocalizedStrings> familyNamesIter(typeface->getFamilyNames());
+ SkTypeface::LocalizedString familyNameLocalized;
+ while (familyNamesIter->next(&familyNameLocalized)) {
+ if (verbose) {
+ printf("(%s) <%s>\n", familyNameLocalized.fString.c_str(),
+ familyNameLocalized.fLanguage.c_str());
+ }
+ }
+
+ size_t nameTableSize = typeface->getTableSize(nameTag);
+ if (0 == nameTableSize) {
+ continue;
+ }
+ SkAutoTMalloc<uint8_t> nameTableData(nameTableSize);
+ size_t copied = typeface->getTableData(nameTag, 0, nameTableSize, nameTableData.get());
+ if (copied != nameTableSize) {
+ continue;
+ }
+
+ SkOTTableName::Iterator::Record record;
+ SkOTTableName::Iterator familyNameIter(*((SkOTTableName*)nameTableData.get()),
+ SkOTTableName::Record::NameID::Predefined::FontFamilyName);
+ while (familyNameIter.next(record)) {
+ REPORTER_ASSERT_MESSAGE(reporter,
+ SkOTTableName::Record::NameID::Predefined::FontFamilyName == record.type,
+ "Requested family name, got something else."
+ );
+ if (verbose) {
+ printf("{%s} <%s>\n", record.name.c_str(), record.language.c_str());
+ }
+ }
+
+ SkOTTableName::Iterator styleNameIter(*((SkOTTableName*)nameTableData.get()),
+ SkOTTableName::Record::NameID::Predefined::FontSubfamilyName);
+ while (styleNameIter.next(record)) {
+ REPORTER_ASSERT_MESSAGE(reporter,
+ SkOTTableName::Record::NameID::Predefined::FontSubfamilyName == record.type,
+ "Requested subfamily name, got something else."
+ );
+ if (verbose) {
+ printf("{{%s}} <%s>\n", record.name.c_str(), record.language.c_str());
+ }
+ }
+
+ if (verbose) {
+ printf("\n");
+ }
+ }
+ }
+}
+
+DEFINE_bool(verboseFontNames, false, "verbose FontNames test.");
+
+static void TestFontNames(skiatest::Reporter* reporter) {
+ test_synthetic(reporter, FLAGS_verboseFontNames);
+ test_systemfonts(reporter, FLAGS_verboseFontNames);
+}
#include "TestClassDef.h"
DEFINE_TESTCLASS("FontNames", FontNamesTestClass, TestFontNames)