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 "config.h" | 5 #include "config.h" |
6 #include "core/animation/Animation.h" | 6 #include "core/animation/Animation.h" |
7 | 7 |
8 #include "bindings/core/v8/Dictionary.h" | 8 #include "bindings/core/v8/Dictionary.h" |
9 #include "bindings/core/v8/UnionTypesCore.h" | 9 #include "bindings/core/v8/UnionTypesCore.h" |
| 10 #include "bindings/core/v8/V8AnimationTimingProperties.h" |
10 #include "core/animation/AnimationClock.h" | 11 #include "core/animation/AnimationClock.h" |
11 #include "core/animation/AnimationNodeTiming.h" | 12 #include "core/animation/AnimationNodeTiming.h" |
12 #include "core/animation/AnimationTestHelper.h" | 13 #include "core/animation/AnimationTestHelper.h" |
13 #include "core/animation/AnimationTimeline.h" | 14 #include "core/animation/AnimationTimeline.h" |
14 #include "core/animation/KeyframeEffectModel.h" | 15 #include "core/animation/KeyframeEffectModel.h" |
15 #include "core/animation/Timing.h" | 16 #include "core/animation/Timing.h" |
16 #include "core/dom/Document.h" | 17 #include "core/dom/Document.h" |
17 #include "core/dom/ExceptionCode.h" | 18 #include "core/dom/ExceptionCode.h" |
18 #include "core/testing/DummyPageHolder.h" | 19 #include "core/testing/DummyPageHolder.h" |
19 #include <gtest/gtest.h> | 20 #include <gtest/gtest.h> |
(...skipping 22 matching lines...) Expand all Loading... |
42 protected: | 43 protected: |
43 AnimationAnimationV8Test() | 44 AnimationAnimationV8Test() |
44 : m_isolate(v8::Isolate::GetCurrent()) | 45 : m_isolate(v8::Isolate::GetCurrent()) |
45 , m_scope(m_isolate) | 46 , m_scope(m_isolate) |
46 { | 47 { |
47 } | 48 } |
48 | 49 |
49 template<typename T> | 50 template<typename T> |
50 static PassRefPtrWillBeRawPtr<Animation> createAnimation(Element* element, V
ector<Dictionary> keyframeDictionaryVector, T timingInput, ExceptionState& excep
tionState) | 51 static PassRefPtrWillBeRawPtr<Animation> createAnimation(Element* element, V
ector<Dictionary> keyframeDictionaryVector, T timingInput, ExceptionState& excep
tionState) |
51 { | 52 { |
52 return Animation::create(element, EffectInput::convert(element, keyframe
DictionaryVector, exceptionState), timingInput); | 53 return Animation::create(element, keyframeDictionaryVector, timingInput,
exceptionState); |
53 } | 54 } |
54 static PassRefPtrWillBeRawPtr<Animation> createAnimation(Element* element, V
ector<Dictionary> keyframeDictionaryVector, ExceptionState& exceptionState) | 55 static PassRefPtrWillBeRawPtr<Animation> createAnimation(Element* element, V
ector<Dictionary> keyframeDictionaryVector, ExceptionState& exceptionState) |
55 { | 56 { |
56 return Animation::create(element, EffectInput::convert(element, keyframe
DictionaryVector, exceptionState)); | 57 return Animation::create(element, keyframeDictionaryVector, exceptionSta
te); |
57 } | 58 } |
58 | 59 |
59 v8::Isolate* m_isolate; | 60 v8::Isolate* m_isolate; |
60 | 61 |
61 private: | 62 private: |
62 V8TestingScope m_scope; | 63 V8TestingScope m_scope; |
63 }; | 64 }; |
64 | 65 |
65 TEST_F(AnimationAnimationV8Test, CanCreateAnAnimation) | 66 TEST_F(AnimationAnimationV8Test, CanCreateAnAnimation) |
66 { | 67 { |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 | 222 |
222 v8::Handle<v8::Object> timingInput = v8::Object::New(m_isolate); | 223 v8::Handle<v8::Object> timingInput = v8::Object::New(m_isolate); |
223 setV8ObjectPropertyAsNumber(timingInput, "delay", 2); | 224 setV8ObjectPropertyAsNumber(timingInput, "delay", 2); |
224 setV8ObjectPropertyAsNumber(timingInput, "endDelay", 0.5); | 225 setV8ObjectPropertyAsNumber(timingInput, "endDelay", 0.5); |
225 setV8ObjectPropertyAsString(timingInput, "fill", "backwards"); | 226 setV8ObjectPropertyAsString(timingInput, "fill", "backwards"); |
226 setV8ObjectPropertyAsNumber(timingInput, "iterationStart", 2); | 227 setV8ObjectPropertyAsNumber(timingInput, "iterationStart", 2); |
227 setV8ObjectPropertyAsNumber(timingInput, "iterations", 10); | 228 setV8ObjectPropertyAsNumber(timingInput, "iterations", 10); |
228 setV8ObjectPropertyAsNumber(timingInput, "playbackRate", 2); | 229 setV8ObjectPropertyAsNumber(timingInput, "playbackRate", 2); |
229 setV8ObjectPropertyAsString(timingInput, "direction", "reverse"); | 230 setV8ObjectPropertyAsString(timingInput, "direction", "reverse"); |
230 setV8ObjectPropertyAsString(timingInput, "easing", "step-start"); | 231 setV8ObjectPropertyAsString(timingInput, "easing", "step-start"); |
231 Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cast(ti
mingInput), m_isolate, exceptionState); | 232 AnimationTimingProperties timingInputDictionary; |
| 233 V8AnimationTimingProperties::toImpl(m_isolate, timingInput, timingInputDicti
onary, exceptionState); |
232 | 234 |
233 RefPtrWillBeRawPtr<Animation> animation = createAnimation(element.get(), jsK
eyframes, timingInputDictionary, exceptionState); | 235 RefPtrWillBeRawPtr<Animation> animation = createAnimation(element.get(), jsK
eyframes, timingInputDictionary, exceptionState); |
234 | 236 |
235 RefPtrWillBeRawPtr<AnimationNodeTiming> specified = animation->timing(); | 237 RefPtrWillBeRawPtr<AnimationNodeTiming> specified = animation->timing(); |
236 EXPECT_EQ(2, specified->delay()); | 238 EXPECT_EQ(2, specified->delay()); |
237 EXPECT_EQ(0.5, specified->endDelay()); | 239 EXPECT_EQ(0.5, specified->endDelay()); |
238 EXPECT_EQ("backwards", specified->fill()); | 240 EXPECT_EQ("backwards", specified->fill()); |
239 EXPECT_EQ(2, specified->iterationStart()); | 241 EXPECT_EQ(2, specified->iterationStart()); |
240 EXPECT_EQ(10, specified->iterations()); | 242 EXPECT_EQ(10, specified->iterations()); |
241 EXPECT_EQ(2, specified->playbackRate()); | 243 EXPECT_EQ(2, specified->playbackRate()); |
242 EXPECT_EQ("reverse", specified->direction()); | 244 EXPECT_EQ("reverse", specified->direction()); |
243 EXPECT_EQ("step-start", specified->easing()); | 245 EXPECT_EQ("step-start", specified->easing()); |
244 } | 246 } |
245 | 247 |
246 TEST_F(AnimationAnimationV8Test, SpecifiedDurationGetter) | 248 TEST_F(AnimationAnimationV8Test, SpecifiedDurationGetter) |
247 { | 249 { |
248 Vector<Dictionary, 0> jsKeyframes; | 250 Vector<Dictionary, 0> jsKeyframes; |
249 | 251 |
250 v8::Handle<v8::Object> timingInputWithDuration = v8::Object::New(m_isolate); | 252 v8::Handle<v8::Object> timingInputWithDuration = v8::Object::New(m_isolate); |
251 setV8ObjectPropertyAsNumber(timingInputWithDuration, "duration", 2.5); | 253 setV8ObjectPropertyAsNumber(timingInputWithDuration, "duration", 2.5); |
252 Dictionary timingInputDictionaryWithDuration = Dictionary(v8::Handle<v8::Val
ue>::Cast(timingInputWithDuration), m_isolate, exceptionState); | 254 AnimationTimingProperties timingInputDictionaryWithDuration; |
| 255 V8AnimationTimingProperties::toImpl(m_isolate, timingInputWithDuration, timi
ngInputDictionaryWithDuration, exceptionState); |
253 | 256 |
254 RefPtrWillBeRawPtr<Animation> animationWithDuration = createAnimation(elemen
t.get(), jsKeyframes, timingInputDictionaryWithDuration, exceptionState); | 257 RefPtrWillBeRawPtr<Animation> animationWithDuration = createAnimation(elemen
t.get(), jsKeyframes, timingInputDictionaryWithDuration, exceptionState); |
255 | 258 |
256 RefPtrWillBeRawPtr<AnimationNodeTiming> specifiedWithDuration = animationWit
hDuration->timing(); | 259 RefPtrWillBeRawPtr<AnimationNodeTiming> specifiedWithDuration = animationWit
hDuration->timing(); |
257 UnrestrictedDoubleOrString duration; | 260 UnrestrictedDoubleOrString duration; |
258 specifiedWithDuration->duration(duration); | 261 specifiedWithDuration->duration(duration); |
259 EXPECT_TRUE(duration.isUnrestrictedDouble()); | 262 EXPECT_TRUE(duration.isUnrestrictedDouble()); |
260 EXPECT_EQ(2.5, duration.getAsUnrestrictedDouble()); | 263 EXPECT_EQ(2.5, duration.getAsUnrestrictedDouble()); |
261 EXPECT_FALSE(duration.isString()); | 264 EXPECT_FALSE(duration.isString()); |
262 | 265 |
263 | 266 |
264 v8::Handle<v8::Object> timingInputNoDuration = v8::Object::New(m_isolate); | 267 v8::Handle<v8::Object> timingInputNoDuration = v8::Object::New(m_isolate); |
265 Dictionary timingInputDictionaryNoDuration = Dictionary(v8::Handle<v8::Value
>::Cast(timingInputNoDuration), m_isolate, exceptionState); | 268 AnimationTimingProperties timingInputDictionaryNoDuration; |
| 269 V8AnimationTimingProperties::toImpl(m_isolate, timingInputNoDuration, timing
InputDictionaryNoDuration, exceptionState); |
266 | 270 |
267 RefPtrWillBeRawPtr<Animation> animationNoDuration = createAnimation(element.
get(), jsKeyframes, timingInputDictionaryNoDuration, exceptionState); | 271 RefPtrWillBeRawPtr<Animation> animationNoDuration = createAnimation(element.
get(), jsKeyframes, timingInputDictionaryNoDuration, exceptionState); |
268 | 272 |
269 RefPtrWillBeRawPtr<AnimationNodeTiming> specifiedNoDuration = animationNoDur
ation->timing(); | 273 RefPtrWillBeRawPtr<AnimationNodeTiming> specifiedNoDuration = animationNoDur
ation->timing(); |
270 UnrestrictedDoubleOrString duration2; | 274 UnrestrictedDoubleOrString duration2; |
271 specifiedNoDuration->duration(duration2); | 275 specifiedNoDuration->duration(duration2); |
272 EXPECT_FALSE(duration2.isUnrestrictedDouble()); | 276 EXPECT_FALSE(duration2.isUnrestrictedDouble()); |
273 EXPECT_TRUE(duration2.isString()); | 277 EXPECT_TRUE(duration2.isString()); |
274 EXPECT_EQ("auto", duration2.getAsString()); | 278 EXPECT_EQ("auto", duration2.getAsString()); |
275 } | 279 } |
276 | 280 |
277 TEST_F(AnimationAnimationV8Test, SpecifiedSetters) | 281 TEST_F(AnimationAnimationV8Test, SpecifiedSetters) |
278 { | 282 { |
279 Vector<Dictionary, 0> jsKeyframes; | 283 Vector<Dictionary, 0> jsKeyframes; |
280 v8::Handle<v8::Object> timingInput = v8::Object::New(m_isolate); | 284 v8::Handle<v8::Object> timingInput = v8::Object::New(m_isolate); |
281 Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cast(ti
mingInput), m_isolate, exceptionState); | 285 AnimationTimingProperties timingInputDictionary; |
| 286 V8AnimationTimingProperties::toImpl(m_isolate, timingInput, timingInputDicti
onary, exceptionState); |
282 RefPtrWillBeRawPtr<Animation> animation = createAnimation(element.get(), jsK
eyframes, timingInputDictionary, exceptionState); | 287 RefPtrWillBeRawPtr<Animation> animation = createAnimation(element.get(), jsK
eyframes, timingInputDictionary, exceptionState); |
283 | 288 |
284 RefPtrWillBeRawPtr<AnimationNodeTiming> specified = animation->timing(); | 289 RefPtrWillBeRawPtr<AnimationNodeTiming> specified = animation->timing(); |
285 | 290 |
286 EXPECT_EQ(0, specified->delay()); | 291 EXPECT_EQ(0, specified->delay()); |
287 specified->setDelay(2); | 292 specified->setDelay(2); |
288 EXPECT_EQ(2, specified->delay()); | 293 EXPECT_EQ(2, specified->delay()); |
289 | 294 |
290 EXPECT_EQ(0, specified->endDelay()); | 295 EXPECT_EQ(0, specified->endDelay()); |
291 specified->setEndDelay(0.5); | 296 specified->setEndDelay(0.5); |
(...skipping 21 matching lines...) Expand all Loading... |
313 | 318 |
314 EXPECT_EQ("linear", specified->easing()); | 319 EXPECT_EQ("linear", specified->easing()); |
315 specified->setEasing("step-start"); | 320 specified->setEasing("step-start"); |
316 EXPECT_EQ("step-start", specified->easing()); | 321 EXPECT_EQ("step-start", specified->easing()); |
317 } | 322 } |
318 | 323 |
319 TEST_F(AnimationAnimationV8Test, SetSpecifiedDuration) | 324 TEST_F(AnimationAnimationV8Test, SetSpecifiedDuration) |
320 { | 325 { |
321 Vector<Dictionary, 0> jsKeyframes; | 326 Vector<Dictionary, 0> jsKeyframes; |
322 v8::Handle<v8::Object> timingInput = v8::Object::New(m_isolate); | 327 v8::Handle<v8::Object> timingInput = v8::Object::New(m_isolate); |
323 Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cast(ti
mingInput), m_isolate, exceptionState); | 328 AnimationTimingProperties timingInputDictionary; |
| 329 V8AnimationTimingProperties::toImpl(m_isolate, timingInput, timingInputDicti
onary, exceptionState); |
324 RefPtrWillBeRawPtr<Animation> animation = createAnimation(element.get(), jsK
eyframes, timingInputDictionary, exceptionState); | 330 RefPtrWillBeRawPtr<Animation> animation = createAnimation(element.get(), jsK
eyframes, timingInputDictionary, exceptionState); |
325 | 331 |
326 RefPtrWillBeRawPtr<AnimationNodeTiming> specified = animation->timing(); | 332 RefPtrWillBeRawPtr<AnimationNodeTiming> specified = animation->timing(); |
327 | 333 |
328 UnrestrictedDoubleOrString duration; | 334 UnrestrictedDoubleOrString duration; |
329 specified->duration(duration); | 335 specified->duration(duration); |
330 EXPECT_FALSE(duration.isUnrestrictedDouble()); | 336 EXPECT_FALSE(duration.isUnrestrictedDouble()); |
331 EXPECT_TRUE(duration.isString()); | 337 EXPECT_TRUE(duration.isString()); |
332 EXPECT_EQ("auto", duration.getAsString()); | 338 EXPECT_EQ("auto", duration.getAsString()); |
333 | 339 |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
448 EXPECT_EQ(element.get(), animation->target()); | 454 EXPECT_EQ(element.get(), animation->target()); |
449 document.timeline().play(animation.get()); | 455 document.timeline().play(animation.get()); |
450 pageHolder.clear(); | 456 pageHolder.clear(); |
451 element.clear(); | 457 element.clear(); |
452 #if !ENABLE(OILPAN) | 458 #if !ENABLE(OILPAN) |
453 EXPECT_EQ(0, animation->target()); | 459 EXPECT_EQ(0, animation->target()); |
454 #endif | 460 #endif |
455 } | 461 } |
456 | 462 |
457 } // namespace blink | 463 } // namespace blink |
OLD | NEW |