| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/animation/TimingInput.h" | 5 #include "core/animation/TimingInput.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/V8BindingForTesting.h" | 7 #include "bindings/core/v8/V8BindingForTesting.h" |
| 8 #include "bindings/core/v8/V8KeyframeEffectOptions.h" | 8 #include "bindings/core/v8/V8KeyframeEffectOptions.h" |
| 9 #include "core/animation/AnimationEffectTiming.h" | 9 #include "core/animation/AnimationEffectTiming.h" |
| 10 #include "core/animation/AnimationTestHelper.h" | 10 #include "core/animation/AnimationTestHelper.h" |
| 11 #include "core/testing/DummyPageHolder.h" | 11 #include "core/testing/DummyPageHolder.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 13 #include <v8.h> | 13 #include <v8.h> |
| 14 | 14 |
| 15 namespace blink { | 15 namespace blink { |
| 16 | 16 |
| 17 class AnimationTimingInputTest : public ::testing::Test { | 17 class AnimationTimingInputTest : public ::testing::Test { |
| 18 protected: | 18 protected: |
| 19 AnimationTimingInputTest() | 19 AnimationTimingInputTest() |
| 20 : m_isolate(v8::Isolate::GetCurrent()) | 20 : m_isolate(v8::Isolate::GetCurrent()) |
| 21 , m_scope(m_isolate) | 21 , m_scope(m_isolate) |
| 22 { | 22 { |
| 23 } | 23 } |
| 24 | 24 |
| 25 Timing applyTimingInputNumber(String timingProperty, double timingPropertyVa
lue) | 25 Timing applyTimingInputNumber(String timingProperty, double timingPropertyVa
lue, bool& timingConversionSuccess) |
| 26 { | 26 { |
| 27 v8::Local<v8::Object> timingInput = v8::Object::New(m_isolate); | 27 v8::Local<v8::Object> timingInput = v8::Object::New(m_isolate); |
| 28 setV8ObjectPropertyAsNumber(m_isolate, timingInput, timingProperty, timi
ngPropertyValue); | 28 setV8ObjectPropertyAsNumber(m_isolate, timingInput, timingProperty, timi
ngPropertyValue); |
| 29 KeyframeEffectOptions timingInputDictionary; | 29 KeyframeEffectOptions timingInputDictionary; |
| 30 V8KeyframeEffectOptions::toImpl(m_isolate, timingInput, timingInputDicti
onary, exceptionState); | 30 V8KeyframeEffectOptions::toImpl(m_isolate, timingInput, timingInputDicti
onary, exceptionState); |
| 31 return TimingInput::convert(timingInputDictionary, nullptr); | 31 Timing result; |
| 32 timingConversionSuccess = TimingInput::convert(timingInputDictionary, re
sult, nullptr, exceptionState); |
| 33 return result; |
| 32 } | 34 } |
| 33 | 35 |
| 34 Timing applyTimingInputString(String timingProperty, String timingPropertyVa
lue) | 36 Timing applyTimingInputString(String timingProperty, String timingPropertyVa
lue, bool& timingConversionSuccess) |
| 35 { | 37 { |
| 36 v8::Local<v8::Object> timingInput = v8::Object::New(m_isolate); | 38 v8::Local<v8::Object> timingInput = v8::Object::New(m_isolate); |
| 37 setV8ObjectPropertyAsString(m_isolate, timingInput, timingProperty, timi
ngPropertyValue); | 39 setV8ObjectPropertyAsString(m_isolate, timingInput, timingProperty, timi
ngPropertyValue); |
| 38 KeyframeEffectOptions timingInputDictionary; | 40 KeyframeEffectOptions timingInputDictionary; |
| 39 V8KeyframeEffectOptions::toImpl(m_isolate, timingInput, timingInputDicti
onary, exceptionState); | 41 V8KeyframeEffectOptions::toImpl(m_isolate, timingInput, timingInputDicti
onary, exceptionState); |
| 40 return TimingInput::convert(timingInputDictionary, nullptr); | 42 Timing result; |
| 43 timingConversionSuccess = TimingInput::convert(timingInputDictionary, re
sult, nullptr, exceptionState); |
| 44 return result; |
| 41 } | 45 } |
| 42 | 46 |
| 43 v8::Isolate* m_isolate; | 47 v8::Isolate* m_isolate; |
| 44 TrackExceptionState exceptionState; | 48 TrackExceptionState exceptionState; |
| 45 | 49 |
| 46 private: | 50 private: |
| 47 V8TestingScope m_scope; | 51 V8TestingScope m_scope; |
| 48 }; | 52 }; |
| 49 | 53 |
| 50 TEST_F(AnimationTimingInputTest, TimingInputStartDelay) | 54 TEST_F(AnimationTimingInputTest, TimingInputStartDelay) |
| 51 { | 55 { |
| 52 EXPECT_EQ(1.1, applyTimingInputNumber("delay", 1100).startDelay); | 56 bool ignoredSuccess; |
| 53 EXPECT_EQ(-1, applyTimingInputNumber("delay", -1000).startDelay); | 57 EXPECT_EQ(1.1, applyTimingInputNumber("delay", 1100, ignoredSuccess).startDe
lay); |
| 54 EXPECT_EQ(1, applyTimingInputString("delay", "1000").startDelay); | 58 EXPECT_EQ(-1, applyTimingInputNumber("delay", -1000, ignoredSuccess).startDe
lay); |
| 55 EXPECT_EQ(0, applyTimingInputString("delay", "1s").startDelay); | 59 EXPECT_EQ(1, applyTimingInputString("delay", "1000", ignoredSuccess).startDe
lay); |
| 56 EXPECT_EQ(0, applyTimingInputString("delay", "Infinity").startDelay); | 60 EXPECT_EQ(0, applyTimingInputString("delay", "1s", ignoredSuccess).startDela
y); |
| 57 EXPECT_EQ(0, applyTimingInputString("delay", "-Infinity").startDelay); | 61 EXPECT_EQ(0, applyTimingInputString("delay", "Infinity", ignoredSuccess).sta
rtDelay); |
| 58 EXPECT_EQ(0, applyTimingInputString("delay", "NaN").startDelay); | 62 EXPECT_EQ(0, applyTimingInputString("delay", "-Infinity", ignoredSuccess).st
artDelay); |
| 59 EXPECT_EQ(0, applyTimingInputString("delay", "rubbish").startDelay); | 63 EXPECT_EQ(0, applyTimingInputString("delay", "NaN", ignoredSuccess).startDel
ay); |
| 64 EXPECT_EQ(0, applyTimingInputString("delay", "rubbish", ignoredSuccess).star
tDelay); |
| 60 } | 65 } |
| 61 | 66 |
| 62 TEST_F(AnimationTimingInputTest, TimingInputEndDelay) | 67 TEST_F(AnimationTimingInputTest, TimingInputEndDelay) |
| 63 { | 68 { |
| 64 EXPECT_EQ(10, applyTimingInputNumber("endDelay", 10000).endDelay); | 69 bool ignoredSuccess; |
| 65 EXPECT_EQ(-2.5, applyTimingInputNumber("endDelay", -2500).endDelay); | 70 EXPECT_EQ(10, applyTimingInputNumber("endDelay", 10000, ignoredSuccess).endD
elay); |
| 71 EXPECT_EQ(-2.5, applyTimingInputNumber("endDelay", -2500, ignoredSuccess).en
dDelay); |
| 66 } | 72 } |
| 67 | 73 |
| 68 TEST_F(AnimationTimingInputTest, TimingInputFillMode) | 74 TEST_F(AnimationTimingInputTest, TimingInputFillMode) |
| 69 { | 75 { |
| 70 Timing::FillMode defaultFillMode = Timing::FillModeAuto; | 76 Timing::FillMode defaultFillMode = Timing::FillModeAuto; |
| 77 bool ignoredSuccess; |
| 71 | 78 |
| 72 EXPECT_EQ(Timing::FillModeAuto, applyTimingInputString("fill", "auto").fillM
ode); | 79 EXPECT_EQ(Timing::FillModeAuto, applyTimingInputString("fill", "auto", ignor
edSuccess).fillMode); |
| 73 EXPECT_EQ(Timing::FillModeForwards, applyTimingInputString("fill", "forwards
").fillMode); | 80 EXPECT_EQ(Timing::FillModeForwards, applyTimingInputString("fill", "forwards
", ignoredSuccess).fillMode); |
| 74 EXPECT_EQ(Timing::FillModeNone, applyTimingInputString("fill", "none").fillM
ode); | 81 EXPECT_EQ(Timing::FillModeNone, applyTimingInputString("fill", "none", ignor
edSuccess).fillMode); |
| 75 EXPECT_EQ(Timing::FillModeBackwards, applyTimingInputString("fill", "backwar
ds").fillMode); | 82 EXPECT_EQ(Timing::FillModeBackwards, applyTimingInputString("fill", "backwar
ds", ignoredSuccess).fillMode); |
| 76 EXPECT_EQ(Timing::FillModeBoth, applyTimingInputString("fill", "both").fillM
ode); | 83 EXPECT_EQ(Timing::FillModeBoth, applyTimingInputString("fill", "both", ignor
edSuccess).fillMode); |
| 77 EXPECT_EQ(defaultFillMode, applyTimingInputString("fill", "everything!").fil
lMode); | 84 EXPECT_EQ(defaultFillMode, applyTimingInputString("fill", "everything!", ign
oredSuccess).fillMode); |
| 78 EXPECT_EQ(defaultFillMode, applyTimingInputString("fill", "backwardsandforwa
rds").fillMode); | 85 EXPECT_EQ(defaultFillMode, applyTimingInputString("fill", "backwardsandforwa
rds", ignoredSuccess).fillMode); |
| 79 EXPECT_EQ(defaultFillMode, applyTimingInputNumber("fill", 2).fillMode); | 86 EXPECT_EQ(defaultFillMode, applyTimingInputNumber("fill", 2, ignoredSuccess)
.fillMode); |
| 80 } | 87 } |
| 81 | 88 |
| 82 TEST_F(AnimationTimingInputTest, TimingInputIterationStart) | 89 TEST_F(AnimationTimingInputTest, TimingInputIterationStart) |
| 83 { | 90 { |
| 84 EXPECT_EQ(1.1, applyTimingInputNumber("iterationStart", 1.1).iterationStart)
; | 91 bool ignoredSuccess; |
| 85 EXPECT_EQ(0, applyTimingInputNumber("iterationStart", -1).iterationStart); | 92 EXPECT_EQ(1.1, applyTimingInputNumber("iterationStart", 1.1, ignoredSuccess)
.iterationStart); |
| 86 EXPECT_EQ(0, applyTimingInputString("iterationStart", "Infinity").iterationS
tart); | 93 EXPECT_EQ(0, applyTimingInputNumber("iterationStart", -1, ignoredSuccess).it
erationStart); |
| 87 EXPECT_EQ(0, applyTimingInputString("iterationStart", "-Infinity").iteration
Start); | 94 EXPECT_EQ(0, applyTimingInputString("iterationStart", "Infinity", ignoredSuc
cess).iterationStart); |
| 88 EXPECT_EQ(0, applyTimingInputString("iterationStart", "NaN").iterationStart)
; | 95 EXPECT_EQ(0, applyTimingInputString("iterationStart", "-Infinity", ignoredSu
ccess).iterationStart); |
| 89 EXPECT_EQ(0, applyTimingInputString("iterationStart", "rubbish").iterationSt
art); | 96 EXPECT_EQ(0, applyTimingInputString("iterationStart", "NaN", ignoredSuccess)
.iterationStart); |
| 97 EXPECT_EQ(0, applyTimingInputString("iterationStart", "rubbish", ignoredSucc
ess).iterationStart); |
| 90 } | 98 } |
| 91 | 99 |
| 92 TEST_F(AnimationTimingInputTest, TimingInputIterationCount) | 100 TEST_F(AnimationTimingInputTest, TimingInputIterationCount) |
| 93 { | 101 { |
| 94 EXPECT_EQ(2.1, applyTimingInputNumber("iterations", 2.1).iterationCount); | 102 bool ignoredSuccess; |
| 95 EXPECT_EQ(0, applyTimingInputNumber("iterations", -1).iterationCount); | 103 EXPECT_EQ(2.1, applyTimingInputNumber("iterations", 2.1, ignoredSuccess).ite
rationCount); |
| 104 EXPECT_EQ(0, applyTimingInputNumber("iterations", -1, ignoredSuccess).iterat
ionCount); |
| 96 | 105 |
| 97 Timing timing = applyTimingInputString("iterations", "Infinity"); | 106 Timing timing = applyTimingInputString("iterations", "Infinity", ignoredSucc
ess); |
| 98 EXPECT_TRUE(std::isinf(timing.iterationCount)); | 107 EXPECT_TRUE(std::isinf(timing.iterationCount)); |
| 99 EXPECT_GT(timing.iterationCount, 0); | 108 EXPECT_GT(timing.iterationCount, 0); |
| 100 | 109 |
| 101 EXPECT_EQ(0, applyTimingInputString("iterations", "-Infinity").iterationCoun
t); | 110 EXPECT_EQ(0, applyTimingInputString("iterations", "-Infinity", ignoredSucces
s).iterationCount); |
| 102 EXPECT_EQ(1, applyTimingInputString("iterations", "NaN").iterationCount); | 111 EXPECT_EQ(1, applyTimingInputString("iterations", "NaN", ignoredSuccess).ite
rationCount); |
| 103 EXPECT_EQ(1, applyTimingInputString("iterations", "rubbish").iterationCount)
; | 112 EXPECT_EQ(1, applyTimingInputString("iterations", "rubbish", ignoredSuccess)
.iterationCount); |
| 104 } | 113 } |
| 105 | 114 |
| 106 TEST_F(AnimationTimingInputTest, TimingInputIterationDuration) | 115 TEST_F(AnimationTimingInputTest, TimingInputIterationDuration) |
| 107 { | 116 { |
| 108 EXPECT_EQ(1.1, applyTimingInputNumber("duration", 1100).iterationDuration); | 117 bool ignoredSuccess; |
| 109 EXPECT_TRUE(std::isnan(applyTimingInputNumber("duration", -1000).iterationDu
ration)); | 118 EXPECT_EQ(1.1, applyTimingInputNumber("duration", 1100, ignoredSuccess).iter
ationDuration); |
| 110 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "1000").iterationD
uration)); | 119 EXPECT_TRUE(std::isnan(applyTimingInputNumber("duration", -1000, ignoredSucc
ess).iterationDuration)); |
| 120 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "1000", ignoredSuc
cess).iterationDuration)); |
| 111 | 121 |
| 112 Timing timing = applyTimingInputNumber("duration", std::numeric_limits<doubl
e>::infinity()); | 122 Timing timing = applyTimingInputNumber("duration", std::numeric_limits<doubl
e>::infinity(), ignoredSuccess); |
| 113 EXPECT_TRUE(std::isinf(timing.iterationDuration)); | 123 EXPECT_TRUE(std::isinf(timing.iterationDuration)); |
| 114 EXPECT_GT(timing.iterationDuration, 0); | 124 EXPECT_GT(timing.iterationDuration, 0); |
| 115 | 125 |
| 116 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "-Infinity").itera
tionDuration)); | 126 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "-Infinity", ignor
edSuccess).iterationDuration)); |
| 117 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "NaN").iterationDu
ration)); | 127 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "NaN", ignoredSucc
ess).iterationDuration)); |
| 118 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "auto").iterationD
uration)); | 128 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "auto", ignoredSuc
cess).iterationDuration)); |
| 119 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "rubbish").iterati
onDuration)); | 129 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "rubbish", ignored
Success).iterationDuration)); |
| 120 } | 130 } |
| 121 | 131 |
| 122 TEST_F(AnimationTimingInputTest, TimingInputPlaybackRate) | 132 TEST_F(AnimationTimingInputTest, TimingInputPlaybackRate) |
| 123 { | 133 { |
| 124 EXPECT_EQ(2.1, applyTimingInputNumber("playbackRate", 2.1).playbackRate); | 134 bool ignoredSuccess; |
| 125 EXPECT_EQ(-1, applyTimingInputNumber("playbackRate", -1).playbackRate); | 135 EXPECT_EQ(2.1, applyTimingInputNumber("playbackRate", 2.1, ignoredSuccess).p
laybackRate); |
| 126 EXPECT_EQ(1, applyTimingInputString("playbackRate", "Infinity").playbackRate
); | 136 EXPECT_EQ(-1, applyTimingInputNumber("playbackRate", -1, ignoredSuccess).pla
ybackRate); |
| 127 EXPECT_EQ(1, applyTimingInputString("playbackRate", "-Infinity").playbackRat
e); | 137 EXPECT_EQ(1, applyTimingInputString("playbackRate", "Infinity", ignoredSucce
ss).playbackRate); |
| 128 EXPECT_EQ(1, applyTimingInputString("playbackRate", "NaN").playbackRate); | 138 EXPECT_EQ(1, applyTimingInputString("playbackRate", "-Infinity", ignoredSucc
ess).playbackRate); |
| 129 EXPECT_EQ(1, applyTimingInputString("playbackRate", "rubbish").playbackRate)
; | 139 EXPECT_EQ(1, applyTimingInputString("playbackRate", "NaN", ignoredSuccess).p
laybackRate); |
| 140 EXPECT_EQ(1, applyTimingInputString("playbackRate", "rubbish", ignoredSucces
s).playbackRate); |
| 130 } | 141 } |
| 131 | 142 |
| 132 TEST_F(AnimationTimingInputTest, TimingInputDirection) | 143 TEST_F(AnimationTimingInputTest, TimingInputDirection) |
| 133 { | 144 { |
| 134 Timing::PlaybackDirection defaultPlaybackDirection = Timing::PlaybackDirecti
onNormal; | 145 Timing::PlaybackDirection defaultPlaybackDirection = Timing::PlaybackDirecti
onNormal; |
| 146 bool ignoredSuccess; |
| 135 | 147 |
| 136 EXPECT_EQ(Timing::PlaybackDirectionNormal, applyTimingInputString("direction
", "normal").direction); | 148 EXPECT_EQ(Timing::PlaybackDirectionNormal, applyTimingInputString("direction
", "normal", ignoredSuccess).direction); |
| 137 EXPECT_EQ(Timing::PlaybackDirectionReverse, applyTimingInputString("directio
n", "reverse").direction); | 149 EXPECT_EQ(Timing::PlaybackDirectionReverse, applyTimingInputString("directio
n", "reverse", ignoredSuccess).direction); |
| 138 EXPECT_EQ(Timing::PlaybackDirectionAlternate, applyTimingInputString("direct
ion", "alternate").direction); | 150 EXPECT_EQ(Timing::PlaybackDirectionAlternate, applyTimingInputString("direct
ion", "alternate", ignoredSuccess).direction); |
| 139 EXPECT_EQ(Timing::PlaybackDirectionAlternateReverse, applyTimingInputString(
"direction", "alternate-reverse").direction); | 151 EXPECT_EQ(Timing::PlaybackDirectionAlternateReverse, applyTimingInputString(
"direction", "alternate-reverse", ignoredSuccess).direction); |
| 140 EXPECT_EQ(defaultPlaybackDirection, applyTimingInputString("direction", "rub
bish").direction); | 152 EXPECT_EQ(defaultPlaybackDirection, applyTimingInputString("direction", "rub
bish", ignoredSuccess).direction); |
| 141 EXPECT_EQ(defaultPlaybackDirection, applyTimingInputNumber("direction", 2).d
irection); | 153 EXPECT_EQ(defaultPlaybackDirection, applyTimingInputNumber("direction", 2, i
gnoredSuccess).direction); |
| 142 } | 154 } |
| 143 | 155 |
| 144 TEST_F(AnimationTimingInputTest, TimingInputTimingFunction) | 156 TEST_F(AnimationTimingInputTest, TimingInputTimingFunction) |
| 145 { | 157 { |
| 146 const RefPtr<TimingFunction> defaultTimingFunction = LinearTimingFunction::s
hared(); | 158 const RefPtr<TimingFunction> defaultTimingFunction = LinearTimingFunction::s
hared(); |
| 159 bool success; |
| 147 | 160 |
| 148 EXPECT_EQ(*CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease
), *applyTimingInputString("easing", "ease").timingFunction); | 161 EXPECT_EQ(*CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease
), *applyTimingInputString("easing", "ease", success).timingFunction); |
| 149 EXPECT_EQ(*CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease
In), *applyTimingInputString("easing", "ease-in").timingFunction); | 162 EXPECT_TRUE(success); |
| 150 EXPECT_EQ(*CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease
Out), *applyTimingInputString("easing", "ease-out").timingFunction); | 163 EXPECT_EQ(*CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease
In), *applyTimingInputString("easing", "ease-in", success).timingFunction); |
| 151 EXPECT_EQ(*CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease
InOut), *applyTimingInputString("easing", "ease-in-out").timingFunction); | 164 EXPECT_TRUE(success); |
| 152 EXPECT_EQ(*LinearTimingFunction::shared(), *applyTimingInputString("easing",
"linear").timingFunction); | 165 EXPECT_EQ(*CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease
Out), *applyTimingInputString("easing", "ease-out", success).timingFunction); |
| 153 EXPECT_EQ(*StepsTimingFunction::preset(StepsTimingFunction::Start), *applyTi
mingInputString("easing", "step-start").timingFunction); | 166 EXPECT_TRUE(success); |
| 154 EXPECT_EQ(*StepsTimingFunction::preset(StepsTimingFunction::Middle), *applyT
imingInputString("easing", "step-middle").timingFunction); | 167 EXPECT_EQ(*CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease
InOut), *applyTimingInputString("easing", "ease-in-out", success).timingFunction
); |
| 155 EXPECT_EQ(*StepsTimingFunction::preset(StepsTimingFunction::End), *applyTimi
ngInputString("easing", "step-end").timingFunction); | 168 EXPECT_TRUE(success); |
| 156 EXPECT_EQ(*CubicBezierTimingFunction::create(1, 1, 0.3, 0.3), *applyTimingIn
putString("easing", "cubic-bezier(1, 1, 0.3, 0.3)").timingFunction); | 169 EXPECT_EQ(*LinearTimingFunction::shared(), *applyTimingInputString("easing",
"linear", success).timingFunction); |
| 157 EXPECT_EQ(*StepsTimingFunction::create(3, StepsTimingFunction::Start), *appl
yTimingInputString("easing", "steps(3, start)").timingFunction); | 170 EXPECT_TRUE(success); |
| 158 EXPECT_EQ(*StepsTimingFunction::create(5, StepsTimingFunction::Middle), *app
lyTimingInputString("easing", "steps(5, middle)").timingFunction); | 171 EXPECT_EQ(*StepsTimingFunction::preset(StepsTimingFunction::Start), *applyTi
mingInputString("easing", "step-start", success).timingFunction); |
| 159 EXPECT_EQ(*StepsTimingFunction::create(5, StepsTimingFunction::End), *applyT
imingInputString("easing", "steps(5, end)").timingFunction); | 172 EXPECT_TRUE(success); |
| 160 EXPECT_EQ(*defaultTimingFunction, *applyTimingInputString("easing", "steps(5
.6, end)").timingFunction); | 173 EXPECT_EQ(*StepsTimingFunction::preset(StepsTimingFunction::Middle), *applyT
imingInputString("easing", "step-middle", success).timingFunction); |
| 161 EXPECT_EQ(*defaultTimingFunction, *applyTimingInputString("easing", "cubic-b
ezier(2, 2, 0.3, 0.3)").timingFunction); | 174 EXPECT_TRUE(success); |
| 162 EXPECT_EQ(*defaultTimingFunction, *applyTimingInputString("easing", "rubbish
").timingFunction); | 175 EXPECT_EQ(*StepsTimingFunction::preset(StepsTimingFunction::End), *applyTimi
ngInputString("easing", "step-end", success).timingFunction); |
| 163 EXPECT_EQ(*defaultTimingFunction, *applyTimingInputNumber("easing", 2).timin
gFunction); | 176 EXPECT_TRUE(success); |
| 164 EXPECT_EQ(*defaultTimingFunction, *applyTimingInputString("easing", "initial
").timingFunction); | 177 EXPECT_EQ(*CubicBezierTimingFunction::create(1, 1, 0.3, 0.3), *applyTimingIn
putString("easing", "cubic-bezier(1, 1, 0.3, 0.3)", success).timingFunction); |
| 178 EXPECT_TRUE(success); |
| 179 EXPECT_EQ(*StepsTimingFunction::create(3, StepsTimingFunction::Start), *appl
yTimingInputString("easing", "steps(3, start)", success).timingFunction); |
| 180 EXPECT_TRUE(success); |
| 181 EXPECT_EQ(*StepsTimingFunction::create(5, StepsTimingFunction::Middle), *app
lyTimingInputString("easing", "steps(5, middle)", success).timingFunction); |
| 182 EXPECT_TRUE(success); |
| 183 EXPECT_EQ(*StepsTimingFunction::create(5, StepsTimingFunction::End), *applyT
imingInputString("easing", "steps(5, end)", success).timingFunction); |
| 184 EXPECT_TRUE(success); |
| 185 |
| 186 applyTimingInputString("easing", "", success); |
| 187 EXPECT_FALSE(success); |
| 188 applyTimingInputString("easing", "steps(5.6, end)", success); |
| 189 EXPECT_FALSE(success); |
| 190 applyTimingInputString("easing", "cubic-bezier(2, 2, 0.3, 0.3)", success); |
| 191 EXPECT_FALSE(success); |
| 192 applyTimingInputString("easing", "rubbish", success); |
| 193 EXPECT_FALSE(success); |
| 194 applyTimingInputNumber("easing", 2, success); |
| 195 EXPECT_FALSE(success); |
| 196 applyTimingInputString("easing", "initial", success); |
| 197 EXPECT_FALSE(success); |
| 165 } | 198 } |
| 166 | 199 |
| 167 TEST_F(AnimationTimingInputTest, TimingInputEmpty) | 200 TEST_F(AnimationTimingInputTest, TimingInputEmpty) |
| 168 { | 201 { |
| 169 Timing controlTiming; | 202 Timing controlTiming; |
| 170 Timing updatedTiming = TimingInput::convert(KeyframeEffectOptions(), nullptr
); | 203 Timing updatedTiming; |
| 204 bool success = TimingInput::convert(KeyframeEffectOptions(), updatedTiming,
nullptr, exceptionState); |
| 205 EXPECT_TRUE(success); |
| 171 | 206 |
| 172 EXPECT_EQ(controlTiming.startDelay, updatedTiming.startDelay); | 207 EXPECT_EQ(controlTiming.startDelay, updatedTiming.startDelay); |
| 173 EXPECT_EQ(controlTiming.fillMode, updatedTiming.fillMode); | 208 EXPECT_EQ(controlTiming.fillMode, updatedTiming.fillMode); |
| 174 EXPECT_EQ(controlTiming.iterationStart, updatedTiming.iterationStart); | 209 EXPECT_EQ(controlTiming.iterationStart, updatedTiming.iterationStart); |
| 175 EXPECT_EQ(controlTiming.iterationCount, updatedTiming.iterationCount); | 210 EXPECT_EQ(controlTiming.iterationCount, updatedTiming.iterationCount); |
| 176 EXPECT_TRUE(std::isnan(updatedTiming.iterationDuration)); | 211 EXPECT_TRUE(std::isnan(updatedTiming.iterationDuration)); |
| 177 EXPECT_EQ(controlTiming.playbackRate, updatedTiming.playbackRate); | 212 EXPECT_EQ(controlTiming.playbackRate, updatedTiming.playbackRate); |
| 178 EXPECT_EQ(controlTiming.direction, updatedTiming.direction); | 213 EXPECT_EQ(controlTiming.direction, updatedTiming.direction); |
| 179 EXPECT_EQ(*controlTiming.timingFunction, *updatedTiming.timingFunction); | 214 EXPECT_EQ(*controlTiming.timingFunction, *updatedTiming.timingFunction); |
| 180 } | 215 } |
| 181 | 216 |
| 182 } // namespace blink | 217 } // namespace blink |
| OLD | NEW |