blob: e3626da62412830a14056964fbddaf37db661510 [file] [log] [blame]
// Copyright 2019 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "core/fxge/cfx_folderfontinfo.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/base/ptr_util.h"
#include "third_party/base/stl_util.h"
namespace {
constexpr char kArial[] = "Arial";
constexpr char kTimesNewRoman[] = "TimesNewRoman";
constexpr char kSymbol[] = "Symbol";
constexpr char kBookshelfSymbol7[] = "Bookshelf Symbol 7";
constexpr char kCalibri[] = "Calibri";
constexpr char kBookshelf[] = "Bookshelf";
} // namespace
class CFX_FolderFontInfoTest : public ::testing::Test {
public:
CFX_FolderFontInfoTest() {
auto arial_info = pdfium::MakeUnique<CFX_FolderFontInfo::FontFaceInfo>(
/*filePath=*/"", kArial, /*fontTables=*/"",
/*fontOffset=*/0, /*fileSize=*/0);
arial_info->m_Charsets = 2;
auto times_new_roman_info =
pdfium::MakeUnique<CFX_FolderFontInfo::FontFaceInfo>(
/*filePath=*/"", kTimesNewRoman, /*fontTables=*/"",
/*fontOffset=*/0, /*fileSize=*/0);
auto bookshelf_symbol7_info =
pdfium::MakeUnique<CFX_FolderFontInfo::FontFaceInfo>(
/*filePath=*/"", kBookshelfSymbol7, /*fontTables=*/"",
/*fontOffset=*/0, /*fileSize=*/0);
bookshelf_symbol7_info->m_Charsets = 2;
auto symbol_info = pdfium::MakeUnique<CFX_FolderFontInfo::FontFaceInfo>(
/*filePath=*/"", kSymbol, /*fontTables=*/"",
/*fontOffset=*/0, /*fileSize=*/0);
symbol_info->m_Charsets = 2;
font_info_.m_FontList[kArial] = std::move(arial_info);
font_info_.m_FontList[kTimesNewRoman] = std::move(times_new_roman_info);
font_info_.m_FontList[kBookshelfSymbol7] =
std::move(bookshelf_symbol7_info);
font_info_.m_FontList[kSymbol] = std::move(symbol_info);
}
void* FindFont(int weight,
bool bItalic,
int charset,
int pitch_family,
const char* family,
bool bMatchName) {
return font_info_.FindFont(weight, bItalic, charset, pitch_family, family,
bMatchName);
}
ByteString GetFaceName(void* font) {
return static_cast<CFX_FolderFontInfo::FontFaceInfo*>(font)->m_FaceName;
}
private:
CFX_FolderFontInfo font_info_;
};
TEST_F(CFX_FolderFontInfoTest, TestFindFont) {
// Find "Symbol" font
void* font = FindFont(/*weight=*/0, /*bItalic=*/false, /*charset=*/2,
/*pitch_family=*/2, kSymbol, /*bMatchName=*/true);
ASSERT_TRUE(font);
EXPECT_EQ(GetFaceName(font), kSymbol);
// Find "Calibri" font that is not present in the installed fonts
EXPECT_FALSE(FindFont(/*weight=*/0, /*bItalic=*/false, /*charset=*/2,
/*pitch_family=*/2, kCalibri,
/*bMatchName=*/true));
// Find the closest matching font to "Bookself" font that is present in the
// installed fonts
font = FindFont(/*weight=*/0, /*bItalic=*/false, /*charset=*/2,
/*pitch_family=*/2, kBookshelf, /*bMatchName=*/true);
ASSERT_TRUE(font);
EXPECT_EQ(GetFaceName(font), kBookshelfSymbol7);
// Find "Symbol" font when name matching is false
font = FindFont(/*weight=*/0, /*bItalic=*/false, /*charset=*/2,
/*pitch_family=*/2, kSymbol, /*bMatchName=*/false);
ASSERT_TRUE(font);
EXPECT_EQ(GetFaceName(font), kArial);
}