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/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 using base::TimeDelta;
16 static base::TimeTicks TicksFromSecondsF(double seconds) {
17 return base::TimeTicks::FromInternalValue(seconds *
18 base::Time::kMicrosecondsPerSecond);
21 scoped_ptr<Animation> CreateAnimation(double iterations,
23 double playback_rate) {
24 scoped_ptr<Animation> to_return(
25 Animation::Create(make_scoped_ptr(new FakeFloatAnimationCurve(duration)),
29 to_return->set_iterations(iterations);
30 to_return->set_playback_rate(playback_rate);
31 return to_return.Pass();
34 scoped_ptr<Animation> CreateAnimation(double iterations, double duration) {
35 return CreateAnimation(iterations, duration, 1);
38 scoped_ptr<Animation> CreateAnimation(double iterations) {
39 return CreateAnimation(iterations, 1, 1);
42 TEST(AnimationTest, TrimTimeZeroIterations) {
43 scoped_ptr<Animation> anim(CreateAnimation(0));
44 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
45 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
46 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
49 TEST(AnimationTest, TrimTimeOneIteration) {
50 scoped_ptr<Animation> anim(CreateAnimation(1));
51 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
52 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
53 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
54 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
57 TEST(AnimationTest, TrimTimeOneHalfIteration) {
58 scoped_ptr<Animation> anim(CreateAnimation(1.5));
59 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
60 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
61 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
62 EXPECT_EQ(0.9, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.9)));
63 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
64 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
65 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
68 TEST(AnimationTest, TrimTimeInfiniteIterations) {
69 scoped_ptr<Animation> anim(CreateAnimation(-1));
70 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
71 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
72 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
73 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
76 TEST(AnimationTest, TrimTimeReverse) {
77 scoped_ptr<Animation> anim(CreateAnimation(-1));
78 anim->set_direction(Animation::Reverse);
79 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)));
80 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
81 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
82 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
83 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
84 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
87 TEST(AnimationTest, TrimTimeAlternateInfiniteIterations) {
88 scoped_ptr<Animation> anim(CreateAnimation(-1));
89 anim->set_direction(Animation::Alternate);
90 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
91 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
92 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
93 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
94 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
95 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
98 TEST(AnimationTest, TrimTimeAlternateOneIteration) {
99 scoped_ptr<Animation> anim(CreateAnimation(1));
100 anim->set_direction(Animation::Alternate);
101 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
102 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
103 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
104 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
105 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
106 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
109 TEST(AnimationTest, TrimTimeAlternateTwoIterations) {
110 scoped_ptr<Animation> anim(CreateAnimation(2));
111 anim->set_direction(Animation::Alternate);
112 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
113 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
114 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
115 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
116 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
117 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
118 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
119 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
120 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
123 TEST(AnimationTest, TrimTimeAlternateTwoHalfIterations) {
124 scoped_ptr<Animation> anim(CreateAnimation(2.5));
125 anim->set_direction(Animation::Alternate);
126 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
127 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
128 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
129 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
130 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
131 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
132 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
133 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
134 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
135 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.50)));
136 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.75)));
139 TEST(AnimationTest, TrimTimeAlternateReverseInfiniteIterations) {
140 scoped_ptr<Animation> anim(CreateAnimation(-1));
141 anim->set_direction(Animation::AlternateReverse);
142 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
143 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
144 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
145 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
146 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
147 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
150 TEST(AnimationTest, TrimTimeAlternateReverseOneIteration) {
151 scoped_ptr<Animation> anim(CreateAnimation(1));
152 anim->set_direction(Animation::AlternateReverse);
153 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
154 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
155 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
156 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
157 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
158 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
161 TEST(AnimationTest, TrimTimeAlternateReverseTwoIterations) {
162 scoped_ptr<Animation> anim(CreateAnimation(2));
163 anim->set_direction(Animation::AlternateReverse);
164 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
165 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
166 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
167 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
168 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
169 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
170 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
171 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
172 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
175 TEST(AnimationTest, TrimTimeStartTime) {
176 scoped_ptr<Animation> anim(CreateAnimation(1));
177 anim->set_start_time(TicksFromSecondsF(4));
178 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
179 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)));
180 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)));
181 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)));
182 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(6.0)));
185 TEST(AnimationTest, TrimTimeStartTimeReverse) {
186 scoped_ptr<Animation> anim(CreateAnimation(1));
187 anim->set_start_time(TicksFromSecondsF(4));
188 anim->set_direction(Animation::Reverse);
189 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
190 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)));
191 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)));
192 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)));
193 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(6.0)));
196 TEST(AnimationTest, TrimTimeTimeOffset) {
197 scoped_ptr<Animation> anim(CreateAnimation(1));
198 anim->set_time_offset(TimeDelta::FromMilliseconds(4000));
199 anim->set_start_time(TicksFromSecondsF(4));
200 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
201 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
202 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
203 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
206 TEST(AnimationTest, TrimTimeTimeOffsetReverse) {
207 scoped_ptr<Animation> anim(CreateAnimation(1));
208 anim->set_time_offset(TimeDelta::FromMilliseconds(4000));
209 anim->set_start_time(TicksFromSecondsF(4));
210 anim->set_direction(Animation::Reverse);
211 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
212 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
213 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
214 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
217 TEST(AnimationTest, TrimTimeNegativeTimeOffset) {
218 scoped_ptr<Animation> anim(CreateAnimation(1));
219 anim->set_time_offset(TimeDelta::FromMilliseconds(-4000));
221 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
222 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)));
223 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)));
224 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)));
227 TEST(AnimationTest, TrimTimeNegativeTimeOffsetReverse) {
228 scoped_ptr<Animation> anim(CreateAnimation(1));
229 anim->set_time_offset(TimeDelta::FromMilliseconds(-4000));
230 anim->set_direction(Animation::Reverse);
232 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
233 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)));
234 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)));
235 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)));
238 TEST(AnimationTest, TrimTimePauseResume) {
239 scoped_ptr<Animation> anim(CreateAnimation(1));
240 anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
241 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
242 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
243 anim->SetRunState(Animation::Paused, TicksFromSecondsF(0.5));
244 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)));
245 anim->SetRunState(Animation::Running, TicksFromSecondsF(1024.0));
246 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)));
247 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.5)));
250 TEST(AnimationTest, TrimTimePauseResumeReverse) {
251 scoped_ptr<Animation> anim(CreateAnimation(1));
252 anim->set_direction(Animation::Reverse);
253 anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
254 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
255 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
256 anim->SetRunState(Animation::Paused, TicksFromSecondsF(0.25));
257 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)));
258 anim->SetRunState(Animation::Running, TicksFromSecondsF(1024.0));
259 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)));
260 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.75)));
263 TEST(AnimationTest, TrimTimeSuspendResume) {
264 scoped_ptr<Animation> anim(CreateAnimation(1));
265 anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
266 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
267 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
268 anim->Suspend(TicksFromSecondsF(0.5));
269 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)));
270 anim->Resume(TicksFromSecondsF(1024));
271 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)));
272 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.5)));
275 TEST(AnimationTest, TrimTimeSuspendResumeReverse) {
276 scoped_ptr<Animation> anim(CreateAnimation(1));
277 anim->set_direction(Animation::Reverse);
278 anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
279 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
280 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
281 anim->Suspend(TicksFromSecondsF(0.75));
282 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)));
283 anim->Resume(TicksFromSecondsF(1024));
284 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)));
285 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.25)));
288 TEST(AnimationTest, TrimTimeZeroDuration) {
289 scoped_ptr<Animation> anim(CreateAnimation(0, 0));
290 anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
291 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
292 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
293 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
296 TEST(AnimationTest, TrimTimeStarting) {
297 scoped_ptr<Animation> anim(CreateAnimation(1, 5.0));
298 anim->SetRunState(Animation::Starting, TicksFromSecondsF(0.0));
299 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
300 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
301 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
302 anim->set_time_offset(TimeDelta::FromMilliseconds(2000));
303 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
304 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
305 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
306 anim->set_start_time(TicksFromSecondsF(1.0));
307 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
308 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
309 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
310 EXPECT_EQ(3.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
313 TEST(AnimationTest, TrimTimeNeedsSynchronizedStartTime) {
314 scoped_ptr<Animation> anim(CreateAnimation(1, 5.0));
315 anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
316 anim->set_needs_synchronized_start_time(true);
317 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
318 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
319 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
320 anim->set_time_offset(TimeDelta::FromMilliseconds(2000));
321 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
322 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
323 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
324 anim->set_start_time(TicksFromSecondsF(1.0));
325 anim->set_needs_synchronized_start_time(false);
326 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
327 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
328 EXPECT_EQ(3.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
331 TEST(AnimationTest, IsFinishedAtZeroIterations) {
332 scoped_ptr<Animation> anim(CreateAnimation(0));
333 anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
334 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0)));
335 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
336 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.0)));
339 TEST(AnimationTest, IsFinishedAtOneIteration) {
340 scoped_ptr<Animation> anim(CreateAnimation(1));
341 anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
342 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0)));
343 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
344 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.0)));
345 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(2.0)));
348 TEST(AnimationTest, IsFinishedAtInfiniteIterations) {
349 scoped_ptr<Animation> anim(CreateAnimation(-1));
350 anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
351 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
352 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.5)));
353 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(1.0)));
354 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(1.5)));
357 TEST(AnimationTest, IsFinishedNegativeTimeOffset) {
358 scoped_ptr<Animation> anim(CreateAnimation(1));
359 anim->set_time_offset(TimeDelta::FromMilliseconds(-500));
360 anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
362 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0)));
363 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
364 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.5)));
365 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(1.0)));
366 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.5)));
367 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(2.0)));
368 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(2.5)));
371 TEST(AnimationTest, IsFinishedPositiveTimeOffset) {
372 scoped_ptr<Animation> anim(CreateAnimation(1));
373 anim->set_time_offset(TimeDelta::FromMilliseconds(500));
374 anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
376 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0)));
377 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
378 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.5)));
379 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.0)));
382 TEST(AnimationTest, IsFinishedAtNotRunning) {
383 scoped_ptr<Animation> anim(CreateAnimation(0));
384 anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
385 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
386 anim->SetRunState(Animation::Paused, TicksFromSecondsF(0.0));
387 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
388 anim->SetRunState(Animation::WaitingForTargetAvailability,
389 TicksFromSecondsF(0.0));
390 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
391 anim->SetRunState(Animation::Finished, TicksFromSecondsF(0.0));
392 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
393 anim->SetRunState(Animation::Aborted, TicksFromSecondsF(0.0));
394 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
397 TEST(AnimationTest, IsFinished) {
398 scoped_ptr<Animation> anim(CreateAnimation(1));
399 anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
400 EXPECT_FALSE(anim->is_finished());
401 anim->SetRunState(Animation::Paused, TicksFromSecondsF(0.0));
402 EXPECT_FALSE(anim->is_finished());
403 anim->SetRunState(Animation::WaitingForTargetAvailability,
404 TicksFromSecondsF(0.0));
405 EXPECT_FALSE(anim->is_finished());
406 anim->SetRunState(Animation::Finished, TicksFromSecondsF(0.0));
407 EXPECT_TRUE(anim->is_finished());
408 anim->SetRunState(Animation::Aborted, TicksFromSecondsF(0.0));
409 EXPECT_TRUE(anim->is_finished());
412 TEST(AnimationTest, IsFinishedNeedsSynchronizedStartTime) {
413 scoped_ptr<Animation> anim(CreateAnimation(1));
414 anim->SetRunState(Animation::Running, TicksFromSecondsF(2.0));
415 EXPECT_FALSE(anim->is_finished());
416 anim->SetRunState(Animation::Paused, TicksFromSecondsF(2.0));
417 EXPECT_FALSE(anim->is_finished());
418 anim->SetRunState(Animation::WaitingForTargetAvailability,
419 TicksFromSecondsF(2.0));
420 EXPECT_FALSE(anim->is_finished());
421 anim->SetRunState(Animation::Finished, TicksFromSecondsF(0.0));
422 EXPECT_TRUE(anim->is_finished());
423 anim->SetRunState(Animation::Aborted, TicksFromSecondsF(0.0));
424 EXPECT_TRUE(anim->is_finished());
427 TEST(AnimationTest, RunStateChangesIgnoredWhileSuspended) {
428 scoped_ptr<Animation> anim(CreateAnimation(1));
429 anim->Suspend(TicksFromSecondsF(0));
430 EXPECT_EQ(Animation::Paused, anim->run_state());
431 anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
432 EXPECT_EQ(Animation::Paused, anim->run_state());
433 anim->Resume(TicksFromSecondsF(0));
434 anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
435 EXPECT_EQ(Animation::Running, anim->run_state());
438 TEST(AnimationTest, TrimTimePlaybackNormal) {
439 scoped_ptr<Animation> anim(CreateAnimation(1, 1, 1));
440 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
441 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
442 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
443 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
444 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
447 TEST(AnimationTest, TrimTimePlaybackSlow) {
448 scoped_ptr<Animation> anim(CreateAnimation(1, 1, 0.5));
449 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
450 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
451 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
452 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
453 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
454 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)));
457 TEST(AnimationTest, TrimTimePlaybackFast) {
458 scoped_ptr<Animation> anim(CreateAnimation(1, 4, 2));
459 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
460 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
461 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
462 EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
463 EXPECT_EQ(3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
464 EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
465 EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
468 TEST(AnimationTest, TrimTimePlaybackNormalReverse) {
469 scoped_ptr<Animation> anim(CreateAnimation(1, 2, -1));
470 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
471 EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)));
472 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
473 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
474 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
475 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
476 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
479 TEST(AnimationTest, TrimTimePlaybackSlowReverse) {
480 scoped_ptr<Animation> anim(CreateAnimation(1, 2, -0.5));
481 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
482 EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)));
483 EXPECT_EQ(1.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
484 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
485 EXPECT_EQ(1.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
486 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
487 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
488 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3)));
489 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)));
490 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4)));
491 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)));
494 TEST(AnimationTest, TrimTimePlaybackFastReverse) {
495 scoped_ptr<Animation> anim(CreateAnimation(1, 2, -2));
496 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
497 EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)));
498 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
499 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
500 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
501 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
502 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
505 TEST(AnimationTest, TrimTimePlaybackFastInfiniteIterations) {
506 scoped_ptr<Animation> anim(CreateAnimation(-1, 4, 4));
507 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
508 EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
509 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
510 EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
511 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1000.0)));
512 EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1000.5)));
515 TEST(AnimationTest, TrimTimePlaybackNormalDoubleReverse) {
516 scoped_ptr<Animation> anim(CreateAnimation(1, 1, -1));
517 anim->set_direction(Animation::Reverse);
518 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
519 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
520 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
521 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
522 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
525 TEST(AnimationTest, TrimTimePlaybackFastDoubleReverse) {
526 scoped_ptr<Animation> anim(CreateAnimation(1, 4, -2));
527 anim->set_direction(Animation::Reverse);
528 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
529 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
530 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
531 EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
532 EXPECT_EQ(3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
533 EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
534 EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
537 TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFast) {
538 scoped_ptr<Animation> anim(CreateAnimation(2, 2, 2));
539 anim->set_direction(Animation::Alternate);
540 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
541 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
542 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
543 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
544 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
545 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
546 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
547 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
548 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
549 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
552 TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFastReverse) {
553 scoped_ptr<Animation> anim(CreateAnimation(2, 2, 2));
554 anim->set_direction(Animation::AlternateReverse);
555 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
556 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
557 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
558 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
559 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
560 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
561 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
562 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
563 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
564 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
565 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
568 TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFastDoubleReverse) {
569 scoped_ptr<Animation> anim(CreateAnimation(2, 2, -2));
570 anim->set_direction(Animation::AlternateReverse);
571 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
572 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
573 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
574 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
575 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
576 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
577 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
578 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
579 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
580 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
584 TrimTimeAlternateReverseThreeIterationsPlaybackFastAlternateReverse) {
585 scoped_ptr<Animation> anim(CreateAnimation(3, 2, -2));
586 anim->set_direction(Animation::AlternateReverse);
587 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
588 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
589 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
590 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
591 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
592 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
593 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
594 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
595 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
596 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
597 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
598 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.75)));
599 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)));
600 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.25)));
604 TrimTimeAlternateReverseTwoIterationsPlaybackNormalAlternate) {
605 scoped_ptr<Animation> anim(CreateAnimation(2, 2, -1));
606 anim->set_direction(Animation::Alternate);
607 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
608 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
609 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
610 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
611 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
612 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
613 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)));
614 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)));
615 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)));
616 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)));
619 TEST(AnimationTest, TrimTimeIterationStart) {
620 scoped_ptr<Animation> anim(CreateAnimation(2, 1, 1));
621 anim->set_iteration_start(0.5);
622 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
623 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
624 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
625 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
626 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
627 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
628 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
631 TEST(AnimationTest, TrimTimeIterationStartAlternate) {
632 scoped_ptr<Animation> anim(CreateAnimation(2, 1, 1));
633 anim->set_direction(Animation::Alternate);
634 anim->set_iteration_start(0.3);
635 EXPECT_EQ(0.3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
636 EXPECT_EQ(0.3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
637 EXPECT_EQ(0.8, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
638 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.7)));
639 EXPECT_EQ(0.7, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
640 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.2)));
641 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.7)));
644 TEST(AnimationTest, TrimTimeIterationStartAlternateThreeIterations) {
645 scoped_ptr<Animation> anim(CreateAnimation(3, 1, 1));
646 anim->set_direction(Animation::Alternate);
647 anim->set_iteration_start(1);
648 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
649 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
650 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
651 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
652 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
653 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
654 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
655 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)));
656 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)));
660 TrimTimeIterationStartAlternateThreeIterationsPlaybackReverse) {
661 scoped_ptr<Animation> anim(CreateAnimation(3, 1, -1));
662 anim->set_direction(Animation::Alternate);
663 anim->set_iteration_start(1);
664 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
665 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
666 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
667 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)));
668 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)));
671 TEST(AnimationTest, InEffectFillMode) {
672 scoped_ptr<Animation> anim(CreateAnimation(1));
673 anim->set_fill_mode(Animation::FillModeNone);
674 EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0)));
675 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
676 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
678 anim->set_fill_mode(Animation::FillModeForwards);
679 EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0)));
680 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
681 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
683 anim->set_fill_mode(Animation::FillModeBackwards);
684 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0)));
685 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
686 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
688 anim->set_fill_mode(Animation::FillModeBoth);
689 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0)));
690 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
691 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
694 TEST(AnimationTest, InEffectFillModePlayback) {
695 scoped_ptr<Animation> anim(CreateAnimation(1, 1, -1));
696 anim->set_fill_mode(Animation::FillModeNone);
697 EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0)));
698 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
699 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
701 anim->set_fill_mode(Animation::FillModeForwards);
702 EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0)));
703 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
704 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
706 anim->set_fill_mode(Animation::FillModeBackwards);
707 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0)));
708 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
709 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
711 anim->set_fill_mode(Animation::FillModeBoth);
712 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0)));
713 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
714 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));