// Copyright 2019 The Chromium Authors
// 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
