1d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// found in the LICENSE file. 4d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 5d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "config.h" 6d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/animation/InterpolableValue.h" 7d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 8c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "core/animation/Interpolation.h" 9d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 10d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include <gtest/gtest.h> 11d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 12c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 13d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 14d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class AnimationInterpolableValueTest : public ::testing::Test { 15d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)protected: 16d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) InterpolableValue* interpolationValue(Interpolation& interpolation) 17d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 18d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return interpolation.getCachedValueForTesting(); 19d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 20d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 21d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) double interpolateNumbers(double a, double b, double progress) 22d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 2307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch RefPtrWillBeRawPtr<Interpolation> i = Interpolation::create(InterpolableNumber::create(a), InterpolableNumber::create(b)); 24d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) i->interpolate(0, progress); 25d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return toInterpolableNumber(interpolationValue(*i.get()))->value(); 26d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 27d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 28d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) bool interpolateBools(bool a, bool b, double progress) 29d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 3007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch RefPtrWillBeRawPtr<Interpolation> i = Interpolation::create(InterpolableBool::create(a), InterpolableBool::create(b)); 31d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) i->interpolate(0, progress); 32d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return toInterpolableBool(interpolationValue(*i.get()))->value(); 33d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 34d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 3507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch PassRefPtrWillBeRawPtr<Interpolation> interpolateLists(PassOwnPtrWillBeRawPtr<InterpolableList> listA, PassOwnPtrWillBeRawPtr<InterpolableList> listB, double progress) 36d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 3707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch RefPtrWillBeRawPtr<Interpolation> i = Interpolation::create(listA, listB); 38d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) i->interpolate(0, progress); 39d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return i; 40d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 41d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}; 42d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 43d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)TEST_F(AnimationInterpolableValueTest, InterpolateNumbers) 44d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 45d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_FLOAT_EQ(126, interpolateNumbers(42, 0, -2)); 46d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_FLOAT_EQ(42, interpolateNumbers(42, 0, 0)); 47d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_FLOAT_EQ(29.4f, interpolateNumbers(42, 0, 0.3)); 48d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_FLOAT_EQ(21, interpolateNumbers(42, 0, 0.5)); 49d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_FLOAT_EQ(0, interpolateNumbers(42, 0, 1)); 50d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_FLOAT_EQ(-21, interpolateNumbers(42, 0, 1.5)); 51d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 52d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 53d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)TEST_F(AnimationInterpolableValueTest, InterpolateBools) 54d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 55d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_FALSE(interpolateBools(false, true, -1)); 56d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_FALSE(interpolateBools(false, true, 0)); 57d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_FALSE(interpolateBools(false, true, 0.3)); 58d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_TRUE(interpolateBools(false, true, 0.5)); 59d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_TRUE(interpolateBools(false, true, 1)); 60d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_TRUE(interpolateBools(false, true, 2)); 61d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 62d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 63d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)TEST_F(AnimationInterpolableValueTest, SimpleList) 64d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 6507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch OwnPtrWillBeRawPtr<InterpolableList> listA = InterpolableList::create(3); 66d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) listA->set(0, InterpolableNumber::create(0)); 67d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) listA->set(1, InterpolableNumber::create(42)); 68d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) listA->set(2, InterpolableNumber::create(20.5)); 69d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 7007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch OwnPtrWillBeRawPtr<InterpolableList> listB = InterpolableList::create(3); 71d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) listB->set(0, InterpolableNumber::create(100)); 72d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) listB->set(1, InterpolableNumber::create(-200)); 73d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) listB->set(2, InterpolableNumber::create(300)); 74d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 7507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch RefPtrWillBeRawPtr<Interpolation> i = interpolateLists(listA.release(), listB.release(), 0.3); 76d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) InterpolableList* outList = toInterpolableList(interpolationValue(*i.get())); 77d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_FLOAT_EQ(30, toInterpolableNumber(outList->get(0))->value()); 78d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_FLOAT_EQ(-30.6f, toInterpolableNumber(outList->get(1))->value()); 79d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_FLOAT_EQ(104.35f, toInterpolableNumber(outList->get(2))->value()); 80d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 81d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 82d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)TEST_F(AnimationInterpolableValueTest, NestedList) 83d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 8407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch OwnPtrWillBeRawPtr<InterpolableList> listA = InterpolableList::create(3); 85d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) listA->set(0, InterpolableNumber::create(0)); 8607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch OwnPtrWillBeRawPtr<InterpolableList> subListA = InterpolableList::create(1); 87d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) subListA->set(0, InterpolableNumber::create(100)); 88d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) listA->set(1, subListA.release()); 89d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) listA->set(2, InterpolableBool::create(false)); 90d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 9107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch OwnPtrWillBeRawPtr<InterpolableList> listB = InterpolableList::create(3); 92d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) listB->set(0, InterpolableNumber::create(100)); 9307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch OwnPtrWillBeRawPtr<InterpolableList> subListB = InterpolableList::create(1); 94d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) subListB->set(0, InterpolableNumber::create(50)); 95d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) listB->set(1, subListB.release()); 96d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) listB->set(2, InterpolableBool::create(true)); 97d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 9807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch RefPtrWillBeRawPtr<Interpolation> i = interpolateLists(listA.release(), listB.release(), 0.5); 99d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) InterpolableList* outList = toInterpolableList(interpolationValue(*i.get())); 100d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_FLOAT_EQ(50, toInterpolableNumber(outList->get(0))->value()); 101d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_FLOAT_EQ(75, toInterpolableNumber(toInterpolableList(outList->get(1))->get(0))->value()); 102d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) EXPECT_TRUE(toInterpolableBool(outList->get(2))->value()); 103d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 104d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 105d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 106