OLD | NEW |
| (Empty) |
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. | |
4 | |
5 #include "cc/animation/animation.h" | |
6 | |
7 #include "cc/test/animation_test_common.h" | |
8 #include "testing/gmock/include/gmock/gmock.h" | |
9 #include "testing/gtest/include/gtest/gtest.h" | |
10 | |
11 namespace cc { | |
12 namespace { | |
13 | |
14 using base::TimeDelta; | |
15 | |
16 static base::TimeTicks TicksFromSecondsF(double seconds) { | |
17 return base::TimeTicks::FromInternalValue(seconds * | |
18 base::Time::kMicrosecondsPerSecond); | |
19 } | |
20 | |
21 scoped_ptr<Animation> CreateAnimation(double iterations, | |
22 double duration, | |
23 double playback_rate) { | |
24 scoped_ptr<Animation> to_return( | |
25 Animation::Create(make_scoped_ptr(new FakeFloatAnimationCurve(duration)), | |
26 0, 1, Animation::OPACITY)); | |
27 to_return->set_iterations(iterations); | |
28 to_return->set_playback_rate(playback_rate); | |
29 return to_return.Pass(); | |
30 } | |
31 | |
32 scoped_ptr<Animation> CreateAnimation(double iterations, double duration) { | |
33 return CreateAnimation(iterations, duration, 1); | |
34 } | |
35 | |
36 scoped_ptr<Animation> CreateAnimation(double iterations) { | |
37 return CreateAnimation(iterations, 1, 1); | |
38 } | |
39 | |
40 TEST(AnimationTest, TrimTimeZeroIterations) { | |
41 scoped_ptr<Animation> anim(CreateAnimation(0)); | |
42 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
43 .InSecondsF()); | |
44 EXPECT_EQ( | |
45 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
46 EXPECT_EQ( | |
47 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
48 } | |
49 | |
50 TEST(AnimationTest, TrimTimeOneIteration) { | |
51 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
52 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
53 .InSecondsF()); | |
54 EXPECT_EQ( | |
55 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
56 EXPECT_EQ( | |
57 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
58 EXPECT_EQ( | |
59 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); | |
60 } | |
61 | |
62 TEST(AnimationTest, TrimTimeOneHalfIteration) { | |
63 scoped_ptr<Animation> anim(CreateAnimation(1.5)); | |
64 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
65 .InSecondsF()); | |
66 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
67 .InSecondsF()); | |
68 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
69 .InSecondsF()); | |
70 EXPECT_EQ(0.9, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.9)) | |
71 .InSecondsF()); | |
72 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
73 .InSecondsF()); | |
74 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
75 .InSecondsF()); | |
76 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
77 .InSecondsF()); | |
78 } | |
79 | |
80 TEST(AnimationTest, TrimTimeInfiniteIterations) { | |
81 scoped_ptr<Animation> anim(CreateAnimation(-1)); | |
82 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
83 .InSecondsF()); | |
84 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
85 .InSecondsF()); | |
86 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
87 .InSecondsF()); | |
88 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
89 .InSecondsF()); | |
90 } | |
91 | |
92 TEST(AnimationTest, TrimTimeReverse) { | |
93 scoped_ptr<Animation> anim(CreateAnimation(-1)); | |
94 anim->set_direction(Animation::DIRECTION_REVERSE); | |
95 EXPECT_EQ( | |
96 1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)).InSecondsF()); | |
97 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
98 .InSecondsF()); | |
99 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
100 .InSecondsF()); | |
101 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
102 .InSecondsF()); | |
103 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
104 .InSecondsF()); | |
105 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
106 .InSecondsF()); | |
107 } | |
108 | |
109 TEST(AnimationTest, TrimTimeAlternateInfiniteIterations) { | |
110 scoped_ptr<Animation> anim(CreateAnimation(-1)); | |
111 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
112 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
113 .InSecondsF()); | |
114 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
115 .InSecondsF()); | |
116 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
117 .InSecondsF()); | |
118 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
119 .InSecondsF()); | |
120 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
121 .InSecondsF()); | |
122 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
123 .InSecondsF()); | |
124 } | |
125 | |
126 TEST(AnimationTest, TrimTimeAlternateOneIteration) { | |
127 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
128 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
129 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
130 .InSecondsF()); | |
131 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
132 .InSecondsF()); | |
133 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
134 .InSecondsF()); | |
135 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
136 .InSecondsF()); | |
137 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
138 .InSecondsF()); | |
139 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
140 .InSecondsF()); | |
141 } | |
142 | |
143 TEST(AnimationTest, TrimTimeAlternateTwoIterations) { | |
144 scoped_ptr<Animation> anim(CreateAnimation(2)); | |
145 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
146 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
147 .InSecondsF()); | |
148 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
149 .InSecondsF()); | |
150 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
151 .InSecondsF()); | |
152 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
153 .InSecondsF()); | |
154 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
155 .InSecondsF()); | |
156 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
157 .InSecondsF()); | |
158 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) | |
159 .InSecondsF()); | |
160 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
161 .InSecondsF()); | |
162 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) | |
163 .InSecondsF()); | |
164 } | |
165 | |
166 TEST(AnimationTest, TrimTimeAlternateTwoHalfIterations) { | |
167 scoped_ptr<Animation> anim(CreateAnimation(2.5)); | |
168 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
169 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
170 .InSecondsF()); | |
171 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
172 .InSecondsF()); | |
173 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
174 .InSecondsF()); | |
175 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
176 .InSecondsF()); | |
177 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
178 .InSecondsF()); | |
179 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
180 .InSecondsF()); | |
181 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) | |
182 .InSecondsF()); | |
183 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
184 .InSecondsF()); | |
185 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) | |
186 .InSecondsF()); | |
187 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.50)) | |
188 .InSecondsF()); | |
189 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.75)) | |
190 .InSecondsF()); | |
191 } | |
192 | |
193 TEST(AnimationTest, TrimTimeAlternateReverseInfiniteIterations) { | |
194 scoped_ptr<Animation> anim(CreateAnimation(-1)); | |
195 anim->set_direction(Animation::DIRECTION_ALTERNATE_REVERSE); | |
196 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
197 .InSecondsF()); | |
198 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
199 .InSecondsF()); | |
200 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
201 .InSecondsF()); | |
202 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
203 .InSecondsF()); | |
204 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
205 .InSecondsF()); | |
206 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
207 .InSecondsF()); | |
208 } | |
209 | |
210 TEST(AnimationTest, TrimTimeAlternateReverseOneIteration) { | |
211 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
212 anim->set_direction(Animation::DIRECTION_ALTERNATE_REVERSE); | |
213 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
214 .InSecondsF()); | |
215 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
216 .InSecondsF()); | |
217 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
218 .InSecondsF()); | |
219 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
220 .InSecondsF()); | |
221 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
222 .InSecondsF()); | |
223 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
224 .InSecondsF()); | |
225 } | |
226 | |
227 TEST(AnimationTest, TrimTimeAlternateReverseTwoIterations) { | |
228 scoped_ptr<Animation> anim(CreateAnimation(2)); | |
229 anim->set_direction(Animation::DIRECTION_ALTERNATE_REVERSE); | |
230 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
231 .InSecondsF()); | |
232 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
233 .InSecondsF()); | |
234 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
235 .InSecondsF()); | |
236 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
237 .InSecondsF()); | |
238 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
239 .InSecondsF()); | |
240 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
241 .InSecondsF()); | |
242 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) | |
243 .InSecondsF()); | |
244 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
245 .InSecondsF()); | |
246 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) | |
247 .InSecondsF()); | |
248 } | |
249 | |
250 TEST(AnimationTest, TrimTimeStartTime) { | |
251 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
252 anim->set_start_time(TicksFromSecondsF(4)); | |
253 EXPECT_EQ( | |
254 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
255 EXPECT_EQ( | |
256 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)).InSecondsF()); | |
257 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)) | |
258 .InSecondsF()); | |
259 EXPECT_EQ( | |
260 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)).InSecondsF()); | |
261 EXPECT_EQ( | |
262 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(6.0)).InSecondsF()); | |
263 } | |
264 | |
265 TEST(AnimationTest, TrimTimeStartTimeReverse) { | |
266 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
267 anim->set_start_time(TicksFromSecondsF(4)); | |
268 anim->set_direction(Animation::DIRECTION_REVERSE); | |
269 EXPECT_EQ( | |
270 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
271 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)) | |
272 .InSecondsF()); | |
273 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)) | |
274 .InSecondsF()); | |
275 EXPECT_EQ( | |
276 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)).InSecondsF()); | |
277 EXPECT_EQ( | |
278 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(6.0)).InSecondsF()); | |
279 } | |
280 | |
281 TEST(AnimationTest, TrimTimeTimeOffset) { | |
282 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
283 anim->set_time_offset(TimeDelta::FromMilliseconds(4000)); | |
284 anim->set_start_time(TicksFromSecondsF(4)); | |
285 EXPECT_EQ( | |
286 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
287 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
288 .InSecondsF()); | |
289 EXPECT_EQ( | |
290 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
291 EXPECT_EQ( | |
292 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
293 } | |
294 | |
295 TEST(AnimationTest, TrimTimeTimeOffsetReverse) { | |
296 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
297 anim->set_time_offset(TimeDelta::FromMilliseconds(4000)); | |
298 anim->set_start_time(TicksFromSecondsF(4)); | |
299 anim->set_direction(Animation::DIRECTION_REVERSE); | |
300 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
301 .InSecondsF()); | |
302 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
303 .InSecondsF()); | |
304 EXPECT_EQ( | |
305 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
306 EXPECT_EQ( | |
307 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
308 } | |
309 | |
310 TEST(AnimationTest, TrimTimeNegativeTimeOffset) { | |
311 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
312 anim->set_time_offset(TimeDelta::FromMilliseconds(-4000)); | |
313 | |
314 EXPECT_EQ( | |
315 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
316 EXPECT_EQ( | |
317 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)).InSecondsF()); | |
318 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)) | |
319 .InSecondsF()); | |
320 EXPECT_EQ( | |
321 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)).InSecondsF()); | |
322 } | |
323 | |
324 TEST(AnimationTest, TrimTimeNegativeTimeOffsetReverse) { | |
325 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
326 anim->set_time_offset(TimeDelta::FromMilliseconds(-4000)); | |
327 anim->set_direction(Animation::DIRECTION_REVERSE); | |
328 | |
329 EXPECT_EQ( | |
330 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
331 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)) | |
332 .InSecondsF()); | |
333 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)) | |
334 .InSecondsF()); | |
335 EXPECT_EQ( | |
336 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)).InSecondsF()); | |
337 } | |
338 | |
339 TEST(AnimationTest, TrimTimePauseResume) { | |
340 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
341 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
342 EXPECT_EQ( | |
343 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
344 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
345 .InSecondsF()); | |
346 anim->SetRunState(Animation::PAUSED, TicksFromSecondsF(0.5)); | |
347 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) | |
348 .InSecondsF()); | |
349 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(1024.0)); | |
350 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) | |
351 .InSecondsF()); | |
352 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.5)) | |
353 .InSecondsF()); | |
354 } | |
355 | |
356 TEST(AnimationTest, TrimTimePauseResumeReverse) { | |
357 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
358 anim->set_direction(Animation::DIRECTION_REVERSE); | |
359 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
360 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
361 .InSecondsF()); | |
362 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
363 .InSecondsF()); | |
364 anim->SetRunState(Animation::PAUSED, TicksFromSecondsF(0.25)); | |
365 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) | |
366 .InSecondsF()); | |
367 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(1024.0)); | |
368 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) | |
369 .InSecondsF()); | |
370 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.75)) | |
371 .InSecondsF()); | |
372 } | |
373 | |
374 TEST(AnimationTest, TrimTimeSuspendResume) { | |
375 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
376 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
377 EXPECT_EQ( | |
378 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
379 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
380 .InSecondsF()); | |
381 anim->Suspend(TicksFromSecondsF(0.5)); | |
382 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) | |
383 .InSecondsF()); | |
384 anim->Resume(TicksFromSecondsF(1024)); | |
385 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) | |
386 .InSecondsF()); | |
387 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.5)) | |
388 .InSecondsF()); | |
389 } | |
390 | |
391 TEST(AnimationTest, TrimTimeSuspendResumeReverse) { | |
392 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
393 anim->set_direction(Animation::DIRECTION_REVERSE); | |
394 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
395 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
396 .InSecondsF()); | |
397 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
398 .InSecondsF()); | |
399 anim->Suspend(TicksFromSecondsF(0.75)); | |
400 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) | |
401 .InSecondsF()); | |
402 anim->Resume(TicksFromSecondsF(1024)); | |
403 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) | |
404 .InSecondsF()); | |
405 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.25)) | |
406 .InSecondsF()); | |
407 } | |
408 | |
409 TEST(AnimationTest, TrimTimeZeroDuration) { | |
410 scoped_ptr<Animation> anim(CreateAnimation(0, 0)); | |
411 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
412 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
413 .InSecondsF()); | |
414 EXPECT_EQ( | |
415 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
416 EXPECT_EQ( | |
417 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
418 } | |
419 | |
420 TEST(AnimationTest, TrimTimeStarting) { | |
421 scoped_ptr<Animation> anim(CreateAnimation(1, 5.0)); | |
422 anim->SetRunState(Animation::STARTING, TicksFromSecondsF(0.0)); | |
423 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
424 .InSecondsF()); | |
425 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
426 .InSecondsF()); | |
427 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
428 .InSecondsF()); | |
429 anim->set_time_offset(TimeDelta::FromMilliseconds(2000)); | |
430 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
431 .InSecondsF()); | |
432 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
433 .InSecondsF()); | |
434 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
435 .InSecondsF()); | |
436 anim->set_start_time(TicksFromSecondsF(1.0)); | |
437 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
438 .InSecondsF()); | |
439 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
440 .InSecondsF()); | |
441 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
442 .InSecondsF()); | |
443 EXPECT_EQ(3.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
444 .InSecondsF()); | |
445 } | |
446 | |
447 TEST(AnimationTest, TrimTimeNeedsSynchronizedStartTime) { | |
448 scoped_ptr<Animation> anim(CreateAnimation(1, 5.0)); | |
449 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
450 anim->set_needs_synchronized_start_time(true); | |
451 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
452 .InSecondsF()); | |
453 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
454 .InSecondsF()); | |
455 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
456 .InSecondsF()); | |
457 anim->set_time_offset(TimeDelta::FromMilliseconds(2000)); | |
458 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
459 .InSecondsF()); | |
460 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
461 .InSecondsF()); | |
462 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
463 .InSecondsF()); | |
464 anim->set_start_time(TicksFromSecondsF(1.0)); | |
465 anim->set_needs_synchronized_start_time(false); | |
466 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
467 .InSecondsF()); | |
468 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
469 .InSecondsF()); | |
470 EXPECT_EQ(3.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
471 .InSecondsF()); | |
472 } | |
473 | |
474 TEST(AnimationTest, IsFinishedAtZeroIterations) { | |
475 scoped_ptr<Animation> anim(CreateAnimation(0)); | |
476 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
477 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0))); | |
478 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
479 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.0))); | |
480 } | |
481 | |
482 TEST(AnimationTest, IsFinishedAtOneIteration) { | |
483 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
484 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
485 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0))); | |
486 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
487 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.0))); | |
488 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(2.0))); | |
489 } | |
490 | |
491 TEST(AnimationTest, IsFinishedAtInfiniteIterations) { | |
492 scoped_ptr<Animation> anim(CreateAnimation(-1)); | |
493 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
494 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
495 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.5))); | |
496 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(1.0))); | |
497 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(1.5))); | |
498 } | |
499 | |
500 TEST(AnimationTest, IsFinishedNegativeTimeOffset) { | |
501 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
502 anim->set_time_offset(TimeDelta::FromMilliseconds(-500)); | |
503 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
504 | |
505 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0))); | |
506 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
507 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.5))); | |
508 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(1.0))); | |
509 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.5))); | |
510 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(2.0))); | |
511 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(2.5))); | |
512 } | |
513 | |
514 TEST(AnimationTest, IsFinishedPositiveTimeOffset) { | |
515 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
516 anim->set_time_offset(TimeDelta::FromMilliseconds(500)); | |
517 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
518 | |
519 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0))); | |
520 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
521 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.5))); | |
522 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.0))); | |
523 } | |
524 | |
525 TEST(AnimationTest, IsFinishedAtNotRunning) { | |
526 scoped_ptr<Animation> anim(CreateAnimation(0)); | |
527 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
528 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
529 anim->SetRunState(Animation::PAUSED, TicksFromSecondsF(0.0)); | |
530 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
531 anim->SetRunState(Animation::WAITING_FOR_TARGET_AVAILABILITY, | |
532 TicksFromSecondsF(0.0)); | |
533 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
534 anim->SetRunState(Animation::FINISHED, TicksFromSecondsF(0.0)); | |
535 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
536 anim->SetRunState(Animation::ABORTED, TicksFromSecondsF(0.0)); | |
537 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
538 } | |
539 | |
540 TEST(AnimationTest, IsFinished) { | |
541 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
542 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
543 EXPECT_FALSE(anim->is_finished()); | |
544 anim->SetRunState(Animation::PAUSED, TicksFromSecondsF(0.0)); | |
545 EXPECT_FALSE(anim->is_finished()); | |
546 anim->SetRunState(Animation::WAITING_FOR_TARGET_AVAILABILITY, | |
547 TicksFromSecondsF(0.0)); | |
548 EXPECT_FALSE(anim->is_finished()); | |
549 anim->SetRunState(Animation::FINISHED, TicksFromSecondsF(0.0)); | |
550 EXPECT_TRUE(anim->is_finished()); | |
551 anim->SetRunState(Animation::ABORTED, TicksFromSecondsF(0.0)); | |
552 EXPECT_TRUE(anim->is_finished()); | |
553 } | |
554 | |
555 TEST(AnimationTest, IsFinishedNeedsSynchronizedStartTime) { | |
556 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
557 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(2.0)); | |
558 EXPECT_FALSE(anim->is_finished()); | |
559 anim->SetRunState(Animation::PAUSED, TicksFromSecondsF(2.0)); | |
560 EXPECT_FALSE(anim->is_finished()); | |
561 anim->SetRunState(Animation::WAITING_FOR_TARGET_AVAILABILITY, | |
562 TicksFromSecondsF(2.0)); | |
563 EXPECT_FALSE(anim->is_finished()); | |
564 anim->SetRunState(Animation::FINISHED, TicksFromSecondsF(0.0)); | |
565 EXPECT_TRUE(anim->is_finished()); | |
566 anim->SetRunState(Animation::ABORTED, TicksFromSecondsF(0.0)); | |
567 EXPECT_TRUE(anim->is_finished()); | |
568 } | |
569 | |
570 TEST(AnimationTest, RunStateChangesIgnoredWhileSuspended) { | |
571 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
572 anim->Suspend(TicksFromSecondsF(0)); | |
573 EXPECT_EQ(Animation::PAUSED, anim->run_state()); | |
574 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
575 EXPECT_EQ(Animation::PAUSED, anim->run_state()); | |
576 anim->Resume(TicksFromSecondsF(0)); | |
577 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
578 EXPECT_EQ(Animation::RUNNING, anim->run_state()); | |
579 } | |
580 | |
581 TEST(AnimationTest, TrimTimePlaybackNormal) { | |
582 scoped_ptr<Animation> anim(CreateAnimation(1, 1, 1)); | |
583 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
584 .InSecondsF()); | |
585 EXPECT_EQ( | |
586 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
587 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
588 .InSecondsF()); | |
589 EXPECT_EQ( | |
590 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
591 EXPECT_EQ( | |
592 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); | |
593 } | |
594 | |
595 TEST(AnimationTest, TrimTimePlaybackSlow) { | |
596 scoped_ptr<Animation> anim(CreateAnimation(1, 1, 0.5)); | |
597 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
598 .InSecondsF()); | |
599 EXPECT_EQ( | |
600 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
601 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
602 .InSecondsF()); | |
603 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
604 .InSecondsF()); | |
605 EXPECT_EQ( | |
606 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); | |
607 EXPECT_EQ( | |
608 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)).InSecondsF()); | |
609 } | |
610 | |
611 TEST(AnimationTest, TrimTimePlaybackFast) { | |
612 scoped_ptr<Animation> anim(CreateAnimation(1, 4, 2)); | |
613 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
614 .InSecondsF()); | |
615 EXPECT_EQ( | |
616 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
617 EXPECT_EQ( | |
618 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)).InSecondsF()); | |
619 EXPECT_EQ( | |
620 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
621 EXPECT_EQ( | |
622 3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)).InSecondsF()); | |
623 EXPECT_EQ( | |
624 4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); | |
625 EXPECT_EQ( | |
626 4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)).InSecondsF()); | |
627 } | |
628 | |
629 TEST(AnimationTest, TrimTimePlaybackNormalReverse) { | |
630 scoped_ptr<Animation> anim(CreateAnimation(1, 2, -1)); | |
631 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
632 .InSecondsF()); | |
633 EXPECT_EQ( | |
634 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)).InSecondsF()); | |
635 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
636 .InSecondsF()); | |
637 EXPECT_EQ( | |
638 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
639 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
640 .InSecondsF()); | |
641 EXPECT_EQ( | |
642 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); | |
643 EXPECT_EQ( | |
644 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)).InSecondsF()); | |
645 } | |
646 | |
647 TEST(AnimationTest, TrimTimePlaybackSlowReverse) { | |
648 scoped_ptr<Animation> anim(CreateAnimation(1, 2, -0.5)); | |
649 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
650 .InSecondsF()); | |
651 EXPECT_EQ( | |
652 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)).InSecondsF()); | |
653 EXPECT_EQ(1.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
654 .InSecondsF()); | |
655 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
656 .InSecondsF()); | |
657 EXPECT_EQ(1.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
658 .InSecondsF()); | |
659 EXPECT_EQ( | |
660 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); | |
661 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)) | |
662 .InSecondsF()); | |
663 EXPECT_EQ( | |
664 0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3)).InSecondsF()); | |
665 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)) | |
666 .InSecondsF()); | |
667 EXPECT_EQ( | |
668 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4)).InSecondsF()); | |
669 EXPECT_EQ( | |
670 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)).InSecondsF()); | |
671 } | |
672 | |
673 TEST(AnimationTest, TrimTimePlaybackFastReverse) { | |
674 scoped_ptr<Animation> anim(CreateAnimation(1, 2, -2)); | |
675 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
676 .InSecondsF()); | |
677 EXPECT_EQ( | |
678 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)).InSecondsF()); | |
679 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
680 .InSecondsF()); | |
681 EXPECT_EQ( | |
682 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)).InSecondsF()); | |
683 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
684 .InSecondsF()); | |
685 EXPECT_EQ( | |
686 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
687 EXPECT_EQ( | |
688 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)).InSecondsF()); | |
689 } | |
690 | |
691 TEST(AnimationTest, TrimTimePlaybackFastInfiniteIterations) { | |
692 scoped_ptr<Animation> anim(CreateAnimation(-1, 4, 4)); | |
693 EXPECT_EQ( | |
694 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
695 EXPECT_EQ( | |
696 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)).InSecondsF()); | |
697 EXPECT_EQ( | |
698 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
699 EXPECT_EQ( | |
700 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)).InSecondsF()); | |
701 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1000.0)) | |
702 .InSecondsF()); | |
703 EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1000.5)) | |
704 .InSecondsF()); | |
705 } | |
706 | |
707 TEST(AnimationTest, TrimTimePlaybackNormalDoubleReverse) { | |
708 scoped_ptr<Animation> anim(CreateAnimation(1, 1, -1)); | |
709 anim->set_direction(Animation::DIRECTION_REVERSE); | |
710 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
711 .InSecondsF()); | |
712 EXPECT_EQ( | |
713 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
714 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
715 .InSecondsF()); | |
716 EXPECT_EQ( | |
717 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
718 EXPECT_EQ( | |
719 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); | |
720 } | |
721 | |
722 TEST(AnimationTest, TrimTimePlaybackFastDoubleReverse) { | |
723 scoped_ptr<Animation> anim(CreateAnimation(1, 4, -2)); | |
724 anim->set_direction(Animation::DIRECTION_REVERSE); | |
725 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
726 .InSecondsF()); | |
727 EXPECT_EQ( | |
728 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
729 EXPECT_EQ( | |
730 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)).InSecondsF()); | |
731 EXPECT_EQ( | |
732 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
733 EXPECT_EQ( | |
734 3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)).InSecondsF()); | |
735 EXPECT_EQ( | |
736 4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); | |
737 EXPECT_EQ( | |
738 4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)).InSecondsF()); | |
739 } | |
740 | |
741 TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFast) { | |
742 scoped_ptr<Animation> anim(CreateAnimation(2, 2, 2)); | |
743 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
744 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
745 .InSecondsF()); | |
746 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
747 .InSecondsF()); | |
748 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
749 .InSecondsF()); | |
750 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
751 .InSecondsF()); | |
752 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
753 .InSecondsF()); | |
754 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
755 .InSecondsF()); | |
756 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
757 .InSecondsF()); | |
758 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) | |
759 .InSecondsF()); | |
760 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
761 .InSecondsF()); | |
762 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) | |
763 .InSecondsF()); | |
764 } | |
765 | |
766 TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFastReverse) { | |
767 scoped_ptr<Animation> anim(CreateAnimation(2, 2, 2)); | |
768 anim->set_direction(Animation::DIRECTION_ALTERNATE_REVERSE); | |
769 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
770 .InSecondsF()); | |
771 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
772 .InSecondsF()); | |
773 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
774 .InSecondsF()); | |
775 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
776 .InSecondsF()); | |
777 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
778 .InSecondsF()); | |
779 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
780 .InSecondsF()); | |
781 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
782 .InSecondsF()); | |
783 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
784 .InSecondsF()); | |
785 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) | |
786 .InSecondsF()); | |
787 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
788 .InSecondsF()); | |
789 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) | |
790 .InSecondsF()); | |
791 } | |
792 | |
793 TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFastDoubleReverse) { | |
794 scoped_ptr<Animation> anim(CreateAnimation(2, 2, -2)); | |
795 anim->set_direction(Animation::DIRECTION_ALTERNATE_REVERSE); | |
796 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
797 .InSecondsF()); | |
798 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
799 .InSecondsF()); | |
800 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
801 .InSecondsF()); | |
802 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
803 .InSecondsF()); | |
804 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
805 .InSecondsF()); | |
806 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
807 .InSecondsF()); | |
808 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
809 .InSecondsF()); | |
810 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) | |
811 .InSecondsF()); | |
812 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
813 .InSecondsF()); | |
814 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) | |
815 .InSecondsF()); | |
816 } | |
817 | |
818 TEST(AnimationTest, | |
819 TrimTimeAlternateReverseThreeIterationsPlaybackFastAlternateReverse) { | |
820 scoped_ptr<Animation> anim(CreateAnimation(3, 2, -2)); | |
821 anim->set_direction(Animation::DIRECTION_ALTERNATE_REVERSE); | |
822 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
823 .InSecondsF()); | |
824 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
825 .InSecondsF()); | |
826 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
827 .InSecondsF()); | |
828 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
829 .InSecondsF()); | |
830 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
831 .InSecondsF()); | |
832 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
833 .InSecondsF()); | |
834 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
835 .InSecondsF()); | |
836 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) | |
837 .InSecondsF()); | |
838 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
839 .InSecondsF()); | |
840 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) | |
841 .InSecondsF()); | |
842 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)) | |
843 .InSecondsF()); | |
844 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.75)) | |
845 .InSecondsF()); | |
846 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)) | |
847 .InSecondsF()); | |
848 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.25)) | |
849 .InSecondsF()); | |
850 } | |
851 | |
852 TEST(AnimationTest, | |
853 TrimTimeAlternateReverseTwoIterationsPlaybackNormalAlternate) { | |
854 scoped_ptr<Animation> anim(CreateAnimation(2, 2, -1)); | |
855 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
856 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
857 .InSecondsF()); | |
858 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
859 .InSecondsF()); | |
860 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
861 .InSecondsF()); | |
862 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
863 .InSecondsF()); | |
864 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
865 .InSecondsF()); | |
866 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)) | |
867 .InSecondsF()); | |
868 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)) | |
869 .InSecondsF()); | |
870 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)) | |
871 .InSecondsF()); | |
872 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)) | |
873 .InSecondsF()); | |
874 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)) | |
875 .InSecondsF()); | |
876 } | |
877 | |
878 TEST(AnimationTest, TrimTimeIterationStart) { | |
879 scoped_ptr<Animation> anim(CreateAnimation(2, 1, 1)); | |
880 anim->set_iteration_start(0.5); | |
881 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
882 .InSecondsF()); | |
883 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
884 .InSecondsF()); | |
885 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
886 .InSecondsF()); | |
887 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
888 .InSecondsF()); | |
889 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
890 .InSecondsF()); | |
891 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
892 .InSecondsF()); | |
893 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)) | |
894 .InSecondsF()); | |
895 } | |
896 | |
897 TEST(AnimationTest, TrimTimeIterationStartAlternate) { | |
898 scoped_ptr<Animation> anim(CreateAnimation(2, 1, 1)); | |
899 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
900 anim->set_iteration_start(0.3); | |
901 EXPECT_EQ(0.3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
902 .InSecondsF()); | |
903 EXPECT_EQ(0.3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
904 .InSecondsF()); | |
905 EXPECT_EQ(0.8, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
906 .InSecondsF()); | |
907 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.7)) | |
908 .InSecondsF()); | |
909 EXPECT_EQ(0.7, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
910 .InSecondsF()); | |
911 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.2)) | |
912 .InSecondsF()); | |
913 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.7)) | |
914 .InSecondsF()); | |
915 } | |
916 | |
917 TEST(AnimationTest, TrimTimeIterationStartAlternateThreeIterations) { | |
918 scoped_ptr<Animation> anim(CreateAnimation(3, 1, 1)); | |
919 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
920 anim->set_iteration_start(1); | |
921 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
922 .InSecondsF()); | |
923 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
924 .InSecondsF()); | |
925 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
926 .InSecondsF()); | |
927 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
928 .InSecondsF()); | |
929 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
930 .InSecondsF()); | |
931 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
932 .InSecondsF()); | |
933 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)) | |
934 .InSecondsF()); | |
935 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)) | |
936 .InSecondsF()); | |
937 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)) | |
938 .InSecondsF()); | |
939 } | |
940 | |
941 TEST(AnimationTest, | |
942 TrimTimeIterationStartAlternateThreeIterationsPlaybackReverse) { | |
943 scoped_ptr<Animation> anim(CreateAnimation(3, 1, -1)); | |
944 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
945 anim->set_iteration_start(1); | |
946 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
947 .InSecondsF()); | |
948 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
949 .InSecondsF()); | |
950 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
951 .InSecondsF()); | |
952 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)) | |
953 .InSecondsF()); | |
954 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)) | |
955 .InSecondsF()); | |
956 } | |
957 | |
958 TEST(AnimationTest, InEffectFillMode) { | |
959 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
960 anim->set_fill_mode(Animation::FILL_MODE_NONE); | |
961 EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0))); | |
962 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); | |
963 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); | |
964 | |
965 anim->set_fill_mode(Animation::FILL_MODE_FORWARDS); | |
966 EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0))); | |
967 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); | |
968 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); | |
969 | |
970 anim->set_fill_mode(Animation::FILL_MODE_BACKWARDS); | |
971 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0))); | |
972 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); | |
973 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); | |
974 | |
975 anim->set_fill_mode(Animation::FILL_MODE_BOTH); | |
976 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0))); | |
977 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); | |
978 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); | |
979 } | |
980 | |
981 TEST(AnimationTest, InEffectFillModePlayback) { | |
982 scoped_ptr<Animation> anim(CreateAnimation(1, 1, -1)); | |
983 anim->set_fill_mode(Animation::FILL_MODE_NONE); | |
984 EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0))); | |
985 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); | |
986 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); | |
987 | |
988 anim->set_fill_mode(Animation::FILL_MODE_FORWARDS); | |
989 EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0))); | |
990 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); | |
991 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); | |
992 | |
993 anim->set_fill_mode(Animation::FILL_MODE_BACKWARDS); | |
994 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0))); | |
995 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); | |
996 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); | |
997 | |
998 anim->set_fill_mode(Animation::FILL_MODE_BOTH); | |
999 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0))); | |
1000 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); | |
1001 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); | |
1002 } | |
1003 | |
1004 } // namespace | |
1005 } // namespace cc | |
OLD | NEW |