| 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/v8/Dictionary.h" | 8 #include "bindings/v8/Dictionary.h" |
| 9 #include "core/animation/AnimatableLength.h" | 9 #include "core/animation/AnimatableLength.h" |
| 10 #include "core/animation/AnimationClock.h" | 10 #include "core/animation/AnimationClock.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 EXPECT_EQ(0, document->timeline().currentTime()); | 29 EXPECT_EQ(0, document->timeline().currentTime()); |
| 30 } | 30 } |
| 31 | 31 |
| 32 RefPtr<Document> document; | 32 RefPtr<Document> document; |
| 33 RefPtr<Element> element; | 33 RefPtr<Element> element; |
| 34 }; | 34 }; |
| 35 | 35 |
| 36 class AnimationAnimationV8Test : public AnimationAnimationTest { | 36 class AnimationAnimationV8Test : public AnimationAnimationTest { |
| 37 protected: | 37 protected: |
| 38 AnimationAnimationV8Test() | 38 AnimationAnimationV8Test() |
| 39 : m_isolate(v8::Isolate::GetCurrent()) | 39 : isolate(v8::Isolate::GetCurrent()) |
| 40 , m_scope(V8BindingTestScope::create(m_isolate)) | 40 , scope(isolate) |
| 41 , context(v8::Context::New(isolate)) |
| 42 , contextScope(context) |
| 41 { | 43 { |
| 42 } | 44 } |
| 43 | 45 |
| 46 v8::Isolate* isolate; |
| 47 v8::HandleScope scope; |
| 48 v8::Local<v8::Context> context; |
| 49 v8::Context::Scope contextScope; |
| 50 |
| 44 PassRefPtr<Animation> createAnimation(Element* element, Vector<Dictionary> k
eyframeDictionaryVector, Dictionary timingInput) | 51 PassRefPtr<Animation> createAnimation(Element* element, Vector<Dictionary> k
eyframeDictionaryVector, Dictionary timingInput) |
| 45 { | 52 { |
| 46 return Animation::createUnsafe(element, keyframeDictionaryVector, timing
Input); | 53 return Animation::createUnsafe(element, keyframeDictionaryVector, timing
Input); |
| 47 } | 54 } |
| 48 | 55 |
| 49 PassRefPtr<Animation> createAnimation(Element* element, Vector<Dictionary> k
eyframeDictionaryVector, double timingInput) | 56 PassRefPtr<Animation> createAnimation(Element* element, Vector<Dictionary> k
eyframeDictionaryVector, double timingInput) |
| 50 { | 57 { |
| 51 return Animation::createUnsafe(element, keyframeDictionaryVector, timing
Input); | 58 return Animation::createUnsafe(element, keyframeDictionaryVector, timing
Input); |
| 52 } | 59 } |
| 53 | 60 |
| 54 PassRefPtr<Animation> createAnimation(Element* element, Vector<Dictionary> k
eyframeDictionaryVector) | 61 PassRefPtr<Animation> createAnimation(Element* element, Vector<Dictionary> k
eyframeDictionaryVector) |
| 55 { | 62 { |
| 56 return Animation::createUnsafe(element, keyframeDictionaryVector); | 63 return Animation::createUnsafe(element, keyframeDictionaryVector); |
| 57 } | 64 } |
| 58 | |
| 59 v8::Isolate* m_isolate; | |
| 60 | |
| 61 private: | |
| 62 OwnPtr<V8BindingTestScope> m_scope; | |
| 63 }; | 65 }; |
| 64 | 66 |
| 65 TEST_F(AnimationAnimationV8Test, CanCreateAnAnimation) | 67 TEST_F(AnimationAnimationV8Test, CanCreateAnAnimation) |
| 66 { | 68 { |
| 67 Vector<Dictionary> jsKeyframes; | 69 Vector<Dictionary> jsKeyframes; |
| 68 v8::Handle<v8::Object> keyframe1 = v8::Object::New(m_isolate); | 70 v8::Handle<v8::Object> keyframe1 = v8::Object::New(isolate); |
| 69 v8::Handle<v8::Object> keyframe2 = v8::Object::New(m_isolate); | 71 v8::Handle<v8::Object> keyframe2 = v8::Object::New(isolate); |
| 70 | 72 |
| 71 setV8ObjectPropertyAsString(keyframe1, "width", "100px"); | 73 setV8ObjectPropertyAsString(keyframe1, "width", "100px"); |
| 72 setV8ObjectPropertyAsString(keyframe1, "offset", "0"); | 74 setV8ObjectPropertyAsString(keyframe1, "offset", "0"); |
| 73 setV8ObjectPropertyAsString(keyframe1, "easing", "ease-in-out"); | 75 setV8ObjectPropertyAsString(keyframe1, "easing", "ease-in-out"); |
| 74 setV8ObjectPropertyAsString(keyframe2, "width", "0px"); | 76 setV8ObjectPropertyAsString(keyframe2, "width", "0px"); |
| 75 setV8ObjectPropertyAsString(keyframe2, "offset", "1"); | 77 setV8ObjectPropertyAsString(keyframe2, "offset", "1"); |
| 76 setV8ObjectPropertyAsString(keyframe2, "easing", "cubic-bezier(1, 1, 0.3, 0.
3)"); | 78 setV8ObjectPropertyAsString(keyframe2, "easing", "cubic-bezier(1, 1, 0.3, 0.
3)"); |
| 77 | 79 |
| 78 jsKeyframes.append(Dictionary(keyframe1, m_isolate)); | 80 jsKeyframes.append(Dictionary(keyframe1, isolate)); |
| 79 jsKeyframes.append(Dictionary(keyframe2, m_isolate)); | 81 jsKeyframes.append(Dictionary(keyframe2, isolate)); |
| 80 | 82 |
| 81 String value1; | 83 String value1; |
| 82 ASSERT_TRUE(jsKeyframes[0].get("width", value1)); | 84 ASSERT_TRUE(jsKeyframes[0].get("width", value1)); |
| 83 ASSERT_EQ("100px", value1); | 85 ASSERT_EQ("100px", value1); |
| 84 | 86 |
| 85 String value2; | 87 String value2; |
| 86 ASSERT_TRUE(jsKeyframes[1].get("width", value2)); | 88 ASSERT_TRUE(jsKeyframes[1].get("width", value2)); |
| 87 ASSERT_EQ("0px", value2); | 89 ASSERT_EQ("0px", value2); |
| 88 | 90 |
| 89 RefPtr<Animation> animation = createAnimation(element.get(), jsKeyframes, 0)
; | 91 RefPtr<Animation> animation = createAnimation(element.get(), jsKeyframes, 0)
; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 { | 135 { |
| 134 Vector<Dictionary, 0> jsKeyframes; | 136 Vector<Dictionary, 0> jsKeyframes; |
| 135 RefPtr<Animation> animation = createAnimation(element.get(), jsKeyframes, -2
); | 137 RefPtr<Animation> animation = createAnimation(element.get(), jsKeyframes, -2
); |
| 136 EXPECT_EQ(0, animation->specifiedTiming().iterationDuration); | 138 EXPECT_EQ(0, animation->specifiedTiming().iterationDuration); |
| 137 } | 139 } |
| 138 | 140 |
| 139 TEST_F(AnimationAnimationV8Test, SpecifiedGetters) | 141 TEST_F(AnimationAnimationV8Test, SpecifiedGetters) |
| 140 { | 142 { |
| 141 Vector<Dictionary, 0> jsKeyframes; | 143 Vector<Dictionary, 0> jsKeyframes; |
| 142 | 144 |
| 143 v8::Handle<v8::Object> timingInput = v8::Object::New(m_isolate); | 145 v8::Handle<v8::Object> timingInput = v8::Object::New(isolate); |
| 144 setV8ObjectPropertyAsNumber(timingInput, "delay", 2); | 146 setV8ObjectPropertyAsNumber(timingInput, "delay", 2); |
| 145 setV8ObjectPropertyAsNumber(timingInput, "endDelay", 0.5); | 147 setV8ObjectPropertyAsNumber(timingInput, "endDelay", 0.5); |
| 146 setV8ObjectPropertyAsString(timingInput, "fill", "backwards"); | 148 setV8ObjectPropertyAsString(timingInput, "fill", "backwards"); |
| 147 setV8ObjectPropertyAsNumber(timingInput, "iterationStart", 2); | 149 setV8ObjectPropertyAsNumber(timingInput, "iterationStart", 2); |
| 148 setV8ObjectPropertyAsNumber(timingInput, "iterations", 10); | 150 setV8ObjectPropertyAsNumber(timingInput, "iterations", 10); |
| 149 setV8ObjectPropertyAsNumber(timingInput, "playbackRate", 2); | 151 setV8ObjectPropertyAsNumber(timingInput, "playbackRate", 2); |
| 150 setV8ObjectPropertyAsString(timingInput, "direction", "reverse"); | 152 setV8ObjectPropertyAsString(timingInput, "direction", "reverse"); |
| 151 setV8ObjectPropertyAsString(timingInput, "easing", "step-start"); | 153 setV8ObjectPropertyAsString(timingInput, "easing", "step-start"); |
| 152 Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cast(ti
mingInput), m_isolate); | 154 Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cast(ti
mingInput), isolate); |
| 153 | 155 |
| 154 RefPtr<Animation> animation = createAnimation(element.get(), jsKeyframes, ti
mingInputDictionary); | 156 RefPtr<Animation> animation = createAnimation(element.get(), jsKeyframes, ti
mingInputDictionary); |
| 155 | 157 |
| 156 RefPtr<TimedItemTiming> specified = animation->specified(); | 158 RefPtr<TimedItemTiming> specified = animation->specified(); |
| 157 EXPECT_EQ(2, specified->delay()); | 159 EXPECT_EQ(2, specified->delay()); |
| 158 EXPECT_EQ(0.5, specified->endDelay()); | 160 EXPECT_EQ(0.5, specified->endDelay()); |
| 159 EXPECT_EQ("backwards", specified->fill()); | 161 EXPECT_EQ("backwards", specified->fill()); |
| 160 EXPECT_EQ(2, specified->iterationStart()); | 162 EXPECT_EQ(2, specified->iterationStart()); |
| 161 EXPECT_EQ(10, specified->iterations()); | 163 EXPECT_EQ(10, specified->iterations()); |
| 162 EXPECT_EQ(2, specified->playbackRate()); | 164 EXPECT_EQ(2, specified->playbackRate()); |
| 163 EXPECT_EQ("reverse", specified->direction()); | 165 EXPECT_EQ("reverse", specified->direction()); |
| 164 EXPECT_EQ("step-start", specified->easing()); | 166 EXPECT_EQ("step-start", specified->easing()); |
| 165 } | 167 } |
| 166 | 168 |
| 167 TEST_F(AnimationAnimationV8Test, SpecifiedDurationGetter) | 169 TEST_F(AnimationAnimationV8Test, SpecifiedDurationGetter) |
| 168 { | 170 { |
| 169 Vector<Dictionary, 0> jsKeyframes; | 171 Vector<Dictionary, 0> jsKeyframes; |
| 170 | 172 |
| 171 v8::Handle<v8::Object> timingInputWithDuration = v8::Object::New(m_isolate); | 173 v8::Handle<v8::Object> timingInputWithDuration = v8::Object::New(isolate); |
| 172 setV8ObjectPropertyAsNumber(timingInputWithDuration, "duration", 2.5); | 174 setV8ObjectPropertyAsNumber(timingInputWithDuration, "duration", 2.5); |
| 173 Dictionary timingInputDictionaryWithDuration = Dictionary(v8::Handle<v8::Val
ue>::Cast(timingInputWithDuration), m_isolate); | 175 Dictionary timingInputDictionaryWithDuration = Dictionary(v8::Handle<v8::Val
ue>::Cast(timingInputWithDuration), isolate); |
| 174 | 176 |
| 175 RefPtr<Animation> animationWithDuration = createAnimation(element.get(), jsK
eyframes, timingInputDictionaryWithDuration); | 177 RefPtr<Animation> animationWithDuration = createAnimation(element.get(), jsK
eyframes, timingInputDictionaryWithDuration); |
| 176 | 178 |
| 177 RefPtr<TimedItemTiming> specifiedWithDuration = animationWithDuration->speci
fied(); | 179 RefPtr<TimedItemTiming> specifiedWithDuration = animationWithDuration->speci
fied(); |
| 178 bool isNumber = false; | 180 bool isNumber = false; |
| 179 double numberDuration = std::numeric_limits<double>::quiet_NaN(); | 181 double numberDuration = std::numeric_limits<double>::quiet_NaN(); |
| 180 bool isString = false; | 182 bool isString = false; |
| 181 String stringDuration = ""; | 183 String stringDuration = ""; |
| 182 specifiedWithDuration->getDuration("duration", isNumber, numberDuration, isS
tring, stringDuration); | 184 specifiedWithDuration->getDuration("duration", isNumber, numberDuration, isS
tring, stringDuration); |
| 183 EXPECT_TRUE(isNumber); | 185 EXPECT_TRUE(isNumber); |
| 184 EXPECT_EQ(2.5, numberDuration); | 186 EXPECT_EQ(2.5, numberDuration); |
| 185 EXPECT_FALSE(isString); | 187 EXPECT_FALSE(isString); |
| 186 EXPECT_EQ("", stringDuration); | 188 EXPECT_EQ("", stringDuration); |
| 187 | 189 |
| 188 | 190 |
| 189 v8::Handle<v8::Object> timingInputNoDuration = v8::Object::New(m_isolate); | 191 v8::Handle<v8::Object> timingInputNoDuration = v8::Object::New(isolate); |
| 190 Dictionary timingInputDictionaryNoDuration = Dictionary(v8::Handle<v8::Value
>::Cast(timingInputNoDuration), m_isolate); | 192 Dictionary timingInputDictionaryNoDuration = Dictionary(v8::Handle<v8::Value
>::Cast(timingInputNoDuration), isolate); |
| 191 | 193 |
| 192 RefPtr<Animation> animationNoDuration = createAnimation(element.get(), jsKey
frames, timingInputDictionaryNoDuration); | 194 RefPtr<Animation> animationNoDuration = createAnimation(element.get(), jsKey
frames, timingInputDictionaryNoDuration); |
| 193 | 195 |
| 194 RefPtr<TimedItemTiming> specifiedNoDuration = animationNoDuration->specified
(); | 196 RefPtr<TimedItemTiming> specifiedNoDuration = animationNoDuration->specified
(); |
| 195 isNumber = false; | 197 isNumber = false; |
| 196 numberDuration = std::numeric_limits<double>::quiet_NaN(); | 198 numberDuration = std::numeric_limits<double>::quiet_NaN(); |
| 197 isString = false; | 199 isString = false; |
| 198 stringDuration = ""; | 200 stringDuration = ""; |
| 199 specifiedNoDuration->getDuration("duration", isNumber, numberDuration, isStr
ing, stringDuration); | 201 specifiedNoDuration->getDuration("duration", isNumber, numberDuration, isStr
ing, stringDuration); |
| 200 EXPECT_FALSE(isNumber); | 202 EXPECT_FALSE(isNumber); |
| 201 EXPECT_TRUE(std::isnan(numberDuration)); | 203 EXPECT_TRUE(std::isnan(numberDuration)); |
| 202 EXPECT_TRUE(isString); | 204 EXPECT_TRUE(isString); |
| 203 EXPECT_EQ("auto", stringDuration); | 205 EXPECT_EQ("auto", stringDuration); |
| 204 } | 206 } |
| 205 | 207 |
| 206 TEST_F(AnimationAnimationV8Test, SpecifiedSetters) | 208 TEST_F(AnimationAnimationV8Test, SpecifiedSetters) |
| 207 { | 209 { |
| 208 Vector<Dictionary, 0> jsKeyframes; | 210 Vector<Dictionary, 0> jsKeyframes; |
| 209 v8::Handle<v8::Object> timingInput = v8::Object::New(m_isolate); | 211 v8::Handle<v8::Object> timingInput = v8::Object::New(isolate); |
| 210 Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cast(ti
mingInput), m_isolate); | 212 Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cast(ti
mingInput), isolate); |
| 211 RefPtr<Animation> animation = createAnimation(element.get(), jsKeyframes, ti
mingInputDictionary); | 213 RefPtr<Animation> animation = createAnimation(element.get(), jsKeyframes, ti
mingInputDictionary); |
| 212 | 214 |
| 213 RefPtr<TimedItemTiming> specified = animation->specified(); | 215 RefPtr<TimedItemTiming> specified = animation->specified(); |
| 214 | 216 |
| 215 EXPECT_EQ(0, specified->delay()); | 217 EXPECT_EQ(0, specified->delay()); |
| 216 specified->setDelay(2); | 218 specified->setDelay(2); |
| 217 EXPECT_EQ(2, specified->delay()); | 219 EXPECT_EQ(2, specified->delay()); |
| 218 | 220 |
| 219 EXPECT_EQ(0, specified->endDelay()); | 221 EXPECT_EQ(0, specified->endDelay()); |
| 220 specified->setEndDelay(0.5); | 222 specified->setEndDelay(0.5); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 241 EXPECT_EQ("reverse", specified->direction()); | 243 EXPECT_EQ("reverse", specified->direction()); |
| 242 | 244 |
| 243 EXPECT_EQ("linear", specified->easing()); | 245 EXPECT_EQ("linear", specified->easing()); |
| 244 specified->setEasing("step-start"); | 246 specified->setEasing("step-start"); |
| 245 EXPECT_EQ("step-start", specified->easing()); | 247 EXPECT_EQ("step-start", specified->easing()); |
| 246 } | 248 } |
| 247 | 249 |
| 248 TEST_F(AnimationAnimationV8Test, SetSpecifiedDuration) | 250 TEST_F(AnimationAnimationV8Test, SetSpecifiedDuration) |
| 249 { | 251 { |
| 250 Vector<Dictionary, 0> jsKeyframes; | 252 Vector<Dictionary, 0> jsKeyframes; |
| 251 v8::Handle<v8::Object> timingInput = v8::Object::New(m_isolate); | 253 v8::Handle<v8::Object> timingInput = v8::Object::New(isolate); |
| 252 Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cast(ti
mingInput), m_isolate); | 254 Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cast(ti
mingInput), isolate); |
| 253 RefPtr<Animation> animation = createAnimation(element.get(), jsKeyframes, ti
mingInputDictionary); | 255 RefPtr<Animation> animation = createAnimation(element.get(), jsKeyframes, ti
mingInputDictionary); |
| 254 | 256 |
| 255 RefPtr<TimedItemTiming> specified = animation->specified(); | 257 RefPtr<TimedItemTiming> specified = animation->specified(); |
| 256 | 258 |
| 257 bool isNumber = false; | 259 bool isNumber = false; |
| 258 double numberDuration = std::numeric_limits<double>::quiet_NaN(); | 260 double numberDuration = std::numeric_limits<double>::quiet_NaN(); |
| 259 bool isString = false; | 261 bool isString = false; |
| 260 String stringDuration = ""; | 262 String stringDuration = ""; |
| 261 specified->getDuration("duration", isNumber, numberDuration, isString, strin
gDuration); | 263 specified->getDuration("duration", isNumber, numberDuration, isString, strin
gDuration); |
| 262 EXPECT_FALSE(isNumber); | 264 EXPECT_FALSE(isNumber); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 367 player->setCurrentTime(150); | 369 player->setCurrentTime(150); |
| 368 EXPECT_EQ(inf, animation->timeToForwardsEffectChange()); | 370 EXPECT_EQ(inf, animation->timeToForwardsEffectChange()); |
| 369 EXPECT_EQ(0, animation->timeToReverseEffectChange()); | 371 EXPECT_EQ(0, animation->timeToReverseEffectChange()); |
| 370 | 372 |
| 371 player->setCurrentTime(200); | 373 player->setCurrentTime(200); |
| 372 EXPECT_EQ(inf, animation->timeToForwardsEffectChange()); | 374 EXPECT_EQ(inf, animation->timeToForwardsEffectChange()); |
| 373 EXPECT_EQ(50, animation->timeToReverseEffectChange()); | 375 EXPECT_EQ(50, animation->timeToReverseEffectChange()); |
| 374 } | 376 } |
| 375 | 377 |
| 376 } // namespace WebCore | 378 } // namespace WebCore |
| OLD | NEW |