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

Side by Side Diff: third_party/WebKit/Source/platform/animation/CompositorFloatAnimationCurveTest.cpp

Issue 1616653002: CC Animation: Move files from cc_blink to Source/platform/animation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Fix copyrights and years. Created 4 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
OLDNEW
(Empty)
1 // Copyright 2016 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 "platform/animation/CompositorFloatAnimationCurve.h"
6
7 #include "base/memory/scoped_ptr.h"
8 #include "cc/animation/timing_function.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 using blink::CompositorAnimationCurve;
12 using blink::CompositorFloatAnimationCurve;
13 using blink::CompositorFloatKeyframe;
14
15 namespace blink {
16
17 // Tests that a float animation with one keyframe works as expected.
18 TEST(WebFloatAnimationCurveTest, OneFloatKeyframe)
19 {
20 scoped_ptr<CompositorFloatAnimationCurve> curve(new CompositorFloatAnimation Curve);
21 curve->add(CompositorFloatKeyframe(0, 2),
22 CompositorAnimationCurve::TimingFunctionTypeLinear);
23 EXPECT_FLOAT_EQ(2, curve->getValue(-1));
24 EXPECT_FLOAT_EQ(2, curve->getValue(0));
25 EXPECT_FLOAT_EQ(2, curve->getValue(0.5));
26 EXPECT_FLOAT_EQ(2, curve->getValue(1));
27 EXPECT_FLOAT_EQ(2, curve->getValue(2));
28 }
29
30 // Tests that a float animation with two keyframes works as expected.
31 TEST(WebFloatAnimationCurveTest, TwoFloatKeyframe)
32 {
33 scoped_ptr<CompositorFloatAnimationCurve> curve(new CompositorFloatAnimation Curve);
34 curve->add(CompositorFloatKeyframe(0, 2),
35 CompositorAnimationCurve::TimingFunctionTypeLinear);
36 curve->add(CompositorFloatKeyframe(1, 4),
37 CompositorAnimationCurve::TimingFunctionTypeLinear);
38 EXPECT_FLOAT_EQ(2, curve->getValue(-1));
39 EXPECT_FLOAT_EQ(2, curve->getValue(0));
40 EXPECT_FLOAT_EQ(3, curve->getValue(0.5));
41 EXPECT_FLOAT_EQ(4, curve->getValue(1));
42 EXPECT_FLOAT_EQ(4, curve->getValue(2));
43 }
44
45 // Tests that a float animation with three keyframes works as expected.
46 TEST(WebFloatAnimationCurveTest, ThreeFloatKeyframe)
47 {
48 scoped_ptr<CompositorFloatAnimationCurve> curve(new CompositorFloatAnimation Curve);
49 curve->add(CompositorFloatKeyframe(0, 2),
50 CompositorAnimationCurve::TimingFunctionTypeLinear);
51 curve->add(CompositorFloatKeyframe(1, 4),
52 CompositorAnimationCurve::TimingFunctionTypeLinear);
53 curve->add(CompositorFloatKeyframe(2, 8),
54 CompositorAnimationCurve::TimingFunctionTypeLinear);
55 EXPECT_FLOAT_EQ(2, curve->getValue(-1));
56 EXPECT_FLOAT_EQ(2, curve->getValue(0));
57 EXPECT_FLOAT_EQ(3, curve->getValue(0.5));
58 EXPECT_FLOAT_EQ(4, curve->getValue(1));
59 EXPECT_FLOAT_EQ(6, curve->getValue(1.5));
60 EXPECT_FLOAT_EQ(8, curve->getValue(2));
61 EXPECT_FLOAT_EQ(8, curve->getValue(3));
62 }
63
64 // Tests that a float animation with multiple keys at a given time works sanely.
65 TEST(WebFloatAnimationCurveTest, RepeatedFloatKeyTimes)
66 {
67 scoped_ptr<CompositorFloatAnimationCurve> curve(new CompositorFloatAnimation Curve);
68 curve->add(CompositorFloatKeyframe(0, 4),
69 CompositorAnimationCurve::TimingFunctionTypeLinear);
70 curve->add(CompositorFloatKeyframe(1, 4),
71 CompositorAnimationCurve::TimingFunctionTypeLinear);
72 curve->add(CompositorFloatKeyframe(1, 6),
73 CompositorAnimationCurve::TimingFunctionTypeLinear);
74 curve->add(CompositorFloatKeyframe(2, 6),
75 CompositorAnimationCurve::TimingFunctionTypeLinear);
76
77 EXPECT_FLOAT_EQ(4, curve->getValue(-1));
78 EXPECT_FLOAT_EQ(4, curve->getValue(0));
79 EXPECT_FLOAT_EQ(4, curve->getValue(0.5));
80
81 // There is a discontinuity at 1. Any value between 4 and 6 is valid.
82 float value = curve->getValue(1);
83 EXPECT_TRUE(value >= 4 && value <= 6);
84
85 EXPECT_FLOAT_EQ(6, curve->getValue(1.5));
86 EXPECT_FLOAT_EQ(6, curve->getValue(2));
87 EXPECT_FLOAT_EQ(6, curve->getValue(3));
88 }
89
90 // Tests that the keyframes may be added out of order.
91 TEST(WebFloatAnimationCurveTest, UnsortedKeyframes)
92 {
93 scoped_ptr<CompositorFloatAnimationCurve> curve(new CompositorFloatAnimation Curve);
94 curve->add(CompositorFloatKeyframe(2, 8),
95 CompositorAnimationCurve::TimingFunctionTypeLinear);
96 curve->add(CompositorFloatKeyframe(0, 2),
97 CompositorAnimationCurve::TimingFunctionTypeLinear);
98 curve->add(CompositorFloatKeyframe(1, 4),
99 CompositorAnimationCurve::TimingFunctionTypeLinear);
100
101 EXPECT_FLOAT_EQ(2, curve->getValue(-1));
102 EXPECT_FLOAT_EQ(2, curve->getValue(0));
103 EXPECT_FLOAT_EQ(3, curve->getValue(0.5));
104 EXPECT_FLOAT_EQ(4, curve->getValue(1));
105 EXPECT_FLOAT_EQ(6, curve->getValue(1.5));
106 EXPECT_FLOAT_EQ(8, curve->getValue(2));
107 EXPECT_FLOAT_EQ(8, curve->getValue(3));
108 }
109
110 // Tests that a cubic bezier timing function works as expected.
111 TEST(WebFloatAnimationCurveTest, CubicBezierTimingFunction)
112 {
113 scoped_ptr<CompositorFloatAnimationCurve> curve(new CompositorFloatAnimation Curve);
114 curve->add(CompositorFloatKeyframe(0, 0), 0.25, 0, 0.75, 1);
115 curve->add(CompositorFloatKeyframe(1, 1),
116 CompositorAnimationCurve::TimingFunctionTypeLinear);
117
118 EXPECT_FLOAT_EQ(0, curve->getValue(0));
119 EXPECT_LT(0, curve->getValue(0.25));
120 EXPECT_GT(0.25, curve->getValue(0.25));
121 EXPECT_NEAR(curve->getValue(0.5), 0.5, 0.00015);
122 EXPECT_LT(0.75, curve->getValue(0.75));
123 EXPECT_GT(1, curve->getValue(0.75));
124 EXPECT_FLOAT_EQ(1, curve->getValue(1));
125 }
126
127 // Tests that an ease timing function works as expected.
128 TEST(WebFloatAnimationCurveTest, EaseTimingFunction)
129 {
130 scoped_ptr<CompositorFloatAnimationCurve> curve(new CompositorFloatAnimation Curve);
131 curve->add(CompositorFloatKeyframe(0, 0),
132 CompositorAnimationCurve::TimingFunctionTypeEase);
133 curve->add(CompositorFloatKeyframe(1, 1),
134 CompositorAnimationCurve::TimingFunctionTypeLinear);
135
136 scoped_ptr<cc::TimingFunction> timingFunction(
137 cc::EaseTimingFunction::Create());
138 for (int i = 0; i <= 4; ++i) {
139 const double time = i * 0.25;
140 EXPECT_FLOAT_EQ(timingFunction->GetValue(time), curve->getValue(time));
141 }
142 }
143
144 // Tests using a linear timing function.
145 TEST(WebFloatAnimationCurveTest, LinearTimingFunction)
146 {
147 scoped_ptr<CompositorFloatAnimationCurve> curve(new CompositorFloatAnimation Curve);
148 curve->add(CompositorFloatKeyframe(0, 0),
149 CompositorAnimationCurve::TimingFunctionTypeLinear);
150 curve->add(CompositorFloatKeyframe(1, 1),
151 CompositorAnimationCurve::TimingFunctionTypeLinear);
152
153 for (int i = 0; i <= 4; ++i) {
154 const double time = i * 0.25;
155 EXPECT_FLOAT_EQ(time, curve->getValue(time));
156 }
157 }
158
159 // Tests that an ease in timing function works as expected.
160 TEST(WebFloatAnimationCurveTest, EaseInTimingFunction)
161 {
162 scoped_ptr<CompositorFloatAnimationCurve> curve(new CompositorFloatAnimation Curve);
163 curve->add(CompositorFloatKeyframe(0, 0),
164 CompositorAnimationCurve::TimingFunctionTypeEaseIn);
165 curve->add(CompositorFloatKeyframe(1, 1),
166 CompositorAnimationCurve::TimingFunctionTypeLinear);
167
168 scoped_ptr<cc::TimingFunction> timingFunction(
169 cc::EaseInTimingFunction::Create());
170 for (int i = 0; i <= 4; ++i) {
171 const double time = i * 0.25;
172 EXPECT_FLOAT_EQ(timingFunction->GetValue(time), curve->getValue(time));
173 }
174 }
175
176 // Tests that an ease in timing function works as expected.
177 TEST(WebFloatAnimationCurveTest, EaseOutTimingFunction)
178 {
179 scoped_ptr<CompositorFloatAnimationCurve> curve(new CompositorFloatAnimation Curve);
180 curve->add(CompositorFloatKeyframe(0, 0),
181 CompositorAnimationCurve::TimingFunctionTypeEaseOut);
182 curve->add(CompositorFloatKeyframe(1, 1),
183 CompositorAnimationCurve::TimingFunctionTypeLinear);
184
185 scoped_ptr<cc::TimingFunction> timingFunction(
186 cc::EaseOutTimingFunction::Create());
187 for (int i = 0; i <= 4; ++i) {
188 const double time = i * 0.25;
189 EXPECT_FLOAT_EQ(timingFunction->GetValue(time), curve->getValue(time));
190 }
191 }
192
193 // Tests that an ease in timing function works as expected.
194 TEST(WebFloatAnimationCurveTest, EaseInOutTimingFunction)
195 {
196 scoped_ptr<CompositorFloatAnimationCurve> curve(new CompositorFloatAnimation Curve);
197 curve->add(CompositorFloatKeyframe(0, 0),
198 CompositorAnimationCurve::TimingFunctionTypeEaseInOut);
199 curve->add(CompositorFloatKeyframe(1, 1),
200 CompositorAnimationCurve::TimingFunctionTypeLinear);
201
202 scoped_ptr<cc::TimingFunction> timingFunction(
203 cc::EaseInOutTimingFunction::Create());
204 for (int i = 0; i <= 4; ++i) {
205 const double time = i * 0.25;
206 EXPECT_FLOAT_EQ(timingFunction->GetValue(time), curve->getValue(time));
207 }
208 }
209
210 // Tests that an ease in timing function works as expected.
211 TEST(WebFloatAnimationCurveTest, CustomBezierTimingFunction)
212 {
213 scoped_ptr<CompositorFloatAnimationCurve> curve(new CompositorFloatAnimation Curve);
214 double x1 = 0.3;
215 double y1 = 0.2;
216 double x2 = 0.8;
217 double y2 = 0.7;
218 curve->add(CompositorFloatKeyframe(0, 0), x1, y1, x2, y2);
219 curve->add(CompositorFloatKeyframe(1, 1),
220 CompositorAnimationCurve::TimingFunctionTypeLinear);
221
222 scoped_ptr<cc::TimingFunction> timingFunction(
223 cc::CubicBezierTimingFunction::Create(x1, y1, x2, y2));
224 for (int i = 0; i <= 4; ++i) {
225 const double time = i * 0.25;
226 EXPECT_FLOAT_EQ(timingFunction->GetValue(time), curve->getValue(time));
227 }
228 }
229
230 // Tests that the default timing function is indeed ease.
231 TEST(WebFloatAnimationCurveTest, DefaultTimingFunction)
232 {
233 scoped_ptr<CompositorFloatAnimationCurve> curve(new CompositorFloatAnimation Curve);
234 curve->add(CompositorFloatKeyframe(0, 0));
235 curve->add(CompositorFloatKeyframe(1, 1),
236 CompositorAnimationCurve::TimingFunctionTypeLinear);
237
238 scoped_ptr<cc::TimingFunction> timingFunction(
239 cc::EaseTimingFunction::Create());
240 for (int i = 0; i <= 4; ++i) {
241 const double time = i * 0.25;
242 EXPECT_FLOAT_EQ(timingFunction->GetValue(time), curve->getValue(time));
243 }
244 }
245
246 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698