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
3// found in the LICENSE file.
4
5#include "config.h"
6
7#include "core/animation/animatable/AnimatableLength.h"
8
9#include "platform/CalculationValue.h"
10
11#include <gtest/gtest.h>
12
13namespace blink {
14
15namespace {
16
17    PassRefPtrWillBeRawPtr<AnimatableLength> create(const Length& length, double zoom = 1)
18    {
19        return AnimatableLength::create(length, zoom);
20    }
21
22} // namespace
23
24TEST(AnimationAnimatableLengthTest, RoundTripConversion)
25{
26    EXPECT_EQ(Length(0, Fixed), create(Length(0, Fixed))->length(1, ValueRangeAll));
27    EXPECT_EQ(Length(0, Percent), create(Length(0, Percent))->length(1, ValueRangeAll));
28    EXPECT_EQ(Length(10, Fixed), create(Length(10, Fixed))->length(1, ValueRangeAll));
29    EXPECT_EQ(Length(10, Percent), create(Length(10, Percent))->length(1, ValueRangeAll));
30    EXPECT_EQ(Length(-10, Fixed), create(Length(-10, Fixed))->length(1, ValueRangeAll));
31    EXPECT_EQ(Length(-10, Percent), create(Length(-10, Percent))->length(1, ValueRangeAll));
32    Length calc = Length(CalculationValue::create(PixelsAndPercent(5, 10), ValueRangeAll));
33    EXPECT_EQ(calc, create(calc)->length(1, ValueRangeAll));
34}
35
36TEST(AnimationAnimatableLengthTest, ValueRangeNonNegative)
37{
38    EXPECT_EQ(Length(10, Fixed), create(Length(10, Fixed))->length(1, ValueRangeNonNegative));
39    EXPECT_EQ(Length(10, Percent), create(Length(10, Percent))->length(1, ValueRangeNonNegative));
40    EXPECT_EQ(Length(0, Fixed), create(Length(-10, Fixed))->length(1, ValueRangeNonNegative));
41    EXPECT_EQ(Length(0, Percent), create(Length(-10, Percent))->length(1, ValueRangeNonNegative));
42    Length calc = Length(CalculationValue::create(PixelsAndPercent(-5, -10), ValueRangeNonNegative));
43    EXPECT_TRUE(calc == create(calc)->length(1, ValueRangeNonNegative));
44}
45
46TEST(AnimationAnimatableLengthTest, Zoom)
47{
48    EXPECT_EQ(Length(4, Fixed), create(Length(10, Fixed), 5)->length(2, ValueRangeAll));
49    EXPECT_EQ(Length(10, Percent), create(Length(10, Percent), 5)->length(2, ValueRangeAll));
50    Length calc = Length(CalculationValue::create(PixelsAndPercent(5, 10), ValueRangeAll));
51    Length result = Length(CalculationValue::create(PixelsAndPercent(2, 10), ValueRangeAll));
52    EXPECT_TRUE(result == create(calc, 5)->length(2, ValueRangeAll));
53}
54
55TEST(AnimationAnimatableLengthTest, Equals)
56{
57    EXPECT_TRUE(create(Length(10, Fixed))->equals(create(Length(10, Fixed)).get()));
58    EXPECT_TRUE(create(Length(20, Percent))->equals(create(Length(20, Percent)).get()));
59    EXPECT_FALSE(create(Length(10, Fixed))->equals(create(Length(10, Percent)).get()));
60    EXPECT_FALSE(create(Length(0, Percent))->equals(create(Length(0, Fixed)).get()));
61    Length calc = Length(CalculationValue::create(PixelsAndPercent(5, 10), ValueRangeAll));
62    EXPECT_TRUE(create(calc)->equals(create(calc).get()));
63    EXPECT_FALSE(create(calc)->equals(create(Length(10, Percent)).get()));
64}
65
66TEST(AnimationAnimatableLengthTest, Interpolate)
67{
68    EXPECT_TRUE(AnimatableValue::interpolate(create(Length(10, Fixed)).get(), create(Length(0, Fixed)).get(), 0.2)->equals(create(Length(8, Fixed)).get()));
69    EXPECT_TRUE(AnimatableValue::interpolate(create(Length(4, Percent)).get(), create(Length(12, Percent)).get(), 0.25)->equals(create(Length(6, Percent)).get()));
70    Length calc = Length(CalculationValue::create(PixelsAndPercent(12, 4), ValueRangeAll));
71    EXPECT_TRUE(AnimatableValue::interpolate(create(Length(20, Fixed)).get(), create(Length(10, Percent)).get(), 0.4)->equals(create(calc).get()));
72}
73
74} // namespace blink
75