#include <string_view>
#include "base/logging.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/font_fallback.h"
namespace gfx {
namespace {
const wchar_t* kFallbackFontTests[] = {
L"\u0540\u0541",
L"\u0631\u0632",
L"\u0915\u093f",
L"\u5203\u5204",
};
const char kDefaultApplicationLocale[] = "us-en";
}
TEST(FontFallbackSkiaTest, EmptyStringFallback) {
Font base_font;
Font fallback_font;
bool result = GetFallbackFont(base_font, kDefaultApplicationLocale,
std::u16string_view(), &fallback_font);
EXPECT_FALSE(result);
}
TEST(FontFallbackSkiaTest, FontFallback) {
for (const auto* test : kFallbackFontTests) {
Font base_font;
Font fallback_font;
std::u16string text = base::WideToUTF16(test);
if (!GetFallbackFont(base_font, kDefaultApplicationLocale, text,
&fallback_font)) {
ADD_FAILURE() << "Font fallback failed: '" << text << "'";
}
}
}
#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_FUCHSIA)
TEST(FontFallbackSkiaTest, CJKLocaleFallback) {
const std::u16string kCJKTest = u"\u8AA4\u904E\u9AA8";
Font base_font;
Font fallback_font_zh_cn;
Font fallback_font_zh_tw;
Font fallback_font_zh_hk;
EXPECT_TRUE(
GetFallbackFont(base_font, "zh-CN", kCJKTest, &fallback_font_zh_cn));
EXPECT_TRUE(
GetFallbackFont(base_font, "zh-TW", kCJKTest, &fallback_font_zh_tw));
EXPECT_TRUE(
GetFallbackFont(base_font, "zh-HK", kCJKTest, &fallback_font_zh_hk));
EXPECT_EQ(fallback_font_zh_cn.GetFontName(),
fallback_font_zh_tw.GetFontName());
EXPECT_EQ(fallback_font_zh_cn.GetFontName(),
fallback_font_zh_hk.GetFontName());
Font fallback_font_ja;
Font fallback_font_ja_jp;
EXPECT_TRUE(GetFallbackFont(base_font, "ja", kCJKTest, &fallback_font_ja));
EXPECT_TRUE(
GetFallbackFont(base_font, "ja-JP", kCJKTest, &fallback_font_ja_jp));
EXPECT_EQ(fallback_font_ja.GetFontName(), fallback_font_ja_jp.GetFontName());
Font fallback_font_ko;
Font fallback_font_ko_kr;
EXPECT_TRUE(GetFallbackFont(base_font, "ko", kCJKTest, &fallback_font_ko));
EXPECT_TRUE(
GetFallbackFont(base_font, "ko-KR", kCJKTest, &fallback_font_ko_kr));
EXPECT_EQ(fallback_font_ko.GetFontName(), fallback_font_ko_kr.GetFontName());
EXPECT_NE(fallback_font_zh_cn.GetFontName(), fallback_font_ja.GetFontName());
EXPECT_NE(fallback_font_zh_cn.GetFontName(), fallback_font_ko.GetFontName());
EXPECT_NE(fallback_font_ja.GetFontName(), fallback_font_ko.GetFontName());
}
#endif
}