48faf7bd87
The Serialization_Typeface and FontMgr_AliasNames tests sometimes fail on macOS 10.13 and 10.15.7 bots. This is likely fixed on macOS 11, however in the interest of investigation there should be some attempt at discovering if the retrieved fonts are actually different and which ones were retrieved. Improve the reports with additional information about the typefaces in question. Change-Id: I0e4354eacf91be1ae98838569e4da9f964dc2ac8 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/404338 Commit-Queue: Ben Wagner <bungeman@google.com> Reviewed-by: Greg Daniel <egdaniel@google.com>
749 lines
32 KiB
C++
749 lines
32 KiB
C++
/*
|
|
* Copyright 2013 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#include "include/core/SkFont.h"
|
|
#include "include/core/SkFontMgr.h"
|
|
#include "include/core/SkPaint.h"
|
|
#include "include/core/SkStream.h"
|
|
#include "include/core/SkTypeface.h"
|
|
#include "src/core/SkAdvancedTypefaceMetrics.h"
|
|
#include "src/core/SkScalerContext.h"
|
|
#include "tests/Test.h"
|
|
#include "tools/flags/CommandLineFlags.h"
|
|
|
|
#include <initializer_list>
|
|
#include <limits>
|
|
#include <vector>
|
|
|
|
DEFINE_bool(verboseFontMgr, false, "FontMgr will be very verbose.");
|
|
|
|
DEF_TEST(FontMgr_Font, reporter) {
|
|
SkFont font(nullptr, 24);
|
|
|
|
//REPORTER_ASSERT(reporter, SkTypeface::GetDefaultTypeface() == font.getTypeface());
|
|
REPORTER_ASSERT(reporter, 24 == font.getSize());
|
|
REPORTER_ASSERT(reporter, 1 == font.getScaleX());
|
|
REPORTER_ASSERT(reporter, 0 == font.getSkewX());
|
|
|
|
uint16_t glyphs[5];
|
|
sk_bzero(glyphs, sizeof(glyphs));
|
|
|
|
// Check that no glyphs are copied with insufficient storage.
|
|
int count = font.textToGlyphs("Hello", 5, SkTextEncoding::kUTF8, glyphs, 2);
|
|
REPORTER_ASSERT(reporter, 5 == count);
|
|
for (const auto glyph : glyphs) { REPORTER_ASSERT(reporter, glyph == 0); }
|
|
|
|
SkAssertResult(font.textToGlyphs("Hello", 5, SkTextEncoding::kUTF8, glyphs,
|
|
SK_ARRAY_COUNT(glyphs)) == count);
|
|
|
|
for (int i = 0; i < count; ++i) {
|
|
REPORTER_ASSERT(reporter, 0 != glyphs[i]);
|
|
}
|
|
REPORTER_ASSERT(reporter, glyphs[0] != glyphs[1]); // 'h' != 'e'
|
|
REPORTER_ASSERT(reporter, glyphs[2] == glyphs[3]); // 'l' == 'l'
|
|
|
|
const SkFont newFont(font.makeWithSize(36));
|
|
REPORTER_ASSERT(reporter, font.getTypefaceOrDefault() == newFont.getTypefaceOrDefault());
|
|
REPORTER_ASSERT(reporter, 36 == newFont.getSize()); // double check we haven't changed
|
|
REPORTER_ASSERT(reporter, 24 == font.getSize()); // double check we haven't changed
|
|
}
|
|
|
|
/*
|
|
* If the font backend is going to "alias" some font names to other fonts
|
|
* (e.g. sans -> Arial) then we want to at least get the same typeface back
|
|
* if we request the alias name multiple times.
|
|
*/
|
|
DEF_TEST(FontMgr_AliasNames, reporter) {
|
|
const char* inNames[] = {
|
|
"sans", "sans-serif", "serif", "monospace", "times", "helvetica"
|
|
};
|
|
|
|
for (size_t i = 0; i < SK_ARRAY_COUNT(inNames); ++i) {
|
|
sk_sp<SkTypeface> first(SkTypeface::MakeFromName(inNames[i], SkFontStyle()));
|
|
if (nullptr == first.get()) {
|
|
continue;
|
|
}
|
|
SkString firstName;
|
|
first->getFamilyName(&firstName);
|
|
for (int j = 0; j < 10; ++j) {
|
|
sk_sp<SkTypeface> face(SkTypeface::MakeFromName(inNames[i], SkFontStyle()));
|
|
|
|
SkString name;
|
|
face->getFamilyName(&name);
|
|
REPORTER_ASSERT(reporter, first->uniqueID() == face->uniqueID(),
|
|
"Request \"%s\" First Name: \"%s\" Id: %x Received Name \"%s\" Id %x",
|
|
inNames[i], firstName.c_str(), first->uniqueID(), name.c_str(), face->uniqueID());
|
|
}
|
|
}
|
|
}
|
|
|
|
DEF_TEST(FontMgr_Iter, reporter) {
|
|
sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
|
|
int count = fm->countFamilies();
|
|
|
|
for (int i = 0; i < count; ++i) {
|
|
SkString fname;
|
|
fm->getFamilyName(i, &fname);
|
|
|
|
sk_sp<SkFontStyleSet> fnset(fm->matchFamily(fname.c_str()));
|
|
sk_sp<SkFontStyleSet> set(fm->createStyleSet(i));
|
|
REPORTER_ASSERT(reporter, fnset->count() == set->count());
|
|
|
|
if (FLAGS_verboseFontMgr) {
|
|
SkDebugf("[%2d] %s\n", i, fname.c_str());
|
|
}
|
|
|
|
for (int j = 0; j < set->count(); ++j) {
|
|
SkString sname;
|
|
SkFontStyle fs;
|
|
set->getStyle(j, &fs, &sname);
|
|
// REPORTER_ASSERT(reporter, sname.size() > 0);
|
|
|
|
sk_sp<SkTypeface> face(set->createTypeface(j));
|
|
// REPORTER_ASSERT(reporter, face.get());
|
|
|
|
if (FLAGS_verboseFontMgr) {
|
|
SkDebugf("\t[%d] %s [%3d %d %d]\n", j, sname.c_str(),
|
|
fs.weight(), fs.width(), fs.slant());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
DEF_TEST(FontMgr_Match, reporter) {
|
|
sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
|
|
sk_sp<SkFontStyleSet> styleSet(fm->matchFamily(nullptr));
|
|
REPORTER_ASSERT(reporter, styleSet);
|
|
}
|
|
|
|
DEF_TEST(FontMgr_MatchStyleCSS3, reporter) {
|
|
static const SkFontStyle invalidFontStyle(101, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
|
|
|
|
class TestTypeface : public SkTypeface {
|
|
public:
|
|
TestTypeface(const SkFontStyle& fontStyle) : SkTypeface(fontStyle, false){}
|
|
protected:
|
|
std::unique_ptr<SkStreamAsset> onOpenStream(int* ttcIndex) const override { return nullptr; }
|
|
sk_sp<SkTypeface> onMakeClone(const SkFontArguments& args) const override {
|
|
return sk_ref_sp(this);
|
|
}
|
|
std::unique_ptr<SkScalerContext> onCreateScalerContext(
|
|
const SkScalerContextEffects& effects, const SkDescriptor* desc) const override
|
|
{
|
|
return SkScalerContext::MakeEmpty(
|
|
sk_ref_sp(const_cast<TestTypeface*>(this)), effects, desc);
|
|
}
|
|
void onFilterRec(SkScalerContextRec*) const override { }
|
|
std::unique_ptr<SkAdvancedTypefaceMetrics> onGetAdvancedMetrics() const override {
|
|
return nullptr;
|
|
}
|
|
void onGetFontDescriptor(SkFontDescriptor*, bool*) const override { }
|
|
void onCharsToGlyphs(const SkUnichar* chars, int count, SkGlyphID glyphs[]) const override {
|
|
sk_bzero(glyphs, count * sizeof(glyphs[0]));
|
|
}
|
|
int onCountGlyphs() const override { return 0; }
|
|
void getPostScriptGlyphNames(SkString*) const override {}
|
|
void getGlyphToUnicodeMap(SkUnichar*) const override {}
|
|
int onGetUPEM() const override { return 0; }
|
|
class EmptyLocalizedStrings : public SkTypeface::LocalizedStrings {
|
|
public:
|
|
bool next(SkTypeface::LocalizedString*) override { return false; }
|
|
};
|
|
void onGetFamilyName(SkString* familyName) const override {
|
|
familyName->reset();
|
|
}
|
|
bool onGetPostScriptName(SkString*) const override { return false; }
|
|
SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override {
|
|
return new EmptyLocalizedStrings;
|
|
}
|
|
int onGetVariationDesignPosition(
|
|
SkFontArguments::VariationPosition::Coordinate coordinates[],
|
|
int coordinateCount) const override
|
|
{
|
|
return 0;
|
|
}
|
|
int onGetVariationDesignParameters(SkFontParameters::Variation::Axis parameters[],
|
|
int parameterCount) const override
|
|
{
|
|
return -1;
|
|
}
|
|
int onGetTableTags(SkFontTableTag tags[]) const override { return 0; }
|
|
size_t onGetTableData(SkFontTableTag, size_t, size_t, void*) const override {
|
|
return 0;
|
|
}
|
|
};
|
|
|
|
class TestFontStyleSet : public SkFontStyleSet {
|
|
public:
|
|
TestFontStyleSet(std::initializer_list<SkFontStyle> styles) : fStyles(styles) {}
|
|
int count() override { return static_cast<int>(fStyles.size()); }
|
|
void getStyle(int index, SkFontStyle* style, SkString*) override {
|
|
if (style) {
|
|
*style = fStyles[index];
|
|
}
|
|
}
|
|
SkTypeface* createTypeface(int index) override {
|
|
if (index < 0 || this->count() <= index) {
|
|
return new TestTypeface(invalidFontStyle);
|
|
}
|
|
return new TestTypeface(fStyles[index]);
|
|
}
|
|
SkTypeface* matchStyle(const SkFontStyle& pattern) override {
|
|
return this->matchStyleCSS3(pattern);
|
|
}
|
|
private:
|
|
std::vector<SkFontStyle> fStyles;
|
|
};
|
|
|
|
SkFontStyle condensed_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
|
|
SkFontStyle condensed_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
|
|
SkFontStyle condensed_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
|
|
SkFontStyle condensed_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
|
|
SkFontStyle condensed_obliqu_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
|
|
SkFontStyle condensed_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
|
|
SkFontStyle expanded_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant);
|
|
SkFontStyle expanded_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant);
|
|
SkFontStyle expanded_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant);
|
|
SkFontStyle expanded_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant);
|
|
SkFontStyle expanded_obliqu_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kOblique_Slant);
|
|
SkFontStyle expanded_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kOblique_Slant);
|
|
|
|
SkFontStyle normal_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
|
|
SkFontStyle normal_normal_300(SkFontStyle::kLight_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
|
|
SkFontStyle normal_normal_400(SkFontStyle::kNormal_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
|
|
SkFontStyle normal_normal_500(SkFontStyle::kMedium_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
|
|
SkFontStyle normal_normal_600(SkFontStyle::kSemiBold_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
|
|
SkFontStyle normal_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
|
|
|
|
struct StyleSetTest {
|
|
TestFontStyleSet styleSet;
|
|
struct Case {
|
|
SkFontStyle pattern;
|
|
SkFontStyle expectedResult;
|
|
};
|
|
std::vector<Case> cases;
|
|
} tests[] = {
|
|
{
|
|
{ normal_normal_500, normal_normal_400 },
|
|
{
|
|
{ normal_normal_400, normal_normal_400 },
|
|
{ normal_normal_500, normal_normal_500 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ normal_normal_500, normal_normal_300 },
|
|
{
|
|
{ normal_normal_300, normal_normal_300 },
|
|
{ normal_normal_400, normal_normal_500 },
|
|
{ normal_normal_500, normal_normal_500 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900,
|
|
expanded_normal_100, expanded_normal_900, expanded_italic_100, expanded_italic_900 },
|
|
{
|
|
{ condensed_normal_100, condensed_normal_100 },
|
|
{ condensed_normal_900, condensed_normal_900 },
|
|
{ condensed_italic_100, condensed_italic_100 },
|
|
{ condensed_italic_900, condensed_italic_900 },
|
|
{ expanded_normal_100, expanded_normal_100 },
|
|
{ expanded_normal_900, expanded_normal_900 },
|
|
{ expanded_italic_100, expanded_italic_100 },
|
|
{ expanded_italic_900, expanded_italic_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_normal_100,condensed_italic_100,expanded_normal_100,expanded_italic_100 },
|
|
{
|
|
{ condensed_normal_100, condensed_normal_100 },
|
|
{ condensed_normal_900, condensed_normal_100 },
|
|
{ condensed_italic_100, condensed_italic_100 },
|
|
{ condensed_italic_900, condensed_italic_100 },
|
|
{ expanded_normal_100, expanded_normal_100 },
|
|
{ expanded_normal_900, expanded_normal_100 },
|
|
{ expanded_italic_100, expanded_italic_100 },
|
|
{ expanded_italic_900, expanded_italic_100 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_normal_900,condensed_italic_900,expanded_normal_900,expanded_italic_900 },
|
|
{
|
|
{ condensed_normal_100, condensed_normal_900 },
|
|
{ condensed_normal_900, condensed_normal_900 },
|
|
{ condensed_italic_100, condensed_italic_900 },
|
|
{ condensed_italic_900, condensed_italic_900 },
|
|
{ expanded_normal_100, expanded_normal_900 },
|
|
{ expanded_normal_900, expanded_normal_900 },
|
|
{ expanded_italic_100, expanded_italic_900 },
|
|
{ expanded_italic_900, expanded_italic_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_normal_100,condensed_normal_900,expanded_normal_100,expanded_normal_900 },
|
|
{
|
|
{ condensed_normal_100, condensed_normal_100 },
|
|
{ condensed_normal_900, condensed_normal_900 },
|
|
{ condensed_italic_100, condensed_normal_100 },
|
|
{ condensed_italic_900, condensed_normal_900 },
|
|
{ expanded_normal_100, expanded_normal_100 },
|
|
{ expanded_normal_900, expanded_normal_900 },
|
|
{ expanded_italic_100, expanded_normal_100 },
|
|
{ expanded_italic_900, expanded_normal_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_normal_100,expanded_normal_100 },
|
|
{
|
|
{ condensed_normal_100, condensed_normal_100 },
|
|
{ condensed_normal_900, condensed_normal_100 },
|
|
{ condensed_italic_100, condensed_normal_100 },
|
|
{ condensed_italic_900, condensed_normal_100 },
|
|
{ expanded_normal_100, expanded_normal_100 },
|
|
{ expanded_normal_900, expanded_normal_100 },
|
|
{ expanded_italic_100, expanded_normal_100 },
|
|
{ expanded_italic_900, expanded_normal_100 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_normal_900,expanded_normal_900 },
|
|
{
|
|
{ condensed_normal_100, condensed_normal_900 },
|
|
{ condensed_normal_900, condensed_normal_900 },
|
|
{ condensed_italic_100, condensed_normal_900 },
|
|
{ condensed_italic_900, condensed_normal_900 },
|
|
{ expanded_normal_100, expanded_normal_900 },
|
|
{ expanded_normal_900, expanded_normal_900 },
|
|
{ expanded_italic_100, expanded_normal_900 },
|
|
{ expanded_italic_900, expanded_normal_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_italic_100,condensed_italic_900,expanded_italic_100,expanded_italic_900 },
|
|
{
|
|
{ condensed_normal_100, condensed_italic_100 },
|
|
{ condensed_normal_900, condensed_italic_900 },
|
|
{ condensed_italic_100, condensed_italic_100 },
|
|
{ condensed_italic_900, condensed_italic_900 },
|
|
{ expanded_normal_100, expanded_italic_100 },
|
|
{ expanded_normal_900, expanded_italic_900 },
|
|
{ expanded_italic_100, expanded_italic_100 },
|
|
{ expanded_italic_900, expanded_italic_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_italic_100,expanded_italic_100 },
|
|
{
|
|
{ condensed_normal_100, condensed_italic_100 },
|
|
{ condensed_normal_900, condensed_italic_100 },
|
|
{ condensed_italic_100, condensed_italic_100 },
|
|
{ condensed_italic_900, condensed_italic_100 },
|
|
{ expanded_normal_100, expanded_italic_100 },
|
|
{ expanded_normal_900, expanded_italic_100 },
|
|
{ expanded_italic_100, expanded_italic_100 },
|
|
{ expanded_italic_900, expanded_italic_100 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_italic_900,expanded_italic_900 },
|
|
{
|
|
{ condensed_normal_100, condensed_italic_900 },
|
|
{ condensed_normal_900, condensed_italic_900 },
|
|
{ condensed_italic_100, condensed_italic_900 },
|
|
{ condensed_italic_900, condensed_italic_900 },
|
|
{ expanded_normal_100, expanded_italic_900 },
|
|
{ expanded_normal_900, expanded_italic_900 },
|
|
{ expanded_italic_100, expanded_italic_900 },
|
|
{ expanded_italic_900, expanded_italic_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900 },
|
|
{
|
|
{ condensed_normal_100, condensed_normal_100 },
|
|
{ condensed_normal_900, condensed_normal_900 },
|
|
{ condensed_italic_100, condensed_italic_100 },
|
|
{ condensed_italic_900, condensed_italic_900 },
|
|
{ expanded_normal_100, condensed_normal_100 },
|
|
{ expanded_normal_900, condensed_normal_900 },
|
|
{ expanded_italic_100, condensed_italic_100 },
|
|
{ expanded_italic_900, condensed_italic_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_normal_100,condensed_italic_100 },
|
|
{
|
|
{ condensed_normal_100, condensed_normal_100 },
|
|
{ condensed_normal_900, condensed_normal_100 },
|
|
{ condensed_italic_100, condensed_italic_100 },
|
|
{ condensed_italic_900, condensed_italic_100 },
|
|
{ expanded_normal_100, condensed_normal_100 },
|
|
{ expanded_normal_900, condensed_normal_100 },
|
|
{ expanded_italic_100, condensed_italic_100 },
|
|
{ expanded_italic_900, condensed_italic_100 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_normal_900,condensed_italic_900 },
|
|
{
|
|
{ condensed_normal_100, condensed_normal_900 },
|
|
{ condensed_normal_900, condensed_normal_900 },
|
|
{ condensed_italic_100, condensed_italic_900 },
|
|
{ condensed_italic_900, condensed_italic_900 },
|
|
{ expanded_normal_100, condensed_normal_900 },
|
|
{ expanded_normal_900, condensed_normal_900 },
|
|
{ expanded_italic_100, condensed_italic_900 },
|
|
{ expanded_italic_900, condensed_italic_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_normal_100,condensed_normal_900 },
|
|
{
|
|
{ condensed_normal_100, condensed_normal_100 },
|
|
{ condensed_normal_900, condensed_normal_900 },
|
|
{ condensed_italic_100, condensed_normal_100 },
|
|
{ condensed_italic_900, condensed_normal_900 },
|
|
{ expanded_normal_100, condensed_normal_100 },
|
|
{ expanded_normal_900, condensed_normal_900 },
|
|
{ expanded_italic_100, condensed_normal_100 },
|
|
{ expanded_italic_900, condensed_normal_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_normal_100 },
|
|
{
|
|
{ condensed_normal_100, condensed_normal_100 },
|
|
{ condensed_normal_900, condensed_normal_100 },
|
|
{ condensed_italic_100, condensed_normal_100 },
|
|
{ condensed_italic_900, condensed_normal_100 },
|
|
{ expanded_normal_100, condensed_normal_100 },
|
|
{ expanded_normal_900, condensed_normal_100 },
|
|
{ expanded_italic_100, condensed_normal_100 },
|
|
{ expanded_italic_900, condensed_normal_100 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_normal_900 },
|
|
{
|
|
{ condensed_normal_100, condensed_normal_900 },
|
|
{ condensed_normal_900, condensed_normal_900 },
|
|
{ condensed_italic_100, condensed_normal_900 },
|
|
{ condensed_italic_900, condensed_normal_900 },
|
|
{ expanded_normal_100, condensed_normal_900 },
|
|
{ expanded_normal_900, condensed_normal_900 },
|
|
{ expanded_italic_100, condensed_normal_900 },
|
|
{ expanded_italic_900, condensed_normal_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_italic_100,condensed_italic_900 },
|
|
{
|
|
{ condensed_normal_100, condensed_italic_100 },
|
|
{ condensed_normal_900, condensed_italic_900 },
|
|
{ condensed_italic_100, condensed_italic_100 },
|
|
{ condensed_italic_900, condensed_italic_900 },
|
|
{ expanded_normal_100, condensed_italic_100 },
|
|
{ expanded_normal_900, condensed_italic_900 },
|
|
{ expanded_italic_100, condensed_italic_100 },
|
|
{ expanded_italic_900, condensed_italic_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_italic_100 },
|
|
{
|
|
{ condensed_normal_100, condensed_italic_100 },
|
|
{ condensed_normal_900, condensed_italic_100 },
|
|
{ condensed_italic_100, condensed_italic_100 },
|
|
{ condensed_italic_900, condensed_italic_100 },
|
|
{ expanded_normal_100, condensed_italic_100 },
|
|
{ expanded_normal_900, condensed_italic_100 },
|
|
{ expanded_italic_100, condensed_italic_100 },
|
|
{ expanded_italic_900, condensed_italic_100 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ condensed_italic_900 },
|
|
{
|
|
{ condensed_normal_100, condensed_italic_900 },
|
|
{ condensed_normal_900, condensed_italic_900 },
|
|
{ condensed_italic_100, condensed_italic_900 },
|
|
{ condensed_italic_900, condensed_italic_900 },
|
|
{ expanded_normal_100, condensed_italic_900 },
|
|
{ expanded_normal_900, condensed_italic_900 },
|
|
{ expanded_italic_100, condensed_italic_900 },
|
|
{ expanded_italic_900, condensed_italic_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ expanded_normal_100,expanded_normal_900,
|
|
expanded_italic_100,expanded_italic_900 },
|
|
{
|
|
{ condensed_normal_100, expanded_normal_100 },
|
|
{ condensed_normal_900, expanded_normal_900 },
|
|
{ condensed_italic_100, expanded_italic_100 },
|
|
{ condensed_italic_900, expanded_italic_900 },
|
|
{ condensed_obliqu_100, expanded_italic_100 },
|
|
{ condensed_obliqu_900, expanded_italic_900 },
|
|
{ expanded_normal_100, expanded_normal_100 },
|
|
{ expanded_normal_900, expanded_normal_900 },
|
|
{ expanded_italic_100, expanded_italic_100 },
|
|
{ expanded_italic_900, expanded_italic_900 },
|
|
{ expanded_obliqu_100, expanded_italic_100 },
|
|
{ expanded_obliqu_900, expanded_italic_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ expanded_normal_100,expanded_italic_100 },
|
|
{
|
|
{ condensed_normal_100, expanded_normal_100 },
|
|
{ condensed_normal_900, expanded_normal_100 },
|
|
{ condensed_italic_100, expanded_italic_100 },
|
|
{ condensed_italic_900, expanded_italic_100 },
|
|
{ expanded_normal_100, expanded_normal_100 },
|
|
{ expanded_normal_900, expanded_normal_100 },
|
|
{ expanded_italic_100, expanded_italic_100 },
|
|
{ expanded_italic_900, expanded_italic_100 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ expanded_normal_900,expanded_italic_900 },
|
|
{
|
|
{ condensed_normal_100, expanded_normal_900 },
|
|
{ condensed_normal_900, expanded_normal_900 },
|
|
{ condensed_italic_100, expanded_italic_900 },
|
|
{ condensed_italic_900, expanded_italic_900 },
|
|
{ expanded_normal_100, expanded_normal_900 },
|
|
{ expanded_normal_900, expanded_normal_900 },
|
|
{ expanded_italic_100, expanded_italic_900 },
|
|
{ expanded_italic_900, expanded_italic_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ expanded_normal_100,expanded_normal_900 },
|
|
{
|
|
{ condensed_normal_100, expanded_normal_100 },
|
|
{ condensed_normal_900, expanded_normal_900 },
|
|
{ condensed_italic_100, expanded_normal_100 },
|
|
{ condensed_italic_900, expanded_normal_900 },
|
|
{ expanded_normal_100, expanded_normal_100 },
|
|
{ expanded_normal_900, expanded_normal_900 },
|
|
{ expanded_italic_100, expanded_normal_100 },
|
|
{ expanded_italic_900, expanded_normal_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ expanded_normal_100 },
|
|
{
|
|
{ condensed_normal_100, expanded_normal_100 },
|
|
{ condensed_normal_900, expanded_normal_100 },
|
|
{ condensed_italic_100, expanded_normal_100 },
|
|
{ condensed_italic_900, expanded_normal_100 },
|
|
{ expanded_normal_100, expanded_normal_100 },
|
|
{ expanded_normal_900, expanded_normal_100 },
|
|
{ expanded_italic_100, expanded_normal_100 },
|
|
{ expanded_italic_900, expanded_normal_100 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ expanded_normal_900 },
|
|
{
|
|
{ condensed_normal_100, expanded_normal_900 },
|
|
{ condensed_normal_900, expanded_normal_900 },
|
|
{ condensed_italic_100, expanded_normal_900 },
|
|
{ condensed_italic_900, expanded_normal_900 },
|
|
{ expanded_normal_100, expanded_normal_900 },
|
|
{ expanded_normal_900, expanded_normal_900 },
|
|
{ expanded_italic_100, expanded_normal_900 },
|
|
{ expanded_italic_900, expanded_normal_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ expanded_italic_100,expanded_italic_900 },
|
|
{
|
|
{ condensed_normal_100, expanded_italic_100 },
|
|
{ condensed_normal_900, expanded_italic_900 },
|
|
{ condensed_italic_100, expanded_italic_100 },
|
|
{ condensed_italic_900, expanded_italic_900 },
|
|
{ expanded_normal_100, expanded_italic_100 },
|
|
{ expanded_normal_900, expanded_italic_900 },
|
|
{ expanded_italic_100, expanded_italic_100 },
|
|
{ expanded_italic_900, expanded_italic_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ expanded_italic_100 },
|
|
{
|
|
{ condensed_normal_100, expanded_italic_100 },
|
|
{ condensed_normal_900, expanded_italic_100 },
|
|
{ condensed_italic_100, expanded_italic_100 },
|
|
{ condensed_italic_900, expanded_italic_100 },
|
|
{ expanded_normal_100, expanded_italic_100 },
|
|
{ expanded_normal_900, expanded_italic_100 },
|
|
{ expanded_italic_100, expanded_italic_100 },
|
|
{ expanded_italic_900, expanded_italic_100 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ expanded_italic_900 },
|
|
{
|
|
{ condensed_normal_100, expanded_italic_900 },
|
|
{ condensed_normal_900, expanded_italic_900 },
|
|
{ condensed_italic_100, expanded_italic_900 },
|
|
{ condensed_italic_900, expanded_italic_900 },
|
|
{ expanded_normal_100, expanded_italic_900 },
|
|
{ expanded_normal_900, expanded_italic_900 },
|
|
{ expanded_italic_100, expanded_italic_900 },
|
|
{ expanded_italic_900, expanded_italic_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ normal_normal_100, normal_normal_900 },
|
|
{
|
|
{ normal_normal_300, normal_normal_100 },
|
|
{ normal_normal_400, normal_normal_100 },
|
|
{ normal_normal_500, normal_normal_100 },
|
|
{ normal_normal_600, normal_normal_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ normal_normal_100, normal_normal_400, normal_normal_900 },
|
|
{
|
|
{ normal_normal_300, normal_normal_100 },
|
|
{ normal_normal_400, normal_normal_400 },
|
|
{ normal_normal_500, normal_normal_400 },
|
|
{ normal_normal_600, normal_normal_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ normal_normal_100, normal_normal_500, normal_normal_900 },
|
|
{
|
|
{ normal_normal_300, normal_normal_100 },
|
|
{ normal_normal_400, normal_normal_500 },
|
|
{ normal_normal_500, normal_normal_500 },
|
|
{ normal_normal_600, normal_normal_900 },
|
|
},
|
|
},
|
|
|
|
{
|
|
{ },
|
|
{
|
|
{ normal_normal_300, invalidFontStyle },
|
|
{ normal_normal_400, invalidFontStyle },
|
|
{ normal_normal_500, invalidFontStyle },
|
|
{ normal_normal_600, invalidFontStyle },
|
|
},
|
|
},
|
|
{
|
|
{ expanded_normal_100,expanded_normal_900,
|
|
expanded_italic_100,expanded_italic_900,
|
|
expanded_obliqu_100,expanded_obliqu_900, },
|
|
{
|
|
{ condensed_normal_100, expanded_normal_100 },
|
|
{ condensed_normal_900, expanded_normal_900 },
|
|
{ condensed_italic_100, expanded_italic_100 },
|
|
{ condensed_italic_900, expanded_italic_900 },
|
|
{ condensed_obliqu_100, expanded_obliqu_100 },
|
|
{ condensed_obliqu_900, expanded_obliqu_900 },
|
|
{ expanded_normal_100, expanded_normal_100 },
|
|
{ expanded_normal_900, expanded_normal_900 },
|
|
{ expanded_italic_100, expanded_italic_100 },
|
|
{ expanded_italic_900, expanded_italic_900 },
|
|
{ expanded_obliqu_100, expanded_obliqu_100 },
|
|
{ expanded_obliqu_900, expanded_obliqu_900 },
|
|
},
|
|
},
|
|
{
|
|
{ expanded_normal_100,expanded_normal_900,
|
|
expanded_obliqu_100,expanded_obliqu_900, },
|
|
{
|
|
{ condensed_normal_100, expanded_normal_100 },
|
|
{ condensed_normal_900, expanded_normal_900 },
|
|
{ condensed_italic_100, expanded_obliqu_100 },
|
|
{ condensed_italic_900, expanded_obliqu_900 },
|
|
{ condensed_obliqu_100, expanded_obliqu_100 },
|
|
{ condensed_obliqu_900, expanded_obliqu_900 },
|
|
{ expanded_normal_100, expanded_normal_100 },
|
|
{ expanded_normal_900, expanded_normal_900 },
|
|
{ expanded_italic_100, expanded_obliqu_100 },
|
|
{ expanded_italic_900, expanded_obliqu_900 },
|
|
{ expanded_obliqu_100, expanded_obliqu_100 },
|
|
{ expanded_obliqu_900, expanded_obliqu_900 },
|
|
},
|
|
},
|
|
{
|
|
{ expanded_italic_100,expanded_italic_900,
|
|
expanded_obliqu_100,expanded_obliqu_900, },
|
|
{
|
|
{ condensed_normal_100, expanded_obliqu_100 },
|
|
{ condensed_normal_900, expanded_obliqu_900 },
|
|
{ condensed_italic_100, expanded_italic_100 },
|
|
{ condensed_italic_900, expanded_italic_900 },
|
|
{ condensed_obliqu_100, expanded_obliqu_100 },
|
|
{ condensed_obliqu_900, expanded_obliqu_900 },
|
|
{ expanded_normal_100, expanded_obliqu_100 },
|
|
{ expanded_normal_900, expanded_obliqu_900 },
|
|
{ expanded_italic_100, expanded_italic_100 },
|
|
{ expanded_italic_900, expanded_italic_900 },
|
|
{ expanded_obliqu_100, expanded_obliqu_100 },
|
|
{ expanded_obliqu_900, expanded_obliqu_900 },
|
|
},
|
|
},
|
|
};
|
|
|
|
for (StyleSetTest& test : tests) {
|
|
for (const StyleSetTest::Case& testCase : test.cases) {
|
|
sk_sp<SkTypeface> typeface(test.styleSet.matchStyle(testCase.pattern));
|
|
if (typeface) {
|
|
REPORTER_ASSERT(reporter, typeface->fontStyle() == testCase.expectedResult);
|
|
} else {
|
|
REPORTER_ASSERT(reporter, invalidFontStyle == testCase.expectedResult);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
DEF_TEST(FontMgr_MatchCharacter, reporter) {
|
|
sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
|
|
// 0xD800 <= codepoint <= 0xDFFF || 0x10FFFF < codepoint are invalid
|
|
SkSafeUnref(fm->matchFamilyStyleCharacter("Blah", SkFontStyle::Normal(), nullptr, 0, 0x0));
|
|
SkSafeUnref(fm->matchFamilyStyleCharacter("Blah", SkFontStyle::Normal(), nullptr, 0, 0xD800));
|
|
SkSafeUnref(fm->matchFamilyStyleCharacter("Blah", SkFontStyle::Normal(), nullptr, 0, 0xDFFF));
|
|
SkSafeUnref(fm->matchFamilyStyleCharacter("Blah", SkFontStyle::Normal(), nullptr, 0, 0x110000));
|
|
SkSafeUnref(fm->matchFamilyStyleCharacter("Blah", SkFontStyle::Normal(), nullptr, 0, 0x1FFFFF));
|
|
SkSafeUnref(fm->matchFamilyStyleCharacter("Blah", SkFontStyle::Normal(), nullptr, 0, -1));
|
|
}
|