| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 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 "cc/animation/keyframed_animation_curve.h" | 5 #include "cc/animation/keyframed_animation_curve.h" |
| 6 | 6 |
| 7 #include "cc/animation/transform_operations.h" | 7 #include "cc/animation/transform_operations.h" |
| 8 #include "testing/gmock/include/gmock/gmock.h" | 8 #include "testing/gmock/include/gmock/gmock.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 #include "ui/gfx/animation/tween.h" | 10 #include "ui/gfx/animation/tween.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 EXPECT_EQ(1u, filter.size()); | 22 EXPECT_EQ(1u, filter.size()); |
| 23 EXPECT_EQ(FilterOperation::BRIGHTNESS, filter.at(0).type()); | 23 EXPECT_EQ(FilterOperation::BRIGHTNESS, filter.at(0).type()); |
| 24 EXPECT_FLOAT_EQ(brightness, filter.at(0).amount()); | 24 EXPECT_FLOAT_EQ(brightness, filter.at(0).amount()); |
| 25 } | 25 } |
| 26 | 26 |
| 27 // Tests that a color animation with one keyframe works as expected. | 27 // Tests that a color animation with one keyframe works as expected. |
| 28 TEST(KeyframedAnimationCurveTest, OneColorKeyFrame) { | 28 TEST(KeyframedAnimationCurveTest, OneColorKeyFrame) { |
| 29 SkColor color = SkColorSetARGB(255, 255, 255, 255); | 29 SkColor color = SkColorSetARGB(255, 255, 255, 255); |
| 30 scoped_ptr<KeyframedColorAnimationCurve> curve( | 30 scoped_ptr<KeyframedColorAnimationCurve> curve( |
| 31 KeyframedColorAnimationCurve::Create()); | 31 KeyframedColorAnimationCurve::Create()); |
| 32 curve->AddKeyframe(ColorKeyframe::Create(0.0, color, nullptr)); | 32 curve->AddKeyframe(ColorKeyframe::Create(base::TimeDelta(), color, nullptr)); |
| 33 | 33 |
| 34 EXPECT_SKCOLOR_EQ(color, curve->GetValue(-1.f)); | 34 EXPECT_SKCOLOR_EQ(color, |
| 35 EXPECT_SKCOLOR_EQ(color, curve->GetValue(0.f)); | 35 curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 36 EXPECT_SKCOLOR_EQ(color, curve->GetValue(0.5f)); | 36 EXPECT_SKCOLOR_EQ(color, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 37 EXPECT_SKCOLOR_EQ(color, curve->GetValue(1.f)); | 37 EXPECT_SKCOLOR_EQ(color, |
| 38 EXPECT_SKCOLOR_EQ(color, curve->GetValue(2.f)); | 38 curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 39 EXPECT_SKCOLOR_EQ(color, curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| 40 EXPECT_SKCOLOR_EQ(color, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 39 } | 41 } |
| 40 | 42 |
| 41 // Tests that a color animation with two keyframes works as expected. | 43 // Tests that a color animation with two keyframes works as expected. |
| 42 TEST(KeyframedAnimationCurveTest, TwoColorKeyFrame) { | 44 TEST(KeyframedAnimationCurveTest, TwoColorKeyFrame) { |
| 43 SkColor color_a = SkColorSetARGB(255, 255, 0, 0); | 45 SkColor color_a = SkColorSetARGB(255, 255, 0, 0); |
| 44 SkColor color_b = SkColorSetARGB(255, 0, 255, 0); | 46 SkColor color_b = SkColorSetARGB(255, 0, 255, 0); |
| 45 SkColor color_midpoint = gfx::Tween::ColorValueBetween(0.5, color_a, color_b); | 47 SkColor color_midpoint = gfx::Tween::ColorValueBetween(0.5, color_a, color_b); |
| 46 scoped_ptr<KeyframedColorAnimationCurve> curve( | 48 scoped_ptr<KeyframedColorAnimationCurve> curve( |
| 47 KeyframedColorAnimationCurve::Create()); | 49 KeyframedColorAnimationCurve::Create()); |
| 48 curve->AddKeyframe(ColorKeyframe::Create(0.0, color_a, nullptr)); | 50 curve->AddKeyframe( |
| 49 curve->AddKeyframe(ColorKeyframe::Create(1.0, color_b, nullptr)); | 51 ColorKeyframe::Create(base::TimeDelta(), color_a, nullptr)); |
| 52 curve->AddKeyframe(ColorKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), |
| 53 color_b, nullptr)); |
| 50 | 54 |
| 51 EXPECT_SKCOLOR_EQ(color_a, curve->GetValue(-1.f)); | 55 EXPECT_SKCOLOR_EQ(color_a, |
| 52 EXPECT_SKCOLOR_EQ(color_a, curve->GetValue(0.f)); | 56 curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 53 EXPECT_SKCOLOR_EQ(color_midpoint, curve->GetValue(0.5f)); | 57 EXPECT_SKCOLOR_EQ(color_a, |
| 54 EXPECT_SKCOLOR_EQ(color_b, curve->GetValue(1.f)); | 58 curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 55 EXPECT_SKCOLOR_EQ(color_b, curve->GetValue(2.f)); | 59 EXPECT_SKCOLOR_EQ(color_midpoint, |
| 60 curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 61 EXPECT_SKCOLOR_EQ(color_b, |
| 62 curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| 63 EXPECT_SKCOLOR_EQ(color_b, |
| 64 curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 56 } | 65 } |
| 57 | 66 |
| 58 // Tests that a color animation with three keyframes works as expected. | 67 // Tests that a color animation with three keyframes works as expected. |
| 59 TEST(KeyframedAnimationCurveTest, ThreeColorKeyFrame) { | 68 TEST(KeyframedAnimationCurveTest, ThreeColorKeyFrame) { |
| 60 SkColor color_a = SkColorSetARGB(255, 255, 0, 0); | 69 SkColor color_a = SkColorSetARGB(255, 255, 0, 0); |
| 61 SkColor color_b = SkColorSetARGB(255, 0, 255, 0); | 70 SkColor color_b = SkColorSetARGB(255, 0, 255, 0); |
| 62 SkColor color_c = SkColorSetARGB(255, 0, 0, 255); | 71 SkColor color_c = SkColorSetARGB(255, 0, 0, 255); |
| 63 SkColor color_midpoint1 = | 72 SkColor color_midpoint1 = |
| 64 gfx::Tween::ColorValueBetween(0.5, color_a, color_b); | 73 gfx::Tween::ColorValueBetween(0.5, color_a, color_b); |
| 65 SkColor color_midpoint2 = | 74 SkColor color_midpoint2 = |
| 66 gfx::Tween::ColorValueBetween(0.5, color_b, color_c); | 75 gfx::Tween::ColorValueBetween(0.5, color_b, color_c); |
| 67 scoped_ptr<KeyframedColorAnimationCurve> curve( | 76 scoped_ptr<KeyframedColorAnimationCurve> curve( |
| 68 KeyframedColorAnimationCurve::Create()); | 77 KeyframedColorAnimationCurve::Create()); |
| 69 curve->AddKeyframe(ColorKeyframe::Create(0.0, color_a, nullptr)); | 78 curve->AddKeyframe( |
| 70 curve->AddKeyframe(ColorKeyframe::Create(1.0, color_b, nullptr)); | 79 ColorKeyframe::Create(base::TimeDelta(), color_a, nullptr)); |
| 71 curve->AddKeyframe(ColorKeyframe::Create(2.0, color_c, nullptr)); | 80 curve->AddKeyframe(ColorKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), |
| 81 color_b, nullptr)); |
| 82 curve->AddKeyframe(ColorKeyframe::Create(base::TimeDelta::FromSecondsD(2.0), |
| 83 color_c, nullptr)); |
| 72 | 84 |
| 73 EXPECT_SKCOLOR_EQ(color_a, curve->GetValue(-1.f)); | 85 EXPECT_SKCOLOR_EQ(color_a, |
| 74 EXPECT_SKCOLOR_EQ(color_a, curve->GetValue(0.f)); | 86 curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 75 EXPECT_SKCOLOR_EQ(color_midpoint1, curve->GetValue(0.5f)); | 87 EXPECT_SKCOLOR_EQ(color_a, |
| 76 EXPECT_SKCOLOR_EQ(color_b, curve->GetValue(1.f)); | 88 curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 77 EXPECT_SKCOLOR_EQ(color_midpoint2, curve->GetValue(1.5f)); | 89 EXPECT_SKCOLOR_EQ(color_midpoint1, |
| 78 EXPECT_SKCOLOR_EQ(color_c, curve->GetValue(2.f)); | 90 curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 79 EXPECT_SKCOLOR_EQ(color_c, curve->GetValue(3.f)); | 91 EXPECT_SKCOLOR_EQ(color_b, |
| 92 curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| 93 EXPECT_SKCOLOR_EQ(color_midpoint2, |
| 94 curve->GetValue(base::TimeDelta::FromSecondsD(1.5f))); |
| 95 EXPECT_SKCOLOR_EQ(color_c, |
| 96 curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 97 EXPECT_SKCOLOR_EQ(color_c, |
| 98 curve->GetValue(base::TimeDelta::FromSecondsD(3.f))); |
| 80 } | 99 } |
| 81 | 100 |
| 82 // Tests that a colro animation with multiple keys at a given time works sanely. | 101 // Tests that a colro animation with multiple keys at a given time works sanely. |
| 83 TEST(KeyframedAnimationCurveTest, RepeatedColorKeyFrame) { | 102 TEST(KeyframedAnimationCurveTest, RepeatedColorKeyFrame) { |
| 84 SkColor color_a = SkColorSetARGB(255, 64, 0, 0); | 103 SkColor color_a = SkColorSetARGB(255, 64, 0, 0); |
| 85 SkColor color_b = SkColorSetARGB(255, 192, 0, 0); | 104 SkColor color_b = SkColorSetARGB(255, 192, 0, 0); |
| 86 | 105 |
| 87 scoped_ptr<KeyframedColorAnimationCurve> curve( | 106 scoped_ptr<KeyframedColorAnimationCurve> curve( |
| 88 KeyframedColorAnimationCurve::Create()); | 107 KeyframedColorAnimationCurve::Create()); |
| 89 curve->AddKeyframe(ColorKeyframe::Create(0.0, color_a, nullptr)); | 108 curve->AddKeyframe( |
| 90 curve->AddKeyframe(ColorKeyframe::Create(1.0, color_a, nullptr)); | 109 ColorKeyframe::Create(base::TimeDelta(), color_a, nullptr)); |
| 91 curve->AddKeyframe(ColorKeyframe::Create(1.0, color_b, nullptr)); | 110 curve->AddKeyframe(ColorKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), |
| 92 curve->AddKeyframe(ColorKeyframe::Create(2.0, color_b, nullptr)); | 111 color_a, nullptr)); |
| 112 curve->AddKeyframe(ColorKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), |
| 113 color_b, nullptr)); |
| 114 curve->AddKeyframe(ColorKeyframe::Create(base::TimeDelta::FromSecondsD(2.0), |
| 115 color_b, nullptr)); |
| 93 | 116 |
| 94 EXPECT_SKCOLOR_EQ(color_a, curve->GetValue(-1.f)); | 117 EXPECT_SKCOLOR_EQ(color_a, |
| 95 EXPECT_SKCOLOR_EQ(color_a, curve->GetValue(0.f)); | 118 curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 96 EXPECT_SKCOLOR_EQ(color_a, curve->GetValue(0.5f)); | 119 EXPECT_SKCOLOR_EQ(color_a, |
| 120 curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 121 EXPECT_SKCOLOR_EQ(color_a, |
| 122 curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 97 | 123 |
| 98 SkColor value = curve->GetValue(1.0f); | 124 SkColor value = curve->GetValue(base::TimeDelta::FromSecondsD(1.0f)); |
| 99 EXPECT_EQ(255u, SkColorGetA(value)); | 125 EXPECT_EQ(255u, SkColorGetA(value)); |
| 100 int red_value = SkColorGetR(value); | 126 int red_value = SkColorGetR(value); |
| 101 EXPECT_LE(64, red_value); | 127 EXPECT_LE(64, red_value); |
| 102 EXPECT_GE(192, red_value); | 128 EXPECT_GE(192, red_value); |
| 103 | 129 |
| 104 EXPECT_SKCOLOR_EQ(color_b, curve->GetValue(1.5f)); | 130 EXPECT_SKCOLOR_EQ(color_b, |
| 105 EXPECT_SKCOLOR_EQ(color_b, curve->GetValue(2.f)); | 131 curve->GetValue(base::TimeDelta::FromSecondsD(1.5f))); |
| 106 EXPECT_SKCOLOR_EQ(color_b, curve->GetValue(3.f)); | 132 EXPECT_SKCOLOR_EQ(color_b, |
| 133 curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 134 EXPECT_SKCOLOR_EQ(color_b, |
| 135 curve->GetValue(base::TimeDelta::FromSecondsD(3.f))); |
| 107 } | 136 } |
| 108 | 137 |
| 109 // Tests that a float animation with one keyframe works as expected. | 138 // Tests that a float animation with one keyframe works as expected. |
| 110 TEST(KeyframedAnimationCurveTest, OneFloatKeyframe) { | 139 TEST(KeyframedAnimationCurveTest, OneFloatKeyframe) { |
| 111 scoped_ptr<KeyframedFloatAnimationCurve> curve( | 140 scoped_ptr<KeyframedFloatAnimationCurve> curve( |
| 112 KeyframedFloatAnimationCurve::Create()); | 141 KeyframedFloatAnimationCurve::Create()); |
| 113 curve->AddKeyframe(FloatKeyframe::Create(0.0, 2.f, nullptr)); | 142 curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta(), 2.f, nullptr)); |
| 114 EXPECT_FLOAT_EQ(2.f, curve->GetValue(-1.f)); | 143 EXPECT_FLOAT_EQ(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 115 EXPECT_FLOAT_EQ(2.f, curve->GetValue(0.f)); | 144 EXPECT_FLOAT_EQ(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 116 EXPECT_FLOAT_EQ(2.f, curve->GetValue(0.5f)); | 145 EXPECT_FLOAT_EQ(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 117 EXPECT_FLOAT_EQ(2.f, curve->GetValue(1.f)); | 146 EXPECT_FLOAT_EQ(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| 118 EXPECT_FLOAT_EQ(2.f, curve->GetValue(2.f)); | 147 EXPECT_FLOAT_EQ(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 119 } | 148 } |
| 120 | 149 |
| 121 // Tests that a float animation with two keyframes works as expected. | 150 // Tests that a float animation with two keyframes works as expected. |
| 122 TEST(KeyframedAnimationCurveTest, TwoFloatKeyframe) { | 151 TEST(KeyframedAnimationCurveTest, TwoFloatKeyframe) { |
| 123 scoped_ptr<KeyframedFloatAnimationCurve> curve( | 152 scoped_ptr<KeyframedFloatAnimationCurve> curve( |
| 124 KeyframedFloatAnimationCurve::Create()); | 153 KeyframedFloatAnimationCurve::Create()); |
| 125 curve->AddKeyframe(FloatKeyframe::Create(0.0, 2.f, nullptr)); | 154 curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta(), 2.f, nullptr)); |
| 126 curve->AddKeyframe(FloatKeyframe::Create(1.0, 4.f, nullptr)); | 155 curve->AddKeyframe( |
| 127 EXPECT_FLOAT_EQ(2.f, curve->GetValue(-1.f)); | 156 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), 4.f, nullptr)); |
| 128 EXPECT_FLOAT_EQ(2.f, curve->GetValue(0.f)); | 157 EXPECT_FLOAT_EQ(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 129 EXPECT_FLOAT_EQ(3.f, curve->GetValue(0.5f)); | 158 EXPECT_FLOAT_EQ(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 130 EXPECT_FLOAT_EQ(4.f, curve->GetValue(1.f)); | 159 EXPECT_FLOAT_EQ(3.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 131 EXPECT_FLOAT_EQ(4.f, curve->GetValue(2.f)); | 160 EXPECT_FLOAT_EQ(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| 161 EXPECT_FLOAT_EQ(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 132 } | 162 } |
| 133 | 163 |
| 134 // Tests that a float animation with three keyframes works as expected. | 164 // Tests that a float animation with three keyframes works as expected. |
| 135 TEST(KeyframedAnimationCurveTest, ThreeFloatKeyframe) { | 165 TEST(KeyframedAnimationCurveTest, ThreeFloatKeyframe) { |
| 136 scoped_ptr<KeyframedFloatAnimationCurve> curve( | 166 scoped_ptr<KeyframedFloatAnimationCurve> curve( |
| 137 KeyframedFloatAnimationCurve::Create()); | 167 KeyframedFloatAnimationCurve::Create()); |
| 138 curve->AddKeyframe(FloatKeyframe::Create(0.0, 2.f, nullptr)); | 168 curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta(), 2.f, nullptr)); |
| 139 curve->AddKeyframe(FloatKeyframe::Create(1.0, 4.f, nullptr)); | 169 curve->AddKeyframe( |
| 140 curve->AddKeyframe(FloatKeyframe::Create(2.0, 8.f, nullptr)); | 170 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), 4.f, nullptr)); |
| 141 EXPECT_FLOAT_EQ(2.f, curve->GetValue(-1.f)); | 171 curve->AddKeyframe( |
| 142 EXPECT_FLOAT_EQ(2.f, curve->GetValue(0.f)); | 172 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(2.0), 8.f, nullptr)); |
| 143 EXPECT_FLOAT_EQ(3.f, curve->GetValue(0.5f)); | 173 EXPECT_FLOAT_EQ(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 144 EXPECT_FLOAT_EQ(4.f, curve->GetValue(1.f)); | 174 EXPECT_FLOAT_EQ(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 145 EXPECT_FLOAT_EQ(6.f, curve->GetValue(1.5f)); | 175 EXPECT_FLOAT_EQ(3.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 146 EXPECT_FLOAT_EQ(8.f, curve->GetValue(2.f)); | 176 EXPECT_FLOAT_EQ(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| 147 EXPECT_FLOAT_EQ(8.f, curve->GetValue(3.f)); | 177 EXPECT_FLOAT_EQ(6.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.5f))); |
| 178 EXPECT_FLOAT_EQ(8.f, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 179 EXPECT_FLOAT_EQ(8.f, curve->GetValue(base::TimeDelta::FromSecondsD(3.f))); |
| 148 } | 180 } |
| 149 | 181 |
| 150 // Tests that a float animation with multiple keys at a given time works sanely. | 182 // Tests that a float animation with multiple keys at a given time works sanely. |
| 151 TEST(KeyframedAnimationCurveTest, RepeatedFloatKeyTimes) { | 183 TEST(KeyframedAnimationCurveTest, RepeatedFloatKeyTimes) { |
| 152 scoped_ptr<KeyframedFloatAnimationCurve> curve( | 184 scoped_ptr<KeyframedFloatAnimationCurve> curve( |
| 153 KeyframedFloatAnimationCurve::Create()); | 185 KeyframedFloatAnimationCurve::Create()); |
| 154 curve->AddKeyframe(FloatKeyframe::Create(0.0, 4.f, nullptr)); | 186 curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta(), 4.f, nullptr)); |
| 155 curve->AddKeyframe(FloatKeyframe::Create(1.0, 4.f, nullptr)); | 187 curve->AddKeyframe( |
| 156 curve->AddKeyframe(FloatKeyframe::Create(1.0, 6.f, nullptr)); | 188 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), 4.f, nullptr)); |
| 157 curve->AddKeyframe(FloatKeyframe::Create(2.0, 6.f, nullptr)); | 189 curve->AddKeyframe( |
| 190 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), 6.f, nullptr)); |
| 191 curve->AddKeyframe( |
| 192 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(2.0), 6.f, nullptr)); |
| 158 | 193 |
| 159 EXPECT_FLOAT_EQ(4.f, curve->GetValue(-1.f)); | 194 EXPECT_FLOAT_EQ(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 160 EXPECT_FLOAT_EQ(4.f, curve->GetValue(0.f)); | 195 EXPECT_FLOAT_EQ(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 161 EXPECT_FLOAT_EQ(4.f, curve->GetValue(0.5f)); | 196 EXPECT_FLOAT_EQ(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 162 | 197 |
| 163 // There is a discontinuity at 1. Any value between 4 and 6 is valid. | 198 // There is a discontinuity at 1. Any value between 4 and 6 is valid. |
| 164 float value = curve->GetValue(1.f); | 199 float value = curve->GetValue(base::TimeDelta::FromSecondsD(1.f)); |
| 165 EXPECT_TRUE(value >= 4 && value <= 6); | 200 EXPECT_TRUE(value >= 4 && value <= 6); |
| 166 | 201 |
| 167 EXPECT_FLOAT_EQ(6.f, curve->GetValue(1.5f)); | 202 EXPECT_FLOAT_EQ(6.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.5f))); |
| 168 EXPECT_FLOAT_EQ(6.f, curve->GetValue(2.f)); | 203 EXPECT_FLOAT_EQ(6.f, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 169 EXPECT_FLOAT_EQ(6.f, curve->GetValue(3.f)); | 204 EXPECT_FLOAT_EQ(6.f, curve->GetValue(base::TimeDelta::FromSecondsD(3.f))); |
| 170 } | 205 } |
| 171 | 206 |
| 172 // Tests that a transform animation with one keyframe works as expected. | 207 // Tests that a transform animation with one keyframe works as expected. |
| 173 TEST(KeyframedAnimationCurveTest, OneTransformKeyframe) { | 208 TEST(KeyframedAnimationCurveTest, OneTransformKeyframe) { |
| 174 scoped_ptr<KeyframedTransformAnimationCurve> curve( | 209 scoped_ptr<KeyframedTransformAnimationCurve> curve( |
| 175 KeyframedTransformAnimationCurve::Create()); | 210 KeyframedTransformAnimationCurve::Create()); |
| 176 TransformOperations operations; | 211 TransformOperations operations; |
| 177 operations.AppendTranslate(2.f, 0.f, 0.f); | 212 operations.AppendTranslate(2.f, 0.f, 0.f); |
| 178 curve->AddKeyframe(TransformKeyframe::Create(0.f, operations, nullptr)); | 213 curve->AddKeyframe( |
| 214 TransformKeyframe::Create(base::TimeDelta(), operations, nullptr)); |
| 179 | 215 |
| 180 ExpectTranslateX(2.f, curve->GetValue(-1.f)); | 216 ExpectTranslateX(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 181 ExpectTranslateX(2.f, curve->GetValue(0.f)); | 217 ExpectTranslateX(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 182 ExpectTranslateX(2.f, curve->GetValue(0.5f)); | 218 ExpectTranslateX(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 183 ExpectTranslateX(2.f, curve->GetValue(1.f)); | 219 ExpectTranslateX(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| 184 ExpectTranslateX(2.f, curve->GetValue(2.f)); | 220 ExpectTranslateX(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 185 } | 221 } |
| 186 | 222 |
| 187 // Tests that a transform animation with two keyframes works as expected. | 223 // Tests that a transform animation with two keyframes works as expected. |
| 188 TEST(KeyframedAnimationCurveTest, TwoTransformKeyframe) { | 224 TEST(KeyframedAnimationCurveTest, TwoTransformKeyframe) { |
| 189 scoped_ptr<KeyframedTransformAnimationCurve> curve( | 225 scoped_ptr<KeyframedTransformAnimationCurve> curve( |
| 190 KeyframedTransformAnimationCurve::Create()); | 226 KeyframedTransformAnimationCurve::Create()); |
| 191 TransformOperations operations1; | 227 TransformOperations operations1; |
| 192 operations1.AppendTranslate(2.f, 0.f, 0.f); | 228 operations1.AppendTranslate(2.f, 0.f, 0.f); |
| 193 TransformOperations operations2; | 229 TransformOperations operations2; |
| 194 operations2.AppendTranslate(4.f, 0.f, 0.f); | 230 operations2.AppendTranslate(4.f, 0.f, 0.f); |
| 195 | 231 |
| 196 curve->AddKeyframe(TransformKeyframe::Create(0.f, operations1, nullptr)); | 232 curve->AddKeyframe( |
| 197 curve->AddKeyframe(TransformKeyframe::Create(1.f, operations2, nullptr)); | 233 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr)); |
| 198 ExpectTranslateX(2.f, curve->GetValue(-1.f)); | 234 curve->AddKeyframe(TransformKeyframe::Create( |
| 199 ExpectTranslateX(2.f, curve->GetValue(0.f)); | 235 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr)); |
| 200 ExpectTranslateX(3.f, curve->GetValue(0.5f)); | 236 ExpectTranslateX(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 201 ExpectTranslateX(4.f, curve->GetValue(1.f)); | 237 ExpectTranslateX(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 202 ExpectTranslateX(4.f, curve->GetValue(2.f)); | 238 ExpectTranslateX(3.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 239 ExpectTranslateX(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| 240 ExpectTranslateX(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 203 } | 241 } |
| 204 | 242 |
| 205 // Tests that a transform animation with three keyframes works as expected. | 243 // Tests that a transform animation with three keyframes works as expected. |
| 206 TEST(KeyframedAnimationCurveTest, ThreeTransformKeyframe) { | 244 TEST(KeyframedAnimationCurveTest, ThreeTransformKeyframe) { |
| 207 scoped_ptr<KeyframedTransformAnimationCurve> curve( | 245 scoped_ptr<KeyframedTransformAnimationCurve> curve( |
| 208 KeyframedTransformAnimationCurve::Create()); | 246 KeyframedTransformAnimationCurve::Create()); |
| 209 TransformOperations operations1; | 247 TransformOperations operations1; |
| 210 operations1.AppendTranslate(2.f, 0.f, 0.f); | 248 operations1.AppendTranslate(2.f, 0.f, 0.f); |
| 211 TransformOperations operations2; | 249 TransformOperations operations2; |
| 212 operations2.AppendTranslate(4.f, 0.f, 0.f); | 250 operations2.AppendTranslate(4.f, 0.f, 0.f); |
| 213 TransformOperations operations3; | 251 TransformOperations operations3; |
| 214 operations3.AppendTranslate(8.f, 0.f, 0.f); | 252 operations3.AppendTranslate(8.f, 0.f, 0.f); |
| 215 curve->AddKeyframe(TransformKeyframe::Create(0.f, operations1, nullptr)); | 253 curve->AddKeyframe( |
| 216 curve->AddKeyframe(TransformKeyframe::Create(1.f, operations2, nullptr)); | 254 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr)); |
| 217 curve->AddKeyframe(TransformKeyframe::Create(2.f, operations3, nullptr)); | 255 curve->AddKeyframe(TransformKeyframe::Create( |
| 218 ExpectTranslateX(2.f, curve->GetValue(-1.f)); | 256 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr)); |
| 219 ExpectTranslateX(2.f, curve->GetValue(0.f)); | 257 curve->AddKeyframe(TransformKeyframe::Create( |
| 220 ExpectTranslateX(3.f, curve->GetValue(0.5f)); | 258 base::TimeDelta::FromSecondsD(2.0), operations3, nullptr)); |
| 221 ExpectTranslateX(4.f, curve->GetValue(1.f)); | 259 ExpectTranslateX(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 222 ExpectTranslateX(6.f, curve->GetValue(1.5f)); | 260 ExpectTranslateX(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 223 ExpectTranslateX(8.f, curve->GetValue(2.f)); | 261 ExpectTranslateX(3.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 224 ExpectTranslateX(8.f, curve->GetValue(3.f)); | 262 ExpectTranslateX(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| 263 ExpectTranslateX(6.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.5f))); |
| 264 ExpectTranslateX(8.f, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 265 ExpectTranslateX(8.f, curve->GetValue(base::TimeDelta::FromSecondsD(3.f))); |
| 225 } | 266 } |
| 226 | 267 |
| 227 // Tests that a transform animation with multiple keys at a given time works | 268 // Tests that a transform animation with multiple keys at a given time works |
| 228 // sanely. | 269 // sanely. |
| 229 TEST(KeyframedAnimationCurveTest, RepeatedTransformKeyTimes) { | 270 TEST(KeyframedAnimationCurveTest, RepeatedTransformKeyTimes) { |
| 230 scoped_ptr<KeyframedTransformAnimationCurve> curve( | 271 scoped_ptr<KeyframedTransformAnimationCurve> curve( |
| 231 KeyframedTransformAnimationCurve::Create()); | 272 KeyframedTransformAnimationCurve::Create()); |
| 232 // A step function. | 273 // A step function. |
| 233 TransformOperations operations1; | 274 TransformOperations operations1; |
| 234 operations1.AppendTranslate(4.f, 0.f, 0.f); | 275 operations1.AppendTranslate(4.f, 0.f, 0.f); |
| 235 TransformOperations operations2; | 276 TransformOperations operations2; |
| 236 operations2.AppendTranslate(4.f, 0.f, 0.f); | 277 operations2.AppendTranslate(4.f, 0.f, 0.f); |
| 237 TransformOperations operations3; | 278 TransformOperations operations3; |
| 238 operations3.AppendTranslate(6.f, 0.f, 0.f); | 279 operations3.AppendTranslate(6.f, 0.f, 0.f); |
| 239 TransformOperations operations4; | 280 TransformOperations operations4; |
| 240 operations4.AppendTranslate(6.f, 0.f, 0.f); | 281 operations4.AppendTranslate(6.f, 0.f, 0.f); |
| 241 curve->AddKeyframe(TransformKeyframe::Create(0.f, operations1, nullptr)); | 282 curve->AddKeyframe( |
| 242 curve->AddKeyframe(TransformKeyframe::Create(1.f, operations2, nullptr)); | 283 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr)); |
| 243 curve->AddKeyframe(TransformKeyframe::Create(1.f, operations3, nullptr)); | 284 curve->AddKeyframe(TransformKeyframe::Create( |
| 244 curve->AddKeyframe(TransformKeyframe::Create(2.f, operations4, nullptr)); | 285 base::TimeDelta::FromSecondsD(1.0), operations2, nullptr)); |
| 286 curve->AddKeyframe(TransformKeyframe::Create( |
| 287 base::TimeDelta::FromSecondsD(1.0), operations3, nullptr)); |
| 288 curve->AddKeyframe(TransformKeyframe::Create( |
| 289 base::TimeDelta::FromSecondsD(2.0), operations4, nullptr)); |
| 245 | 290 |
| 246 ExpectTranslateX(4.f, curve->GetValue(-1.f)); | 291 ExpectTranslateX(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 247 ExpectTranslateX(4.f, curve->GetValue(0.f)); | 292 ExpectTranslateX(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 248 ExpectTranslateX(4.f, curve->GetValue(0.5f)); | 293 ExpectTranslateX(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 249 | 294 |
| 250 // There is a discontinuity at 1. Any value between 4 and 6 is valid. | 295 // There is a discontinuity at 1. Any value between 4 and 6 is valid. |
| 251 gfx::Transform value = curve->GetValue(1.f); | 296 gfx::Transform value = curve->GetValue(base::TimeDelta::FromSecondsD(1.f)); |
| 252 EXPECT_GE(value.matrix().get(0, 3), 4.f); | 297 EXPECT_GE(value.matrix().get(0, 3), 4.f); |
| 253 EXPECT_LE(value.matrix().get(0, 3), 6.f); | 298 EXPECT_LE(value.matrix().get(0, 3), 6.f); |
| 254 | 299 |
| 255 ExpectTranslateX(6.f, curve->GetValue(1.5f)); | 300 ExpectTranslateX(6.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.5f))); |
| 256 ExpectTranslateX(6.f, curve->GetValue(2.f)); | 301 ExpectTranslateX(6.f, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 257 ExpectTranslateX(6.f, curve->GetValue(3.f)); | 302 ExpectTranslateX(6.f, curve->GetValue(base::TimeDelta::FromSecondsD(3.f))); |
| 258 } | 303 } |
| 259 | 304 |
| 260 // Tests that a filter animation with one keyframe works as expected. | 305 // Tests that a filter animation with one keyframe works as expected. |
| 261 TEST(KeyframedAnimationCurveTest, OneFilterKeyframe) { | 306 TEST(KeyframedAnimationCurveTest, OneFilterKeyframe) { |
| 262 scoped_ptr<KeyframedFilterAnimationCurve> curve( | 307 scoped_ptr<KeyframedFilterAnimationCurve> curve( |
| 263 KeyframedFilterAnimationCurve::Create()); | 308 KeyframedFilterAnimationCurve::Create()); |
| 264 FilterOperations operations; | 309 FilterOperations operations; |
| 265 operations.Append(FilterOperation::CreateBrightnessFilter(2.f)); | 310 operations.Append(FilterOperation::CreateBrightnessFilter(2.f)); |
| 266 curve->AddKeyframe(FilterKeyframe::Create(0.f, operations, nullptr)); | 311 curve->AddKeyframe( |
| 312 FilterKeyframe::Create(base::TimeDelta(), operations, nullptr)); |
| 267 | 313 |
| 268 ExpectBrightness(2.f, curve->GetValue(-1.f)); | 314 ExpectBrightness(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 269 ExpectBrightness(2.f, curve->GetValue(0.f)); | 315 ExpectBrightness(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 270 ExpectBrightness(2.f, curve->GetValue(0.5f)); | 316 ExpectBrightness(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 271 ExpectBrightness(2.f, curve->GetValue(1.f)); | 317 ExpectBrightness(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| 272 ExpectBrightness(2.f, curve->GetValue(2.f)); | 318 ExpectBrightness(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 273 } | 319 } |
| 274 | 320 |
| 275 // Tests that a filter animation with two keyframes works as expected. | 321 // Tests that a filter animation with two keyframes works as expected. |
| 276 TEST(KeyframedAnimationCurveTest, TwoFilterKeyframe) { | 322 TEST(KeyframedAnimationCurveTest, TwoFilterKeyframe) { |
| 277 scoped_ptr<KeyframedFilterAnimationCurve> curve( | 323 scoped_ptr<KeyframedFilterAnimationCurve> curve( |
| 278 KeyframedFilterAnimationCurve::Create()); | 324 KeyframedFilterAnimationCurve::Create()); |
| 279 FilterOperations operations1; | 325 FilterOperations operations1; |
| 280 operations1.Append(FilterOperation::CreateBrightnessFilter(2.f)); | 326 operations1.Append(FilterOperation::CreateBrightnessFilter(2.f)); |
| 281 FilterOperations operations2; | 327 FilterOperations operations2; |
| 282 operations2.Append(FilterOperation::CreateBrightnessFilter(4.f)); | 328 operations2.Append(FilterOperation::CreateBrightnessFilter(4.f)); |
| 283 | 329 |
| 284 curve->AddKeyframe(FilterKeyframe::Create(0.f, operations1, nullptr)); | 330 curve->AddKeyframe( |
| 285 curve->AddKeyframe(FilterKeyframe::Create(1.f, operations2, nullptr)); | 331 FilterKeyframe::Create(base::TimeDelta(), operations1, nullptr)); |
| 286 ExpectBrightness(2.f, curve->GetValue(-1.f)); | 332 curve->AddKeyframe(FilterKeyframe::Create(base::TimeDelta::FromSecondsD(1.f), |
| 287 ExpectBrightness(2.f, curve->GetValue(0.f)); | 333 operations2, nullptr)); |
| 288 ExpectBrightness(3.f, curve->GetValue(0.5f)); | 334 ExpectBrightness(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 289 ExpectBrightness(4.f, curve->GetValue(1.f)); | 335 ExpectBrightness(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 290 ExpectBrightness(4.f, curve->GetValue(2.f)); | 336 ExpectBrightness(3.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 337 ExpectBrightness(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| 338 ExpectBrightness(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 291 } | 339 } |
| 292 | 340 |
| 293 // Tests that a filter animation with three keyframes works as expected. | 341 // Tests that a filter animation with three keyframes works as expected. |
| 294 TEST(KeyframedAnimationCurveTest, ThreeFilterKeyframe) { | 342 TEST(KeyframedAnimationCurveTest, ThreeFilterKeyframe) { |
| 295 scoped_ptr<KeyframedFilterAnimationCurve> curve( | 343 scoped_ptr<KeyframedFilterAnimationCurve> curve( |
| 296 KeyframedFilterAnimationCurve::Create()); | 344 KeyframedFilterAnimationCurve::Create()); |
| 297 FilterOperations operations1; | 345 FilterOperations operations1; |
| 298 operations1.Append(FilterOperation::CreateBrightnessFilter(2.f)); | 346 operations1.Append(FilterOperation::CreateBrightnessFilter(2.f)); |
| 299 FilterOperations operations2; | 347 FilterOperations operations2; |
| 300 operations2.Append(FilterOperation::CreateBrightnessFilter(4.f)); | 348 operations2.Append(FilterOperation::CreateBrightnessFilter(4.f)); |
| 301 FilterOperations operations3; | 349 FilterOperations operations3; |
| 302 operations3.Append(FilterOperation::CreateBrightnessFilter(8.f)); | 350 operations3.Append(FilterOperation::CreateBrightnessFilter(8.f)); |
| 303 curve->AddKeyframe(FilterKeyframe::Create(0.f, operations1, nullptr)); | 351 curve->AddKeyframe( |
| 304 curve->AddKeyframe(FilterKeyframe::Create(1.f, operations2, nullptr)); | 352 FilterKeyframe::Create(base::TimeDelta(), operations1, nullptr)); |
| 305 curve->AddKeyframe(FilterKeyframe::Create(2.f, operations3, nullptr)); | 353 curve->AddKeyframe(FilterKeyframe::Create(base::TimeDelta::FromSecondsD(1.f), |
| 306 ExpectBrightness(2.f, curve->GetValue(-1.f)); | 354 operations2, nullptr)); |
| 307 ExpectBrightness(2.f, curve->GetValue(0.f)); | 355 curve->AddKeyframe(FilterKeyframe::Create(base::TimeDelta::FromSecondsD(2.f), |
| 308 ExpectBrightness(3.f, curve->GetValue(0.5f)); | 356 operations3, nullptr)); |
| 309 ExpectBrightness(4.f, curve->GetValue(1.f)); | 357 ExpectBrightness(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 310 ExpectBrightness(6.f, curve->GetValue(1.5f)); | 358 ExpectBrightness(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 311 ExpectBrightness(8.f, curve->GetValue(2.f)); | 359 ExpectBrightness(3.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 312 ExpectBrightness(8.f, curve->GetValue(3.f)); | 360 ExpectBrightness(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| 361 ExpectBrightness(6.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.5f))); |
| 362 ExpectBrightness(8.f, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 363 ExpectBrightness(8.f, curve->GetValue(base::TimeDelta::FromSecondsD(3.f))); |
| 313 } | 364 } |
| 314 | 365 |
| 315 // Tests that a filter animation with multiple keys at a given time works | 366 // Tests that a filter animation with multiple keys at a given time works |
| 316 // sanely. | 367 // sanely. |
| 317 TEST(KeyframedAnimationCurveTest, RepeatedFilterKeyTimes) { | 368 TEST(KeyframedAnimationCurveTest, RepeatedFilterKeyTimes) { |
| 318 scoped_ptr<KeyframedFilterAnimationCurve> curve( | 369 scoped_ptr<KeyframedFilterAnimationCurve> curve( |
| 319 KeyframedFilterAnimationCurve::Create()); | 370 KeyframedFilterAnimationCurve::Create()); |
| 320 // A step function. | 371 // A step function. |
| 321 FilterOperations operations1; | 372 FilterOperations operations1; |
| 322 operations1.Append(FilterOperation::CreateBrightnessFilter(4.f)); | 373 operations1.Append(FilterOperation::CreateBrightnessFilter(4.f)); |
| 323 FilterOperations operations2; | 374 FilterOperations operations2; |
| 324 operations2.Append(FilterOperation::CreateBrightnessFilter(4.f)); | 375 operations2.Append(FilterOperation::CreateBrightnessFilter(4.f)); |
| 325 FilterOperations operations3; | 376 FilterOperations operations3; |
| 326 operations3.Append(FilterOperation::CreateBrightnessFilter(6.f)); | 377 operations3.Append(FilterOperation::CreateBrightnessFilter(6.f)); |
| 327 FilterOperations operations4; | 378 FilterOperations operations4; |
| 328 operations4.Append(FilterOperation::CreateBrightnessFilter(6.f)); | 379 operations4.Append(FilterOperation::CreateBrightnessFilter(6.f)); |
| 329 curve->AddKeyframe(FilterKeyframe::Create(0.f, operations1, nullptr)); | 380 curve->AddKeyframe( |
| 330 curve->AddKeyframe(FilterKeyframe::Create(1.f, operations2, nullptr)); | 381 FilterKeyframe::Create(base::TimeDelta(), operations1, nullptr)); |
| 331 curve->AddKeyframe(FilterKeyframe::Create(1.f, operations3, nullptr)); | 382 curve->AddKeyframe(FilterKeyframe::Create(base::TimeDelta::FromSecondsD(1.f), |
| 332 curve->AddKeyframe(FilterKeyframe::Create(2.f, operations4, nullptr)); | 383 operations2, nullptr)); |
| 384 curve->AddKeyframe(FilterKeyframe::Create(base::TimeDelta::FromSecondsD(1.f), |
| 385 operations3, nullptr)); |
| 386 curve->AddKeyframe(FilterKeyframe::Create(base::TimeDelta::FromSecondsD(2.f), |
| 387 operations4, nullptr)); |
| 333 | 388 |
| 334 ExpectBrightness(4.f, curve->GetValue(-1.f)); | 389 ExpectBrightness(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 335 ExpectBrightness(4.f, curve->GetValue(0.f)); | 390 ExpectBrightness(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 336 ExpectBrightness(4.f, curve->GetValue(0.5f)); | 391 ExpectBrightness(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 337 | 392 |
| 338 // There is a discontinuity at 1. Any value between 4 and 6 is valid. | 393 // There is a discontinuity at 1. Any value between 4 and 6 is valid. |
| 339 FilterOperations value = curve->GetValue(1.f); | 394 FilterOperations value = curve->GetValue(base::TimeDelta::FromSecondsD(1.f)); |
| 340 EXPECT_EQ(1u, value.size()); | 395 EXPECT_EQ(1u, value.size()); |
| 341 EXPECT_EQ(FilterOperation::BRIGHTNESS, value.at(0).type()); | 396 EXPECT_EQ(FilterOperation::BRIGHTNESS, value.at(0).type()); |
| 342 EXPECT_GE(value.at(0).amount(), 4); | 397 EXPECT_GE(value.at(0).amount(), 4); |
| 343 EXPECT_LE(value.at(0).amount(), 6); | 398 EXPECT_LE(value.at(0).amount(), 6); |
| 344 | 399 |
| 345 ExpectBrightness(6.f, curve->GetValue(1.5f)); | 400 ExpectBrightness(6.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.5f))); |
| 346 ExpectBrightness(6.f, curve->GetValue(2.f)); | 401 ExpectBrightness(6.f, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 347 ExpectBrightness(6.f, curve->GetValue(3.f)); | 402 ExpectBrightness(6.f, curve->GetValue(base::TimeDelta::FromSecondsD(3.f))); |
| 348 } | 403 } |
| 349 | 404 |
| 350 // Tests that the keyframes may be added out of order. | 405 // Tests that the keyframes may be added out of order. |
| 351 TEST(KeyframedAnimationCurveTest, UnsortedKeyframes) { | 406 TEST(KeyframedAnimationCurveTest, UnsortedKeyframes) { |
| 352 scoped_ptr<KeyframedFloatAnimationCurve> curve( | 407 scoped_ptr<KeyframedFloatAnimationCurve> curve( |
| 353 KeyframedFloatAnimationCurve::Create()); | 408 KeyframedFloatAnimationCurve::Create()); |
| 354 curve->AddKeyframe(FloatKeyframe::Create(2.0, 8.f, nullptr)); | 409 curve->AddKeyframe( |
| 355 curve->AddKeyframe(FloatKeyframe::Create(0.0, 2.f, nullptr)); | 410 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(2.f), 8.f, nullptr)); |
| 356 curve->AddKeyframe(FloatKeyframe::Create(1.0, 4.f, nullptr)); | 411 curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta(), 2.f, nullptr)); |
| 357 EXPECT_FLOAT_EQ(2.f, curve->GetValue(-1.f)); | 412 curve->AddKeyframe( |
| 358 EXPECT_FLOAT_EQ(2.f, curve->GetValue(0.f)); | 413 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.f), 4.f, nullptr)); |
| 359 EXPECT_FLOAT_EQ(3.f, curve->GetValue(0.5f)); | 414 EXPECT_FLOAT_EQ(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 360 EXPECT_FLOAT_EQ(4.f, curve->GetValue(1.f)); | 415 EXPECT_FLOAT_EQ(2.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 361 EXPECT_FLOAT_EQ(6.f, curve->GetValue(1.5f)); | 416 EXPECT_FLOAT_EQ(3.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 362 EXPECT_FLOAT_EQ(8.f, curve->GetValue(2.f)); | 417 EXPECT_FLOAT_EQ(4.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| 363 EXPECT_FLOAT_EQ(8.f, curve->GetValue(3.f)); | 418 EXPECT_FLOAT_EQ(6.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.5f))); |
| 419 EXPECT_FLOAT_EQ(8.f, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 420 EXPECT_FLOAT_EQ(8.f, curve->GetValue(base::TimeDelta::FromSecondsD(3.f))); |
| 364 } | 421 } |
| 365 | 422 |
| 366 // Tests that a cubic bezier timing function works as expected. | 423 // Tests that a cubic bezier timing function works as expected. |
| 367 TEST(KeyframedAnimationCurveTest, CubicBezierTimingFunction) { | 424 TEST(KeyframedAnimationCurveTest, CubicBezierTimingFunction) { |
| 368 scoped_ptr<KeyframedFloatAnimationCurve> curve( | 425 scoped_ptr<KeyframedFloatAnimationCurve> curve( |
| 369 KeyframedFloatAnimationCurve::Create()); | 426 KeyframedFloatAnimationCurve::Create()); |
| 370 curve->AddKeyframe(FloatKeyframe::Create( | 427 curve->AddKeyframe(FloatKeyframe::Create( |
| 371 0.0, 0.f, CubicBezierTimingFunction::Create(0.25f, 0.f, 0.75f, 1.f))); | 428 base::TimeDelta(), 0.f, |
| 372 curve->AddKeyframe(FloatKeyframe::Create(1.0, 1.f, nullptr)); | 429 CubicBezierTimingFunction::Create(0.25f, 0.f, 0.75f, 1.f))); |
| 430 curve->AddKeyframe( |
| 431 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), 1.f, nullptr)); |
| 373 | 432 |
| 374 EXPECT_FLOAT_EQ(0.f, curve->GetValue(0.f)); | 433 EXPECT_FLOAT_EQ(0.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 375 EXPECT_LT(0.f, curve->GetValue(0.25f)); | 434 EXPECT_LT(0.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.25f))); |
| 376 EXPECT_GT(0.25f, curve->GetValue(0.25f)); | 435 EXPECT_GT(0.25f, curve->GetValue(base::TimeDelta::FromSecondsD(0.25f))); |
| 377 EXPECT_NEAR(curve->GetValue(0.5f), 0.5f, 0.00015f); | 436 EXPECT_NEAR(curve->GetValue(base::TimeDelta::FromSecondsD(0.5f)), 0.5f, |
| 378 EXPECT_LT(0.75f, curve->GetValue(0.75f)); | 437 0.00015f); |
| 379 EXPECT_GT(1.f, curve->GetValue(0.75f)); | 438 EXPECT_LT(0.75f, curve->GetValue(base::TimeDelta::FromSecondsD(0.75f))); |
| 380 EXPECT_FLOAT_EQ(1.f, curve->GetValue(1.f)); | 439 EXPECT_GT(1.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.75f))); |
| 440 EXPECT_FLOAT_EQ(1.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| 381 } | 441 } |
| 382 | 442 |
| 383 // Tests that animated bounds are computed as expected. | 443 // Tests that animated bounds are computed as expected. |
| 384 TEST(KeyframedAnimationCurveTest, AnimatedBounds) { | 444 TEST(KeyframedAnimationCurveTest, AnimatedBounds) { |
| 385 scoped_ptr<KeyframedTransformAnimationCurve> curve( | 445 scoped_ptr<KeyframedTransformAnimationCurve> curve( |
| 386 KeyframedTransformAnimationCurve::Create()); | 446 KeyframedTransformAnimationCurve::Create()); |
| 387 | 447 |
| 388 TransformOperations operations1; | 448 TransformOperations operations1; |
| 389 curve->AddKeyframe(TransformKeyframe::Create(0.0, operations1, nullptr)); | 449 curve->AddKeyframe( |
| 450 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr)); |
| 390 operations1.AppendTranslate(2.0, 3.0, -1.0); | 451 operations1.AppendTranslate(2.0, 3.0, -1.0); |
| 391 curve->AddKeyframe(TransformKeyframe::Create(0.5, operations1, nullptr)); | 452 curve->AddKeyframe(TransformKeyframe::Create( |
| 453 base::TimeDelta::FromSecondsD(0.5f), operations1, nullptr)); |
| 392 TransformOperations operations2; | 454 TransformOperations operations2; |
| 393 operations2.AppendTranslate(4.0, 1.0, 2.0); | 455 operations2.AppendTranslate(4.0, 1.0, 2.0); |
| 394 curve->AddKeyframe(TransformKeyframe::Create( | 456 curve->AddKeyframe( |
| 395 1.0, operations2, EaseTimingFunction::Create())); | 457 TransformKeyframe::Create(base::TimeDelta::FromSecondsD(1.f), operations2, |
| 458 EaseTimingFunction::Create())); |
| 396 | 459 |
| 397 gfx::BoxF box(2.f, 3.f, 4.f, 1.f, 3.f, 2.f); | 460 gfx::BoxF box(2.f, 3.f, 4.f, 1.f, 3.f, 2.f); |
| 398 gfx::BoxF bounds; | 461 gfx::BoxF bounds; |
| 399 | 462 |
| 400 EXPECT_TRUE(curve->AnimatedBoundsForBox(box, &bounds)); | 463 EXPECT_TRUE(curve->AnimatedBoundsForBox(box, &bounds)); |
| 401 EXPECT_EQ(gfx::BoxF(2.f, 3.f, 3.f, 5.f, 6.f, 5.f).ToString(), | 464 EXPECT_EQ(gfx::BoxF(2.f, 3.f, 3.f, 5.f, 6.f, 5.f).ToString(), |
| 402 bounds.ToString()); | 465 bounds.ToString()); |
| 403 } | 466 } |
| 404 | 467 |
| 405 // Tests that animations that affect scale are correctly identified. | 468 // Tests that animations that affect scale are correctly identified. |
| 406 TEST(KeyframedAnimationCurveTest, AffectsScale) { | 469 TEST(KeyframedAnimationCurveTest, AffectsScale) { |
| 407 scoped_ptr<KeyframedTransformAnimationCurve> curve( | 470 scoped_ptr<KeyframedTransformAnimationCurve> curve( |
| 408 KeyframedTransformAnimationCurve::Create()); | 471 KeyframedTransformAnimationCurve::Create()); |
| 409 | 472 |
| 410 TransformOperations operations1; | 473 TransformOperations operations1; |
| 411 curve->AddKeyframe(TransformKeyframe::Create(0.0, operations1, nullptr)); | 474 curve->AddKeyframe( |
| 475 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr)); |
| 412 operations1.AppendTranslate(2.0, 3.0, -1.0); | 476 operations1.AppendTranslate(2.0, 3.0, -1.0); |
| 413 TransformOperations operations2; | 477 TransformOperations operations2; |
| 414 operations2.AppendTranslate(4.0, 1.0, 2.0); | 478 operations2.AppendTranslate(4.0, 1.0, 2.0); |
| 415 curve->AddKeyframe(TransformKeyframe::Create(1.0, operations2, nullptr)); | 479 curve->AddKeyframe(TransformKeyframe::Create( |
| 480 base::TimeDelta::FromSecondsD(1.f), operations2, nullptr)); |
| 416 | 481 |
| 417 EXPECT_FALSE(curve->AffectsScale()); | 482 EXPECT_FALSE(curve->AffectsScale()); |
| 418 | 483 |
| 419 TransformOperations operations3; | 484 TransformOperations operations3; |
| 420 operations3.AppendScale(2.f, 2.f, 2.f); | 485 operations3.AppendScale(2.f, 2.f, 2.f); |
| 421 curve->AddKeyframe(TransformKeyframe::Create(2.0, operations3, nullptr)); | 486 curve->AddKeyframe(TransformKeyframe::Create( |
| 487 base::TimeDelta::FromSecondsD(2.f), operations3, nullptr)); |
| 422 | 488 |
| 423 EXPECT_TRUE(curve->AffectsScale()); | 489 EXPECT_TRUE(curve->AffectsScale()); |
| 424 | 490 |
| 425 TransformOperations operations4; | 491 TransformOperations operations4; |
| 426 operations3.AppendTranslate(2.f, 2.f, 2.f); | 492 operations3.AppendTranslate(2.f, 2.f, 2.f); |
| 427 curve->AddKeyframe(TransformKeyframe::Create(3.0, operations4, nullptr)); | 493 curve->AddKeyframe(TransformKeyframe::Create( |
| 494 base::TimeDelta::FromSecondsD(3.f), operations4, nullptr)); |
| 428 | 495 |
| 429 EXPECT_TRUE(curve->AffectsScale()); | 496 EXPECT_TRUE(curve->AffectsScale()); |
| 430 } | 497 } |
| 431 | 498 |
| 432 // Tests that animations that are translations are correctly identified. | 499 // Tests that animations that are translations are correctly identified. |
| 433 TEST(KeyframedAnimationCurveTest, IsTranslation) { | 500 TEST(KeyframedAnimationCurveTest, IsTranslation) { |
| 434 scoped_ptr<KeyframedTransformAnimationCurve> curve( | 501 scoped_ptr<KeyframedTransformAnimationCurve> curve( |
| 435 KeyframedTransformAnimationCurve::Create()); | 502 KeyframedTransformAnimationCurve::Create()); |
| 436 | 503 |
| 437 TransformOperations operations1; | 504 TransformOperations operations1; |
| 438 curve->AddKeyframe(TransformKeyframe::Create(0.0, operations1, nullptr)); | 505 curve->AddKeyframe( |
| 506 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr)); |
| 439 operations1.AppendTranslate(2.0, 3.0, -1.0); | 507 operations1.AppendTranslate(2.0, 3.0, -1.0); |
| 440 TransformOperations operations2; | 508 TransformOperations operations2; |
| 441 operations2.AppendTranslate(4.0, 1.0, 2.0); | 509 operations2.AppendTranslate(4.0, 1.0, 2.0); |
| 442 curve->AddKeyframe(TransformKeyframe::Create(1.0, operations2, nullptr)); | 510 curve->AddKeyframe(TransformKeyframe::Create( |
| 511 base::TimeDelta::FromSecondsD(1.f), operations2, nullptr)); |
| 443 | 512 |
| 444 EXPECT_TRUE(curve->IsTranslation()); | 513 EXPECT_TRUE(curve->IsTranslation()); |
| 445 | 514 |
| 446 TransformOperations operations3; | 515 TransformOperations operations3; |
| 447 operations3.AppendScale(2.f, 2.f, 2.f); | 516 operations3.AppendScale(2.f, 2.f, 2.f); |
| 448 curve->AddKeyframe(TransformKeyframe::Create(2.0, operations3, nullptr)); | 517 curve->AddKeyframe(TransformKeyframe::Create( |
| 518 base::TimeDelta::FromSecondsD(2.f), operations3, nullptr)); |
| 449 | 519 |
| 450 EXPECT_FALSE(curve->IsTranslation()); | 520 EXPECT_FALSE(curve->IsTranslation()); |
| 451 | 521 |
| 452 TransformOperations operations4; | 522 TransformOperations operations4; |
| 453 operations3.AppendTranslate(2.f, 2.f, 2.f); | 523 operations3.AppendTranslate(2.f, 2.f, 2.f); |
| 454 curve->AddKeyframe(TransformKeyframe::Create(3.0, operations4, nullptr)); | 524 curve->AddKeyframe(TransformKeyframe::Create( |
| 525 base::TimeDelta::FromSecondsD(3.f), operations4, nullptr)); |
| 455 | 526 |
| 456 EXPECT_FALSE(curve->IsTranslation()); | 527 EXPECT_FALSE(curve->IsTranslation()); |
| 457 } | 528 } |
| 458 | 529 |
| 459 // Tests that maximum target scale is computed as expected. | 530 // Tests that maximum target scale is computed as expected. |
| 460 TEST(KeyframedAnimationCurveTest, MaximumTargetScale) { | 531 TEST(KeyframedAnimationCurveTest, MaximumTargetScale) { |
| 461 scoped_ptr<KeyframedTransformAnimationCurve> curve( | 532 scoped_ptr<KeyframedTransformAnimationCurve> curve( |
| 462 KeyframedTransformAnimationCurve::Create()); | 533 KeyframedTransformAnimationCurve::Create()); |
| 463 | 534 |
| 464 TransformOperations operations1; | 535 TransformOperations operations1; |
| 465 curve->AddKeyframe(TransformKeyframe::Create(0.0, operations1, nullptr)); | 536 curve->AddKeyframe( |
| 537 TransformKeyframe::Create(base::TimeDelta(), operations1, nullptr)); |
| 466 operations1.AppendScale(2.f, -3.f, 1.f); | 538 operations1.AppendScale(2.f, -3.f, 1.f); |
| 467 curve->AddKeyframe(TransformKeyframe::Create( | 539 curve->AddKeyframe( |
| 468 1.0, operations1, EaseTimingFunction::Create())); | 540 TransformKeyframe::Create(base::TimeDelta::FromSecondsD(1.f), operations1, |
| 541 EaseTimingFunction::Create())); |
| 469 | 542 |
| 470 float maximum_scale = 0.f; | 543 float maximum_scale = 0.f; |
| 471 EXPECT_TRUE(curve->MaximumTargetScale(true, &maximum_scale)); | 544 EXPECT_TRUE(curve->MaximumTargetScale(true, &maximum_scale)); |
| 472 EXPECT_EQ(3.f, maximum_scale); | 545 EXPECT_EQ(3.f, maximum_scale); |
| 473 | 546 |
| 474 TransformOperations operations2; | 547 TransformOperations operations2; |
| 475 operations2.AppendScale(6.f, 3.f, 2.f); | 548 operations2.AppendScale(6.f, 3.f, 2.f); |
| 476 curve->AddKeyframe(TransformKeyframe::Create( | 549 curve->AddKeyframe( |
| 477 2.0, operations2, EaseTimingFunction::Create())); | 550 TransformKeyframe::Create(base::TimeDelta::FromSecondsD(2.f), operations2, |
| 551 EaseTimingFunction::Create())); |
| 478 | 552 |
| 479 EXPECT_TRUE(curve->MaximumTargetScale(true, &maximum_scale)); | 553 EXPECT_TRUE(curve->MaximumTargetScale(true, &maximum_scale)); |
| 480 EXPECT_EQ(6.f, maximum_scale); | 554 EXPECT_EQ(6.f, maximum_scale); |
| 481 | 555 |
| 482 TransformOperations operations3; | 556 TransformOperations operations3; |
| 483 operations3.AppendRotate(1.f, 0.f, 0.f, 90.f); | 557 operations3.AppendRotate(1.f, 0.f, 0.f, 90.f); |
| 484 curve->AddKeyframe(TransformKeyframe::Create( | 558 curve->AddKeyframe( |
| 485 3.0, operations3, EaseTimingFunction::Create())); | 559 TransformKeyframe::Create(base::TimeDelta::FromSecondsD(3.f), operations3, |
| 560 EaseTimingFunction::Create())); |
| 486 | 561 |
| 487 EXPECT_FALSE(curve->MaximumTargetScale(true, &maximum_scale)); | 562 EXPECT_FALSE(curve->MaximumTargetScale(true, &maximum_scale)); |
| 488 | 563 |
| 489 // The original scale is not used in computing the max. | 564 // The original scale is not used in computing the max. |
| 490 scoped_ptr<KeyframedTransformAnimationCurve> curve2( | 565 scoped_ptr<KeyframedTransformAnimationCurve> curve2( |
| 491 KeyframedTransformAnimationCurve::Create()); | 566 KeyframedTransformAnimationCurve::Create()); |
| 492 | 567 |
| 493 TransformOperations operations4; | 568 TransformOperations operations4; |
| 494 operations4.AppendScale(0.4f, 0.2f, 0.6f); | 569 operations4.AppendScale(0.4f, 0.2f, 0.6f); |
| 495 curve2->AddKeyframe(TransformKeyframe::Create( | 570 curve2->AddKeyframe(TransformKeyframe::Create(base::TimeDelta(), operations4, |
| 496 0.0, operations4, EaseTimingFunction::Create())); | 571 EaseTimingFunction::Create())); |
| 497 TransformOperations operations5; | 572 TransformOperations operations5; |
| 498 operations5.AppendScale(0.5f, 0.3f, -0.8f); | 573 operations5.AppendScale(0.5f, 0.3f, -0.8f); |
| 499 curve2->AddKeyframe(TransformKeyframe::Create( | 574 curve2->AddKeyframe( |
| 500 1.0, operations5, EaseTimingFunction::Create())); | 575 TransformKeyframe::Create(base::TimeDelta::FromSecondsD(1.f), operations5, |
| 576 EaseTimingFunction::Create())); |
| 501 | 577 |
| 502 EXPECT_TRUE(curve2->MaximumTargetScale(true, &maximum_scale)); | 578 EXPECT_TRUE(curve2->MaximumTargetScale(true, &maximum_scale)); |
| 503 EXPECT_EQ(0.8f, maximum_scale); | 579 EXPECT_EQ(0.8f, maximum_scale); |
| 504 | 580 |
| 505 EXPECT_TRUE(curve2->MaximumTargetScale(false, &maximum_scale)); | 581 EXPECT_TRUE(curve2->MaximumTargetScale(false, &maximum_scale)); |
| 506 EXPECT_EQ(0.6f, maximum_scale); | 582 EXPECT_EQ(0.6f, maximum_scale); |
| 507 } | 583 } |
| 508 | 584 |
| 509 // Tests that an animation with a curve timing function works as expected. | 585 // Tests that an animation with a curve timing function works as expected. |
| 510 TEST(KeyframedAnimationCurveTest, CurveTiming) { | 586 TEST(KeyframedAnimationCurveTest, CurveTiming) { |
| 511 scoped_ptr<KeyframedFloatAnimationCurve> curve( | 587 scoped_ptr<KeyframedFloatAnimationCurve> curve( |
| 512 KeyframedFloatAnimationCurve::Create()); | 588 KeyframedFloatAnimationCurve::Create()); |
| 513 curve->AddKeyframe(FloatKeyframe::Create(0.0, 0.f, nullptr)); | 589 curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta(), 0.f, nullptr)); |
| 514 curve->AddKeyframe(FloatKeyframe::Create(1.0, 1.f, nullptr)); | 590 curve->AddKeyframe( |
| 591 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.f), 1.f, nullptr)); |
| 515 curve->SetTimingFunction( | 592 curve->SetTimingFunction( |
| 516 CubicBezierTimingFunction::Create(0.75f, 0.f, 0.25f, 1.f).Pass()); | 593 CubicBezierTimingFunction::Create(0.75f, 0.f, 0.25f, 1.f).Pass()); |
| 517 EXPECT_FLOAT_EQ(0.f, curve->GetValue(-1.f)); | 594 EXPECT_FLOAT_EQ(0.f, curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 518 EXPECT_FLOAT_EQ(0.f, curve->GetValue(0.f)); | 595 EXPECT_FLOAT_EQ(0.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 519 EXPECT_NEAR(0.05f, curve->GetValue(0.25f), 0.005f); | 596 EXPECT_NEAR(0.05f, curve->GetValue(base::TimeDelta::FromSecondsD(0.25f)), |
| 520 EXPECT_FLOAT_EQ(0.5f, curve->GetValue(0.5f)); | 597 0.005f); |
| 521 EXPECT_NEAR(0.95f, curve->GetValue(0.75f), 0.005f); | 598 EXPECT_FLOAT_EQ(0.5f, curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 522 EXPECT_FLOAT_EQ(1.f, curve->GetValue(1.f)); | 599 EXPECT_NEAR(0.95f, curve->GetValue(base::TimeDelta::FromSecondsD(0.75f)), |
| 523 EXPECT_FLOAT_EQ(1.f, curve->GetValue(2.f)); | 600 0.005f); |
| 601 EXPECT_FLOAT_EQ(1.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| 602 EXPECT_FLOAT_EQ(1.f, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 524 } | 603 } |
| 525 | 604 |
| 526 // Tests that an animation with a curve and keyframe timing function works as | 605 // Tests that an animation with a curve and keyframe timing function works as |
| 527 // expected. | 606 // expected. |
| 528 TEST(KeyframedAnimationCurveTest, CurveAndKeyframeTiming) { | 607 TEST(KeyframedAnimationCurveTest, CurveAndKeyframeTiming) { |
| 529 scoped_ptr<KeyframedFloatAnimationCurve> curve( | 608 scoped_ptr<KeyframedFloatAnimationCurve> curve( |
| 530 KeyframedFloatAnimationCurve::Create()); | 609 KeyframedFloatAnimationCurve::Create()); |
| 531 curve->AddKeyframe(FloatKeyframe::Create( | 610 curve->AddKeyframe(FloatKeyframe::Create( |
| 532 0.0, | 611 base::TimeDelta(), 0.f, |
| 533 0.f, | |
| 534 CubicBezierTimingFunction::Create(0.35f, 0.f, 0.65f, 1.f).Pass())); | 612 CubicBezierTimingFunction::Create(0.35f, 0.f, 0.65f, 1.f).Pass())); |
| 535 curve->AddKeyframe(FloatKeyframe::Create(1.0, 1.f, nullptr)); | 613 curve->AddKeyframe( |
| 614 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.f), 1.f, nullptr)); |
| 536 // Curve timing function producing outputs outside of range [0,1]. | 615 // Curve timing function producing outputs outside of range [0,1]. |
| 537 curve->SetTimingFunction( | 616 curve->SetTimingFunction( |
| 538 CubicBezierTimingFunction::Create(0.5f, -0.5f, 0.5f, 1.5f).Pass()); | 617 CubicBezierTimingFunction::Create(0.5f, -0.5f, 0.5f, 1.5f).Pass()); |
| 539 EXPECT_FLOAT_EQ(0.f, curve->GetValue(-1.f)); | 618 EXPECT_FLOAT_EQ(0.f, curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 540 EXPECT_FLOAT_EQ(0.f, curve->GetValue(0.f)); | 619 EXPECT_FLOAT_EQ(0.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 541 EXPECT_FLOAT_EQ(0.f, curve->GetValue(0.25f)); // Clamped. c(.25) < 0 | 620 EXPECT_FLOAT_EQ(0.f, curve->GetValue(base::TimeDelta::FromSecondsD( |
| 542 EXPECT_NEAR(0.17f, curve->GetValue(0.42f), 0.005f); // c(.42)=.27, k(.27)=.17 | 621 0.25f))); // Clamped. c(.25) < 0 |
| 543 EXPECT_FLOAT_EQ(0.5f, curve->GetValue(0.5f)); | 622 EXPECT_NEAR(0.17f, curve->GetValue(base::TimeDelta::FromSecondsD(0.42f)), |
| 544 EXPECT_NEAR(0.83f, curve->GetValue(0.58f), 0.005f); // c(.58)=.73, k(.73)=.83 | 623 0.005f); // c(.42)=.27, k(.27)=.17 |
| 545 EXPECT_FLOAT_EQ(1.f, curve->GetValue(0.75f)); // Clamped. c(.75) > 1 | 624 EXPECT_FLOAT_EQ(0.5f, curve->GetValue(base::TimeDelta::FromSecondsD(0.5f))); |
| 546 EXPECT_FLOAT_EQ(1.f, curve->GetValue(1.f)); | 625 EXPECT_NEAR(0.83f, curve->GetValue(base::TimeDelta::FromSecondsD(0.58f)), |
| 547 EXPECT_FLOAT_EQ(1.f, curve->GetValue(2.f)); | 626 0.005f); // c(.58)=.73, k(.73)=.83 |
| 627 EXPECT_FLOAT_EQ(1.f, curve->GetValue(base::TimeDelta::FromSecondsD( |
| 628 0.75f))); // Clamped. c(.75) > 1 |
| 629 EXPECT_FLOAT_EQ(1.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| 630 EXPECT_FLOAT_EQ(1.f, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 548 } | 631 } |
| 549 | 632 |
| 550 // Tests that an animation with a curve timing function and multiple keyframes | 633 // Tests that an animation with a curve timing function and multiple keyframes |
| 551 // works as expected. | 634 // works as expected. |
| 552 TEST(KeyframedAnimationCurveTest, CurveTimingMultipleKeyframes) { | 635 TEST(KeyframedAnimationCurveTest, CurveTimingMultipleKeyframes) { |
| 553 scoped_ptr<KeyframedFloatAnimationCurve> curve( | 636 scoped_ptr<KeyframedFloatAnimationCurve> curve( |
| 554 KeyframedFloatAnimationCurve::Create()); | 637 KeyframedFloatAnimationCurve::Create()); |
| 555 curve->AddKeyframe(FloatKeyframe::Create(0.0, 0.f, nullptr)); | 638 curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta(), 0.f, nullptr)); |
| 556 curve->AddKeyframe(FloatKeyframe::Create(1.0, 1.f, nullptr)); | 639 curve->AddKeyframe( |
| 557 curve->AddKeyframe(FloatKeyframe::Create(2.0, 3.f, nullptr)); | 640 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.f), 1.f, nullptr)); |
| 558 curve->AddKeyframe(FloatKeyframe::Create(3.0, 6.f, nullptr)); | 641 curve->AddKeyframe( |
| 559 curve->AddKeyframe(FloatKeyframe::Create(4.0, 9.f, nullptr)); | 642 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(2.f), 3.f, nullptr)); |
| 643 curve->AddKeyframe( |
| 644 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(3.f), 6.f, nullptr)); |
| 645 curve->AddKeyframe( |
| 646 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(4.f), 9.f, nullptr)); |
| 560 curve->SetTimingFunction( | 647 curve->SetTimingFunction( |
| 561 CubicBezierTimingFunction::Create(0.5f, 0.f, 0.5f, 1.f).Pass()); | 648 CubicBezierTimingFunction::Create(0.5f, 0.f, 0.5f, 1.f).Pass()); |
| 562 EXPECT_FLOAT_EQ(0.f, curve->GetValue(-1.f)); | 649 EXPECT_FLOAT_EQ(0.f, curve->GetValue(base::TimeDelta::FromSecondsD(-1.f))); |
| 563 EXPECT_FLOAT_EQ(0.f, curve->GetValue(0.f)); | 650 EXPECT_FLOAT_EQ(0.f, curve->GetValue(base::TimeDelta::FromSecondsD(0.f))); |
| 564 EXPECT_NEAR(0.42f, curve->GetValue(1.f), 0.005f); | 651 EXPECT_NEAR(0.42f, curve->GetValue(base::TimeDelta::FromSecondsD(1.f)), |
| 565 EXPECT_NEAR(1.f, curve->GetValue(1.455f), 0.005f); | 652 0.005f); |
| 566 EXPECT_FLOAT_EQ(3.f, curve->GetValue(2.f)); | 653 EXPECT_NEAR(1.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.455f)), |
| 567 EXPECT_NEAR(8.72f, curve->GetValue(3.5f), 0.01f); | 654 0.005f); |
| 568 EXPECT_FLOAT_EQ(9.f, curve->GetValue(4.f)); | 655 EXPECT_FLOAT_EQ(3.f, curve->GetValue(base::TimeDelta::FromSecondsD(2.f))); |
| 569 EXPECT_FLOAT_EQ(9.f, curve->GetValue(5.f)); | 656 EXPECT_NEAR(8.72f, curve->GetValue(base::TimeDelta::FromSecondsD(3.5f)), |
| 657 0.01f); |
| 658 EXPECT_FLOAT_EQ(9.f, curve->GetValue(base::TimeDelta::FromSecondsD(4.f))); |
| 659 EXPECT_FLOAT_EQ(9.f, curve->GetValue(base::TimeDelta::FromSecondsD(5.f))); |
| 570 } | 660 } |
| 571 | 661 |
| 572 // Tests that an animation with a curve timing function that overshoots works as | 662 // Tests that an animation with a curve timing function that overshoots works as |
| 573 // expected. | 663 // expected. |
| 574 TEST(KeyframedAnimationCurveTest, CurveTimingOvershootMultipeKeyframes) { | 664 TEST(KeyframedAnimationCurveTest, CurveTimingOvershootMultipeKeyframes) { |
| 575 scoped_ptr<KeyframedFloatAnimationCurve> curve( | 665 scoped_ptr<KeyframedFloatAnimationCurve> curve( |
| 576 KeyframedFloatAnimationCurve::Create()); | 666 KeyframedFloatAnimationCurve::Create()); |
| 577 curve->AddKeyframe(FloatKeyframe::Create(0.0, 0.f, nullptr)); | 667 curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta(), 0.f, nullptr)); |
| 578 curve->AddKeyframe(FloatKeyframe::Create(1.0, 1.f, nullptr)); | 668 curve->AddKeyframe( |
| 579 curve->AddKeyframe(FloatKeyframe::Create(2.0, 3.f, nullptr)); | 669 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), 1.f, nullptr)); |
| 580 curve->AddKeyframe(FloatKeyframe::Create(3.0, 6.f, nullptr)); | 670 curve->AddKeyframe( |
| 581 curve->AddKeyframe(FloatKeyframe::Create(4.0, 9.f, nullptr)); | 671 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(2.0), 3.f, nullptr)); |
| 672 curve->AddKeyframe( |
| 673 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(3.0), 6.f, nullptr)); |
| 674 curve->AddKeyframe( |
| 675 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(4.0), 9.f, nullptr)); |
| 582 // Curve timing function producing outputs outside of range [0,1]. | 676 // Curve timing function producing outputs outside of range [0,1]. |
| 583 curve->SetTimingFunction( | 677 curve->SetTimingFunction( |
| 584 CubicBezierTimingFunction::Create(0.5f, -0.5f, 0.5f, 1.5f).Pass()); | 678 CubicBezierTimingFunction::Create(0.5f, -0.5f, 0.5f, 1.5f).Pass()); |
| 585 EXPECT_LE(curve->GetValue(1.f), 0.f); // c(.25) < 0 | 679 EXPECT_LE(curve->GetValue(base::TimeDelta::FromSecondsD(1.f)), |
| 586 EXPECT_GE(curve->GetValue(3.f), 9.f); // c(.75) > 1 | 680 0.f); // c(.25) < 0 |
| 681 EXPECT_GE(curve->GetValue(base::TimeDelta::FromSecondsD(3.f)), |
| 682 9.f); // c(.75) > 1 |
| 587 } | 683 } |
| 588 | 684 |
| 589 } // namespace | 685 } // namespace |
| 590 } // namespace cc | 686 } // namespace cc |
| OLD | NEW |