base::Time::kMicrosecondsPerSecond);
}
-scoped_ptr<Animation> CreateAnimation(double iterations, double duration) {
+scoped_ptr<Animation> CreateAnimation(double iterations,
+ double duration,
+ double playback_rate) {
scoped_ptr<Animation> to_return(Animation::Create(
make_scoped_ptr(
new FakeFloatAnimationCurve(duration)).PassAs<AnimationCurve>(),
1,
Animation::Opacity));
to_return->set_iterations(iterations);
+ to_return->set_playback_rate(playback_rate);
return to_return.Pass();
}
+scoped_ptr<Animation> CreateAnimation(double iterations, double duration) {
+ return CreateAnimation(iterations, duration, 1);
+}
+
scoped_ptr<Animation> CreateAnimation(double iterations) {
- return CreateAnimation(iterations, 1);
+ return CreateAnimation(iterations, 1, 1);
}
TEST(AnimationTest, TrimTimeZeroIterations) {
EXPECT_EQ(Animation::Running, anim->run_state());
}
+TEST(AnimationTest, TrimTimePlaybackNormal) {
+ scoped_ptr<Animation> anim(CreateAnimation(1, 1, 1));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
+}
+
+TEST(AnimationTest, TrimTimePlaybackSlow) {
+ scoped_ptr<Animation> anim(CreateAnimation(1, 1, 0.5));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
+ EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
+ EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)));
+}
+
+TEST(AnimationTest, TrimTimePlaybackFast) {
+ scoped_ptr<Animation> anim(CreateAnimation(1, 4, 2));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
+ EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
+ EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
+ EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
+}
+
+TEST(AnimationTest, TrimTimePlaybackNormalReverse) {
+ scoped_ptr<Animation> anim(CreateAnimation(1, 2, -1));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
+ EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)));
+ EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
+}
+
+TEST(AnimationTest, TrimTimePlaybackSlowReverse) {
+ scoped_ptr<Animation> anim(CreateAnimation(1, 2, -0.5));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
+ EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)));
+ EXPECT_EQ(1.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(1.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
+ EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
+ EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3)));
+ EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4)));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)));
+}
+
+TEST(AnimationTest, TrimTimePlaybackFastReverse) {
+ scoped_ptr<Animation> anim(CreateAnimation(1, 2, -2));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
+ EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)));
+ EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
+ EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
+}
+
+TEST(AnimationTest, TrimTimePlaybackFastInfiniteIterations) {
+ scoped_ptr<Animation> anim(CreateAnimation(-1, 4, 4));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
+ EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1000.0)));
+ EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1000.5)));
+}
+
+TEST(AnimationTest, TrimTimePlaybackNormalDoubleReverse) {
+ scoped_ptr<Animation> anim(CreateAnimation(1, 1, -1));
+ anim->set_direction(Animation::Reverse);
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
+}
+
+TEST(AnimationTest, TrimTimePlaybackFastDoubleReverse) {
+ scoped_ptr<Animation> anim(CreateAnimation(1, 4, -2));
+ anim->set_direction(Animation::Reverse);
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
+ EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
+ EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
+ EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
+ EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
+}
+
+TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFast) {
+ scoped_ptr<Animation> anim(CreateAnimation(2, 2, 2));
+ anim->set_direction(Animation::Alternate);
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
+ EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
+}
+
+TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFastReverse) {
+ scoped_ptr<Animation> anim(CreateAnimation(2, 2, 2));
+ anim->set_direction(Animation::AlternateReverse);
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
+ EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
+ EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
+ EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
+ EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
+ EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
+}
+
+TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFastDoubleReverse) {
+ scoped_ptr<Animation> anim(CreateAnimation(2, 2, -2));
+ anim->set_direction(Animation::AlternateReverse);
+ EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
+ EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
+ EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
+ EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
+ EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
+}
+
+TEST(AnimationTest,
+ TrimTimeAlternateReverseThreeIterationsPlaybackFastAlternateReverse) {
+ scoped_ptr<Animation> anim(CreateAnimation(3, 2, -2));
+ anim->set_direction(Animation::AlternateReverse);
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
+ EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
+ EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.75)));
+ EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)));
+ EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.25)));
+}
+
+TEST(AnimationTest,
+ TrimTimeAlternateReverseTwoIterationsPlaybackNormalAlternate) {
+ scoped_ptr<Animation> anim(CreateAnimation(2, 2, -1));
+ anim->set_direction(Animation::Alternate);
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
+ EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
+ EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)));
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)));
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)));
+}
+
+TEST(AnimationTest, TrimTimeIterationStart) {
+ scoped_ptr<Animation> anim(CreateAnimation(2, 1, 1));
+ anim->set_iteration_start(0.5);
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
+}
+
+TEST(AnimationTest, TrimTimeIterationStartAlternate) {
+ scoped_ptr<Animation> anim(CreateAnimation(2, 1, 1));
+ anim->set_direction(Animation::Alternate);
+ anim->set_iteration_start(0.3);
+ EXPECT_EQ(0.3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
+ EXPECT_EQ(0.8, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.7)));
+ EXPECT_EQ(0.7, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.2)));
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.7)));
+}
+
+TEST(AnimationTest, TrimTimeIterationStartAlternateThreeIterations) {
+ scoped_ptr<Animation> anim(CreateAnimation(3, 1, 1));
+ anim->set_direction(Animation::Alternate);
+ anim->set_iteration_start(1);
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
+ EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)));
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)));
+}
+
+TEST(AnimationTest,
+ TrimTimeIterationStartAlternateThreeIterationsPlaybackReverse) {
+ scoped_ptr<Animation> anim(CreateAnimation(3, 1, -1));
+ anim->set_direction(Animation::Alternate);
+ anim->set_iteration_start(1);
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
+ EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)));
+ EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)));
+}
+
+TEST(AnimationTest, InEffectFillMode) {
+ scoped_ptr<Animation> anim(CreateAnimation(1));
+ anim->set_fill_mode(Animation::FillModeNone);
+ EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0)));
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
+
+ anim->set_fill_mode(Animation::FillModeForwards);
+ EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0)));
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
+
+ anim->set_fill_mode(Animation::FillModeBackwards);
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0)));
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
+
+ anim->set_fill_mode(Animation::FillModeBoth);
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0)));
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
+}
+
+TEST(AnimationTest, InEffectFillModePlayback) {
+ scoped_ptr<Animation> anim(CreateAnimation(1, 1, -1));
+ anim->set_fill_mode(Animation::FillModeNone);
+ EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0)));
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
+
+ anim->set_fill_mode(Animation::FillModeForwards);
+ EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0)));
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
+
+ anim->set_fill_mode(Animation::FillModeBackwards);
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0)));
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
+
+ anim->set_fill_mode(Animation::FillModeBoth);
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0)));
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
+ EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
+}
+
} // namespace
} // namespace cc