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->setStartTimeInternal(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 updateTimeline(double time)
80 document->animationClock().updateTime(time);
81 // The timeline does not know about our player, so we have to explicitly call update().
82 return player->update(TimingUpdateOnDemand);
85 RefPtrWillBePersistent<Document> document;
86 RefPtrWillBePersistent<AnimationTimeline> timeline;
87 RefPtrWillBePersistent<AnimationPlayer> player;
88 TrackExceptionState exceptionState;
91 TEST_F(AnimationAnimationPlayerTest, InitialState)
93 setUpWithoutStartingTimeline();
94 player = timeline->createAnimationPlayer(0);
95 EXPECT_EQ(0, player->currentTimeInternal());
96 EXPECT_FALSE(player->paused());
97 EXPECT_EQ(1, player->playbackRate());
98 EXPECT_FALSE(player->hasStartTime());
99 EXPECT_TRUE(isNull(player->startTimeInternal()));
102 player->setStartTimeInternal(0);
103 EXPECT_EQ(0, timeline->currentTimeInternal());
104 EXPECT_EQ(0, player->currentTimeInternal());
105 EXPECT_FALSE(player->paused());
106 EXPECT_EQ(1, player->playbackRate());
107 EXPECT_EQ(0, player->startTimeInternal());
108 EXPECT_TRUE(player->hasStartTime());
112 TEST_F(AnimationAnimationPlayerTest, CurrentTimeDoesNotSetOutdated)
114 EXPECT_FALSE(player->outdated());
115 EXPECT_EQ(0, player->currentTimeInternal());
116 EXPECT_FALSE(player->outdated());
117 // FIXME: We should split updateTimeline into a version that doesn't update
118 // the player and one that does, as most of the tests don't require update()
120 document->animationClock().updateTime(10);
121 EXPECT_EQ(10, player->currentTimeInternal());
122 EXPECT_FALSE(player->outdated());
125 TEST_F(AnimationAnimationPlayerTest, SetCurrentTime)
127 player->setCurrentTimeInternal(10);
128 EXPECT_EQ(10, player->currentTimeInternal());
130 EXPECT_EQ(20, player->currentTimeInternal());
133 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimeNegative)
135 player->setCurrentTimeInternal(-10);
136 EXPECT_EQ(-10, player->currentTimeInternal());
138 EXPECT_EQ(10, player->currentTimeInternal());
140 player->setPlaybackRate(-2);
141 player->setCurrentTimeInternal(-10);
142 EXPECT_EQ(-10, player->currentTimeInternal());
144 EXPECT_EQ(-10, player->currentTimeInternal());
147 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimePastContentEnd)
149 player->setCurrentTimeInternal(50);
150 EXPECT_EQ(50, player->currentTimeInternal());
152 EXPECT_EQ(50, player->currentTimeInternal());
154 player->setPlaybackRate(-2);
155 player->setCurrentTimeInternal(50);
156 EXPECT_EQ(50, player->currentTimeInternal());
158 EXPECT_EQ(10, player->currentTimeInternal());
161 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimeBeforeTimelineStarted)
163 setUpWithoutStartingTimeline();
164 player->setCurrentTimeInternal(5);
165 EXPECT_EQ(5, player->currentTimeInternal());
168 EXPECT_EQ(15, player->currentTimeInternal());
171 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimePastContentEndBeforeTimelineStarted)
173 setUpWithoutStartingTimeline();
174 player->setCurrentTimeInternal(250);
175 EXPECT_EQ(250, player->currentTimeInternal());
178 EXPECT_EQ(250, player->currentTimeInternal());
181 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimeMax)
183 player->setCurrentTimeInternal(std::numeric_limits<double>::max());
184 EXPECT_EQ(std::numeric_limits<double>::max(), player->currentTimeInternal());
186 EXPECT_EQ(std::numeric_limits<double>::max(), player->currentTimeInternal());
189 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimeUnrestrictedDouble)
192 player->setCurrentTime(nullValue());
193 EXPECT_EQ(10, player->currentTimeInternal());
194 player->setCurrentTime(std::numeric_limits<double>::infinity());
195 EXPECT_EQ(10, player->currentTimeInternal());
196 player->setCurrentTime(-std::numeric_limits<double>::infinity());
197 EXPECT_EQ(10, player->currentTimeInternal());
201 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimeSetsStartTime)
203 EXPECT_EQ(0, player->startTime());
204 player->setCurrentTime(1000);
205 EXPECT_EQ(-1000, player->startTime());
207 EXPECT_EQ(-1000, player->startTime());
208 EXPECT_EQ(2000, player->currentTime());
211 TEST_F(AnimationAnimationPlayerTest, SetStartTime)
214 EXPECT_EQ(0, player->startTimeInternal());
215 EXPECT_EQ(20, player->currentTimeInternal());
216 player->setStartTimeInternal(10);
217 EXPECT_EQ(10, player->startTimeInternal());
218 EXPECT_EQ(10, player->currentTimeInternal());
220 EXPECT_EQ(10, player->startTimeInternal());
221 EXPECT_EQ(20, player->currentTimeInternal());
224 TEST_F(AnimationAnimationPlayerTest, SetStartTimeLimitsAnimationPlayer)
226 player->setStartTimeInternal(-50);
227 EXPECT_EQ(30, player->currentTimeInternal());
228 player->setPlaybackRate(-1);
229 player->setStartTimeInternal(-100);
230 EXPECT_EQ(0, player->currentTimeInternal());
231 EXPECT_TRUE(player->finished());
234 TEST_F(AnimationAnimationPlayerTest, SetStartTimeOnLimitedAnimationPlayer)
237 player->setStartTimeInternal(-10);
238 EXPECT_EQ(30, player->currentTimeInternal());
239 player->setCurrentTimeInternal(50);
240 player->setStartTimeInternal(-40);
241 EXPECT_EQ(50, player->currentTimeInternal());
242 EXPECT_TRUE(player->finished());
245 TEST_F(AnimationAnimationPlayerTest, StartTimePauseFinish)
248 EXPECT_TRUE(std::isnan(player->startTime()));
249 player->finish(exceptionState);
250 EXPECT_TRUE(std::isnan(player->startTime()));
253 TEST_F(AnimationAnimationPlayerTest, StartTimeFinishPause)
255 double startTime = player->startTime();
256 player->finish(exceptionState);
257 EXPECT_EQ(startTime, player->startTime());
259 EXPECT_TRUE(std::isnan(player->startTime()));
262 TEST_F(AnimationAnimationPlayerTest, StartTimeWithZeroPlaybackRate)
264 player->setPlaybackRate(0);
265 EXPECT_TRUE(std::isnan(player->startTime()));
268 TEST_F(AnimationAnimationPlayerTest, SetStartTimeWhilePaused)
272 player->setStartTimeInternal(-40);
273 EXPECT_EQ(10, player->currentTimeInternal());
275 player->setStartTimeInternal(60);
276 EXPECT_EQ(10, player->currentTimeInternal());
279 TEST_F(AnimationAnimationPlayerTest, PausePlay)
283 EXPECT_TRUE(player->paused());
284 EXPECT_EQ(10, player->currentTimeInternal());
287 EXPECT_FALSE(player->paused());
288 EXPECT_EQ(10, player->currentTimeInternal());
290 EXPECT_EQ(20, player->currentTimeInternal());
293 TEST_F(AnimationAnimationPlayerTest, PauseBeforeTimelineStarted)
295 setUpWithoutStartingTimeline();
297 EXPECT_TRUE(player->paused());
299 EXPECT_FALSE(player->paused());
304 EXPECT_TRUE(player->paused());
305 EXPECT_EQ(0, player->currentTimeInternal());
308 TEST_F(AnimationAnimationPlayerTest, PauseBeforeStartTimeSet)
310 player = timeline->createAnimationPlayer(makeAnimation().get());
314 EXPECT_EQ(0, player->currentTimeInternal());
316 player->setStartTimeInternal(150);
318 EXPECT_EQ(0, player->currentTimeInternal());
320 EXPECT_EQ(20, player->currentTimeInternal());
323 TEST_F(AnimationAnimationPlayerTest, PlayRewindsToStart)
325 player->setCurrentTimeInternal(30);
327 EXPECT_EQ(0, player->currentTimeInternal());
329 player->setCurrentTimeInternal(40);
331 EXPECT_EQ(0, player->currentTimeInternal());
333 player->setCurrentTimeInternal(-10);
335 EXPECT_EQ(0, player->currentTimeInternal());
338 TEST_F(AnimationAnimationPlayerTest, PlayRewindsToEnd)
340 player->setPlaybackRate(-1);
342 EXPECT_EQ(30, player->currentTimeInternal());
344 player->setCurrentTimeInternal(40);
346 EXPECT_EQ(30, player->currentTimeInternal());
348 player->setCurrentTimeInternal(-10);
350 EXPECT_EQ(30, player->currentTimeInternal());
353 TEST_F(AnimationAnimationPlayerTest, PlayWithPlaybackRateZeroDoesNotSeek)
355 player->setPlaybackRate(0);
357 EXPECT_EQ(0, player->currentTimeInternal());
359 player->setCurrentTimeInternal(40);
361 EXPECT_EQ(40, player->currentTimeInternal());
363 player->setCurrentTimeInternal(-10);
365 EXPECT_EQ(-10, player->currentTimeInternal());
369 TEST_F(AnimationAnimationPlayerTest, Reverse)
371 player->setCurrentTimeInternal(10);
374 EXPECT_FALSE(player->paused());
375 EXPECT_EQ(-1, player->playbackRate());
376 EXPECT_EQ(10, player->currentTimeInternal());
379 TEST_F(AnimationAnimationPlayerTest, ReverseDoesNothingWithPlaybackRateZero)
381 player->setCurrentTimeInternal(10);
382 player->setPlaybackRate(0);
385 EXPECT_TRUE(player->paused());
386 EXPECT_EQ(0, player->playbackRate());
387 EXPECT_EQ(10, player->currentTimeInternal());
390 TEST_F(AnimationAnimationPlayerTest, ReverseDoesNotSeekWithNoSource)
392 player->setSource(0);
393 player->setCurrentTimeInternal(10);
395 EXPECT_EQ(10, player->currentTimeInternal());
398 TEST_F(AnimationAnimationPlayerTest, ReverseSeeksToStart)
400 player->setCurrentTimeInternal(-10);
401 player->setPlaybackRate(-1);
403 EXPECT_EQ(0, player->currentTimeInternal());
406 TEST_F(AnimationAnimationPlayerTest, ReverseSeeksToEnd)
408 player->setCurrentTimeInternal(40);
410 EXPECT_EQ(30, player->currentTimeInternal());
413 TEST_F(AnimationAnimationPlayerTest, ReverseLimitsAnimationPlayer)
415 player->setCurrentTimeInternal(40);
416 player->setPlaybackRate(-1);
418 EXPECT_TRUE(player->finished());
419 EXPECT_EQ(40, player->currentTimeInternal());
421 player->setCurrentTimeInternal(-10);
423 EXPECT_TRUE(player->finished());
424 EXPECT_EQ(-10, player->currentTimeInternal());
428 TEST_F(AnimationAnimationPlayerTest, Finish)
430 player->finish(exceptionState);
431 EXPECT_EQ(30, player->currentTimeInternal());
432 EXPECT_TRUE(player->finished());
434 player->setPlaybackRate(-1);
435 player->finish(exceptionState);
436 EXPECT_EQ(0, player->currentTimeInternal());
437 EXPECT_TRUE(player->finished());
439 EXPECT_FALSE(exceptionState.hadException());
442 TEST_F(AnimationAnimationPlayerTest, FinishAfterSourceEnd)
444 player->setCurrentTimeInternal(40);
445 player->finish(exceptionState);
446 EXPECT_EQ(30, player->currentTimeInternal());
449 TEST_F(AnimationAnimationPlayerTest, FinishBeforeStart)
451 player->setCurrentTimeInternal(-10);
452 player->setPlaybackRate(-1);
453 player->finish(exceptionState);
454 EXPECT_EQ(0, player->currentTimeInternal());
457 TEST_F(AnimationAnimationPlayerTest, FinishDoesNothingWithPlaybackRateZero)
459 player->setCurrentTimeInternal(10);
460 player->setPlaybackRate(0);
461 player->finish(exceptionState);
462 EXPECT_EQ(10, player->currentTimeInternal());
465 TEST_F(AnimationAnimationPlayerTest, FinishRaisesException)
468 timing.iterationDuration = 1;
469 timing.iterationCount = std::numeric_limits<double>::infinity();
470 player->setSource(Animation::create(0, nullptr, timing).get());
471 player->setCurrentTimeInternal(10);
473 player->finish(exceptionState);
474 EXPECT_EQ(10, player->currentTimeInternal());
475 EXPECT_TRUE(exceptionState.hadException());
476 EXPECT_EQ(InvalidStateError, exceptionState.code());
480 TEST_F(AnimationAnimationPlayerTest, LimitingAtSourceEnd)
483 EXPECT_EQ(30, player->currentTimeInternal());
484 EXPECT_TRUE(player->finished());
486 EXPECT_EQ(30, player->currentTimeInternal());
487 EXPECT_FALSE(player->paused());
490 TEST_F(AnimationAnimationPlayerTest, LimitingAtStart)
493 player->setPlaybackRate(-2);
495 EXPECT_EQ(0, player->currentTimeInternal());
496 EXPECT_TRUE(player->finished());
498 EXPECT_EQ(0, player->currentTimeInternal());
499 EXPECT_FALSE(player->paused());
502 TEST_F(AnimationAnimationPlayerTest, LimitingWithNoSource)
504 player->setSource(0);
505 EXPECT_TRUE(player->finished());
507 EXPECT_EQ(0, player->currentTimeInternal());
511 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRate)
513 player->setPlaybackRate(2);
514 EXPECT_EQ(2, player->playbackRate());
515 EXPECT_EQ(0, player->currentTimeInternal());
517 EXPECT_EQ(20, player->currentTimeInternal());
520 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRateBeforeTimelineStarted)
522 setUpWithoutStartingTimeline();
523 player->setPlaybackRate(2);
524 EXPECT_EQ(2, player->playbackRate());
525 EXPECT_EQ(0, player->currentTimeInternal());
528 EXPECT_EQ(20, player->currentTimeInternal());
531 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRateWhilePaused)
535 player->setPlaybackRate(2);
538 EXPECT_EQ(10, player->currentTimeInternal());
540 EXPECT_EQ(20, player->currentTimeInternal());
543 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRateWhileLimited)
546 EXPECT_EQ(30, player->currentTimeInternal());
547 player->setPlaybackRate(2);
549 EXPECT_EQ(30, player->currentTimeInternal());
550 player->setPlaybackRate(-2);
551 EXPECT_FALSE(player->finished());
553 EXPECT_EQ(10, player->currentTimeInternal());
556 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRateZero)
559 player->setPlaybackRate(0);
560 EXPECT_EQ(10, player->currentTimeInternal());
562 EXPECT_EQ(10, player->currentTimeInternal());
563 player->setCurrentTimeInternal(20);
564 EXPECT_EQ(20, player->currentTimeInternal());
567 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRateMax)
569 player->setPlaybackRate(std::numeric_limits<double>::max());
570 EXPECT_EQ(std::numeric_limits<double>::max(), player->playbackRate());
571 EXPECT_EQ(0, player->currentTimeInternal());
573 EXPECT_EQ(30, player->currentTimeInternal());
577 TEST_F(AnimationAnimationPlayerTest, SetSource)
579 player = timeline->createAnimationPlayer(0);
580 player->setStartTimeInternal(0);
581 RefPtrWillBeRawPtr<AnimationNode> source1 = makeAnimation();
582 RefPtrWillBeRawPtr<AnimationNode> source2 = makeAnimation();
583 player->setSource(source1.get());
584 EXPECT_EQ(source1, player->source());
585 EXPECT_EQ(0, player->currentTimeInternal());
586 player->setCurrentTimeInternal(15);
587 player->setSource(source2.get());
588 EXPECT_EQ(15, player->currentTimeInternal());
589 EXPECT_EQ(0, source1->player());
590 EXPECT_EQ(player.get(), source2->player());
591 EXPECT_EQ(source2, player->source());
594 TEST_F(AnimationAnimationPlayerTest, SetSourceLimitsAnimationPlayer)
596 player->setCurrentTimeInternal(20);
597 player->setSource(makeAnimation(10).get());
598 EXPECT_EQ(20, player->currentTimeInternal());
599 EXPECT_TRUE(player->finished());
601 EXPECT_EQ(20, player->currentTimeInternal());
604 TEST_F(AnimationAnimationPlayerTest, SetSourceUnlimitsAnimationPlayer)
606 player->setCurrentTimeInternal(40);
607 player->setSource(makeAnimation(60).get());
608 EXPECT_FALSE(player->finished());
609 EXPECT_EQ(40, player->currentTimeInternal());
611 EXPECT_EQ(50, player->currentTimeInternal());
615 TEST_F(AnimationAnimationPlayerTest, EmptyAnimationPlayersDontUpdateEffects)
617 player = timeline->createAnimationPlayer(0);
618 player->update(TimingUpdateOnDemand);
619 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
621 updateTimeline(1234);
622 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
625 TEST_F(AnimationAnimationPlayerTest, AnimationPlayersDisassociateFromSource)
627 AnimationNode* animationNode = player->source();
628 AnimationPlayer* player2 = timeline->createAnimationPlayer(animationNode);
629 EXPECT_EQ(0, player->source());
630 player->setSource(animationNode);
631 EXPECT_EQ(0, player2->source());
634 TEST_F(AnimationAnimationPlayerTest, AnimationPlayersReturnTimeToNextEffect)
637 timing.startDelay = 1;
638 timing.iterationDuration = 1;
640 RefPtrWillBeRawPtr<Animation> animation = Animation::create(0, nullptr, timing);
641 player = timeline->createAnimationPlayer(animation.get());
642 player->setStartTimeInternal(0);
645 EXPECT_EQ(1, player->timeToEffectChange());
648 EXPECT_EQ(0.5, player->timeToEffectChange());
651 EXPECT_EQ(0, player->timeToEffectChange());
654 EXPECT_EQ(0, player->timeToEffectChange());
657 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
660 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
662 player->setCurrentTimeInternal(0);
663 player->update(TimingUpdateOnDemand);
664 EXPECT_EQ(1, player->timeToEffectChange());
666 player->setPlaybackRate(2);
667 player->update(TimingUpdateOnDemand);
668 EXPECT_EQ(0.5, player->timeToEffectChange());
670 player->setPlaybackRate(0);
671 player->update(TimingUpdateOnDemand);
672 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
674 player->setCurrentTimeInternal(3);
675 player->setPlaybackRate(-1);
676 player->update(TimingUpdateOnDemand);
677 EXPECT_EQ(1, player->timeToEffectChange());
679 player->setPlaybackRate(-2);
680 player->update(TimingUpdateOnDemand);
681 EXPECT_EQ(0.5, player->timeToEffectChange());
684 TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenPaused)
686 EXPECT_EQ(0, player->timeToEffectChange());
688 player->update(TimingUpdateOnDemand);
689 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
692 TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenCancelledBeforeStart)
694 EXPECT_EQ(0, player->timeToEffectChange());
695 player->setCurrentTimeInternal(-8);
696 player->setPlaybackRate(2);
698 player->update(TimingUpdateOnDemand);
699 EXPECT_EQ(4, player->timeToEffectChange());
702 TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenCancelledBeforeStartReverse)
704 EXPECT_EQ(0, player->timeToEffectChange());
705 player->setCurrentTimeInternal(9);
706 player->setPlaybackRate(-3);
708 player->update(TimingUpdateOnDemand);
709 EXPECT_EQ(3, player->timeToEffectChange());
712 TEST_F(AnimationAnimationPlayerTest, AttachedAnimationPlayers)
714 RefPtrWillBePersistent<Element> element = document->createElement("foo", ASSERT_NO_EXCEPTION);
717 RefPtrWillBeRawPtr<Animation> animation = Animation::create(element.get(), nullptr, timing);
718 RefPtrWillBeRawPtr<AnimationPlayer> player = timeline->createAnimationPlayer(animation.get());
719 player->setStartTime(0);
720 timeline->serviceAnimations(TimingUpdateForAnimationFrame);
721 EXPECT_EQ(1U, element->activeAnimations()->players().find(player.get())->value);
724 Heap::collectAllGarbage();
725 EXPECT_TRUE(element->activeAnimations()->players().isEmpty());
728 TEST_F(AnimationAnimationPlayerTest, HasLowerPriority)
730 RefPtrWillBeRawPtr<AnimationPlayer> player1 = timeline->createAnimationPlayer(0);
731 RefPtrWillBeRawPtr<AnimationPlayer> player2 = timeline->createAnimationPlayer(0);
732 EXPECT_TRUE(AnimationPlayer::hasLowerPriority(player1.get(), player2.get()));