// 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/test/font_fallback_test_data.h"

#include <string>

#include "build/build_config.h"

namespace gfx {

#if defined(OS_WIN)
constexpr bool kWin10Only = true;
#endif

FallbackFontTestCase::FallbackFontTestCase() = default;
FallbackFontTestCase::FallbackFontTestCase(const FallbackFontTestCase& other) =
    default;

FallbackFontTestCase::FallbackFontTestCase(
    UScriptCode script_arg,
    std::string language_tag_arg,
    std::u16string text_arg,
    std::vector<std::string> fallback_fonts_arg,
    bool is_win10_arg)
    : script(script_arg),
      language_tag(language_tag_arg),
      text(text_arg),
      fallback_fonts(fallback_fonts_arg),
      is_win10(is_win10_arg) {}

FallbackFontTestCase::~FallbackFontTestCase() = default;

#if defined(OS_WIN)
// A list of script and the fallback font on a default windows installation.
// This list may need to be updated if fonts or operating systems are
// upgraded.
// TODO(drott): Some of the test cases lack a valid language tag as it's unclear
// which language in particular would be expressed with the respective ancient
// script. Ideally we'd find a meaningful language tag for those.
std::vector<FallbackFontTestCase> kGetFontFallbackTests = {
    {USCRIPT_ARABIC,
     "ar",
     u"\u062A\u062D",
     {"Segoe UI", "Tahoma", "Times New Roman"}},
    {USCRIPT_ARMENIAN,
     "hy-am",
     u"\u0540\u0541",
     {"Segoe UI", "Tahoma", "Sylfaen", "Times New Roman"}},
    {USCRIPT_BENGALI, "bn", u"\u09B8\u09AE", {"Nirmala UI", "Vrinda"}},
    {USCRIPT_BRAILLE, "en-us-brai", u"\u2870\u2871", {"Segoe UI Symbol"}},
    {USCRIPT_BUGINESE, "bug", u"\u1A00\u1A01", {"Leelawadee UI"}, kWin10Only},
    {USCRIPT_CANADIAN_ABORIGINAL,
     "cans",
     u"\u1410\u1411",
     {"Gadugi", "Euphemia"}},

    {USCRIPT_CARIAN,
     "xcr",
     u"\U000102A0\U000102A1",
     {"Segoe UI Historic"},
     kWin10Only},

    {USCRIPT_CHEROKEE,
     "chr",
     u"\u13A1\u13A2",
     {"Gadugi", "Plantagenet Cherokee"}},

    {USCRIPT_COPTIC,
     "copt",
     u"\u2C81\u2C82",
     {"Segoe UI Historic"},
     kWin10Only},

    {USCRIPT_CUNEIFORM,
     "akk",
     u"\U00012000\U0001200C",
     {"Segoe UI Historic"},
     kWin10Only},

    {USCRIPT_CYPRIOT,
     "ecy",
     u"\U00010800\U00010801",
     {"Segoe UI Historic"},
     kWin10Only},

    {USCRIPT_CYRILLIC, "ru", u"\u0410\u0411\u0412", {"Times New Roman"}},

    {USCRIPT_DESERET,
     "en",
     u"\U00010400\U00010401",
     {"Segoe UI Symbol"},
     kWin10Only},

    {USCRIPT_ETHIOPIC, "am", u"\u1201\u1202", {"Ebrima", "Nyala"}},
    {USCRIPT_GEORGIAN,
     "ka",
     u"\u10A0\u10A1",
     {"Sylfaen", "Segoe UI"},
     kWin10Only},
    {USCRIPT_GREEK, "el", u"\u0391\u0392", {"Times New Roman"}},
    {USCRIPT_GURMUKHI, "pa", u"\u0A21\u0A22", {"Raavi", "Nirmala UI"}},
    {USCRIPT_HAN,
     "zh-CN",
     u"\u6211",
     {"Microsoft YaHei", "Microsoft YaHei UI"}},
    {USCRIPT_HAN,
     "zh-HK",
     u"\u6211",
     {"Microsoft JhengHei", "Microsoft JhengHei UI"}},
    {USCRIPT_HAN,
     "zh-Hans",
     u"\u6211",
     {"Microsoft YaHei", "Microsoft YaHei UI"}},
    {USCRIPT_HAN,
     "zh-Hant",
     u"\u6211",
     {"Microsoft JhengHei", "Microsoft JhengHei UI"}},
    {USCRIPT_HAN, "ja", u"\u6211", {"Meiryo UI", "Yu Gothic UI", "Yu Gothic"}},
    {USCRIPT_HANGUL,
     "ko",
     u"\u1100\u1101",
     {"Malgun Gothic", "Gulim"},
     kWin10Only},
    {USCRIPT_HEBREW,
     "he",
     u"\u05D1\u05D2",
     {"Segoe UI", "Tahoma", "Times New Roman"}},
    {USCRIPT_KHMER,
     "km",
     u"\u1780\u1781",
     {"Leelawadee UI", "Khmer UI", "Khmer OS", "MoolBoran", "DaunPenh"}},

    {USCRIPT_IMPERIAL_ARAMAIC,
     "arc",
     u"\U00010841\U00010842",
     {"Segoe UI Historic"},
     kWin10Only},

    {USCRIPT_INSCRIPTIONAL_PAHLAVI,
     "pal",
     u"\U00010B61\U00010B62",
     {"Segoe UI Historic"},
     kWin10Only},

    {USCRIPT_INSCRIPTIONAL_PARTHIAN,
     "xpr",
     u"\U00010B41\U00010B42",
     {"Segoe UI Historic"},
     kWin10Only},

    {USCRIPT_JAVANESE, "jv", u"\uA991\uA992", {"Javanese Text"}, kWin10Only},
    {USCRIPT_KANNADA, "kn", u"\u0CA1\u0CA2", {"Nirmala UI", "Tunga"}},

    {USCRIPT_KHAROSHTHI,
     "sa",
     u"\U00010A10\U00010A11",
     {"Segoe UI Historic"},
     kWin10Only},

    {USCRIPT_LAO,
     "lo",
     u"\u0ED0\u0ED1",
     {"Lao UI", "Leelawadee UI", "Segoe UI"}},
    {USCRIPT_LISU, "lis", u"\uA4D0\uA4D1", {"Segoe UI"}, kWin10Only},

    {USCRIPT_LYCIAN,
     "xlc",
     u"\U00010281\U00010282",
     {"Segoe UI Historic"},
     kWin10Only},

    {USCRIPT_LYDIAN,
     "xld",
     u"\U00010921\U00010922",
     {"Segoe UI Historic"},
     kWin10Only},

    {USCRIPT_MALAYALAM, "ml", u"\u0D21\u0D22", {"Kartika", "Nirmala UI"}},

    {USCRIPT_MEROITIC_CURSIVE,
     "",
     u"\U000109A1\U000109A2",
     {"Segoe UI Historic"},
     kWin10Only},

    {USCRIPT_MYANMAR, "my", u"\u1000\u1001", {"Myanmar Text"}, kWin10Only},
    {USCRIPT_NEW_TAI_LUE, "", u"\u1981\u1982", {"Microsoft New Tai Lue"}},
    {USCRIPT_NKO, "nko", u"\u07C1\u07C2", {"Ebrima", "Segoe UI"}},

    {USCRIPT_OGHAM,
     "",
     u"\u1680\u1681",
     {"Segoe UI Symbol", "Segoe UI Historic"}},

    {USCRIPT_OL_CHIKI, "", u"\u1C51\u1C52", {"Nirmala UI"}, kWin10Only},

    {USCRIPT_OLD_ITALIC,
     "",
     u"\U00010301\U00010302",
     {"Segoe UI Historic", "Segoe UI Symbol"}},

    {USCRIPT_OLD_PERSIAN,
     "peo",
     u"\U000103A1\U000103A2",
     {"Segoe UI Historic"},
     kWin10Only},

    {USCRIPT_OLD_SOUTH_ARABIAN,
     "",
     u"\U00010A61\U00010A62",
     {"Segoe UI Historic"},
     kWin10Only},

    {USCRIPT_ORIYA, "or", u"\u0B21\u0B22", {"Kalinga", "Nirmala UI"}},
    {USCRIPT_PHAGS_PA, "", u"\uA841\uA842", {"Microsoft PhagsPa"}},

    {USCRIPT_RUNIC,
     "",
     u"\u16A0\u16A1",
     {"Segoe UI Symbol", "Segoe UI Historic"}},

    {USCRIPT_SHAVIAN,
     "",
     u"\U00010451\U00010452",
     {"Segoe UI", "Segoe UI Historic"},
     kWin10Only},

    {USCRIPT_SINHALA, "si", u"\u0D91\u0D92", {"Iskoola Pota", "Nirmala UI"}},

    {USCRIPT_SORA_SOMPENG,
     "",
     u"\U000110D1\U000110D2",
     {"Nirmala UI"},
     kWin10Only},

    {USCRIPT_SYRIAC,
     "syr",
     u"\u0711\u0712",
     {"Estrangelo Edessa", "Segoe UI Historic"}},

    {USCRIPT_TAI_LE, "", u"\u1951\u1952", {"Microsoft Tai Le"}},
    {USCRIPT_TAMIL, "ta", u"\u0BB1\u0BB2", {"Latha", "Nirmala UI"}},
    {USCRIPT_TELUGU, "te", u"\u0C21\u0C22", {"Gautami", "Nirmala UI"}},
    {USCRIPT_THAANA, "", u"\u0781\u0782", {"Mv Boli", "MV Boli"}},
    {USCRIPT_THAI,
     "th",
     u"\u0e01\u0e02",
     {"Tahoma", "Leelawadee UI", "Leelawadee"},
     kWin10Only},
    {USCRIPT_TIBETAN, "bo", u"\u0F01\u0F02", {"Microsoft Himalaya"}},
    {USCRIPT_TIFINAGH, "", u"\u2D31\u2D32", {"Ebrima"}},
    {USCRIPT_VAI, "vai", u"\uA501\uA502", {"Ebrima"}},
    {USCRIPT_YI, "yi", u"\uA000\uA001", {"Microsoft Yi Baiti"}}};

#elif defined(OS_LINUX) || defined(OS_CHROMEOS)

// A list of script and the fallback font on the linux test environment.
// On linux, font-config configuration and fonts are mock. The config
// can be found in '${build}/etc/fonts/fonts.conf' and the test fonts
// can be found in '${build}/test_fonts/*'.
std::vector<FallbackFontTestCase> kGetFontFallbackTests = {
    {USCRIPT_BENGALI, "bn", u"\u09B8\u09AE", {"Mukti Narrow"}},
    {USCRIPT_DEVANAGARI, "hi", u"\u0905\u0906", {"Lohit Devanagari"}},
    {USCRIPT_GURMUKHI, "pa", u"\u0A21\u0A22", {"Lohit Gurmukhi"}},
    {USCRIPT_HAN, "zh-CN", u"\u6211", {"Noto Sans CJK JP"}},
    {USCRIPT_KHMER, "km", u"\u1780\u1781", {"Noto Sans Khmer"}},
    {USCRIPT_TAMIL, "ta", u"\u0BB1\u0BB2", {"Lohit Tamil"}},
    {USCRIPT_THAI, "th", u"\u0e01\u0e02", {"Garuda"}},
};

#else

// No fallback font tests are defined on that platform.
std::vector<FallbackFontTestCase> kGetFontFallbackTests = {};

#endif

}  // namespace gfx
