12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/animation.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/animation_test_common.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using base::TimeDelta; 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)static base::TimeTicks TicksFromSecondsF(double seconds) { 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return base::TimeTicks::FromInternalValue(seconds * 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Time::kMicrosecondsPerSecond); 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)scoped_ptr<Animation> CreateAnimation(double iterations, 2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) double duration, 2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) double playback_rate) { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> to_return(Animation::Create( 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) make_scoped_ptr( 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new FakeFloatAnimationCurve(duration)).PassAs<AnimationCurve>(), 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1, 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Animation::Opacity)); 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) to_return->set_iterations(iterations); 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) to_return->set_playback_rate(playback_rate); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return to_return.Pass(); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)scoped_ptr<Animation> CreateAnimation(double iterations, double duration) { 3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return CreateAnimation(iterations, duration, 1); 3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)scoped_ptr<Animation> CreateAnimation(double iterations) { 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return CreateAnimation(iterations, 1, 1); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, TrimTimeZeroIterations) { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(0)); 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, TrimTimeOneIteration) { 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST(AnimationTest, TrimTimeOneHalfIteration) { 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1.5)); 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.9, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.9))); 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, TrimTimeInfiniteIterations) { 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(-1)); 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeReverse) { 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(-1)); 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) anim->set_direction(Animation::Reverse); 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0))); 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); 86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateInfiniteIterations) { 89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(-1)); 90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) anim->set_direction(Animation::Alternate); 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); 97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateOneIteration) { 100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) anim->set_direction(Animation::Alternate); 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); 108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 110010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateTwoIterations) { 111010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(2)); 112010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) anim->set_direction(Animation::Alternate); 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75))); 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25))); 122010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 123010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateTwoHalfIterations) { 1256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(2.5)); 1266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) anim->set_direction(Animation::Alternate); 1276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); 1296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); 1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); 1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75))); 1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 1356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25))); 1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.50))); 1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.75))); 1386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateReverseInfiniteIterations) { 141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(-1)); 142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) anim->set_direction(Animation::AlternateReverse); 143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); 149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateReverseOneIteration) { 152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) anim->set_direction(Animation::AlternateReverse); 154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); 156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); 158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); 160010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 161010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 162010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateReverseTwoIterations) { 163010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(2)); 164010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) anim->set_direction(Animation::AlternateReverse); 165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); 167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); 169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); 171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75))); 172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25))); 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, TrimTimeStartTime) { 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->set_start_time(TicksFromSecondsF(4)); 179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0))); 181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5))); 182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0))); 183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(6.0))); 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 186010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeStartTimeReverse) { 187010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->set_start_time(TicksFromSecondsF(4)); 189010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) anim->set_direction(Animation::Reverse); 190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0))); 192cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5))); 193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0))); 194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(6.0))); 195010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 196010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, TrimTimeTimeOffset) { 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->set_time_offset(TimeDelta::FromMilliseconds(4000)); 200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->set_start_time(TicksFromSecondsF(4)); 201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 207010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeTimeOffsetReverse) { 208010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 209cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->set_time_offset(TimeDelta::FromMilliseconds(4000)); 210cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->set_start_time(TicksFromSecondsF(4)); 211010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) anim->set_direction(Animation::Reverse); 212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 216010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 217010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 218a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST(AnimationTest, TrimTimeNegativeTimeOffset) { 219a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 220cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->set_time_offset(TimeDelta::FromMilliseconds(-4000)); 221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 222cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0))); 224cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5))); 225cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0))); 226a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 228010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeNegativeTimeOffsetReverse) { 229010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 230cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->set_time_offset(TimeDelta::FromMilliseconds(-4000)); 231010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) anim->set_direction(Animation::Reverse); 232010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 233cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 234cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0))); 235cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5))); 236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0))); 237010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 238010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, TrimTimePauseResume) { 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 241cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); 242cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 243cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 244cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Paused, TicksFromSecondsF(0.5)); 245cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0))); 246cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(1024.0)); 247cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0))); 248cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.5))); 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 251010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimePauseResumeReverse) { 252010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 253010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) anim->set_direction(Animation::Reverse); 254cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); 255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 256cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Paused, TicksFromSecondsF(0.25)); 258cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0))); 259cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(1024.0)); 260cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0))); 261cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.75))); 262010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 263010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, TrimTimeSuspendResume) { 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 266cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); 267cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 268cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 269cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->Suspend(TicksFromSecondsF(0.5)); 270cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0))); 271cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->Resume(TicksFromSecondsF(1024)); 272cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0))); 273cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.5))); 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 276010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeSuspendResumeReverse) { 277010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 278010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) anim->set_direction(Animation::Reverse); 279cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); 280cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 281cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); 282cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->Suspend(TicksFromSecondsF(0.75)); 283cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0))); 284cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->Resume(TicksFromSecondsF(1024)); 285cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0))); 286cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.25))); 287010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 288010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, TrimTimeZeroDuration) { 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(0, 0)); 291cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); 292cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 293cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 294cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 29758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(AnimationTest, TrimTimeStarting) { 29858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1, 5.0)); 299cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Starting, TicksFromSecondsF(0.0)); 300cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 301cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 303cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->set_time_offset(TimeDelta::FromMilliseconds(2000)); 304cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 305cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 307cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->set_start_time(TicksFromSecondsF(1.0)); 308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 310cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 311cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(3.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 31258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 31358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 31458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(AnimationTest, TrimTimeNeedsSynchronizedStartTime) { 31558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1, 5.0)); 316cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); 31758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) anim->set_needs_synchronized_start_time(true); 318cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 319cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 321cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->set_time_offset(TimeDelta::FromMilliseconds(2000)); 322cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 323cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 324cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 325cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->set_start_time(TicksFromSecondsF(1.0)); 32658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) anim->set_needs_synchronized_start_time(false); 327cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 328cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 329cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(3.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 33058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 33158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, IsFinishedAtZeroIterations) { 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(0)); 334cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); 335cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0))); 336cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); 337cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.0))); 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, IsFinishedAtOneIteration) { 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 342cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); 343cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0))); 344cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); 345cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.0))); 346cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(2.0))); 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, IsFinishedAtInfiniteIterations) { 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(-1)); 351cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); 352cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); 353cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.5))); 354cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(1.0))); 355cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(1.5))); 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 358a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST(AnimationTest, IsFinishedNegativeTimeOffset) { 359a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 360cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->set_time_offset(TimeDelta::FromMilliseconds(-500)); 361cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); 362a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 363cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0))); 364cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); 365cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.5))); 366cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(1.0))); 367cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.5))); 368cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(2.0))); 369cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(2.5))); 370a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 371a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 372a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST(AnimationTest, IsFinishedPositiveTimeOffset) { 373a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 374cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->set_time_offset(TimeDelta::FromMilliseconds(500)); 375cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); 376a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 377cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0))); 378cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); 379cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.5))); 380cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.0))); 381a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 382a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, IsFinishedAtNotRunning) { 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(0)); 385cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); 386cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); 387cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Paused, TicksFromSecondsF(0.0)); 388cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); 389cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::WaitingForTargetAvailability, 390cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TicksFromSecondsF(0.0)); 391cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); 392cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Finished, TicksFromSecondsF(0.0)); 393cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); 394cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Aborted, TicksFromSecondsF(0.0)); 395cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0))); 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, IsFinished) { 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 400cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(anim->is_finished()); 402cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Paused, TicksFromSecondsF(0.0)); 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(anim->is_finished()); 404cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::WaitingForTargetAvailability, 405cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TicksFromSecondsF(0.0)); 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(anim->is_finished()); 407cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Finished, TicksFromSecondsF(0.0)); 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(anim->is_finished()); 409cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Aborted, TicksFromSecondsF(0.0)); 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(anim->is_finished()); 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, IsFinishedNeedsSynchronizedStartTime) { 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 415cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(2.0)); 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(anim->is_finished()); 417cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Paused, TicksFromSecondsF(2.0)); 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(anim->is_finished()); 419cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::WaitingForTargetAvailability, 420cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TicksFromSecondsF(2.0)); 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(anim->is_finished()); 422cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Finished, TicksFromSecondsF(0.0)); 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(anim->is_finished()); 424cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Aborted, TicksFromSecondsF(0.0)); 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(anim->is_finished()); 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, RunStateChangesIgnoredWhileSuspended) { 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1)); 430cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->Suspend(TicksFromSecondsF(0)); 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(Animation::Paused, anim->run_state()); 432cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(Animation::Paused, anim->run_state()); 434cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->Resume(TicksFromSecondsF(0)); 435cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(Animation::Running, anim->run_state()); 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 43903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackNormal) { 44003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1, 1, 1)); 44103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 44203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 44303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 44403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 44503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 44603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 44703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 44803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackSlow) { 44903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1, 1, 0.5)); 45003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 45103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 45203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 45303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 45403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 45503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0))); 45603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 45703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 45803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackFast) { 45903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1, 4, 2)); 46003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 46103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 46203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 46303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 46403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); 46503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 46603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5))); 46703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 46803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 46903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackNormalReverse) { 47003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1, 2, -1)); 47103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 47203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0))); 47303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 47403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 47503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); 47603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 47703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5))); 47803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 47903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 48003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackSlowReverse) { 48103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1, 2, -0.5)); 48203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 48303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0))); 48403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 48503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 48603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); 48703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 48803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5))); 48903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3))); 49003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5))); 49103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4))); 49203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5))); 49303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 49403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 49503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackFastReverse) { 49603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1, 2, -2)); 49703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 49803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0))); 49903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); 50003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 50103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); 50203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 50303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); 50403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 50503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 50603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackFastInfiniteIterations) { 50703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(-1, 4, 4)); 50803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 50903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 51003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 51103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); 51203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1000.0))); 51303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1000.5))); 51403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 51503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 51603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackNormalDoubleReverse) { 51703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1, 1, -1)); 51803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) anim->set_direction(Animation::Reverse); 51903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 52003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 52103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 52203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 52303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 52403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 52503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 52603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackFastDoubleReverse) { 52703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(1, 4, -2)); 52803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) anim->set_direction(Animation::Reverse); 52903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 53003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 53103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 53203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 53303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); 53403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 53503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5))); 53603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 53703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 53803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFast) { 53903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(2, 2, 2)); 54003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) anim->set_direction(Animation::Alternate); 54103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 54203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); 54303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 54403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); 54503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 54603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); 54703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); 54803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75))); 54903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 55003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25))); 55103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 55203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 55303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFastReverse) { 55403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(2, 2, 2)); 55503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) anim->set_direction(Animation::AlternateReverse); 55603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 55703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 55803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); 55903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 56003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); 56103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 56203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); 56303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); 56403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75))); 56503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 56603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25))); 56703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 56803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 56903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFastDoubleReverse) { 57003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<Animation> anim(CreateAnimation(2, 2, -2)); 57103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) anim->set_direction(Animation::AlternateReverse); 5721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 5731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); 5741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 5751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); 5761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 5771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); 5781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); 5791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75))); 5801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 5811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25))); 5821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 5831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(AnimationTest, 5851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TrimTimeAlternateReverseThreeIterationsPlaybackFastAlternateReverse) { 5861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<Animation> anim(CreateAnimation(3, 2, -2)); 5871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_direction(Animation::AlternateReverse); 58803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 58903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); 59003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 59103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); 59203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 59303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); 59403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); 59503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75))); 59603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 5971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25))); 5981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5))); 5991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.75))); 6001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0))); 6011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.25))); 6021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(AnimationTest, 6051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TrimTimeAlternateReverseTwoIterationsPlaybackNormalAlternate) { 6061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<Animation> anim(CreateAnimation(2, 2, -1)); 6071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_direction(Animation::Alternate); 6081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 6091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 6101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 6111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); 6121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 6131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5))); 6141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0))); 6151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5))); 6161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0))); 6171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5))); 6181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(AnimationTest, TrimTimeIterationStart) { 6211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<Animation> anim(CreateAnimation(2, 1, 1)); 6221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_iteration_start(0.5); 623ab8f6f0bd665d3c1ff476eb06c58c42630e462d4Ben Murdoch EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 6241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 6251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 6261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 6271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); 6281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 6291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5))); 6301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(AnimationTest, TrimTimeIterationStartAlternate) { 6331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<Animation> anim(CreateAnimation(2, 1, 1)); 6341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_direction(Animation::Alternate); 6351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_iteration_start(0.3); 636ab8f6f0bd665d3c1ff476eb06c58c42630e462d4Ben Murdoch EXPECT_EQ(0.3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 6371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 6381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.8, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 6391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.7))); 6401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.7, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 6411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.2))); 6421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.7))); 6431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(AnimationTest, TrimTimeIterationStartAlternateThreeIterations) { 6461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<Animation> anim(CreateAnimation(3, 1, 1)); 6471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_direction(Animation::Alternate); 6481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_iteration_start(1); 649ab8f6f0bd665d3c1ff476eb06c58c42630e462d4Ben Murdoch EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); 6501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 6511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); 6521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 6531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); 6541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 6551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5))); 6561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0))); 6571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5))); 6581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(AnimationTest, 6611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TrimTimeIterationStartAlternateThreeIterationsPlaybackReverse) { 6621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<Animation> anim(CreateAnimation(3, 1, -1)); 6631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_direction(Animation::Alternate); 6641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_iteration_start(1); 6651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); 6661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); 6671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); 6681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0))); 6691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5))); 6701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(AnimationTest, InEffectFillMode) { 6731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<Animation> anim(CreateAnimation(1)); 6741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_fill_mode(Animation::FillModeNone); 6751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0))); 6761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); 6771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); 6781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_fill_mode(Animation::FillModeForwards); 6801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0))); 6811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); 6821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); 6831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_fill_mode(Animation::FillModeBackwards); 6851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0))); 6861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); 6871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); 6881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_fill_mode(Animation::FillModeBoth); 6901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0))); 6911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); 6921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); 6931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(AnimationTest, InEffectFillModePlayback) { 6961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<Animation> anim(CreateAnimation(1, 1, -1)); 6971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_fill_mode(Animation::FillModeNone); 6981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0))); 6991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); 7001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); 7011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_fill_mode(Animation::FillModeForwards); 7031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0))); 7041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); 7051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); 7061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_fill_mode(Animation::FillModeBackwards); 7081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0))); 7091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); 7101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); 7111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci anim->set_fill_mode(Animation::FillModeBoth); 7131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0))); 7141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0))); 7151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0))); 71603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 71703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 720