| OLD | NEW |
| (Empty) |
| 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 using base::TimeDelta; | |
| 15 | |
| 16 static base::TimeTicks TicksFromSecondsF(double seconds) { | |
| 17 return base::TimeTicks::FromInternalValue(seconds * | |
| 18 base::Time::kMicrosecondsPerSecond); | |
| 19 } | |
| 20 | |
| 21 scoped_ptr<Animation> CreateAnimation(double iterations, | |
| 22 double duration, | |
| 23 double playback_rate) { | |
| 24 scoped_ptr<Animation> to_return( | |
| 25 Animation::Create(make_scoped_ptr(new FakeFloatAnimationCurve(duration)), | |
| 26 0, 1, Animation::OPACITY)); | |
| 27 to_return->set_iterations(iterations); | |
| 28 to_return->set_playback_rate(playback_rate); | |
| 29 return to_return.Pass(); | |
| 30 } | |
| 31 | |
| 32 scoped_ptr<Animation> CreateAnimation(double iterations, double duration) { | |
| 33 return CreateAnimation(iterations, duration, 1); | |
| 34 } | |
| 35 | |
| 36 scoped_ptr<Animation> CreateAnimation(double iterations) { | |
| 37 return CreateAnimation(iterations, 1, 1); | |
| 38 } | |
| 39 | |
| 40 TEST(AnimationTest, TrimTimeZeroIterations) { | |
| 41 scoped_ptr<Animation> anim(CreateAnimation(0)); | |
| 42 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 43 .InSecondsF()); | |
| 44 EXPECT_EQ( | |
| 45 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
| 46 EXPECT_EQ( | |
| 47 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
| 48 } | |
| 49 | |
| 50 TEST(AnimationTest, TrimTimeOneIteration) { | |
| 51 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 52 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 53 .InSecondsF()); | |
| 54 EXPECT_EQ( | |
| 55 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
| 56 EXPECT_EQ( | |
| 57 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
| 58 EXPECT_EQ( | |
| 59 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); | |
| 60 } | |
| 61 | |
| 62 TEST(AnimationTest, TrimTimeOneHalfIteration) { | |
| 63 scoped_ptr<Animation> anim(CreateAnimation(1.5)); | |
| 64 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 65 .InSecondsF()); | |
| 66 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 67 .InSecondsF()); | |
| 68 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 69 .InSecondsF()); | |
| 70 EXPECT_EQ(0.9, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.9)) | |
| 71 .InSecondsF()); | |
| 72 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 73 .InSecondsF()); | |
| 74 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
| 75 .InSecondsF()); | |
| 76 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
| 77 .InSecondsF()); | |
| 78 } | |
| 79 | |
| 80 TEST(AnimationTest, TrimTimeInfiniteIterations) { | |
| 81 scoped_ptr<Animation> anim(CreateAnimation(-1)); | |
| 82 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 83 .InSecondsF()); | |
| 84 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 85 .InSecondsF()); | |
| 86 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 87 .InSecondsF()); | |
| 88 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
| 89 .InSecondsF()); | |
| 90 } | |
| 91 | |
| 92 TEST(AnimationTest, TrimTimeReverse) { | |
| 93 scoped_ptr<Animation> anim(CreateAnimation(-1)); | |
| 94 anim->set_direction(Animation::DIRECTION_REVERSE); | |
| 95 EXPECT_EQ( | |
| 96 1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)).InSecondsF()); | |
| 97 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
| 98 .InSecondsF()); | |
| 99 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 100 .InSecondsF()); | |
| 101 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
| 102 .InSecondsF()); | |
| 103 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 104 .InSecondsF()); | |
| 105 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
| 106 .InSecondsF()); | |
| 107 } | |
| 108 | |
| 109 TEST(AnimationTest, TrimTimeAlternateInfiniteIterations) { | |
| 110 scoped_ptr<Animation> anim(CreateAnimation(-1)); | |
| 111 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
| 112 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 113 .InSecondsF()); | |
| 114 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
| 115 .InSecondsF()); | |
| 116 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 117 .InSecondsF()); | |
| 118 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
| 119 .InSecondsF()); | |
| 120 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 121 .InSecondsF()); | |
| 122 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
| 123 .InSecondsF()); | |
| 124 } | |
| 125 | |
| 126 TEST(AnimationTest, TrimTimeAlternateOneIteration) { | |
| 127 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 128 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
| 129 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 130 .InSecondsF()); | |
| 131 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
| 132 .InSecondsF()); | |
| 133 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 134 .InSecondsF()); | |
| 135 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
| 136 .InSecondsF()); | |
| 137 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 138 .InSecondsF()); | |
| 139 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
| 140 .InSecondsF()); | |
| 141 } | |
| 142 | |
| 143 TEST(AnimationTest, TrimTimeAlternateTwoIterations) { | |
| 144 scoped_ptr<Animation> anim(CreateAnimation(2)); | |
| 145 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
| 146 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 147 .InSecondsF()); | |
| 148 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
| 149 .InSecondsF()); | |
| 150 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 151 .InSecondsF()); | |
| 152 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
| 153 .InSecondsF()); | |
| 154 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 155 .InSecondsF()); | |
| 156 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
| 157 .InSecondsF()); | |
| 158 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) | |
| 159 .InSecondsF()); | |
| 160 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
| 161 .InSecondsF()); | |
| 162 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) | |
| 163 .InSecondsF()); | |
| 164 } | |
| 165 | |
| 166 TEST(AnimationTest, TrimTimeAlternateTwoHalfIterations) { | |
| 167 scoped_ptr<Animation> anim(CreateAnimation(2.5)); | |
| 168 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
| 169 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 170 .InSecondsF()); | |
| 171 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
| 172 .InSecondsF()); | |
| 173 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 174 .InSecondsF()); | |
| 175 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
| 176 .InSecondsF()); | |
| 177 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 178 .InSecondsF()); | |
| 179 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
| 180 .InSecondsF()); | |
| 181 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) | |
| 182 .InSecondsF()); | |
| 183 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
| 184 .InSecondsF()); | |
| 185 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) | |
| 186 .InSecondsF()); | |
| 187 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.50)) | |
| 188 .InSecondsF()); | |
| 189 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.75)) | |
| 190 .InSecondsF()); | |
| 191 } | |
| 192 | |
| 193 TEST(AnimationTest, TrimTimeAlternateReverseInfiniteIterations) { | |
| 194 scoped_ptr<Animation> anim(CreateAnimation(-1)); | |
| 195 anim->set_direction(Animation::DIRECTION_ALTERNATE_REVERSE); | |
| 196 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 197 .InSecondsF()); | |
| 198 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
| 199 .InSecondsF()); | |
| 200 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 201 .InSecondsF()); | |
| 202 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
| 203 .InSecondsF()); | |
| 204 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 205 .InSecondsF()); | |
| 206 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
| 207 .InSecondsF()); | |
| 208 } | |
| 209 | |
| 210 TEST(AnimationTest, TrimTimeAlternateReverseOneIteration) { | |
| 211 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 212 anim->set_direction(Animation::DIRECTION_ALTERNATE_REVERSE); | |
| 213 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 214 .InSecondsF()); | |
| 215 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
| 216 .InSecondsF()); | |
| 217 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 218 .InSecondsF()); | |
| 219 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
| 220 .InSecondsF()); | |
| 221 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 222 .InSecondsF()); | |
| 223 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
| 224 .InSecondsF()); | |
| 225 } | |
| 226 | |
| 227 TEST(AnimationTest, TrimTimeAlternateReverseTwoIterations) { | |
| 228 scoped_ptr<Animation> anim(CreateAnimation(2)); | |
| 229 anim->set_direction(Animation::DIRECTION_ALTERNATE_REVERSE); | |
| 230 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 231 .InSecondsF()); | |
| 232 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
| 233 .InSecondsF()); | |
| 234 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 235 .InSecondsF()); | |
| 236 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
| 237 .InSecondsF()); | |
| 238 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 239 .InSecondsF()); | |
| 240 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
| 241 .InSecondsF()); | |
| 242 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) | |
| 243 .InSecondsF()); | |
| 244 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
| 245 .InSecondsF()); | |
| 246 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) | |
| 247 .InSecondsF()); | |
| 248 } | |
| 249 | |
| 250 TEST(AnimationTest, TrimTimeStartTime) { | |
| 251 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 252 anim->set_start_time(TicksFromSecondsF(4)); | |
| 253 EXPECT_EQ( | |
| 254 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
| 255 EXPECT_EQ( | |
| 256 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)).InSecondsF()); | |
| 257 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)) | |
| 258 .InSecondsF()); | |
| 259 EXPECT_EQ( | |
| 260 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)).InSecondsF()); | |
| 261 EXPECT_EQ( | |
| 262 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(6.0)).InSecondsF()); | |
| 263 } | |
| 264 | |
| 265 TEST(AnimationTest, TrimTimeStartTimeReverse) { | |
| 266 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 267 anim->set_start_time(TicksFromSecondsF(4)); | |
| 268 anim->set_direction(Animation::DIRECTION_REVERSE); | |
| 269 EXPECT_EQ( | |
| 270 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
| 271 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)) | |
| 272 .InSecondsF()); | |
| 273 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)) | |
| 274 .InSecondsF()); | |
| 275 EXPECT_EQ( | |
| 276 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)).InSecondsF()); | |
| 277 EXPECT_EQ( | |
| 278 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(6.0)).InSecondsF()); | |
| 279 } | |
| 280 | |
| 281 TEST(AnimationTest, TrimTimeTimeOffset) { | |
| 282 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 283 anim->set_time_offset(TimeDelta::FromMilliseconds(4000)); | |
| 284 anim->set_start_time(TicksFromSecondsF(4)); | |
| 285 EXPECT_EQ( | |
| 286 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
| 287 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 288 .InSecondsF()); | |
| 289 EXPECT_EQ( | |
| 290 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
| 291 EXPECT_EQ( | |
| 292 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
| 293 } | |
| 294 | |
| 295 TEST(AnimationTest, TrimTimeTimeOffsetReverse) { | |
| 296 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 297 anim->set_time_offset(TimeDelta::FromMilliseconds(4000)); | |
| 298 anim->set_start_time(TicksFromSecondsF(4)); | |
| 299 anim->set_direction(Animation::DIRECTION_REVERSE); | |
| 300 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 301 .InSecondsF()); | |
| 302 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 303 .InSecondsF()); | |
| 304 EXPECT_EQ( | |
| 305 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
| 306 EXPECT_EQ( | |
| 307 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
| 308 } | |
| 309 | |
| 310 TEST(AnimationTest, TrimTimeNegativeTimeOffset) { | |
| 311 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 312 anim->set_time_offset(TimeDelta::FromMilliseconds(-4000)); | |
| 313 | |
| 314 EXPECT_EQ( | |
| 315 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
| 316 EXPECT_EQ( | |
| 317 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)).InSecondsF()); | |
| 318 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)) | |
| 319 .InSecondsF()); | |
| 320 EXPECT_EQ( | |
| 321 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)).InSecondsF()); | |
| 322 } | |
| 323 | |
| 324 TEST(AnimationTest, TrimTimeNegativeTimeOffsetReverse) { | |
| 325 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 326 anim->set_time_offset(TimeDelta::FromMilliseconds(-4000)); | |
| 327 anim->set_direction(Animation::DIRECTION_REVERSE); | |
| 328 | |
| 329 EXPECT_EQ( | |
| 330 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
| 331 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)) | |
| 332 .InSecondsF()); | |
| 333 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)) | |
| 334 .InSecondsF()); | |
| 335 EXPECT_EQ( | |
| 336 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)).InSecondsF()); | |
| 337 } | |
| 338 | |
| 339 TEST(AnimationTest, TrimTimePauseResume) { | |
| 340 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 341 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
| 342 EXPECT_EQ( | |
| 343 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
| 344 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 345 .InSecondsF()); | |
| 346 anim->SetRunState(Animation::PAUSED, TicksFromSecondsF(0.5)); | |
| 347 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) | |
| 348 .InSecondsF()); | |
| 349 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(1024.0)); | |
| 350 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) | |
| 351 .InSecondsF()); | |
| 352 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.5)) | |
| 353 .InSecondsF()); | |
| 354 } | |
| 355 | |
| 356 TEST(AnimationTest, TrimTimePauseResumeReverse) { | |
| 357 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 358 anim->set_direction(Animation::DIRECTION_REVERSE); | |
| 359 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
| 360 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 361 .InSecondsF()); | |
| 362 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 363 .InSecondsF()); | |
| 364 anim->SetRunState(Animation::PAUSED, TicksFromSecondsF(0.25)); | |
| 365 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) | |
| 366 .InSecondsF()); | |
| 367 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(1024.0)); | |
| 368 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) | |
| 369 .InSecondsF()); | |
| 370 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.75)) | |
| 371 .InSecondsF()); | |
| 372 } | |
| 373 | |
| 374 TEST(AnimationTest, TrimTimeSuspendResume) { | |
| 375 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 376 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
| 377 EXPECT_EQ( | |
| 378 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
| 379 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 380 .InSecondsF()); | |
| 381 anim->Suspend(TicksFromSecondsF(0.5)); | |
| 382 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) | |
| 383 .InSecondsF()); | |
| 384 anim->Resume(TicksFromSecondsF(1024)); | |
| 385 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) | |
| 386 .InSecondsF()); | |
| 387 EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.5)) | |
| 388 .InSecondsF()); | |
| 389 } | |
| 390 | |
| 391 TEST(AnimationTest, TrimTimeSuspendResumeReverse) { | |
| 392 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 393 anim->set_direction(Animation::DIRECTION_REVERSE); | |
| 394 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
| 395 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 396 .InSecondsF()); | |
| 397 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
| 398 .InSecondsF()); | |
| 399 anim->Suspend(TicksFromSecondsF(0.75)); | |
| 400 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) | |
| 401 .InSecondsF()); | |
| 402 anim->Resume(TicksFromSecondsF(1024)); | |
| 403 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) | |
| 404 .InSecondsF()); | |
| 405 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.25)) | |
| 406 .InSecondsF()); | |
| 407 } | |
| 408 | |
| 409 TEST(AnimationTest, TrimTimeZeroDuration) { | |
| 410 scoped_ptr<Animation> anim(CreateAnimation(0, 0)); | |
| 411 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
| 412 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 413 .InSecondsF()); | |
| 414 EXPECT_EQ( | |
| 415 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
| 416 EXPECT_EQ( | |
| 417 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
| 418 } | |
| 419 | |
| 420 TEST(AnimationTest, TrimTimeStarting) { | |
| 421 scoped_ptr<Animation> anim(CreateAnimation(1, 5.0)); | |
| 422 anim->SetRunState(Animation::STARTING, TicksFromSecondsF(0.0)); | |
| 423 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 424 .InSecondsF()); | |
| 425 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 426 .InSecondsF()); | |
| 427 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 428 .InSecondsF()); | |
| 429 anim->set_time_offset(TimeDelta::FromMilliseconds(2000)); | |
| 430 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 431 .InSecondsF()); | |
| 432 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 433 .InSecondsF()); | |
| 434 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 435 .InSecondsF()); | |
| 436 anim->set_start_time(TicksFromSecondsF(1.0)); | |
| 437 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 438 .InSecondsF()); | |
| 439 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 440 .InSecondsF()); | |
| 441 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 442 .InSecondsF()); | |
| 443 EXPECT_EQ(3.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
| 444 .InSecondsF()); | |
| 445 } | |
| 446 | |
| 447 TEST(AnimationTest, TrimTimeNeedsSynchronizedStartTime) { | |
| 448 scoped_ptr<Animation> anim(CreateAnimation(1, 5.0)); | |
| 449 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
| 450 anim->set_needs_synchronized_start_time(true); | |
| 451 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 452 .InSecondsF()); | |
| 453 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 454 .InSecondsF()); | |
| 455 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 456 .InSecondsF()); | |
| 457 anim->set_time_offset(TimeDelta::FromMilliseconds(2000)); | |
| 458 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 459 .InSecondsF()); | |
| 460 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 461 .InSecondsF()); | |
| 462 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 463 .InSecondsF()); | |
| 464 anim->set_start_time(TicksFromSecondsF(1.0)); | |
| 465 anim->set_needs_synchronized_start_time(false); | |
| 466 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 467 .InSecondsF()); | |
| 468 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 469 .InSecondsF()); | |
| 470 EXPECT_EQ(3.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
| 471 .InSecondsF()); | |
| 472 } | |
| 473 | |
| 474 TEST(AnimationTest, IsFinishedAtZeroIterations) { | |
| 475 scoped_ptr<Animation> anim(CreateAnimation(0)); | |
| 476 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
| 477 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0))); | |
| 478 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
| 479 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.0))); | |
| 480 } | |
| 481 | |
| 482 TEST(AnimationTest, IsFinishedAtOneIteration) { | |
| 483 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 484 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
| 485 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0))); | |
| 486 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
| 487 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.0))); | |
| 488 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(2.0))); | |
| 489 } | |
| 490 | |
| 491 TEST(AnimationTest, IsFinishedAtInfiniteIterations) { | |
| 492 scoped_ptr<Animation> anim(CreateAnimation(-1)); | |
| 493 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
| 494 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
| 495 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.5))); | |
| 496 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(1.0))); | |
| 497 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(1.5))); | |
| 498 } | |
| 499 | |
| 500 TEST(AnimationTest, IsFinishedNegativeTimeOffset) { | |
| 501 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 502 anim->set_time_offset(TimeDelta::FromMilliseconds(-500)); | |
| 503 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
| 504 | |
| 505 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0))); | |
| 506 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
| 507 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.5))); | |
| 508 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(1.0))); | |
| 509 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.5))); | |
| 510 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(2.0))); | |
| 511 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(2.5))); | |
| 512 } | |
| 513 | |
| 514 TEST(AnimationTest, IsFinishedPositiveTimeOffset) { | |
| 515 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 516 anim->set_time_offset(TimeDelta::FromMilliseconds(500)); | |
| 517 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
| 518 | |
| 519 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0))); | |
| 520 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
| 521 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.5))); | |
| 522 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.0))); | |
| 523 } | |
| 524 | |
| 525 TEST(AnimationTest, IsFinishedAtNotRunning) { | |
| 526 scoped_ptr<Animation> anim(CreateAnimation(0)); | |
| 527 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
| 528 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
| 529 anim->SetRunState(Animation::PAUSED, TicksFromSecondsF(0.0)); | |
| 530 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
| 531 anim->SetRunState(Animation::WAITING_FOR_TARGET_AVAILABILITY, | |
| 532 TicksFromSecondsF(0.0)); | |
| 533 EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
| 534 anim->SetRunState(Animation::FINISHED, TicksFromSecondsF(0.0)); | |
| 535 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
| 536 anim->SetRunState(Animation::ABORTED, TicksFromSecondsF(0.0)); | |
| 537 EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); | |
| 538 } | |
| 539 | |
| 540 TEST(AnimationTest, IsFinished) { | |
| 541 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 542 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
| 543 EXPECT_FALSE(anim->is_finished()); | |
| 544 anim->SetRunState(Animation::PAUSED, TicksFromSecondsF(0.0)); | |
| 545 EXPECT_FALSE(anim->is_finished()); | |
| 546 anim->SetRunState(Animation::WAITING_FOR_TARGET_AVAILABILITY, | |
| 547 TicksFromSecondsF(0.0)); | |
| 548 EXPECT_FALSE(anim->is_finished()); | |
| 549 anim->SetRunState(Animation::FINISHED, TicksFromSecondsF(0.0)); | |
| 550 EXPECT_TRUE(anim->is_finished()); | |
| 551 anim->SetRunState(Animation::ABORTED, TicksFromSecondsF(0.0)); | |
| 552 EXPECT_TRUE(anim->is_finished()); | |
| 553 } | |
| 554 | |
| 555 TEST(AnimationTest, IsFinishedNeedsSynchronizedStartTime) { | |
| 556 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 557 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(2.0)); | |
| 558 EXPECT_FALSE(anim->is_finished()); | |
| 559 anim->SetRunState(Animation::PAUSED, TicksFromSecondsF(2.0)); | |
| 560 EXPECT_FALSE(anim->is_finished()); | |
| 561 anim->SetRunState(Animation::WAITING_FOR_TARGET_AVAILABILITY, | |
| 562 TicksFromSecondsF(2.0)); | |
| 563 EXPECT_FALSE(anim->is_finished()); | |
| 564 anim->SetRunState(Animation::FINISHED, TicksFromSecondsF(0.0)); | |
| 565 EXPECT_TRUE(anim->is_finished()); | |
| 566 anim->SetRunState(Animation::ABORTED, TicksFromSecondsF(0.0)); | |
| 567 EXPECT_TRUE(anim->is_finished()); | |
| 568 } | |
| 569 | |
| 570 TEST(AnimationTest, RunStateChangesIgnoredWhileSuspended) { | |
| 571 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 572 anim->Suspend(TicksFromSecondsF(0)); | |
| 573 EXPECT_EQ(Animation::PAUSED, anim->run_state()); | |
| 574 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
| 575 EXPECT_EQ(Animation::PAUSED, anim->run_state()); | |
| 576 anim->Resume(TicksFromSecondsF(0)); | |
| 577 anim->SetRunState(Animation::RUNNING, TicksFromSecondsF(0.0)); | |
| 578 EXPECT_EQ(Animation::RUNNING, anim->run_state()); | |
| 579 } | |
| 580 | |
| 581 TEST(AnimationTest, TrimTimePlaybackNormal) { | |
| 582 scoped_ptr<Animation> anim(CreateAnimation(1, 1, 1)); | |
| 583 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 584 .InSecondsF()); | |
| 585 EXPECT_EQ( | |
| 586 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
| 587 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 588 .InSecondsF()); | |
| 589 EXPECT_EQ( | |
| 590 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
| 591 EXPECT_EQ( | |
| 592 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); | |
| 593 } | |
| 594 | |
| 595 TEST(AnimationTest, TrimTimePlaybackSlow) { | |
| 596 scoped_ptr<Animation> anim(CreateAnimation(1, 1, 0.5)); | |
| 597 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 598 .InSecondsF()); | |
| 599 EXPECT_EQ( | |
| 600 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
| 601 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 602 .InSecondsF()); | |
| 603 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 604 .InSecondsF()); | |
| 605 EXPECT_EQ( | |
| 606 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); | |
| 607 EXPECT_EQ( | |
| 608 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)).InSecondsF()); | |
| 609 } | |
| 610 | |
| 611 TEST(AnimationTest, TrimTimePlaybackFast) { | |
| 612 scoped_ptr<Animation> anim(CreateAnimation(1, 4, 2)); | |
| 613 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 614 .InSecondsF()); | |
| 615 EXPECT_EQ( | |
| 616 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
| 617 EXPECT_EQ( | |
| 618 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)).InSecondsF()); | |
| 619 EXPECT_EQ( | |
| 620 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
| 621 EXPECT_EQ( | |
| 622 3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)).InSecondsF()); | |
| 623 EXPECT_EQ( | |
| 624 4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); | |
| 625 EXPECT_EQ( | |
| 626 4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)).InSecondsF()); | |
| 627 } | |
| 628 | |
| 629 TEST(AnimationTest, TrimTimePlaybackNormalReverse) { | |
| 630 scoped_ptr<Animation> anim(CreateAnimation(1, 2, -1)); | |
| 631 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 632 .InSecondsF()); | |
| 633 EXPECT_EQ( | |
| 634 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)).InSecondsF()); | |
| 635 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 636 .InSecondsF()); | |
| 637 EXPECT_EQ( | |
| 638 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
| 639 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
| 640 .InSecondsF()); | |
| 641 EXPECT_EQ( | |
| 642 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); | |
| 643 EXPECT_EQ( | |
| 644 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)).InSecondsF()); | |
| 645 } | |
| 646 | |
| 647 TEST(AnimationTest, TrimTimePlaybackSlowReverse) { | |
| 648 scoped_ptr<Animation> anim(CreateAnimation(1, 2, -0.5)); | |
| 649 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 650 .InSecondsF()); | |
| 651 EXPECT_EQ( | |
| 652 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)).InSecondsF()); | |
| 653 EXPECT_EQ(1.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 654 .InSecondsF()); | |
| 655 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 656 .InSecondsF()); | |
| 657 EXPECT_EQ(1.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
| 658 .InSecondsF()); | |
| 659 EXPECT_EQ( | |
| 660 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); | |
| 661 EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)) | |
| 662 .InSecondsF()); | |
| 663 EXPECT_EQ( | |
| 664 0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3)).InSecondsF()); | |
| 665 EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)) | |
| 666 .InSecondsF()); | |
| 667 EXPECT_EQ( | |
| 668 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4)).InSecondsF()); | |
| 669 EXPECT_EQ( | |
| 670 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)).InSecondsF()); | |
| 671 } | |
| 672 | |
| 673 TEST(AnimationTest, TrimTimePlaybackFastReverse) { | |
| 674 scoped_ptr<Animation> anim(CreateAnimation(1, 2, -2)); | |
| 675 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 676 .InSecondsF()); | |
| 677 EXPECT_EQ( | |
| 678 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)).InSecondsF()); | |
| 679 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
| 680 .InSecondsF()); | |
| 681 EXPECT_EQ( | |
| 682 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)).InSecondsF()); | |
| 683 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
| 684 .InSecondsF()); | |
| 685 EXPECT_EQ( | |
| 686 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
| 687 EXPECT_EQ( | |
| 688 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)).InSecondsF()); | |
| 689 } | |
| 690 | |
| 691 TEST(AnimationTest, TrimTimePlaybackFastInfiniteIterations) { | |
| 692 scoped_ptr<Animation> anim(CreateAnimation(-1, 4, 4)); | |
| 693 EXPECT_EQ( | |
| 694 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
| 695 EXPECT_EQ( | |
| 696 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)).InSecondsF()); | |
| 697 EXPECT_EQ( | |
| 698 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
| 699 EXPECT_EQ( | |
| 700 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)).InSecondsF()); | |
| 701 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1000.0)) | |
| 702 .InSecondsF()); | |
| 703 EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1000.5)) | |
| 704 .InSecondsF()); | |
| 705 } | |
| 706 | |
| 707 TEST(AnimationTest, TrimTimePlaybackNormalDoubleReverse) { | |
| 708 scoped_ptr<Animation> anim(CreateAnimation(1, 1, -1)); | |
| 709 anim->set_direction(Animation::DIRECTION_REVERSE); | |
| 710 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 711 .InSecondsF()); | |
| 712 EXPECT_EQ( | |
| 713 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
| 714 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 715 .InSecondsF()); | |
| 716 EXPECT_EQ( | |
| 717 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
| 718 EXPECT_EQ( | |
| 719 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); | |
| 720 } | |
| 721 | |
| 722 TEST(AnimationTest, TrimTimePlaybackFastDoubleReverse) { | |
| 723 scoped_ptr<Animation> anim(CreateAnimation(1, 4, -2)); | |
| 724 anim->set_direction(Animation::DIRECTION_REVERSE); | |
| 725 EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 726 .InSecondsF()); | |
| 727 EXPECT_EQ( | |
| 728 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); | |
| 729 EXPECT_EQ( | |
| 730 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)).InSecondsF()); | |
| 731 EXPECT_EQ( | |
| 732 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); | |
| 733 EXPECT_EQ( | |
| 734 3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)).InSecondsF()); | |
| 735 EXPECT_EQ( | |
| 736 4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); | |
| 737 EXPECT_EQ( | |
| 738 4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)).InSecondsF()); | |
| 739 } | |
| 740 | |
| 741 TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFast) { | |
| 742 scoped_ptr<Animation> anim(CreateAnimation(2, 2, 2)); | |
| 743 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
| 744 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 745 .InSecondsF()); | |
| 746 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
| 747 .InSecondsF()); | |
| 748 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 749 .InSecondsF()); | |
| 750 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
| 751 .InSecondsF()); | |
| 752 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 753 .InSecondsF()); | |
| 754 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
| 755 .InSecondsF()); | |
| 756 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
| 757 .InSecondsF()); | |
| 758 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) | |
| 759 .InSecondsF()); | |
| 760 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
| 761 .InSecondsF()); | |
| 762 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) | |
| 763 .InSecondsF()); | |
| 764 } | |
| 765 | |
| 766 TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFastReverse) { | |
| 767 scoped_ptr<Animation> anim(CreateAnimation(2, 2, 2)); | |
| 768 anim->set_direction(Animation::DIRECTION_ALTERNATE_REVERSE); | |
| 769 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 770 .InSecondsF()); | |
| 771 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 772 .InSecondsF()); | |
| 773 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
| 774 .InSecondsF()); | |
| 775 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 776 .InSecondsF()); | |
| 777 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
| 778 .InSecondsF()); | |
| 779 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 780 .InSecondsF()); | |
| 781 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
| 782 .InSecondsF()); | |
| 783 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
| 784 .InSecondsF()); | |
| 785 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) | |
| 786 .InSecondsF()); | |
| 787 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
| 788 .InSecondsF()); | |
| 789 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) | |
| 790 .InSecondsF()); | |
| 791 } | |
| 792 | |
| 793 TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFastDoubleReverse) { | |
| 794 scoped_ptr<Animation> anim(CreateAnimation(2, 2, -2)); | |
| 795 anim->set_direction(Animation::DIRECTION_ALTERNATE_REVERSE); | |
| 796 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 797 .InSecondsF()); | |
| 798 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
| 799 .InSecondsF()); | |
| 800 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 801 .InSecondsF()); | |
| 802 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
| 803 .InSecondsF()); | |
| 804 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 805 .InSecondsF()); | |
| 806 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
| 807 .InSecondsF()); | |
| 808 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
| 809 .InSecondsF()); | |
| 810 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) | |
| 811 .InSecondsF()); | |
| 812 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
| 813 .InSecondsF()); | |
| 814 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) | |
| 815 .InSecondsF()); | |
| 816 } | |
| 817 | |
| 818 TEST(AnimationTest, | |
| 819 TrimTimeAlternateReverseThreeIterationsPlaybackFastAlternateReverse) { | |
| 820 scoped_ptr<Animation> anim(CreateAnimation(3, 2, -2)); | |
| 821 anim->set_direction(Animation::DIRECTION_ALTERNATE_REVERSE); | |
| 822 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 823 .InSecondsF()); | |
| 824 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) | |
| 825 .InSecondsF()); | |
| 826 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 827 .InSecondsF()); | |
| 828 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) | |
| 829 .InSecondsF()); | |
| 830 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 831 .InSecondsF()); | |
| 832 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) | |
| 833 .InSecondsF()); | |
| 834 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
| 835 .InSecondsF()); | |
| 836 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) | |
| 837 .InSecondsF()); | |
| 838 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
| 839 .InSecondsF()); | |
| 840 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) | |
| 841 .InSecondsF()); | |
| 842 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)) | |
| 843 .InSecondsF()); | |
| 844 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.75)) | |
| 845 .InSecondsF()); | |
| 846 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)) | |
| 847 .InSecondsF()); | |
| 848 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.25)) | |
| 849 .InSecondsF()); | |
| 850 } | |
| 851 | |
| 852 TEST(AnimationTest, | |
| 853 TrimTimeAlternateReverseTwoIterationsPlaybackNormalAlternate) { | |
| 854 scoped_ptr<Animation> anim(CreateAnimation(2, 2, -1)); | |
| 855 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
| 856 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 857 .InSecondsF()); | |
| 858 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 859 .InSecondsF()); | |
| 860 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 861 .InSecondsF()); | |
| 862 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
| 863 .InSecondsF()); | |
| 864 EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
| 865 .InSecondsF()); | |
| 866 EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)) | |
| 867 .InSecondsF()); | |
| 868 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)) | |
| 869 .InSecondsF()); | |
| 870 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)) | |
| 871 .InSecondsF()); | |
| 872 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)) | |
| 873 .InSecondsF()); | |
| 874 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)) | |
| 875 .InSecondsF()); | |
| 876 } | |
| 877 | |
| 878 TEST(AnimationTest, TrimTimeIterationStart) { | |
| 879 scoped_ptr<Animation> anim(CreateAnimation(2, 1, 1)); | |
| 880 anim->set_iteration_start(0.5); | |
| 881 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 882 .InSecondsF()); | |
| 883 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 884 .InSecondsF()); | |
| 885 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 886 .InSecondsF()); | |
| 887 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 888 .InSecondsF()); | |
| 889 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
| 890 .InSecondsF()); | |
| 891 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
| 892 .InSecondsF()); | |
| 893 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)) | |
| 894 .InSecondsF()); | |
| 895 } | |
| 896 | |
| 897 TEST(AnimationTest, TrimTimeIterationStartAlternate) { | |
| 898 scoped_ptr<Animation> anim(CreateAnimation(2, 1, 1)); | |
| 899 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
| 900 anim->set_iteration_start(0.3); | |
| 901 EXPECT_EQ(0.3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 902 .InSecondsF()); | |
| 903 EXPECT_EQ(0.3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 904 .InSecondsF()); | |
| 905 EXPECT_EQ(0.8, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 906 .InSecondsF()); | |
| 907 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.7)) | |
| 908 .InSecondsF()); | |
| 909 EXPECT_EQ(0.7, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 910 .InSecondsF()); | |
| 911 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.2)) | |
| 912 .InSecondsF()); | |
| 913 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.7)) | |
| 914 .InSecondsF()); | |
| 915 } | |
| 916 | |
| 917 TEST(AnimationTest, TrimTimeIterationStartAlternateThreeIterations) { | |
| 918 scoped_ptr<Animation> anim(CreateAnimation(3, 1, 1)); | |
| 919 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
| 920 anim->set_iteration_start(1); | |
| 921 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) | |
| 922 .InSecondsF()); | |
| 923 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 924 .InSecondsF()); | |
| 925 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) | |
| 926 .InSecondsF()); | |
| 927 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 928 .InSecondsF()); | |
| 929 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) | |
| 930 .InSecondsF()); | |
| 931 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
| 932 .InSecondsF()); | |
| 933 EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)) | |
| 934 .InSecondsF()); | |
| 935 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)) | |
| 936 .InSecondsF()); | |
| 937 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)) | |
| 938 .InSecondsF()); | |
| 939 } | |
| 940 | |
| 941 TEST(AnimationTest, | |
| 942 TrimTimeIterationStartAlternateThreeIterationsPlaybackReverse) { | |
| 943 scoped_ptr<Animation> anim(CreateAnimation(3, 1, -1)); | |
| 944 anim->set_direction(Animation::DIRECTION_ALTERNATE); | |
| 945 anim->set_iteration_start(1); | |
| 946 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) | |
| 947 .InSecondsF()); | |
| 948 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) | |
| 949 .InSecondsF()); | |
| 950 EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) | |
| 951 .InSecondsF()); | |
| 952 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)) | |
| 953 .InSecondsF()); | |
| 954 EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)) | |
| 955 .InSecondsF()); | |
| 956 } | |
| 957 | |
| 958 TEST(AnimationTest, InEffectFillMode) { | |
| 959 scoped_ptr<Animation> anim(CreateAnimation(1)); | |
| 960 anim->set_fill_mode(Animation::FILL_MODE_NONE); | |
| 961 EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0))); | |
| 962 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); | |
| 963 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); | |
| 964 | |
| 965 anim->set_fill_mode(Animation::FILL_MODE_FORWARDS); | |
| 966 EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0))); | |
| 967 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); | |
| 968 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); | |
| 969 | |
| 970 anim->set_fill_mode(Animation::FILL_MODE_BACKWARDS); | |
| 971 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0))); | |
| 972 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); | |
| 973 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); | |
| 974 | |
| 975 anim->set_fill_mode(Animation::FILL_MODE_BOTH); | |
| 976 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0))); | |
| 977 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); | |
| 978 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); | |
| 979 } | |
| 980 | |
| 981 TEST(AnimationTest, InEffectFillModePlayback) { | |
| 982 scoped_ptr<Animation> anim(CreateAnimation(1, 1, -1)); | |
| 983 anim->set_fill_mode(Animation::FILL_MODE_NONE); | |
| 984 EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0))); | |
| 985 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); | |
| 986 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); | |
| 987 | |
| 988 anim->set_fill_mode(Animation::FILL_MODE_FORWARDS); | |
| 989 EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0))); | |
| 990 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); | |
| 991 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); | |
| 992 | |
| 993 anim->set_fill_mode(Animation::FILL_MODE_BACKWARDS); | |
| 994 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0))); | |
| 995 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); | |
| 996 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); | |
| 997 | |
| 998 anim->set_fill_mode(Animation::FILL_MODE_BOTH); | |
| 999 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0))); | |
| 1000 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); | |
| 1001 EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); | |
| 1002 } | |
| 1003 | |
| 1004 } // namespace | |
| 1005 } // namespace cc | |
| OLD | NEW |