Files.app: Show surprise-unplug warning on kDiskRemoved event rather than kDeviceRemoved.
[chromium-blink-merge.git] / cc / animation / keyframed_animation_curve_unittest.cc
blobeceba6fc9e550b3278c6ba7d3fbc871011272de2
1 // Copyright 2012 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.
5 #include "cc/animation/keyframed_animation_curve.h"
7 #include "cc/animation/transform_operations.h"
8 #include "testing/gmock/include/gmock/gmock.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "ui/gfx/animation/tween.h"
11 #include "ui/gfx/box_f.h"
12 #include "ui/gfx/test/gfx_util.h"
14 namespace cc {
15 namespace {
17 void ExpectTranslateX(SkMScalar translate_x, const gfx::Transform& transform) {
18 EXPECT_FLOAT_EQ(translate_x, transform.matrix().get(0, 3));
21 void ExpectBrightness(double brightness, const FilterOperations& filter) {
22 EXPECT_EQ(1u, filter.size());
23 EXPECT_EQ(FilterOperation::BRIGHTNESS, filter.at(0).type());
24 EXPECT_FLOAT_EQ(brightness, filter.at(0).amount());
27 // Tests that a color animation with one keyframe works as expected.
28 TEST(KeyframedAnimationCurveTest, OneColorKeyFrame) {
29 SkColor color = SkColorSetARGB(255, 255, 255, 255);
30 scoped_ptr<KeyframedColorAnimationCurve> curve(
31 KeyframedColorAnimationCurve::Create());
32 curve->AddKeyframe(
33 ColorKeyframe::Create(0.0, color, scoped_ptr<TimingFunction>()));
35 EXPECT_SKCOLOR_EQ(color, curve->GetValue(-1.f));
36 EXPECT_SKCOLOR_EQ(color, curve->GetValue(0.f));
37 EXPECT_SKCOLOR_EQ(color, curve->GetValue(0.5f));
38 EXPECT_SKCOLOR_EQ(color, curve->GetValue(1.f));
39 EXPECT_SKCOLOR_EQ(color, curve->GetValue(2.f));
42 // Tests that a color animation with two keyframes works as expected.
43 TEST(KeyframedAnimationCurveTest, TwoColorKeyFrame) {
44 SkColor color_a = SkColorSetARGB(255, 255, 0, 0);
45 SkColor color_b = SkColorSetARGB(255, 0, 255, 0);
46 SkColor color_midpoint = gfx::Tween::ColorValueBetween(0.5, color_a, color_b);
47 scoped_ptr<KeyframedColorAnimationCurve> curve(
48 KeyframedColorAnimationCurve::Create());
49 curve->AddKeyframe(
50 ColorKeyframe::Create(0.0, color_a, scoped_ptr<TimingFunction>()));
51 curve->AddKeyframe(
52 ColorKeyframe::Create(1.0, color_b, scoped_ptr<TimingFunction>()));
54 EXPECT_SKCOLOR_EQ(color_a, curve->GetValue(-1.f));
55 EXPECT_SKCOLOR_EQ(color_a, curve->GetValue(0.f));
56 EXPECT_SKCOLOR_EQ(color_midpoint, curve->GetValue(0.5f));
57 EXPECT_SKCOLOR_EQ(color_b, curve->GetValue(1.f));
58 EXPECT_SKCOLOR_EQ(color_b, curve->GetValue(2.f));
61 // Tests that a color animation with three keyframes works as expected.
62 TEST(KeyframedAnimationCurveTest, ThreeColorKeyFrame) {
63 SkColor color_a = SkColorSetARGB(255, 255, 0, 0);
64 SkColor color_b = SkColorSetARGB(255, 0, 255, 0);
65 SkColor color_c = SkColorSetARGB(255, 0, 0, 255);
66 SkColor color_midpoint1 =
67 gfx::Tween::ColorValueBetween(0.5, color_a, color_b);
68 SkColor color_midpoint2 =
69 gfx::Tween::ColorValueBetween(0.5, color_b, color_c);
70 scoped_ptr<KeyframedColorAnimationCurve> curve(
71 KeyframedColorAnimationCurve::Create());
72 curve->AddKeyframe(
73 ColorKeyframe::Create(0.0, color_a, scoped_ptr<TimingFunction>()));
74 curve->AddKeyframe(
75 ColorKeyframe::Create(1.0, color_b, scoped_ptr<TimingFunction>()));
76 curve->AddKeyframe(
77 ColorKeyframe::Create(2.0, color_c, scoped_ptr<TimingFunction>()));
79 EXPECT_SKCOLOR_EQ(color_a, curve->GetValue(-1.f));
80 EXPECT_SKCOLOR_EQ(color_a, curve->GetValue(0.f));
81 EXPECT_SKCOLOR_EQ(color_midpoint1, curve->GetValue(0.5f));
82 EXPECT_SKCOLOR_EQ(color_b, curve->GetValue(1.f));
83 EXPECT_SKCOLOR_EQ(color_midpoint2, curve->GetValue(1.5f));
84 EXPECT_SKCOLOR_EQ(color_c, curve->GetValue(2.f));
85 EXPECT_SKCOLOR_EQ(color_c, curve->GetValue(3.f));
88 // Tests that a colro animation with multiple keys at a given time works sanely.
89 TEST(KeyframedAnimationCurveTest, RepeatedColorKeyFrame) {
90 SkColor color_a = SkColorSetARGB(255, 64, 0, 0);
91 SkColor color_b = SkColorSetARGB(255, 192, 0, 0);
93 scoped_ptr<KeyframedColorAnimationCurve> curve(
94 KeyframedColorAnimationCurve::Create());
95 curve->AddKeyframe(
96 ColorKeyframe::Create(0.0, color_a, scoped_ptr<TimingFunction>()));
97 curve->AddKeyframe(
98 ColorKeyframe::Create(1.0, color_a, scoped_ptr<TimingFunction>()));
99 curve->AddKeyframe(
100 ColorKeyframe::Create(1.0, color_b, scoped_ptr<TimingFunction>()));
101 curve->AddKeyframe(
102 ColorKeyframe::Create(2.0, color_b, scoped_ptr<TimingFunction>()));
104 EXPECT_SKCOLOR_EQ(color_a, curve->GetValue(-1.f));
105 EXPECT_SKCOLOR_EQ(color_a, curve->GetValue(0.f));
106 EXPECT_SKCOLOR_EQ(color_a, curve->GetValue(0.5f));
108 SkColor value = curve->GetValue(1.0f);
109 EXPECT_EQ(255u, SkColorGetA(value));
110 int red_value = SkColorGetR(value);
111 EXPECT_LE(64, red_value);
112 EXPECT_GE(192, red_value);
114 EXPECT_SKCOLOR_EQ(color_b, curve->GetValue(1.5f));
115 EXPECT_SKCOLOR_EQ(color_b, curve->GetValue(2.f));
116 EXPECT_SKCOLOR_EQ(color_b, curve->GetValue(3.f));
119 // Tests that a float animation with one keyframe works as expected.
120 TEST(KeyframedAnimationCurveTest, OneFloatKeyframe) {
121 scoped_ptr<KeyframedFloatAnimationCurve> curve(
122 KeyframedFloatAnimationCurve::Create());
123 curve->AddKeyframe(
124 FloatKeyframe::Create(0.0, 2.f, scoped_ptr<TimingFunction>()));
125 EXPECT_FLOAT_EQ(2.f, curve->GetValue(-1.f));
126 EXPECT_FLOAT_EQ(2.f, curve->GetValue(0.f));
127 EXPECT_FLOAT_EQ(2.f, curve->GetValue(0.5f));
128 EXPECT_FLOAT_EQ(2.f, curve->GetValue(1.f));
129 EXPECT_FLOAT_EQ(2.f, curve->GetValue(2.f));
132 // Tests that a float animation with two keyframes works as expected.
133 TEST(KeyframedAnimationCurveTest, TwoFloatKeyframe) {
134 scoped_ptr<KeyframedFloatAnimationCurve> curve(
135 KeyframedFloatAnimationCurve::Create());
136 curve->AddKeyframe(
137 FloatKeyframe::Create(0.0, 2.f, scoped_ptr<TimingFunction>()));
138 curve->AddKeyframe(
139 FloatKeyframe::Create(1.0, 4.f, scoped_ptr<TimingFunction>()));
140 EXPECT_FLOAT_EQ(2.f, curve->GetValue(-1.f));
141 EXPECT_FLOAT_EQ(2.f, curve->GetValue(0.f));
142 EXPECT_FLOAT_EQ(3.f, curve->GetValue(0.5f));
143 EXPECT_FLOAT_EQ(4.f, curve->GetValue(1.f));
144 EXPECT_FLOAT_EQ(4.f, curve->GetValue(2.f));
147 // Tests that a float animation with three keyframes works as expected.
148 TEST(KeyframedAnimationCurveTest, ThreeFloatKeyframe) {
149 scoped_ptr<KeyframedFloatAnimationCurve> curve(
150 KeyframedFloatAnimationCurve::Create());
151 curve->AddKeyframe(
152 FloatKeyframe::Create(0.0, 2.f, scoped_ptr<TimingFunction>()));
153 curve->AddKeyframe(
154 FloatKeyframe::Create(1.0, 4.f, scoped_ptr<TimingFunction>()));
155 curve->AddKeyframe(
156 FloatKeyframe::Create(2.0, 8.f, scoped_ptr<TimingFunction>()));
157 EXPECT_FLOAT_EQ(2.f, curve->GetValue(-1.f));
158 EXPECT_FLOAT_EQ(2.f, curve->GetValue(0.f));
159 EXPECT_FLOAT_EQ(3.f, curve->GetValue(0.5f));
160 EXPECT_FLOAT_EQ(4.f, curve->GetValue(1.f));
161 EXPECT_FLOAT_EQ(6.f, curve->GetValue(1.5f));
162 EXPECT_FLOAT_EQ(8.f, curve->GetValue(2.f));
163 EXPECT_FLOAT_EQ(8.f, curve->GetValue(3.f));
166 // Tests that a float animation with multiple keys at a given time works sanely.
167 TEST(KeyframedAnimationCurveTest, RepeatedFloatKeyTimes) {
168 scoped_ptr<KeyframedFloatAnimationCurve> curve(
169 KeyframedFloatAnimationCurve::Create());
170 curve->AddKeyframe(
171 FloatKeyframe::Create(0.0, 4.f, scoped_ptr<TimingFunction>()));
172 curve->AddKeyframe(
173 FloatKeyframe::Create(1.0, 4.f, scoped_ptr<TimingFunction>()));
174 curve->AddKeyframe(
175 FloatKeyframe::Create(1.0, 6.f, scoped_ptr<TimingFunction>()));
176 curve->AddKeyframe(
177 FloatKeyframe::Create(2.0, 6.f, scoped_ptr<TimingFunction>()));
179 EXPECT_FLOAT_EQ(4.f, curve->GetValue(-1.f));
180 EXPECT_FLOAT_EQ(4.f, curve->GetValue(0.f));
181 EXPECT_FLOAT_EQ(4.f, curve->GetValue(0.5f));
183 // There is a discontinuity at 1. Any value between 4 and 6 is valid.
184 float value = curve->GetValue(1.f);
185 EXPECT_TRUE(value >= 4 && value <= 6);
187 EXPECT_FLOAT_EQ(6.f, curve->GetValue(1.5f));
188 EXPECT_FLOAT_EQ(6.f, curve->GetValue(2.f));
189 EXPECT_FLOAT_EQ(6.f, curve->GetValue(3.f));
192 // Tests that a transform animation with one keyframe works as expected.
193 TEST(KeyframedAnimationCurveTest, OneTransformKeyframe) {
194 scoped_ptr<KeyframedTransformAnimationCurve> curve(
195 KeyframedTransformAnimationCurve::Create());
196 TransformOperations operations;
197 operations.AppendTranslate(2.f, 0.f, 0.f);
198 curve->AddKeyframe(
199 TransformKeyframe::Create(0.f, operations, scoped_ptr<TimingFunction>()));
201 ExpectTranslateX(2.f, curve->GetValue(-1.f));
202 ExpectTranslateX(2.f, curve->GetValue(0.f));
203 ExpectTranslateX(2.f, curve->GetValue(0.5f));
204 ExpectTranslateX(2.f, curve->GetValue(1.f));
205 ExpectTranslateX(2.f, curve->GetValue(2.f));
208 // Tests that a transform animation with two keyframes works as expected.
209 TEST(KeyframedAnimationCurveTest, TwoTransformKeyframe) {
210 scoped_ptr<KeyframedTransformAnimationCurve> curve(
211 KeyframedTransformAnimationCurve::Create());
212 TransformOperations operations1;
213 operations1.AppendTranslate(2.f, 0.f, 0.f);
214 TransformOperations operations2;
215 operations2.AppendTranslate(4.f, 0.f, 0.f);
217 curve->AddKeyframe(TransformKeyframe::Create(
218 0.f, operations1, scoped_ptr<TimingFunction>()));
219 curve->AddKeyframe(TransformKeyframe::Create(
220 1.f, operations2, scoped_ptr<TimingFunction>()));
221 ExpectTranslateX(2.f, curve->GetValue(-1.f));
222 ExpectTranslateX(2.f, curve->GetValue(0.f));
223 ExpectTranslateX(3.f, curve->GetValue(0.5f));
224 ExpectTranslateX(4.f, curve->GetValue(1.f));
225 ExpectTranslateX(4.f, curve->GetValue(2.f));
228 // Tests that a transform animation with three keyframes works as expected.
229 TEST(KeyframedAnimationCurveTest, ThreeTransformKeyframe) {
230 scoped_ptr<KeyframedTransformAnimationCurve> curve(
231 KeyframedTransformAnimationCurve::Create());
232 TransformOperations operations1;
233 operations1.AppendTranslate(2.f, 0.f, 0.f);
234 TransformOperations operations2;
235 operations2.AppendTranslate(4.f, 0.f, 0.f);
236 TransformOperations operations3;
237 operations3.AppendTranslate(8.f, 0.f, 0.f);
238 curve->AddKeyframe(TransformKeyframe::Create(
239 0.f, operations1, scoped_ptr<TimingFunction>()));
240 curve->AddKeyframe(TransformKeyframe::Create(
241 1.f, operations2, scoped_ptr<TimingFunction>()));
242 curve->AddKeyframe(TransformKeyframe::Create(
243 2.f, operations3, scoped_ptr<TimingFunction>()));
244 ExpectTranslateX(2.f, curve->GetValue(-1.f));
245 ExpectTranslateX(2.f, curve->GetValue(0.f));
246 ExpectTranslateX(3.f, curve->GetValue(0.5f));
247 ExpectTranslateX(4.f, curve->GetValue(1.f));
248 ExpectTranslateX(6.f, curve->GetValue(1.5f));
249 ExpectTranslateX(8.f, curve->GetValue(2.f));
250 ExpectTranslateX(8.f, curve->GetValue(3.f));
253 // Tests that a transform animation with multiple keys at a given time works
254 // sanely.
255 TEST(KeyframedAnimationCurveTest, RepeatedTransformKeyTimes) {
256 scoped_ptr<KeyframedTransformAnimationCurve> curve(
257 KeyframedTransformAnimationCurve::Create());
258 // A step function.
259 TransformOperations operations1;
260 operations1.AppendTranslate(4.f, 0.f, 0.f);
261 TransformOperations operations2;
262 operations2.AppendTranslate(4.f, 0.f, 0.f);
263 TransformOperations operations3;
264 operations3.AppendTranslate(6.f, 0.f, 0.f);
265 TransformOperations operations4;
266 operations4.AppendTranslate(6.f, 0.f, 0.f);
267 curve->AddKeyframe(TransformKeyframe::Create(
268 0.f, operations1, scoped_ptr<TimingFunction>()));
269 curve->AddKeyframe(TransformKeyframe::Create(
270 1.f, operations2, scoped_ptr<TimingFunction>()));
271 curve->AddKeyframe(TransformKeyframe::Create(
272 1.f, operations3, scoped_ptr<TimingFunction>()));
273 curve->AddKeyframe(TransformKeyframe::Create(
274 2.f, operations4, scoped_ptr<TimingFunction>()));
276 ExpectTranslateX(4.f, curve->GetValue(-1.f));
277 ExpectTranslateX(4.f, curve->GetValue(0.f));
278 ExpectTranslateX(4.f, curve->GetValue(0.5f));
280 // There is a discontinuity at 1. Any value between 4 and 6 is valid.
281 gfx::Transform value = curve->GetValue(1.f);
282 EXPECT_GE(value.matrix().get(0, 3), 4.f);
283 EXPECT_LE(value.matrix().get(0, 3), 6.f);
285 ExpectTranslateX(6.f, curve->GetValue(1.5f));
286 ExpectTranslateX(6.f, curve->GetValue(2.f));
287 ExpectTranslateX(6.f, curve->GetValue(3.f));
290 // Tests that a filter animation with one keyframe works as expected.
291 TEST(KeyframedAnimationCurveTest, OneFilterKeyframe) {
292 scoped_ptr<KeyframedFilterAnimationCurve> curve(
293 KeyframedFilterAnimationCurve::Create());
294 FilterOperations operations;
295 operations.Append(FilterOperation::CreateBrightnessFilter(2.f));
296 curve->AddKeyframe(
297 FilterKeyframe::Create(0.f, operations, scoped_ptr<TimingFunction>()));
299 ExpectBrightness(2.f, curve->GetValue(-1.f));
300 ExpectBrightness(2.f, curve->GetValue(0.f));
301 ExpectBrightness(2.f, curve->GetValue(0.5f));
302 ExpectBrightness(2.f, curve->GetValue(1.f));
303 ExpectBrightness(2.f, curve->GetValue(2.f));
306 // Tests that a filter animation with two keyframes works as expected.
307 TEST(KeyframedAnimationCurveTest, TwoFilterKeyframe) {
308 scoped_ptr<KeyframedFilterAnimationCurve> curve(
309 KeyframedFilterAnimationCurve::Create());
310 FilterOperations operations1;
311 operations1.Append(FilterOperation::CreateBrightnessFilter(2.f));
312 FilterOperations operations2;
313 operations2.Append(FilterOperation::CreateBrightnessFilter(4.f));
315 curve->AddKeyframe(FilterKeyframe::Create(
316 0.f, operations1, scoped_ptr<TimingFunction>()));
317 curve->AddKeyframe(FilterKeyframe::Create(
318 1.f, operations2, scoped_ptr<TimingFunction>()));
319 ExpectBrightness(2.f, curve->GetValue(-1.f));
320 ExpectBrightness(2.f, curve->GetValue(0.f));
321 ExpectBrightness(3.f, curve->GetValue(0.5f));
322 ExpectBrightness(4.f, curve->GetValue(1.f));
323 ExpectBrightness(4.f, curve->GetValue(2.f));
326 // Tests that a filter animation with three keyframes works as expected.
327 TEST(KeyframedAnimationCurveTest, ThreeFilterKeyframe) {
328 scoped_ptr<KeyframedFilterAnimationCurve> curve(
329 KeyframedFilterAnimationCurve::Create());
330 FilterOperations operations1;
331 operations1.Append(FilterOperation::CreateBrightnessFilter(2.f));
332 FilterOperations operations2;
333 operations2.Append(FilterOperation::CreateBrightnessFilter(4.f));
334 FilterOperations operations3;
335 operations3.Append(FilterOperation::CreateBrightnessFilter(8.f));
336 curve->AddKeyframe(FilterKeyframe::Create(
337 0.f, operations1, scoped_ptr<TimingFunction>()));
338 curve->AddKeyframe(FilterKeyframe::Create(
339 1.f, operations2, scoped_ptr<TimingFunction>()));
340 curve->AddKeyframe(FilterKeyframe::Create(
341 2.f, operations3, scoped_ptr<TimingFunction>()));
342 ExpectBrightness(2.f, curve->GetValue(-1.f));
343 ExpectBrightness(2.f, curve->GetValue(0.f));
344 ExpectBrightness(3.f, curve->GetValue(0.5f));
345 ExpectBrightness(4.f, curve->GetValue(1.f));
346 ExpectBrightness(6.f, curve->GetValue(1.5f));
347 ExpectBrightness(8.f, curve->GetValue(2.f));
348 ExpectBrightness(8.f, curve->GetValue(3.f));
351 // Tests that a filter animation with multiple keys at a given time works
352 // sanely.
353 TEST(KeyframedAnimationCurveTest, RepeatedFilterKeyTimes) {
354 scoped_ptr<KeyframedFilterAnimationCurve> curve(
355 KeyframedFilterAnimationCurve::Create());
356 // A step function.
357 FilterOperations operations1;
358 operations1.Append(FilterOperation::CreateBrightnessFilter(4.f));
359 FilterOperations operations2;
360 operations2.Append(FilterOperation::CreateBrightnessFilter(4.f));
361 FilterOperations operations3;
362 operations3.Append(FilterOperation::CreateBrightnessFilter(6.f));
363 FilterOperations operations4;
364 operations4.Append(FilterOperation::CreateBrightnessFilter(6.f));
365 curve->AddKeyframe(FilterKeyframe::Create(
366 0.f, operations1, scoped_ptr<TimingFunction>()));
367 curve->AddKeyframe(FilterKeyframe::Create(
368 1.f, operations2, scoped_ptr<TimingFunction>()));
369 curve->AddKeyframe(FilterKeyframe::Create(
370 1.f, operations3, scoped_ptr<TimingFunction>()));
371 curve->AddKeyframe(FilterKeyframe::Create(
372 2.f, operations4, scoped_ptr<TimingFunction>()));
374 ExpectBrightness(4.f, curve->GetValue(-1.f));
375 ExpectBrightness(4.f, curve->GetValue(0.f));
376 ExpectBrightness(4.f, curve->GetValue(0.5f));
378 // There is a discontinuity at 1. Any value between 4 and 6 is valid.
379 FilterOperations value = curve->GetValue(1.f);
380 EXPECT_EQ(1u, value.size());
381 EXPECT_EQ(FilterOperation::BRIGHTNESS, value.at(0).type());
382 EXPECT_GE(value.at(0).amount(), 4);
383 EXPECT_LE(value.at(0).amount(), 6);
385 ExpectBrightness(6.f, curve->GetValue(1.5f));
386 ExpectBrightness(6.f, curve->GetValue(2.f));
387 ExpectBrightness(6.f, curve->GetValue(3.f));
390 // Tests that the keyframes may be added out of order.
391 TEST(KeyframedAnimationCurveTest, UnsortedKeyframes) {
392 scoped_ptr<KeyframedFloatAnimationCurve> curve(
393 KeyframedFloatAnimationCurve::Create());
394 curve->AddKeyframe(
395 FloatKeyframe::Create(2.0, 8.f, scoped_ptr<TimingFunction>()));
396 curve->AddKeyframe(
397 FloatKeyframe::Create(0.0, 2.f, scoped_ptr<TimingFunction>()));
398 curve->AddKeyframe(
399 FloatKeyframe::Create(1.0, 4.f, scoped_ptr<TimingFunction>()));
400 EXPECT_FLOAT_EQ(2.f, curve->GetValue(-1.f));
401 EXPECT_FLOAT_EQ(2.f, curve->GetValue(0.f));
402 EXPECT_FLOAT_EQ(3.f, curve->GetValue(0.5f));
403 EXPECT_FLOAT_EQ(4.f, curve->GetValue(1.f));
404 EXPECT_FLOAT_EQ(6.f, curve->GetValue(1.5f));
405 EXPECT_FLOAT_EQ(8.f, curve->GetValue(2.f));
406 EXPECT_FLOAT_EQ(8.f, curve->GetValue(3.f));
409 // Tests that a cubic bezier timing function works as expected.
410 TEST(KeyframedAnimationCurveTest, CubicBezierTimingFunction) {
411 scoped_ptr<KeyframedFloatAnimationCurve> curve(
412 KeyframedFloatAnimationCurve::Create());
413 curve->AddKeyframe(FloatKeyframe::Create(
414 0.0,
415 0.f,
416 CubicBezierTimingFunction::Create(0.25f, 0.f, 0.75f, 1.f)
417 .PassAs<TimingFunction>()));
418 curve->AddKeyframe(
419 FloatKeyframe::Create(1.0, 1.f, scoped_ptr<TimingFunction>()));
421 EXPECT_FLOAT_EQ(0.f, curve->GetValue(0.f));
422 EXPECT_LT(0.f, curve->GetValue(0.25f));
423 EXPECT_GT(0.25f, curve->GetValue(0.25f));
424 EXPECT_NEAR(curve->GetValue(0.5f), 0.5f, 0.00015f);
425 EXPECT_LT(0.75f, curve->GetValue(0.75f));
426 EXPECT_GT(1.f, curve->GetValue(0.75f));
427 EXPECT_FLOAT_EQ(1.f, curve->GetValue(1.f));
430 // Tests that animated bounds are computed as expected.
431 TEST(KeyframedAnimationCurveTest, AnimatedBounds) {
432 scoped_ptr<KeyframedTransformAnimationCurve> curve(
433 KeyframedTransformAnimationCurve::Create());
435 TransformOperations operations1;
436 curve->AddKeyframe(TransformKeyframe::Create(
437 0.0, operations1, scoped_ptr<TimingFunction>()));
438 operations1.AppendTranslate(2.0, 3.0, -1.0);
439 curve->AddKeyframe(TransformKeyframe::Create(
440 0.5, operations1, scoped_ptr<TimingFunction>()));
441 TransformOperations operations2;
442 operations2.AppendTranslate(4.0, 1.0, 2.0);
443 curve->AddKeyframe(TransformKeyframe::Create(
444 1.0, operations2, EaseTimingFunction::Create()));
446 gfx::BoxF box(2.f, 3.f, 4.f, 1.f, 3.f, 2.f);
447 gfx::BoxF bounds;
449 EXPECT_TRUE(curve->AnimatedBoundsForBox(box, &bounds));
450 EXPECT_EQ(gfx::BoxF(2.f, 3.f, 3.f, 5.f, 6.f, 5.f).ToString(),
451 bounds.ToString());
454 // Tests that animations that affect scale are correctly identified.
455 TEST(KeyframedAnimationCurveTest, AffectsScale) {
456 scoped_ptr<KeyframedTransformAnimationCurve> curve(
457 KeyframedTransformAnimationCurve::Create());
459 TransformOperations operations1;
460 curve->AddKeyframe(TransformKeyframe::Create(
461 0.0, operations1, scoped_ptr<TimingFunction>()));
462 operations1.AppendTranslate(2.0, 3.0, -1.0);
463 TransformOperations operations2;
464 operations2.AppendTranslate(4.0, 1.0, 2.0);
465 curve->AddKeyframe(TransformKeyframe::Create(
466 1.0, operations2, scoped_ptr<TimingFunction>()));
468 EXPECT_FALSE(curve->AffectsScale());
470 TransformOperations operations3;
471 operations3.AppendScale(2.f, 2.f, 2.f);
472 curve->AddKeyframe(TransformKeyframe::Create(
473 2.0, operations3, scoped_ptr<TimingFunction>()));
475 EXPECT_TRUE(curve->AffectsScale());
477 TransformOperations operations4;
478 operations3.AppendTranslate(2.f, 2.f, 2.f);
479 curve->AddKeyframe(TransformKeyframe::Create(
480 3.0, operations4, scoped_ptr<TimingFunction>()));
482 EXPECT_TRUE(curve->AffectsScale());
485 // Tests that animations that are translations are correctly identified.
486 TEST(KeyframedAnimationCurveTest, IsTranslation) {
487 scoped_ptr<KeyframedTransformAnimationCurve> curve(
488 KeyframedTransformAnimationCurve::Create());
490 TransformOperations operations1;
491 curve->AddKeyframe(TransformKeyframe::Create(
492 0.0, operations1, scoped_ptr<TimingFunction>()));
493 operations1.AppendTranslate(2.0, 3.0, -1.0);
494 TransformOperations operations2;
495 operations2.AppendTranslate(4.0, 1.0, 2.0);
496 curve->AddKeyframe(TransformKeyframe::Create(
497 1.0, operations2, scoped_ptr<TimingFunction>()));
499 EXPECT_TRUE(curve->IsTranslation());
501 TransformOperations operations3;
502 operations3.AppendScale(2.f, 2.f, 2.f);
503 curve->AddKeyframe(TransformKeyframe::Create(
504 2.0, operations3, scoped_ptr<TimingFunction>()));
506 EXPECT_FALSE(curve->IsTranslation());
508 TransformOperations operations4;
509 operations3.AppendTranslate(2.f, 2.f, 2.f);
510 curve->AddKeyframe(TransformKeyframe::Create(
511 3.0, operations4, scoped_ptr<TimingFunction>()));
513 EXPECT_FALSE(curve->IsTranslation());
516 // Tests that maximum scale is computed as expected.
517 TEST(KeyframedAnimationCurveTest, MaximumScale) {
518 scoped_ptr<KeyframedTransformAnimationCurve> curve(
519 KeyframedTransformAnimationCurve::Create());
521 TransformOperations operations1;
522 curve->AddKeyframe(TransformKeyframe::Create(
523 0.0, operations1, scoped_ptr<TimingFunction>()));
524 operations1.AppendScale(2.f, -3.f, 1.f);
525 curve->AddKeyframe(TransformKeyframe::Create(
526 1.0, operations1, EaseTimingFunction::Create()));
528 float maximum_scale = 0.f;
529 EXPECT_TRUE(curve->MaximumScale(&maximum_scale));
530 EXPECT_EQ(3.f, maximum_scale);
532 TransformOperations operations2;
533 operations2.AppendScale(6.f, 3.f, 2.f);
534 curve->AddKeyframe(TransformKeyframe::Create(
535 2.0, operations2, EaseTimingFunction::Create()));
537 EXPECT_TRUE(curve->MaximumScale(&maximum_scale));
538 EXPECT_EQ(6.f, maximum_scale);
540 TransformOperations operations3;
541 operations3.AppendRotate(1.f, 0.f, 0.f, 90.f);
542 curve->AddKeyframe(TransformKeyframe::Create(
543 3.0, operations3, EaseTimingFunction::Create()));
545 EXPECT_FALSE(curve->MaximumScale(&maximum_scale));
548 } // namespace
549 } // namespace cc