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.
5 #include "cc/animation.h"
7 #include "cc/test/animation_test_common.h"
8 #include "testing/gmock/include/gmock/gmock.h"
9 #include "testing/gtest/include/gtest/gtest.h"
14 scoped_ptr
<Animation
> createAnimation(int iterations
, double duration
)
16 scoped_ptr
<Animation
> toReturn(Animation::create(make_scoped_ptr(new FakeFloatAnimationCurve(duration
)).PassAs
<AnimationCurve
>(), 0, 1, Animation::Opacity
));
17 toReturn
->setIterations(iterations
);
18 return toReturn
.Pass();
21 scoped_ptr
<Animation
> createAnimation(int iterations
)
23 return createAnimation(iterations
, 1);
26 TEST(AnimationTest
, TrimTimeZeroIterations
)
28 scoped_ptr
<Animation
> anim(createAnimation(0));
29 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(-1));
30 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(0));
31 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(1));
34 TEST(AnimationTest
, TrimTimeOneIteration
)
36 scoped_ptr
<Animation
> anim(createAnimation(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(AnimationTest
, TrimTimeInfiniteIterations
)
45 scoped_ptr
<Animation
> anim(createAnimation(-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(AnimationTest
, TrimTimeAlternating
)
54 scoped_ptr
<Animation
> anim(createAnimation(-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(AnimationTest
, TrimTimeStartTime
)
64 scoped_ptr
<Animation
> anim(createAnimation(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(AnimationTest
, TrimTimeTimeOffset
)
75 scoped_ptr
<Animation
> anim(createAnimation(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(AnimationTest
, TrimTimePauseResume
)
86 scoped_ptr
<Animation
> anim(createAnimation(1));
87 anim
->setRunState(Animation::Running
, 0);
88 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(0));
89 EXPECT_EQ(0.5, anim
->trimTimeToCurrentIteration(0.5));
90 anim
->setRunState(Animation::Paused
, 0.5);
91 EXPECT_EQ(0.5, anim
->trimTimeToCurrentIteration(1024));
92 anim
->setRunState(Animation::Running
, 1024);
93 EXPECT_EQ(0.5, anim
->trimTimeToCurrentIteration(1024));
94 EXPECT_EQ(1, anim
->trimTimeToCurrentIteration(1024.5));
97 TEST(AnimationTest
, TrimTimeSuspendResume
)
99 scoped_ptr
<Animation
> anim(createAnimation(1));
100 anim
->setRunState(Animation::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(AnimationTest
, TrimTimeZeroDuration
)
112 scoped_ptr
<Animation
> anim(createAnimation(0, 0));
113 anim
->setRunState(Animation::Running
, 0);
114 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(-1));
115 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(0));
116 EXPECT_EQ(0, anim
->trimTimeToCurrentIteration(1));
119 TEST(AnimationTest
, IsFinishedAtZeroIterations
)
121 scoped_ptr
<Animation
> anim(createAnimation(0));
122 anim
->setRunState(Animation::Running
, 0);
123 EXPECT_FALSE(anim
->isFinishedAt(-1));
124 EXPECT_TRUE(anim
->isFinishedAt(0));
125 EXPECT_TRUE(anim
->isFinishedAt(1));
128 TEST(AnimationTest
, IsFinishedAtOneIteration
)
130 scoped_ptr
<Animation
> anim(createAnimation(1));
131 anim
->setRunState(Animation::Running
, 0);
132 EXPECT_FALSE(anim
->isFinishedAt(-1));
133 EXPECT_FALSE(anim
->isFinishedAt(0));
134 EXPECT_TRUE(anim
->isFinishedAt(1));
135 EXPECT_TRUE(anim
->isFinishedAt(2));
138 TEST(AnimationTest
, IsFinishedAtInfiniteIterations
)
140 scoped_ptr
<Animation
> anim(createAnimation(-1));
141 anim
->setRunState(Animation::Running
, 0);
142 EXPECT_FALSE(anim
->isFinishedAt(0));
143 EXPECT_FALSE(anim
->isFinishedAt(0.5));
144 EXPECT_FALSE(anim
->isFinishedAt(1));
145 EXPECT_FALSE(anim
->isFinishedAt(1.5));
148 TEST(AnimationTest
, IsFinishedAtNotRunning
)
150 scoped_ptr
<Animation
> anim(createAnimation(0));
151 anim
->setRunState(Animation::Running
, 0);
152 EXPECT_TRUE(anim
->isFinishedAt(0));
153 anim
->setRunState(Animation::Paused
, 0);
154 EXPECT_FALSE(anim
->isFinishedAt(0));
155 anim
->setRunState(Animation::WaitingForNextTick
, 0);
156 EXPECT_FALSE(anim
->isFinishedAt(0));
157 anim
->setRunState(Animation::WaitingForTargetAvailability
, 0);
158 EXPECT_FALSE(anim
->isFinishedAt(0));
159 anim
->setRunState(Animation::WaitingForStartTime
, 0);
160 EXPECT_FALSE(anim
->isFinishedAt(0));
161 anim
->setRunState(Animation::Finished
, 0);
162 EXPECT_TRUE(anim
->isFinishedAt(0));
163 anim
->setRunState(Animation::Aborted
, 0);
164 EXPECT_TRUE(anim
->isFinishedAt(0));
167 TEST(AnimationTest
, IsFinished
)
169 scoped_ptr
<Animation
> anim(createAnimation(1));
170 anim
->setRunState(Animation::Running
, 0);
171 EXPECT_FALSE(anim
->isFinished());
172 anim
->setRunState(Animation::Paused
, 0);
173 EXPECT_FALSE(anim
->isFinished());
174 anim
->setRunState(Animation::WaitingForNextTick
, 0);
175 EXPECT_FALSE(anim
->isFinished());
176 anim
->setRunState(Animation::WaitingForTargetAvailability
, 0);
177 EXPECT_FALSE(anim
->isFinished());
178 anim
->setRunState(Animation::WaitingForStartTime
, 0);
179 EXPECT_FALSE(anim
->isFinished());
180 anim
->setRunState(Animation::Finished
, 0);
181 EXPECT_TRUE(anim
->isFinished());
182 anim
->setRunState(Animation::Aborted
, 0);
183 EXPECT_TRUE(anim
->isFinished());
186 TEST(AnimationTest
, IsFinishedNeedsSynchronizedStartTime
)
188 scoped_ptr
<Animation
> anim(createAnimation(1));
189 anim
->setRunState(Animation::Running
, 2);
190 EXPECT_FALSE(anim
->isFinished());
191 anim
->setRunState(Animation::Paused
, 2);
192 EXPECT_FALSE(anim
->isFinished());
193 anim
->setRunState(Animation::WaitingForNextTick
, 2);
194 EXPECT_FALSE(anim
->isFinished());
195 anim
->setRunState(Animation::WaitingForTargetAvailability
, 2);
196 EXPECT_FALSE(anim
->isFinished());
197 anim
->setRunState(Animation::WaitingForStartTime
, 2);
198 EXPECT_FALSE(anim
->isFinished());
199 anim
->setRunState(Animation::Finished
, 0);
200 EXPECT_TRUE(anim
->isFinished());
201 anim
->setRunState(Animation::Aborted
, 0);
202 EXPECT_TRUE(anim
->isFinished());
205 TEST(AnimationTest
, RunStateChangesIgnoredWhileSuspended
)
207 scoped_ptr
<Animation
> anim(createAnimation(1));
209 EXPECT_EQ(Animation::Paused
, anim
->runState());
210 anim
->setRunState(Animation::Running
, 0);
211 EXPECT_EQ(Animation::Paused
, anim
->runState());
213 anim
->setRunState(Animation::Running
, 0);
214 EXPECT_EQ(Animation::Running
, anim
->runState());