blob: b93589ddd724af0f43986d5aa55673873c31a028 [file] [log] [blame]
[email protected]34694762012-01-31 05:15:111// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]7f4bfe12008-12-12 01:52:252// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]08397d52011-02-05 01:53:385#include "ui/gfx/font.h"
[email protected]7f4bfe12008-12-12 01:52:256
avic89eb8d42015-12-23 08:08:187#include "base/macros.h"
[email protected]f3652ff92013-06-11 13:54:318#include "base/strings/string16.h"
[email protected]2fb26572013-12-11 08:43:069#include "base/strings/string_util.h"
[email protected]c7057fbe2013-06-07 18:54:0110#include "base/strings/utf_string_conversions.h"
avic89eb8d42015-12-23 08:08:1811#include "build/build_config.h"
[email protected]7f4bfe12008-12-12 01:52:2512#include "testing/gtest/include/gtest/gtest.h"
13
Daniel Eratcb2db9b2015-02-11 15:15:0914#if defined(OS_WIN)
[email protected]23fc1152011-02-17 14:55:2615#include "ui/gfx/platform_font_win.h"
16#endif
17
[email protected]6a1cac1c2012-10-29 19:58:0218namespace gfx {
[email protected]7f4bfe12008-12-12 01:52:2519namespace {
20
Daniel Eratcb2db9b2015-02-11 15:15:0921using FontTest = testing::Test;
[email protected]7f4bfe12008-12-12 01:52:2522
[email protected]5b3a7e92010-10-06 22:56:4723#if defined(OS_WIN)
24class ScopedMinimumFontSizeCallback {
25 public:
26 explicit ScopedMinimumFontSizeCallback(int minimum_size) {
27 minimum_size_ = minimum_size;
[email protected]6a1cac1c2012-10-29 19:58:0228 old_callback_ = PlatformFontWin::get_minimum_font_size_callback;
29 PlatformFontWin::get_minimum_font_size_callback = &GetMinimumFontSize;
[email protected]5b3a7e92010-10-06 22:56:4730 }
31
32 ~ScopedMinimumFontSizeCallback() {
[email protected]6a1cac1c2012-10-29 19:58:0233 PlatformFontWin::get_minimum_font_size_callback = old_callback_;
[email protected]5b3a7e92010-10-06 22:56:4734 }
35
36 private:
37 static int GetMinimumFontSize() {
38 return minimum_size_;
39 }
40
[email protected]6a1cac1c2012-10-29 19:58:0241 PlatformFontWin::GetMinimumFontSizeCallback old_callback_;
[email protected]5b3a7e92010-10-06 22:56:4742 static int minimum_size_;
43
44 DISALLOW_COPY_AND_ASSIGN(ScopedMinimumFontSizeCallback);
45};
46
47int ScopedMinimumFontSizeCallback::minimum_size_ = 0;
48#endif // defined(OS_WIN)
49
tfarinab7e00dc2015-08-05 22:49:5450#if defined(OS_ANDROID)
51#define MAYBE_LoadArial DISABLED_LoadArial
52#else
53#define MAYBE_LoadArial LoadArial
54#endif
55TEST_F(FontTest, MAYBE_LoadArial) {
[email protected]610ae5f2011-10-27 23:55:3756 Font cf("Arial", 16);
Daniel Eratcb2db9b2015-02-11 15:15:0957#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_IOS)
58 EXPECT_TRUE(cf.GetNativeFont());
59#endif
[email protected]c831ea9c2013-10-01 10:52:2460 EXPECT_EQ(cf.GetStyle(), Font::NORMAL);
61 EXPECT_EQ(cf.GetFontSize(), 16);
62 EXPECT_EQ(cf.GetFontName(), "Arial");
brettw8e2106d2015-08-11 19:30:2263 EXPECT_EQ("arial", base::ToLowerASCII(cf.GetActualFontNameForTesting()));
[email protected]7f4bfe12008-12-12 01:52:2564}
65
tfarinab7e00dc2015-08-05 22:49:5466#if defined(OS_ANDROID)
67#define MAYBE_LoadArialBold DISABLED_LoadArialBold
68#else
69#define MAYBE_LoadArialBold LoadArialBold
70#endif
71TEST_F(FontTest, MAYBE_LoadArialBold) {
[email protected]610ae5f2011-10-27 23:55:3772 Font cf("Arial", 16);
mboc998e8902016-06-02 11:40:3573 Font bold(cf.Derive(0, Font::NORMAL, Font::Weight::BOLD));
Daniel Eratcb2db9b2015-02-11 15:15:0974#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_IOS)
75 EXPECT_TRUE(bold.GetNativeFont());
76#endif
mboc998e8902016-06-02 11:40:3577 EXPECT_EQ(bold.GetStyle(), Font::NORMAL);
78 EXPECT_EQ(bold.GetWeight(), Font::Weight::BOLD);
brettw8e2106d2015-08-11 19:30:2279 EXPECT_EQ("arial", base::ToLowerASCII(cf.GetActualFontNameForTesting()));
[email protected]7f4bfe12008-12-12 01:52:2580}
81
tfarinab7e00dc2015-08-05 22:49:5482#if defined(OS_ANDROID)
83#define MAYBE_Ascent DISABLED_Ascent
84#else
85#define MAYBE_Ascent Ascent
86#endif
87TEST_F(FontTest, MAYBE_Ascent) {
[email protected]610ae5f2011-10-27 23:55:3788 Font cf("Arial", 16);
[email protected]c831ea9c2013-10-01 10:52:2489 EXPECT_GT(cf.GetBaseline(), 2);
90 EXPECT_LE(cf.GetBaseline(), 22);
[email protected]7f4bfe12008-12-12 01:52:2591}
92
tfarinab7e00dc2015-08-05 22:49:5493#if defined(OS_ANDROID)
94#define MAYBE_Height DISABLED_Height
95#else
96#define MAYBE_Height Height
97#endif
98TEST_F(FontTest, MAYBE_Height) {
[email protected]610ae5f2011-10-27 23:55:3799 Font cf("Arial", 16);
[email protected]c831ea9c2013-10-01 10:52:24100 EXPECT_GE(cf.GetHeight(), 16);
[email protected]4eae2c442009-11-03 23:46:26101 // TODO(akalin): Figure out why height is so large on Linux.
[email protected]c831ea9c2013-10-01 10:52:24102 EXPECT_LE(cf.GetHeight(), 26);
103}
104
tfarinab7e00dc2015-08-05 22:49:54105#if defined(OS_ANDROID)
106#define MAYBE_CapHeight DISABLED_CapHeight
107#else
108#define MAYBE_CapHeight CapHeight
109#endif
110TEST_F(FontTest, MAYBE_CapHeight) {
[email protected]c831ea9c2013-10-01 10:52:24111 Font cf("Arial", 16);
112 EXPECT_GT(cf.GetCapHeight(), 0);
113 EXPECT_GT(cf.GetCapHeight(), cf.GetHeight() / 2);
[email protected]56e50572013-11-01 14:25:31114 EXPECT_LT(cf.GetCapHeight(), cf.GetBaseline());
[email protected]7f4bfe12008-12-12 01:52:25115}
116
tfarinab7e00dc2015-08-05 22:49:54117#if defined(OS_ANDROID)
118#define MAYBE_AvgWidths DISABLED_AvgWidths
119#else
120#define MAYBE_AvgWidths AvgWidths
121#endif
122TEST_F(FontTest, MAYBE_AvgWidths) {
[email protected]610ae5f2011-10-27 23:55:37123 Font cf("Arial", 16);
[email protected]c831ea9c2013-10-01 10:52:24124 EXPECT_EQ(cf.GetExpectedTextWidth(0), 0);
125 EXPECT_GT(cf.GetExpectedTextWidth(1), cf.GetExpectedTextWidth(0));
126 EXPECT_GT(cf.GetExpectedTextWidth(2), cf.GetExpectedTextWidth(1));
127 EXPECT_GT(cf.GetExpectedTextWidth(3), cf.GetExpectedTextWidth(2));
[email protected]7f4bfe12008-12-12 01:52:25128}
129
tfarinab7e00dc2015-08-05 22:49:54130#if defined(OS_WIN) || defined(OS_ANDROID)
131#define MAYBE_GetActualFontNameForTesting DISABLED_GetActualFontNameForTesting
132#else
133#define MAYBE_GetActualFontNameForTesting GetActualFontNameForTesting
134#endif
[email protected]2fb26572013-12-11 08:43:06135// On Windows, Font::GetActualFontNameForTesting() doesn't work well for now.
136// http://crbug.com/327287
[email protected]85eb3e12014-02-27 20:44:12137//
138// Check that fonts used for testing are installed and enabled. On Mac
139// fonts may be installed but still need enabling in Font Book.app.
140// http://crbug.com/347429
tfarinab7e00dc2015-08-05 22:49:54141TEST_F(FontTest, MAYBE_GetActualFontNameForTesting) {
[email protected]2fb26572013-12-11 08:43:06142 Font arial("Arial", 16);
brettw8e2106d2015-08-11 19:30:22143 EXPECT_EQ("arial", base::ToLowerASCII(arial.GetActualFontNameForTesting()))
[email protected]85eb3e12014-02-27 20:44:12144 << "********\n"
145 << "Your test environment seems to be missing Arial font, which is "
146 << "needed for unittests. Check if Arial font is installed.\n"
147 << "********";
[email protected]2fb26572013-12-11 08:43:06148 Font symbol("Symbol", 16);
brettw8e2106d2015-08-11 19:30:22149 EXPECT_EQ("symbol", base::ToLowerASCII(symbol.GetActualFontNameForTesting()))
[email protected]85eb3e12014-02-27 20:44:12150 << "********\n"
151 << "Your test environment seems to be missing Symbol font, which is "
152 << "needed for unittests. Check if Symbol font is installed.\n"
153 << "********";
[email protected]2fb26572013-12-11 08:43:06154
155 const char* const invalid_font_name = "no_such_font_name";
156 Font fallback_font(invalid_font_name, 16);
157 EXPECT_NE(invalid_font_name,
brettw8e2106d2015-08-11 19:30:22158 base::ToLowerASCII(fallback_font.GetActualFontNameForTesting()));
[email protected]2fb26572013-12-11 08:43:06159}
[email protected]2fb26572013-12-11 08:43:06160
[email protected]f80821f2009-06-16 23:10:29161#if defined(OS_WIN)
[email protected]01430822014-02-13 15:41:45162TEST_F(FontTest, DeriveResizesIfSizeTooSmall) {
[email protected]610ae5f2011-10-27 23:55:37163 Font cf("Arial", 8);
[email protected]5b3a7e92010-10-06 22:56:47164 // The minimum font size is set to 5 in browser_main.cc.
165 ScopedMinimumFontSizeCallback minimum_size(5);
166
mboc998e8902016-06-02 11:40:35167 Font derived_font = cf.Derive(-4, cf.GetStyle(), cf.GetWeight());
[email protected]c8703bb2011-10-19 14:35:15168 EXPECT_EQ(5, derived_font.GetFontSize());
[email protected]f80821f2009-06-16 23:10:29169}
170
[email protected]01430822014-02-13 15:41:45171TEST_F(FontTest, DeriveKeepsOriginalSizeIfHeightOk) {
[email protected]610ae5f2011-10-27 23:55:37172 Font cf("Arial", 8);
[email protected]5b3a7e92010-10-06 22:56:47173 // The minimum font size is set to 5 in browser_main.cc.
174 ScopedMinimumFontSizeCallback minimum_size(5);
175
mboc998e8902016-06-02 11:40:35176 Font derived_font = cf.Derive(-2, cf.GetStyle(), cf.GetWeight());
[email protected]c8703bb2011-10-19 14:35:15177 EXPECT_EQ(6, derived_font.GetFontSize());
[email protected]f80821f2009-06-16 23:10:29178}
[email protected]23fc1152011-02-17 14:55:26179#endif // defined(OS_WIN)
180
[email protected]c6ac8412010-08-13 16:43:03181} // namespace
[email protected]6a1cac1c2012-10-29 19:58:02182} // namespace gfx