blob: 2552b13ee9be505a931be43b50da54294766d9fe [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);
[email protected]01430822014-02-13 15:41:4573 Font bold(cf.Derive(0, Font::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
[email protected]c831ea9c2013-10-01 10:52:2477 EXPECT_EQ(bold.GetStyle(), Font::BOLD);
brettw8e2106d2015-08-11 19:30:2278 EXPECT_EQ("arial", base::ToLowerASCII(cf.GetActualFontNameForTesting()));
[email protected]7f4bfe12008-12-12 01:52:2579}
80
tfarinab7e00dc2015-08-05 22:49:5481#if defined(OS_ANDROID)
82#define MAYBE_Ascent DISABLED_Ascent
83#else
84#define MAYBE_Ascent Ascent
85#endif
86TEST_F(FontTest, MAYBE_Ascent) {
[email protected]610ae5f2011-10-27 23:55:3787 Font cf("Arial", 16);
[email protected]c831ea9c2013-10-01 10:52:2488 EXPECT_GT(cf.GetBaseline(), 2);
89 EXPECT_LE(cf.GetBaseline(), 22);
[email protected]7f4bfe12008-12-12 01:52:2590}
91
tfarinab7e00dc2015-08-05 22:49:5492#if defined(OS_ANDROID)
93#define MAYBE_Height DISABLED_Height
94#else
95#define MAYBE_Height Height
96#endif
97TEST_F(FontTest, MAYBE_Height) {
[email protected]610ae5f2011-10-27 23:55:3798 Font cf("Arial", 16);
[email protected]c831ea9c2013-10-01 10:52:2499 EXPECT_GE(cf.GetHeight(), 16);
[email protected]4eae2c442009-11-03 23:46:26100 // TODO(akalin): Figure out why height is so large on Linux.
[email protected]c831ea9c2013-10-01 10:52:24101 EXPECT_LE(cf.GetHeight(), 26);
102}
103
tfarinab7e00dc2015-08-05 22:49:54104#if defined(OS_ANDROID)
105#define MAYBE_CapHeight DISABLED_CapHeight
106#else
107#define MAYBE_CapHeight CapHeight
108#endif
109TEST_F(FontTest, MAYBE_CapHeight) {
[email protected]c831ea9c2013-10-01 10:52:24110 Font cf("Arial", 16);
111 EXPECT_GT(cf.GetCapHeight(), 0);
112 EXPECT_GT(cf.GetCapHeight(), cf.GetHeight() / 2);
[email protected]56e50572013-11-01 14:25:31113 EXPECT_LT(cf.GetCapHeight(), cf.GetBaseline());
[email protected]7f4bfe12008-12-12 01:52:25114}
115
tfarinab7e00dc2015-08-05 22:49:54116#if defined(OS_ANDROID)
117#define MAYBE_AvgWidths DISABLED_AvgWidths
118#else
119#define MAYBE_AvgWidths AvgWidths
120#endif
121TEST_F(FontTest, MAYBE_AvgWidths) {
[email protected]610ae5f2011-10-27 23:55:37122 Font cf("Arial", 16);
[email protected]c831ea9c2013-10-01 10:52:24123 EXPECT_EQ(cf.GetExpectedTextWidth(0), 0);
124 EXPECT_GT(cf.GetExpectedTextWidth(1), cf.GetExpectedTextWidth(0));
125 EXPECT_GT(cf.GetExpectedTextWidth(2), cf.GetExpectedTextWidth(1));
126 EXPECT_GT(cf.GetExpectedTextWidth(3), cf.GetExpectedTextWidth(2));
[email protected]7f4bfe12008-12-12 01:52:25127}
128
tfarinab7e00dc2015-08-05 22:49:54129#if defined(OS_WIN) || defined(OS_ANDROID)
130#define MAYBE_GetActualFontNameForTesting DISABLED_GetActualFontNameForTesting
131#else
132#define MAYBE_GetActualFontNameForTesting GetActualFontNameForTesting
133#endif
[email protected]2fb26572013-12-11 08:43:06134// On Windows, Font::GetActualFontNameForTesting() doesn't work well for now.
135// http://crbug.com/327287
[email protected]85eb3e12014-02-27 20:44:12136//
137// Check that fonts used for testing are installed and enabled. On Mac
138// fonts may be installed but still need enabling in Font Book.app.
139// http://crbug.com/347429
tfarinab7e00dc2015-08-05 22:49:54140TEST_F(FontTest, MAYBE_GetActualFontNameForTesting) {
[email protected]2fb26572013-12-11 08:43:06141 Font arial("Arial", 16);
brettw8e2106d2015-08-11 19:30:22142 EXPECT_EQ("arial", base::ToLowerASCII(arial.GetActualFontNameForTesting()))
[email protected]85eb3e12014-02-27 20:44:12143 << "********\n"
144 << "Your test environment seems to be missing Arial font, which is "
145 << "needed for unittests. Check if Arial font is installed.\n"
146 << "********";
[email protected]2fb26572013-12-11 08:43:06147 Font symbol("Symbol", 16);
brettw8e2106d2015-08-11 19:30:22148 EXPECT_EQ("symbol", base::ToLowerASCII(symbol.GetActualFontNameForTesting()))
[email protected]85eb3e12014-02-27 20:44:12149 << "********\n"
150 << "Your test environment seems to be missing Symbol font, which is "
151 << "needed for unittests. Check if Symbol font is installed.\n"
152 << "********";
[email protected]2fb26572013-12-11 08:43:06153
154 const char* const invalid_font_name = "no_such_font_name";
155 Font fallback_font(invalid_font_name, 16);
156 EXPECT_NE(invalid_font_name,
brettw8e2106d2015-08-11 19:30:22157 base::ToLowerASCII(fallback_font.GetActualFontNameForTesting()));
[email protected]2fb26572013-12-11 08:43:06158}
[email protected]2fb26572013-12-11 08:43:06159
[email protected]f80821f2009-06-16 23:10:29160#if defined(OS_WIN)
[email protected]01430822014-02-13 15:41:45161TEST_F(FontTest, DeriveResizesIfSizeTooSmall) {
[email protected]610ae5f2011-10-27 23:55:37162 Font cf("Arial", 8);
[email protected]5b3a7e92010-10-06 22:56:47163 // The minimum font size is set to 5 in browser_main.cc.
164 ScopedMinimumFontSizeCallback minimum_size(5);
165
[email protected]01430822014-02-13 15:41:45166 Font derived_font = cf.Derive(-4, cf.GetStyle());
[email protected]c8703bb2011-10-19 14:35:15167 EXPECT_EQ(5, derived_font.GetFontSize());
[email protected]f80821f2009-06-16 23:10:29168}
169
[email protected]01430822014-02-13 15:41:45170TEST_F(FontTest, DeriveKeepsOriginalSizeIfHeightOk) {
[email protected]610ae5f2011-10-27 23:55:37171 Font cf("Arial", 8);
[email protected]5b3a7e92010-10-06 22:56:47172 // The minimum font size is set to 5 in browser_main.cc.
173 ScopedMinimumFontSizeCallback minimum_size(5);
174
[email protected]01430822014-02-13 15:41:45175 Font derived_font = cf.Derive(-2, cf.GetStyle());
[email protected]c8703bb2011-10-19 14:35:15176 EXPECT_EQ(6, derived_font.GetFontSize());
[email protected]f80821f2009-06-16 23:10:29177}
[email protected]23fc1152011-02-17 14:55:26178#endif // defined(OS_WIN)
179
[email protected]c6ac8412010-08-13 16:43:03180} // namespace
[email protected]6a1cac1c2012-10-29 19:58:02181} // namespace gfx