Chromium Code Reviews| Index: cc/animation/keyframed_animation_curve_unittest.cc |
| diff --git a/cc/animation/keyframed_animation_curve_unittest.cc b/cc/animation/keyframed_animation_curve_unittest.cc |
| index eceba6fc9e550b3278c6ba7d3fbc871011272de2..516a3d23031243fa3b55daf99ae0d7c24f006477 100644 |
| --- a/cc/animation/keyframed_animation_curve_unittest.cc |
| +++ b/cc/animation/keyframed_animation_curve_unittest.cc |
| @@ -545,5 +545,79 @@ TEST(KeyframedAnimationCurveTest, MaximumScale) { |
| EXPECT_FALSE(curve->MaximumScale(&maximum_scale)); |
| } |
| +// Tests that an animation with a curve timing function works as expected. |
| +TEST(KeyframedAnimationCurveTest, CurveTiming) { |
| + scoped_ptr<KeyframedFloatAnimationCurve> curve( |
| + KeyframedFloatAnimationCurve::Create()); |
| + curve->AddKeyframe( |
| + FloatKeyframe::Create(0.0, 0.f, scoped_ptr<TimingFunction>())); |
| + curve->AddKeyframe( |
| + FloatKeyframe::Create(1.0, 1.f, scoped_ptr<TimingFunction>())); |
| + curve->SetTimingFunction( |
| + CubicBezierTimingFunction::Create(0.75f, 0.f, 0.25f, 1.f) |
| + .PassAs<TimingFunction>()); |
| + EXPECT_FLOAT_EQ(0.f, curve->GetValue(-1.f)); |
| + EXPECT_FLOAT_EQ(0.f, curve->GetValue(0.f)); |
| + EXPECT_NEAR(0.05f, curve->GetValue(0.25f), 0.005f); |
| + EXPECT_FLOAT_EQ(0.5f, curve->GetValue(0.5f)); |
| + EXPECT_NEAR(0.95f, curve->GetValue(0.75f), 0.005f); |
| + EXPECT_FLOAT_EQ(1.f, curve->GetValue(1.f)); |
| + EXPECT_FLOAT_EQ(1.f, curve->GetValue(2.f)); |
| +} |
| + |
| +// Tests that an animation with a curve and keyframe timing function works as |
| +// expected. |
| +TEST(KeyframedAnimationCurveTest, CurveAndKeyframeTiming) { |
|
samli
2014/09/24 07:55:32
The keyframe doesn't have a specified timing funct
ikilpatrick
2014/09/25 04:33:26
Keyframe: 473-577.
Curve: 581-583.
?
samli
2014/09/25 07:03:48
Yep, missed it sorry.
|
| + scoped_ptr<KeyframedFloatAnimationCurve> curve( |
| + KeyframedFloatAnimationCurve::Create()); |
| + curve->AddKeyframe(FloatKeyframe::Create( |
| + 0.0, |
| + 0.f, |
| + CubicBezierTimingFunction::Create(0.35f, 0.f, 0.65f, 1.f) |
| + .PassAs<TimingFunction>())); |
| + curve->AddKeyframe( |
| + FloatKeyframe::Create(1.0, 1.f, scoped_ptr<TimingFunction>())); |
| + // Curve timing function producing outputs outside of range [0,1]. |
| + curve->SetTimingFunction( |
| + CubicBezierTimingFunction::Create(0.5f, -0.5f, 0.5f, 1.5f) |
| + .PassAs<TimingFunction>()); |
| + EXPECT_FLOAT_EQ(0.f, curve->GetValue(-1.f)); |
| + EXPECT_FLOAT_EQ(0.f, curve->GetValue(0.f)); |
| + EXPECT_FLOAT_EQ(0.f, curve->GetValue(0.25f)); // Clamped. c(.25) < 0 |
| + EXPECT_NEAR(0.17f, curve->GetValue(0.42f), 0.005f); // c(.42)=.27, k(.27)=.17 |
| + EXPECT_FLOAT_EQ(0.5f, curve->GetValue(0.5f)); |
| + EXPECT_NEAR(0.83f, curve->GetValue(0.58f), 0.005f); // c(.58)=.73, k(.73)=.83 |
| + EXPECT_FLOAT_EQ(1.f, curve->GetValue(0.75f)); // Clamped. c(.75) > 1 |
| + EXPECT_FLOAT_EQ(1.f, curve->GetValue(1.f)); |
| + EXPECT_FLOAT_EQ(1.f, curve->GetValue(2.f)); |
| +} |
| + |
| +// Tests that an animation with a curve timing function and multiple keyframes |
| +// works as expected. |
| +TEST(KeyframedAnimationCurveTest, CurveTimingMultipleKeyframes) { |
| + scoped_ptr<KeyframedFloatAnimationCurve> curve( |
| + KeyframedFloatAnimationCurve::Create()); |
| + curve->AddKeyframe( |
| + FloatKeyframe::Create(0.0, 0.f, scoped_ptr<TimingFunction>())); |
| + curve->AddKeyframe( |
| + FloatKeyframe::Create(1.0, 1.f, scoped_ptr<TimingFunction>())); |
| + curve->AddKeyframe( |
| + FloatKeyframe::Create(2.0, 3.f, scoped_ptr<TimingFunction>())); |
| + curve->AddKeyframe( |
| + FloatKeyframe::Create(3.0, 6.f, scoped_ptr<TimingFunction>())); |
| + curve->AddKeyframe( |
| + FloatKeyframe::Create(4.0, 9.f, scoped_ptr<TimingFunction>())); |
| + curve->SetTimingFunction(CubicBezierTimingFunction::Create( |
| + 0.5f, 0.f, 0.5f, 1.f).PassAs<TimingFunction>()); |
| + EXPECT_FLOAT_EQ(0.f, curve->GetValue(-1.f)); |
| + EXPECT_FLOAT_EQ(0.f, curve->GetValue(0.f)); |
| + EXPECT_NEAR(0.42f, curve->GetValue(1.f), 0.005f); |
| + EXPECT_NEAR(1.f, curve->GetValue(1.455f), 0.005f); |
| + EXPECT_FLOAT_EQ(3.f, curve->GetValue(2.f)); |
| + EXPECT_NEAR(7.73f, curve->GetValue(3.f), 0.01f); |
| + EXPECT_FLOAT_EQ(9.f, curve->GetValue(4.f)); |
| + EXPECT_FLOAT_EQ(9.f, curve->GetValue(5.f)); |
| +} |
| + |
| } // namespace |
| } // namespace cc |