1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 #include "CCActiveAnimation.h"
9 #include "CCAnimationTestCommon.h"
10 #include <gmock/gmock.h>
11 #include <gtest/gtest.h>
12 #include <wtf/Vector.h>
14 using namespace WebKitTests
;
15 using namespace WebCore
;
19 PassOwnPtr
<CCActiveAnimation
> createActiveAnimation(int iterations
)
21 OwnPtr
<CCActiveAnimation
> toReturn(CCActiveAnimation::create(adoptPtr(new FakeFloatAnimationCurve
), 0, 1, CCActiveAnimation::Opacity
));
22 toReturn
->setIterations(iterations
);
23 return toReturn
.release();
26 TEST(CCActiveAnimationTest
, TrimTimeZeroIterations
)
28 OwnPtr
<CCActiveAnimation
> anim(createActiveAnimation(0));
29 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(-1));
30 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(0));
31 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(1));
34 TEST(CCActiveAnimationTest
, TrimTimeOneIteration
)
36 OwnPtr
<CCActiveAnimation
> anim(createActiveAnimation(1));
37 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(-1));
38 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(0));
39 EXPECT_EQ(1, anim
->trimTimeToCurrentIteration(1));
40 EXPECT_EQ(1, anim
->trimTimeToCurrentIteration(2));
43 TEST(CCActiveAnimationTest
, TrimTimeInfiniteIterations
)
45 OwnPtr
<CCActiveAnimation
> anim(createActiveAnimation(-1));
46 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(0));
47 EXPECT_EQ(0.5, anim
->trimTimeToCurrentIteration(0.5));
48 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(1));
49 EXPECT_EQ(0.5, anim
->trimTimeToCurrentIteration(1.5));
52 TEST(CCActiveAnimationTest
, TrimTimeAlternating
)
54 OwnPtr
<CCActiveAnimation
> anim(createActiveAnimation(-1));
55 anim
->setAlternatesDirection(true);
56 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(0));
57 EXPECT_EQ(0.5, anim
->trimTimeToCurrentIteration(0.5));
58 EXPECT_EQ(1, anim
->trimTimeToCurrentIteration(1));
59 EXPECT_EQ(0.75, anim
->trimTimeToCurrentIteration(1.25));
62 TEST(CCActiveAnimationTest
, TrimTimeStartTime
)
64 OwnPtr
<CCActiveAnimation
> anim(createActiveAnimation(1));
65 anim
->setStartTime(4);
66 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(0));
67 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(4));
68 EXPECT_EQ(0.5, anim
->trimTimeToCurrentIteration(4.5));
69 EXPECT_EQ(1, anim
->trimTimeToCurrentIteration(5));
70 EXPECT_EQ(1, anim
->trimTimeToCurrentIteration(6));
73 TEST(CCActiveAnimationTest
, TrimTimeTimeOffset
)
75 OwnPtr
<CCActiveAnimation
> anim(createActiveAnimation(1));
76 anim
->setTimeOffset(4);
77 anim
->setStartTime(4);
78 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(0));
79 EXPECT_EQ(0.5, anim
->trimTimeToCurrentIteration(0.5));
80 EXPECT_EQ(1, anim
->trimTimeToCurrentIteration(1));
81 EXPECT_EQ(1, anim
->trimTimeToCurrentIteration(1));
84 TEST(CCActiveAnimationTest
, TrimTimePauseResume
)
86 OwnPtr
<CCActiveAnimation
> anim(createActiveAnimation(1));
87 anim
->setRunState(CCActiveAnimation::Running
, 0);
88 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(0));
89 EXPECT_EQ(0.5, anim
->trimTimeToCurrentIteration(0.5));
90 anim
->setRunState(CCActiveAnimation::Paused
, 0.5);
91 EXPECT_EQ(0.5, anim
->trimTimeToCurrentIteration(1024));
92 anim
->setRunState(CCActiveAnimation::Running
, 1024);
93 EXPECT_EQ(0.5, anim
->trimTimeToCurrentIteration(1024));
94 EXPECT_EQ(1, anim
->trimTimeToCurrentIteration(1024.5));
97 TEST(CCActiveAnimationTest
, TrimTimeSuspendResume
)
99 OwnPtr
<CCActiveAnimation
> anim(createActiveAnimation(1));
100 anim
->setRunState(CCActiveAnimation::Running
, 0);
101 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(0));
102 EXPECT_EQ(0.5, anim
->trimTimeToCurrentIteration(0.5));
104 EXPECT_EQ(0.5, anim
->trimTimeToCurrentIteration(1024));
106 EXPECT_EQ(0.5, anim
->trimTimeToCurrentIteration(1024));
107 EXPECT_EQ(1, anim
->trimTimeToCurrentIteration(1024.5));
110 TEST(CCActiveAnimationTest
, IsFinishedAtZeroIterations
)
112 OwnPtr
<CCActiveAnimation
> anim(createActiveAnimation(0));
113 anim
->setRunState(CCActiveAnimation::Running
, 0);
114 EXPECT_FALSE(anim
->isFinishedAt(-1));
115 EXPECT_TRUE(anim
->isFinishedAt(0));
116 EXPECT_TRUE(anim
->isFinishedAt(1));
119 TEST(CCActiveAnimationTest
, IsFinishedAtOneIteration
)
121 OwnPtr
<CCActiveAnimation
> anim(createActiveAnimation(1));
122 anim
->setRunState(CCActiveAnimation::Running
, 0);
123 EXPECT_FALSE(anim
->isFinishedAt(-1));
124 EXPECT_FALSE(anim
->isFinishedAt(0));
125 EXPECT_TRUE(anim
->isFinishedAt(1));
126 EXPECT_TRUE(anim
->isFinishedAt(2));
129 TEST(CCActiveAnimationTest
, IsFinishedAtInfiniteIterations
)
131 OwnPtr
<CCActiveAnimation
> anim(createActiveAnimation(-1));
132 anim
->setRunState(CCActiveAnimation::Running
, 0);
133 EXPECT_FALSE(anim
->isFinishedAt(0));
134 EXPECT_FALSE(anim
->isFinishedAt(0.5));
135 EXPECT_FALSE(anim
->isFinishedAt(1));
136 EXPECT_FALSE(anim
->isFinishedAt(1.5));
139 TEST(CCActiveAnimationTest
, IsFinishedAtNotRunning
)
141 OwnPtr
<CCActiveAnimation
> anim(createActiveAnimation(0));
142 anim
->setRunState(CCActiveAnimation::Running
, 0);
143 EXPECT_TRUE(anim
->isFinishedAt(0));
144 anim
->setRunState(CCActiveAnimation::Paused
, 0);
145 EXPECT_FALSE(anim
->isFinishedAt(0));
146 anim
->setRunState(CCActiveAnimation::WaitingForNextTick
, 0);
147 EXPECT_FALSE(anim
->isFinishedAt(0));
148 anim
->setRunState(CCActiveAnimation::WaitingForTargetAvailability
, 0);
149 EXPECT_FALSE(anim
->isFinishedAt(0));
150 anim
->setRunState(CCActiveAnimation::WaitingForStartTime
, 0);
151 EXPECT_FALSE(anim
->isFinishedAt(0));
152 anim
->setRunState(CCActiveAnimation::Finished
, 0);
153 EXPECT_TRUE(anim
->isFinishedAt(0));
154 anim
->setRunState(CCActiveAnimation::Aborted
, 0);
155 EXPECT_TRUE(anim
->isFinishedAt(0));
158 TEST(CCActiveAnimationTest
, IsFinished
)
160 OwnPtr
<CCActiveAnimation
> anim(createActiveAnimation(1));
161 anim
->setRunState(CCActiveAnimation::Running
, 0);
162 EXPECT_FALSE(anim
->isFinished());
163 anim
->setRunState(CCActiveAnimation::Paused
, 0);
164 EXPECT_FALSE(anim
->isFinished());
165 anim
->setRunState(CCActiveAnimation::WaitingForNextTick
, 0);
166 EXPECT_FALSE(anim
->isFinished());
167 anim
->setRunState(CCActiveAnimation::WaitingForTargetAvailability
, 0);
168 EXPECT_FALSE(anim
->isFinished());
169 anim
->setRunState(CCActiveAnimation::WaitingForStartTime
, 0);
170 EXPECT_FALSE(anim
->isFinished());
171 anim
->setRunState(CCActiveAnimation::Finished
, 0);
172 EXPECT_TRUE(anim
->isFinished());
173 anim
->setRunState(CCActiveAnimation::Aborted
, 0);
174 EXPECT_TRUE(anim
->isFinished());
177 TEST(CCActiveAnimationTest
, IsFinishedNeedsSynchronizedStartTime
)
179 OwnPtr
<CCActiveAnimation
> anim(createActiveAnimation(1));
180 anim
->setRunState(CCActiveAnimation::Running
, 2);
181 EXPECT_FALSE(anim
->isFinished());
182 anim
->setRunState(CCActiveAnimation::Paused
, 2);
183 EXPECT_FALSE(anim
->isFinished());
184 anim
->setRunState(CCActiveAnimation::WaitingForNextTick
, 2);
185 EXPECT_FALSE(anim
->isFinished());
186 anim
->setRunState(CCActiveAnimation::WaitingForTargetAvailability
, 2);
187 EXPECT_FALSE(anim
->isFinished());
188 anim
->setRunState(CCActiveAnimation::WaitingForStartTime
, 2);
189 EXPECT_FALSE(anim
->isFinished());
190 anim
->setRunState(CCActiveAnimation::Finished
, 0);
191 EXPECT_TRUE(anim
->isFinished());
192 anim
->setRunState(CCActiveAnimation::Aborted
, 0);
193 EXPECT_TRUE(anim
->isFinished());
196 TEST(CCActiveAnimationTest
, RunStateChangesIgnoredWhileSuspended
)
198 OwnPtr
<CCActiveAnimation
> anim(createActiveAnimation(1));
200 EXPECT_EQ(CCActiveAnimation::Paused
, anim
->runState());
201 anim
->setRunState(CCActiveAnimation::Running
, 0);
202 EXPECT_EQ(CCActiveAnimation::Paused
, anim
->runState());
204 anim
->setRunState(CCActiveAnimation::Running
, 0);
205 EXPECT_EQ(CCActiveAnimation::Running
, anim
->runState());