| OLD | NEW |
| (Empty) |
| 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 #include "core/animation/Animation.h" | |
| 7 | |
| 8 #include "bindings/v8/Dictionary.h" | |
| 9 #include "core/animation/AnimationTestHelper.h" | |
| 10 #include "core/animation/TimedItemTiming.h" | |
| 11 | |
| 12 #include <gtest/gtest.h> | |
| 13 | |
| 14 namespace WebCore { | |
| 15 | |
| 16 class AnimationAnimationTimingInputTest : public ::testing::Test { | |
| 17 protected: | |
| 18 AnimationAnimationTimingInputTest() | |
| 19 : m_isolate(v8::Isolate::GetCurrent()) | |
| 20 , m_scope(V8BindingTestScope::create(m_isolate)) | |
| 21 { | |
| 22 } | |
| 23 | |
| 24 void populateTiming(Timing& timing, Dictionary timingInputDictionary) | |
| 25 { | |
| 26 Animation::populateTiming(timing, timingInputDictionary); | |
| 27 } | |
| 28 | |
| 29 Timing applyTimingInputNumber(String timingProperty, double timingPropertyVa
lue) | |
| 30 { | |
| 31 v8::Handle<v8::Object> timingInput = v8::Object::New(m_isolate); | |
| 32 setV8ObjectPropertyAsNumber(timingInput, timingProperty, timingPropertyV
alue); | |
| 33 Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cas
t(timingInput), m_isolate); | |
| 34 Timing timing; | |
| 35 populateTiming(timing, timingInputDictionary); | |
| 36 return timing; | |
| 37 } | |
| 38 | |
| 39 Timing applyTimingInputString(String timingProperty, String timingPropertyVa
lue) | |
| 40 { | |
| 41 v8::Handle<v8::Object> timingInput = v8::Object::New(m_isolate); | |
| 42 setV8ObjectPropertyAsString(timingInput, timingProperty, timingPropertyV
alue); | |
| 43 Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cas
t(timingInput), m_isolate); | |
| 44 Timing timing; | |
| 45 populateTiming(timing, timingInputDictionary); | |
| 46 return timing; | |
| 47 } | |
| 48 | |
| 49 v8::Isolate* m_isolate; | |
| 50 | |
| 51 private: | |
| 52 OwnPtr<V8BindingTestScope> m_scope; | |
| 53 }; | |
| 54 | |
| 55 TEST_F(AnimationAnimationTimingInputTest, TimingInputStartDelay) | |
| 56 { | |
| 57 EXPECT_EQ(1.1, applyTimingInputNumber("delay", 1.1).startDelay); | |
| 58 EXPECT_EQ(-1, applyTimingInputNumber("delay", -1).startDelay); | |
| 59 EXPECT_EQ(1, applyTimingInputString("delay", "1").startDelay); | |
| 60 EXPECT_EQ(0, applyTimingInputString("delay", "1s").startDelay); | |
| 61 EXPECT_EQ(0, applyTimingInputString("delay", "Infinity").startDelay); | |
| 62 EXPECT_EQ(0, applyTimingInputString("delay", "-Infinity").startDelay); | |
| 63 EXPECT_EQ(0, applyTimingInputString("delay", "NaN").startDelay); | |
| 64 EXPECT_EQ(0, applyTimingInputString("delay", "rubbish").startDelay); | |
| 65 } | |
| 66 | |
| 67 TEST_F(AnimationAnimationTimingInputTest, TimingInputEndDelay) | |
| 68 { | |
| 69 EXPECT_EQ(10, applyTimingInputNumber("endDelay", 10).endDelay); | |
| 70 EXPECT_EQ(-2.5, applyTimingInputNumber("endDelay", -2.5).endDelay); | |
| 71 } | |
| 72 | |
| 73 TEST_F(AnimationAnimationTimingInputTest, TimingInputFillMode) | |
| 74 { | |
| 75 Timing::FillMode defaultFillMode = Timing::FillModeAuto; | |
| 76 | |
| 77 EXPECT_EQ(Timing::FillModeAuto, applyTimingInputString("fill", "auto").fillM
ode); | |
| 78 EXPECT_EQ(Timing::FillModeForwards, applyTimingInputString("fill", "forwards
").fillMode); | |
| 79 EXPECT_EQ(Timing::FillModeNone, applyTimingInputString("fill", "none").fillM
ode); | |
| 80 EXPECT_EQ(Timing::FillModeBackwards, applyTimingInputString("fill", "backwar
ds").fillMode); | |
| 81 EXPECT_EQ(Timing::FillModeBoth, applyTimingInputString("fill", "both").fillM
ode); | |
| 82 EXPECT_EQ(defaultFillMode, applyTimingInputString("fill", "everything!").fil
lMode); | |
| 83 EXPECT_EQ(defaultFillMode, applyTimingInputString("fill", "backwardsandforwa
rds").fillMode); | |
| 84 EXPECT_EQ(defaultFillMode, applyTimingInputNumber("fill", 2).fillMode); | |
| 85 } | |
| 86 | |
| 87 TEST_F(AnimationAnimationTimingInputTest, TimingInputIterationStart) | |
| 88 { | |
| 89 EXPECT_EQ(1.1, applyTimingInputNumber("iterationStart", 1.1).iterationStart)
; | |
| 90 EXPECT_EQ(0, applyTimingInputNumber("iterationStart", -1).iterationStart); | |
| 91 EXPECT_EQ(0, applyTimingInputString("iterationStart", "Infinity").iterationS
tart); | |
| 92 EXPECT_EQ(0, applyTimingInputString("iterationStart", "-Infinity").iteration
Start); | |
| 93 EXPECT_EQ(0, applyTimingInputString("iterationStart", "NaN").iterationStart)
; | |
| 94 EXPECT_EQ(0, applyTimingInputString("iterationStart", "rubbish").iterationSt
art); | |
| 95 } | |
| 96 | |
| 97 TEST_F(AnimationAnimationTimingInputTest, TimingInputIterationCount) | |
| 98 { | |
| 99 EXPECT_EQ(2.1, applyTimingInputNumber("iterations", 2.1).iterationCount); | |
| 100 EXPECT_EQ(0, applyTimingInputNumber("iterations", -1).iterationCount); | |
| 101 | |
| 102 Timing timing = applyTimingInputString("iterations", "Infinity"); | |
| 103 EXPECT_TRUE(std::isinf(timing.iterationCount)); | |
| 104 EXPECT_GT(timing.iterationCount, 0); | |
| 105 | |
| 106 EXPECT_EQ(0, applyTimingInputString("iterations", "-Infinity").iterationCoun
t); | |
| 107 EXPECT_EQ(1, applyTimingInputString("iterations", "NaN").iterationCount); | |
| 108 EXPECT_EQ(1, applyTimingInputString("iterations", "rubbish").iterationCount)
; | |
| 109 } | |
| 110 | |
| 111 TEST_F(AnimationAnimationTimingInputTest, TimingInputIterationDuration) | |
| 112 { | |
| 113 EXPECT_EQ(1.1, applyTimingInputNumber("duration", 1.1).iterationDuration); | |
| 114 EXPECT_TRUE(std::isnan(applyTimingInputNumber("duration", -1).iterationDurat
ion)); | |
| 115 EXPECT_EQ(1, applyTimingInputString("duration", "1").iterationDuration); | |
| 116 | |
| 117 Timing timing = applyTimingInputString("duration", "Infinity"); | |
| 118 EXPECT_TRUE(std::isinf(timing.iterationDuration)); | |
| 119 EXPECT_GT(timing.iterationDuration, 0); | |
| 120 | |
| 121 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "-Infinity").itera
tionDuration)); | |
| 122 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "NaN").iterationDu
ration)); | |
| 123 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "auto").iterationD
uration)); | |
| 124 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "rubbish").iterati
onDuration)); | |
| 125 } | |
| 126 | |
| 127 TEST_F(AnimationAnimationTimingInputTest, TimingInputPlaybackRate) | |
| 128 { | |
| 129 EXPECT_EQ(2.1, applyTimingInputNumber("playbackRate", 2.1).playbackRate); | |
| 130 EXPECT_EQ(-1, applyTimingInputNumber("playbackRate", -1).playbackRate); | |
| 131 EXPECT_EQ(1, applyTimingInputString("playbackRate", "Infinity").playbackRate
); | |
| 132 EXPECT_EQ(1, applyTimingInputString("playbackRate", "-Infinity").playbackRat
e); | |
| 133 EXPECT_EQ(1, applyTimingInputString("playbackRate", "NaN").playbackRate); | |
| 134 EXPECT_EQ(1, applyTimingInputString("playbackRate", "rubbish").playbackRate)
; | |
| 135 } | |
| 136 | |
| 137 TEST_F(AnimationAnimationTimingInputTest, TimingInputDirection) | |
| 138 { | |
| 139 Timing::PlaybackDirection defaultPlaybackDirection = Timing::PlaybackDirecti
onNormal; | |
| 140 | |
| 141 EXPECT_EQ(Timing::PlaybackDirectionNormal, applyTimingInputString("direction
", "normal").direction); | |
| 142 EXPECT_EQ(Timing::PlaybackDirectionReverse, applyTimingInputString("directio
n", "reverse").direction); | |
| 143 EXPECT_EQ(Timing::PlaybackDirectionAlternate, applyTimingInputString("direct
ion", "alternate").direction); | |
| 144 EXPECT_EQ(Timing::PlaybackDirectionAlternateReverse, applyTimingInputString(
"direction", "alternate-reverse").direction); | |
| 145 EXPECT_EQ(defaultPlaybackDirection, applyTimingInputString("direction", "rub
bish").direction); | |
| 146 EXPECT_EQ(defaultPlaybackDirection, applyTimingInputNumber("direction", 2).d
irection); | |
| 147 } | |
| 148 | |
| 149 TEST_F(AnimationAnimationTimingInputTest, TimingInputTimingFunction) | |
| 150 { | |
| 151 const RefPtr<TimingFunction> defaultTimingFunction = LinearTimingFunction::c
reate(); | |
| 152 | |
| 153 EXPECT_EQ(*CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease
), *applyTimingInputString("easing", "ease").timingFunction); | |
| 154 EXPECT_EQ(*CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease
In), *applyTimingInputString("easing", "ease-in").timingFunction); | |
| 155 EXPECT_EQ(*CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease
Out), *applyTimingInputString("easing", "ease-out").timingFunction); | |
| 156 EXPECT_EQ(*CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease
InOut), *applyTimingInputString("easing", "ease-in-out").timingFunction); | |
| 157 EXPECT_EQ(*LinearTimingFunction::create(), *applyTimingInputString("easing",
"linear").timingFunction); | |
| 158 EXPECT_EQ(*StepsTimingFunction::preset(StepsTimingFunction::Start), *applyTi
mingInputString("easing", "step-start").timingFunction); | |
| 159 EXPECT_EQ(*StepsTimingFunction::preset(StepsTimingFunction::Middle), *applyT
imingInputString("easing", "step-middle").timingFunction); | |
| 160 EXPECT_EQ(*StepsTimingFunction::preset(StepsTimingFunction::End), *applyTimi
ngInputString("easing", "step-end").timingFunction); | |
| 161 EXPECT_EQ(*CubicBezierTimingFunction::create(1, 1, 0.3, 0.3), *applyTimingIn
putString("easing", "cubic-bezier(1, 1, 0.3, 0.3)").timingFunction); | |
| 162 EXPECT_EQ(*StepsTimingFunction::create(3, StepsTimingFunction::StepAtStart),
*applyTimingInputString("easing", "steps(3, start)").timingFunction); | |
| 163 EXPECT_EQ(*StepsTimingFunction::create(5, StepsTimingFunction::StepAtMiddle)
, *applyTimingInputString("easing", "steps(5, middle)").timingFunction); | |
| 164 EXPECT_EQ(*StepsTimingFunction::create(5, StepsTimingFunction::StepAtEnd), *
applyTimingInputString("easing", "steps(5, end)").timingFunction); | |
| 165 EXPECT_EQ(*defaultTimingFunction, *applyTimingInputString("easing", "steps(5
.6, end)").timingFunction); | |
| 166 EXPECT_EQ(*defaultTimingFunction, *applyTimingInputString("easing", "cubic-b
ezier(2, 2, 0.3, 0.3)").timingFunction); | |
| 167 EXPECT_EQ(*defaultTimingFunction, *applyTimingInputString("easing", "rubbish
").timingFunction); | |
| 168 EXPECT_EQ(*defaultTimingFunction, *applyTimingInputNumber("easing", 2).timin
gFunction); | |
| 169 EXPECT_EQ(*defaultTimingFunction, *applyTimingInputString("easing", "initial
").timingFunction); | |
| 170 } | |
| 171 | |
| 172 TEST_F(AnimationAnimationTimingInputTest, TimingInputEmpty) | |
| 173 { | |
| 174 Timing updatedTiming; | |
| 175 Timing controlTiming; | |
| 176 | |
| 177 v8::Handle<v8::Object> timingInput = v8::Object::New(m_isolate); | |
| 178 Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cast(ti
mingInput), m_isolate); | |
| 179 populateTiming(updatedTiming, timingInputDictionary); | |
| 180 | |
| 181 EXPECT_EQ(controlTiming.startDelay, updatedTiming.startDelay); | |
| 182 EXPECT_EQ(controlTiming.fillMode, updatedTiming.fillMode); | |
| 183 EXPECT_EQ(controlTiming.iterationStart, updatedTiming.iterationStart); | |
| 184 EXPECT_EQ(controlTiming.iterationCount, updatedTiming.iterationCount); | |
| 185 EXPECT_TRUE(std::isnan(updatedTiming.iterationDuration)); | |
| 186 EXPECT_EQ(controlTiming.playbackRate, updatedTiming.playbackRate); | |
| 187 EXPECT_EQ(controlTiming.direction, updatedTiming.direction); | |
| 188 EXPECT_EQ(*controlTiming.timingFunction, *updatedTiming.timingFunction); | |
| 189 } | |
| 190 | |
| 191 } // namespace WebCore | |
| OLD | NEW |