| Index: ui/views/style/typography_unittest.cc
|
| diff --git a/ui/views/style/typography_unittest.cc b/ui/views/style/typography_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e529b9752ff81a4e0dd2a8041c79ff6410c6178e
|
| --- /dev/null
|
| +++ b/ui/views/style/typography_unittest.cc
|
| @@ -0,0 +1,276 @@
|
| +// Copyright 2017 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/views/style/typography.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "ui/base/default_style.h"
|
| +#include "ui/base/resource/resource_bundle.h"
|
| +
|
| +#if defined(OS_MACOSX)
|
| +#include "base/mac/mac_util.h"
|
| +#endif
|
| +
|
| +namespace views {
|
| +
|
| +// Check legacy font sizes. No new code should be using these constants, but if
|
| +// these tests ever fail it probably means something in the old UI will have
|
| +// changed by mistake.
|
| +// Disabled since this relies on machine configuration. http://crbug.com/701241.
|
| +TEST(TypographyTest, DISABLED_LegacyFontSizeConstants) {
|
| + ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| + gfx::FontList label_font = rb.GetFontListWithDelta(ui::kLabelFontSizeDelta);
|
| +
|
| +#if defined(OS_WIN)
|
| + // On Windows, some bots say 11 and some bots say 12. This is a bad thing.
|
| + if (label_font.GetFontSize() == 11) {
|
| + EXPECT_EQ(11, label_font.GetFontSize());
|
| + EXPECT_EQ(13, label_font.GetHeight());
|
| + EXPECT_EQ(11, label_font.GetBaseline());
|
| + } else if (label_font.GetFontSize() == 12) {
|
| + EXPECT_EQ(12, label_font.GetFontSize());
|
| + EXPECT_EQ(15, label_font.GetHeight());
|
| + EXPECT_EQ(12, label_font.GetBaseline());
|
| + } else {
|
| + ADD_FAILURE() << "Label font size is not 11 or 12 on Windows.";
|
| + }
|
| + EXPECT_EQ(9, label_font.GetCapHeight());
|
| +#else
|
| + EXPECT_EQ(12, label_font.GetFontSize());
|
| + EXPECT_EQ(15, label_font.GetHeight());
|
| + EXPECT_EQ(12, label_font.GetBaseline());
|
| + EXPECT_EQ(9, label_font.GetCapHeight());
|
| +#endif
|
| +
|
| +#if defined(OS_MACOSX)
|
| + if (base::mac::IsOS10_9()) {
|
| + EXPECT_EQ(6, label_font.GetExpectedTextWidth(1));
|
| + } else {
|
| + EXPECT_EQ(10, label_font.GetExpectedTextWidth(1));
|
| + }
|
| +#elif defined(OS_WIN)
|
| + int label_font_width = label_font.GetExpectedTextWidth(1);
|
| + EXPECT_TRUE(label_font_width == 5 || label_font_width == 6);
|
| + EXPECT_EQ(6, label_font.GetExpectedTextWidth(1));
|
| +#else
|
| + EXPECT_EQ(6, label_font.GetExpectedTextWidth(1));
|
| +#endif
|
| +
|
| + int windows_fudge_delta = 0;
|
| +#if defined(OS_WIN)
|
| + windows_fudge_delta = label_font.GetFontSize() == 11 ? 1 : 0;
|
| +#endif
|
| +
|
| + gfx::FontList title_font =
|
| + rb.GetFontListWithDelta(ui::kTitleFontSizeDelta + windows_fudge_delta);
|
| +
|
| +#if defined(OS_WIN)
|
| + EXPECT_EQ(15, title_font.GetFontSize());
|
| + EXPECT_EQ(20, title_font.GetHeight());
|
| + EXPECT_EQ(16, title_font.GetBaseline());
|
| + EXPECT_EQ(11, title_font.GetCapHeight());
|
| +#elif defined(OS_MACOSX)
|
| + EXPECT_EQ(14, title_font.GetFontSize());
|
| + EXPECT_EQ(17, title_font.GetHeight());
|
| + EXPECT_EQ(14, title_font.GetBaseline());
|
| + if (base::mac::IsOS10_9()) {
|
| + EXPECT_EQ(11, title_font.GetCapHeight());
|
| + } else {
|
| + EXPECT_EQ(10, title_font.GetCapHeight());
|
| + }
|
| +#else
|
| + EXPECT_EQ(15, title_font.GetFontSize());
|
| + EXPECT_EQ(18, title_font.GetHeight());
|
| + EXPECT_EQ(14, title_font.GetBaseline());
|
| + EXPECT_EQ(11, title_font.GetCapHeight());
|
| +#endif
|
| +
|
| +#if defined(OS_MACOSX)
|
| + if (base::mac::IsOS10_9()) {
|
| + EXPECT_EQ(7, title_font.GetExpectedTextWidth(1));
|
| + } else {
|
| + EXPECT_EQ(12, title_font.GetExpectedTextWidth(1));
|
| + }
|
| +#elif defined(OS_WIN)
|
| + int title_font_width = title_font.GetExpectedTextWidth(1);
|
| + EXPECT_TRUE(title_font_width == 6 || title_font_width == 8); // Weird.
|
| + EXPECT_EQ(8, title_font.GetExpectedTextWidth(1));
|
| +#else
|
| + EXPECT_EQ(8, title_font.GetExpectedTextWidth(1));
|
| +#endif
|
| +
|
| + gfx::FontList small_font = rb.GetFontList(ResourceBundle::SmallFont);
|
| + gfx::FontList base_font = rb.GetFontList(ResourceBundle::BaseFont);
|
| + gfx::FontList bold_font = rb.GetFontList(ResourceBundle::BoldFont);
|
| + gfx::FontList medium_font = rb.GetFontList(ResourceBundle::MediumFont);
|
| + gfx::FontList medium_bold_font =
|
| + rb.GetFontList(ResourceBundle::MediumBoldFont);
|
| + gfx::FontList large_font = rb.GetFontList(ResourceBundle::LargeFont);
|
| +
|
| +#if defined(OS_MACOSX)
|
| + EXPECT_EQ(12, small_font.GetFontSize());
|
| + EXPECT_EQ(13, base_font.GetFontSize());
|
| + EXPECT_EQ(13, bold_font.GetFontSize());
|
| + EXPECT_EQ(16, medium_font.GetFontSize());
|
| + EXPECT_EQ(16, medium_bold_font.GetFontSize());
|
| + EXPECT_EQ(21, large_font.GetFontSize());
|
| +#else
|
| + EXPECT_EQ(11 - windows_fudge_delta, small_font.GetFontSize());
|
| + EXPECT_EQ(12 - windows_fudge_delta, base_font.GetFontSize());
|
| + EXPECT_EQ(12 - windows_fudge_delta, bold_font.GetFontSize());
|
| + EXPECT_EQ(15 - windows_fudge_delta, medium_font.GetFontSize());
|
| + EXPECT_EQ(15 - windows_fudge_delta, medium_bold_font.GetFontSize());
|
| + EXPECT_EQ(20 - windows_fudge_delta, large_font.GetFontSize());
|
| +#endif
|
| +}
|
| +
|
| +// Check that asking for fonts of a given size match the Harmony spec.
|
| +// Disabled since this relies on machine configuration. http://crbug.com/701241.
|
| +TEST(TypographyTest, DISABLED_RequestFontBySize) {
|
| +#if defined(OS_MACOSX)
|
| + constexpr int kBase = 13;
|
| +#else
|
| + constexpr int kBase = 12;
|
| +#endif
|
| + // Harmony spec.
|
| + constexpr int kHeadline = 20;
|
| + constexpr int kTitle = 15; // Leading 22.
|
| + constexpr int kBody1 = 13; // Leading 20.
|
| + constexpr int kBody2 = 12; // Leading 20.
|
| + constexpr int kButton = 12;
|
| +
|
| + // Cater for bots that report 11 as the base font size rather than 12.
|
| + int windows_fudge_delta = 0;
|
| +
|
| +#if defined(OS_WIN)
|
| + constexpr gfx::Font::Weight kButtonWeight = gfx::Font::Weight::BOLD;
|
| + windows_fudge_delta = gfx::FontList().GetFontSize() == 11 ? 1 : 0;
|
| +#else
|
| + constexpr gfx::Font::Weight kButtonWeight = gfx::Font::Weight::MEDIUM;
|
| +#endif
|
| +
|
| + ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| +
|
| + gfx::FontList headline_font =
|
| + rb.GetFontListWithDelta(kHeadline - kBase + windows_fudge_delta);
|
| + gfx::FontList title_font =
|
| + rb.GetFontListWithDelta(kTitle - kBase + windows_fudge_delta);
|
| + gfx::FontList body1_font =
|
| + rb.GetFontListWithDelta(kBody1 - kBase + windows_fudge_delta);
|
| + gfx::FontList body2_font =
|
| + rb.GetFontListWithDelta(kBody2 - kBase + windows_fudge_delta);
|
| + gfx::FontList button_font = rb.GetFontListWithDelta(
|
| + kButton - kBase + windows_fudge_delta, gfx::Font::NORMAL, kButtonWeight);
|
| +
|
| + // The following checks on leading don't need to match the spec. Instead, it
|
| + // means Label::SetLineHeight() needs to be used to increase it. But what we
|
| + // are really interested in is the delta between GetFontSize() and GetHeight()
|
| + // since that (plus a fixed constant) determines how the leading should change
|
| + // when a larger font is configured in the OS.
|
| +
|
| + EXPECT_EQ(kHeadline, headline_font.GetFontSize());
|
| +
|
| +// Headline leading not specified (multiline should be rare).
|
| +#if defined(OS_MACOSX)
|
| + EXPECT_EQ(25, headline_font.GetHeight());
|
| +#elif defined(OS_WIN)
|
| + EXPECT_EQ(28, headline_font.GetHeight());
|
| +#else
|
| + EXPECT_EQ(24, headline_font.GetHeight());
|
| +#endif
|
| +
|
| + EXPECT_EQ(kTitle, title_font.GetFontSize());
|
| +
|
| +// Title font leading should be 22.
|
| +#if defined(OS_MACOSX)
|
| + EXPECT_EQ(19, title_font.GetHeight()); // i.e. Add 3 to obtain line height.
|
| +#elif defined(OS_WIN)
|
| + EXPECT_EQ(20, title_font.GetHeight()); // Add 2.
|
| +#else
|
| + EXPECT_EQ(18, title_font.GetHeight()); // Add 4.
|
| +#endif
|
| +
|
| + EXPECT_EQ(kBody1, body1_font.GetFontSize());
|
| +
|
| +// Body1 font leading should be 20.
|
| +#if defined(OS_MACOSX)
|
| + EXPECT_EQ(16, body1_font.GetHeight()); // Add 4.
|
| +#else // Win and Linux.
|
| + EXPECT_EQ(17, body1_font.GetHeight()); // Add 3.
|
| +#endif
|
| +
|
| + EXPECT_EQ(kBody2, body2_font.GetFontSize());
|
| +
|
| + // Body2 font leading should be 20.
|
| + EXPECT_EQ(15, body2_font.GetHeight()); // All platforms: Add 5.
|
| +
|
| + EXPECT_EQ(kButton, button_font.GetFontSize());
|
| +
|
| + // Button leading not specified (shouldn't be needed: no multiline buttons).
|
| + EXPECT_EQ(15, button_font.GetHeight());
|
| +}
|
| +
|
| +// Test that the default TypographyProivder correctly maps TextContexts relative
|
| +// to the "base" font in the manner that legacy toolkit-views code expects. This
|
| +// reads the base font configuration at runtime, and only tests font sizes, so
|
| +// should be robust against platform changes.
|
| +TEST(TypographyTest, FontSizeRelativeToBase) {
|
| + constexpr TextStyle kStyle = TextStyle::PRIMARY;
|
| +
|
| +// Legacy code measures everything relative to a default-constructed FontList.
|
| +// On Mac, subtract one since that is 13pt instead of 12pt.
|
| +#if defined(OS_MACOSX)
|
| + const int kTwelve = gfx::FontList().GetFontSize() - 1;
|
| +#else
|
| + const int kTwelve = gfx::FontList().GetFontSize();
|
| +#endif
|
| +
|
| +#if 0
|
| + EXPECT_EQ(kTwelve, Typography::GetFont(TextContext::DIALOG_TEXT_SMALL, kStyle)
|
| + .GetFontSize());
|
| +#endif
|
| + EXPECT_EQ(
|
| + kTwelve,
|
| + Typography::GetFont(TextContext::CONTROL_LABEL, kStyle).GetFontSize());
|
| + EXPECT_EQ(kTwelve,
|
| + Typography::GetFont(TextContext::FIELD, kStyle).GetFontSize());
|
| + EXPECT_EQ(
|
| + kTwelve,
|
| + Typography::GetFont(TextContext::BUTTON_TEXT, kStyle).GetFontSize());
|
| +
|
| +#if defined(OS_MACOSX)
|
| + // We never exposed UI on Mac using these constants so it doesn't matter that
|
| + // they are different. They only need to match under Harmony.
|
| + EXPECT_EQ(kTwelve + 9,
|
| + Typography::GetFont(TextContext::HEADLINE, kStyle).GetFontSize());
|
| + EXPECT_EQ(
|
| + kTwelve + 2,
|
| + Typography::GetFont(TextContext::DIALOG_TITLE, kStyle).GetFontSize());
|
| + EXPECT_EQ(
|
| + kTwelve + 2,
|
| + Typography::GetFont(TextContext::DIALOG_MESSAGE, kStyle).GetFontSize());
|
| +#if 0
|
| + EXPECT_EQ(
|
| + kTwelve,
|
| + Typography::GetFont(TextContext::DEPRECATED_SMALL, kStyle).GetFontSize());
|
| +#endif
|
| +#else
|
| + // E.g. Headline should give a 20pt font.
|
| + EXPECT_EQ(kTwelve + 8,
|
| + Typography::GetFont(TextContext::HEADLINE, kStyle).GetFontSize());
|
| + // Titles should be 15pt. Etc.
|
| + EXPECT_EQ(
|
| + kTwelve + 3,
|
| + Typography::GetFont(TextContext::DIALOG_TITLE, kStyle).GetFontSize());
|
| + EXPECT_EQ(
|
| + kTwelve + 1,
|
| + Typography::GetFont(TextContext::DIALOG_MESSAGE, kStyle).GetFontSize());
|
| +#if 0
|
| + EXPECT_EQ(
|
| + kTwelve - 1,
|
| + Typography::GetFont(TextContext::DEPRECATED_SMALL, kStyle).GetFontSize());
|
| +#endif
|
| +#endif
|
| +}
|
| +
|
| +} // namespace views
|
|
|