| 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 |