// 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/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 !defined(OS_ANDROID) && !defined(OS_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  // !defined(OS_ANDROID) && !defined(OS_FUCHSIA)

}  // namespace gfx
