Restructure Building of tests and FontCollection

Change-Id: Ifd7d9cd505b119684ccb42c998204d41ee7ef93e
This commit is contained in:
Gary Qian
2017-06-15 12:13:14 -07:00
parent 94900efe1d
commit 4823485245
5 changed files with 58 additions and 33 deletions

View File

@@ -28,14 +28,18 @@
namespace txt {
FontCollection& FontCollection::GetDefaultFontCollection() {
FontCollection& FontCollection::GetFontCollection(std::string dir) {
static FontCollection* collection = nullptr;
static std::once_flag once;
std::call_once(once, []() { collection = new FontCollection(); });
std::call_once(once, [dir]() { collection = new FontCollection(dir); });
return *collection;
}
FontCollection::FontCollection() {
FontCollection& FontCollection::GetDefaultFontCollection() {
return GetFontCollection("");
}
FontCollection::FontCollection(std::string dir) {
#ifdef DIRECTORY_FONT_MANAGER_AVAILABLE
skia_font_manager_ = dir.length() != 0
? SkFontMgr_New_Custom_Directory(dir.c_str())
@@ -47,7 +51,7 @@ FontCollection::FontCollection() {
FontCollection::~FontCollection() = default;
std::set<std::string> FontCollection::GetFamilyNames(const std::string& dir) {
std::set<std::string> FontCollection::GetFamilyNames() {
std::set<std::string> names;
SkString str;
for (int i = 0; i < skia_font_manager_->countFamilies(); i++) {
@@ -72,8 +76,7 @@ const std::string FontCollection::ProcessFamilyName(const std::string& family) {
}
std::shared_ptr<minikin::FontCollection>
FontCollection::GetMinikinFontCollectionForFamily(const std::string& family,
const std::string& dir) {
FontCollection::GetMinikinFontCollectionForFamily(const std::string& family) {
FTL_DCHECK(skia_font_manager_ != nullptr);
// Ask Skia to resolve a font style set for a font family name.

View File

@@ -37,12 +37,13 @@ class FontCollection {
public:
static FontCollection& GetDefaultFontCollection();
static FontCollection& GetFontCollection(std::string dir = "");
std::shared_ptr<minikin::FontCollection> GetMinikinFontCollectionForFamily(
const std::string& family,
const std::string& dir = "");
const std::string& family);
// Provides a set of all available family names.
std::set<std::string> GetFamilyNames(const std::string& dir = "");
std::set<std::string> GetFamilyNames();
private:
sk_sp<SkFontMgr> skia_font_manager_;
@@ -57,7 +58,7 @@ class FontCollection {
return DEFAULT_FAMILY_NAME;
};
FontCollection();
FontCollection(std::string dir = "");
~FontCollection();

View File

@@ -121,8 +121,8 @@ void Paragraph::AddRunsToLineBreaker(const std::string& rootdir) {
for (size_t i = 0; i < runs_.size(); ++i) {
auto run = runs_.GetRun(i);
auto collection =
FontCollection::GetDefaultFontCollection()
.GetMinikinFontCollectionForFamily(run.style.font_family, rootdir);
FontCollection::GetFontCollection(rootdir)
.GetMinikinFontCollectionForFamily(run.style.font_family);
GetFontAndMinikinPaint(run.style, &font, &paint);
breaker_.addStyleRun(&paint, collection, font, run.start, run.end, false);
}
@@ -154,8 +154,8 @@ void Paragraph::Layout(const ParagraphConstraints& constraints,
for (size_t run_index = 0; run_index < runs_.size(); ++run_index) {
auto run = runs_.GetRun(run_index);
auto collection =
FontCollection::GetDefaultFontCollection()
.GetMinikinFontCollectionForFamily(run.style.font_family, rootdir);
FontCollection::GetFontCollection(rootdir)
.GetMinikinFontCollectionForFamily(run.style.font_family);
GetFontAndMinikinPaint(run.style, &font, &minikin_paint);
GetPaint(run.style, &paint);

View File

@@ -0,0 +1,22 @@
# Copyright 2017 Google, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
group("tests") {
testonly = true
deps = [
"txt",
"unittest",
]
}

View File

@@ -25,33 +25,31 @@ namespace txt {
TEST(FontCollection, HasDefaultRegistrations) {
std::string defaultFamilyName = txt::FontCollection::GetDefaultFamilyName();
auto collection =
txt::FontCollection::GetDefaultFontCollection()
.GetMinikinFontCollectionForFamily("", txt::GetFontDir());
ASSERT_EQ(
defaultFamilyName,
txt::FontCollection::GetDefaultFontCollection().ProcessFamilyName(""));
auto collection = txt::FontCollection::GetFontCollection(txt::GetFontDir())
.GetMinikinFontCollectionForFamily("");
ASSERT_EQ(defaultFamilyName,
txt::FontCollection::GetFontCollection(txt::GetFontDir())
.ProcessFamilyName(""));
ASSERT_NE(defaultFamilyName,
txt::FontCollection::GetDefaultFontCollection().ProcessFamilyName(
"NotARealFont!"));
txt::FontCollection::GetFontCollection(txt::GetFontDir())
.ProcessFamilyName("NotARealFont!"));
ASSERT_EQ("NotARealFont!",
txt::FontCollection::GetDefaultFontCollection().ProcessFamilyName(
"NotARealFont!"));
txt::FontCollection::GetFontCollection(txt::GetFontDir())
.ProcessFamilyName("NotARealFont!"));
ASSERT_NE(collection.get(), nullptr);
}
TEST(FontCollection, GetMinikinFontCollections) {
std::string defaultFamilyName = txt::FontCollection::GetDefaultFamilyName();
auto collectionDef =
txt::FontCollection::GetDefaultFontCollection()
.GetMinikinFontCollectionForFamily("", txt::GetFontDir());
auto collectionDef = txt::FontCollection::GetFontCollection(txt::GetFontDir())
.GetMinikinFontCollectionForFamily("");
auto collectionRoboto =
txt::FontCollection::GetDefaultFontCollection()
.GetMinikinFontCollectionForFamily("Roboto", txt::GetFontDir());
auto collectionHomemadeApple = txt::FontCollection::GetDefaultFontCollection()
.GetMinikinFontCollectionForFamily(
"Homemade Apple", txt::GetFontDir());
txt::FontCollection::GetFontCollection(txt::GetFontDir())
.GetMinikinFontCollectionForFamily("Roboto");
auto collectionHomemadeApple =
txt::FontCollection::GetFontCollection(txt::GetFontDir())
.GetMinikinFontCollectionForFamily("Homemade Apple");
for (size_t base = 0; base < 50; base++) {
for (size_t variation = 0; variation < 50; variation++) {
ASSERT_EQ(collectionDef->hasVariationSelector(base, variation),
@@ -66,7 +64,8 @@ TEST(FontCollection, GetMinikinFontCollections) {
TEST(FontCollection, GetFamilyNames) {
std::set<std::string> names =
txt::FontCollection::GetFamilyNames(txt::GetFontDir());
txt::FontCollection::GetFontCollection(txt::GetFontDir())
.GetFamilyNames();
ASSERT_EQ(names.size(), 19ull);