1 /* 2 * Copyright 2014 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 "Resources.h" 9 #include "SkFontConfigParser_android.h" 10 #include "Test.h" 11 12 int CountFallbacks(SkTDArray<FontFamily*> fontFamilies) { 13 int countOfFallbackFonts = 0; 14 for (int i = 0; i < fontFamilies.count(); i++) { 15 if (fontFamilies[i]->fIsFallbackFont) { 16 countOfFallbackFonts++; 17 } 18 } 19 return countOfFallbackFonts; 20 } 21 22 void ValidateLoadedFonts(SkTDArray<FontFamily*> fontFamilies, 23 skiatest::Reporter* reporter) { 24 REPORTER_ASSERT(reporter, fontFamilies[0]->fNames.count() == 5); 25 REPORTER_ASSERT(reporter, !strcmp(fontFamilies[0]->fNames[0].c_str(), "sans-serif")); 26 REPORTER_ASSERT(reporter, 27 !strcmp(fontFamilies[0]->fFonts[0].fFileName.c_str(), 28 "Roboto-Regular.ttf")); 29 REPORTER_ASSERT(reporter, !fontFamilies[0]->fIsFallbackFont); 30 } 31 32 void DumpLoadedFonts(SkTDArray<FontFamily*> fontFamilies) { 33 #if SK_DEBUG_FONTS 34 for (int i = 0; i < fontFamilies.count(); ++i) { 35 SkDebugf("Family %d:\n", i); 36 switch(fontFamilies[i]->fVariant) { 37 case SkPaintOptionsAndroid::kElegant_Variant: SkDebugf(" elegant"); break; 38 case SkPaintOptionsAndroid::kCompact_Variant: SkDebugf(" compact"); break; 39 default: break; 40 } 41 if (!fontFamilies[i]->fLanguage.getTag().isEmpty()) { 42 SkDebugf(" language: %s", fontFamilies[i]->fLanguage.getTag().c_str()); 43 } 44 for (int j = 0; j < fontFamilies[i]->fNames.count(); ++j) { 45 SkDebugf(" name %s\n", fontFamilies[i]->fNames[j].c_str()); 46 } 47 for (int j = 0; j < fontFamilies[i]->fFonts.count(); ++j) { 48 const FontFileInfo& ffi = fontFamilies[i]->fFonts[j]; 49 SkDebugf(" file (%d %s %d) %s\n", 50 ffi.fWeight, 51 ffi.fPaintOptions.getLanguage().getTag().isEmpty() ? "" : 52 ffi.fPaintOptions.getLanguage().getTag().c_str(), 53 ffi.fPaintOptions.getFontVariant(), 54 ffi.fFileName.c_str()); 55 } 56 } 57 #endif // SK_DEBUG_FONTS 58 } 59 60 DEF_TEST(FontConfigParserAndroid, reporter) { 61 62 bool resourcesMissing = false; 63 64 SkTDArray<FontFamily*> preV17FontFamilies; 65 SkFontConfigParser::GetTestFontFamilies(preV17FontFamilies, 66 GetResourcePath("android_fonts/pre_v17/system_fonts.xml").c_str(), 67 GetResourcePath("android_fonts/pre_v17/fallback_fonts.xml").c_str()); 68 69 if (preV17FontFamilies.count() > 0) { 70 REPORTER_ASSERT(reporter, preV17FontFamilies.count() == 14); 71 REPORTER_ASSERT(reporter, CountFallbacks(preV17FontFamilies) == 10); 72 73 DumpLoadedFonts(preV17FontFamilies); 74 ValidateLoadedFonts(preV17FontFamilies, reporter); 75 } else { 76 resourcesMissing = true; 77 } 78 79 80 SkTDArray<FontFamily*> v17FontFamilies; 81 SkFontConfigParser::GetTestFontFamilies(v17FontFamilies, 82 GetResourcePath("android_fonts/v17/system_fonts.xml").c_str(), 83 GetResourcePath("android_fonts/v17/fallback_fonts.xml").c_str()); 84 85 if (v17FontFamilies.count() > 0) { 86 REPORTER_ASSERT(reporter, v17FontFamilies.count() == 41); 87 REPORTER_ASSERT(reporter, CountFallbacks(v17FontFamilies) == 31); 88 89 DumpLoadedFonts(v17FontFamilies); 90 ValidateLoadedFonts(v17FontFamilies, reporter); 91 } else { 92 resourcesMissing = true; 93 } 94 95 96 SkTDArray<FontFamily*> v22FontFamilies; 97 SkFontConfigParser::GetTestFontFamilies(v22FontFamilies, 98 GetResourcePath("android_fonts/v22/fonts.xml").c_str(), 99 NULL); 100 101 if (v22FontFamilies.count() > 0) { 102 REPORTER_ASSERT(reporter, v22FontFamilies.count() == 53); 103 REPORTER_ASSERT(reporter, CountFallbacks(v22FontFamilies) == 42); 104 105 DumpLoadedFonts(v22FontFamilies); 106 ValidateLoadedFonts(v22FontFamilies, reporter); 107 } else { 108 resourcesMissing = true; 109 } 110 111 if (resourcesMissing) { 112 SkDebugf("---- Resource files missing for FontConfigParser test\n"); 113 } 114 } 115 116