Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: third_party/WebKit/Source/core/animation/AnimationEffectTest.cpp

Issue 2236583003: Rename AnimationEffect to AnimationEffectReadOnly (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@deprecated-assert
Patch Set: Rebase Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2013, Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 *
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the
13 * distribution.
14 * * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31 #include "core/animation/AnimationEffect.h"
32
33 #include "core/animation/ComputedTimingProperties.h"
34 #include "testing/gtest/include/gtest/gtest.h"
35
36 namespace blink {
37
38 class TestAnimationEffectEventDelegate : public AnimationEffect::EventDelegate {
39 public:
40 void onEventCondition(const AnimationEffect& animationNode) override
41 {
42 m_eventTriggered = true;
43
44 }
45 bool requiresIterationEvents(const AnimationEffect& animationNode) override
46 {
47 return true;
48 }
49 void reset()
50 {
51 m_eventTriggered = false;
52 }
53 bool eventTriggered() { return m_eventTriggered; }
54
55 private:
56 bool m_eventTriggered;
57 };
58
59 class TestAnimationEffect : public AnimationEffect {
60 public:
61 static TestAnimationEffect* create(const Timing& specified)
62 {
63 return new TestAnimationEffect(specified, new TestAnimationEffectEventDe legate());
64 }
65
66 void updateInheritedTime(double time)
67 {
68 updateInheritedTime(time, TimingUpdateForAnimationFrame);
69 }
70
71 void updateInheritedTime(double time, TimingUpdateReason reason)
72 {
73 m_eventDelegate->reset();
74 AnimationEffect::updateInheritedTime(time, reason);
75 }
76
77 void updateChildrenAndEffects() const override { }
78 void willDetach() { }
79 TestAnimationEffectEventDelegate* eventDelegate() { return m_eventDelegate.g et(); }
80 double calculateTimeToEffectChange(bool forwards, double localTime, double t imeToNextIteration) const override
81 {
82 m_localTime = localTime;
83 m_timeToNextIteration = timeToNextIteration;
84 return -1;
85 }
86 double takeLocalTime()
87 {
88 const double result = m_localTime;
89 m_localTime = nullValue();
90 return result;
91 }
92
93 double takeTimeToNextIteration()
94 {
95 const double result = m_timeToNextIteration;
96 m_timeToNextIteration = nullValue();
97 return result;
98 }
99
100 DEFINE_INLINE_VIRTUAL_TRACE()
101 {
102 visitor->trace(m_eventDelegate);
103 AnimationEffect::trace(visitor);
104 }
105
106 private:
107 TestAnimationEffect(const Timing& specified, TestAnimationEffectEventDelegat e* eventDelegate)
108 : AnimationEffect(specified, eventDelegate)
109 , m_eventDelegate(eventDelegate)
110 {
111 }
112
113 Member<TestAnimationEffectEventDelegate> m_eventDelegate;
114 mutable double m_localTime;
115 mutable double m_timeToNextIteration;
116 };
117
118 TEST(AnimationAnimationEffectTest, Sanity)
119 {
120 Timing timing;
121 timing.iterationDuration = 2;
122 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
123
124 animationNode->updateInheritedTime(0);
125
126 EXPECT_EQ(AnimationEffect::PhaseActive, animationNode->getPhase());
127 EXPECT_TRUE(animationNode->isInPlay());
128 EXPECT_TRUE(animationNode->isCurrent());
129 EXPECT_TRUE(animationNode->isInEffect());
130 EXPECT_EQ(0, animationNode->currentIteration());
131 EXPECT_EQ(2, animationNode->activeDurationInternal());
132 EXPECT_EQ(0, animationNode->progress());
133
134 animationNode->updateInheritedTime(1);
135
136 EXPECT_EQ(AnimationEffect::PhaseActive, animationNode->getPhase());
137 EXPECT_TRUE(animationNode->isInPlay());
138 EXPECT_TRUE(animationNode->isCurrent());
139 EXPECT_TRUE(animationNode->isInEffect());
140 EXPECT_EQ(0, animationNode->currentIteration());
141 EXPECT_EQ(2, animationNode->activeDurationInternal());
142 EXPECT_EQ(0.5, animationNode->progress());
143
144 animationNode->updateInheritedTime(2);
145
146 EXPECT_EQ(AnimationEffect::PhaseAfter, animationNode->getPhase());
147 EXPECT_FALSE(animationNode->isInPlay());
148 EXPECT_FALSE(animationNode->isCurrent());
149 EXPECT_TRUE(animationNode->isInEffect());
150 EXPECT_EQ(0, animationNode->currentIteration());
151 EXPECT_EQ(2, animationNode->activeDurationInternal());
152 EXPECT_EQ(1, animationNode->progress());
153
154 animationNode->updateInheritedTime(3);
155
156 EXPECT_EQ(AnimationEffect::PhaseAfter, animationNode->getPhase());
157 EXPECT_FALSE(animationNode->isInPlay());
158 EXPECT_FALSE(animationNode->isCurrent());
159 EXPECT_TRUE(animationNode->isInEffect());
160 EXPECT_EQ(0, animationNode->currentIteration());
161 EXPECT_EQ(2, animationNode->activeDurationInternal());
162 EXPECT_EQ(1, animationNode->progress());
163 }
164
165 TEST(AnimationAnimationEffectTest, FillAuto)
166 {
167 Timing timing;
168 timing.iterationDuration = 1;
169 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
170
171 animationNode->updateInheritedTime(-1);
172 EXPECT_EQ(0, animationNode->progress());
173
174 animationNode->updateInheritedTime(2);
175 EXPECT_EQ(1, animationNode->progress());
176 }
177
178 TEST(AnimationAnimationEffectTest, FillForwards)
179 {
180 Timing timing;
181 timing.iterationDuration = 1;
182 timing.fillMode = Timing::FillMode::FORWARDS;
183 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
184
185 animationNode->updateInheritedTime(-1);
186 EXPECT_TRUE(isNull(animationNode->progress()));
187
188 animationNode->updateInheritedTime(2);
189 EXPECT_EQ(1, animationNode->progress());
190 }
191
192 TEST(AnimationAnimationEffectTest, FillBackwards)
193 {
194 Timing timing;
195 timing.iterationDuration = 1;
196 timing.fillMode = Timing::FillMode::BACKWARDS;
197 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
198
199 animationNode->updateInheritedTime(-1);
200 EXPECT_EQ(0, animationNode->progress());
201
202 animationNode->updateInheritedTime(2);
203 EXPECT_TRUE(isNull(animationNode->progress()));
204 }
205
206 TEST(AnimationAnimationEffectTest, FillBoth)
207 {
208 Timing timing;
209 timing.iterationDuration = 1;
210 timing.fillMode = Timing::FillMode::BOTH;
211 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
212
213 animationNode->updateInheritedTime(-1);
214 EXPECT_EQ(0, animationNode->progress());
215
216 animationNode->updateInheritedTime(2);
217 EXPECT_EQ(1, animationNode->progress());
218 }
219
220 TEST(AnimationAnimationEffectTest, StartDelay)
221 {
222 Timing timing;
223 timing.iterationDuration = 1;
224 timing.fillMode = Timing::FillMode::FORWARDS;
225 timing.startDelay = 0.5;
226 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
227
228 animationNode->updateInheritedTime(0);
229 EXPECT_TRUE(isNull(animationNode->progress()));
230
231 animationNode->updateInheritedTime(0.5);
232 EXPECT_EQ(0, animationNode->progress());
233
234 animationNode->updateInheritedTime(1.5);
235 EXPECT_EQ(1, animationNode->progress());
236 }
237
238 TEST(AnimationAnimationEffectTest, ZeroIteration)
239 {
240 Timing timing;
241 timing.iterationDuration = 1;
242 timing.fillMode = Timing::FillMode::FORWARDS;
243 timing.iterationCount = 0;
244 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
245
246 animationNode->updateInheritedTime(-1);
247 EXPECT_EQ(0, animationNode->activeDurationInternal());
248 EXPECT_TRUE(isNull(animationNode->currentIteration()));
249 EXPECT_TRUE(isNull(animationNode->progress()));
250
251 animationNode->updateInheritedTime(0);
252 EXPECT_EQ(0, animationNode->activeDurationInternal());
253 EXPECT_EQ(0, animationNode->currentIteration());
254 EXPECT_EQ(0, animationNode->progress());
255 }
256
257 TEST(AnimationAnimationEffectTest, InfiniteIteration)
258 {
259 Timing timing;
260 timing.iterationDuration = 1;
261 timing.fillMode = Timing::FillMode::FORWARDS;
262 timing.iterationCount = std::numeric_limits<double>::infinity();
263 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
264
265 animationNode->updateInheritedTime(-1);
266 EXPECT_TRUE(isNull(animationNode->currentIteration()));
267 EXPECT_TRUE(isNull(animationNode->progress()));
268
269 EXPECT_EQ(std::numeric_limits<double>::infinity(), animationNode->activeDura tionInternal());
270
271 animationNode->updateInheritedTime(0);
272 EXPECT_EQ(0, animationNode->currentIteration());
273 EXPECT_EQ(0, animationNode->progress());
274 }
275
276 TEST(AnimationAnimationEffectTest, Iteration)
277 {
278 Timing timing;
279 timing.iterationCount = 2;
280 timing.iterationDuration = 2;
281 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
282
283 animationNode->updateInheritedTime(0);
284 EXPECT_EQ(0, animationNode->currentIteration());
285 EXPECT_EQ(0, animationNode->progress());
286
287 animationNode->updateInheritedTime(1);
288 EXPECT_EQ(0, animationNode->currentIteration());
289 EXPECT_EQ(0.5, animationNode->progress());
290
291 animationNode->updateInheritedTime(2);
292 EXPECT_EQ(1, animationNode->currentIteration());
293 EXPECT_EQ(0, animationNode->progress());
294
295 animationNode->updateInheritedTime(2);
296 EXPECT_EQ(1, animationNode->currentIteration());
297 EXPECT_EQ(0, animationNode->progress());
298
299 animationNode->updateInheritedTime(5);
300 EXPECT_EQ(1, animationNode->currentIteration());
301 EXPECT_EQ(1, animationNode->progress());
302 }
303
304 TEST(AnimationAnimationEffectTest, IterationStart)
305 {
306 Timing timing;
307 timing.iterationStart = 1.2;
308 timing.iterationCount = 2.2;
309 timing.iterationDuration = 1;
310 timing.fillMode = Timing::FillMode::BOTH;
311 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
312
313 animationNode->updateInheritedTime(-1);
314 EXPECT_EQ(1, animationNode->currentIteration());
315 EXPECT_NEAR(0.2, animationNode->progress(), 0.000000000000001);
316
317 animationNode->updateInheritedTime(0);
318 EXPECT_EQ(1, animationNode->currentIteration());
319 EXPECT_NEAR(0.2, animationNode->progress(), 0.000000000000001);
320
321 animationNode->updateInheritedTime(10);
322 EXPECT_EQ(3, animationNode->currentIteration());
323 EXPECT_NEAR(0.4, animationNode->progress(), 0.000000000000001);
324 }
325
326 TEST(AnimationAnimationEffectTest, IterationAlternate)
327 {
328 Timing timing;
329 timing.iterationCount = 10;
330 timing.iterationDuration = 1;
331 timing.direction = Timing::PlaybackDirection::ALTERNATE_NORMAL;
332 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
333
334 animationNode->updateInheritedTime(0.75);
335 EXPECT_EQ(0, animationNode->currentIteration());
336 EXPECT_EQ(0.75, animationNode->progress());
337
338 animationNode->updateInheritedTime(1.75);
339 EXPECT_EQ(1, animationNode->currentIteration());
340 EXPECT_EQ(0.25, animationNode->progress());
341
342 animationNode->updateInheritedTime(2.75);
343 EXPECT_EQ(2, animationNode->currentIteration());
344 EXPECT_EQ(0.75, animationNode->progress());
345 }
346
347 TEST(AnimationAnimationEffectTest, IterationAlternateReverse)
348 {
349 Timing timing;
350 timing.iterationCount = 10;
351 timing.iterationDuration = 1;
352 timing.direction = Timing::PlaybackDirection::ALTERNATE_REVERSE;
353 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
354
355 animationNode->updateInheritedTime(0.75);
356 EXPECT_EQ(0, animationNode->currentIteration());
357 EXPECT_EQ(0.25, animationNode->progress());
358
359 animationNode->updateInheritedTime(1.75);
360 EXPECT_EQ(1, animationNode->currentIteration());
361 EXPECT_EQ(0.75, animationNode->progress());
362
363 animationNode->updateInheritedTime(2.75);
364 EXPECT_EQ(2, animationNode->currentIteration());
365 EXPECT_EQ(0.25, animationNode->progress());
366 }
367
368 TEST(AnimationAnimationEffectTest, ZeroDurationSanity)
369 {
370 Timing timing;
371 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
372
373 animationNode->updateInheritedTime(0);
374
375 EXPECT_EQ(AnimationEffect::PhaseAfter, animationNode->getPhase());
376 EXPECT_FALSE(animationNode->isInPlay());
377 EXPECT_FALSE(animationNode->isCurrent());
378 EXPECT_TRUE(animationNode->isInEffect());
379 EXPECT_EQ(0, animationNode->currentIteration());
380 EXPECT_EQ(0, animationNode->activeDurationInternal());
381 EXPECT_EQ(1, animationNode->progress());
382
383 animationNode->updateInheritedTime(1);
384
385 EXPECT_EQ(AnimationEffect::PhaseAfter, animationNode->getPhase());
386 EXPECT_FALSE(animationNode->isInPlay());
387 EXPECT_FALSE(animationNode->isCurrent());
388 EXPECT_TRUE(animationNode->isInEffect());
389 EXPECT_EQ(0, animationNode->currentIteration());
390 EXPECT_EQ(0, animationNode->activeDurationInternal());
391 EXPECT_EQ(1, animationNode->progress());
392 }
393
394 TEST(AnimationAnimationEffectTest, ZeroDurationFillForwards)
395 {
396 Timing timing;
397 timing.fillMode = Timing::FillMode::FORWARDS;
398 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
399
400 animationNode->updateInheritedTime(-1);
401 EXPECT_TRUE(isNull(animationNode->progress()));
402
403 animationNode->updateInheritedTime(0);
404 EXPECT_EQ(1, animationNode->progress());
405
406 animationNode->updateInheritedTime(1);
407 EXPECT_EQ(1, animationNode->progress());
408 }
409
410 TEST(AnimationAnimationEffectTest, ZeroDurationFillBackwards)
411 {
412 Timing timing;
413 timing.fillMode = Timing::FillMode::BACKWARDS;
414 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
415
416 animationNode->updateInheritedTime(-1);
417 EXPECT_EQ(0, animationNode->progress());
418
419 animationNode->updateInheritedTime(0);
420 EXPECT_TRUE(isNull(animationNode->progress()));
421
422 animationNode->updateInheritedTime(1);
423 EXPECT_TRUE(isNull(animationNode->progress()));
424 }
425
426 TEST(AnimationAnimationEffectTest, ZeroDurationFillBoth)
427 {
428 Timing timing;
429 timing.fillMode = Timing::FillMode::BOTH;
430 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
431
432 animationNode->updateInheritedTime(-1);
433 EXPECT_EQ(0, animationNode->progress());
434
435 animationNode->updateInheritedTime(0);
436 EXPECT_EQ(1, animationNode->progress());
437
438 animationNode->updateInheritedTime(1);
439 EXPECT_EQ(1, animationNode->progress());
440 }
441
442 TEST(AnimationAnimationEffectTest, ZeroDurationStartDelay)
443 {
444 Timing timing;
445 timing.fillMode = Timing::FillMode::FORWARDS;
446 timing.startDelay = 0.5;
447 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
448
449 animationNode->updateInheritedTime(0);
450 EXPECT_TRUE(isNull(animationNode->progress()));
451
452 animationNode->updateInheritedTime(0.5);
453 EXPECT_EQ(1, animationNode->progress());
454
455 animationNode->updateInheritedTime(1.5);
456 EXPECT_EQ(1, animationNode->progress());
457 }
458
459 TEST(AnimationAnimationEffectTest, ZeroDurationIterationStartAndCount)
460 {
461 Timing timing;
462 timing.iterationStart = 0.1;
463 timing.iterationCount = 0.2;
464 timing.fillMode = Timing::FillMode::BOTH;
465 timing.startDelay = 0.3;
466 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
467
468 animationNode->updateInheritedTime(0);
469 EXPECT_EQ(0.1, animationNode->progress());
470
471 animationNode->updateInheritedTime(0.3);
472 EXPECT_DOUBLE_EQ(0.3, animationNode->progress());
473
474 animationNode->updateInheritedTime(1);
475 EXPECT_DOUBLE_EQ(0.3, animationNode->progress());
476 }
477
478 // FIXME: Needs specification work.
479 TEST(AnimationAnimationEffectTest, ZeroDurationInfiniteIteration)
480 {
481 Timing timing;
482 timing.fillMode = Timing::FillMode::FORWARDS;
483 timing.iterationCount = std::numeric_limits<double>::infinity();
484 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
485
486 animationNode->updateInheritedTime(-1);
487 EXPECT_EQ(0, animationNode->activeDurationInternal());
488 EXPECT_TRUE(isNull(animationNode->currentIteration()));
489 EXPECT_TRUE(isNull(animationNode->progress()));
490
491 animationNode->updateInheritedTime(0);
492 EXPECT_EQ(0, animationNode->activeDurationInternal());
493 EXPECT_EQ(std::numeric_limits<double>::infinity(), animationNode->currentIte ration());
494 EXPECT_EQ(1, animationNode->progress());
495 }
496
497 TEST(AnimationAnimationEffectTest, ZeroDurationIteration)
498 {
499 Timing timing;
500 timing.fillMode = Timing::FillMode::FORWARDS;
501 timing.iterationCount = 2;
502 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
503
504 animationNode->updateInheritedTime(-1);
505 EXPECT_TRUE(isNull(animationNode->currentIteration()));
506 EXPECT_TRUE(isNull(animationNode->progress()));
507
508 animationNode->updateInheritedTime(0);
509 EXPECT_EQ(1, animationNode->currentIteration());
510 EXPECT_EQ(1, animationNode->progress());
511
512 animationNode->updateInheritedTime(1);
513 EXPECT_EQ(1, animationNode->currentIteration());
514 EXPECT_EQ(1, animationNode->progress());
515 }
516
517 TEST(AnimationAnimationEffectTest, ZeroDurationIterationStart)
518 {
519 Timing timing;
520 timing.iterationStart = 1.2;
521 timing.iterationCount = 2.2;
522 timing.fillMode = Timing::FillMode::BOTH;
523 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
524
525 animationNode->updateInheritedTime(-1);
526 EXPECT_EQ(1, animationNode->currentIteration());
527 EXPECT_NEAR(0.2, animationNode->progress(), 0.000000000000001);
528
529 animationNode->updateInheritedTime(0);
530 EXPECT_EQ(3, animationNode->currentIteration());
531 EXPECT_NEAR(0.4, animationNode->progress(), 0.000000000000001);
532
533 animationNode->updateInheritedTime(10);
534 EXPECT_EQ(3, animationNode->currentIteration());
535 EXPECT_NEAR(0.4, animationNode->progress(), 0.000000000000001);
536 }
537
538 TEST(AnimationAnimationEffectTest, ZeroDurationIterationAlternate)
539 {
540 Timing timing;
541 timing.fillMode = Timing::FillMode::FORWARDS;
542 timing.iterationCount = 2;
543 timing.direction = Timing::PlaybackDirection::ALTERNATE_NORMAL;
544 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
545
546 animationNode->updateInheritedTime(-1);
547 EXPECT_TRUE(isNull(animationNode->currentIteration()));
548 EXPECT_TRUE(isNull(animationNode->progress()));
549
550 animationNode->updateInheritedTime(0);
551 EXPECT_EQ(1, animationNode->currentIteration());
552 EXPECT_EQ(0, animationNode->progress());
553
554 animationNode->updateInheritedTime(1);
555 EXPECT_EQ(1, animationNode->currentIteration());
556 EXPECT_EQ(0, animationNode->progress());
557 }
558
559 TEST(AnimationAnimationEffectTest, ZeroDurationIterationAlternateReverse)
560 {
561 Timing timing;
562 timing.fillMode = Timing::FillMode::FORWARDS;
563 timing.iterationCount = 2;
564 timing.direction = Timing::PlaybackDirection::ALTERNATE_REVERSE;
565 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
566
567 animationNode->updateInheritedTime(-1);
568 EXPECT_TRUE(isNull(animationNode->currentIteration()));
569 EXPECT_TRUE(isNull(animationNode->progress()));
570
571 animationNode->updateInheritedTime(0);
572 EXPECT_EQ(1, animationNode->currentIteration());
573 EXPECT_EQ(1, animationNode->progress());
574
575 animationNode->updateInheritedTime(1);
576 EXPECT_EQ(1, animationNode->currentIteration());
577 EXPECT_EQ(1, animationNode->progress());
578 }
579
580 TEST(AnimationAnimationEffectTest, InfiniteDurationSanity)
581 {
582 Timing timing;
583 timing.iterationDuration = std::numeric_limits<double>::infinity();
584 timing.iterationCount = 1;
585 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
586
587 animationNode->updateInheritedTime(0);
588
589 EXPECT_EQ(std::numeric_limits<double>::infinity(), animationNode->activeDura tionInternal());
590 EXPECT_EQ(AnimationEffect::PhaseActive, animationNode->getPhase());
591 EXPECT_TRUE(animationNode->isInPlay());
592 EXPECT_TRUE(animationNode->isCurrent());
593 EXPECT_TRUE(animationNode->isInEffect());
594 EXPECT_EQ(0, animationNode->currentIteration());
595 EXPECT_EQ(0, animationNode->progress());
596
597 animationNode->updateInheritedTime(1);
598
599 EXPECT_EQ(std::numeric_limits<double>::infinity(), animationNode->activeDura tionInternal());
600 EXPECT_EQ(AnimationEffect::PhaseActive, animationNode->getPhase());
601 EXPECT_TRUE(animationNode->isInPlay());
602 EXPECT_TRUE(animationNode->isCurrent());
603 EXPECT_TRUE(animationNode->isInEffect());
604 EXPECT_EQ(0, animationNode->currentIteration());
605 EXPECT_EQ(0, animationNode->progress());
606 }
607
608 // FIXME: Needs specification work.
609 TEST(AnimationAnimationEffectTest, InfiniteDurationZeroIterations)
610 {
611 Timing timing;
612 timing.iterationDuration = std::numeric_limits<double>::infinity();
613 timing.iterationCount = 0;
614 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
615
616 animationNode->updateInheritedTime(0);
617
618 EXPECT_EQ(0, animationNode->activeDurationInternal());
619 EXPECT_EQ(AnimationEffect::PhaseAfter, animationNode->getPhase());
620 EXPECT_FALSE(animationNode->isInPlay());
621 EXPECT_FALSE(animationNode->isCurrent());
622 EXPECT_TRUE(animationNode->isInEffect());
623 EXPECT_EQ(0, animationNode->currentIteration());
624 EXPECT_EQ(0, animationNode->progress());
625
626 animationNode->updateInheritedTime(1);
627
628 EXPECT_EQ(AnimationEffect::PhaseAfter, animationNode->getPhase());
629 EXPECT_EQ(AnimationEffect::PhaseAfter, animationNode->getPhase());
630 EXPECT_FALSE(animationNode->isInPlay());
631 EXPECT_FALSE(animationNode->isCurrent());
632 EXPECT_TRUE(animationNode->isInEffect());
633 EXPECT_EQ(0, animationNode->currentIteration());
634 EXPECT_EQ(0, animationNode->progress());
635 }
636
637 TEST(AnimationAnimationEffectTest, InfiniteDurationInfiniteIterations)
638 {
639 Timing timing;
640 timing.iterationDuration = std::numeric_limits<double>::infinity();
641 timing.iterationCount = std::numeric_limits<double>::infinity();
642 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
643
644 animationNode->updateInheritedTime(0);
645
646 EXPECT_EQ(std::numeric_limits<double>::infinity(), animationNode->activeDura tionInternal());
647 EXPECT_EQ(AnimationEffect::PhaseActive, animationNode->getPhase());
648 EXPECT_TRUE(animationNode->isInPlay());
649 EXPECT_TRUE(animationNode->isCurrent());
650 EXPECT_TRUE(animationNode->isInEffect());
651 EXPECT_EQ(0, animationNode->currentIteration());
652 EXPECT_EQ(0, animationNode->progress());
653
654 animationNode->updateInheritedTime(1);
655
656 EXPECT_EQ(std::numeric_limits<double>::infinity(), animationNode->activeDura tionInternal());
657 EXPECT_EQ(AnimationEffect::PhaseActive, animationNode->getPhase());
658 EXPECT_TRUE(animationNode->isInPlay());
659 EXPECT_TRUE(animationNode->isCurrent());
660 EXPECT_TRUE(animationNode->isInEffect());
661 EXPECT_EQ(0, animationNode->currentIteration());
662 EXPECT_EQ(0, animationNode->progress());
663 }
664
665 TEST(AnimationAnimationEffectTest, InfiniteDurationZeroPlaybackRate)
666 {
667 Timing timing;
668 timing.iterationDuration = std::numeric_limits<double>::infinity();
669 timing.playbackRate = 0;
670 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
671
672 animationNode->updateInheritedTime(0);
673
674 EXPECT_EQ(std::numeric_limits<double>::infinity(), animationNode->activeDura tionInternal());
675 EXPECT_EQ(AnimationEffect::PhaseActive, animationNode->getPhase());
676 EXPECT_TRUE(animationNode->isInPlay());
677 EXPECT_TRUE(animationNode->isCurrent());
678 EXPECT_TRUE(animationNode->isInEffect());
679 EXPECT_EQ(0, animationNode->currentIteration());
680 EXPECT_EQ(0, animationNode->progress());
681
682 animationNode->updateInheritedTime(std::numeric_limits<double>::infinity());
683
684 EXPECT_EQ(std::numeric_limits<double>::infinity(), animationNode->activeDura tionInternal());
685 EXPECT_EQ(AnimationEffect::PhaseAfter, animationNode->getPhase());
686 EXPECT_FALSE(animationNode->isInPlay());
687 EXPECT_FALSE(animationNode->isCurrent());
688 EXPECT_TRUE(animationNode->isInEffect());
689 EXPECT_EQ(0, animationNode->currentIteration());
690 EXPECT_EQ(0, animationNode->progress());
691 }
692
693 TEST(AnimationAnimationEffectTest, EndTime)
694 {
695 Timing timing;
696 timing.startDelay = 1;
697 timing.endDelay = 2;
698 timing.iterationDuration = 4;
699 timing.iterationCount = 2;
700 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
701 EXPECT_EQ(11, animationNode->endTimeInternal());
702 }
703
704 TEST(AnimationAnimationEffectTest, Events)
705 {
706 Timing timing;
707 timing.iterationDuration = 1;
708 timing.fillMode = Timing::FillMode::FORWARDS;
709 timing.iterationCount = 2;
710 timing.startDelay = 1;
711 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
712
713 animationNode->updateInheritedTime(0.0, TimingUpdateOnDemand);
714 EXPECT_FALSE(animationNode->eventDelegate()->eventTriggered());
715
716 animationNode->updateInheritedTime(0.0, TimingUpdateForAnimationFrame);
717 EXPECT_TRUE(animationNode->eventDelegate()->eventTriggered());
718
719 animationNode->updateInheritedTime(1.5, TimingUpdateOnDemand);
720 EXPECT_FALSE(animationNode->eventDelegate()->eventTriggered());
721
722 animationNode->updateInheritedTime(1.5, TimingUpdateForAnimationFrame);
723 EXPECT_TRUE(animationNode->eventDelegate()->eventTriggered());
724
725 }
726
727 TEST(AnimationAnimationEffectTest, TimeToEffectChange)
728 {
729 Timing timing;
730 timing.iterationDuration = 1;
731 timing.fillMode = Timing::FillMode::FORWARDS;
732 timing.iterationStart = 0.2;
733 timing.iterationCount = 2.5;
734 timing.startDelay = 1;
735 timing.direction = Timing::PlaybackDirection::ALTERNATE_NORMAL;
736 TestAnimationEffect* animationNode = TestAnimationEffect::create(timing);
737
738 animationNode->updateInheritedTime(0);
739 EXPECT_EQ(0, animationNode->takeLocalTime());
740 EXPECT_TRUE(std::isinf(animationNode->takeTimeToNextIteration()));
741
742 // Normal iteration.
743 animationNode->updateInheritedTime(1.75);
744 EXPECT_EQ(1.75, animationNode->takeLocalTime());
745 EXPECT_NEAR(0.05, animationNode->takeTimeToNextIteration(), 0.00000000000000 1);
746
747 // Reverse iteration.
748 animationNode->updateInheritedTime(2.75);
749 EXPECT_EQ(2.75, animationNode->takeLocalTime());
750 EXPECT_NEAR(0.05, animationNode->takeTimeToNextIteration(), 0.00000000000000 1);
751
752 // Item ends before iteration finishes.
753 animationNode->updateInheritedTime(3.4);
754 EXPECT_EQ(AnimationEffect::PhaseActive, animationNode->getPhase());
755 EXPECT_EQ(3.4, animationNode->takeLocalTime());
756 EXPECT_TRUE(std::isinf(animationNode->takeTimeToNextIteration()));
757
758 // Item has finished.
759 animationNode->updateInheritedTime(3.5);
760 EXPECT_EQ(AnimationEffect::PhaseAfter, animationNode->getPhase());
761 EXPECT_EQ(3.5, animationNode->takeLocalTime());
762 EXPECT_TRUE(std::isinf(animationNode->takeTimeToNextIteration()));
763 }
764
765 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698