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/DocumentTimeline.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 WebCore;
47 class AnimationAnimationPlayerTest : public ::testing::Test {
51 setUpWithoutStartingTimeline();
55 void setUpWithoutStartingTimeline()
57 document = Document::create();
58 document->animationClock().resetTimeForTesting();
59 timeline = DocumentTimeline::create(document.get());
60 player = timeline->createAnimationPlayer(0);
61 player->setStartTimeInternal(0);
62 player->setSource(makeAnimation().get());
67 timeline->setZeroTime(0);
71 PassRefPtr<Animation> makeAnimation(double duration = 30, double playbackRate = 1)
74 timing.iterationDuration = duration;
75 timing.playbackRate = playbackRate;
76 return Animation::create(0, nullptr, timing);
79 bool updateTimeline(double time)
81 document->animationClock().updateTime(time);
82 // The timeline does not know about our player, so we have to explicitly call update().
83 return player->update(TimingUpdateOnDemand);
86 RefPtr<Document> document;
87 RefPtr<DocumentTimeline> timeline;
88 RefPtr<AnimationPlayer> player;
89 TrackExceptionState exceptionState;
92 TEST_F(AnimationAnimationPlayerTest, InitialState)
94 setUpWithoutStartingTimeline();
95 player = timeline->createAnimationPlayer(0);
96 EXPECT_TRUE(isNull(timeline->currentTimeInternal()));
97 EXPECT_EQ(0, player->currentTimeInternal());
98 EXPECT_FALSE(player->paused());
99 EXPECT_EQ(1, player->playbackRate());
100 EXPECT_EQ(0, player->timeLagInternal());
101 EXPECT_FALSE(player->hasStartTime());
102 EXPECT_TRUE(isNull(player->startTimeInternal()));
105 player->setStartTimeInternal(0);
106 EXPECT_EQ(0, timeline->currentTimeInternal());
107 EXPECT_EQ(0, player->currentTimeInternal());
108 EXPECT_FALSE(player->paused());
109 EXPECT_EQ(1, player->playbackRate());
110 EXPECT_EQ(0, player->startTimeInternal());
111 EXPECT_EQ(0, player->timeLagInternal());
112 EXPECT_TRUE(player->hasStartTime());
116 TEST_F(AnimationAnimationPlayerTest, CurrentTimeDoesNotSetOutdated)
118 EXPECT_FALSE(player->outdated());
119 EXPECT_EQ(0, player->currentTimeInternal());
120 EXPECT_FALSE(player->outdated());
121 // FIXME: We should split updateTimeline into a version that doesn't update
122 // the player and one that does, as most of the tests don't require update()
124 document->animationClock().updateTime(10);
125 EXPECT_EQ(10, player->currentTimeInternal());
126 EXPECT_FALSE(player->outdated());
129 TEST_F(AnimationAnimationPlayerTest, SetCurrentTime)
131 player->setCurrentTimeInternal(10);
132 EXPECT_EQ(10, player->currentTimeInternal());
134 EXPECT_EQ(20, player->currentTimeInternal());
137 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimeNegative)
139 player->setCurrentTimeInternal(-10);
140 EXPECT_EQ(-10, player->currentTimeInternal());
142 EXPECT_EQ(10, player->currentTimeInternal());
144 player->setPlaybackRate(-2);
145 player->setCurrentTimeInternal(-10);
146 EXPECT_EQ(-10, player->currentTimeInternal());
148 EXPECT_EQ(-10, player->currentTimeInternal());
151 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimePastContentEnd)
153 player->setCurrentTimeInternal(50);
154 EXPECT_EQ(50, player->currentTimeInternal());
156 EXPECT_EQ(50, player->currentTimeInternal());
158 player->setPlaybackRate(-2);
159 player->setCurrentTimeInternal(50);
160 EXPECT_EQ(50, player->currentTimeInternal());
162 EXPECT_EQ(10, player->currentTimeInternal());
165 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimeBeforeTimelineStarted)
167 setUpWithoutStartingTimeline();
168 player->setCurrentTimeInternal(5);
169 EXPECT_EQ(5, player->currentTimeInternal());
172 EXPECT_EQ(15, player->currentTimeInternal());
175 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimePastContentEndBeforeTimelineStarted)
177 setUpWithoutStartingTimeline();
178 player->setCurrentTimeInternal(250);
179 EXPECT_EQ(250, player->currentTimeInternal());
182 EXPECT_EQ(250, player->currentTimeInternal());
185 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimeMax)
187 player->setCurrentTimeInternal(std::numeric_limits<double>::max());
188 EXPECT_EQ(std::numeric_limits<double>::max(), player->currentTimeInternal());
190 EXPECT_EQ(std::numeric_limits<double>::max(), player->currentTimeInternal());
193 TEST_F(AnimationAnimationPlayerTest, SetCurrentTimeUnrestrictedDouble)
196 player->setCurrentTimeInternal(nullValue());
197 EXPECT_EQ(10, player->currentTimeInternal());
198 player->setCurrentTimeInternal(std::numeric_limits<double>::infinity());
199 EXPECT_EQ(10, player->currentTimeInternal());
200 player->setCurrentTimeInternal(-std::numeric_limits<double>::infinity());
201 EXPECT_EQ(10, player->currentTimeInternal());
204 TEST_F(AnimationAnimationPlayerTest, TimeLag)
206 player->setCurrentTimeInternal(10);
207 EXPECT_EQ(-10, player->timeLagInternal());
209 EXPECT_EQ(-10, player->timeLagInternal());
210 player->setCurrentTimeInternal(40);
211 EXPECT_EQ(-30, player->timeLagInternal());
213 EXPECT_EQ(-20, player->timeLagInternal());
217 TEST_F(AnimationAnimationPlayerTest, SetStartTime)
220 EXPECT_EQ(0, player->startTimeInternal());
221 EXPECT_EQ(20, player->currentTimeInternal());
222 player->setStartTimeInternal(10);
223 EXPECT_EQ(10, player->startTimeInternal());
224 EXPECT_EQ(10, player->currentTimeInternal());
226 EXPECT_EQ(10, player->startTimeInternal());
227 EXPECT_EQ(20, player->currentTimeInternal());
230 TEST_F(AnimationAnimationPlayerTest, SetStartTimeLimitsAnimationPlayer)
232 player->setStartTimeInternal(-50);
233 EXPECT_EQ(30, player->currentTimeInternal());
234 player->setPlaybackRate(-1);
235 player->setStartTimeInternal(-100);
236 EXPECT_EQ(0, player->currentTimeInternal());
237 EXPECT_TRUE(player->finished());
240 TEST_F(AnimationAnimationPlayerTest, SetStartTimeOnLimitedAnimationPlayer)
243 player->setStartTimeInternal(-10);
244 EXPECT_EQ(30, player->currentTimeInternal());
245 player->setCurrentTimeInternal(50);
246 player->setStartTimeInternal(-40);
247 EXPECT_EQ(50, player->currentTimeInternal());
248 EXPECT_TRUE(player->finished());
251 TEST_F(AnimationAnimationPlayerTest, SetStartTimeWhilePaused)
255 player->setStartTimeInternal(-40);
256 EXPECT_EQ(10, player->currentTimeInternal());
258 player->setStartTimeInternal(60);
259 EXPECT_EQ(10, player->currentTimeInternal());
263 TEST_F(AnimationAnimationPlayerTest, PausePlay)
267 EXPECT_TRUE(player->paused());
268 EXPECT_EQ(10, player->currentTimeInternal());
271 EXPECT_FALSE(player->paused());
272 EXPECT_EQ(10, player->currentTimeInternal());
274 EXPECT_EQ(20, player->currentTimeInternal());
277 TEST_F(AnimationAnimationPlayerTest, PauseBeforeTimelineStarted)
279 setUpWithoutStartingTimeline();
281 EXPECT_TRUE(player->paused());
283 EXPECT_FALSE(player->paused());
288 EXPECT_TRUE(player->paused());
289 EXPECT_EQ(0, player->currentTimeInternal());
292 TEST_F(AnimationAnimationPlayerTest, PauseBeforeStartTimeSet)
294 player = timeline->createAnimationPlayer(makeAnimation().get());
298 EXPECT_EQ(0, player->currentTimeInternal());
300 player->setStartTimeInternal(150);
302 EXPECT_EQ(0, player->currentTimeInternal());
304 EXPECT_EQ(20, player->currentTimeInternal());
307 TEST_F(AnimationAnimationPlayerTest, PlayRewindsToStart)
309 player->setCurrentTimeInternal(30);
311 EXPECT_EQ(0, player->currentTimeInternal());
313 player->setCurrentTimeInternal(40);
315 EXPECT_EQ(0, player->currentTimeInternal());
317 player->setCurrentTimeInternal(-10);
319 EXPECT_EQ(0, player->currentTimeInternal());
322 TEST_F(AnimationAnimationPlayerTest, PlayRewindsToEnd)
324 player->setPlaybackRate(-1);
326 EXPECT_EQ(30, player->currentTimeInternal());
328 player->setCurrentTimeInternal(40);
330 EXPECT_EQ(30, player->currentTimeInternal());
332 player->setCurrentTimeInternal(-10);
334 EXPECT_EQ(30, player->currentTimeInternal());
337 TEST_F(AnimationAnimationPlayerTest, PlayWithPlaybackRateZeroDoesNotSeek)
339 player->setPlaybackRate(0);
341 EXPECT_EQ(0, player->currentTimeInternal());
343 player->setCurrentTimeInternal(40);
345 EXPECT_EQ(40, player->currentTimeInternal());
347 player->setCurrentTimeInternal(-10);
349 EXPECT_EQ(-10, player->currentTimeInternal());
353 TEST_F(AnimationAnimationPlayerTest, Reverse)
355 player->setCurrentTimeInternal(10);
358 EXPECT_FALSE(player->paused());
359 EXPECT_EQ(-1, player->playbackRate());
360 EXPECT_EQ(10, player->currentTimeInternal());
363 TEST_F(AnimationAnimationPlayerTest, ReverseDoesNothingWithPlaybackRateZero)
365 player->setCurrentTimeInternal(10);
366 player->setPlaybackRate(0);
369 EXPECT_TRUE(player->paused());
370 EXPECT_EQ(0, player->playbackRate());
371 EXPECT_EQ(10, player->currentTimeInternal());
374 TEST_F(AnimationAnimationPlayerTest, ReverseDoesNotSeekWithNoSource)
376 player->setSource(0);
377 player->setCurrentTimeInternal(10);
379 EXPECT_EQ(10, player->currentTimeInternal());
382 TEST_F(AnimationAnimationPlayerTest, ReverseSeeksToStart)
384 player->setCurrentTimeInternal(-10);
385 player->setPlaybackRate(-1);
387 EXPECT_EQ(0, player->currentTimeInternal());
390 TEST_F(AnimationAnimationPlayerTest, ReverseSeeksToEnd)
392 player->setCurrentTimeInternal(40);
394 EXPECT_EQ(30, player->currentTimeInternal());
397 TEST_F(AnimationAnimationPlayerTest, ReverseLimitsAnimationPlayer)
399 player->setCurrentTimeInternal(40);
400 player->setPlaybackRate(-1);
402 EXPECT_TRUE(player->finished());
403 EXPECT_EQ(40, player->currentTimeInternal());
405 player->setCurrentTimeInternal(-10);
407 EXPECT_TRUE(player->finished());
408 EXPECT_EQ(-10, player->currentTimeInternal());
412 TEST_F(AnimationAnimationPlayerTest, Finish)
414 player->finish(exceptionState);
415 EXPECT_EQ(30, player->currentTimeInternal());
416 EXPECT_TRUE(player->finished());
418 player->setPlaybackRate(-1);
419 player->finish(exceptionState);
420 EXPECT_EQ(0, player->currentTimeInternal());
421 EXPECT_TRUE(player->finished());
423 EXPECT_FALSE(exceptionState.hadException());
426 TEST_F(AnimationAnimationPlayerTest, FinishAfterSourceEnd)
428 player->setCurrentTimeInternal(40);
429 player->finish(exceptionState);
430 EXPECT_EQ(30, player->currentTimeInternal());
433 TEST_F(AnimationAnimationPlayerTest, FinishBeforeStart)
435 player->setCurrentTimeInternal(-10);
436 player->setPlaybackRate(-1);
437 player->finish(exceptionState);
438 EXPECT_EQ(0, player->currentTimeInternal());
441 TEST_F(AnimationAnimationPlayerTest, FinishDoesNothingWithPlaybackRateZero)
443 player->setCurrentTimeInternal(10);
444 player->setPlaybackRate(0);
445 player->finish(exceptionState);
446 EXPECT_EQ(10, player->currentTimeInternal());
449 TEST_F(AnimationAnimationPlayerTest, FinishRaisesException)
452 timing.iterationDuration = 1;
453 timing.iterationCount = std::numeric_limits<double>::infinity();
454 player->setSource(Animation::create(0, nullptr, timing).get());
455 player->setCurrentTimeInternal(10);
457 player->finish(exceptionState);
458 EXPECT_EQ(10, player->currentTimeInternal());
459 EXPECT_TRUE(exceptionState.hadException());
460 EXPECT_EQ(InvalidStateError, exceptionState.code());
464 TEST_F(AnimationAnimationPlayerTest, LimitingAtSourceEnd)
467 EXPECT_EQ(30, player->currentTimeInternal());
468 EXPECT_TRUE(player->finished());
470 EXPECT_EQ(30, player->currentTimeInternal());
471 EXPECT_FALSE(player->paused());
474 TEST_F(AnimationAnimationPlayerTest, LimitingAtStart)
477 player->setPlaybackRate(-2);
479 EXPECT_EQ(0, player->currentTimeInternal());
480 EXPECT_TRUE(player->finished());
482 EXPECT_EQ(0, player->currentTimeInternal());
483 EXPECT_FALSE(player->paused());
486 TEST_F(AnimationAnimationPlayerTest, LimitingWithNoSource)
488 player->setSource(0);
489 EXPECT_TRUE(player->finished());
491 EXPECT_EQ(0, player->currentTimeInternal());
495 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRate)
497 player->setPlaybackRate(2);
498 EXPECT_EQ(2, player->playbackRate());
499 EXPECT_EQ(0, player->currentTimeInternal());
501 EXPECT_EQ(20, player->currentTimeInternal());
504 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRateBeforeTimelineStarted)
506 setUpWithoutStartingTimeline();
507 player->setPlaybackRate(2);
508 EXPECT_EQ(2, player->playbackRate());
509 EXPECT_EQ(0, player->currentTimeInternal());
512 EXPECT_EQ(20, player->currentTimeInternal());
515 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRateWhilePaused)
519 player->setPlaybackRate(2);
522 EXPECT_EQ(10, player->currentTimeInternal());
524 EXPECT_EQ(20, player->currentTimeInternal());
527 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRateWhileLimited)
530 EXPECT_EQ(30, player->currentTimeInternal());
531 player->setPlaybackRate(2);
533 EXPECT_EQ(30, player->currentTimeInternal());
534 player->setPlaybackRate(-2);
535 EXPECT_FALSE(player->finished());
537 EXPECT_EQ(10, player->currentTimeInternal());
540 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRateZero)
543 player->setPlaybackRate(0);
544 EXPECT_EQ(10, player->currentTimeInternal());
546 EXPECT_EQ(10, player->currentTimeInternal());
547 player->setCurrentTimeInternal(20);
548 EXPECT_EQ(20, player->currentTimeInternal());
551 TEST_F(AnimationAnimationPlayerTest, SetPlaybackRateMax)
553 player->setPlaybackRate(std::numeric_limits<double>::max());
554 EXPECT_EQ(std::numeric_limits<double>::max(), player->playbackRate());
555 EXPECT_EQ(0, player->currentTimeInternal());
557 EXPECT_EQ(30, player->currentTimeInternal());
561 TEST_F(AnimationAnimationPlayerTest, SetSource)
563 player = timeline->createAnimationPlayer(0);
564 player->setStartTimeInternal(0);
565 RefPtr<TimedItem> source1 = makeAnimation();
566 RefPtr<TimedItem> source2 = makeAnimation();
567 player->setSource(source1.get());
568 EXPECT_EQ(source1, player->source());
569 EXPECT_EQ(0, player->currentTimeInternal());
570 player->setCurrentTimeInternal(15);
571 player->setSource(source2.get());
572 EXPECT_EQ(15, player->currentTimeInternal());
573 EXPECT_EQ(0, source1->player());
574 EXPECT_EQ(player.get(), source2->player());
575 EXPECT_EQ(source2, player->source());
578 TEST_F(AnimationAnimationPlayerTest, SetSourceLimitsAnimationPlayer)
580 player->setCurrentTimeInternal(20);
581 player->setSource(makeAnimation(10).get());
582 EXPECT_EQ(20, player->currentTimeInternal());
583 EXPECT_TRUE(player->finished());
585 EXPECT_EQ(20, player->currentTimeInternal());
588 TEST_F(AnimationAnimationPlayerTest, SetSourceUnlimitsAnimationPlayer)
590 player->setCurrentTimeInternal(40);
591 player->setSource(makeAnimation(60).get());
592 EXPECT_FALSE(player->finished());
593 EXPECT_EQ(40, player->currentTimeInternal());
595 EXPECT_EQ(50, player->currentTimeInternal());
599 TEST_F(AnimationAnimationPlayerTest, EmptyAnimationPlayersDontUpdateEffects)
601 player = timeline->createAnimationPlayer(0);
602 player->update(TimingUpdateOnDemand);
603 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
605 updateTimeline(1234);
606 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
609 TEST_F(AnimationAnimationPlayerTest, AnimationPlayersDisassociateFromSource)
611 TimedItem* timedItem = player->source();
612 AnimationPlayer* player2 = timeline->createAnimationPlayer(timedItem);
613 EXPECT_EQ(0, player->source());
614 player->setSource(timedItem);
615 EXPECT_EQ(0, player2->source());
618 TEST_F(AnimationAnimationPlayerTest, AnimationPlayersReturnTimeToNextEffect)
621 timing.startDelay = 1;
622 timing.iterationDuration = 1;
624 RefPtr<Animation> animation = Animation::create(0, nullptr, timing);
625 player = timeline->createAnimationPlayer(animation.get());
626 player->setStartTimeInternal(0);
629 EXPECT_EQ(1, player->timeToEffectChange());
632 EXPECT_EQ(0.5, player->timeToEffectChange());
635 EXPECT_EQ(0, player->timeToEffectChange());
638 EXPECT_EQ(0, player->timeToEffectChange());
641 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
644 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
646 player->setCurrentTimeInternal(0);
647 player->update(TimingUpdateOnDemand);
648 EXPECT_EQ(1, player->timeToEffectChange());
650 player->setPlaybackRate(2);
651 player->update(TimingUpdateOnDemand);
652 EXPECT_EQ(0.5, player->timeToEffectChange());
654 player->setPlaybackRate(0);
655 player->update(TimingUpdateOnDemand);
656 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
658 player->setCurrentTimeInternal(3);
659 player->setPlaybackRate(-1);
660 player->update(TimingUpdateOnDemand);
661 EXPECT_EQ(1, player->timeToEffectChange());
663 player->setPlaybackRate(-2);
664 player->update(TimingUpdateOnDemand);
665 EXPECT_EQ(0.5, player->timeToEffectChange());
668 TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenPaused)
670 EXPECT_EQ(0, player->timeToEffectChange());
672 player->update(TimingUpdateOnDemand);
673 EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
676 TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenCancelledBeforeStart)
678 EXPECT_EQ(0, player->timeToEffectChange());
679 player->setCurrentTimeInternal(-8);
680 player->setPlaybackRate(2);
682 player->update(TimingUpdateOnDemand);
683 EXPECT_EQ(4, player->timeToEffectChange());
686 TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenCancelledBeforeStartReverse)
688 EXPECT_EQ(0, player->timeToEffectChange());
689 player->setCurrentTimeInternal(9);
690 player->setPlaybackRate(-3);
692 player->update(TimingUpdateOnDemand);
693 EXPECT_EQ(3, player->timeToEffectChange());
696 TEST_F(AnimationAnimationPlayerTest, AttachedAnimationPlayers)
698 RefPtr<Element> element = document->createElement("foo", ASSERT_NO_EXCEPTION);
701 RefPtr<Animation> animation = Animation::create(element.get(), nullptr, timing);
702 RefPtr<AnimationPlayer> player = timeline->createAnimationPlayer(animation.get());
703 player->setStartTime(0);
704 timeline->serviceAnimations(TimingUpdateForAnimationFrame);
705 EXPECT_EQ(1, element->activeAnimations()->players().find(player.get())->value);
708 EXPECT_TRUE(element->activeAnimations()->players().isEmpty());
711 TEST_F(AnimationAnimationPlayerTest, HasLowerPriority)
713 // Sort time defaults to timeline current time
715 RefPtr<AnimationPlayer> player1 = timeline->createAnimationPlayer(0);
716 RefPtr<AnimationPlayer> player2 = timeline->createAnimationPlayer(0);
717 player2->setStartTimeInternal(10);
718 RefPtr<AnimationPlayer> player3 = timeline->createAnimationPlayer(0);
719 RefPtr<AnimationPlayer> player4 = timeline->createAnimationPlayer(0);
720 player4->setStartTimeInternal(20);
721 RefPtr<AnimationPlayer> player5 = timeline->createAnimationPlayer(0);
722 player5->setStartTimeInternal(10);
723 RefPtr<AnimationPlayer> player6 = timeline->createAnimationPlayer(0);
724 player6->setStartTimeInternal(-10);
725 Vector<RefPtr<AnimationPlayer> > players;
726 players.append(player6);
727 players.append(player2);
728 players.append(player5);
729 players.append(player1);
730 players.append(player3);
731 players.append(player4);
732 for (size_t i = 0; i < players.size(); i++) {
733 for (size_t j = 0; j < players.size(); j++)
734 EXPECT_EQ(i < j, AnimationPlayer::hasLowerPriority(players[i].get(), players[j].get()));