OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "config.h" |
| 6 #include "core/css/resolver/FontBuilder.h" |
| 7 |
| 8 #include "core/css/CSSFontSelector.h" |
| 9 #include "core/dom/Document.h" |
| 10 #include "core/dom/StyleEngine.h" |
| 11 #include "core/frame/Settings.h" |
| 12 #include "core/rendering/style/RenderStyle.h" |
| 13 #include "core/testing/DummyPageHolder.h" |
| 14 #include "platform/text/LocaleToScriptMapping.h" |
| 15 |
| 16 #include <gtest/gtest.h> |
| 17 |
| 18 namespace blink { |
| 19 |
| 20 class FontBuilderTest { |
| 21 public: |
| 22 FontBuilderTest() |
| 23 : m_dummy(DummyPageHolder::create(IntSize(800, 600))) |
| 24 { |
| 25 settings().setDefaultFontSize(16.0f); |
| 26 } |
| 27 |
| 28 Document& document() { return m_dummy->document(); } |
| 29 Settings& settings() { return *document().settings(); } |
| 30 |
| 31 private: |
| 32 OwnPtr<DummyPageHolder> m_dummy; |
| 33 }; |
| 34 |
| 35 typedef void (*BuilderFunc)(FontBuilder&); |
| 36 typedef void (*DescriptionFunc)(FontDescription&); |
| 37 |
| 38 struct FunctionPair { |
| 39 FunctionPair(DescriptionFunc base, BuilderFunc value) |
| 40 : setBaseValue(base) |
| 41 , setValue(value) |
| 42 { |
| 43 } |
| 44 |
| 45 DescriptionFunc setBaseValue; |
| 46 BuilderFunc setValue; |
| 47 }; |
| 48 |
| 49 class FontBuilderInitTest : public FontBuilderTest, public ::testing::Test { }; |
| 50 class FontBuilderAdditiveTest : public FontBuilderTest, public ::testing::TestWi
thParam<FunctionPair> { }; |
| 51 |
| 52 TEST_F(FontBuilderInitTest, InitialFontSizeNotScaled) |
| 53 { |
| 54 RefPtr<RenderStyle> initial = RenderStyle::create(); |
| 55 |
| 56 FontBuilder builder(document()); |
| 57 builder.setInitial(1.0f); // FIXME: Remove unused param. |
| 58 builder.createFont(document().styleEngine()->fontSelector(), initial.get()); |
| 59 |
| 60 EXPECT_EQ(16.0f, initial->fontDescription().computedSize()); |
| 61 } |
| 62 |
| 63 TEST_F(FontBuilderInitTest, NotDirty) |
| 64 { |
| 65 FontBuilder builder(document()); |
| 66 ASSERT_FALSE(builder.fontDirty()); |
| 67 } |
| 68 |
| 69 // This test verifies that when you are setting some field F via FontBuilder, |
| 70 // only F is actually modified on the incoming RenderStyle::fontDescription. |
| 71 TEST_P(FontBuilderAdditiveTest, OnlySetValueIsModified) |
| 72 { |
| 73 FunctionPair funcs = GetParam(); |
| 74 |
| 75 FontDescription parentDescription; |
| 76 funcs.setBaseValue(parentDescription); |
| 77 |
| 78 RefPtr<RenderStyle> style = RenderStyle::create(); |
| 79 style->setFontDescription(parentDescription); |
| 80 |
| 81 FontBuilder fontBuilder(document()); |
| 82 funcs.setValue(fontBuilder); |
| 83 fontBuilder.createFont(document().styleEngine()->fontSelector(), style.get()
); |
| 84 |
| 85 FontDescription outputDescription = style->fontDescription(); |
| 86 |
| 87 // FontBuilder should have overwritten our base value set in the parent, |
| 88 // hence the descriptions should not be equal. |
| 89 ASSERT_NE(parentDescription, outputDescription); |
| 90 |
| 91 // Overwrite the value set by FontBuilder with the base value, directly |
| 92 // on outputDescription. |
| 93 funcs.setBaseValue(outputDescription); |
| 94 |
| 95 // Now the descriptions should be equal again. If they are, we know that |
| 96 // FontBuilder did not change something it wasn't supposed to. |
| 97 ASSERT_EQ(parentDescription, outputDescription); |
| 98 } |
| 99 |
| 100 static void fontWeightBase(FontDescription& d) { d.setWeight(FontWeight900); } |
| 101 static void fontWeightValue(FontBuilder& b) { b.setWeight(FontWeightNormal); } |
| 102 |
| 103 static void fontStretchBase(FontDescription& d) { d.setStretch(FontStretchUltraE
xpanded); } |
| 104 static void fontStretchValue(FontBuilder& b) { b.setStretch(FontStretchExtraCond
ensed); } |
| 105 |
| 106 static void fontFamilyBase(FontDescription& d) { d.setGenericFamily(FontDescript
ion::FantasyFamily); } |
| 107 static void fontFamilyValue(FontBuilder& b) { b.setFamilyDescription(FontDescrip
tion::FamilyDescription(FontDescription::CursiveFamily)); } |
| 108 |
| 109 static void fontFeatureSettingsBase(FontDescription& d) { d.setFeatureSettings(n
ullptr); } |
| 110 static void fontFeatureSettingsValue(FontBuilder& b) { b.setFeatureSettings(Font
FeatureSettings::create()); } |
| 111 |
| 112 static void fontStyleBase(FontDescription& d) { d.setStyle(FontStyleItalic); } |
| 113 static void fontStyleValue(FontBuilder& b) { b.setStyle(FontStyleNormal); } |
| 114 |
| 115 static void fontVariantBase(FontDescription& d) { d.setVariant(FontVariantSmallC
aps); } |
| 116 static void fontVariantValue(FontBuilder& b) { b.setVariant(FontVariantNormal);
} |
| 117 |
| 118 static void fontVariantLigaturesBase(FontDescription& d) { d.setVariantLigatures
(FontDescription::VariantLigatures(FontDescription::EnabledLigaturesState)); } |
| 119 static void fontVariantLigaturesValue(FontBuilder& b) { b.setVariantLigatures(Fo
ntDescription::VariantLigatures(FontDescription::DisabledLigaturesState)); } |
| 120 |
| 121 static void fontTextRenderingBase(FontDescription& d) { d.setTextRendering(Geome
tricPrecision); } |
| 122 static void fontTextRenderingValue(FontBuilder& b) { b.setTextRendering(Optimize
Legibility); } |
| 123 |
| 124 static void fontKerningBase(FontDescription& d) { d.setKerning(FontDescription::
NormalKerning); } |
| 125 static void fontKerningValue(FontBuilder& b) { b.setKerning(FontDescription::Non
eKerning); } |
| 126 |
| 127 static void fontFontSmoothingBase(FontDescription& d) { d.setFontSmoothing(Antia
liased); } |
| 128 static void fontFontSmoothingValue(FontBuilder& b) { b.setFontSmoothing(Subpixel
Antialiased); } |
| 129 |
| 130 static void fontSizeBase(FontDescription& d) |
| 131 { |
| 132 d.setSpecifiedSize(37.0f); |
| 133 d.setComputedSize(37.0f); |
| 134 d.setIsAbsoluteSize(true); |
| 135 d.setKeywordSize(7); |
| 136 } |
| 137 static void fontSizeValue(FontBuilder& b) |
| 138 { |
| 139 b.setSize(FontDescription::Size(20.0f, 0, false)); |
| 140 } |
| 141 |
| 142 static void fontScriptBase(FontDescription& d) |
| 143 { |
| 144 d.setLocale("no"); |
| 145 d.setScript(localeToScriptCodeForFontSelection("no")); |
| 146 } |
| 147 static void fontScriptValue(FontBuilder& b) |
| 148 { |
| 149 b.setScript("se"); |
| 150 } |
| 151 |
| 152 INSTANTIATE_TEST_CASE_P(AllFields, FontBuilderAdditiveTest, |
| 153 ::testing::Values(FunctionPair(fontWeightBase, fontWeightValue), |
| 154 FunctionPair(fontStretchBase, fontStretchValue), |
| 155 FunctionPair(fontFamilyBase, fontFamilyValue), |
| 156 FunctionPair(fontFeatureSettingsBase, fontFeatureSettingsValue), |
| 157 FunctionPair(fontStyleBase, fontStyleValue), |
| 158 FunctionPair(fontVariantBase, fontVariantValue), |
| 159 FunctionPair(fontVariantLigaturesBase, fontVariantLigaturesValue), |
| 160 FunctionPair(fontTextRenderingBase, fontTextRenderingValue), |
| 161 FunctionPair(fontKerningBase, fontKerningValue), |
| 162 FunctionPair(fontFontSmoothingBase, fontFontSmoothingValue), |
| 163 FunctionPair(fontSizeBase, fontSizeValue), |
| 164 FunctionPair(fontScriptBase, fontScriptValue))); |
| 165 |
| 166 } // namespace blink |
OLD | NEW |