2 * Copyright (c) 2013, Google Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the
14 * * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 #include "core/animation/AnimationPlayer.h"
34 #include "core/animation/ActiveAnimations.h"
35 #include "core/animation/Animation.h"
36 #include "core/animation/AnimationClock.h"
37 #include "core/animation/AnimationTimeline.h"
38 #include "core/dom/Document.h"
39 #include "core/dom/QualifiedName.h"
40 #include "platform/weborigin/KURL.h"
41 #include <gtest/gtest.h>
43 using namespace blink;
47 class AnimationAnimationPlayerTest : public ::testing::Test {
51 setUpWithoutStartingTimeline();
55 void setUpWithoutStartingTimeline()
57 document = Document::create();
58 document->animationClock().resetTimeForTesting();
59 timeline = AnimationTimeline::create(document.get());
60 player = timeline->createAnimationPlayer(0);
61 player->setStartTime(0);
62 player->setSource(makeAnimation().get());
70 PassRefPtrWillBeRawPtr<Animation> makeAnimation(double duration = 30, double playbackRate = 1)
73 timing.iterationDuration = duration;
74 timing.playbackRate = playbackRate;
75 return Animation::create(0, nullptr, timing);
78 bool simulateFrame(double time)
80 document->animationClock().updateTime(time);
81 document->compositorPendingAnimations().update(false);
82 // The timeline does not know about our player, so we have to explicitly call update().
83 return player->update(TimingUpdateForAnimationFrame);
86 RefPtrWillBePersistent<Document> document;
87 RefPtrWillBePersistent<AnimationTimeline> timeline;
88 RefPtrWillBePersistent<AnimationPlayer> player;
89 TrackExceptionState exceptionState;
92 TEST_F(AnimationAnimationPlayerTest, InitialState)
94 setUpWithoutStartingTimeline();
95 player = timeline->createAnimationPlayer(0);
96 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
97 EXPECT_EQ(0, player->currentTimeInternal());
98 EXPECT_FALSE(player->paused());
99 EXPECT_EQ(1, player->playbackRate());
100 EXPECT_FALSE(player->hasStartTime());
101 EXPECT_TRUE(isNull(player->startTimeInternal()));
104 EXPECT_EQ(AnimationPlayer::Finished, player->playStateInternal());
105 EXPECT_EQ(0, timeline->currentTimeInternal());
106 EXPECT_EQ(0, player->currentTimeInternal());
107 EXPECT_FALSE(player->paused());
108 EXPECT_EQ(1, player->playbackRate());
109 EXPECT_EQ(0, player->startTimeInternal());
110 EXPECT_TRUE(player->hasStartTime());
114 TEST_F(AnimationAnimationPlayerTest, CurrentTimeDoesNotSetOutdated)
116 EXPECT_FALSE(player->outdated());
117 EXPECT_EQ(0, player->currentTimeInternal());
118 EXPECT_FALSE(player->outdated());
119 // FIXME: We should split simulateFrame into a version that doesn't update
120 // the player and one that does, as most of the tests don't require update()
122 document->animationClock().updateTime(10);
123 EXPECT_EQ(10, player->currentTimeInternal());
124 EXPECT_FALSE(player->outdated());
127 TEST_F(AnimationAnimationPlayerTest, SetCurrentTime)
129 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
130 player->setCurrentTimeInternal(10);
131 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
132 EXPECT_EQ(10, player->currentTimeInternal());
134 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
135 EXPECT_EQ(20, player->currentTimeInternal());
138 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimeNegative)
140 player->setCurrentTimeInternal(-10);
141 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
142 EXPECT_EQ(-10, player->currentTimeInternal());
144 EXPECT_EQ(10, player->currentTimeInternal());
146 player->setPlaybackRate(-2);
147 player->setCurrentTimeInternal(-10);
148 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
149 EXPECT_EQ(-10, player->currentTimeInternal());
151 EXPECT_EQ(AnimationPlayer::Finished, player->playStateInternal());
152 EXPECT_EQ(-10, player->currentTimeInternal());
155 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimeNegativeWithoutSimultaneousPlaybackRateChange)
158 EXPECT_EQ(20, player->currentTimeInternal());
159 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
160 player->setPlaybackRate(-1);
161 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
163 EXPECT_EQ(20, player->currentTimeInternal());
164 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
165 player->setCurrentTimeInternal(-10);
166 EXPECT_EQ(AnimationPlayer::Finished, player->playStateInternal());
169 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimePastContentEnd)
171 player->setCurrentTimeInternal(50);
172 EXPECT_EQ(AnimationPlayer::Finished, player->playStateInternal());
173 EXPECT_EQ(50, player->currentTimeInternal());
175 EXPECT_EQ(AnimationPlayer::Finished, player->playStateInternal());
176 EXPECT_EQ(50, player->currentTimeInternal());
178 player->setPlaybackRate(-2);
179 player->setCurrentTimeInternal(50);
180 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
181 EXPECT_EQ(50, player->currentTimeInternal());
183 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
185 EXPECT_EQ(10, player->currentTimeInternal());
188 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimeBeforeTimelineStarted)
190 setUpWithoutStartingTimeline();
191 player->setCurrentTimeInternal(5);
192 EXPECT_EQ(5, player->currentTimeInternal());
195 EXPECT_EQ(15, player->currentTimeInternal());
198 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimePastContentEndBeforeTimelineStarted)
200 setUpWithoutStartingTimeline();
201 player->setCurrentTimeInternal(250);
202 EXPECT_EQ(250, player->currentTimeInternal());
205 EXPECT_EQ(250, player->currentTimeInternal());
208 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimeMax)
210 player->setCurrentTimeInternal(std::numeric_limits<double>::max());
211 EXPECT_EQ(std::numeric_limits<double>::max(), player->currentTimeInternal());
213 EXPECT_EQ(std::numeric_limits<double>::max(), player->currentTimeInternal());
216 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimeUnrestrictedDouble)
219 player->setCurrentTime(nullValue());
220 EXPECT_EQ(10, player->currentTimeInternal());
221 player->setCurrentTime(std::numeric_limits<double>::infinity());
222 EXPECT_EQ(10, player->currentTimeInternal());
223 player->setCurrentTime(-std::numeric_limits<double>::infinity());
224 EXPECT_EQ(10, player->currentTimeInternal());
228 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimeSetsStartTime)
230 EXPECT_EQ(0, player->startTime());
231 player->setCurrentTime(1000);
232 EXPECT_EQ(-1000, player->startTime());
234 EXPECT_EQ(-1000, player->startTime());
235 EXPECT_EQ(2000, player->currentTime());
238 TEST_F(AnimationAnimationPlayerTest, SetStartTime)
241 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
242 EXPECT_EQ(0, player->startTimeInternal());
243 EXPECT_EQ(20, player->currentTimeInternal());
244 player->setStartTime(10 * 1000);
245 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
246 EXPECT_EQ(10, player->startTimeInternal());
247 EXPECT_EQ(10, player->currentTimeInternal());
249 EXPECT_EQ(10, player->startTimeInternal());
250 EXPECT_EQ(20, player->currentTimeInternal());
251 player->setStartTime(-20 * 1000);
252 EXPECT_EQ(AnimationPlayer::Finished, player->playStateInternal());
255 TEST_F(AnimationAnimationPlayerTest, SetStartTimeLimitsAnimationPlayer)
257 player->setStartTime(-50 * 1000);
258 EXPECT_EQ(AnimationPlayer::Finished, player->playStateInternal());
259 EXPECT_EQ(30, player->currentTimeInternal());
260 player->setPlaybackRate(-1);
261 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
262 player->setStartTime(-100 * 1000);
263 EXPECT_EQ(AnimationPlayer::Finished, player->playStateInternal());
264 EXPECT_EQ(0, player->currentTimeInternal());
265 EXPECT_TRUE(player->finished());
268 TEST_F(AnimationAnimationPlayerTest, SetStartTimeOnLimitedAnimationPlayer)
271 player->setStartTime(-10 * 1000);
272 EXPECT_EQ(AnimationPlayer::Finished, player->playStateInternal());
273 EXPECT_EQ(30, player->currentTimeInternal());
274 player->setCurrentTimeInternal(50);
275 player->setStartTime(-40 * 1000);
276 EXPECT_EQ(30, player->currentTimeInternal());
277 EXPECT_EQ(AnimationPlayer::Finished, player->playStateInternal());
278 EXPECT_TRUE(player->finished());
281 TEST_F(AnimationAnimationPlayerTest, StartTimePauseFinish)
284 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
285 EXPECT_TRUE(std::isnan(player->startTime()));
286 player->finish(exceptionState);
287 EXPECT_EQ(AnimationPlayer::Paused, player->playStateInternal());
288 EXPECT_TRUE(std::isnan(player->startTime()));
291 TEST_F(AnimationAnimationPlayerTest, PauseBeatsFinish)
294 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
296 EXPECT_EQ(AnimationPlayer::Paused, player->playStateInternal());
297 player->finish(exceptionState);
298 EXPECT_EQ(AnimationPlayer::Paused, player->playStateInternal());
301 TEST_F(AnimationAnimationPlayerTest, StartTimeFinishPause)
303 player->finish(exceptionState);
304 EXPECT_EQ(-30 * 1000, player->startTime());
306 EXPECT_TRUE(std::isnan(player->startTime()));
309 TEST_F(AnimationAnimationPlayerTest, StartTimeWithZeroPlaybackRate)
311 player->setPlaybackRate(0);
312 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
313 EXPECT_TRUE(std::isnan(player->startTime()));
315 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
318 TEST_F(AnimationAnimationPlayerTest, PausePlay)
322 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
323 EXPECT_TRUE(player->paused());
324 EXPECT_EQ(10, player->currentTimeInternal());
326 EXPECT_EQ(AnimationPlayer::Paused, player->playStateInternal());
328 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
330 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
331 EXPECT_FALSE(player->paused());
332 EXPECT_EQ(10, player->currentTimeInternal());
334 EXPECT_EQ(20, player->currentTimeInternal());
337 TEST_F(AnimationAnimationPlayerTest, PauseBeforeTimelineStarted)
339 setUpWithoutStartingTimeline();
341 EXPECT_TRUE(player->paused());
343 EXPECT_FALSE(player->paused());
348 EXPECT_TRUE(player->paused());
349 EXPECT_EQ(0, player->currentTimeInternal());
352 TEST_F(AnimationAnimationPlayerTest, PlayRewindsToStart)
354 player->setCurrentTimeInternal(30);
356 EXPECT_EQ(0, player->currentTimeInternal());
358 player->setCurrentTimeInternal(40);
360 EXPECT_EQ(0, player->currentTimeInternal());
361 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
363 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
365 player->setCurrentTimeInternal(-10);
366 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
368 EXPECT_EQ(0, player->currentTimeInternal());
369 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
372 TEST_F(AnimationAnimationPlayerTest, PlayRewindsToEnd)
374 player->setPlaybackRate(-1);
376 EXPECT_EQ(30, player->currentTimeInternal());
378 player->setCurrentTimeInternal(40);
379 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
381 EXPECT_EQ(30, player->currentTimeInternal());
382 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
384 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
386 player->setCurrentTimeInternal(-10);
388 EXPECT_EQ(30, player->currentTimeInternal());
389 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
391 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
394 TEST_F(AnimationAnimationPlayerTest, PlayWithPlaybackRateZeroDoesNotSeek)
396 player->setPlaybackRate(0);
398 EXPECT_EQ(0, player->currentTimeInternal());
400 player->setCurrentTimeInternal(40);
402 EXPECT_EQ(40, player->currentTimeInternal());
404 player->setCurrentTimeInternal(-10);
406 EXPECT_EQ(-10, player->currentTimeInternal());
409 TEST_F(AnimationAnimationPlayerTest, PlayAfterPauseWithPlaybackRateZeroUpdatesPlayState)
412 player->setPlaybackRate(0);
414 EXPECT_EQ(AnimationPlayer::Paused, player->playStateInternal());
416 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
419 TEST_F(AnimationAnimationPlayerTest, Reverse)
421 player->setCurrentTimeInternal(10);
424 EXPECT_FALSE(player->paused());
425 EXPECT_EQ(-1, player->playbackRate());
426 EXPECT_EQ(10, player->currentTimeInternal());
429 TEST_F(AnimationAnimationPlayerTest, ReverseDoesNothingWithPlaybackRateZero)
431 player->setCurrentTimeInternal(10);
432 player->setPlaybackRate(0);
435 EXPECT_TRUE(player->paused());
436 EXPECT_EQ(0, player->playbackRate());
437 EXPECT_EQ(10, player->currentTimeInternal());
440 TEST_F(AnimationAnimationPlayerTest, ReverseDoesNotSeekWithNoSource)
442 player->setSource(0);
443 player->setCurrentTimeInternal(10);
445 EXPECT_EQ(10, player->currentTimeInternal());
448 TEST_F(AnimationAnimationPlayerTest, ReverseSeeksToStart)
450 player->setCurrentTimeInternal(-10);
451 player->setPlaybackRate(-1);
453 EXPECT_EQ(0, player->currentTimeInternal());
456 TEST_F(AnimationAnimationPlayerTest, ReverseSeeksToEnd)
458 player->setCurrentTimeInternal(40);
460 EXPECT_EQ(30, player->currentTimeInternal());
463 TEST_F(AnimationAnimationPlayerTest, ReverseBeyondLimit)
465 player->setCurrentTimeInternal(40);
466 player->setPlaybackRate(-1);
468 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
469 EXPECT_EQ(0, player->currentTimeInternal());
471 player->setCurrentTimeInternal(-10);
473 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
474 EXPECT_EQ(30, player->currentTimeInternal());
478 TEST_F(AnimationAnimationPlayerTest, Finish)
480 player->finish(exceptionState);
481 EXPECT_EQ(30, player->currentTimeInternal());
482 EXPECT_TRUE(player->finished());
484 player->setPlaybackRate(-1);
485 player->finish(exceptionState);
486 EXPECT_EQ(0, player->currentTimeInternal());
487 EXPECT_TRUE(player->finished());
489 EXPECT_FALSE(exceptionState.hadException());
492 TEST_F(AnimationAnimationPlayerTest, FinishAfterSourceEnd)
494 player->setCurrentTimeInternal(40);
495 player->finish(exceptionState);
496 EXPECT_EQ(30, player->currentTimeInternal());
499 TEST_F(AnimationAnimationPlayerTest, FinishBeforeStart)
501 player->setCurrentTimeInternal(-10);
502 player->setPlaybackRate(-1);
503 player->finish(exceptionState);
504 EXPECT_EQ(0, player->currentTimeInternal());
507 TEST_F(AnimationAnimationPlayerTest, FinishDoesNothingWithPlaybackRateZero)
509 player->setCurrentTimeInternal(10);
510 player->setPlaybackRate(0);
511 player->finish(exceptionState);
512 EXPECT_EQ(10, player->currentTimeInternal());
515 TEST_F(AnimationAnimationPlayerTest, FinishRaisesException)
518 timing.iterationDuration = 1;
519 timing.iterationCount = std::numeric_limits<double>::infinity();
520 player->setSource(Animation::create(0, nullptr, timing).get());
521 player->setCurrentTimeInternal(10);
523 player->finish(exceptionState);
524 EXPECT_EQ(10, player->currentTimeInternal());
525 EXPECT_TRUE(exceptionState.hadException());
526 EXPECT_EQ(InvalidStateError, exceptionState.code());
530 TEST_F(AnimationAnimationPlayerTest, LimitingAtSourceEnd)
533 EXPECT_EQ(30, player->currentTimeInternal());
534 EXPECT_TRUE(player->finished());
536 EXPECT_EQ(30, player->currentTimeInternal());
537 EXPECT_FALSE(player->paused());
540 TEST_F(AnimationAnimationPlayerTest, LimitingAtStart)
543 player->setPlaybackRate(-2);
546 EXPECT_EQ(0, player->currentTimeInternal());
547 EXPECT_TRUE(player->finished());
549 EXPECT_EQ(0, player->currentTimeInternal());
550 EXPECT_FALSE(player->paused());
553 TEST_F(AnimationAnimationPlayerTest, LimitingWithNoSource)
555 player->setSource(0);
556 EXPECT_TRUE(player->finished());
558 EXPECT_EQ(0, player->currentTimeInternal());
562 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRate)
564 player->setPlaybackRate(2);
566 EXPECT_EQ(2, player->playbackRate());
567 EXPECT_EQ(0, player->currentTimeInternal());
569 EXPECT_EQ(20, player->currentTimeInternal());
572 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRateBeforeTimelineStarted)
574 setUpWithoutStartingTimeline();
575 player->setPlaybackRate(2);
576 EXPECT_EQ(2, player->playbackRate());
577 EXPECT_EQ(0, player->currentTimeInternal());
580 EXPECT_EQ(20, player->currentTimeInternal());
583 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRateWhilePaused)
587 player->setPlaybackRate(2);
590 EXPECT_EQ(10, player->currentTimeInternal());
593 EXPECT_EQ(20, player->currentTimeInternal());
596 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRateWhileLimited)
599 EXPECT_EQ(30, player->currentTimeInternal());
600 player->setPlaybackRate(2);
602 EXPECT_EQ(30, player->currentTimeInternal());
603 player->setPlaybackRate(-2);
606 EXPECT_FALSE(player->finished());
607 EXPECT_EQ(10, player->currentTimeInternal());
610 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRateZero)
614 player->setPlaybackRate(0);
616 EXPECT_EQ(10, player->currentTimeInternal());
618 EXPECT_EQ(10, player->currentTimeInternal());
619 player->setCurrentTimeInternal(20);
620 EXPECT_EQ(20, player->currentTimeInternal());
623 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRateMax)
625 player->setPlaybackRate(std::numeric_limits<double>::max());
627 EXPECT_EQ(std::numeric_limits<double>::max(), player->playbackRate());
628 EXPECT_EQ(0, player->currentTimeInternal());
630 EXPECT_EQ(30, player->currentTimeInternal());
634 TEST_F(AnimationAnimationPlayerTest, SetSource)
636 player = timeline->createAnimationPlayer(0);
637 player->setStartTime(0);
638 RefPtrWillBeRawPtr<AnimationNode> source1 = makeAnimation();
639 RefPtrWillBeRawPtr<AnimationNode> source2 = makeAnimation();
640 player->setSource(source1.get());
641 EXPECT_EQ(source1, player->source());
642 EXPECT_EQ(0, player->currentTimeInternal());
643 player->setCurrentTimeInternal(15);
644 player->setSource(source2.get());
645 EXPECT_EQ(15, player->currentTimeInternal());
646 EXPECT_EQ(0, source1->player());
647 EXPECT_EQ(player.get(), source2->player());
648 EXPECT_EQ(source2, player->source());
651 TEST_F(AnimationAnimationPlayerTest, SetSourceLimitsAnimationPlayer)
653 player->setCurrentTimeInternal(20);
654 player->setSource(makeAnimation(10).get());
655 EXPECT_EQ(20, player->currentTimeInternal());
656 EXPECT_TRUE(player->finished());
658 EXPECT_EQ(20, player->currentTimeInternal());
661 TEST_F(AnimationAnimationPlayerTest, SetSourceUnlimitsAnimationPlayer)
663 player->setCurrentTimeInternal(40);
664 player->setSource(makeAnimation(60).get());
665 EXPECT_FALSE(player->finished());
666 EXPECT_EQ(40, player->currentTimeInternal());
668 EXPECT_EQ(50, player->currentTimeInternal());
672 TEST_F(AnimationAnimationPlayerTest, EmptyAnimationPlayersDontUpdateEffects)
674 player = timeline->createAnimationPlayer(0);
675 player->update(TimingUpdateOnDemand);
676 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
679 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
682 TEST_F(AnimationAnimationPlayerTest, AnimationPlayersDisassociateFromSource)
684 AnimationNode* animationNode = player->source();
685 AnimationPlayer* player2 = timeline->createAnimationPlayer(animationNode);
686 EXPECT_EQ(0, player->source());
687 player->setSource(animationNode);
688 EXPECT_EQ(0, player2->source());
691 TEST_F(AnimationAnimationPlayerTest, AnimationPlayersReturnTimeToNextEffect)
694 timing.startDelay = 1;
695 timing.iterationDuration = 1;
697 RefPtrWillBeRawPtr<Animation> animation = Animation::create(0, nullptr, timing);
698 player = timeline->createAnimationPlayer(animation.get());
699 player->setStartTime(0);
702 EXPECT_EQ(1, player->timeToEffectChange());
705 EXPECT_EQ(0.5, player->timeToEffectChange());
708 EXPECT_EQ(0, player->timeToEffectChange());
711 EXPECT_EQ(0, player->timeToEffectChange());
714 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
717 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
719 player->setCurrentTimeInternal(0);
721 EXPECT_EQ(1, player->timeToEffectChange());
723 player->setPlaybackRate(2);
725 EXPECT_EQ(0.5, player->timeToEffectChange());
727 player->setPlaybackRate(0);
728 player->update(TimingUpdateOnDemand);
729 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
731 player->setCurrentTimeInternal(3);
732 player->setPlaybackRate(-1);
733 player->update(TimingUpdateOnDemand);
735 EXPECT_EQ(1, player->timeToEffectChange());
737 player->setPlaybackRate(-2);
738 player->update(TimingUpdateOnDemand);
740 EXPECT_EQ(0.5, player->timeToEffectChange());
743 TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenPaused)
745 EXPECT_EQ(0, player->timeToEffectChange());
747 player->update(TimingUpdateOnDemand);
748 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
751 TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenCancelledBeforeStart)
753 EXPECT_EQ(0, player->timeToEffectChange());
754 player->setCurrentTimeInternal(-8);
755 player->setPlaybackRate(2);
756 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
758 EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal());
759 player->update(TimingUpdateOnDemand);
760 // This frame will fire the finish event event though no start time has been
761 // received from the compositor yet, as cancel() nukes start times.
763 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
766 TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenCancelledBeforeStartReverse)
768 EXPECT_EQ(0, player->timeToEffectChange());
769 player->setCurrentTimeInternal(9);
770 player->setPlaybackRate(-3);
771 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
773 EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal());
774 player->update(TimingUpdateOnDemand);
775 // This frame will fire the finish event event though no start time has been
776 // received from the compositor yet, as cancel() nukes start times.
778 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
781 TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectSimpleCancelledBeforeStart)
783 EXPECT_EQ(0, player->timeToEffectChange());
784 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
786 player->update(TimingUpdateOnDemand);
787 // This frame will fire the finish event event though no start time has been
788 // received from the compositor yet, as cancel() nukes start times.
790 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
793 TEST_F(AnimationAnimationPlayerTest, AttachedAnimationPlayers)
795 RefPtrWillBePersistent<Element> element = document->createElement("foo", ASSERT_NO_EXCEPTION);
798 RefPtrWillBeRawPtr<Animation> animation = Animation::create(element.get(), nullptr, timing);
799 RefPtrWillBeRawPtr<AnimationPlayer> player = timeline->createAnimationPlayer(animation.get());
801 timeline->serviceAnimations(TimingUpdateForAnimationFrame);
802 EXPECT_EQ(1U, element->activeAnimations()->players().find(player.get())->value);
805 Heap::collectAllGarbage();
806 EXPECT_TRUE(element->activeAnimations()->players().isEmpty());
809 TEST_F(AnimationAnimationPlayerTest, HasLowerPriority)
811 RefPtrWillBeRawPtr<AnimationPlayer> player1 = timeline->createAnimationPlayer(0);
812 RefPtrWillBeRawPtr<AnimationPlayer> player2 = timeline->createAnimationPlayer(0);
813 EXPECT_TRUE(AnimationPlayer::hasLowerPriority(player1.get(), player2.get()));
816 TEST_F(AnimationAnimationPlayerTest, PlayAfterCancel)
819 EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal());
820 EXPECT_TRUE(std::isnan(player->currentTime()));
821 EXPECT_TRUE(std::isnan(player->startTime()));
823 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
824 EXPECT_EQ(0, player->currentTime());
825 EXPECT_TRUE(std::isnan(player->startTime()));
827 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
828 EXPECT_EQ(0, player->currentTime());
829 EXPECT_EQ(10 * 1000, player->startTime());
832 TEST_F(AnimationAnimationPlayerTest, PlayBackwardsAfterCancel)
834 player->setPlaybackRate(-1);
835 player->setCurrentTime(15 * 1000);
838 EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal());
839 EXPECT_TRUE(std::isnan(player->currentTime()));
840 EXPECT_TRUE(std::isnan(player->startTime()));
842 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
843 EXPECT_EQ(30 * 1000, player->currentTime());
844 EXPECT_TRUE(std::isnan(player->startTime()));
846 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
847 EXPECT_EQ(30 * 1000, player->currentTime());
848 EXPECT_EQ(40 * 1000, player->startTime());
851 TEST_F(AnimationAnimationPlayerTest, ReverseAfterCancel)
854 EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal());
855 EXPECT_TRUE(std::isnan(player->currentTime()));
856 EXPECT_TRUE(std::isnan(player->startTime()));
858 EXPECT_EQ(AnimationPlayer::Pending, player->playStateInternal());
859 EXPECT_EQ(30 * 1000, player->currentTime());
860 EXPECT_TRUE(std::isnan(player->startTime()));
862 EXPECT_EQ(AnimationPlayer::Running, player->playStateInternal());
863 EXPECT_EQ(30 * 1000, player->currentTime());
864 EXPECT_EQ(40 * 1000, player->startTime());
867 TEST_F(AnimationAnimationPlayerTest, FinishAfterCancel)
870 EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal());
871 EXPECT_TRUE(std::isnan(player->currentTime()));
872 EXPECT_TRUE(std::isnan(player->startTime()));
873 player->finish(exceptionState);
874 EXPECT_TRUE(std::isnan(player->currentTime()));
875 EXPECT_TRUE(std::isnan(player->startTime()));
876 EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal());
879 TEST_F(AnimationAnimationPlayerTest, PauseAfterCancel)
882 EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal());
883 EXPECT_TRUE(std::isnan(player->currentTime()));
884 EXPECT_TRUE(std::isnan(player->startTime()));
886 EXPECT_EQ(AnimationPlayer::Idle, player->playStateInternal());
887 EXPECT_TRUE(std::isnan(player->currentTime()));
888 EXPECT_TRUE(std::isnan(player->startTime()));