1e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch/* 2e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * Copyright (c) 2013, Google Inc. All rights reserved. 3e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * 4e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * Redistribution and use in source and binary forms, with or without 5e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * modification, are permitted provided that the following conditions are 6e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * met: 7e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * 8e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * * Redistributions of source code must retain the above copyright 9e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * notice, this list of conditions and the following disclaimer. 10e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * * Redistributions in binary form must reproduce the above 11e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * copyright notice, this list of conditions and the following disclaimer 12e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * in the documentation and/or other materials provided with the 13e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * distribution. 14e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * * Neither the name of Google Inc. nor the names of its 15e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * contributors may be used to endorse or promote products derived from 16e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * this software without specific prior written permission. 17e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * 18e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch */ 30e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 31e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "config.h" 32e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/animation/AnimatableNumber.h" 33e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 34e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/css/CSSCalculationValue.h" 35e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/css/CSSPrimitiveValue.h" 36e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/platform/CalculationValue.h" 37e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/MathExtras.h" 38e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 39e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include <gtest/gtest.h> 40e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 41e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochusing namespace WebCore; 42e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 43e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochnamespace { 44e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 45e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochclass AnimatableNumberTest : public ::testing::Test { 46e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochprotected: 47e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch virtual void SetUp() 48e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch { 49e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 50e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 51e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch PassRefPtr<AnimatableNumber> create(double value) 52e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch { 53e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return create(value, CSSPrimitiveValue::CSS_NUMBER); 54e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 55e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 56e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch PassRefPtr<AnimatableNumber> create(double value, CSSPrimitiveValue::UnitTypes type) 57e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch { 58e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return AnimatableNumber::create(CSSPrimitiveValue::create(value, type).get()); 59e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 60e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 61e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch PassRefPtr<CSSCalcValue> createCalc(double valueLeft, CSSPrimitiveValue::UnitTypes typeLeft, double valueRight, CSSPrimitiveValue::UnitTypes typeRight) 62e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch { 63e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return CSSCalcValue::create(CSSCalcValue::createExpressionNode( 64e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSCalcValue::createExpressionNode(CSSPrimitiveValue::create(valueLeft, typeLeft), valueLeft == trunc(valueLeft)), 65e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSCalcValue::createExpressionNode(CSSPrimitiveValue::create(valueRight, typeRight), valueRight == trunc(valueRight)), 66e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CalcAdd 67e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch )); 68e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 69e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 70e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch bool testToCSSValue(CSSValue* cssValue) 71e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch { 72e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return testToCSSValue(cssValue, cssValue); 73e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 74e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch bool testToCSSValue(CSSValue* cssValueExpected, CSSValue* cssValue) 75e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch { 76e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return AnimatableNumber::create(cssValue)->toCSSValue()->equals(*cssValueExpected); 77e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 78e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch bool testInterpolate(CSSValue* cssValueExpected, AnimatableNumber* numberA, AnimatableNumber* numberB, double fraction) 79e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch { 80e6d4491e48613634a83c1957c72759da80987961Ben Murdoch return toAnimatableNumber(AnimatableValue::interpolate(numberA, numberB, fraction).get())->toCSSValue()->equals(*cssValueExpected); 81e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 82e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch bool testAdd(CSSValue* cssValueExpected, AnimatableNumber* numberA, AnimatableNumber* numberB) 83e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch { 84e6d4491e48613634a83c1957c72759da80987961Ben Murdoch return toAnimatableNumber(AnimatableValue::add(numberA, numberB).get())->toCSSValue()->equals(*cssValueExpected); 85e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 86e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch}; 87e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 88e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben MurdochTEST_F(AnimatableNumberTest, CanCreateFrom) 89e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 90e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_NUMBER).get())); 91e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_PX).get())); 92e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_CM).get())); 93e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_MM).get())); 94e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_IN).get())); 95e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_PT).get())); 96e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_PC).get())); 97e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_EMS).get())); 98e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_EXS).get())); 99e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_REMS).get())); 100e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_DEG).get())); 101e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_RAD).get())); 102e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_GRAD).get())); 103e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_TURN).get())); 104e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_PERCENTAGE).get())); 105e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_VW).get())); 106e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_VH).get())); 107e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_VMIN).get())); 108e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_VMAX).get())); 109e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_MS).get())); 110e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_S).get())); 111e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_HZ).get())); 112e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_KHZ).get())); 113e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_DPPX).get())); 114e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_DPI).get())); 115e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_DPCM).get())); 116e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 117e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(createCalc(3, CSSPrimitiveValue::CSS_PX, 5, CSSPrimitiveValue::CSS_CM).get())); 118e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create(createCalc(3, CSSPrimitiveValue::CSS_PX, 5, CSSPrimitiveValue::CSS_CM)).get())); 119e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 120e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_FALSE(AnimatableNumber::canCreateFrom(CSSPrimitiveValue::create("NaN", CSSPrimitiveValue::CSS_STRING).get())); 121e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 122e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 123e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben MurdochTEST_F(AnimatableNumberTest, Create) 124e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 125e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_NUMBER).get())); 126e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_PX).get())); 127e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_CM).get())); 128e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_MM).get())); 129e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_IN).get())); 130e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_PT).get())); 131e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_PC).get())); 132e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_EMS).get())); 133e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_EXS).get())); 134e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_REMS).get())); 135e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_DEG).get())); 136e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_RAD).get())); 137e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_GRAD).get())); 138e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_TURN).get())); 139e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_PERCENTAGE).get())); 140e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_VW).get())); 141e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_VH).get())); 142e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_VMIN).get())); 143e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_VMAX).get())); 144e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_MS).get())); 145e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_S).get())); 146e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_HZ).get())); 147e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_KHZ).get())); 148e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_DPPX).get())); 149e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_DPI).get())); 150e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>(create(5, CSSPrimitiveValue::CSS_DPCM).get())); 151e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 152e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>( 153e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch AnimatableNumber::create(createCalc(3, CSSPrimitiveValue::CSS_PX, 5, CSSPrimitiveValue::CSS_CM).get()).get() 154e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch )); 155e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(static_cast<bool>( 156e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch AnimatableNumber::create(CSSPrimitiveValue::create(createCalc(3, CSSPrimitiveValue::CSS_PX, 5, CSSPrimitiveValue::CSS_CM)).get()).get() 157e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch )); 158e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 159e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 160e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben MurdochTEST_F(AnimatableNumberTest, ToCSSValue) 161e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 162e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_NUMBER).get())); 163e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_PX).get())); 164e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_CM).get())); 165e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_MM).get())); 166e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_IN).get())); 167e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_PT).get())); 168e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_PC).get())); 169e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_EMS).get())); 170e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_EXS).get())); 171e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_REMS).get())); 172e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_DEG).get())); 173e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_RAD).get())); 174e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_GRAD).get())); 175e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_TURN).get())); 176e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_PERCENTAGE).get())); 177e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_VW).get())); 178e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_VH).get())); 179e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_VMIN).get())); 180e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_VMAX).get())); 181e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_MS).get())); 182e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_S).get())); 183e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_HZ).get())); 184e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_KHZ).get())); 185e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_DPPX).get())); 186e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_DPI).get())); 187e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(-5, CSSPrimitiveValue::CSS_DPCM).get())); 188e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 189e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(createCalc(3, CSSPrimitiveValue::CSS_PX, 5, CSSPrimitiveValue::CSS_IN)).get())); 190e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testToCSSValue(CSSPrimitiveValue::create(createCalc(3, CSSPrimitiveValue::CSS_PX, 5, CSSPrimitiveValue::CSS_IN)).get(), 191e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch createCalc(3, CSSPrimitiveValue::CSS_PX, 5, CSSPrimitiveValue::CSS_IN).get())); 192e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 193e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 194e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben MurdochTEST_F(AnimatableNumberTest, Interpolate) 195e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 196e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch RefPtr<AnimatableNumber> from10 = create(10); 197e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch RefPtr<AnimatableNumber> to20 = create(20); 198e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_NUMBER).get(), from10.get(), to20.get(), -0.5)); 199e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(10, CSSPrimitiveValue::CSS_NUMBER).get(), from10.get(), to20.get(), 0)); 200e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(14, CSSPrimitiveValue::CSS_NUMBER).get(), from10.get(), to20.get(), 0.4)); 201e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(15, CSSPrimitiveValue::CSS_NUMBER).get(), from10.get(), to20.get(), 0.5)); 202e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(16, CSSPrimitiveValue::CSS_NUMBER).get(), from10.get(), to20.get(), 0.6)); 203e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(20, CSSPrimitiveValue::CSS_NUMBER).get(), from10.get(), to20.get(), 1)); 204e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(25, CSSPrimitiveValue::CSS_NUMBER).get(), from10.get(), to20.get(), 1.5)); 205e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 206e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch RefPtr<AnimatableNumber> from10px = create(10, CSSPrimitiveValue::CSS_PX); 207e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch RefPtr<AnimatableNumber> to20pxAsInches = create(20.0 / 96, CSSPrimitiveValue::CSS_IN); 208e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(5, CSSPrimitiveValue::CSS_PX).get(), from10px.get(), to20pxAsInches.get(), -0.5)); 209e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(10, CSSPrimitiveValue::CSS_PX).get(), from10px.get(), to20pxAsInches.get(), 0)); 210e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(14, CSSPrimitiveValue::CSS_PX).get(), from10px.get(), to20pxAsInches.get(), 0.4)); 211e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(15, CSSPrimitiveValue::CSS_PX).get(), from10px.get(), to20pxAsInches.get(), 0.5)); 212e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(16, CSSPrimitiveValue::CSS_PX).get(), from10px.get(), to20pxAsInches.get(), 0.6)); 213e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(20.0 / 96, CSSPrimitiveValue::CSS_IN).get(), from10px.get(), to20pxAsInches.get(), 1)); 214e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(25, CSSPrimitiveValue::CSS_PX).get(), from10px.get(), to20pxAsInches.get(), 1.5)); 215e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 216e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch RefPtr<AnimatableNumber> from10em = create(10, CSSPrimitiveValue::CSS_EMS); 217e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch RefPtr<AnimatableNumber> to20rem = create(20, CSSPrimitiveValue::CSS_REMS); 218e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(createCalc(15, CSSPrimitiveValue::CSS_EMS, -10, CSSPrimitiveValue::CSS_REMS)).get(), 219e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch from10em.get(), to20rem.get(), -0.5)); 220e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(10, CSSPrimitiveValue::CSS_EMS).get(), 221e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch from10em.get(), to20rem.get(), 0)); 222e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(createCalc(6, CSSPrimitiveValue::CSS_EMS, 8, CSSPrimitiveValue::CSS_REMS)).get(), 223e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch from10em.get(), to20rem.get(), 0.4)); 224e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(createCalc(5, CSSPrimitiveValue::CSS_EMS, 10, CSSPrimitiveValue::CSS_REMS)).get(), 225e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch from10em.get(), to20rem.get(), 0.5)); 226e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(createCalc(4, CSSPrimitiveValue::CSS_EMS, 12, CSSPrimitiveValue::CSS_REMS)).get(), 227e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch from10em.get(), to20rem.get(), 0.6)); 228e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(20, CSSPrimitiveValue::CSS_REMS).get(), 229e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch from10em.get(), to20rem.get(), 1)); 230e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testInterpolate(CSSPrimitiveValue::create(createCalc(-5, CSSPrimitiveValue::CSS_EMS, 30, CSSPrimitiveValue::CSS_REMS)).get(), 231e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch from10em.get(), to20rem.get(), 1.5)); 232e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 233e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 234e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben MurdochTEST_F(AnimatableNumberTest, Add) 235e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 236e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testAdd(CSSPrimitiveValue::create(10, CSSPrimitiveValue::CSS_NUMBER).get(), create(4).get(), create(6).get())); 237e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testAdd(CSSPrimitiveValue::create(10, CSSPrimitiveValue::CSS_NUMBER).get(), create(0).get(), create(10).get())); 238e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testAdd(CSSPrimitiveValue::create(10, CSSPrimitiveValue::CSS_PX).get(), create(10, CSSPrimitiveValue::CSS_PX).get(), create(0, CSSPrimitiveValue::CSS_MM).get())); 239e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testAdd(CSSPrimitiveValue::create(100, CSSPrimitiveValue::CSS_PX).get(), create(4, CSSPrimitiveValue::CSS_PX).get(), create(1, CSSPrimitiveValue::CSS_IN).get())); 240e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testAdd( 241e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSPrimitiveValue::create(createCalc(10, CSSPrimitiveValue::CSS_EMS, 20, CSSPrimitiveValue::CSS_REMS)).get(), 242e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch create(10, CSSPrimitiveValue::CSS_EMS).get(), 243e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch create(20, CSSPrimitiveValue::CSS_REMS).get())); 244e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testAdd( 245e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSPrimitiveValue::create(10, CSSPrimitiveValue::CSS_EMS).get(), 246e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch create(10, CSSPrimitiveValue::CSS_EMS).get(), 247e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch create(0, CSSPrimitiveValue::CSS_REMS).get())); 248e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EXPECT_TRUE(testAdd( 249e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSPrimitiveValue::create(20, CSSPrimitiveValue::CSS_REMS).get(), 250e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch create(0, CSSPrimitiveValue::CSS_EMS).get(), 251e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch create(20, CSSPrimitiveValue::CSS_REMS).get())); 252e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 253e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 254e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 255