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