1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "cc/animation/animation.h"
7 #include "cc/test/animation_test_common.h"
8 #include "testing/gmock/include/gmock/gmock.h"
9 #include "testing/gtest/include/gtest/gtest.h"
14 scoped_ptr<Animation> CreateAnimation(int iterations, double duration) {
15 scoped_ptr<Animation> to_return(Animation::Create(
17 new FakeFloatAnimationCurve(duration)).PassAs<AnimationCurve>(),
21 to_return->set_iterations(iterations);
22 return to_return.Pass();
25 scoped_ptr<Animation> CreateAnimation(int iterations) {
26 return CreateAnimation(iterations, 1);
29 TEST(AnimationTest, TrimTimeZeroIterations) {
30 scoped_ptr<Animation> anim(CreateAnimation(0));
31 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(-1.0));
32 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(0.0));
33 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(1.0));
36 TEST(AnimationTest, TrimTimeOneIteration) {
37 scoped_ptr<Animation> anim(CreateAnimation(1));
38 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(-1.0));
39 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(0.0));
40 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(1.0));
41 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(2.0));
44 TEST(AnimationTest, TrimTimeInfiniteIterations) {
45 scoped_ptr<Animation> anim(CreateAnimation(-1));
46 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(0.0));
47 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(0.5));
48 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(1.0));
49 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(1.5));
52 TEST(AnimationTest, TrimTimeAlternating) {
53 scoped_ptr<Animation> anim(CreateAnimation(-1));
54 anim->set_alternates_direction(true);
55 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(0.0));
56 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(0.5));
57 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(1.0));
58 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(1.25));
61 TEST(AnimationTest, TrimTimeStartTime) {
62 scoped_ptr<Animation> anim(CreateAnimation(1));
63 anim->set_start_time(4);
64 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(0.0));
65 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(4.0));
66 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(4.5));
67 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(5.0));
68 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(6.0));
71 TEST(AnimationTest, TrimTimeTimeOffset) {
72 scoped_ptr<Animation> anim(CreateAnimation(1));
73 anim->set_time_offset(4);
74 anim->set_start_time(4);
75 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(0.0));
76 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(0.5));
77 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(1.0));
78 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(1.0));
81 TEST(AnimationTest, TrimTimePauseResume) {
82 scoped_ptr<Animation> anim(CreateAnimation(1));
83 anim->SetRunState(Animation::Running, 0.0);
84 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(0.0));
85 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(0.5));
86 anim->SetRunState(Animation::Paused, 0.5);
87 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(1024.0));
88 anim->SetRunState(Animation::Running, 1024.0);
89 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(1024.0));
90 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(1024.5));
93 TEST(AnimationTest, TrimTimeSuspendResume) {
94 scoped_ptr<Animation> anim(CreateAnimation(1));
95 anim->SetRunState(Animation::Running, 0.0);
96 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(0.0));
97 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(0.5));
99 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(1024.0));
101 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(1024.0));
102 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(1024.5));
105 TEST(AnimationTest, TrimTimeZeroDuration) {
106 scoped_ptr<Animation> anim(CreateAnimation(0, 0));
107 anim->SetRunState(Animation::Running, 0.0);
108 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(-1.0));
109 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(0.0));
110 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(1.0));
113 TEST(AnimationTest, TrimTimeStarting) {
114 scoped_ptr<Animation> anim(CreateAnimation(1, 5.0));
115 anim->SetRunState(Animation::Starting, 0.0);
116 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(-1.0));
117 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(0.0));
118 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(1.0));
119 anim->set_time_offset(2.0);
120 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(-1.0));
121 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(0.0));
122 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(1.0));
123 anim->set_start_time(1.0);
124 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(-1.0));
125 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(0.0));
126 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(1.0));
127 EXPECT_EQ(3.0, anim->TrimTimeToCurrentIteration(2.0));
130 TEST(AnimationTest, TrimTimeNeedsSynchronizedStartTime) {
131 scoped_ptr<Animation> anim(CreateAnimation(1, 5.0));
132 anim->SetRunState(Animation::Running, 0.0);
133 anim->set_needs_synchronized_start_time(true);
134 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(-1.0));
135 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(0.0));
136 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(1.0));
137 anim->set_time_offset(2.0);
138 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(-1.0));
139 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(0.0));
140 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(1.0));
141 anim->set_start_time(1.0);
142 anim->set_needs_synchronized_start_time(false);
143 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(0.0));
144 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(1.0));
145 EXPECT_EQ(3.0, anim->TrimTimeToCurrentIteration(2.0));
148 TEST(AnimationTest, IsFinishedAtZeroIterations) {
149 scoped_ptr<Animation> anim(CreateAnimation(0));
150 anim->SetRunState(Animation::Running, 0.0);
151 EXPECT_FALSE(anim->IsFinishedAt(-1.0));
152 EXPECT_TRUE(anim->IsFinishedAt(0.0));
153 EXPECT_TRUE(anim->IsFinishedAt(1.0));
156 TEST(AnimationTest, IsFinishedAtOneIteration) {
157 scoped_ptr<Animation> anim(CreateAnimation(1));
158 anim->SetRunState(Animation::Running, 0.0);
159 EXPECT_FALSE(anim->IsFinishedAt(-1.0));
160 EXPECT_FALSE(anim->IsFinishedAt(0.0));
161 EXPECT_TRUE(anim->IsFinishedAt(1.0));
162 EXPECT_TRUE(anim->IsFinishedAt(2.0));
165 TEST(AnimationTest, IsFinishedAtInfiniteIterations) {
166 scoped_ptr<Animation> anim(CreateAnimation(-1));
167 anim->SetRunState(Animation::Running, 0.0);
168 EXPECT_FALSE(anim->IsFinishedAt(0.0));
169 EXPECT_FALSE(anim->IsFinishedAt(0.5));
170 EXPECT_FALSE(anim->IsFinishedAt(1.0));
171 EXPECT_FALSE(anim->IsFinishedAt(1.5));
174 TEST(AnimationTest, IsFinishedAtNotRunning) {
175 scoped_ptr<Animation> anim(CreateAnimation(0));
176 anim->SetRunState(Animation::Running, 0.0);
177 EXPECT_TRUE(anim->IsFinishedAt(0.0));
178 anim->SetRunState(Animation::Paused, 0.0);
179 EXPECT_FALSE(anim->IsFinishedAt(0.0));
180 anim->SetRunState(Animation::WaitingForNextTick, 0.0);
181 EXPECT_FALSE(anim->IsFinishedAt(0.0));
182 anim->SetRunState(Animation::WaitingForTargetAvailability, 0.0);
183 EXPECT_FALSE(anim->IsFinishedAt(0.0));
184 anim->SetRunState(Animation::WaitingForStartTime, 0.0);
185 EXPECT_FALSE(anim->IsFinishedAt(0.0));
186 anim->SetRunState(Animation::Finished, 0.0);
187 EXPECT_TRUE(anim->IsFinishedAt(0.0));
188 anim->SetRunState(Animation::Aborted, 0.0);
189 EXPECT_TRUE(anim->IsFinishedAt(0.0));
192 TEST(AnimationTest, IsFinished) {
193 scoped_ptr<Animation> anim(CreateAnimation(1));
194 anim->SetRunState(Animation::Running, 0.0);
195 EXPECT_FALSE(anim->is_finished());
196 anim->SetRunState(Animation::Paused, 0.0);
197 EXPECT_FALSE(anim->is_finished());
198 anim->SetRunState(Animation::WaitingForNextTick, 0.0);
199 EXPECT_FALSE(anim->is_finished());
200 anim->SetRunState(Animation::WaitingForTargetAvailability, 0.0);
201 EXPECT_FALSE(anim->is_finished());
202 anim->SetRunState(Animation::WaitingForStartTime, 0.0);
203 EXPECT_FALSE(anim->is_finished());
204 anim->SetRunState(Animation::Finished, 0.0);
205 EXPECT_TRUE(anim->is_finished());
206 anim->SetRunState(Animation::Aborted, 0.0);
207 EXPECT_TRUE(anim->is_finished());
210 TEST(AnimationTest, IsFinishedNeedsSynchronizedStartTime) {
211 scoped_ptr<Animation> anim(CreateAnimation(1));
212 anim->SetRunState(Animation::Running, 2.0);
213 EXPECT_FALSE(anim->is_finished());
214 anim->SetRunState(Animation::Paused, 2.0);
215 EXPECT_FALSE(anim->is_finished());
216 anim->SetRunState(Animation::WaitingForNextTick, 2.0);
217 EXPECT_FALSE(anim->is_finished());
218 anim->SetRunState(Animation::WaitingForTargetAvailability, 2.0);
219 EXPECT_FALSE(anim->is_finished());
220 anim->SetRunState(Animation::WaitingForStartTime, 2.0);
221 EXPECT_FALSE(anim->is_finished());
222 anim->SetRunState(Animation::Finished, 0.0);
223 EXPECT_TRUE(anim->is_finished());
224 anim->SetRunState(Animation::Aborted, 0.0);
225 EXPECT_TRUE(anim->is_finished());
228 TEST(AnimationTest, RunStateChangesIgnoredWhileSuspended) {
229 scoped_ptr<Animation> anim(CreateAnimation(1));
231 EXPECT_EQ(Animation::Paused, anim->run_state());
232 anim->SetRunState(Animation::Running, 0.0);
233 EXPECT_EQ(Animation::Paused, anim->run_state());
235 anim->SetRunState(Animation::Running, 0.0);
236 EXPECT_EQ(Animation::Running, anim->run_state());