Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(839)

Side by Side Diff: Source/core/animation/AnimationTimingInputTest.cpp

Issue 182063005: Web Animations API: Refactor IDL input conversion out of Animation (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Review changes Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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 #include "platform/animation/TimingFunctionTestHelper.h"
12
13 #include <gtest/gtest.h>
14
15 namespace WebCore {
16
17 class AnimationAnimationTimingInputTest : public ::testing::Test {
18 protected:
19 AnimationAnimationTimingInputTest()
20 : isolate(v8::Isolate::GetCurrent())
21 , scope(isolate)
22 , context(v8::Context::New(isolate))
23 , contextScope(context)
24 {
25 }
26
27 v8::Isolate* isolate;
28 v8::HandleScope scope;
29 v8::Local<v8::Context> context;
30 v8::Context::Scope contextScope;
31
32 void populateTiming(Timing& timing, Dictionary timingInputDictionary)
33 {
34 Animation::populateTiming(timing, timingInputDictionary);
35 }
36
37 Timing applyTimingInputNumber(String timingProperty, double timingPropertyVa lue)
38 {
39 v8::Handle<v8::Object> timingInput = v8::Object::New(isolate);
40 setV8ObjectPropertyAsNumber(timingInput, timingProperty, timingPropertyV alue);
41 Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cas t(timingInput), isolate);
42 Timing timing;
43 populateTiming(timing, timingInputDictionary);
44 return timing;
45 }
46
47 Timing applyTimingInputString(String timingProperty, String timingPropertyVa lue)
48 {
49 v8::Handle<v8::Object> timingInput = v8::Object::New(isolate);
50 setV8ObjectPropertyAsString(timingInput, timingProperty, timingPropertyV alue);
51 Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cas t(timingInput), isolate);
52 Timing timing;
53 populateTiming(timing, timingInputDictionary);
54 return timing;
55 }
56 };
57
58 TEST_F(AnimationAnimationTimingInputTest, TimingInputStartDelay)
59 {
60 EXPECT_EQ(1.1, applyTimingInputNumber("delay", 1.1).startDelay);
61 EXPECT_EQ(-1, applyTimingInputNumber("delay", -1).startDelay);
62 EXPECT_EQ(1, applyTimingInputString("delay", "1").startDelay);
63 EXPECT_EQ(0, applyTimingInputString("delay", "1s").startDelay);
64 EXPECT_EQ(0, applyTimingInputString("delay", "Infinity").startDelay);
65 EXPECT_EQ(0, applyTimingInputString("delay", "-Infinity").startDelay);
66 EXPECT_EQ(0, applyTimingInputString("delay", "NaN").startDelay);
67 EXPECT_EQ(0, applyTimingInputString("delay", "rubbish").startDelay);
68 }
69
70 TEST_F(AnimationAnimationTimingInputTest, TimingInputEndDelay)
71 {
72 EXPECT_EQ(10, applyTimingInputNumber("endDelay", 10).endDelay);
73 EXPECT_EQ(-2.5, applyTimingInputNumber("endDelay", -2.5).endDelay);
74 }
75
76 TEST_F(AnimationAnimationTimingInputTest, TimingInputFillMode)
77 {
78 Timing::FillMode defaultFillMode = Timing::FillModeAuto;
79
80 EXPECT_EQ(Timing::FillModeAuto, applyTimingInputString("fill", "auto").fillM ode);
81 EXPECT_EQ(Timing::FillModeForwards, applyTimingInputString("fill", "forwards ").fillMode);
82 EXPECT_EQ(Timing::FillModeNone, applyTimingInputString("fill", "none").fillM ode);
83 EXPECT_EQ(Timing::FillModeBackwards, applyTimingInputString("fill", "backwar ds").fillMode);
84 EXPECT_EQ(Timing::FillModeBoth, applyTimingInputString("fill", "both").fillM ode);
85 EXPECT_EQ(defaultFillMode, applyTimingInputString("fill", "everything!").fil lMode);
86 EXPECT_EQ(defaultFillMode, applyTimingInputString("fill", "backwardsandforwa rds").fillMode);
87 EXPECT_EQ(defaultFillMode, applyTimingInputNumber("fill", 2).fillMode);
88 }
89
90 TEST_F(AnimationAnimationTimingInputTest, TimingInputIterationStart)
91 {
92 EXPECT_EQ(1.1, applyTimingInputNumber("iterationStart", 1.1).iterationStart) ;
93 EXPECT_EQ(0, applyTimingInputNumber("iterationStart", -1).iterationStart);
94 EXPECT_EQ(0, applyTimingInputString("iterationStart", "Infinity").iterationS tart);
95 EXPECT_EQ(0, applyTimingInputString("iterationStart", "-Infinity").iteration Start);
96 EXPECT_EQ(0, applyTimingInputString("iterationStart", "NaN").iterationStart) ;
97 EXPECT_EQ(0, applyTimingInputString("iterationStart", "rubbish").iterationSt art);
98 }
99
100 TEST_F(AnimationAnimationTimingInputTest, TimingInputIterationCount)
101 {
102 EXPECT_EQ(2.1, applyTimingInputNumber("iterations", 2.1).iterationCount);
103 EXPECT_EQ(0, applyTimingInputNumber("iterations", -1).iterationCount);
104
105 Timing timing = applyTimingInputString("iterations", "Infinity");
106 EXPECT_TRUE(std::isinf(timing.iterationCount));
107 EXPECT_GT(timing.iterationCount, 0);
108
109 EXPECT_EQ(0, applyTimingInputString("iterations", "-Infinity").iterationCoun t);
110 EXPECT_EQ(1, applyTimingInputString("iterations", "NaN").iterationCount);
111 EXPECT_EQ(1, applyTimingInputString("iterations", "rubbish").iterationCount) ;
112 }
113
114 TEST_F(AnimationAnimationTimingInputTest, TimingInputIterationDuration)
115 {
116 EXPECT_EQ(1.1, applyTimingInputNumber("duration", 1.1).iterationDuration);
117 EXPECT_TRUE(std::isnan(applyTimingInputNumber("duration", -1).iterationDurat ion));
118 EXPECT_EQ(1, applyTimingInputString("duration", "1").iterationDuration);
119
120 Timing timing = applyTimingInputString("duration", "Infinity");
121 EXPECT_TRUE(std::isinf(timing.iterationDuration));
122 EXPECT_GT(timing.iterationDuration, 0);
123
124 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "-Infinity").itera tionDuration));
125 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "NaN").iterationDu ration));
126 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "auto").iterationD uration));
127 EXPECT_TRUE(std::isnan(applyTimingInputString("duration", "rubbish").iterati onDuration));
128 }
129
130 TEST_F(AnimationAnimationTimingInputTest, TimingInputPlaybackRate)
131 {
132 EXPECT_EQ(2.1, applyTimingInputNumber("playbackRate", 2.1).playbackRate);
133 EXPECT_EQ(-1, applyTimingInputNumber("playbackRate", -1).playbackRate);
134 EXPECT_EQ(1, applyTimingInputString("playbackRate", "Infinity").playbackRate );
135 EXPECT_EQ(1, applyTimingInputString("playbackRate", "-Infinity").playbackRat e);
136 EXPECT_EQ(1, applyTimingInputString("playbackRate", "NaN").playbackRate);
137 EXPECT_EQ(1, applyTimingInputString("playbackRate", "rubbish").playbackRate) ;
138 }
139
140 TEST_F(AnimationAnimationTimingInputTest, TimingInputDirection)
141 {
142 Timing::PlaybackDirection defaultPlaybackDirection = Timing::PlaybackDirecti onNormal;
143
144 EXPECT_EQ(Timing::PlaybackDirectionNormal, applyTimingInputString("direction ", "normal").direction);
145 EXPECT_EQ(Timing::PlaybackDirectionReverse, applyTimingInputString("directio n", "reverse").direction);
146 EXPECT_EQ(Timing::PlaybackDirectionAlternate, applyTimingInputString("direct ion", "alternate").direction);
147 EXPECT_EQ(Timing::PlaybackDirectionAlternateReverse, applyTimingInputString( "direction", "alternate-reverse").direction);
148 EXPECT_EQ(defaultPlaybackDirection, applyTimingInputString("direction", "rub bish").direction);
149 EXPECT_EQ(defaultPlaybackDirection, applyTimingInputNumber("direction", 2).d irection);
150 }
151
152 TEST_F(AnimationAnimationTimingInputTest, TimingInputTimingFunction)
153 {
154 const RefPtr<TimingFunction> defaultTimingFunction = LinearTimingFunction::c reate();
155
156 EXPECT_EQ(*CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease ), *applyTimingInputString("easing", "ease").timingFunction);
157 EXPECT_EQ(*CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease In), *applyTimingInputString("easing", "ease-in").timingFunction);
158 EXPECT_EQ(*CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease Out), *applyTimingInputString("easing", "ease-out").timingFunction);
159 EXPECT_EQ(*CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Ease InOut), *applyTimingInputString("easing", "ease-in-out").timingFunction);
160 EXPECT_EQ(*LinearTimingFunction::create(), *applyTimingInputString("easing", "linear").timingFunction);
161 EXPECT_EQ(*defaultTimingFunction, *applyTimingInputString("easing", "initial ").timingFunction);
162 EXPECT_EQ(*StepsTimingFunction::preset(StepsTimingFunction::Start), *applyTi mingInputString("easing", "step-start").timingFunction);
163 EXPECT_EQ(*StepsTimingFunction::preset(StepsTimingFunction::End), *applyTimi ngInputString("easing", "step-end").timingFunction);
164 EXPECT_EQ(*CubicBezierTimingFunction::create(1, 1, 0.3, 0.3), *applyTimingIn putString("easing", "cubic-bezier(1, 1, 0.3, 0.3)").timingFunction);
165 EXPECT_EQ(*StepsTimingFunction::create(3, true), *applyTimingInputString("ea sing", "steps(3, start)").timingFunction);
166 EXPECT_EQ(*StepsTimingFunction::create(5, false), *applyTimingInputString("e asing", "steps(5, end)").timingFunction);
167 EXPECT_EQ(*defaultTimingFunction, *applyTimingInputString("easing", "steps(5 .6, end)").timingFunction);
168 // FIXME: Step-middle not yet implemented. Change this test when it is worki ng.
169 EXPECT_EQ(*defaultTimingFunction, *applyTimingInputString("easing", "steps(5 , middle)").timingFunction);
170 EXPECT_EQ(*defaultTimingFunction, *applyTimingInputString("easing", "cubic-b ezier(2, 2, 0.3, 0.3)").timingFunction);
171 EXPECT_EQ(*defaultTimingFunction, *applyTimingInputString("easing", "rubbish ").timingFunction);
172 EXPECT_EQ(*defaultTimingFunction, *applyTimingInputNumber("easing", 2).timin gFunction);
173 }
174
175 TEST_F(AnimationAnimationTimingInputTest, TimingInputEmpty)
176 {
177 Timing updatedTiming;
178 Timing controlTiming;
179
180 v8::Handle<v8::Object> timingInput = v8::Object::New(isolate);
181 Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cast(ti mingInput), isolate);
182 populateTiming(updatedTiming, timingInputDictionary);
183
184 EXPECT_EQ(controlTiming.startDelay, updatedTiming.startDelay);
185 EXPECT_EQ(controlTiming.fillMode, updatedTiming.fillMode);
186 EXPECT_EQ(controlTiming.iterationStart, updatedTiming.iterationStart);
187 EXPECT_EQ(controlTiming.iterationCount, updatedTiming.iterationCount);
188 EXPECT_TRUE(std::isnan(updatedTiming.iterationDuration));
189 EXPECT_EQ(controlTiming.playbackRate, updatedTiming.playbackRate);
190 EXPECT_EQ(controlTiming.direction, updatedTiming.direction);
191 EXPECT_EQ(*controlTiming.timingFunction, *updatedTiming.timingFunction);
192 }
193
194 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698