| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include <cmath> | |
| #import "flutter/third_party/spring_animation/spring_animation.h" | |
| #include "gtest/gtest.h" | |
| TEST(SpringAnimationTest, CanInitializeCorrectly) { | |
| SpringAnimation* animation = [[SpringAnimation alloc] initWithStiffness:1000 | |
| damping:500 | |
| mass:3 | |
| initialVelocity:0 | |
| fromValue:0 | |
| toValue:1000]; | |
| ASSERT_TRUE(animation.stiffness == 1000); | |
| ASSERT_TRUE(animation.damping == 500); | |
| ASSERT_TRUE(animation.mass == 3); | |
| ASSERT_TRUE(animation.initialVelocity == 0); | |
| ASSERT_TRUE(animation.fromValue == 0); | |
| ASSERT_TRUE(animation.toValue == 1000); | |
| } | |
| TEST(SpringAnimationTest, CurveFunctionCanWorkCorrectly) { | |
| // Here is the keyboard curve config on iOS platform. | |
| SpringAnimation* animation = [[SpringAnimation alloc] initWithStiffness:1000 | |
| damping:500 | |
| mass:3 | |
| initialVelocity:0 | |
| fromValue:0 | |
| toValue:1000]; | |
| const double accuracy = 1.0; | |
| const double startTime = 0; | |
| const double endTime = 0.6; | |
| const double startValue = [animation curveFunction:startTime]; | |
| ASSERT_TRUE(fabs(startValue - animation.fromValue) < accuracy); | |
| const double toValue = [animation curveFunction:endTime]; | |
| ASSERT_TRUE(fabs(toValue - animation.toValue) < accuracy); | |
| } | |
| TEST(SpringAnimationTest, CanUpdatePositionValuesAndCalculateCorrectly) { | |
| SpringAnimation* animation = [[SpringAnimation alloc] initWithStiffness:1000 | |
| damping:500 | |
| mass:3 | |
| initialVelocity:0 | |
| fromValue:0 | |
| toValue:1000]; | |
| const double startTime = 0; | |
| const double endTime = 0.6; | |
| const double startValue1 = [animation curveFunction:startTime]; | |
| const double toValue1 = [animation curveFunction:endTime]; | |
| animation.fromValue = 10; | |
| animation.toValue = 800; | |
| ASSERT_TRUE(animation.fromValue == 10); | |
| ASSERT_TRUE(animation.toValue == 800); | |
| const double startValue2 = [animation curveFunction:startTime]; | |
| const double toValue2 = [animation curveFunction:endTime]; | |
| ASSERT_TRUE(startValue2 > startValue1); | |
| ASSERT_TRUE(toValue2 < toValue1); | |
| } |