Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(421)

Side by Side Diff: Source/core/css/resolver/FontBuilderTest.cpp

Issue 715633006: Remove FontDescriptionChangeScope, and let FontBuilder partially apply values. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: IsSetFlag -> PropertySetFlag. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/css/resolver/FontBuilder.cpp ('k') | Source/core/css/resolver/StyleResolver.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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
OLDNEW
« no previous file with comments | « Source/core/css/resolver/FontBuilder.cpp ('k') | Source/core/css/resolver/StyleResolver.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698