Index: Source/core/animation/AnimationPlayerTest.cpp |
diff --git a/Source/core/animation/AnimationPlayerTest.cpp b/Source/core/animation/AnimationPlayerTest.cpp |
index 28cd31ae4422de98d2cb849f5ae1879d9c31d5bd..301a8fac4f727d46e0af081f5d82b6e75977bf13 100644 |
--- a/Source/core/animation/AnimationPlayerTest.cpp |
+++ b/Source/core/animation/AnimationPlayerTest.cpp |
@@ -754,10 +754,14 @@ TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenCancelledBeforeStart) |
EXPECT_EQ(0, player->timeToEffectChange()); |
player->setCurrentTimeInternal(-8); |
player->setPlaybackRate(2); |
+ EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal()); |
player->cancel(); |
+ EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal()); |
player->update(TimingUpdateOnDemand); |
+ // This frame will fire the finish event event though no start time has been |
+ // received from the compositor yet, as cancel() nukes start times. |
simulateFrame(0); |
- EXPECT_EQ(4, player->timeToEffectChange()); |
+ EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange()); |
} |
TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenCancelledBeforeStartReverse) |
@@ -765,10 +769,26 @@ TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenCancelledBeforeStartRev |
EXPECT_EQ(0, player->timeToEffectChange()); |
player->setCurrentTimeInternal(9); |
player->setPlaybackRate(-3); |
+ EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal()); |
player->cancel(); |
+ EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal()); |
player->update(TimingUpdateOnDemand); |
+ // This frame will fire the finish event event though no start time has been |
+ // received from the compositor yet, as cancel() nukes start times. |
simulateFrame(0); |
- EXPECT_EQ(3, player->timeToEffectChange()); |
+ EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange()); |
+} |
+ |
+TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectSimpleCancelledBeforeStart) |
+{ |
+ EXPECT_EQ(0, player->timeToEffectChange()); |
+ EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal()); |
+ player->cancel(); |
+ player->update(TimingUpdateOnDemand); |
+ // This frame will fire the finish event event though no start time has been |
+ // received from the compositor yet, as cancel() nukes start times. |
+ simulateFrame(0); |
+ EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange()); |
} |
TEST_F(AnimationAnimationPlayerTest, AttachedAnimationPlayers) |
@@ -794,4 +814,81 @@ TEST_F(AnimationAnimationPlayerTest, HasLowerPriority) |
EXPECT_TRUE(AnimationPlayer::hasLowerPriority(player1.get(), player2.get())); |
} |
+TEST_F(AnimationAnimationPlayerTest, PlayAfterCancel) |
+{ |
+ player->cancel(); |
+ EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal()); |
+ EXPECT_TRUE(std::isnan(player->currentTime())); |
+ EXPECT_TRUE(std::isnan(player->startTime())); |
+ player->play(); |
+ EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal()); |
+ EXPECT_EQ(0, player->currentTime()); |
+ EXPECT_TRUE(std::isnan(player->startTime())); |
+ simulateFrame(10); |
+ EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal()); |
+ EXPECT_EQ(0, player->currentTime()); |
+ EXPECT_EQ(10 * 1000, player->startTime()); |
+} |
+ |
+TEST_F(AnimationAnimationPlayerTest, PlayBackwardsAfterCancel) |
+{ |
+ player->setPlaybackRate(-1); |
+ player->setCurrentTime(15 * 1000); |
+ simulateFrame(0); |
+ player->cancel(); |
+ EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal()); |
+ EXPECT_TRUE(std::isnan(player->currentTime())); |
+ EXPECT_TRUE(std::isnan(player->startTime())); |
+ player->play(); |
+ EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal()); |
+ EXPECT_EQ(30 * 1000, player->currentTime()); |
+ EXPECT_TRUE(std::isnan(player->startTime())); |
+ simulateFrame(10); |
+ EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal()); |
+ EXPECT_EQ(30 * 1000, player->currentTime()); |
+ EXPECT_EQ(40 * 1000, player->startTime()); |
+} |
+ |
+// FIXME: crbug.com/410229, when fixed, will reuqire the expected results of |
+// this test to change (currentTime -> 30 * 1000). |
+TEST_F(AnimationAnimationPlayerTest, ReverseAfterCancel) |
+{ |
+ player->cancel(); |
+ EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal()); |
+ EXPECT_TRUE(std::isnan(player->currentTime())); |
+ EXPECT_TRUE(std::isnan(player->startTime())); |
+ player->reverse(); |
+ EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal()); |
+ EXPECT_TRUE(std::isnan(player->currentTime())); |
+ EXPECT_TRUE(std::isnan(player->startTime())); |
+ simulateFrame(10); |
+ EXPECT_EQ(AnimationPlayer::Finished, player->playStateInternal()); |
+ EXPECT_EQ(0 * 1000, player->currentTime()); |
+ EXPECT_EQ(10 * 1000, player->startTime()); |
+} |
+ |
+TEST_F(AnimationAnimationPlayerTest, FinishAfterCancel) |
+{ |
+ player->cancel(); |
+ EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal()); |
+ EXPECT_TRUE(std::isnan(player->currentTime())); |
+ EXPECT_TRUE(std::isnan(player->startTime())); |
+ player->finish(exceptionState); |
+ EXPECT_EQ(AnimationPlayer::Finished, player->playStateInternal()); |
+ EXPECT_EQ(30 * 1000, player->currentTime()); |
+ EXPECT_EQ(0, player->startTime()); |
+} |
+ |
+TEST_F(AnimationAnimationPlayerTest, PauseAfterCancel) |
+{ |
+ player->cancel(); |
+ EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal()); |
+ EXPECT_TRUE(std::isnan(player->currentTime())); |
+ EXPECT_TRUE(std::isnan(player->startTime())); |
+ player->pause(); |
+ EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal()); |
+ EXPECT_TRUE(std::isnan(player->currentTime())); |
+ EXPECT_TRUE(std::isnan(player->startTime())); |
+} |
+ |
} |