Index: ui/gfx/font_render_params_linux_unittest.cc |
diff --git a/ui/gfx/font_render_params_linux_unittest.cc b/ui/gfx/font_render_params_linux_unittest.cc |
deleted file mode 100644 |
index a9b230f748f689cd009a8cfe57cd0e9f49e7e806..0000000000000000000000000000000000000000 |
--- a/ui/gfx/font_render_params_linux_unittest.cc |
+++ /dev/null |
@@ -1,383 +0,0 @@ |
-// Copyright 2014 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_render_params.h" |
- |
-#include "base/files/file_path.h" |
-#include "base/files/scoped_temp_dir.h" |
-#include "base/logging.h" |
-#include "base/macros.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "ui/gfx/font.h" |
-#include "ui/gfx/linux_font_delegate.h" |
-#include "ui/gfx/pango_util.h" |
-#include "ui/gfx/test/fontconfig_util_linux.h" |
- |
-namespace gfx { |
- |
-namespace { |
- |
-// Implementation of LinuxFontDelegate that returns a canned FontRenderParams |
-// struct. This is used to isolate tests from the system's local configuration. |
-class TestFontDelegate : public LinuxFontDelegate { |
- public: |
- TestFontDelegate() {} |
- virtual ~TestFontDelegate() {} |
- |
- void set_params(const FontRenderParams& params) { params_ = params; } |
- |
- virtual FontRenderParams GetDefaultFontRenderParams() const override { |
- return params_; |
- } |
- virtual scoped_ptr<ScopedPangoFontDescription> |
- GetDefaultPangoFontDescription() const override { |
- NOTIMPLEMENTED(); |
- return scoped_ptr<ScopedPangoFontDescription>(); |
- } |
- virtual double GetFontDPI() const override { |
- NOTIMPLEMENTED(); |
- return 96.0; |
- } |
- |
- private: |
- FontRenderParams params_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TestFontDelegate); |
-}; |
- |
-// Loads the first system font defined by fontconfig_util_linux.h with a base |
-// filename of |basename|. Case is ignored. |
-bool LoadSystemFont(const std::string& basename) { |
- for (size_t i = 0; i < kNumSystemFontsForFontconfig; ++i) { |
- base::FilePath path(gfx::kSystemFontsForFontconfig[i]); |
- if (strcasecmp(path.BaseName().value().c_str(), basename.c_str()) == 0) |
- return LoadFontIntoFontconfig(path); |
- } |
- LOG(ERROR) << "Unable to find system font named " << basename; |
- return false; |
-} |
- |
-} // namespace |
- |
-class FontRenderParamsTest : public testing::Test { |
- public: |
- FontRenderParamsTest() { |
- SetUpFontconfig(); |
- CHECK(temp_dir_.CreateUniqueTempDir()); |
- original_font_delegate_ = LinuxFontDelegate::instance(); |
- LinuxFontDelegate::SetInstance(&test_font_delegate_); |
- ClearFontRenderParamsCacheForTest(); |
- } |
- |
- virtual ~FontRenderParamsTest() { |
- LinuxFontDelegate::SetInstance( |
- const_cast<LinuxFontDelegate*>(original_font_delegate_)); |
- TearDownFontconfig(); |
- } |
- |
- protected: |
- base::ScopedTempDir temp_dir_; |
- const LinuxFontDelegate* original_font_delegate_; |
- TestFontDelegate test_font_delegate_; |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(FontRenderParamsTest); |
-}; |
- |
-TEST_F(FontRenderParamsTest, Default) { |
- // Fontconfig needs to know about at least one font to return a match. |
- ASSERT_TRUE(LoadSystemFont("arial.ttf")); |
- ASSERT_TRUE(LoadConfigDataIntoFontconfig(temp_dir_.path(), |
- std::string(kFontconfigFileHeader) + |
- kFontconfigMatchHeader + |
- CreateFontconfigEditStanza("antialias", "bool", "true") + |
- CreateFontconfigEditStanza("autohint", "bool", "false") + |
- CreateFontconfigEditStanza("hinting", "bool", "true") + |
- CreateFontconfigEditStanza("hintstyle", "const", "hintfull") + |
- CreateFontconfigEditStanza("rgba", "const", "rgb") + |
- kFontconfigMatchFooter + |
- kFontconfigFileFooter)); |
- |
- FontRenderParams params = GetFontRenderParams( |
- FontRenderParamsQuery(true), NULL); |
- EXPECT_TRUE(params.antialiasing); |
- EXPECT_FALSE(params.autohinter); |
- EXPECT_TRUE(params.use_bitmaps); |
- EXPECT_EQ(FontRenderParams::HINTING_FULL, params.hinting); |
- EXPECT_FALSE(params.subpixel_positioning); |
- EXPECT_EQ(FontRenderParams::SUBPIXEL_RENDERING_RGB, |
- params.subpixel_rendering); |
-} |
- |
-TEST_F(FontRenderParamsTest, Size) { |
- ASSERT_TRUE(LoadSystemFont("arial.ttf")); |
- ASSERT_TRUE(LoadConfigDataIntoFontconfig(temp_dir_.path(), |
- std::string(kFontconfigFileHeader) + |
- kFontconfigMatchHeader + |
- CreateFontconfigEditStanza("antialias", "bool", "true") + |
- CreateFontconfigEditStanza("hinting", "bool", "true") + |
- CreateFontconfigEditStanza("hintstyle", "const", "hintfull") + |
- CreateFontconfigEditStanza("rgba", "const", "none") + |
- kFontconfigMatchFooter + |
- kFontconfigMatchHeader + |
- CreateFontconfigTestStanza("pixelsize", "less_eq", "double", "10") + |
- CreateFontconfigEditStanza("antialias", "bool", "false") + |
- kFontconfigMatchFooter + |
- kFontconfigMatchHeader + |
- CreateFontconfigTestStanza("size", "more_eq", "double", "20") + |
- CreateFontconfigEditStanza("hintstyle", "const", "hintslight") + |
- CreateFontconfigEditStanza("rgba", "const", "rgb") + |
- kFontconfigMatchFooter + |
- kFontconfigFileFooter)); |
- |
- // The defaults should be used when the supplied size isn't matched by the |
- // second or third blocks. |
- FontRenderParamsQuery query(false); |
- query.pixel_size = 12; |
- FontRenderParams params = GetFontRenderParams(query, NULL); |
- EXPECT_TRUE(params.antialiasing); |
- EXPECT_EQ(FontRenderParams::HINTING_FULL, params.hinting); |
- EXPECT_EQ(FontRenderParams::SUBPIXEL_RENDERING_NONE, |
- params.subpixel_rendering); |
- |
- query.pixel_size = 10; |
- params = GetFontRenderParams(query, NULL); |
- EXPECT_FALSE(params.antialiasing); |
- EXPECT_EQ(FontRenderParams::HINTING_FULL, params.hinting); |
- EXPECT_EQ(FontRenderParams::SUBPIXEL_RENDERING_NONE, |
- params.subpixel_rendering); |
- |
- query.pixel_size = 0; |
- query.point_size = 20; |
- params = GetFontRenderParams(query, NULL); |
- EXPECT_TRUE(params.antialiasing); |
- EXPECT_EQ(FontRenderParams::HINTING_SLIGHT, params.hinting); |
- EXPECT_EQ(FontRenderParams::SUBPIXEL_RENDERING_RGB, |
- params.subpixel_rendering); |
-} |
- |
-TEST_F(FontRenderParamsTest, Style) { |
- ASSERT_TRUE(LoadSystemFont("arial.ttf")); |
- // Load a config that disables subpixel rendering for bold text and disables |
- // hinting for italic text. |
- ASSERT_TRUE(LoadConfigDataIntoFontconfig(temp_dir_.path(), |
- std::string(kFontconfigFileHeader) + |
- kFontconfigMatchHeader + |
- CreateFontconfigEditStanza("antialias", "bool", "true") + |
- CreateFontconfigEditStanza("hinting", "bool", "true") + |
- CreateFontconfigEditStanza("hintstyle", "const", "hintslight") + |
- CreateFontconfigEditStanza("rgba", "const", "rgb") + |
- kFontconfigMatchFooter + |
- kFontconfigMatchHeader + |
- CreateFontconfigTestStanza("weight", "eq", "const", "bold") + |
- CreateFontconfigEditStanza("rgba", "const", "none") + |
- kFontconfigMatchFooter + |
- kFontconfigMatchHeader + |
- CreateFontconfigTestStanza("slant", "eq", "const", "italic") + |
- CreateFontconfigEditStanza("hinting", "bool", "false") + |
- kFontconfigMatchFooter + |
- kFontconfigFileFooter)); |
- |
- FontRenderParamsQuery query(false); |
- query.style = Font::NORMAL; |
- FontRenderParams params = GetFontRenderParams(query, NULL); |
- EXPECT_EQ(FontRenderParams::HINTING_SLIGHT, params.hinting); |
- EXPECT_EQ(FontRenderParams::SUBPIXEL_RENDERING_RGB, |
- params.subpixel_rendering); |
- |
- query.style = Font::BOLD; |
- params = GetFontRenderParams(query, NULL); |
- EXPECT_EQ(FontRenderParams::HINTING_SLIGHT, params.hinting); |
- EXPECT_EQ(FontRenderParams::SUBPIXEL_RENDERING_NONE, |
- params.subpixel_rendering); |
- |
- query.style = Font::ITALIC; |
- params = GetFontRenderParams(query, NULL); |
- EXPECT_EQ(FontRenderParams::HINTING_NONE, params.hinting); |
- EXPECT_EQ(FontRenderParams::SUBPIXEL_RENDERING_RGB, |
- params.subpixel_rendering); |
- |
- query.style = Font::BOLD | Font::ITALIC; |
- params = GetFontRenderParams(query, NULL); |
- EXPECT_EQ(FontRenderParams::HINTING_NONE, params.hinting); |
- EXPECT_EQ(FontRenderParams::SUBPIXEL_RENDERING_NONE, |
- params.subpixel_rendering); |
-} |
- |
-TEST_F(FontRenderParamsTest, Scalable) { |
- ASSERT_TRUE(LoadSystemFont("arial.ttf")); |
- // Load a config that only enables antialiasing for scalable fonts. |
- ASSERT_TRUE(LoadConfigDataIntoFontconfig(temp_dir_.path(), |
- std::string(kFontconfigFileHeader) + |
- kFontconfigMatchHeader + |
- CreateFontconfigEditStanza("antialias", "bool", "false") + |
- kFontconfigMatchFooter + |
- kFontconfigMatchHeader + |
- CreateFontconfigTestStanza("scalable", "eq", "bool", "true") + |
- CreateFontconfigEditStanza("antialias", "bool", "true") + |
- kFontconfigMatchFooter + |
- kFontconfigFileFooter)); |
- |
- // Check that we specifically ask how scalable fonts should be rendered. |
- FontRenderParams params = GetFontRenderParams( |
- FontRenderParamsQuery(false), NULL); |
- EXPECT_TRUE(params.antialiasing); |
-} |
- |
-TEST_F(FontRenderParamsTest, UseBitmaps) { |
- ASSERT_TRUE(LoadSystemFont("arial.ttf")); |
- // Load a config that enables embedded bitmaps for fonts <= 10 pixels. |
- ASSERT_TRUE(LoadConfigDataIntoFontconfig(temp_dir_.path(), |
- std::string(kFontconfigFileHeader) + |
- kFontconfigMatchHeader + |
- CreateFontconfigEditStanza("embeddedbitmap", "bool", "false") + |
- kFontconfigMatchFooter + |
- kFontconfigMatchHeader + |
- CreateFontconfigTestStanza("pixelsize", "less_eq", "double", "10") + |
- CreateFontconfigEditStanza("embeddedbitmap", "bool", "true") + |
- kFontconfigMatchFooter + |
- kFontconfigFileFooter)); |
- |
- FontRenderParamsQuery query(false); |
- FontRenderParams params = GetFontRenderParams(query, NULL); |
- EXPECT_FALSE(params.use_bitmaps); |
- |
- query.pixel_size = 5; |
- params = GetFontRenderParams(query, NULL); |
- EXPECT_TRUE(params.use_bitmaps); |
-} |
- |
-TEST_F(FontRenderParamsTest, ForceFullHintingWhenAntialiasingIsDisabled) { |
- // Load a config that disables antialiasing and hinting while requesting |
- // subpixel rendering. |
- ASSERT_TRUE(LoadSystemFont("arial.ttf")); |
- ASSERT_TRUE(LoadConfigDataIntoFontconfig(temp_dir_.path(), |
- std::string(kFontconfigFileHeader) + |
- kFontconfigMatchHeader + |
- CreateFontconfigEditStanza("antialias", "bool", "false") + |
- CreateFontconfigEditStanza("hinting", "bool", "false") + |
- CreateFontconfigEditStanza("hintstyle", "const", "hintnone") + |
- CreateFontconfigEditStanza("rgba", "const", "rgb") + |
- kFontconfigMatchFooter + |
- kFontconfigFileFooter)); |
- |
- // Full hinting should be forced. See the comment in GetFontRenderParams() for |
- // more information. |
- FontRenderParams params = GetFontRenderParams( |
- FontRenderParamsQuery(false), NULL); |
- EXPECT_FALSE(params.antialiasing); |
- EXPECT_EQ(FontRenderParams::HINTING_FULL, params.hinting); |
- EXPECT_EQ(FontRenderParams::SUBPIXEL_RENDERING_NONE, |
- params.subpixel_rendering); |
- EXPECT_FALSE(params.subpixel_positioning); |
-} |
- |
-#if defined(OS_CHROMEOS) |
-TEST_F(FontRenderParamsTest, ForceSubpixelPositioning) { |
- { |
- FontRenderParams params = |
- GetFontRenderParams(FontRenderParamsQuery(false), NULL); |
- EXPECT_TRUE(params.antialiasing); |
- EXPECT_FALSE(params.subpixel_positioning); |
- SetFontRenderParamsDeviceScaleFactor(1.0f); |
- } |
- ClearFontRenderParamsCacheForTest(); |
- SetFontRenderParamsDeviceScaleFactor(1.25f); |
- // Subpixel positioning should be forced. |
- { |
- FontRenderParams params = |
- GetFontRenderParams(FontRenderParamsQuery(false), NULL); |
- EXPECT_TRUE(params.antialiasing); |
- EXPECT_TRUE(params.subpixel_positioning); |
- SetFontRenderParamsDeviceScaleFactor(1.0f); |
- } |
-} |
-#endif |
- |
-TEST_F(FontRenderParamsTest, OnlySetConfiguredValues) { |
- // Configure the LinuxFontDelegate (which queries GtkSettings on desktop |
- // Linux) to request subpixel rendering. |
- FontRenderParams system_params; |
- system_params.subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_RGB; |
- test_font_delegate_.set_params(system_params); |
- |
- // Load a Fontconfig config that enables antialiasing but doesn't say anything |
- // about subpixel rendering. |
- ASSERT_TRUE(LoadSystemFont("arial.ttf")); |
- ASSERT_TRUE(LoadConfigDataIntoFontconfig(temp_dir_.path(), |
- std::string(kFontconfigFileHeader) + |
- kFontconfigMatchHeader + |
- CreateFontconfigEditStanza("antialias", "bool", "true") + |
- kFontconfigMatchFooter + |
- kFontconfigFileFooter)); |
- |
- // The subpixel rendering setting from the delegate should make it through. |
- FontRenderParams params = GetFontRenderParams( |
- FontRenderParamsQuery(false), NULL); |
- EXPECT_EQ(system_params.subpixel_rendering, params.subpixel_rendering); |
-} |
- |
-TEST_F(FontRenderParamsTest, NoFontconfigMatch) { |
- // Don't load a Fontconfig configuration. |
- FontRenderParams system_params; |
- system_params.antialiasing = true; |
- system_params.hinting = FontRenderParams::HINTING_MEDIUM; |
- system_params.subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_RGB; |
- test_font_delegate_.set_params(system_params); |
- |
- FontRenderParamsQuery query(false); |
- query.families.push_back("Arial"); |
- query.families.push_back("Times New Roman"); |
- query.pixel_size = 10; |
- std::string suggested_family; |
- FontRenderParams params = GetFontRenderParams(query, &suggested_family); |
- |
- // The system params and the first requested family should be returned. |
- EXPECT_EQ(system_params.antialiasing, params.antialiasing); |
- EXPECT_EQ(system_params.hinting, params.hinting); |
- EXPECT_EQ(system_params.subpixel_rendering, params.subpixel_rendering); |
- EXPECT_EQ(query.families[0], suggested_family); |
-} |
- |
-TEST_F(FontRenderParamsTest, MissingFamily) { |
- // With Arial and Verdana installed, request (in order) Helvetica, Arial, and |
- // Verdana and check that Arial is returned. |
- ASSERT_TRUE(LoadSystemFont("arial.ttf")); |
- ASSERT_TRUE(LoadSystemFont("verdana.ttf")); |
- FontRenderParamsQuery query(false); |
- query.families.push_back("Helvetica"); |
- query.families.push_back("Arial"); |
- query.families.push_back("Verdana"); |
- std::string suggested_family; |
- GetFontRenderParams(query, &suggested_family); |
- EXPECT_EQ("Arial", suggested_family); |
-} |
- |
-TEST_F(FontRenderParamsTest, SubstituteFamily) { |
- // Configure Fontconfig to use Verdana for both Helvetica and Arial. |
- ASSERT_TRUE(LoadSystemFont("arial.ttf")); |
- ASSERT_TRUE(LoadSystemFont("verdana.ttf")); |
- ASSERT_TRUE(LoadConfigDataIntoFontconfig(temp_dir_.path(), |
- std::string(kFontconfigFileHeader) + |
- CreateFontconfigAliasStanza("Helvetica", "Verdana") + |
- kFontconfigMatchHeader + |
- CreateFontconfigTestStanza("family", "eq", "string", "Arial") + |
- CreateFontconfigEditStanza("family", "string", "Verdana") + |
- kFontconfigMatchFooter + |
- kFontconfigFileFooter)); |
- |
- FontRenderParamsQuery query(false); |
- query.families.push_back("Helvetica"); |
- std::string suggested_family; |
- GetFontRenderParams(query, &suggested_family); |
- EXPECT_EQ("Verdana", suggested_family); |
- |
- query.families.clear(); |
- query.families.push_back("Arial"); |
- suggested_family.clear(); |
- GetFontRenderParams(query, &suggested_family); |
- EXPECT_EQ("Verdana", suggested_family); |
-} |
- |
-} // namespace gfx |