12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- // Copyright 2019 The Chromium 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 "ui/gfx/font_fallback.h"
- #include "base/logging.h"
- #include "base/strings/string_piece.h"
- #include "base/strings/utf_string_conversions.h"
- #include "build/build_config.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace gfx {
- namespace {
- const wchar_t* kFallbackFontTests[] = {
- L"\u0540\u0541", // Armenian,
- L"\u0631\u0632", // Arabic
- L"\u0915\u093f", // Devanagari
- L"\u5203\u5204", // CJK Unified Ideograph
- };
- const char kDefaultApplicationLocale[] = "us-en";
- } // namespace
- TEST(FontFallbackSkiaTest, EmptyStringFallback) {
- Font base_font;
- Font fallback_font;
- bool result = GetFallbackFont(base_font, kDefaultApplicationLocale,
- base::StringPiece16(), &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)
- // TODO(sergeyu): Fuchsia doesn't not support locale for font fallbacks.
- // TODO(etienneb): Android doesn't allow locale override, unless the language
- // is added in the system UI.
- TEST(FontFallbackSkiaTest, CJKLocaleFallback) {
- // Han unification is an effort to map multiple character sets of the CJK
- // languages into a single set of unified characters. Han characters are a
- // common feature of written Chinese (hanzi), Japanese (kanji), and Korean
- // (hanja). The same text will be rendered using a different font based on
- // locale.
- 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());
- // The three fonts must not be the same.
- 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 // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_FUCHSIA)
- } // namespace gfx
|