| 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/V8KeyframeAnimationOptions.h" |
| 9 #include "bindings/core/v8/V8KeyframeEffectOptions.h" | 9 #include "bindings/core/v8/V8KeyframeEffectOptions.h" |
| 10 #include "core/animation/AnimationEffectTiming.h" | 10 #include "core/animation/AnimationEffectTiming.h" |
| 11 #include "core/animation/AnimationTestHelper.h" | 11 #include "core/animation/AnimationTestHelper.h" |
| 12 #include "core/testing/DummyPageHolder.h" | 12 #include "core/testing/DummyPageHolder.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 14 #include "v8/include/v8.h" | 14 #include "v8/include/v8.h" |
| 15 | 15 |
| 16 namespace blink { | 16 namespace blink { |
| 17 | 17 |
| 18 Timing ApplyTimingInputNumber(v8::Isolate* isolate, | 18 class AnimationTimingInputTest : public testing::Test { |
| 19 String timing_property, | 19 public: |
| 20 double timing_property_value, | 20 Timing ApplyTimingInputNumber(v8::Isolate*, |
| 21 bool& timing_conversion_success, | 21 String timing_property, |
| 22 bool is_keyframeeffectoptions = true) { | 22 double timing_property_value, |
| 23 bool& timing_conversion_success, |
| 24 bool is_keyframeeffectoptions = true); |
| 25 Timing ApplyTimingInputString(v8::Isolate*, |
| 26 String timing_property, |
| 27 String timing_property_value, |
| 28 bool& timing_conversion_success, |
| 29 bool is_keyframeeffectoptions = true); |
| 30 |
| 31 private: |
| 32 void SetUp() override { page_holder_ = DummyPageHolder::Create(); } |
| 33 |
| 34 Document* GetDocument() const { return &page_holder_->GetDocument(); } |
| 35 |
| 36 std::unique_ptr<DummyPageHolder> page_holder_; |
| 37 }; |
| 38 |
| 39 Timing AnimationTimingInputTest::ApplyTimingInputNumber( |
| 40 v8::Isolate* isolate, |
| 41 String timing_property, |
| 42 double timing_property_value, |
| 43 bool& timing_conversion_success, |
| 44 bool is_keyframeeffectoptions) { |
| 23 v8::Local<v8::Object> timing_input = v8::Object::New(isolate); | 45 v8::Local<v8::Object> timing_input = v8::Object::New(isolate); |
| 24 SetV8ObjectPropertyAsNumber(isolate, timing_input, timing_property, | 46 SetV8ObjectPropertyAsNumber(isolate, timing_input, timing_property, |
| 25 timing_property_value); | 47 timing_property_value); |
| 26 DummyExceptionStateForTesting exception_state; | 48 DummyExceptionStateForTesting exception_state; |
| 27 Timing result; | 49 Timing result; |
| 28 if (is_keyframeeffectoptions) { | 50 if (is_keyframeeffectoptions) { |
| 29 KeyframeEffectOptions timing_input_dictionary; | 51 KeyframeEffectOptions timing_input_dictionary; |
| 30 V8KeyframeEffectOptions::toImpl(isolate, timing_input, | 52 V8KeyframeEffectOptions::toImpl(isolate, timing_input, |
| 31 timing_input_dictionary, exception_state); | 53 timing_input_dictionary, exception_state); |
| 32 timing_conversion_success = | 54 timing_conversion_success = |
| 33 TimingInput::Convert(timing_input_dictionary, result, nullptr, | 55 TimingInput::Convert(timing_input_dictionary, result, GetDocument(), |
| 34 exception_state) && | 56 exception_state) && |
| 35 !exception_state.HadException(); | 57 !exception_state.HadException(); |
| 36 } else { | 58 } else { |
| 37 KeyframeAnimationOptions timing_input_dictionary; | 59 KeyframeAnimationOptions timing_input_dictionary; |
| 38 V8KeyframeAnimationOptions::toImpl( | 60 V8KeyframeAnimationOptions::toImpl( |
| 39 isolate, timing_input, timing_input_dictionary, exception_state); | 61 isolate, timing_input, timing_input_dictionary, exception_state); |
| 40 timing_conversion_success = | 62 timing_conversion_success = |
| 41 TimingInput::Convert(timing_input_dictionary, result, nullptr, | 63 TimingInput::Convert(timing_input_dictionary, result, GetDocument(), |
| 42 exception_state) && | 64 exception_state) && |
| 43 !exception_state.HadException(); | 65 !exception_state.HadException(); |
| 44 } | 66 } |
| 45 return result; | 67 return result; |
| 46 } | 68 } |
| 47 | 69 |
| 48 Timing ApplyTimingInputString(v8::Isolate* isolate, | 70 Timing AnimationTimingInputTest::ApplyTimingInputString( |
| 49 String timing_property, | 71 v8::Isolate* isolate, |
| 50 String timing_property_value, | 72 String timing_property, |
| 51 bool& timing_conversion_success, | 73 String timing_property_value, |
| 52 bool is_keyframeeffectoptions = true) { | 74 bool& timing_conversion_success, |
| 75 bool is_keyframeeffectoptions) { |
| 53 v8::Local<v8::Object> timing_input = v8::Object::New(isolate); | 76 v8::Local<v8::Object> timing_input = v8::Object::New(isolate); |
| 54 SetV8ObjectPropertyAsString(isolate, timing_input, timing_property, | 77 SetV8ObjectPropertyAsString(isolate, timing_input, timing_property, |
| 55 timing_property_value); | 78 timing_property_value); |
| 56 | 79 |
| 57 DummyExceptionStateForTesting exception_state; | 80 DummyExceptionStateForTesting exception_state; |
| 58 Timing result; | 81 Timing result; |
| 59 if (is_keyframeeffectoptions) { | 82 if (is_keyframeeffectoptions) { |
| 60 KeyframeEffectOptions timing_input_dictionary; | 83 KeyframeEffectOptions timing_input_dictionary; |
| 61 V8KeyframeEffectOptions::toImpl(isolate, timing_input, | 84 V8KeyframeEffectOptions::toImpl(isolate, timing_input, |
| 62 timing_input_dictionary, exception_state); | 85 timing_input_dictionary, exception_state); |
| 63 timing_conversion_success = | 86 timing_conversion_success = |
| 64 TimingInput::Convert(timing_input_dictionary, result, nullptr, | 87 TimingInput::Convert(timing_input_dictionary, result, GetDocument(), |
| 65 exception_state) && | 88 exception_state) && |
| 66 !exception_state.HadException(); | 89 !exception_state.HadException(); |
| 67 } else { | 90 } else { |
| 68 KeyframeAnimationOptions timing_input_dictionary; | 91 KeyframeAnimationOptions timing_input_dictionary; |
| 69 V8KeyframeAnimationOptions::toImpl( | 92 V8KeyframeAnimationOptions::toImpl( |
| 70 isolate, timing_input, timing_input_dictionary, exception_state); | 93 isolate, timing_input, timing_input_dictionary, exception_state); |
| 71 timing_conversion_success = | 94 timing_conversion_success = |
| 72 TimingInput::Convert(timing_input_dictionary, result, nullptr, | 95 TimingInput::Convert(timing_input_dictionary, result, GetDocument(), |
| 73 exception_state) && | 96 exception_state) && |
| 74 !exception_state.HadException(); | 97 !exception_state.HadException(); |
| 75 } | 98 } |
| 76 return result; | 99 return result; |
| 77 } | 100 } |
| 78 | 101 |
| 79 TEST(AnimationTimingInputTest, TimingInputStartDelay) { | 102 TEST_F(AnimationTimingInputTest, TimingInputStartDelay) { |
| 80 V8TestingScope scope; | 103 V8TestingScope scope; |
| 81 bool ignored_success; | 104 bool ignored_success; |
| 82 EXPECT_EQ(1.1, ApplyTimingInputNumber(scope.GetIsolate(), "delay", 1100, | 105 EXPECT_EQ(1.1, ApplyTimingInputNumber(scope.GetIsolate(), "delay", 1100, |
| 83 ignored_success) | 106 ignored_success) |
| 84 .start_delay); | 107 .start_delay); |
| 85 EXPECT_EQ(-1, ApplyTimingInputNumber(scope.GetIsolate(), "delay", -1000, | 108 EXPECT_EQ(-1, ApplyTimingInputNumber(scope.GetIsolate(), "delay", -1000, |
| 86 ignored_success) | 109 ignored_success) |
| 87 .start_delay); | 110 .start_delay); |
| 88 EXPECT_EQ(1, ApplyTimingInputString(scope.GetIsolate(), "delay", "1000", | 111 EXPECT_EQ(1, ApplyTimingInputString(scope.GetIsolate(), "delay", "1000", |
| 89 ignored_success) | 112 ignored_success) |
| 90 .start_delay); | 113 .start_delay); |
| 91 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "1s", | 114 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "1s", |
| 92 ignored_success) | 115 ignored_success) |
| 93 .start_delay); | 116 .start_delay); |
| 94 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "Infinity", | 117 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "Infinity", |
| 95 ignored_success) | 118 ignored_success) |
| 96 .start_delay); | 119 .start_delay); |
| 97 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "-Infinity", | 120 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "-Infinity", |
| 98 ignored_success) | 121 ignored_success) |
| 99 .start_delay); | 122 .start_delay); |
| 100 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "NaN", | 123 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "NaN", |
| 101 ignored_success) | 124 ignored_success) |
| 102 .start_delay); | 125 .start_delay); |
| 103 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "rubbish", | 126 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "rubbish", |
| 104 ignored_success) | 127 ignored_success) |
| 105 .start_delay); | 128 .start_delay); |
| 106 } | 129 } |
| 107 | 130 |
| 108 TEST(AnimationTimingInputTest, TimingInputStartDelayKeyframeAnimationOptions) { | 131 TEST_F(AnimationTimingInputTest, |
| 132 TimingInputStartDelayKeyframeAnimationOptions) { |
| 109 V8TestingScope scope; | 133 V8TestingScope scope; |
| 110 bool ignored_success; | 134 bool ignored_success; |
| 111 EXPECT_EQ(1.1, ApplyTimingInputNumber(scope.GetIsolate(), "delay", 1100, | 135 EXPECT_EQ(1.1, ApplyTimingInputNumber(scope.GetIsolate(), "delay", 1100, |
| 112 ignored_success, false) | 136 ignored_success, false) |
| 113 .start_delay); | 137 .start_delay); |
| 114 EXPECT_EQ(-1, ApplyTimingInputNumber(scope.GetIsolate(), "delay", -1000, | 138 EXPECT_EQ(-1, ApplyTimingInputNumber(scope.GetIsolate(), "delay", -1000, |
| 115 ignored_success, false) | 139 ignored_success, false) |
| 116 .start_delay); | 140 .start_delay); |
| 117 EXPECT_EQ(1, ApplyTimingInputString(scope.GetIsolate(), "delay", "1000", | 141 EXPECT_EQ(1, ApplyTimingInputString(scope.GetIsolate(), "delay", "1000", |
| 118 ignored_success, false) | 142 ignored_success, false) |
| 119 .start_delay); | 143 .start_delay); |
| 120 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "1s", | 144 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "1s", |
| 121 ignored_success, false) | 145 ignored_success, false) |
| 122 .start_delay); | 146 .start_delay); |
| 123 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "Infinity", | 147 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "Infinity", |
| 124 ignored_success, false) | 148 ignored_success, false) |
| 125 .start_delay); | 149 .start_delay); |
| 126 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "-Infinity", | 150 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "-Infinity", |
| 127 ignored_success, false) | 151 ignored_success, false) |
| 128 .start_delay); | 152 .start_delay); |
| 129 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "NaN", | 153 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "NaN", |
| 130 ignored_success, false) | 154 ignored_success, false) |
| 131 .start_delay); | 155 .start_delay); |
| 132 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "rubbish", | 156 EXPECT_EQ(0, ApplyTimingInputString(scope.GetIsolate(), "delay", "rubbish", |
| 133 ignored_success, false) | 157 ignored_success, false) |
| 134 .start_delay); | 158 .start_delay); |
| 135 } | 159 } |
| 136 | 160 |
| 137 TEST(AnimationTimingInputTest, TimingInputEndDelay) { | 161 TEST_F(AnimationTimingInputTest, TimingInputEndDelay) { |
| 138 V8TestingScope scope; | 162 V8TestingScope scope; |
| 139 bool ignored_success; | 163 bool ignored_success; |
| 140 EXPECT_EQ(10, ApplyTimingInputNumber(scope.GetIsolate(), "endDelay", 10000, | 164 EXPECT_EQ(10, ApplyTimingInputNumber(scope.GetIsolate(), "endDelay", 10000, |
| 141 ignored_success) | 165 ignored_success) |
| 142 .end_delay); | 166 .end_delay); |
| 143 EXPECT_EQ(-2.5, ApplyTimingInputNumber(scope.GetIsolate(), "endDelay", -2500, | 167 EXPECT_EQ(-2.5, ApplyTimingInputNumber(scope.GetIsolate(), "endDelay", -2500, |
| 144 ignored_success) | 168 ignored_success) |
| 145 .end_delay); | 169 .end_delay); |
| 146 } | 170 } |
| 147 | 171 |
| 148 TEST(AnimationTimingInputTest, TimingInputFillMode) { | 172 TEST_F(AnimationTimingInputTest, TimingInputFillMode) { |
| 149 V8TestingScope scope; | 173 V8TestingScope scope; |
| 150 Timing::FillMode default_fill_mode = Timing::FillMode::AUTO; | 174 Timing::FillMode default_fill_mode = Timing::FillMode::AUTO; |
| 151 bool ignored_success; | 175 bool ignored_success; |
| 152 | 176 |
| 153 EXPECT_EQ(Timing::FillMode::AUTO, | 177 EXPECT_EQ(Timing::FillMode::AUTO, |
| 154 ApplyTimingInputString(scope.GetIsolate(), "fill", "auto", | 178 ApplyTimingInputString(scope.GetIsolate(), "fill", "auto", |
| 155 ignored_success) | 179 ignored_success) |
| 156 .fill_mode); | 180 .fill_mode); |
| 157 EXPECT_EQ(Timing::FillMode::FORWARDS, | 181 EXPECT_EQ(Timing::FillMode::FORWARDS, |
| 158 ApplyTimingInputString(scope.GetIsolate(), "fill", "forwards", | 182 ApplyTimingInputString(scope.GetIsolate(), "fill", "forwards", |
| (...skipping 18 matching lines...) Expand all Loading... |
| 177 EXPECT_EQ(default_fill_mode, | 201 EXPECT_EQ(default_fill_mode, |
| 178 ApplyTimingInputString(scope.GetIsolate(), "fill", | 202 ApplyTimingInputString(scope.GetIsolate(), "fill", |
| 179 "backwardsandforwards", ignored_success) | 203 "backwardsandforwards", ignored_success) |
| 180 .fill_mode); | 204 .fill_mode); |
| 181 EXPECT_EQ( | 205 EXPECT_EQ( |
| 182 default_fill_mode, | 206 default_fill_mode, |
| 183 ApplyTimingInputNumber(scope.GetIsolate(), "fill", 2, ignored_success) | 207 ApplyTimingInputNumber(scope.GetIsolate(), "fill", 2, ignored_success) |
| 184 .fill_mode); | 208 .fill_mode); |
| 185 } | 209 } |
| 186 | 210 |
| 187 TEST(AnimationTimingInputTest, TimingInputIterationStart) { | 211 TEST_F(AnimationTimingInputTest, TimingInputIterationStart) { |
| 188 V8TestingScope scope; | 212 V8TestingScope scope; |
| 189 bool success; | 213 bool success; |
| 190 EXPECT_EQ(1.1, ApplyTimingInputNumber(scope.GetIsolate(), "iterationStart", | 214 EXPECT_EQ(1.1, ApplyTimingInputNumber(scope.GetIsolate(), "iterationStart", |
| 191 1.1, success) | 215 1.1, success) |
| 192 .iteration_start); | 216 .iteration_start); |
| 193 EXPECT_TRUE(success); | 217 EXPECT_TRUE(success); |
| 194 | 218 |
| 195 ApplyTimingInputNumber(scope.GetIsolate(), "iterationStart", -1, success); | 219 ApplyTimingInputNumber(scope.GetIsolate(), "iterationStart", -1, success); |
| 196 EXPECT_FALSE(success); | 220 EXPECT_FALSE(success); |
| 197 | 221 |
| 198 ApplyTimingInputString(scope.GetIsolate(), "iterationStart", "Infinity", | 222 ApplyTimingInputString(scope.GetIsolate(), "iterationStart", "Infinity", |
| 199 success); | 223 success); |
| 200 EXPECT_FALSE(success); | 224 EXPECT_FALSE(success); |
| 201 | 225 |
| 202 ApplyTimingInputString(scope.GetIsolate(), "iterationStart", "-Infinity", | 226 ApplyTimingInputString(scope.GetIsolate(), "iterationStart", "-Infinity", |
| 203 success); | 227 success); |
| 204 EXPECT_FALSE(success); | 228 EXPECT_FALSE(success); |
| 205 | 229 |
| 206 ApplyTimingInputString(scope.GetIsolate(), "iterationStart", "NaN", success); | 230 ApplyTimingInputString(scope.GetIsolate(), "iterationStart", "NaN", success); |
| 207 EXPECT_FALSE(success); | 231 EXPECT_FALSE(success); |
| 208 | 232 |
| 209 ApplyTimingInputString(scope.GetIsolate(), "iterationStart", "rubbish", | 233 ApplyTimingInputString(scope.GetIsolate(), "iterationStart", "rubbish", |
| 210 success); | 234 success); |
| 211 EXPECT_FALSE(success); | 235 EXPECT_FALSE(success); |
| 212 } | 236 } |
| 213 | 237 |
| 214 TEST(AnimationTimingInputTest, TimingInputIterationCount) { | 238 TEST_F(AnimationTimingInputTest, TimingInputIterationCount) { |
| 215 V8TestingScope scope; | 239 V8TestingScope scope; |
| 216 bool success; | 240 bool success; |
| 217 EXPECT_EQ(2.1, ApplyTimingInputNumber(scope.GetIsolate(), "iterations", 2.1, | 241 EXPECT_EQ(2.1, ApplyTimingInputNumber(scope.GetIsolate(), "iterations", 2.1, |
| 218 success) | 242 success) |
| 219 .iteration_count); | 243 .iteration_count); |
| 220 EXPECT_TRUE(success); | 244 EXPECT_TRUE(success); |
| 221 | 245 |
| 222 Timing timing = ApplyTimingInputString(scope.GetIsolate(), "iterations", | 246 Timing timing = ApplyTimingInputString(scope.GetIsolate(), "iterations", |
| 223 "Infinity", success); | 247 "Infinity", success); |
| 224 EXPECT_TRUE(success); | 248 EXPECT_TRUE(success); |
| 225 EXPECT_TRUE(std::isinf(timing.iteration_count)); | 249 EXPECT_TRUE(std::isinf(timing.iteration_count)); |
| 226 EXPECT_GT(timing.iteration_count, 0); | 250 EXPECT_GT(timing.iteration_count, 0); |
| 227 | 251 |
| 228 ApplyTimingInputNumber(scope.GetIsolate(), "iterations", -1, success); | 252 ApplyTimingInputNumber(scope.GetIsolate(), "iterations", -1, success); |
| 229 EXPECT_FALSE(success); | 253 EXPECT_FALSE(success); |
| 230 | 254 |
| 231 ApplyTimingInputString(scope.GetIsolate(), "iterations", "-Infinity", | 255 ApplyTimingInputString(scope.GetIsolate(), "iterations", "-Infinity", |
| 232 success); | 256 success); |
| 233 EXPECT_FALSE(success); | 257 EXPECT_FALSE(success); |
| 234 | 258 |
| 235 ApplyTimingInputString(scope.GetIsolate(), "iterations", "NaN", success); | 259 ApplyTimingInputString(scope.GetIsolate(), "iterations", "NaN", success); |
| 236 EXPECT_FALSE(success); | 260 EXPECT_FALSE(success); |
| 237 | 261 |
| 238 ApplyTimingInputString(scope.GetIsolate(), "iterations", "rubbish", success); | 262 ApplyTimingInputString(scope.GetIsolate(), "iterations", "rubbish", success); |
| 239 EXPECT_FALSE(success); | 263 EXPECT_FALSE(success); |
| 240 } | 264 } |
| 241 | 265 |
| 242 TEST(AnimationTimingInputTest, TimingInputIterationDuration) { | 266 TEST_F(AnimationTimingInputTest, TimingInputIterationDuration) { |
| 243 V8TestingScope scope; | 267 V8TestingScope scope; |
| 244 bool success; | 268 bool success; |
| 245 EXPECT_EQ( | 269 EXPECT_EQ( |
| 246 1.1, ApplyTimingInputNumber(scope.GetIsolate(), "duration", 1100, success) | 270 1.1, ApplyTimingInputNumber(scope.GetIsolate(), "duration", 1100, success) |
| 247 .iteration_duration); | 271 .iteration_duration); |
| 248 EXPECT_TRUE(success); | 272 EXPECT_TRUE(success); |
| 249 | 273 |
| 250 Timing timing = | 274 Timing timing = |
| 251 ApplyTimingInputNumber(scope.GetIsolate(), "duration", | 275 ApplyTimingInputNumber(scope.GetIsolate(), "duration", |
| 252 std::numeric_limits<double>::infinity(), success); | 276 std::numeric_limits<double>::infinity(), success); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 268 ApplyTimingInputString(scope.GetIsolate(), "duration", "-Infinity", success); | 292 ApplyTimingInputString(scope.GetIsolate(), "duration", "-Infinity", success); |
| 269 EXPECT_FALSE(success); | 293 EXPECT_FALSE(success); |
| 270 | 294 |
| 271 ApplyTimingInputString(scope.GetIsolate(), "duration", "NaN", success); | 295 ApplyTimingInputString(scope.GetIsolate(), "duration", "NaN", success); |
| 272 EXPECT_FALSE(success); | 296 EXPECT_FALSE(success); |
| 273 | 297 |
| 274 ApplyTimingInputString(scope.GetIsolate(), "duration", "rubbish", success); | 298 ApplyTimingInputString(scope.GetIsolate(), "duration", "rubbish", success); |
| 275 EXPECT_FALSE(success); | 299 EXPECT_FALSE(success); |
| 276 } | 300 } |
| 277 | 301 |
| 278 TEST(AnimationTimingInputTest, TimingInputDirection) { | 302 TEST_F(AnimationTimingInputTest, TimingInputDirection) { |
| 279 V8TestingScope scope; | 303 V8TestingScope scope; |
| 280 Timing::PlaybackDirection default_playback_direction = | 304 Timing::PlaybackDirection default_playback_direction = |
| 281 Timing::PlaybackDirection::NORMAL; | 305 Timing::PlaybackDirection::NORMAL; |
| 282 bool ignored_success; | 306 bool ignored_success; |
| 283 | 307 |
| 284 EXPECT_EQ(Timing::PlaybackDirection::NORMAL, | 308 EXPECT_EQ(Timing::PlaybackDirection::NORMAL, |
| 285 ApplyTimingInputString(scope.GetIsolate(), "direction", "normal", | 309 ApplyTimingInputString(scope.GetIsolate(), "direction", "normal", |
| 286 ignored_success) | 310 ignored_success) |
| 287 .direction); | 311 .direction); |
| 288 EXPECT_EQ(Timing::PlaybackDirection::REVERSE, | 312 EXPECT_EQ(Timing::PlaybackDirection::REVERSE, |
| (...skipping 11 matching lines...) Expand all Loading... |
| 300 EXPECT_EQ(default_playback_direction, | 324 EXPECT_EQ(default_playback_direction, |
| 301 ApplyTimingInputString(scope.GetIsolate(), "direction", "rubbish", | 325 ApplyTimingInputString(scope.GetIsolate(), "direction", "rubbish", |
| 302 ignored_success) | 326 ignored_success) |
| 303 .direction); | 327 .direction); |
| 304 EXPECT_EQ(default_playback_direction, | 328 EXPECT_EQ(default_playback_direction, |
| 305 ApplyTimingInputNumber(scope.GetIsolate(), "direction", 2, | 329 ApplyTimingInputNumber(scope.GetIsolate(), "direction", 2, |
| 306 ignored_success) | 330 ignored_success) |
| 307 .direction); | 331 .direction); |
| 308 } | 332 } |
| 309 | 333 |
| 310 TEST(AnimationTimingInputTest, TimingInputTimingFunction) { | 334 TEST_F(AnimationTimingInputTest, TimingInputTimingFunction) { |
| 311 V8TestingScope scope; | 335 V8TestingScope scope; |
| 312 const RefPtr<TimingFunction> default_timing_function = | 336 const RefPtr<TimingFunction> default_timing_function = |
| 313 LinearTimingFunction::Shared(); | 337 LinearTimingFunction::Shared(); |
| 314 bool success; | 338 bool success; |
| 315 | 339 |
| 316 EXPECT_EQ( | 340 EXPECT_EQ( |
| 317 *CubicBezierTimingFunction::Preset( | 341 *CubicBezierTimingFunction::Preset( |
| 318 CubicBezierTimingFunction::EaseType::EASE), | 342 CubicBezierTimingFunction::EaseType::EASE), |
| 319 *ApplyTimingInputString(scope.GetIsolate(), "easing", "ease", success) | 343 *ApplyTimingInputString(scope.GetIsolate(), "easing", "ease", success) |
| 320 .timing_function); | 344 .timing_function); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 402 success); | 426 success); |
| 403 EXPECT_FALSE(success); | 427 EXPECT_FALSE(success); |
| 404 ApplyTimingInputString(scope.GetIsolate(), "easing", "rubbish", success); | 428 ApplyTimingInputString(scope.GetIsolate(), "easing", "rubbish", success); |
| 405 EXPECT_FALSE(success); | 429 EXPECT_FALSE(success); |
| 406 ApplyTimingInputNumber(scope.GetIsolate(), "easing", 2, success); | 430 ApplyTimingInputNumber(scope.GetIsolate(), "easing", 2, success); |
| 407 EXPECT_FALSE(success); | 431 EXPECT_FALSE(success); |
| 408 ApplyTimingInputString(scope.GetIsolate(), "easing", "initial", success); | 432 ApplyTimingInputString(scope.GetIsolate(), "easing", "initial", success); |
| 409 EXPECT_FALSE(success); | 433 EXPECT_FALSE(success); |
| 410 } | 434 } |
| 411 | 435 |
| 412 TEST(AnimationTimingInputTest, TimingInputEmpty) { | 436 TEST_F(AnimationTimingInputTest, TimingInputEmpty) { |
| 413 DummyExceptionStateForTesting exception_state; | 437 DummyExceptionStateForTesting exception_state; |
| 414 Timing control_timing; | 438 Timing control_timing; |
| 415 Timing updated_timing; | 439 Timing updated_timing; |
| 416 bool success = TimingInput::Convert(KeyframeEffectOptions(), updated_timing, | 440 bool success = TimingInput::Convert(KeyframeEffectOptions(), updated_timing, |
| 417 nullptr, exception_state); | 441 nullptr, exception_state); |
| 418 EXPECT_TRUE(success); | 442 EXPECT_TRUE(success); |
| 419 EXPECT_FALSE(exception_state.HadException()); | 443 EXPECT_FALSE(exception_state.HadException()); |
| 420 | 444 |
| 421 EXPECT_EQ(control_timing.start_delay, updated_timing.start_delay); | 445 EXPECT_EQ(control_timing.start_delay, updated_timing.start_delay); |
| 422 EXPECT_EQ(control_timing.fill_mode, updated_timing.fill_mode); | 446 EXPECT_EQ(control_timing.fill_mode, updated_timing.fill_mode); |
| 423 EXPECT_EQ(control_timing.iteration_start, updated_timing.iteration_start); | 447 EXPECT_EQ(control_timing.iteration_start, updated_timing.iteration_start); |
| 424 EXPECT_EQ(control_timing.iteration_count, updated_timing.iteration_count); | 448 EXPECT_EQ(control_timing.iteration_count, updated_timing.iteration_count); |
| 425 EXPECT_TRUE(std::isnan(updated_timing.iteration_duration)); | 449 EXPECT_TRUE(std::isnan(updated_timing.iteration_duration)); |
| 426 EXPECT_EQ(control_timing.playback_rate, updated_timing.playback_rate); | 450 EXPECT_EQ(control_timing.playback_rate, updated_timing.playback_rate); |
| 427 EXPECT_EQ(control_timing.direction, updated_timing.direction); | 451 EXPECT_EQ(control_timing.direction, updated_timing.direction); |
| 428 EXPECT_EQ(*control_timing.timing_function, *updated_timing.timing_function); | 452 EXPECT_EQ(*control_timing.timing_function, *updated_timing.timing_function); |
| 429 } | 453 } |
| 430 | 454 |
| 431 TEST(AnimationTimingInputTest, TimingInputEmptyKeyframeAnimationOptions) { | 455 TEST_F(AnimationTimingInputTest, TimingInputEmptyKeyframeAnimationOptions) { |
| 432 DummyExceptionStateForTesting exception_state; | 456 DummyExceptionStateForTesting exception_state; |
| 433 Timing control_timing; | 457 Timing control_timing; |
| 434 Timing updated_timing; | 458 Timing updated_timing; |
| 435 bool success = TimingInput::Convert(KeyframeAnimationOptions(), | 459 bool success = TimingInput::Convert(KeyframeAnimationOptions(), |
| 436 updated_timing, nullptr, exception_state); | 460 updated_timing, nullptr, exception_state); |
| 437 EXPECT_TRUE(success); | 461 EXPECT_TRUE(success); |
| 438 EXPECT_FALSE(exception_state.HadException()); | 462 EXPECT_FALSE(exception_state.HadException()); |
| 439 | 463 |
| 440 EXPECT_EQ(control_timing.start_delay, updated_timing.start_delay); | 464 EXPECT_EQ(control_timing.start_delay, updated_timing.start_delay); |
| 441 EXPECT_EQ(control_timing.fill_mode, updated_timing.fill_mode); | 465 EXPECT_EQ(control_timing.fill_mode, updated_timing.fill_mode); |
| 442 EXPECT_EQ(control_timing.iteration_start, updated_timing.iteration_start); | 466 EXPECT_EQ(control_timing.iteration_start, updated_timing.iteration_start); |
| 443 EXPECT_EQ(control_timing.iteration_count, updated_timing.iteration_count); | 467 EXPECT_EQ(control_timing.iteration_count, updated_timing.iteration_count); |
| 444 EXPECT_TRUE(std::isnan(updated_timing.iteration_duration)); | 468 EXPECT_TRUE(std::isnan(updated_timing.iteration_duration)); |
| 445 EXPECT_EQ(control_timing.playback_rate, updated_timing.playback_rate); | 469 EXPECT_EQ(control_timing.playback_rate, updated_timing.playback_rate); |
| 446 EXPECT_EQ(control_timing.direction, updated_timing.direction); | 470 EXPECT_EQ(control_timing.direction, updated_timing.direction); |
| 447 EXPECT_EQ(*control_timing.timing_function, *updated_timing.timing_function); | 471 EXPECT_EQ(*control_timing.timing_function, *updated_timing.timing_function); |
| 448 } | 472 } |
| 449 | 473 |
| 450 } // namespace blink | 474 } // namespace blink |
| OLD | NEW |