| // Copyright 2015 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/strings/stringprintf.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "ui/gfx/font.h" |
| |
| namespace gfx { |
| |
| namespace { |
| const char kDefaultApplicationLocale[] = "us-en"; |
| } // namespace |
| |
| // A targeted test for GetFallbackFonts on Mac. It uses a system API that |
| // only became publicly available in the 10.8 SDK. This test is to ensure it |
| // behaves sensibly on all supported OS versions. |
| TEST(FontFallbackMacTest, GetFallbackFonts) { |
| Font font("Arial", 12); |
| std::vector<Font> fallback_fonts = GetFallbackFonts(font); |
| // If there is only one fallback, it means the only fallback is the font |
| // itself. |
| EXPECT_LT(1u, fallback_fonts.size()); |
| } |
| |
| // Sanity check GetFallbackFont() behavior on Mac. This test makes assumptions |
| // about font properties and availability on specific macOS versions. |
| TEST(FontFallbackMacTest, GetFallbackFont) { |
| Font arial("Helvetica", 12); |
| const std::u16string ascii = u"abc"; |
| const std::u16string hebrew = u"\x5d0\x5d1\x5d2"; |
| const std::u16string emoji = u"😋"; |
| |
| Font fallback; |
| EXPECT_TRUE( |
| GetFallbackFont(arial, kDefaultApplicationLocale, hebrew, &fallback)); |
| EXPECT_EQ("Lucida Grande", fallback.GetFontName()); |
| EXPECT_TRUE( |
| GetFallbackFont(arial, kDefaultApplicationLocale, emoji, &fallback)); |
| EXPECT_EQ("Apple Color Emoji", fallback.GetFontName()); |
| } |
| |
| TEST(FontFallbackMacTest, GetFallbackFontForEmoji) { |
| static struct { |
| const char* test_name; |
| const wchar_t* text; |
| } kEmojiTests[] = { |
| {"aries", L"\u2648"}, |
| {"candle", L"\U0001F56F"}, |
| {"anchor", L"\u2693"}, |
| {"grinning_face", L"\U0001F600"}, |
| {"flag_andorra", L"\U0001F1E6\U0001F1E9"}, |
| {"woman_man_hands_light", L"\U0001F46B\U0001F3FB"}, |
| {"hole_text", L"\U0001F573\uFE0E"}, |
| {"hole_emoji", L"\U0001F573\uFE0F"}, |
| {"man_judge_medium", L"\U0001F468\U0001F3FD\u200D\u2696\uFE0F"}, |
| {"woman_turban", L"\U0001F473\u200D\u2640\uFE0F"}, |
| {"rainbow_flag", L"\U0001F3F3\uFE0F\u200D\U0001F308"}, |
| {"eye_bubble", L"\U0001F441\uFE0F\u200D\U0001F5E8\uFE0F"}, |
| }; |
| |
| Font font; |
| for (const auto& test : kEmojiTests) { |
| SCOPED_TRACE( |
| base::StringPrintf("GetFallbackFontForEmoji [%s]", test.test_name)); |
| Font fallback; |
| EXPECT_TRUE(GetFallbackFont(font, kDefaultApplicationLocale, |
| base::WideToUTF16(test.text), &fallback)); |
| EXPECT_EQ("Apple Color Emoji", fallback.GetFontName()); |
| } |
| } |
| |
| } // namespace gfx |