This source file includes following definitions.
- FontToString
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
- TEST
 
#include "ui/gfx/font_list.h"
#include <algorithm>
#include <string>
#include <vector>
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
std::string FontToString(const gfx::Font& font) {
  std::string font_string = font.GetFontName();
  font_string += "|";
  font_string += base::IntToString(font.GetFontSize());
  int style = font.GetStyle();
  if (style & gfx::Font::BOLD)
    font_string += "|bold";
  if (style & gfx::Font::ITALIC)
    font_string += "|italic";
  if (style & gfx::Font::UNDERLINE)
    font_string += "|underline";
  return font_string;
}
}  
namespace gfx {
TEST(FontListTest, FontDescString_FromDescString) {
  
  FontList font_list = FontList("Droid Sans serif, Sans serif, 10px");
  EXPECT_EQ("Droid Sans serif, Sans serif, 10px",
            font_list.GetFontDescriptionString());
}
TEST(FontListTest, FontDescString_FromFontNamesStyleAndSize) {
  
  std::vector<std::string> font_names;
  font_names.push_back("Arial");
  font_names.push_back("Droid Sans serif");
  int font_style = Font::BOLD | Font::ITALIC | Font::UNDERLINE;
  int font_size = 11;
  FontList font_list = FontList(font_names, font_style, font_size);
  
  EXPECT_EQ("Arial,Droid Sans serif,Bold Italic 11px",
            font_list.GetFontDescriptionString());
}
TEST(FontListTest, FontDescString_FromFont) {
  
  Font font("Arial", 8);
  FontList font_list = FontList(font);
  EXPECT_EQ("Arial,8px", font_list.GetFontDescriptionString());
}
TEST(FontListTest, FontDescString_FromFontWithNonNormalStyle) {
  
  Font font("Arial", 8);
  FontList font_list = FontList(font.Derive(2, Font::BOLD));
  EXPECT_EQ("Arial,Bold 10px", font_list.GetFontDescriptionString());
  font_list = FontList(font.Derive(-2, Font::ITALIC));
  EXPECT_EQ("Arial,Italic 6px", font_list.GetFontDescriptionString());
  
  font_list = FontList(font.Derive(-4, Font::UNDERLINE));
  EXPECT_EQ("Arial,4px", font_list.GetFontDescriptionString());
}
TEST(FontListTest, FontDescString_FromFontVector) {
  
  Font font("Arial", 8);
  Font font_1("Sans serif", 10);
  std::vector<Font> fonts;
  fonts.push_back(font.Derive(0, Font::BOLD));
  fonts.push_back(font_1.Derive(-2, Font::BOLD));
  FontList font_list = FontList(fonts);
  EXPECT_EQ("Arial,Sans serif,Bold 8px", font_list.GetFontDescriptionString());
}
TEST(FontListTest, Fonts_FromDescString) {
  
  FontList font_list = FontList("serif,Sans serif, 13px");
  const std::vector<Font>& fonts = font_list.GetFonts();
  EXPECT_EQ(2U, fonts.size());
  EXPECT_EQ("serif|13", FontToString(fonts[0]));
  EXPECT_EQ("Sans serif|13", FontToString(fonts[1]));
}
TEST(FontListTest, Fonts_FromDescStringInFlexibleFormat) {
  
  FontList font_list = FontList("  serif   ,   Sans serif ,   13px");
  const std::vector<Font>& fonts = font_list.GetFonts();
  EXPECT_EQ(2U, fonts.size());
  EXPECT_EQ("serif|13", FontToString(fonts[0]));
  EXPECT_EQ("Sans serif|13", FontToString(fonts[1]));
}
TEST(FontListTest, Fonts_FromDescStringWithStyleInFlexibleFormat) {
  
  FontList font_list = FontList("  serif  ,  Sans serif ,  Bold   "
                                "  Italic   13px");
  const std::vector<Font>& fonts = font_list.GetFonts();
  EXPECT_EQ(2U, fonts.size());
  EXPECT_EQ("serif|13|bold|italic", FontToString(fonts[0]));
  EXPECT_EQ("Sans serif|13|bold|italic", FontToString(fonts[1]));
}
TEST(FontListTest, Fonts_FromFont) {
  
  Font font("Arial", 8);
  FontList font_list = FontList(font);
  const std::vector<Font>& fonts = font_list.GetFonts();
  EXPECT_EQ(1U, fonts.size());
  EXPECT_EQ("Arial|8", FontToString(fonts[0]));
}
TEST(FontListTest, Fonts_FromFontWithNonNormalStyle) {
  
  Font font("Arial", 8);
  FontList font_list = FontList(font.Derive(2, Font::BOLD));
  std::vector<Font> fonts = font_list.GetFonts();
  EXPECT_EQ(1U, fonts.size());
  EXPECT_EQ("Arial|10|bold", FontToString(fonts[0]));
  font_list = FontList(font.Derive(-2, Font::ITALIC));
  fonts = font_list.GetFonts();
  EXPECT_EQ(1U, fonts.size());
  EXPECT_EQ("Arial|6|italic", FontToString(fonts[0]));
}
TEST(FontListTest, Fonts_FromFontVector) {
  
  Font font("Arial", 8);
  Font font_1("Sans serif", 10);
  std::vector<Font> input_fonts;
  input_fonts.push_back(font.Derive(0, Font::BOLD));
  input_fonts.push_back(font_1.Derive(-2, Font::BOLD));
  FontList font_list = FontList(input_fonts);
  const std::vector<Font>& fonts = font_list.GetFonts();
  EXPECT_EQ(2U, fonts.size());
  EXPECT_EQ("Arial|8|bold", FontToString(fonts[0]));
  EXPECT_EQ("Sans serif|8|bold", FontToString(fonts[1]));
}
TEST(FontListTest, Fonts_DescStringWithStyleInFlexibleFormat_RoundTrip) {
  
  
  FontList font_list = FontList("  serif  ,  Sans serif ,  Bold   "
                                "  Italic   13px");
  const std::vector<Font>& fonts = font_list.GetFonts();
  FontList font_list_1 = FontList(fonts);
  const std::string& desc_str = font_list_1.GetFontDescriptionString();
  EXPECT_EQ("serif,Sans serif,Bold Italic 13px", desc_str);
}
TEST(FontListTest, Fonts_FontVector_RoundTrip) {
  
  Font font("Arial", 8);
  Font font_1("Sans serif", 10);
  std::vector<Font> input_fonts;
  input_fonts.push_back(font.Derive(0, Font::BOLD));
  input_fonts.push_back(font_1.Derive(-2, Font::BOLD));
  FontList font_list = FontList(input_fonts);
  const std::string& desc_string = font_list.GetFontDescriptionString();
  FontList font_list_1 = FontList(desc_string);
  const std::vector<Font>& round_trip_fonts = font_list_1.GetFonts();
  EXPECT_EQ(2U, round_trip_fonts.size());
  EXPECT_EQ("Arial|8|bold", FontToString(round_trip_fonts[0]));
  EXPECT_EQ("Sans serif|8|bold", FontToString(round_trip_fonts[1]));
}
TEST(FontListTest, FontDescString_GetStyle) {
  FontList font_list = FontList("Arial,Sans serif, 8px");
  EXPECT_EQ(Font::NORMAL, font_list.GetFontStyle());
  font_list = FontList("Arial,Sans serif,Bold 8px");
  EXPECT_EQ(Font::BOLD, font_list.GetFontStyle());
  font_list = FontList("Arial,Sans serif,Italic 8px");
  EXPECT_EQ(Font::ITALIC, font_list.GetFontStyle());
  font_list = FontList("Arial,Italic Bold 8px");
  EXPECT_EQ(Font::BOLD | Font::ITALIC, font_list.GetFontStyle());
}
TEST(FontListTest, Fonts_GetStyle) {
  std::vector<Font> fonts;
  fonts.push_back(gfx::Font("Arial", 8));
  fonts.push_back(gfx::Font("Sans serif", 8));
  FontList font_list = FontList(fonts);
  EXPECT_EQ(Font::NORMAL, font_list.GetFontStyle());
  fonts[0] = fonts[0].Derive(0, Font::ITALIC | Font::BOLD);
  fonts[1] = fonts[1].Derive(0, Font::ITALIC | Font::BOLD);
  font_list = FontList(fonts);
  EXPECT_EQ(Font::ITALIC | Font::BOLD, font_list.GetFontStyle());
}
TEST(FontListTest, FontDescString_Derive) {
  FontList font_list = FontList("Arial,Sans serif,Bold Italic 8px");
  FontList derived = font_list.Derive(10, Font::ITALIC | Font::UNDERLINE);
  EXPECT_EQ("Arial,Sans serif,Italic 18px", derived.GetFontDescriptionString());
  EXPECT_EQ(Font::ITALIC | Font::UNDERLINE, derived.GetFontStyle());
  
  
  derived.GetFonts();
  EXPECT_EQ(Font::ITALIC | Font::UNDERLINE, derived.GetFontStyle());
}
TEST(FontListTest, Fonts_Derive) {
  std::vector<Font> fonts;
  fonts.push_back(gfx::Font("Arial", 8));
  fonts.push_back(gfx::Font("Sans serif", 8));
  FontList font_list = FontList(fonts);
  FontList derived = font_list.Derive(5, Font::BOLD | Font::UNDERLINE);
  const std::vector<Font>& derived_fonts = derived.GetFonts();
  EXPECT_EQ(2U, derived_fonts.size());
  EXPECT_EQ("Arial|13|bold|underline", FontToString(derived_fonts[0]));
  EXPECT_EQ("Sans serif|13|bold|underline", FontToString(derived_fonts[1]));
}
TEST(FontListTest, FontDescString_DeriveWithSizeDelta) {
  FontList font_list = FontList("Arial,Sans serif,Bold 18px");
  FontList derived = font_list.DeriveWithSizeDelta(-8);
  EXPECT_EQ("Arial,Sans serif,Bold 10px",
            derived.GetFontDescriptionString());
}
TEST(FontListTest, Fonts_DeriveWithSizeDelta) {
  std::vector<Font> fonts;
  fonts.push_back(gfx::Font("Arial", 18).Derive(0, Font::ITALIC));
  fonts.push_back(gfx::Font("Sans serif", 18).Derive(0, Font::ITALIC));
  FontList font_list = FontList(fonts);
  FontList derived = font_list.DeriveWithSizeDelta(-5);
  const std::vector<Font>& derived_fonts = derived.GetFonts();
  EXPECT_EQ(2U, derived_fonts.size());
  EXPECT_EQ("Arial|13|italic", FontToString(derived_fonts[0]));
  EXPECT_EQ("Sans serif|13|italic", FontToString(derived_fonts[1]));
}
TEST(FontListTest, Fonts_GetHeight_GetBaseline) {
  
  Font font1("Arial", 16);
  ASSERT_EQ("arial", StringToLowerASCII(font1.GetActualFontNameForTesting()));
  FontList font_list1("Arial, 16px");
  EXPECT_EQ(font1.GetHeight(), font_list1.GetHeight());
  EXPECT_EQ(font1.GetBaseline(), font_list1.GetBaseline());
  
  
  Font font2("Symbol", 16);
  ASSERT_EQ("symbol", StringToLowerASCII(font2.GetActualFontNameForTesting()));
  EXPECT_NE(font1.GetBaseline(), font2.GetBaseline());
  EXPECT_NE(font1.GetHeight() - font1.GetBaseline(),
            font2.GetHeight() - font2.GetBaseline());
  std::vector<Font> fonts;
  fonts.push_back(font1);
  fonts.push_back(font2);
  FontList font_list_mix(fonts);
  
  EXPECT_EQ(std::max(font1.GetHeight() - font1.GetBaseline(),
                     font2.GetHeight() - font2.GetBaseline()),
            font_list_mix.GetHeight() - font_list_mix.GetBaseline());
  
  EXPECT_EQ(std::max(font1.GetBaseline(), font2.GetBaseline()),
            font_list_mix.GetBaseline());
}
}