| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 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 "sky/engine/core/animation/InterpolableValue.h" | |
| 6 | |
| 7 #include "sky/engine/core/animation/Interpolation.h" | |
| 8 | |
| 9 #include <gtest/gtest.h> | |
| 10 | |
| 11 namespace blink { | |
| 12 | |
| 13 class AnimationInterpolableValueTest : public ::testing::Test { | |
| 14 protected: | |
| 15 InterpolableValue* interpolationValue(Interpolation& interpolation) | |
| 16 { | |
| 17 return interpolation.getCachedValueForTesting(); | |
| 18 } | |
| 19 | |
| 20 double interpolateNumbers(double a, double b, double progress) | |
| 21 { | |
| 22 RefPtr<Interpolation> i = Interpolation::create(InterpolableNumber::crea
te(a), InterpolableNumber::create(b)); | |
| 23 i->interpolate(0, progress); | |
| 24 return toInterpolableNumber(interpolationValue(*i.get()))->value(); | |
| 25 } | |
| 26 | |
| 27 bool interpolateBools(bool a, bool b, double progress) | |
| 28 { | |
| 29 RefPtr<Interpolation> i = Interpolation::create(InterpolableBool::create
(a), InterpolableBool::create(b)); | |
| 30 i->interpolate(0, progress); | |
| 31 return toInterpolableBool(interpolationValue(*i.get()))->value(); | |
| 32 } | |
| 33 | |
| 34 PassRefPtr<Interpolation> interpolateLists(PassOwnPtr<InterpolableList> list
A, PassOwnPtr<InterpolableList> listB, double progress) | |
| 35 { | |
| 36 RefPtr<Interpolation> i = Interpolation::create(listA, listB); | |
| 37 i->interpolate(0, progress); | |
| 38 return i; | |
| 39 } | |
| 40 }; | |
| 41 | |
| 42 TEST_F(AnimationInterpolableValueTest, InterpolateNumbers) | |
| 43 { | |
| 44 EXPECT_FLOAT_EQ(126, interpolateNumbers(42, 0, -2)); | |
| 45 EXPECT_FLOAT_EQ(42, interpolateNumbers(42, 0, 0)); | |
| 46 EXPECT_FLOAT_EQ(29.4f, interpolateNumbers(42, 0, 0.3)); | |
| 47 EXPECT_FLOAT_EQ(21, interpolateNumbers(42, 0, 0.5)); | |
| 48 EXPECT_FLOAT_EQ(0, interpolateNumbers(42, 0, 1)); | |
| 49 EXPECT_FLOAT_EQ(-21, interpolateNumbers(42, 0, 1.5)); | |
| 50 } | |
| 51 | |
| 52 TEST_F(AnimationInterpolableValueTest, InterpolateBools) | |
| 53 { | |
| 54 EXPECT_FALSE(interpolateBools(false, true, -1)); | |
| 55 EXPECT_FALSE(interpolateBools(false, true, 0)); | |
| 56 EXPECT_FALSE(interpolateBools(false, true, 0.3)); | |
| 57 EXPECT_TRUE(interpolateBools(false, true, 0.5)); | |
| 58 EXPECT_TRUE(interpolateBools(false, true, 1)); | |
| 59 EXPECT_TRUE(interpolateBools(false, true, 2)); | |
| 60 } | |
| 61 | |
| 62 TEST_F(AnimationInterpolableValueTest, SimpleList) | |
| 63 { | |
| 64 OwnPtr<InterpolableList> listA = InterpolableList::create(3); | |
| 65 listA->set(0, InterpolableNumber::create(0)); | |
| 66 listA->set(1, InterpolableNumber::create(42)); | |
| 67 listA->set(2, InterpolableNumber::create(20.5)); | |
| 68 | |
| 69 OwnPtr<InterpolableList> listB = InterpolableList::create(3); | |
| 70 listB->set(0, InterpolableNumber::create(100)); | |
| 71 listB->set(1, InterpolableNumber::create(-200)); | |
| 72 listB->set(2, InterpolableNumber::create(300)); | |
| 73 | |
| 74 RefPtr<Interpolation> i = interpolateLists(listA.release(), listB.release(),
0.3); | |
| 75 InterpolableList* outList = toInterpolableList(interpolationValue(*i.get()))
; | |
| 76 EXPECT_FLOAT_EQ(30, toInterpolableNumber(outList->get(0))->value()); | |
| 77 EXPECT_FLOAT_EQ(-30.6f, toInterpolableNumber(outList->get(1))->value()); | |
| 78 EXPECT_FLOAT_EQ(104.35f, toInterpolableNumber(outList->get(2))->value()); | |
| 79 } | |
| 80 | |
| 81 TEST_F(AnimationInterpolableValueTest, NestedList) | |
| 82 { | |
| 83 OwnPtr<InterpolableList> listA = InterpolableList::create(3); | |
| 84 listA->set(0, InterpolableNumber::create(0)); | |
| 85 OwnPtr<InterpolableList> subListA = InterpolableList::create(1); | |
| 86 subListA->set(0, InterpolableNumber::create(100)); | |
| 87 listA->set(1, subListA.release()); | |
| 88 listA->set(2, InterpolableBool::create(false)); | |
| 89 | |
| 90 OwnPtr<InterpolableList> listB = InterpolableList::create(3); | |
| 91 listB->set(0, InterpolableNumber::create(100)); | |
| 92 OwnPtr<InterpolableList> subListB = InterpolableList::create(1); | |
| 93 subListB->set(0, InterpolableNumber::create(50)); | |
| 94 listB->set(1, subListB.release()); | |
| 95 listB->set(2, InterpolableBool::create(true)); | |
| 96 | |
| 97 RefPtr<Interpolation> i = interpolateLists(listA.release(), listB.release(),
0.5); | |
| 98 InterpolableList* outList = toInterpolableList(interpolationValue(*i.get()))
; | |
| 99 EXPECT_FLOAT_EQ(50, toInterpolableNumber(outList->get(0))->value()); | |
| 100 EXPECT_FLOAT_EQ(75, toInterpolableNumber(toInterpolableList(outList->get(1))
->get(0))->value()); | |
| 101 EXPECT_TRUE(toInterpolableBool(outList->get(2))->value()); | |
| 102 } | |
| 103 | |
| 104 } | |
| OLD | NEW |