- add sources.
[platform/framework/web/crosswalk.git] / src / cc / animation / animation_unittest.cc
1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "cc/animation/animation.h"
6
7 #include "cc/test/animation_test_common.h"
8 #include "testing/gmock/include/gmock/gmock.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace cc {
12 namespace {
13
14 scoped_ptr<Animation> CreateAnimation(int iterations, double duration) {
15   scoped_ptr<Animation> to_return(Animation::Create(
16       make_scoped_ptr(
17           new FakeFloatAnimationCurve(duration)).PassAs<AnimationCurve>(),
18       0,
19       1,
20       Animation::Opacity));
21   to_return->set_iterations(iterations);
22   return to_return.Pass();
23 }
24
25 scoped_ptr<Animation> CreateAnimation(int iterations) {
26   return CreateAnimation(iterations, 1);
27 }
28
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));
34 }
35
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));
42 }
43
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));
50 }
51
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));
59 }
60
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));
69 }
70
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));
79 }
80
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));
91 }
92
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));
98   anim->Suspend(0.5);
99   EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(1024.0));
100   anim->Resume(1024);
101   EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(1024.0));
102   EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(1024.5));
103 }
104
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));
111 }
112
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));
128 }
129
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));
146 }
147
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));
154 }
155
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));
163 }
164
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));
172 }
173
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));
190 }
191
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());
208 }
209
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());
226 }
227
228 TEST(AnimationTest, RunStateChangesIgnoredWhileSuspended) {
229   scoped_ptr<Animation> anim(CreateAnimation(1));
230   anim->Suspend(0);
231   EXPECT_EQ(Animation::Paused, anim->run_state());
232   anim->SetRunState(Animation::Running, 0.0);
233   EXPECT_EQ(Animation::Paused, anim->run_state());
234   anim->Resume(0);
235   anim->SetRunState(Animation::Running, 0.0);
236   EXPECT_EQ(Animation::Running, anim->run_state());
237 }
238
239 }  // namespace
240 }  // namespace cc