TEST_F(AnimationAnimationV8Test, SpecifiedGetters) { Vector<Dictionary, 0> jsKeyframes; v8::Handle<v8::Object> timingInput = v8::Object::New(m_isolate); setV8ObjectPropertyAsNumber(timingInput, "delay", 2); setV8ObjectPropertyAsNumber(timingInput, "endDelay", 0.5); setV8ObjectPropertyAsString(timingInput, "fill", "backwards"); setV8ObjectPropertyAsNumber(timingInput, "iterationStart", 2); setV8ObjectPropertyAsNumber(timingInput, "iterations", 10); setV8ObjectPropertyAsNumber(timingInput, "playbackRate", 2); setV8ObjectPropertyAsString(timingInput, "direction", "reverse"); setV8ObjectPropertyAsString(timingInput, "easing", "step-start"); Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cast(timingInput), m_isolate); RefPtrWillBeRawPtr<Animation> animation = createAnimation(element.get(), jsKeyframes, timingInputDictionary, exceptionState); RefPtrWillBeRawPtr<AnimationNodeTiming> specified = animation->timing(); EXPECT_EQ(2, specified->delay()); EXPECT_EQ(0.5, specified->endDelay()); EXPECT_EQ("backwards", specified->fill()); EXPECT_EQ(2, specified->iterationStart()); EXPECT_EQ(10, specified->iterations()); EXPECT_EQ(2, specified->playbackRate()); EXPECT_EQ("reverse", specified->direction()); EXPECT_EQ("step-start", specified->easing()); }
Timing applyTimingInputNumber(String timingProperty, double timingPropertyValue) { v8::Handle<v8::Object> timingInput = v8::Object::New(m_isolate); setV8ObjectPropertyAsNumber(timingInput, timingProperty, timingPropertyValue); Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cast(timingInput), m_isolate); return TimingInput::convert(timingInputDictionary); }
TEST_F(AnimationAnimationV8Test, SpecifiedDurationGetter) { Vector<Dictionary, 0> jsKeyframes; v8::Handle<v8::Object> timingInputWithDuration = v8::Object::New(m_isolate); setV8ObjectPropertyAsNumber(timingInputWithDuration, "duration", 2.5); Dictionary timingInputDictionaryWithDuration = Dictionary(v8::Handle<v8::Value>::Cast(timingInputWithDuration), m_isolate); RefPtrWillBeRawPtr<Animation> animationWithDuration = createAnimation(element.get(), jsKeyframes, timingInputDictionaryWithDuration, exceptionState); RefPtrWillBeRawPtr<AnimationNodeTiming> specifiedWithDuration = animationWithDuration->timing(); Nullable<double> numberDuration; String stringDuration; specifiedWithDuration->getDuration("duration", numberDuration, stringDuration); EXPECT_FALSE(numberDuration.isNull()); EXPECT_EQ(2.5, numberDuration.get()); EXPECT_TRUE(stringDuration.isNull()); v8::Handle<v8::Object> timingInputNoDuration = v8::Object::New(m_isolate); Dictionary timingInputDictionaryNoDuration = Dictionary(v8::Handle<v8::Value>::Cast(timingInputNoDuration), m_isolate); RefPtrWillBeRawPtr<Animation> animationNoDuration = createAnimation(element.get(), jsKeyframes, timingInputDictionaryNoDuration, exceptionState); RefPtrWillBeRawPtr<AnimationNodeTiming> specifiedNoDuration = animationNoDuration->timing(); Nullable<double> numberDuration2; String stringDuration2; specifiedNoDuration->getDuration("duration", numberDuration2, stringDuration2); EXPECT_TRUE(numberDuration2.isNull()); EXPECT_FALSE(stringDuration2.isNull()); EXPECT_EQ("auto", stringDuration2); }
void applyTimingInputNumber(Timing& timing, v8::Isolate* isolate, String timingProperty, double timingPropertyValue) { v8::Handle<v8::Object> timingInput = v8::Object::New(isolate); setV8ObjectPropertyAsNumber(timingInput, timingProperty, timingPropertyValue); Dictionary timingInputDictionary = Dictionary(v8::Handle<v8::Value>::Cast(timingInput), isolate); populateTiming(timing, timingInputDictionary); }
Timing applyTimingInputNumber(v8::Isolate* isolate, String timingProperty, double timingPropertyValue, bool& timingConversionSuccess) { v8::Local<v8::Object> timingInput = v8::Object::New(isolate); setV8ObjectPropertyAsNumber(isolate, timingInput, timingProperty, timingPropertyValue); KeyframeEffectOptions timingInputDictionary; TrackExceptionState exceptionState; V8KeyframeEffectOptions::toImpl(isolate, timingInput, timingInputDictionary, exceptionState); Timing result; timingConversionSuccess = TimingInput::convert(timingInputDictionary, result, nullptr, exceptionState) && !exceptionState.hadException(); return result; }
TEST_F(AnimationAnimationV8Test, SpecifiedDurationGetter) { Vector<Dictionary, 0> jsKeyframes; v8::Handle<v8::Object> timingInputWithDuration = v8::Object::New(m_isolate); setV8ObjectPropertyAsNumber(timingInputWithDuration, "duration", 2.5); Dictionary timingInputDictionaryWithDuration = Dictionary(v8::Handle<v8::Value>::Cast(timingInputWithDuration), m_isolate); RefPtrWillBeRawPtr<Animation> animationWithDuration = createAnimation(element.get(), jsKeyframes, timingInputDictionaryWithDuration, exceptionState); RefPtrWillBeRawPtr<AnimationNodeTiming> specifiedWithDuration = animationWithDuration->timing(); bool isNumber = false; double numberDuration = std::numeric_limits<double>::quiet_NaN(); bool isString = false; String stringDuration = ""; specifiedWithDuration->getDuration("duration", isNumber, numberDuration, isString, stringDuration); EXPECT_TRUE(isNumber); EXPECT_EQ(2.5, numberDuration); EXPECT_FALSE(isString); EXPECT_EQ("", stringDuration); v8::Handle<v8::Object> timingInputNoDuration = v8::Object::New(m_isolate); Dictionary timingInputDictionaryNoDuration = Dictionary(v8::Handle<v8::Value>::Cast(timingInputNoDuration), m_isolate); RefPtrWillBeRawPtr<Animation> animationNoDuration = createAnimation(element.get(), jsKeyframes, timingInputDictionaryNoDuration, exceptionState); RefPtrWillBeRawPtr<AnimationNodeTiming> specifiedNoDuration = animationNoDuration->timing(); isNumber = false; numberDuration = std::numeric_limits<double>::quiet_NaN(); isString = false; stringDuration = ""; specifiedNoDuration->getDuration("duration", isNumber, numberDuration, isString, stringDuration); EXPECT_FALSE(isNumber); EXPECT_TRUE(std::isnan(numberDuration)); EXPECT_TRUE(isString); EXPECT_EQ("auto", stringDuration); }