| Index: third_party/WebKit/Source/core/animation/TimingInputTest.cpp
|
| diff --git a/third_party/WebKit/Source/core/animation/TimingInputTest.cpp b/third_party/WebKit/Source/core/animation/TimingInputTest.cpp
|
| index 5e9f6d8c477587c347a291a0f924a25f7a6e59a8..11faae80289099fb36e4963d9cc4bfe95e10a179 100644
|
| --- a/third_party/WebKit/Source/core/animation/TimingInputTest.cpp
|
| +++ b/third_party/WebKit/Source/core/animation/TimingInputTest.cpp
|
| @@ -5,6 +5,7 @@
|
| #include "core/animation/TimingInput.h"
|
|
|
| #include "bindings/core/v8/V8BindingForTesting.h"
|
| +#include "bindings/core/v8/V8KeyframeAnimationOptions.h"
|
| #include "bindings/core/v8/V8KeyframeEffectOptions.h"
|
| #include "core/animation/AnimationEffectTiming.h"
|
| #include "core/animation/AnimationTestHelper.h"
|
| @@ -17,38 +18,61 @@ namespace blink {
|
| Timing ApplyTimingInputNumber(v8::Isolate* isolate,
|
| String timing_property,
|
| double timing_property_value,
|
| - bool& timing_conversion_success) {
|
| + bool& timing_conversion_success,
|
| + bool is_keyframeeffectoptions = true) {
|
| v8::Local<v8::Object> timing_input = v8::Object::New(isolate);
|
| SetV8ObjectPropertyAsNumber(isolate, timing_input, timing_property,
|
| timing_property_value);
|
| - KeyframeEffectOptions timing_input_dictionary;
|
| DummyExceptionStateForTesting exception_state;
|
| - V8KeyframeEffectOptions::toImpl(isolate, timing_input,
|
| - timing_input_dictionary, exception_state);
|
| Timing result;
|
| - timing_conversion_success =
|
| - TimingInput::Convert(timing_input_dictionary, result, nullptr,
|
| - exception_state) &&
|
| - !exception_state.HadException();
|
| + if (is_keyframeeffectoptions) {
|
| + KeyframeEffectOptions timing_input_dictionary;
|
| + V8KeyframeEffectOptions::toImpl(isolate, timing_input,
|
| + timing_input_dictionary, exception_state);
|
| + timing_conversion_success =
|
| + TimingInput::Convert(timing_input_dictionary, result, nullptr,
|
| + exception_state) &&
|
| + !exception_state.HadException();
|
| + } else {
|
| + KeyframeAnimationOptions timing_input_dictionary;
|
| + V8KeyframeAnimationOptions::toImpl(
|
| + isolate, timing_input, timing_input_dictionary, exception_state);
|
| + timing_conversion_success =
|
| + TimingInput::Convert(timing_input_dictionary, result, nullptr,
|
| + exception_state) &&
|
| + !exception_state.HadException();
|
| + }
|
| return result;
|
| }
|
|
|
| Timing ApplyTimingInputString(v8::Isolate* isolate,
|
| String timing_property,
|
| String timing_property_value,
|
| - bool& timing_conversion_success) {
|
| + bool& timing_conversion_success,
|
| + bool is_keyframeeffectoptions = true) {
|
| v8::Local<v8::Object> timing_input = v8::Object::New(isolate);
|
| SetV8ObjectPropertyAsString(isolate, timing_input, timing_property,
|
| timing_property_value);
|
| - KeyframeEffectOptions timing_input_dictionary;
|
| +
|
| DummyExceptionStateForTesting exception_state;
|
| - V8KeyframeEffectOptions::toImpl(isolate, timing_input,
|
| - timing_input_dictionary, exception_state);
|
| Timing result;
|
| - timing_conversion_success =
|
| - TimingInput::Convert(timing_input_dictionary, result, nullptr,
|
| - exception_state) &&
|
| - !exception_state.HadException();
|
| + if (is_keyframeeffectoptions) {
|
| + KeyframeEffectOptions timing_input_dictionary;
|
| + V8KeyframeEffectOptions::toImpl(isolate, timing_input,
|
| + timing_input_dictionary, exception_state);
|
| + timing_conversion_success =
|
| + TimingInput::Convert(timing_input_dictionary, result, nullptr,
|
| + exception_state) &&
|
| + !exception_state.HadException();
|
| + } else {
|
| + KeyframeAnimationOptions timing_input_dictionary;
|
| + V8KeyframeAnimationOptions::toImpl(
|
| + isolate, timing_input, timing_input_dictionary, exception_state);
|
| + timing_conversion_success =
|
| + TimingInput::Convert(timing_input_dictionary, result, nullptr,
|
| + exception_state) &&
|
| + !exception_state.HadException();
|
| + }
|
| return result;
|
| }
|
|
|
| @@ -81,6 +105,35 @@ TEST(AnimationTimingInputTest, TimingInputStartDelay) {
|
| .start_delay);
|
| }
|
|
|
| +TEST(AnimationTimingInputTest, TimingInputStartDelayKeyframeAnimationOptions) {
|
| + V8TestingScope scope;
|
| + bool ignored_success;
|
| + EXPECT_EQ(1.1, ApplyTimingInputNumber(scope.GetIsolate(), "delay", 1100,
|
| + ignored_success, false)
|
| + .start_delay);
|
| + EXPECT_EQ(-1, ApplyTimingInputNumber(scope.GetIsolate(), "delay", -1000,
|
| + ignored_success, false)
|
| + .start_delay);
|
| + EXPECT_EQ(1, ApplyTimingInputString(scope.GetIsolate(), "delay", "1000",
|
| + ignored_success, false)
|
| + .start_delay);
|
| + EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "1s",
|
| + ignored_success, false)
|
| + .start_delay);
|
| + EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "Infinity",
|
| + ignored_success, false)
|
| + .start_delay);
|
| + EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "-Infinity",
|
| + ignored_success, false)
|
| + .start_delay);
|
| + EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "NaN",
|
| + ignored_success, false)
|
| + .start_delay);
|
| + EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "rubbish",
|
| + ignored_success, false)
|
| + .start_delay);
|
| +}
|
| +
|
| TEST(AnimationTimingInputTest, TimingInputEndDelay) {
|
| V8TestingScope scope;
|
| bool ignored_success;
|
| @@ -375,4 +428,23 @@ TEST(AnimationTimingInputTest, TimingInputEmpty) {
|
| EXPECT_EQ(*control_timing.timing_function, *updated_timing.timing_function);
|
| }
|
|
|
| +TEST(AnimationTimingInputTest, TimingInputEmptyKeyframeAnimationOptions) {
|
| + DummyExceptionStateForTesting exception_state;
|
| + Timing control_timing;
|
| + Timing updated_timing;
|
| + bool success = TimingInput::Convert(KeyframeAnimationOptions(),
|
| + updated_timing, nullptr, exception_state);
|
| + EXPECT_TRUE(success);
|
| + EXPECT_FALSE(exception_state.HadException());
|
| +
|
| + EXPECT_EQ(control_timing.start_delay, updated_timing.start_delay);
|
| + EXPECT_EQ(control_timing.fill_mode, updated_timing.fill_mode);
|
| + EXPECT_EQ(control_timing.iteration_start, updated_timing.iteration_start);
|
| + EXPECT_EQ(control_timing.iteration_count, updated_timing.iteration_count);
|
| + EXPECT_TRUE(std::isnan(updated_timing.iteration_duration));
|
| + EXPECT_EQ(control_timing.playback_rate, updated_timing.playback_rate);
|
| + EXPECT_EQ(control_timing.direction, updated_timing.direction);
|
| + EXPECT_EQ(*control_timing.timing_function, *updated_timing.timing_function);
|
| +}
|
| +
|
| } // namespace blink
|
|
|