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

Unified Diff: cc/CCLayerAnimationControllerTest.cpp

Issue 11108020: [cc] Change cc_tests.gyp filenames to Chromium style (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/CCKeyframedAnimationCurveTest.cpp ('k') | cc/CCLayerImplTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/CCLayerAnimationControllerTest.cpp
diff --git a/cc/CCLayerAnimationControllerTest.cpp b/cc/CCLayerAnimationControllerTest.cpp
deleted file mode 100644
index 4d9e57546ab3634741092da6dfd130e4f01633db..0000000000000000000000000000000000000000
--- a/cc/CCLayerAnimationControllerTest.cpp
+++ /dev/null
@@ -1,561 +0,0 @@
-// Copyright 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "config.h"
-
-#include "CCLayerAnimationController.h"
-
-#include "CCActiveAnimation.h"
-#include "CCAnimationCurve.h"
-#include "CCAnimationTestCommon.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include <public/WebTransformationMatrix.h>
-
-using namespace cc;
-using namespace WebKitTests;
-using WebKit::WebTransformationMatrix;
-
-namespace {
-
-void expectTranslateX(double translateX, const WebTransformationMatrix& matrix)
-{
- EXPECT_FLOAT_EQ(translateX, matrix.m41());
-}
-
-scoped_ptr<CCActiveAnimation> createActiveAnimation(scoped_ptr<CCAnimationCurve> curve, int id, CCActiveAnimation::TargetProperty property)
-{
- return CCActiveAnimation::create(curve.Pass(), 0, id, property);
-}
-
-TEST(CCLayerAnimationControllerTest, syncNewAnimation)
-{
- FakeLayerAnimationControllerClient dummyImpl;
- scoped_ptr<CCLayerAnimationController> controllerImpl(CCLayerAnimationController::create(&dummyImpl));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(CCLayerAnimationController::create(&dummy));
-
- EXPECT_FALSE(controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity));
-
- addOpacityTransitionToController(*controller, 1, 0, 1, false);
-
- controller->pushAnimationUpdatesTo(controllerImpl.get());
-
- EXPECT_TRUE(controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity));
- EXPECT_EQ(CCActiveAnimation::WaitingForTargetAvailability, controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity)->runState());
-}
-
-// If an animation is started on the impl thread before it is ticked on the main
-// thread, we must be sure to respect the synchronized start time.
-TEST(CCLayerAnimationControllerTest, doNotClobberStartTimes)
-{
- FakeLayerAnimationControllerClient dummyImpl;
- scoped_ptr<CCLayerAnimationController> controllerImpl(CCLayerAnimationController::create(&dummyImpl));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(CCLayerAnimationController::create(&dummy));
-
- EXPECT_FALSE(controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity));
-
- addOpacityTransitionToController(*controller, 1, 0, 1, false);
-
- controller->pushAnimationUpdatesTo(controllerImpl.get());
-
- EXPECT_TRUE(controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity));
- EXPECT_EQ(CCActiveAnimation::WaitingForTargetAvailability, controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity)->runState());
-
- CCAnimationEventsVector events;
- controllerImpl->animate(1, &events);
-
- // Synchronize the start times.
- EXPECT_EQ(1u, events.size());
- controller->notifyAnimationStarted(events[0]);
- EXPECT_EQ(controller->getActiveAnimation(0, CCActiveAnimation::Opacity)->startTime(), controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity)->startTime());
-
- // Start the animation on the main thread. Should not affect the start time.
- controller->animate(1.5, 0);
- EXPECT_EQ(controller->getActiveAnimation(0, CCActiveAnimation::Opacity)->startTime(), controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity)->startTime());
-}
-
-TEST(CCLayerAnimationControllerTest, syncPauseAndResume)
-{
- FakeLayerAnimationControllerClient dummyImpl;
- scoped_ptr<CCLayerAnimationController> controllerImpl(CCLayerAnimationController::create(&dummyImpl));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(CCLayerAnimationController::create(&dummy));
-
- EXPECT_FALSE(controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity));
-
- addOpacityTransitionToController(*controller, 1, 0, 1, false);
-
- controller->pushAnimationUpdatesTo(controllerImpl.get());
-
- EXPECT_TRUE(controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity));
- EXPECT_EQ(CCActiveAnimation::WaitingForTargetAvailability, controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity)->runState());
-
- // Start the animations on each controller.
- CCAnimationEventsVector events;
- controllerImpl->animate(0, &events);
- controller->animate(0, 0);
- EXPECT_EQ(CCActiveAnimation::Running, controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity)->runState());
- EXPECT_EQ(CCActiveAnimation::Running, controller->getActiveAnimation(0, CCActiveAnimation::Opacity)->runState());
-
- // Pause the main-thread animation.
- controller->suspendAnimations(1);
- EXPECT_EQ(CCActiveAnimation::Paused, controller->getActiveAnimation(0, CCActiveAnimation::Opacity)->runState());
-
- // The pause run state change should make it to the impl thread controller.
- controller->pushAnimationUpdatesTo(controllerImpl.get());
- EXPECT_EQ(CCActiveAnimation::Paused, controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity)->runState());
-
- // Resume the main-thread animation.
- controller->resumeAnimations(2);
- EXPECT_EQ(CCActiveAnimation::Running, controller->getActiveAnimation(0, CCActiveAnimation::Opacity)->runState());
-
- // The pause run state change should make it to the impl thread controller.
- controller->pushAnimationUpdatesTo(controllerImpl.get());
- EXPECT_EQ(CCActiveAnimation::Running, controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity)->runState());
-}
-
-TEST(CCLayerAnimationControllerTest, doNotSyncFinishedAnimation)
-{
- FakeLayerAnimationControllerClient dummyImpl;
- scoped_ptr<CCLayerAnimationController> controllerImpl(CCLayerAnimationController::create(&dummyImpl));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(CCLayerAnimationController::create(&dummy));
-
- EXPECT_FALSE(controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity));
-
- addOpacityTransitionToController(*controller, 1, 0, 1, false);
-
- controller->pushAnimationUpdatesTo(controllerImpl.get());
-
- EXPECT_TRUE(controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity));
- EXPECT_EQ(CCActiveAnimation::WaitingForTargetAvailability, controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity)->runState());
-
- // Notify main thread controller that the animation has started.
- CCAnimationEvent animationStartedEvent(CCAnimationEvent::Started, 0, 0, CCActiveAnimation::Opacity, 0);
- controller->notifyAnimationStarted(animationStartedEvent);
-
- // Force animation to complete on impl thread.
- controllerImpl->removeAnimation(0);
-
- EXPECT_FALSE(controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity));
-
- controller->pushAnimationUpdatesTo(controllerImpl.get());
-
- // Even though the main thread has a 'new' animation, it should not be pushed because the animation has already completed on the impl thread.
- EXPECT_FALSE(controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity));
-}
-
-// Tests that transitioning opacity from 0 to 1 works as expected.
-TEST(CCLayerAnimationControllerTest, TrivialTransition)
-{
- scoped_ptr<CCAnimationEventsVector> events(make_scoped_ptr(new CCAnimationEventsVector));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(
- CCLayerAnimationController::create(&dummy));
-
- scoped_ptr<CCActiveAnimation> toAdd(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<CCAnimationCurve>(), 1, CCActiveAnimation::Opacity));
-
- controller->addAnimation(toAdd.Pass());
- controller->animate(0, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(1, events.get());
- EXPECT_EQ(1, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
-}
-
-// Tests animations that are waiting for a synchronized start time do not finish.
-TEST(CCLayerAnimationControllerTest, AnimationsWaitingForStartTimeDoNotFinishIfTheyWaitLongerToStartThanTheirDuration)
-{
- scoped_ptr<CCAnimationEventsVector> events(make_scoped_ptr(new CCAnimationEventsVector));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(
- CCLayerAnimationController::create(&dummy));
-
- scoped_ptr<CCActiveAnimation> toAdd(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<CCAnimationCurve>(), 1, CCActiveAnimation::Opacity));
- toAdd->setNeedsSynchronizedStartTime(true);
-
- // We should pause at the first keyframe indefinitely waiting for that animation to start.
- controller->addAnimation(toAdd.Pass());
- controller->animate(0, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(1, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(2, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
-
- // Send the synchronized start time.
- controller->notifyAnimationStarted(CCAnimationEvent(CCAnimationEvent::Started, 0, 1, CCActiveAnimation::Opacity, 2));
- controller->animate(5, events.get());
- EXPECT_EQ(1, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
-}
-
-// Tests that two queued animations affecting the same property run in sequence.
-TEST(CCLayerAnimationControllerTest, TrivialQueuing)
-{
- scoped_ptr<CCAnimationEventsVector> events(make_scoped_ptr(new CCAnimationEventsVector));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(
- CCLayerAnimationController::create(&dummy));
-
- controller->addAnimation(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<CCAnimationCurve>(), 1, CCActiveAnimation::Opacity));
- controller->addAnimation(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(1, 1, 0.5)).PassAs<CCAnimationCurve>(), 2, CCActiveAnimation::Opacity));
-
- controller->animate(0, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(1, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(1, dummy.opacity());
- controller->animate(2, events.get());
- EXPECT_EQ(0.5, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
-}
-
-// Tests interrupting a transition with another transition.
-TEST(CCLayerAnimationControllerTest, Interrupt)
-{
- scoped_ptr<CCAnimationEventsVector> events(make_scoped_ptr(new CCAnimationEventsVector));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(
- CCLayerAnimationController::create(&dummy));
- controller->addAnimation(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<CCAnimationCurve>(), 1, CCActiveAnimation::Opacity));
- controller->animate(0, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
-
- scoped_ptr<CCActiveAnimation> toAdd(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(1, 1, 0.5)).PassAs<CCAnimationCurve>(), 2, CCActiveAnimation::Opacity));
- toAdd->setRunState(CCActiveAnimation::WaitingForNextTick, 0);
- controller->addAnimation(toAdd.Pass());
-
- // Since the animation was in the WaitingForNextTick state, it should start right in
- // this call to animate.
- controller->animate(0.5, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(1, dummy.opacity());
- controller->animate(1.5, events.get());
- EXPECT_EQ(0.5, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
-}
-
-// Tests scheduling two animations to run together when only one property is free.
-TEST(CCLayerAnimationControllerTest, ScheduleTogetherWhenAPropertyIsBlocked)
-{
- scoped_ptr<CCAnimationEventsVector> events(make_scoped_ptr(new CCAnimationEventsVector));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(
- CCLayerAnimationController::create(&dummy));
-
- controller->addAnimation(createActiveAnimation(make_scoped_ptr(new FakeTransformTransition(1)).PassAs<CCAnimationCurve>(), 1, CCActiveAnimation::Transform));
- controller->addAnimation(createActiveAnimation(make_scoped_ptr(new FakeTransformTransition(1)).PassAs<CCAnimationCurve>(), 2, CCActiveAnimation::Transform));
- controller->addAnimation(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<CCAnimationCurve>(), 2, CCActiveAnimation::Opacity));
-
- controller->animate(0, events.get());
- EXPECT_EQ(0, dummy.opacity());
- EXPECT_TRUE(controller->hasActiveAnimation());
- controller->animate(1, events.get());
- // Should not have started the float transition yet.
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- // The float animation should have started at time 1 and should be done.
- controller->animate(2, events.get());
- EXPECT_EQ(1, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
-}
-
-// Tests scheduling two animations to run together with different lengths and another
-// animation queued to start when the shorter animation finishes (should wait
-// for both to finish).
-TEST(CCLayerAnimationControllerTest, ScheduleTogetherWithAnAnimWaiting)
-{
- scoped_ptr<CCAnimationEventsVector> events(make_scoped_ptr(new CCAnimationEventsVector));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(
- CCLayerAnimationController::create(&dummy));
-
- controller->addAnimation(createActiveAnimation(make_scoped_ptr(new FakeTransformTransition(2)).PassAs<CCAnimationCurve>(), 1, CCActiveAnimation::Transform));
- controller->addAnimation(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<CCAnimationCurve>(), 1, CCActiveAnimation::Opacity));
- controller->addAnimation(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(1, 1, 0.5)).PassAs<CCAnimationCurve>(), 2, CCActiveAnimation::Opacity));
-
- // Animations with id 1 should both start now.
- controller->animate(0, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- // The opacity animation should have finished at time 1, but the group
- // of animations with id 1 don't finish until time 2 because of the length
- // of the transform animation.
- controller->animate(2, events.get());
- // Should not have started the float transition yet.
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(1, dummy.opacity());
-
- // The second opacity animation should start at time 2 and should be done by time 3
- controller->animate(3, events.get());
- EXPECT_EQ(0.5, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
-}
-
-// Tests scheduling an animation to start in the future.
-TEST(CCLayerAnimationControllerTest, ScheduleAnimation)
-{
- scoped_ptr<CCAnimationEventsVector> events(make_scoped_ptr(new CCAnimationEventsVector));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(
- CCLayerAnimationController::create(&dummy));
-
- scoped_ptr<CCActiveAnimation> toAdd(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<CCAnimationCurve>(), 1, CCActiveAnimation::Opacity));
- toAdd->setRunState(CCActiveAnimation::WaitingForStartTime, 0);
- toAdd->setStartTime(1);
- controller->addAnimation(toAdd.Pass());
-
- controller->animate(0, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(1, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(2, events.get());
- EXPECT_EQ(1, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
-}
-
-// Tests scheduling an animation to start in the future that's interrupting a running animation.
-TEST(CCLayerAnimationControllerTest, ScheduledAnimationInterruptsRunningAnimation)
-{
- scoped_ptr<CCAnimationEventsVector> events(make_scoped_ptr(new CCAnimationEventsVector));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(
- CCLayerAnimationController::create(&dummy));
-
- controller->addAnimation(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(2, 0, 1)).PassAs<CCAnimationCurve>(), 1, CCActiveAnimation::Opacity));
-
- scoped_ptr<CCActiveAnimation> toAdd(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0.5, 0)).PassAs<CCAnimationCurve>(), 2, CCActiveAnimation::Opacity));
- toAdd->setRunState(CCActiveAnimation::WaitingForStartTime, 0);
- toAdd->setStartTime(1);
- controller->addAnimation(toAdd.Pass());
-
- // First 2s opacity transition should start immediately.
- controller->animate(0, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(0.5, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.25, dummy.opacity());
- controller->animate(1, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.5, dummy.opacity());
- controller->animate(2, events.get());
- EXPECT_EQ(0, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
-}
-
-// Tests scheduling an animation to start in the future that interrupts a running animation
-// and there is yet another animation queued to start later.
-TEST(CCLayerAnimationControllerTest, ScheduledAnimationInterruptsRunningAnimationWithAnimInQueue)
-{
- scoped_ptr<CCAnimationEventsVector> events(make_scoped_ptr(new CCAnimationEventsVector));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(
- CCLayerAnimationController::create(&dummy));
-
- controller->addAnimation(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(2, 0, 1)).PassAs<CCAnimationCurve>(), 1, CCActiveAnimation::Opacity));
-
- scoped_ptr<CCActiveAnimation> toAdd(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(2, 0.5, 0)).PassAs<CCAnimationCurve>(), 2, CCActiveAnimation::Opacity));
- toAdd->setRunState(CCActiveAnimation::WaitingForStartTime, 0);
- toAdd->setStartTime(1);
- controller->addAnimation(toAdd.Pass());
-
- controller->addAnimation(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 0.75)).PassAs<CCAnimationCurve>(), 3, CCActiveAnimation::Opacity));
-
- // First 2s opacity transition should start immediately.
- controller->animate(0, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(0.5, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.25, dummy.opacity());
- EXPECT_TRUE(controller->hasActiveAnimation());
- controller->animate(1, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.5, dummy.opacity());
- controller->animate(3, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(4, events.get());
- EXPECT_EQ(0.75, dummy.opacity());
- EXPECT_FALSE(controller->hasActiveAnimation());
-}
-
-// Test that a looping animation loops and for the correct number of iterations.
-TEST(CCLayerAnimationControllerTest, TrivialLooping)
-{
- scoped_ptr<CCAnimationEventsVector> events(make_scoped_ptr(new CCAnimationEventsVector));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(
- CCLayerAnimationController::create(&dummy));
-
- scoped_ptr<CCActiveAnimation> toAdd(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<CCAnimationCurve>(), 1, CCActiveAnimation::Opacity));
- toAdd->setIterations(3);
- controller->addAnimation(toAdd.Pass());
-
- controller->animate(0, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(1.25, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.25, dummy.opacity());
- controller->animate(1.75, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.75, dummy.opacity());
- controller->animate(2.25, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.25, dummy.opacity());
- controller->animate(2.75, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.75, dummy.opacity());
- controller->animate(3, events.get());
- EXPECT_FALSE(controller->hasActiveAnimation());
- EXPECT_EQ(1, dummy.opacity());
-
- // Just be extra sure.
- controller->animate(4, events.get());
- EXPECT_EQ(1, dummy.opacity());
-}
-
-// Test that an infinitely looping animation does indeed go until aborted.
-TEST(CCLayerAnimationControllerTest, InfiniteLooping)
-{
- scoped_ptr<CCAnimationEventsVector> events(make_scoped_ptr(new CCAnimationEventsVector));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(
- CCLayerAnimationController::create(&dummy));
-
- const int id = 1;
- scoped_ptr<CCActiveAnimation> toAdd(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<CCAnimationCurve>(), id, CCActiveAnimation::Opacity));
- toAdd->setIterations(-1);
- controller->addAnimation(toAdd.Pass());
-
- controller->animate(0, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(1.25, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.25, dummy.opacity());
- controller->animate(1.75, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.75, dummy.opacity());
-
- controller->animate(1073741824.25, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.25, dummy.opacity());
- controller->animate(1073741824.75, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.75, dummy.opacity());
-
- EXPECT_TRUE(controller->getActiveAnimation(id, CCActiveAnimation::Opacity));
- controller->getActiveAnimation(id, CCActiveAnimation::Opacity)->setRunState(CCActiveAnimation::Aborted, 0.75);
- EXPECT_FALSE(controller->hasActiveAnimation());
- EXPECT_EQ(0.75, dummy.opacity());
-}
-
-// Test that pausing and resuming work as expected.
-TEST(CCLayerAnimationControllerTest, PauseResume)
-{
- scoped_ptr<CCAnimationEventsVector> events(make_scoped_ptr(new CCAnimationEventsVector));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(
- CCLayerAnimationController::create(&dummy));
-
- const int id = 1;
- controller->addAnimation(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(1, 0, 1)).PassAs<CCAnimationCurve>(), id, CCActiveAnimation::Opacity));
-
- controller->animate(0, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(0.5, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.5, dummy.opacity());
-
- EXPECT_TRUE(controller->getActiveAnimation(id, CCActiveAnimation::Opacity));
- controller->getActiveAnimation(id, CCActiveAnimation::Opacity)->setRunState(CCActiveAnimation::Paused, 0.5);
-
- controller->animate(1024, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.5, dummy.opacity());
-
- EXPECT_TRUE(controller->getActiveAnimation(id, CCActiveAnimation::Opacity));
- controller->getActiveAnimation(id, CCActiveAnimation::Opacity)->setRunState(CCActiveAnimation::Running, 1024);
-
- controller->animate(1024.25, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.75, dummy.opacity());
- controller->animate(1024.5, events.get());
- EXPECT_FALSE(controller->hasActiveAnimation());
- EXPECT_EQ(1, dummy.opacity());
-}
-
-TEST(CCLayerAnimationControllerTest, AbortAGroupedAnimation)
-{
- scoped_ptr<CCAnimationEventsVector> events(make_scoped_ptr(new CCAnimationEventsVector));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(
- CCLayerAnimationController::create(&dummy));
-
- const int id = 1;
- controller->addAnimation(createActiveAnimation(make_scoped_ptr(new FakeTransformTransition(1)).PassAs<CCAnimationCurve>(), id, CCActiveAnimation::Transform));
- controller->addAnimation(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(2, 0, 1)).PassAs<CCAnimationCurve>(), id, CCActiveAnimation::Opacity));
- controller->addAnimation(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(1, 1, 0.75)).PassAs<CCAnimationCurve>(), 2, CCActiveAnimation::Opacity));
-
- controller->animate(0, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0, dummy.opacity());
- controller->animate(1, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(0.5, dummy.opacity());
-
- EXPECT_TRUE(controller->getActiveAnimation(id, CCActiveAnimation::Opacity));
- controller->getActiveAnimation(id, CCActiveAnimation::Opacity)->setRunState(CCActiveAnimation::Aborted, 1);
- controller->animate(1, events.get());
- EXPECT_TRUE(controller->hasActiveAnimation());
- EXPECT_EQ(1, dummy.opacity());
- controller->animate(2, events.get());
- EXPECT_TRUE(!controller->hasActiveAnimation());
- EXPECT_EQ(0.75, dummy.opacity());
-}
-
-TEST(CCLayerAnimationControllerTest, ForceSyncWhenSynchronizedStartTimeNeeded)
-{
- FakeLayerAnimationControllerClient dummyImpl;
- scoped_ptr<CCLayerAnimationController> controllerImpl(CCLayerAnimationController::create(&dummyImpl));
- scoped_ptr<CCAnimationEventsVector> events(make_scoped_ptr(new CCAnimationEventsVector));
- FakeLayerAnimationControllerClient dummy;
- scoped_ptr<CCLayerAnimationController> controller(
- CCLayerAnimationController::create(&dummy));
-
- scoped_ptr<CCActiveAnimation> toAdd(createActiveAnimation(make_scoped_ptr(new FakeFloatTransition(2, 0, 1)).PassAs<CCAnimationCurve>(), 0, CCActiveAnimation::Opacity));
- toAdd->setNeedsSynchronizedStartTime(true);
- controller->addAnimation(toAdd.Pass());
-
- controller->animate(0, 0);
- EXPECT_TRUE(controller->hasActiveAnimation());
- CCActiveAnimation* activeAnimation = controller->getActiveAnimation(0, CCActiveAnimation::Opacity);
- EXPECT_TRUE(activeAnimation);
- EXPECT_TRUE(activeAnimation->needsSynchronizedStartTime());
-
- controller->setForceSync();
-
- controller->pushAnimationUpdatesTo(controllerImpl.get());
-
- activeAnimation = controllerImpl->getActiveAnimation(0, CCActiveAnimation::Opacity);
- EXPECT_TRUE(activeAnimation);
- EXPECT_EQ(CCActiveAnimation::WaitingForTargetAvailability, activeAnimation->runState());
-}
-
-} // namespace
« no previous file with comments | « cc/CCKeyframedAnimationCurveTest.cpp ('k') | cc/CCLayerImplTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698