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

Side by Side Diff: sky/engine/core/animation/AnimationNodeTest.cpp

Issue 1229273004: Remove Animations and Transitions. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 5 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 "sky/engine/core/animation/AnimationNode.h"
32
33 #include <gtest/gtest.h>
34
35 using namespace blink;
36
37 namespace {
38
39 class TestAnimationNodeEventDelegate : public AnimationNode::EventDelegate {
40 public:
41 virtual void onEventCondition(const AnimationNode* animationNode) override
42 {
43 m_eventTriggered = true;
44
45 }
46 void reset()
47 {
48 m_eventTriggered = false;
49 }
50 bool eventTriggered() { return m_eventTriggered; }
51
52 private:
53 bool m_eventTriggered;
54 };
55
56 class TestAnimationNode : public AnimationNode {
57 public:
58 static PassRefPtr<TestAnimationNode> create(const Timing& specified)
59 {
60 return adoptRef(new TestAnimationNode(specified, new TestAnimationNodeEv entDelegate()));
61 }
62
63 void updateInheritedTime(double time)
64 {
65 updateInheritedTime(time, TimingUpdateForAnimationFrame);
66 }
67
68 void updateInheritedTime(double time, TimingUpdateReason reason)
69 {
70 m_eventDelegate->reset();
71 AnimationNode::updateInheritedTime(time, reason);
72 }
73
74 virtual void updateChildrenAndEffects() const override { }
75 void willDetach() { }
76 TestAnimationNodeEventDelegate* eventDelegate() { return m_eventDelegate.get (); }
77 virtual double calculateTimeToEffectChange(bool forwards, double localTime, double timeToNextIteration) const override
78 {
79 m_localTime = localTime;
80 m_timeToNextIteration = timeToNextIteration;
81 return -1;
82 }
83 double takeLocalTime()
84 {
85 const double result = m_localTime;
86 m_localTime = nullValue();
87 return result;
88 }
89
90 double takeTimeToNextIteration()
91 {
92 const double result = m_timeToNextIteration;
93 m_timeToNextIteration = nullValue();
94 return result;
95 }
96
97 private:
98 TestAnimationNode(const Timing& specified, TestAnimationNodeEventDelegate* e ventDelegate)
99 : AnimationNode(specified, adoptPtr(eventDelegate))
100 , m_eventDelegate(eventDelegate)
101 {
102 }
103
104 RawPtr<TestAnimationNodeEventDelegate> m_eventDelegate;
105 mutable double m_localTime;
106 mutable double m_timeToNextIteration;
107 };
108
109 TEST(AnimationAnimationNodeTest, Sanity)
110 {
111 Timing timing;
112 timing.iterationDuration = 2;
113 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
114
115 EXPECT_EQ(0, animationNode->startTime());
116
117 animationNode->updateInheritedTime(0);
118
119 EXPECT_EQ(AnimationNode::PhaseActive, animationNode->phase());
120 EXPECT_TRUE(animationNode->isInPlay());
121 EXPECT_TRUE(animationNode->isCurrent());
122 EXPECT_TRUE(animationNode->isInEffect());
123 EXPECT_EQ(0, animationNode->currentIteration());
124 EXPECT_EQ(0, animationNode->startTime());
125 EXPECT_EQ(2, animationNode->activeDurationInternal());
126 EXPECT_EQ(0, animationNode->timeFraction());
127
128 animationNode->updateInheritedTime(1);
129
130 EXPECT_EQ(AnimationNode::PhaseActive, animationNode->phase());
131 EXPECT_TRUE(animationNode->isInPlay());
132 EXPECT_TRUE(animationNode->isCurrent());
133 EXPECT_TRUE(animationNode->isInEffect());
134 EXPECT_EQ(0, animationNode->currentIteration());
135 EXPECT_EQ(0, animationNode->startTime());
136 EXPECT_EQ(2, animationNode->activeDurationInternal());
137 EXPECT_EQ(0.5, animationNode->timeFraction());
138
139 animationNode->updateInheritedTime(2);
140
141 EXPECT_EQ(AnimationNode::PhaseAfter, animationNode->phase());
142 EXPECT_FALSE(animationNode->isInPlay());
143 EXPECT_FALSE(animationNode->isCurrent());
144 EXPECT_TRUE(animationNode->isInEffect());
145 EXPECT_EQ(0, animationNode->currentIteration());
146 EXPECT_EQ(0, animationNode->startTime());
147 EXPECT_EQ(2, animationNode->activeDurationInternal());
148 EXPECT_EQ(1, animationNode->timeFraction());
149
150 animationNode->updateInheritedTime(3);
151
152 EXPECT_EQ(AnimationNode::PhaseAfter, animationNode->phase());
153 EXPECT_FALSE(animationNode->isInPlay());
154 EXPECT_FALSE(animationNode->isCurrent());
155 EXPECT_TRUE(animationNode->isInEffect());
156 EXPECT_EQ(0, animationNode->currentIteration());
157 EXPECT_EQ(0, animationNode->startTime());
158 EXPECT_EQ(2, animationNode->activeDurationInternal());
159 EXPECT_EQ(1, animationNode->timeFraction());
160 }
161
162 TEST(AnimationAnimationNodeTest, FillAuto)
163 {
164 Timing timing;
165 timing.iterationDuration = 1;
166 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
167
168 animationNode->updateInheritedTime(-1);
169 EXPECT_EQ(0, animationNode->timeFraction());
170
171 animationNode->updateInheritedTime(2);
172 EXPECT_EQ(1, animationNode->timeFraction());
173 }
174
175 TEST(AnimationAnimationNodeTest, FillForwards)
176 {
177 Timing timing;
178 timing.iterationDuration = 1;
179 timing.fillMode = Timing::FillModeForwards;
180 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
181
182 animationNode->updateInheritedTime(-1);
183 EXPECT_TRUE(isNull(animationNode->timeFraction()));
184
185 animationNode->updateInheritedTime(2);
186 EXPECT_EQ(1, animationNode->timeFraction());
187 }
188
189 TEST(AnimationAnimationNodeTest, FillBackwards)
190 {
191 Timing timing;
192 timing.iterationDuration = 1;
193 timing.fillMode = Timing::FillModeBackwards;
194 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
195
196 animationNode->updateInheritedTime(-1);
197 EXPECT_EQ(0, animationNode->timeFraction());
198
199 animationNode->updateInheritedTime(2);
200 EXPECT_TRUE(isNull(animationNode->timeFraction()));
201 }
202
203 TEST(AnimationAnimationNodeTest, FillBoth)
204 {
205 Timing timing;
206 timing.iterationDuration = 1;
207 timing.fillMode = Timing::FillModeBoth;
208 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
209
210 animationNode->updateInheritedTime(-1);
211 EXPECT_EQ(0, animationNode->timeFraction());
212
213 animationNode->updateInheritedTime(2);
214 EXPECT_EQ(1, animationNode->timeFraction());
215 }
216
217 TEST(AnimationAnimationNodeTest, StartDelay)
218 {
219 Timing timing;
220 timing.iterationDuration = 1;
221 timing.fillMode = Timing::FillModeForwards;
222 timing.startDelay = 0.5;
223 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
224
225 animationNode->updateInheritedTime(0);
226 EXPECT_TRUE(isNull(animationNode->timeFraction()));
227
228 animationNode->updateInheritedTime(0.5);
229 EXPECT_EQ(0, animationNode->timeFraction());
230
231 animationNode->updateInheritedTime(1.5);
232 EXPECT_EQ(1, animationNode->timeFraction());
233 }
234
235 TEST(AnimationAnimationNodeTest, ZeroIteration)
236 {
237 Timing timing;
238 timing.iterationDuration = 1;
239 timing.fillMode = Timing::FillModeForwards;
240 timing.iterationCount = 0;
241 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
242
243 animationNode->updateInheritedTime(-1);
244 EXPECT_EQ(0, animationNode->activeDurationInternal());
245 EXPECT_TRUE(isNull(animationNode->currentIteration()));
246 EXPECT_TRUE(isNull(animationNode->timeFraction()));
247
248 animationNode->updateInheritedTime(0);
249 EXPECT_EQ(0, animationNode->activeDurationInternal());
250 EXPECT_EQ(0, animationNode->currentIteration());
251 EXPECT_EQ(0, animationNode->timeFraction());
252 }
253
254 TEST(AnimationAnimationNodeTest, InfiniteIteration)
255 {
256 Timing timing;
257 timing.iterationDuration = 1;
258 timing.fillMode = Timing::FillModeForwards;
259 timing.iterationCount = std::numeric_limits<double>::infinity();
260 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
261
262 animationNode->updateInheritedTime(-1);
263 EXPECT_TRUE(isNull(animationNode->currentIteration()));
264 EXPECT_TRUE(isNull(animationNode->timeFraction()));
265
266 EXPECT_EQ(std::numeric_limits<double>::infinity(), animationNode->activeDura tionInternal());
267
268 animationNode->updateInheritedTime(0);
269 EXPECT_EQ(0, animationNode->currentIteration());
270 EXPECT_EQ(0, animationNode->timeFraction());
271 }
272
273 TEST(AnimationAnimationNodeTest, Iteration)
274 {
275 Timing timing;
276 timing.iterationCount = 2;
277 timing.iterationDuration = 2;
278 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
279
280 animationNode->updateInheritedTime(0);
281 EXPECT_EQ(0, animationNode->currentIteration());
282 EXPECT_EQ(0, animationNode->timeFraction());
283
284 animationNode->updateInheritedTime(1);
285 EXPECT_EQ(0, animationNode->currentIteration());
286 EXPECT_EQ(0.5, animationNode->timeFraction());
287
288 animationNode->updateInheritedTime(2);
289 EXPECT_EQ(1, animationNode->currentIteration());
290 EXPECT_EQ(0, animationNode->timeFraction());
291
292 animationNode->updateInheritedTime(2);
293 EXPECT_EQ(1, animationNode->currentIteration());
294 EXPECT_EQ(0, animationNode->timeFraction());
295
296 animationNode->updateInheritedTime(5);
297 EXPECT_EQ(1, animationNode->currentIteration());
298 EXPECT_EQ(1, animationNode->timeFraction());
299 }
300
301 TEST(AnimationAnimationNodeTest, IterationStart)
302 {
303 Timing timing;
304 timing.iterationStart = 1.2;
305 timing.iterationCount = 2.2;
306 timing.iterationDuration = 1;
307 timing.fillMode = Timing::FillModeBoth;
308 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
309
310 animationNode->updateInheritedTime(-1);
311 EXPECT_EQ(1, animationNode->currentIteration());
312 EXPECT_NEAR(0.2, animationNode->timeFraction(), 0.000000000000001);
313
314 animationNode->updateInheritedTime(0);
315 EXPECT_EQ(1, animationNode->currentIteration());
316 EXPECT_NEAR(0.2, animationNode->timeFraction(), 0.000000000000001);
317
318 animationNode->updateInheritedTime(10);
319 EXPECT_EQ(3, animationNode->currentIteration());
320 EXPECT_NEAR(0.4, animationNode->timeFraction(), 0.000000000000001);
321 }
322
323 TEST(AnimationAnimationNodeTest, IterationAlternate)
324 {
325 Timing timing;
326 timing.iterationCount = 10;
327 timing.iterationDuration = 1;
328 timing.direction = Timing::PlaybackDirectionAlternate;
329 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
330
331 animationNode->updateInheritedTime(0.75);
332 EXPECT_EQ(0, animationNode->currentIteration());
333 EXPECT_EQ(0.75, animationNode->timeFraction());
334
335 animationNode->updateInheritedTime(1.75);
336 EXPECT_EQ(1, animationNode->currentIteration());
337 EXPECT_EQ(0.25, animationNode->timeFraction());
338
339 animationNode->updateInheritedTime(2.75);
340 EXPECT_EQ(2, animationNode->currentIteration());
341 EXPECT_EQ(0.75, animationNode->timeFraction());
342 }
343
344 TEST(AnimationAnimationNodeTest, IterationAlternateReverse)
345 {
346 Timing timing;
347 timing.iterationCount = 10;
348 timing.iterationDuration = 1;
349 timing.direction = Timing::PlaybackDirectionAlternateReverse;
350 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
351
352 animationNode->updateInheritedTime(0.75);
353 EXPECT_EQ(0, animationNode->currentIteration());
354 EXPECT_EQ(0.25, animationNode->timeFraction());
355
356 animationNode->updateInheritedTime(1.75);
357 EXPECT_EQ(1, animationNode->currentIteration());
358 EXPECT_EQ(0.75, animationNode->timeFraction());
359
360 animationNode->updateInheritedTime(2.75);
361 EXPECT_EQ(2, animationNode->currentIteration());
362 EXPECT_EQ(0.25, animationNode->timeFraction());
363 }
364
365 TEST(AnimationAnimationNodeTest, ZeroDurationSanity)
366 {
367 Timing timing;
368 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
369
370 EXPECT_EQ(0, animationNode->startTime());
371
372 animationNode->updateInheritedTime(0);
373
374 EXPECT_EQ(AnimationNode::PhaseAfter, animationNode->phase());
375 EXPECT_FALSE(animationNode->isInPlay());
376 EXPECT_FALSE(animationNode->isCurrent());
377 EXPECT_TRUE(animationNode->isInEffect());
378 EXPECT_EQ(0, animationNode->currentIteration());
379 EXPECT_EQ(0, animationNode->startTime());
380 EXPECT_EQ(0, animationNode->activeDurationInternal());
381 EXPECT_EQ(1, animationNode->timeFraction());
382
383 animationNode->updateInheritedTime(1);
384
385 EXPECT_EQ(AnimationNode::PhaseAfter, animationNode->phase());
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->startTime());
391 EXPECT_EQ(0, animationNode->activeDurationInternal());
392 EXPECT_EQ(1, animationNode->timeFraction());
393 }
394
395 TEST(AnimationAnimationNodeTest, ZeroDurationFillForwards)
396 {
397 Timing timing;
398 timing.fillMode = Timing::FillModeForwards;
399 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
400
401 animationNode->updateInheritedTime(-1);
402 EXPECT_TRUE(isNull(animationNode->timeFraction()));
403
404 animationNode->updateInheritedTime(0);
405 EXPECT_EQ(1, animationNode->timeFraction());
406
407 animationNode->updateInheritedTime(1);
408 EXPECT_EQ(1, animationNode->timeFraction());
409 }
410
411 TEST(AnimationAnimationNodeTest, ZeroDurationFillBackwards)
412 {
413 Timing timing;
414 timing.fillMode = Timing::FillModeBackwards;
415 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
416
417 animationNode->updateInheritedTime(-1);
418 EXPECT_EQ(0, animationNode->timeFraction());
419
420 animationNode->updateInheritedTime(0);
421 EXPECT_TRUE(isNull(animationNode->timeFraction()));
422
423 animationNode->updateInheritedTime(1);
424 EXPECT_TRUE(isNull(animationNode->timeFraction()));
425 }
426
427 TEST(AnimationAnimationNodeTest, ZeroDurationFillBoth)
428 {
429 Timing timing;
430 timing.fillMode = Timing::FillModeBoth;
431 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
432
433 animationNode->updateInheritedTime(-1);
434 EXPECT_EQ(0, animationNode->timeFraction());
435
436 animationNode->updateInheritedTime(0);
437 EXPECT_EQ(1, animationNode->timeFraction());
438
439 animationNode->updateInheritedTime(1);
440 EXPECT_EQ(1, animationNode->timeFraction());
441 }
442
443 TEST(AnimationAnimationNodeTest, ZeroDurationStartDelay)
444 {
445 Timing timing;
446 timing.fillMode = Timing::FillModeForwards;
447 timing.startDelay = 0.5;
448 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
449
450 animationNode->updateInheritedTime(0);
451 EXPECT_TRUE(isNull(animationNode->timeFraction()));
452
453 animationNode->updateInheritedTime(0.5);
454 EXPECT_EQ(1, animationNode->timeFraction());
455
456 animationNode->updateInheritedTime(1.5);
457 EXPECT_EQ(1, animationNode->timeFraction());
458 }
459
460 TEST(AnimationAnimationNodeTest, ZeroDurationIterationStartAndCount)
461 {
462 Timing timing;
463 timing.iterationStart = 0.1;
464 timing.iterationCount = 0.2;
465 timing.fillMode = Timing::FillModeBoth;
466 timing.startDelay = 0.3;
467 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
468
469 animationNode->updateInheritedTime(0);
470 EXPECT_EQ(0.1, animationNode->timeFraction());
471
472 animationNode->updateInheritedTime(0.3);
473 EXPECT_DOUBLE_EQ(0.3, animationNode->timeFraction());
474
475 animationNode->updateInheritedTime(1);
476 EXPECT_DOUBLE_EQ(0.3, animationNode->timeFraction());
477 }
478
479 // FIXME: Needs specification work.
480 TEST(AnimationAnimationNodeTest, ZeroDurationInfiniteIteration)
481 {
482 Timing timing;
483 timing.fillMode = Timing::FillModeForwards;
484 timing.iterationCount = std::numeric_limits<double>::infinity();
485 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
486
487 animationNode->updateInheritedTime(-1);
488 EXPECT_EQ(0, animationNode->activeDurationInternal());
489 EXPECT_TRUE(isNull(animationNode->currentIteration()));
490 EXPECT_TRUE(isNull(animationNode->timeFraction()));
491
492 animationNode->updateInheritedTime(0);
493 EXPECT_EQ(0, animationNode->activeDurationInternal());
494 EXPECT_EQ(std::numeric_limits<double>::infinity(), animationNode->currentIte ration());
495 EXPECT_EQ(1, animationNode->timeFraction());
496 }
497
498 TEST(AnimationAnimationNodeTest, ZeroDurationIteration)
499 {
500 Timing timing;
501 timing.fillMode = Timing::FillModeForwards;
502 timing.iterationCount = 2;
503 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
504
505 animationNode->updateInheritedTime(-1);
506 EXPECT_TRUE(isNull(animationNode->currentIteration()));
507 EXPECT_TRUE(isNull(animationNode->timeFraction()));
508
509 animationNode->updateInheritedTime(0);
510 EXPECT_EQ(1, animationNode->currentIteration());
511 EXPECT_EQ(1, animationNode->timeFraction());
512
513 animationNode->updateInheritedTime(1);
514 EXPECT_EQ(1, animationNode->currentIteration());
515 EXPECT_EQ(1, animationNode->timeFraction());
516 }
517
518 TEST(AnimationAnimationNodeTest, ZeroDurationIterationStart)
519 {
520 Timing timing;
521 timing.iterationStart = 1.2;
522 timing.iterationCount = 2.2;
523 timing.fillMode = Timing::FillModeBoth;
524 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
525
526 animationNode->updateInheritedTime(-1);
527 EXPECT_EQ(1, animationNode->currentIteration());
528 EXPECT_NEAR(0.2, animationNode->timeFraction(), 0.000000000000001);
529
530 animationNode->updateInheritedTime(0);
531 EXPECT_EQ(3, animationNode->currentIteration());
532 EXPECT_NEAR(0.4, animationNode->timeFraction(), 0.000000000000001);
533
534 animationNode->updateInheritedTime(10);
535 EXPECT_EQ(3, animationNode->currentIteration());
536 EXPECT_NEAR(0.4, animationNode->timeFraction(), 0.000000000000001);
537 }
538
539 TEST(AnimationAnimationNodeTest, ZeroDurationIterationAlternate)
540 {
541 Timing timing;
542 timing.fillMode = Timing::FillModeForwards;
543 timing.iterationCount = 2;
544 timing.direction = Timing::PlaybackDirectionAlternate;
545 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
546
547 animationNode->updateInheritedTime(-1);
548 EXPECT_TRUE(isNull(animationNode->currentIteration()));
549 EXPECT_TRUE(isNull(animationNode->timeFraction()));
550
551 animationNode->updateInheritedTime(0);
552 EXPECT_EQ(1, animationNode->currentIteration());
553 EXPECT_EQ(0, animationNode->timeFraction());
554
555 animationNode->updateInheritedTime(1);
556 EXPECT_EQ(1, animationNode->currentIteration());
557 EXPECT_EQ(0, animationNode->timeFraction());
558 }
559
560 TEST(AnimationAnimationNodeTest, ZeroDurationIterationAlternateReverse)
561 {
562 Timing timing;
563 timing.fillMode = Timing::FillModeForwards;
564 timing.iterationCount = 2;
565 timing.direction = Timing::PlaybackDirectionAlternateReverse;
566 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
567
568 animationNode->updateInheritedTime(-1);
569 EXPECT_TRUE(isNull(animationNode->currentIteration()));
570 EXPECT_TRUE(isNull(animationNode->timeFraction()));
571
572 animationNode->updateInheritedTime(0);
573 EXPECT_EQ(1, animationNode->currentIteration());
574 EXPECT_EQ(1, animationNode->timeFraction());
575
576 animationNode->updateInheritedTime(1);
577 EXPECT_EQ(1, animationNode->currentIteration());
578 EXPECT_EQ(1, animationNode->timeFraction());
579 }
580
581 TEST(AnimationAnimationNodeTest, InfiniteDurationSanity)
582 {
583 Timing timing;
584 timing.iterationDuration = std::numeric_limits<double>::infinity();
585 timing.iterationCount = 1;
586 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
587
588 EXPECT_EQ(0, animationNode->startTime());
589
590 animationNode->updateInheritedTime(0);
591
592 EXPECT_EQ(std::numeric_limits<double>::infinity(), animationNode->activeDura tionInternal());
593 EXPECT_EQ(AnimationNode::PhaseActive, animationNode->phase());
594 EXPECT_TRUE(animationNode->isInPlay());
595 EXPECT_TRUE(animationNode->isCurrent());
596 EXPECT_TRUE(animationNode->isInEffect());
597 EXPECT_EQ(0, animationNode->currentIteration());
598 EXPECT_EQ(0, animationNode->timeFraction());
599
600 animationNode->updateInheritedTime(1);
601
602 EXPECT_EQ(std::numeric_limits<double>::infinity(), animationNode->activeDura tionInternal());
603 EXPECT_EQ(AnimationNode::PhaseActive, animationNode->phase());
604 EXPECT_TRUE(animationNode->isInPlay());
605 EXPECT_TRUE(animationNode->isCurrent());
606 EXPECT_TRUE(animationNode->isInEffect());
607 EXPECT_EQ(0, animationNode->currentIteration());
608 EXPECT_EQ(0, animationNode->timeFraction());
609 }
610
611 // FIXME: Needs specification work.
612 TEST(AnimationAnimationNodeTest, InfiniteDurationZeroIterations)
613 {
614 Timing timing;
615 timing.iterationDuration = std::numeric_limits<double>::infinity();
616 timing.iterationCount = 0;
617 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
618
619 EXPECT_EQ(0, animationNode->startTime());
620
621 animationNode->updateInheritedTime(0);
622
623 EXPECT_EQ(0, animationNode->activeDurationInternal());
624 EXPECT_EQ(AnimationNode::PhaseAfter, animationNode->phase());
625 EXPECT_FALSE(animationNode->isInPlay());
626 EXPECT_FALSE(animationNode->isCurrent());
627 EXPECT_TRUE(animationNode->isInEffect());
628 EXPECT_EQ(0, animationNode->currentIteration());
629 EXPECT_EQ(0, animationNode->timeFraction());
630
631 animationNode->updateInheritedTime(1);
632
633 EXPECT_EQ(AnimationNode::PhaseAfter, animationNode->phase());
634 EXPECT_EQ(AnimationNode::PhaseAfter, animationNode->phase());
635 EXPECT_FALSE(animationNode->isInPlay());
636 EXPECT_FALSE(animationNode->isCurrent());
637 EXPECT_TRUE(animationNode->isInEffect());
638 EXPECT_EQ(0, animationNode->currentIteration());
639 EXPECT_EQ(0, animationNode->timeFraction());
640 }
641
642 TEST(AnimationAnimationNodeTest, InfiniteDurationInfiniteIterations)
643 {
644 Timing timing;
645 timing.iterationDuration = std::numeric_limits<double>::infinity();
646 timing.iterationCount = std::numeric_limits<double>::infinity();
647 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
648
649 EXPECT_EQ(0, animationNode->startTime());
650
651 animationNode->updateInheritedTime(0);
652
653 EXPECT_EQ(std::numeric_limits<double>::infinity(), animationNode->activeDura tionInternal());
654 EXPECT_EQ(AnimationNode::PhaseActive, animationNode->phase());
655 EXPECT_TRUE(animationNode->isInPlay());
656 EXPECT_TRUE(animationNode->isCurrent());
657 EXPECT_TRUE(animationNode->isInEffect());
658 EXPECT_EQ(0, animationNode->currentIteration());
659 EXPECT_EQ(0, animationNode->timeFraction());
660
661 animationNode->updateInheritedTime(1);
662
663 EXPECT_EQ(std::numeric_limits<double>::infinity(), animationNode->activeDura tionInternal());
664 EXPECT_EQ(AnimationNode::PhaseActive, animationNode->phase());
665 EXPECT_TRUE(animationNode->isInPlay());
666 EXPECT_TRUE(animationNode->isCurrent());
667 EXPECT_TRUE(animationNode->isInEffect());
668 EXPECT_EQ(0, animationNode->currentIteration());
669 EXPECT_EQ(0, animationNode->timeFraction());
670 }
671
672 TEST(AnimationAnimationNodeTest, InfiniteDurationZeroPlaybackRate)
673 {
674 Timing timing;
675 timing.iterationDuration = std::numeric_limits<double>::infinity();
676 timing.playbackRate = 0;
677 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
678
679 EXPECT_EQ(0, animationNode->startTime());
680
681 animationNode->updateInheritedTime(0);
682
683 EXPECT_EQ(std::numeric_limits<double>::infinity(), animationNode->activeDura tionInternal());
684 EXPECT_EQ(AnimationNode::PhaseActive, animationNode->phase());
685 EXPECT_TRUE(animationNode->isInPlay());
686 EXPECT_TRUE(animationNode->isCurrent());
687 EXPECT_TRUE(animationNode->isInEffect());
688 EXPECT_EQ(0, animationNode->currentIteration());
689 EXPECT_EQ(0, animationNode->timeFraction());
690
691 animationNode->updateInheritedTime(std::numeric_limits<double>::infinity());
692
693 EXPECT_EQ(std::numeric_limits<double>::infinity(), animationNode->activeDura tionInternal());
694 EXPECT_EQ(AnimationNode::PhaseAfter, animationNode->phase());
695 EXPECT_FALSE(animationNode->isInPlay());
696 EXPECT_FALSE(animationNode->isCurrent());
697 EXPECT_TRUE(animationNode->isInEffect());
698 EXPECT_EQ(0, animationNode->currentIteration());
699 EXPECT_EQ(0, animationNode->timeFraction());
700 }
701
702 TEST(AnimationAnimationNodeTest, EndTime)
703 {
704 Timing timing;
705 timing.startDelay = 1;
706 timing.endDelay = 2;
707 timing.iterationDuration = 4;
708 timing.iterationCount = 2;
709 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
710 EXPECT_EQ(11, animationNode->endTimeInternal());
711 }
712
713 TEST(AnimationAnimationNodeTest, Events)
714 {
715 Timing timing;
716 timing.iterationDuration = 1;
717 timing.fillMode = Timing::FillModeForwards;
718 timing.iterationCount = 2;
719 timing.startDelay = 1;
720 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
721
722 animationNode->updateInheritedTime(0.0, TimingUpdateOnDemand);
723 EXPECT_FALSE(animationNode->eventDelegate()->eventTriggered());
724
725 animationNode->updateInheritedTime(0.0, TimingUpdateForAnimationFrame);
726 EXPECT_TRUE(animationNode->eventDelegate()->eventTriggered());
727
728 animationNode->updateInheritedTime(1.5, TimingUpdateOnDemand);
729 EXPECT_FALSE(animationNode->eventDelegate()->eventTriggered());
730
731 animationNode->updateInheritedTime(1.5, TimingUpdateForAnimationFrame);
732 EXPECT_TRUE(animationNode->eventDelegate()->eventTriggered());
733
734 }
735
736 TEST(AnimationAnimationNodeTest, TimeToEffectChange)
737 {
738 Timing timing;
739 timing.iterationDuration = 1;
740 timing.fillMode = Timing::FillModeForwards;
741 timing.iterationStart = 0.2;
742 timing.iterationCount = 2.5;
743 timing.startDelay = 1;
744 timing.direction = Timing::PlaybackDirectionAlternate;
745 RefPtr<TestAnimationNode> animationNode = TestAnimationNode::create(timing);
746
747 animationNode->updateInheritedTime(0);
748 EXPECT_EQ(0, animationNode->takeLocalTime());
749 EXPECT_TRUE(std::isinf(animationNode->takeTimeToNextIteration()));
750
751 // Normal iteration.
752 animationNode->updateInheritedTime(1.75);
753 EXPECT_EQ(1.75, animationNode->takeLocalTime());
754 EXPECT_NEAR(0.05, animationNode->takeTimeToNextIteration(), 0.00000000000000 1);
755
756 // Reverse iteration.
757 animationNode->updateInheritedTime(2.75);
758 EXPECT_EQ(2.75, animationNode->takeLocalTime());
759 EXPECT_NEAR(0.05, animationNode->takeTimeToNextIteration(), 0.00000000000000 1);
760
761 // Item ends before iteration finishes.
762 animationNode->updateInheritedTime(3.4);
763 EXPECT_EQ(AnimationNode::PhaseActive, animationNode->phase());
764 EXPECT_EQ(3.4, animationNode->takeLocalTime());
765 EXPECT_TRUE(std::isinf(animationNode->takeTimeToNextIteration()));
766
767 // Item has finished.
768 animationNode->updateInheritedTime(3.5);
769 EXPECT_EQ(AnimationNode::PhaseAfter, animationNode->phase());
770 EXPECT_EQ(3.5, animationNode->takeLocalTime());
771 EXPECT_TRUE(std::isinf(animationNode->takeTimeToNextIteration()));
772 }
773
774 }
OLDNEW
« no previous file with comments | « sky/engine/core/animation/AnimationNode.idl ('k') | sky/engine/core/animation/AnimationNodeTiming.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698