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 "core/animation/TimingInput.h" | 5 #include "core/animation/TimingInput.h" |
6 | 6 |
7 #include "bindings/core/v8/V8BindingForTesting.h" | 7 #include "bindings/core/v8/V8BindingForTesting.h" |
| 8 #include "bindings/core/v8/V8KeyframeAnimationOptions.h" |
8 #include "bindings/core/v8/V8KeyframeEffectOptions.h" | 9 #include "bindings/core/v8/V8KeyframeEffectOptions.h" |
9 #include "core/animation/AnimationEffectTiming.h" | 10 #include "core/animation/AnimationEffectTiming.h" |
10 #include "core/animation/AnimationTestHelper.h" | 11 #include "core/animation/AnimationTestHelper.h" |
11 #include "core/testing/DummyPageHolder.h" | 12 #include "core/testing/DummyPageHolder.h" |
12 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
13 #include "v8/include/v8.h" | 14 #include "v8/include/v8.h" |
14 | 15 |
15 namespace blink { | 16 namespace blink { |
16 | 17 |
17 Timing ApplyTimingInputNumber(v8::Isolate* isolate, | 18 Timing ApplyTimingInputNumber(v8::Isolate* isolate, |
18 String timing_property, | 19 String timing_property, |
19 double timing_property_value, | 20 double timing_property_value, |
20 bool& timing_conversion_success) { | 21 bool& timing_conversion_success, |
| 22 bool is_keyframeeffectoptions = true) { |
21 v8::Local<v8::Object> timing_input = v8::Object::New(isolate); | 23 v8::Local<v8::Object> timing_input = v8::Object::New(isolate); |
22 SetV8ObjectPropertyAsNumber(isolate, timing_input, timing_property, | 24 SetV8ObjectPropertyAsNumber(isolate, timing_input, timing_property, |
23 timing_property_value); | 25 timing_property_value); |
24 KeyframeEffectOptions timing_input_dictionary; | |
25 DummyExceptionStateForTesting exception_state; | 26 DummyExceptionStateForTesting exception_state; |
26 V8KeyframeEffectOptions::toImpl(isolate, timing_input, | |
27 timing_input_dictionary, exception_state); | |
28 Timing result; | 27 Timing result; |
29 timing_conversion_success = | 28 if (is_keyframeeffectoptions) { |
30 TimingInput::Convert(timing_input_dictionary, result, nullptr, | 29 KeyframeEffectOptions timing_input_dictionary; |
31 exception_state) && | 30 V8KeyframeEffectOptions::toImpl(isolate, timing_input, |
32 !exception_state.HadException(); | 31 timing_input_dictionary, exception_state); |
| 32 timing_conversion_success = |
| 33 TimingInput::Convert(timing_input_dictionary, result, nullptr, |
| 34 exception_state) && |
| 35 !exception_state.HadException(); |
| 36 } else { |
| 37 KeyframeAnimationOptions timing_input_dictionary; |
| 38 V8KeyframeAnimationOptions::toImpl( |
| 39 isolate, timing_input, timing_input_dictionary, exception_state); |
| 40 timing_conversion_success = |
| 41 TimingInput::Convert(timing_input_dictionary, result, nullptr, |
| 42 exception_state) && |
| 43 !exception_state.HadException(); |
| 44 } |
33 return result; | 45 return result; |
34 } | 46 } |
35 | 47 |
36 Timing ApplyTimingInputString(v8::Isolate* isolate, | 48 Timing ApplyTimingInputString(v8::Isolate* isolate, |
37 String timing_property, | 49 String timing_property, |
38 String timing_property_value, | 50 String timing_property_value, |
39 bool& timing_conversion_success) { | 51 bool& timing_conversion_success, |
| 52 bool is_keyframeeffectoptions = true) { |
40 v8::Local<v8::Object> timing_input = v8::Object::New(isolate); | 53 v8::Local<v8::Object> timing_input = v8::Object::New(isolate); |
41 SetV8ObjectPropertyAsString(isolate, timing_input, timing_property, | 54 SetV8ObjectPropertyAsString(isolate, timing_input, timing_property, |
42 timing_property_value); | 55 timing_property_value); |
43 KeyframeEffectOptions timing_input_dictionary; | 56 |
44 DummyExceptionStateForTesting exception_state; | 57 DummyExceptionStateForTesting exception_state; |
45 V8KeyframeEffectOptions::toImpl(isolate, timing_input, | |
46 timing_input_dictionary, exception_state); | |
47 Timing result; | 58 Timing result; |
48 timing_conversion_success = | 59 if (is_keyframeeffectoptions) { |
49 TimingInput::Convert(timing_input_dictionary, result, nullptr, | 60 KeyframeEffectOptions timing_input_dictionary; |
50 exception_state) && | 61 V8KeyframeEffectOptions::toImpl(isolate, timing_input, |
51 !exception_state.HadException(); | 62 timing_input_dictionary, exception_state); |
| 63 timing_conversion_success = |
| 64 TimingInput::Convert(timing_input_dictionary, result, nullptr, |
| 65 exception_state) && |
| 66 !exception_state.HadException(); |
| 67 } else { |
| 68 KeyframeAnimationOptions timing_input_dictionary; |
| 69 V8KeyframeAnimationOptions::toImpl( |
| 70 isolate, timing_input, timing_input_dictionary, exception_state); |
| 71 timing_conversion_success = |
| 72 TimingInput::Convert(timing_input_dictionary, result, nullptr, |
| 73 exception_state) && |
| 74 !exception_state.HadException(); |
| 75 } |
52 return result; | 76 return result; |
53 } | 77 } |
54 | 78 |
55 TEST(AnimationTimingInputTest, TimingInputStartDelay) { | 79 TEST(AnimationTimingInputTest, TimingInputStartDelay) { |
56 V8TestingScope scope; | 80 V8TestingScope scope; |
57 bool ignored_success; | 81 bool ignored_success; |
58 EXPECT_EQ(1.1, ApplyTimingInputNumber(scope.GetIsolate(), "delay", 1100, | 82 EXPECT_EQ(1.1, ApplyTimingInputNumber(scope.GetIsolate(), "delay", 1100, |
59 ignored_success) | 83 ignored_success) |
60 .start_delay); | 84 .start_delay); |
61 EXPECT_EQ(-1, ApplyTimingInputNumber(scope.GetIsolate(), "delay", -1000, | 85 EXPECT_EQ(-1, ApplyTimingInputNumber(scope.GetIsolate(), "delay", -1000, |
(...skipping 12 matching lines...) Expand all Loading... |
74 ignored_success) | 98 ignored_success) |
75 .start_delay); | 99 .start_delay); |
76 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "NaN", | 100 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "NaN", |
77 ignored_success) | 101 ignored_success) |
78 .start_delay); | 102 .start_delay); |
79 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "rubbish", | 103 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "rubbish", |
80 ignored_success) | 104 ignored_success) |
81 .start_delay); | 105 .start_delay); |
82 } | 106 } |
83 | 107 |
| 108 TEST(AnimationTimingInputTest, TimingInputStartDelayKeyframeAnimationOptions) { |
| 109 V8TestingScope scope; |
| 110 bool ignored_success; |
| 111 EXPECT_EQ(1.1, ApplyTimingInputNumber(scope.GetIsolate(), "delay", 1100, |
| 112 ignored_success, false) |
| 113 .start_delay); |
| 114 EXPECT_EQ(-1, ApplyTimingInputNumber(scope.GetIsolate(), "delay", -1000, |
| 115 ignored_success, false) |
| 116 .start_delay); |
| 117 EXPECT_EQ(1, ApplyTimingInputString(scope.GetIsolate(), "delay", "1000", |
| 118 ignored_success, false) |
| 119 .start_delay); |
| 120 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "1s", |
| 121 ignored_success, false) |
| 122 .start_delay); |
| 123 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "Infinity", |
| 124 ignored_success, false) |
| 125 .start_delay); |
| 126 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "-Infinity", |
| 127 ignored_success, false) |
| 128 .start_delay); |
| 129 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "NaN", |
| 130 ignored_success, false) |
| 131 .start_delay); |
| 132 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "rubbish", |
| 133 ignored_success, false) |
| 134 .start_delay); |
| 135 } |
| 136 |
84 TEST(AnimationTimingInputTest, TimingInputEndDelay) { | 137 TEST(AnimationTimingInputTest, TimingInputEndDelay) { |
85 V8TestingScope scope; | 138 V8TestingScope scope; |
86 bool ignored_success; | 139 bool ignored_success; |
87 EXPECT_EQ(10, ApplyTimingInputNumber(scope.GetIsolate(), "endDelay", 10000, | 140 EXPECT_EQ(10, ApplyTimingInputNumber(scope.GetIsolate(), "endDelay", 10000, |
88 ignored_success) | 141 ignored_success) |
89 .end_delay); | 142 .end_delay); |
90 EXPECT_EQ(-2.5, ApplyTimingInputNumber(scope.GetIsolate(), "endDelay", -2500, | 143 EXPECT_EQ(-2.5, ApplyTimingInputNumber(scope.GetIsolate(), "endDelay", -2500, |
91 ignored_success) | 144 ignored_success) |
92 .end_delay); | 145 .end_delay); |
93 } | 146 } |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 EXPECT_EQ(control_timing.start_delay, updated_timing.start_delay); | 421 EXPECT_EQ(control_timing.start_delay, updated_timing.start_delay); |
369 EXPECT_EQ(control_timing.fill_mode, updated_timing.fill_mode); | 422 EXPECT_EQ(control_timing.fill_mode, updated_timing.fill_mode); |
370 EXPECT_EQ(control_timing.iteration_start, updated_timing.iteration_start); | 423 EXPECT_EQ(control_timing.iteration_start, updated_timing.iteration_start); |
371 EXPECT_EQ(control_timing.iteration_count, updated_timing.iteration_count); | 424 EXPECT_EQ(control_timing.iteration_count, updated_timing.iteration_count); |
372 EXPECT_TRUE(std::isnan(updated_timing.iteration_duration)); | 425 EXPECT_TRUE(std::isnan(updated_timing.iteration_duration)); |
373 EXPECT_EQ(control_timing.playback_rate, updated_timing.playback_rate); | 426 EXPECT_EQ(control_timing.playback_rate, updated_timing.playback_rate); |
374 EXPECT_EQ(control_timing.direction, updated_timing.direction); | 427 EXPECT_EQ(control_timing.direction, updated_timing.direction); |
375 EXPECT_EQ(*control_timing.timing_function, *updated_timing.timing_function); | 428 EXPECT_EQ(*control_timing.timing_function, *updated_timing.timing_function); |
376 } | 429 } |
377 | 430 |
| 431 TEST(AnimationTimingInputTest, TimingInputEmptyKeyframeAnimationOptions) { |
| 432 DummyExceptionStateForTesting exception_state; |
| 433 Timing control_timing; |
| 434 Timing updated_timing; |
| 435 bool success = TimingInput::Convert(KeyframeAnimationOptions(), |
| 436 updated_timing, nullptr, exception_state); |
| 437 EXPECT_TRUE(success); |
| 438 EXPECT_FALSE(exception_state.HadException()); |
| 439 |
| 440 EXPECT_EQ(control_timing.start_delay, updated_timing.start_delay); |
| 441 EXPECT_EQ(control_timing.fill_mode, updated_timing.fill_mode); |
| 442 EXPECT_EQ(control_timing.iteration_start, updated_timing.iteration_start); |
| 443 EXPECT_EQ(control_timing.iteration_count, updated_timing.iteration_count); |
| 444 EXPECT_TRUE(std::isnan(updated_timing.iteration_duration)); |
| 445 EXPECT_EQ(control_timing.playback_rate, updated_timing.playback_rate); |
| 446 EXPECT_EQ(control_timing.direction, updated_timing.direction); |
| 447 EXPECT_EQ(*control_timing.timing_function, *updated_timing.timing_function); |
| 448 } |
| 449 |
378 } // namespace blink | 450 } // namespace blink |
OLD | NEW |