| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2012 Google Inc. | 2  * Copyright 2012 Google Inc. | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #include "Test.h" | 8 #include "Test.h" | 
| 9 #include "SkPaint.h" | 9 #include "SkPaint.h" | 
| 10 #include "SkFontStream.h" | 10 #include "SkFontStream.h" | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 22 static const struct TagSize { | 22 static const struct TagSize { | 
| 23     SkFontTableTag  fTag; | 23     SkFontTableTag  fTag; | 
| 24     size_t          fSize; | 24     size_t          fSize; | 
| 25 } gKnownTableSizes[] = { | 25 } gKnownTableSizes[] = { | 
| 26     {   kFontTableTag_head,         54 }, | 26     {   kFontTableTag_head,         54 }, | 
| 27     {   kFontTableTag_hhea,         36 }, | 27     {   kFontTableTag_hhea,         36 }, | 
| 28     {   kFontTableTag_maxp,         32 }, | 28     {   kFontTableTag_maxp,         32 }, | 
| 29 }; | 29 }; | 
| 30 | 30 | 
| 31 // Test that getUnitsPerEm() agrees with a direct lookup in the 'head' table | 31 // Test that getUnitsPerEm() agrees with a direct lookup in the 'head' table | 
| 32 // (if that table is available. | 32 // (if that table is available). | 
| 33 static void test_unitsPerEm(skiatest::Reporter* reporter, SkTypeface* face) { | 33 static void test_unitsPerEm(skiatest::Reporter* reporter, SkTypeface* face) { | 
| 34     int nativeUPEM = face->getUnitsPerEm();; | 34     int nativeUPEM = face->getUnitsPerEm(); | 
| 35 | 35 | 
| 36     int tableUPEM = -1; | 36     int tableUPEM = -1; | 
| 37     size_t size = face->getTableSize(kFontTableTag_head); | 37     size_t size = face->getTableSize(kFontTableTag_head); | 
| 38     if (size) { | 38     if (size) { | 
| 39         SkAutoMalloc storage(size); |  | 
| 40         char* ptr = (char*)storage.get(); |  | 
| 41         face->getTableData(kFontTableTag_head, 0, size, ptr); |  | 
| 42         // unitsPerEm is at offset 18 into the 'head' table. | 39         // unitsPerEm is at offset 18 into the 'head' table. | 
| 43         tableUPEM = SkEndian_SwapBE16(*(uint16_t*)&ptr[18]); | 40         uint16_t rawUPEM; | 
|  | 41         face->getTableData(kFontTableTag_head, 18, sizeof(rawUPEM), &rawUPEM); | 
|  | 42         tableUPEM = SkEndian_SwapBE16(rawUPEM); | 
| 44     } | 43     } | 
| 45 //    SkDebugf("--- typeface returned %d upem [%X]\n", nativeUPEM, face->uniqueI
     D()); |  | 
| 46 | 44 | 
| 47     if (tableUPEM >= 0) { | 45     if (tableUPEM >= 0) { | 
| 48         REPORTER_ASSERT(reporter, tableUPEM == nativeUPEM); | 46         REPORTER_ASSERT(reporter, tableUPEM == nativeUPEM); | 
| 49     } else { | 47     } else { | 
| 50         // not sure this is a bug, but lets report it for now as info. | 48         // not sure this is a bug, but lets report it for now as info. | 
| 51         SkDebugf("--- typeface returned 0 upem [%X]\n", face->uniqueID()); | 49         SkDebugf("--- typeface returned 0 upem [%X]\n", face->uniqueID()); | 
| 52     } | 50     } | 
| 53 } | 51 } | 
| 54 | 52 | 
|  | 53 // Test that countGlyphs() agrees with a direct lookup in the 'maxp' table | 
|  | 54 // (if that table is available). | 
|  | 55 static void test_countGlyphs(skiatest::Reporter* reporter, SkTypeface* face) { | 
|  | 56     int nativeGlyphs = face->countGlyphs(); | 
|  | 57 | 
|  | 58     int tableGlyphs = -1; | 
|  | 59     size_t size = face->getTableSize(kFontTableTag_maxp); | 
|  | 60     if (size) { | 
|  | 61         // glyphs is at offset 4 into the 'maxp' table. | 
|  | 62         uint16_t rawGlyphs; | 
|  | 63         face->getTableData(kFontTableTag_maxp, 4, sizeof(rawGlyphs), &rawGlyphs)
     ; | 
|  | 64         tableGlyphs = SkEndian_SwapBE16(rawGlyphs); | 
|  | 65     } | 
|  | 66 | 
|  | 67     if (tableGlyphs >= 0) { | 
|  | 68         REPORTER_ASSERT(reporter, tableGlyphs == nativeGlyphs); | 
|  | 69     } else { | 
|  | 70         // not sure this is a bug, but lets report it for now as info. | 
|  | 71         SkDebugf("--- typeface returned 0 glyphs [%X]\n", face->uniqueID()); | 
|  | 72     } | 
|  | 73 } | 
|  | 74 | 
| 55 static void test_fontstream(skiatest::Reporter* reporter, | 75 static void test_fontstream(skiatest::Reporter* reporter, | 
| 56                             SkStream* stream, int ttcIndex) { | 76                             SkStream* stream, int ttcIndex) { | 
| 57     int n = SkFontStream::GetTableTags(stream, ttcIndex, NULL); | 77     int n = SkFontStream::GetTableTags(stream, ttcIndex, NULL); | 
| 58     SkAutoTArray<SkFontTableTag> array(n); | 78     SkAutoTArray<SkFontTableTag> array(n); | 
| 59 | 79 | 
| 60     int n2 = SkFontStream::GetTableTags(stream, ttcIndex, array.get()); | 80     int n2 = SkFontStream::GetTableTags(stream, ttcIndex, array.get()); | 
| 61     REPORTER_ASSERT(reporter, n == n2); | 81     REPORTER_ASSERT(reporter, n == n2); | 
| 62 | 82 | 
| 63     for (int i = 0; i < n; ++i) { | 83     for (int i = 0; i < n; ++i) { | 
| 64 #ifdef DUMP_TTC_TABLES | 84 #ifdef DUMP_TTC_TABLES | 
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 150 | 170 | 
| 151     for (size_t i = 0; i < SK_ARRAY_COUNT(gNames); ++i) { | 171     for (size_t i = 0; i < SK_ARRAY_COUNT(gNames); ++i) { | 
| 152         SkTypeface* face = SkTypeface::CreateFromName(gNames[i], | 172         SkTypeface* face = SkTypeface::CreateFromName(gNames[i], | 
| 153                                                       SkTypeface::kNormal); | 173                                                       SkTypeface::kNormal); | 
| 154         if (face) { | 174         if (face) { | 
| 155 #ifdef DUMP_TABLES | 175 #ifdef DUMP_TABLES | 
| 156             SkDebugf("%s\n", gNames[i]); | 176             SkDebugf("%s\n", gNames[i]); | 
| 157 #endif | 177 #endif | 
| 158             test_tables(reporter, face); | 178             test_tables(reporter, face); | 
| 159             test_unitsPerEm(reporter, face); | 179             test_unitsPerEm(reporter, face); | 
|  | 180             test_countGlyphs(reporter, face); | 
| 160             face->unref(); | 181             face->unref(); | 
| 161         } | 182         } | 
| 162     } | 183     } | 
| 163 } | 184 } | 
| 164 | 185 | 
| 165 /* | 186 /* | 
| 166  * Verifies that the advance values returned by generateAdvance and | 187  * Verifies that the advance values returned by generateAdvance and | 
| 167  * generateMetrics match. | 188  * generateMetrics match. | 
| 168  */ | 189  */ | 
| 169 static void test_advances(skiatest::Reporter* reporter) { | 190 static void test_advances(skiatest::Reporter* reporter) { | 
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 236 static void TestFontHost(skiatest::Reporter* reporter) { | 257 static void TestFontHost(skiatest::Reporter* reporter) { | 
| 237     test_tables(reporter); | 258     test_tables(reporter); | 
| 238     test_fontstream(reporter); | 259     test_fontstream(reporter); | 
| 239     test_advances(reporter); | 260     test_advances(reporter); | 
| 240 } | 261 } | 
| 241 | 262 | 
| 242 // need tests for SkStrSearch | 263 // need tests for SkStrSearch | 
| 243 | 264 | 
| 244 #include "TestClassDef.h" | 265 #include "TestClassDef.h" | 
| 245 DEFINE_TESTCLASS("FontHost", FontHostTestClass, TestFontHost) | 266 DEFINE_TESTCLASS("FontHost", FontHostTestClass, TestFontHost) | 
| OLD | NEW | 
|---|