| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/animation/InterpolableValue.h" | 5 #include "core/animation/InterpolableValue.h" |
| 6 | 6 |
| 7 #include "core/animation/LegacyStyleInterpolation.h" | 7 #include "core/animation/LegacyStyleInterpolation.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| 11 namespace blink { | 11 namespace blink { |
| 12 | 12 |
| 13 namespace { | 13 namespace { |
| 14 | 14 |
| 15 class SampleInterpolation : public LegacyStyleInterpolation { | 15 class SampleInterpolation : public LegacyStyleInterpolation { |
| 16 public: | 16 public: |
| 17 static PassRefPtr<Interpolation> create( | 17 static PassRefPtr<LegacyStyleInterpolation> create( |
| 18 std::unique_ptr<InterpolableValue> start, | 18 std::unique_ptr<InterpolableValue> start, |
| 19 std::unique_ptr<InterpolableValue> end) { | 19 std::unique_ptr<InterpolableValue> end) { |
| 20 return adoptRef(new SampleInterpolation(std::move(start), std::move(end))); | 20 return adoptRef(new SampleInterpolation(std::move(start), std::move(end))); |
| 21 } | 21 } |
| 22 | 22 |
| 23 private: | 23 private: |
| 24 SampleInterpolation(std::unique_ptr<InterpolableValue> start, | 24 SampleInterpolation(std::unique_ptr<InterpolableValue> start, |
| 25 std::unique_ptr<InterpolableValue> end) | 25 std::unique_ptr<InterpolableValue> end) |
| 26 : LegacyStyleInterpolation(std::move(start), | 26 : LegacyStyleInterpolation(std::move(start), |
| 27 std::move(end), | 27 std::move(end), |
| 28 CSSPropertyBackgroundColor) {} | 28 CSSPropertyBackgroundColor) {} |
| 29 }; | 29 }; |
| 30 | 30 |
| 31 } // namespace | 31 } // namespace |
| 32 | 32 |
| 33 class AnimationInterpolableValueTest : public ::testing::Test { | 33 class AnimationInterpolableValueTest : public ::testing::Test { |
| 34 protected: | 34 protected: |
| 35 InterpolableValue* interpolationValue(Interpolation& interpolation) { | 35 InterpolableValue* interpolationValue( |
| 36 LegacyStyleInterpolation& interpolation) { |
| 36 return interpolation.getCachedValueForTesting(); | 37 return interpolation.getCachedValueForTesting(); |
| 37 } | 38 } |
| 38 | 39 |
| 39 double interpolateNumbers(double a, double b, double progress) { | 40 double interpolateNumbers(double a, double b, double progress) { |
| 40 RefPtr<Interpolation> i = SampleInterpolation::create( | 41 RefPtr<LegacyStyleInterpolation> i = SampleInterpolation::create( |
| 41 InterpolableNumber::create(a), InterpolableNumber::create(b)); | 42 InterpolableNumber::create(a), InterpolableNumber::create(b)); |
| 42 i->interpolate(0, progress); | 43 i->interpolate(0, progress); |
| 43 return toInterpolableNumber(interpolationValue(*i.get()))->value(); | 44 return toInterpolableNumber(interpolationValue(*i.get()))->value(); |
| 44 } | 45 } |
| 45 | 46 |
| 46 void scaleAndAdd(InterpolableValue& base, | 47 void scaleAndAdd(InterpolableValue& base, |
| 47 double scale, | 48 double scale, |
| 48 const InterpolableValue& add) { | 49 const InterpolableValue& add) { |
| 49 base.scaleAndAdd(scale, add); | 50 base.scaleAndAdd(scale, add); |
| 50 } | 51 } |
| 51 | 52 |
| 52 PassRefPtr<Interpolation> interpolateLists( | 53 PassRefPtr<LegacyStyleInterpolation> interpolateLists( |
| 53 std::unique_ptr<InterpolableList> listA, | 54 std::unique_ptr<InterpolableList> listA, |
| 54 std::unique_ptr<InterpolableList> listB, | 55 std::unique_ptr<InterpolableList> listB, |
| 55 double progress) { | 56 double progress) { |
| 56 RefPtr<Interpolation> i = | 57 RefPtr<LegacyStyleInterpolation> i = |
| 57 SampleInterpolation::create(std::move(listA), std::move(listB)); | 58 SampleInterpolation::create(std::move(listA), std::move(listB)); |
| 58 i->interpolate(0, progress); | 59 i->interpolate(0, progress); |
| 59 return i; | 60 return i; |
| 60 } | 61 } |
| 61 }; | 62 }; |
| 62 | 63 |
| 63 TEST_F(AnimationInterpolableValueTest, InterpolateNumbers) { | 64 TEST_F(AnimationInterpolableValueTest, InterpolateNumbers) { |
| 64 EXPECT_FLOAT_EQ(126, interpolateNumbers(42, 0, -2)); | 65 EXPECT_FLOAT_EQ(126, interpolateNumbers(42, 0, -2)); |
| 65 EXPECT_FLOAT_EQ(42, interpolateNumbers(42, 0, 0)); | 66 EXPECT_FLOAT_EQ(42, interpolateNumbers(42, 0, 0)); |
| 66 EXPECT_FLOAT_EQ(29.4f, interpolateNumbers(42, 0, 0.3)); | 67 EXPECT_FLOAT_EQ(29.4f, interpolateNumbers(42, 0, 0.3)); |
| 67 EXPECT_FLOAT_EQ(21, interpolateNumbers(42, 0, 0.5)); | 68 EXPECT_FLOAT_EQ(21, interpolateNumbers(42, 0, 0.5)); |
| 68 EXPECT_FLOAT_EQ(0, interpolateNumbers(42, 0, 1)); | 69 EXPECT_FLOAT_EQ(0, interpolateNumbers(42, 0, 1)); |
| 69 EXPECT_FLOAT_EQ(-21, interpolateNumbers(42, 0, 1.5)); | 70 EXPECT_FLOAT_EQ(-21, interpolateNumbers(42, 0, 1.5)); |
| 70 } | 71 } |
| 71 | 72 |
| 72 TEST_F(AnimationInterpolableValueTest, SimpleList) { | 73 TEST_F(AnimationInterpolableValueTest, SimpleList) { |
| 73 std::unique_ptr<InterpolableList> listA = InterpolableList::create(3); | 74 std::unique_ptr<InterpolableList> listA = InterpolableList::create(3); |
| 74 listA->set(0, InterpolableNumber::create(0)); | 75 listA->set(0, InterpolableNumber::create(0)); |
| 75 listA->set(1, InterpolableNumber::create(42)); | 76 listA->set(1, InterpolableNumber::create(42)); |
| 76 listA->set(2, InterpolableNumber::create(20.5)); | 77 listA->set(2, InterpolableNumber::create(20.5)); |
| 77 | 78 |
| 78 std::unique_ptr<InterpolableList> listB = InterpolableList::create(3); | 79 std::unique_ptr<InterpolableList> listB = InterpolableList::create(3); |
| 79 listB->set(0, InterpolableNumber::create(100)); | 80 listB->set(0, InterpolableNumber::create(100)); |
| 80 listB->set(1, InterpolableNumber::create(-200)); | 81 listB->set(1, InterpolableNumber::create(-200)); |
| 81 listB->set(2, InterpolableNumber::create(300)); | 82 listB->set(2, InterpolableNumber::create(300)); |
| 82 | 83 |
| 83 RefPtr<Interpolation> i = | 84 RefPtr<LegacyStyleInterpolation> i = |
| 84 interpolateLists(std::move(listA), std::move(listB), 0.3); | 85 interpolateLists(std::move(listA), std::move(listB), 0.3); |
| 85 InterpolableList* outList = toInterpolableList(interpolationValue(*i.get())); | 86 InterpolableList* outList = toInterpolableList(interpolationValue(*i.get())); |
| 86 EXPECT_FLOAT_EQ(30, toInterpolableNumber(outList->get(0))->value()); | 87 EXPECT_FLOAT_EQ(30, toInterpolableNumber(outList->get(0))->value()); |
| 87 EXPECT_FLOAT_EQ(-30.6f, toInterpolableNumber(outList->get(1))->value()); | 88 EXPECT_FLOAT_EQ(-30.6f, toInterpolableNumber(outList->get(1))->value()); |
| 88 EXPECT_FLOAT_EQ(104.35f, toInterpolableNumber(outList->get(2))->value()); | 89 EXPECT_FLOAT_EQ(104.35f, toInterpolableNumber(outList->get(2))->value()); |
| 89 } | 90 } |
| 90 | 91 |
| 91 TEST_F(AnimationInterpolableValueTest, NestedList) { | 92 TEST_F(AnimationInterpolableValueTest, NestedList) { |
| 92 std::unique_ptr<InterpolableList> listA = InterpolableList::create(3); | 93 std::unique_ptr<InterpolableList> listA = InterpolableList::create(3); |
| 93 listA->set(0, InterpolableNumber::create(0)); | 94 listA->set(0, InterpolableNumber::create(0)); |
| 94 std::unique_ptr<InterpolableList> subListA = InterpolableList::create(1); | 95 std::unique_ptr<InterpolableList> subListA = InterpolableList::create(1); |
| 95 subListA->set(0, InterpolableNumber::create(100)); | 96 subListA->set(0, InterpolableNumber::create(100)); |
| 96 listA->set(1, std::move(subListA)); | 97 listA->set(1, std::move(subListA)); |
| 97 listA->set(2, InterpolableNumber::create(0)); | 98 listA->set(2, InterpolableNumber::create(0)); |
| 98 | 99 |
| 99 std::unique_ptr<InterpolableList> listB = InterpolableList::create(3); | 100 std::unique_ptr<InterpolableList> listB = InterpolableList::create(3); |
| 100 listB->set(0, InterpolableNumber::create(100)); | 101 listB->set(0, InterpolableNumber::create(100)); |
| 101 std::unique_ptr<InterpolableList> subListB = InterpolableList::create(1); | 102 std::unique_ptr<InterpolableList> subListB = InterpolableList::create(1); |
| 102 subListB->set(0, InterpolableNumber::create(50)); | 103 subListB->set(0, InterpolableNumber::create(50)); |
| 103 listB->set(1, std::move(subListB)); | 104 listB->set(1, std::move(subListB)); |
| 104 listB->set(2, InterpolableNumber::create(1)); | 105 listB->set(2, InterpolableNumber::create(1)); |
| 105 | 106 |
| 106 RefPtr<Interpolation> i = | 107 RefPtr<LegacyStyleInterpolation> i = |
| 107 interpolateLists(std::move(listA), std::move(listB), 0.5); | 108 interpolateLists(std::move(listA), std::move(listB), 0.5); |
| 108 InterpolableList* outList = toInterpolableList(interpolationValue(*i.get())); | 109 InterpolableList* outList = toInterpolableList(interpolationValue(*i.get())); |
| 109 EXPECT_FLOAT_EQ(50, toInterpolableNumber(outList->get(0))->value()); | 110 EXPECT_FLOAT_EQ(50, toInterpolableNumber(outList->get(0))->value()); |
| 110 EXPECT_FLOAT_EQ( | 111 EXPECT_FLOAT_EQ( |
| 111 75, toInterpolableNumber(toInterpolableList(outList->get(1))->get(0)) | 112 75, toInterpolableNumber(toInterpolableList(outList->get(1))->get(0)) |
| 112 ->value()); | 113 ->value()); |
| 113 EXPECT_FLOAT_EQ(0.5, toInterpolableNumber(outList->get(2))->value()); | 114 EXPECT_FLOAT_EQ(0.5, toInterpolableNumber(outList->get(2))->value()); |
| 114 } | 115 } |
| 115 | 116 |
| 116 TEST_F(AnimationInterpolableValueTest, ScaleAndAddNumbers) { | 117 TEST_F(AnimationInterpolableValueTest, ScaleAndAddNumbers) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 136 addList->set(0, InterpolableNumber::create(1)); | 137 addList->set(0, InterpolableNumber::create(1)); |
| 137 addList->set(1, InterpolableNumber::create(2)); | 138 addList->set(1, InterpolableNumber::create(2)); |
| 138 addList->set(2, InterpolableNumber::create(3)); | 139 addList->set(2, InterpolableNumber::create(3)); |
| 139 scaleAndAdd(*baseList, 2, *addList); | 140 scaleAndAdd(*baseList, 2, *addList); |
| 140 EXPECT_FLOAT_EQ(11, toInterpolableNumber(baseList->get(0))->value()); | 141 EXPECT_FLOAT_EQ(11, toInterpolableNumber(baseList->get(0))->value()); |
| 141 EXPECT_FLOAT_EQ(22, toInterpolableNumber(baseList->get(1))->value()); | 142 EXPECT_FLOAT_EQ(22, toInterpolableNumber(baseList->get(1))->value()); |
| 142 EXPECT_FLOAT_EQ(33, toInterpolableNumber(baseList->get(2))->value()); | 143 EXPECT_FLOAT_EQ(33, toInterpolableNumber(baseList->get(2))->value()); |
| 143 } | 144 } |
| 144 | 145 |
| 145 } // namespace blink | 146 } // namespace blink |
| OLD | NEW |