| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2013, Google Inc. All rights reserved. | 2 * Copyright (c) 2013, Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 EXPECT_CALL(*this, cancelWake()).InSequence(sequence); | 70 EXPECT_CALL(*this, cancelWake()).InSequence(sequence); |
| 71 EXPECT_CALL(*this, serviceOnNextFrame()).InSequence(sequence); | 71 EXPECT_CALL(*this, serviceOnNextFrame()).InSequence(sequence); |
| 72 } | 72 } |
| 73 | 73 |
| 74 void expectDelayedAction(double when) | 74 void expectDelayedAction(double when) |
| 75 { | 75 { |
| 76 ::testing::Sequence sequence; | 76 ::testing::Sequence sequence; |
| 77 EXPECT_CALL(*this, cancelWake()).InSequence(sequence); | 77 EXPECT_CALL(*this, cancelWake()).InSequence(sequence); |
| 78 EXPECT_CALL(*this, wakeAfter(when)).InSequence(sequence); | 78 EXPECT_CALL(*this, wakeAfter(when)).InSequence(sequence); |
| 79 } | 79 } |
| 80 |
| 81 void trace(Visitor* visitor) |
| 82 { |
| 83 } |
| 80 }; | 84 }; |
| 81 | 85 |
| 82 class AnimationDocumentTimelineTest : public ::testing::Test { | 86 class AnimationDocumentTimelineTest : public ::testing::Test { |
| 83 protected: | 87 protected: |
| 84 virtual void SetUp() | 88 virtual void SetUp() |
| 85 { | 89 { |
| 86 document = Document::create(); | 90 document = Document::create(); |
| 87 document->animationClock().resetTimeForTesting(); | 91 document->animationClock().resetTimeForTesting(); |
| 88 element = Element::create(nullQName() , document.get()); | 92 element = Element::create(nullQName() , document.get()); |
| 89 platformTiming = new MockPlatformTiming; | 93 platformTiming = new MockPlatformTiming; |
| 90 timeline = DocumentTimeline::create(document.get(), adoptPtr(platformTim
ing)); | 94 timeline = DocumentTimeline::create(document.get(), adoptPtrWillBeNoop(p
latformTiming)); |
| 91 timeline->setZeroTime(0); | 95 timeline->setZeroTime(0); |
| 92 ASSERT_EQ(0, timeline->currentTime()); | 96 ASSERT_EQ(0, timeline->currentTime()); |
| 93 } | 97 } |
| 94 | 98 |
| 95 virtual void TearDown() | 99 virtual void TearDown() |
| 96 { | 100 { |
| 97 timeline.release(); | 101 timeline.release(); |
| 98 document.release(); | 102 document.release(); |
| 99 element.release(); | 103 element.release(); |
| 100 } | 104 } |
| 101 | 105 |
| 102 void updateClockAndService(double time) | 106 void updateClockAndService(double time) |
| 103 { | 107 { |
| 104 document->animationClock().updateTime(time); | 108 document->animationClock().updateTime(time); |
| 105 timeline->serviceAnimations(AnimationPlayer::UpdateForAnimationFrame); | 109 timeline->serviceAnimations(AnimationPlayer::UpdateForAnimationFrame); |
| 106 } | 110 } |
| 107 | 111 |
| 108 RefPtr<Document> document; | 112 RefPtr<Document> document; |
| 109 RefPtr<Element> element; | 113 RefPtr<Element> element; |
| 110 RefPtr<DocumentTimeline> timeline; | 114 RefPtrWillBePersistent<DocumentTimeline> timeline; |
| 111 Timing timing; | 115 Timing timing; |
| 112 MockPlatformTiming* platformTiming; | 116 MockPlatformTiming* platformTiming; |
| 113 | 117 |
| 114 void wake() | 118 void wake() |
| 115 { | 119 { |
| 116 timeline->wake(); | 120 timeline->wake(); |
| 117 } | 121 } |
| 118 | 122 |
| 119 double minimumDelay() | 123 double minimumDelay() |
| 120 { | 124 { |
| 121 return DocumentTimeline::s_minimumDelay; | 125 return DocumentTimeline::s_minimumDelay; |
| 122 } | 126 } |
| 123 }; | 127 }; |
| 124 | 128 |
| 125 TEST_F(AnimationDocumentTimelineTest, HasStarted) | 129 TEST_F(AnimationDocumentTimelineTest, HasStarted) |
| 126 { | 130 { |
| 127 timeline = DocumentTimeline::create(document.get()); | 131 timeline = DocumentTimeline::create(document.get()); |
| 128 EXPECT_FALSE(timeline->hasStarted()); | 132 EXPECT_FALSE(timeline->hasStarted()); |
| 129 timeline->setZeroTime(0); | 133 timeline->setZeroTime(0); |
| 130 EXPECT_TRUE(timeline->hasStarted()); | 134 EXPECT_TRUE(timeline->hasStarted()); |
| 131 } | 135 } |
| 132 | 136 |
| 133 TEST_F(AnimationDocumentTimelineTest, EmptyKeyframeAnimation) | 137 TEST_F(AnimationDocumentTimelineTest, EmptyKeyframeAnimation) |
| 134 { | 138 { |
| 135 RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = AnimatableVa
lueKeyframeEffectModel::create(AnimatableValueKeyframeVector()); | 139 RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = AnimatableVa
lueKeyframeEffectModel::create(AnimatableValueKeyframeVector()); |
| 136 RefPtr<Animation> anim = Animation::create(element.get(), effect, timing); | 140 RefPtrWillBeRawPtr<Animation> anim = Animation::create(element.get(), effect
, timing); |
| 137 | 141 |
| 138 timeline->play(anim.get()); | 142 timeline->play(anim.get()); |
| 139 | 143 |
| 140 platformTiming->expectNoMoreActions(); | 144 platformTiming->expectNoMoreActions(); |
| 141 updateClockAndService(0); | 145 updateClockAndService(0); |
| 142 EXPECT_FLOAT_EQ(0, timeline->currentTime()); | 146 EXPECT_FLOAT_EQ(0, timeline->currentTime()); |
| 143 EXPECT_FALSE(anim->isInEffect()); | 147 EXPECT_FALSE(anim->isInEffect()); |
| 144 | 148 |
| 145 platformTiming->expectNoMoreActions(); | 149 platformTiming->expectNoMoreActions(); |
| 146 updateClockAndService(100); | 150 updateClockAndService(100); |
| 147 EXPECT_FLOAT_EQ(100, timeline->currentTime()); | 151 EXPECT_FLOAT_EQ(100, timeline->currentTime()); |
| 148 } | 152 } |
| 149 | 153 |
| 150 TEST_F(AnimationDocumentTimelineTest, EmptyForwardsKeyframeAnimation) | 154 TEST_F(AnimationDocumentTimelineTest, EmptyForwardsKeyframeAnimation) |
| 151 { | 155 { |
| 152 RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = AnimatableVa
lueKeyframeEffectModel::create(AnimatableValueKeyframeVector()); | 156 RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = AnimatableVa
lueKeyframeEffectModel::create(AnimatableValueKeyframeVector()); |
| 153 timing.fillMode = Timing::FillModeForwards; | 157 timing.fillMode = Timing::FillModeForwards; |
| 154 RefPtr<Animation> anim = Animation::create(element.get(), effect, timing); | 158 RefPtrWillBeRawPtr<Animation> anim = Animation::create(element.get(), effect
, timing); |
| 155 | 159 |
| 156 timeline->play(anim.get()); | 160 timeline->play(anim.get()); |
| 157 | 161 |
| 158 platformTiming->expectNoMoreActions(); | 162 platformTiming->expectNoMoreActions(); |
| 159 updateClockAndService(0); | 163 updateClockAndService(0); |
| 160 EXPECT_FLOAT_EQ(0, timeline->currentTime()); | 164 EXPECT_FLOAT_EQ(0, timeline->currentTime()); |
| 161 EXPECT_TRUE(anim->isInEffect()); | 165 EXPECT_TRUE(anim->isInEffect()); |
| 162 | 166 |
| 163 platformTiming->expectNoMoreActions(); | 167 platformTiming->expectNoMoreActions(); |
| 164 updateClockAndService(100); | 168 updateClockAndService(100); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 185 EXPECT_FALSE(isNull); | 189 EXPECT_FALSE(isNull); |
| 186 | 190 |
| 187 document->animationClock().updateTime(400); | 191 document->animationClock().updateTime(400); |
| 188 EXPECT_EQ(100, timeline->currentTime()); | 192 EXPECT_EQ(100, timeline->currentTime()); |
| 189 } | 193 } |
| 190 | 194 |
| 191 TEST_F(AnimationDocumentTimelineTest, PauseForTesting) | 195 TEST_F(AnimationDocumentTimelineTest, PauseForTesting) |
| 192 { | 196 { |
| 193 float seekTime = 1; | 197 float seekTime = 1; |
| 194 timing.fillMode = Timing::FillModeForwards; | 198 timing.fillMode = Timing::FillModeForwards; |
| 195 RefPtr<Animation> anim1 = Animation::create(element.get(), AnimatableValueKe
yframeEffectModel::create(AnimatableValueKeyframeVector()), timing); | 199 RefPtrWillBeRawPtr<Animation> anim1 = Animation::create(element.get(), Anima
tableValueKeyframeEffectModel::create(AnimatableValueKeyframeVector()), timing); |
| 196 RefPtr<Animation> anim2 = Animation::create(element.get(), AnimatableValueK
eyframeEffectModel::create(AnimatableValueKeyframeVector()), timing); | 200 RefPtrWillBeRawPtr<Animation> anim2 = Animation::create(element.get(), Anim
atableValueKeyframeEffectModel::create(AnimatableValueKeyframeVector()), timing)
; |
| 197 AnimationPlayer* player1 = timeline->play(anim1.get()); | 201 AnimationPlayer* player1 = timeline->play(anim1.get()); |
| 198 AnimationPlayer* player2 = timeline->play(anim2.get()); | 202 AnimationPlayer* player2 = timeline->play(anim2.get()); |
| 199 timeline->pauseAnimationsForTesting(seekTime); | 203 timeline->pauseAnimationsForTesting(seekTime); |
| 200 | 204 |
| 201 EXPECT_FLOAT_EQ(seekTime, player1->currentTime()); | 205 EXPECT_FLOAT_EQ(seekTime, player1->currentTime()); |
| 202 EXPECT_FLOAT_EQ(seekTime, player2->currentTime()); | 206 EXPECT_FLOAT_EQ(seekTime, player2->currentTime()); |
| 203 } | 207 } |
| 204 | 208 |
| 205 TEST_F(AnimationDocumentTimelineTest, NumberOfActiveAnimations) | 209 TEST_F(AnimationDocumentTimelineTest, NumberOfActiveAnimations) |
| 206 { | 210 { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 218 timingBackwardFillDelay.startDelay = 1; | 222 timingBackwardFillDelay.startDelay = 1; |
| 219 | 223 |
| 220 Timing timingNoFillDelay; | 224 Timing timingNoFillDelay; |
| 221 timingNoFillDelay.iterationDuration = 1; | 225 timingNoFillDelay.iterationDuration = 1; |
| 222 timingNoFillDelay.fillMode = Timing::FillModeNone; | 226 timingNoFillDelay.fillMode = Timing::FillModeNone; |
| 223 timingNoFillDelay.startDelay = 1; | 227 timingNoFillDelay.startDelay = 1; |
| 224 | 228 |
| 225 Timing timingAutoFill; | 229 Timing timingAutoFill; |
| 226 timingAutoFill.iterationDuration = 2; | 230 timingAutoFill.iterationDuration = 2; |
| 227 | 231 |
| 228 RefPtr<Animation> anim1 = Animation::create(element.get(), AnimatableValueKe
yframeEffectModel::create(AnimatableValueKeyframeVector()), timingForwardFill); | 232 RefPtrWillBeRawPtr<Animation> anim1 = Animation::create(element.get(), Anima
tableValueKeyframeEffectModel::create(AnimatableValueKeyframeVector()), timingFo
rwardFill); |
| 229 RefPtr<Animation> anim2 = Animation::create(element.get(), AnimatableValueKe
yframeEffectModel::create(AnimatableValueKeyframeVector()), timingNoFill); | 233 RefPtrWillBeRawPtr<Animation> anim2 = Animation::create(element.get(), Anima
tableValueKeyframeEffectModel::create(AnimatableValueKeyframeVector()), timingNo
Fill); |
| 230 RefPtr<Animation> anim3 = Animation::create(element.get(), AnimatableValueKe
yframeEffectModel::create(AnimatableValueKeyframeVector()), timingBackwardFillDe
lay); | 234 RefPtrWillBeRawPtr<Animation> anim3 = Animation::create(element.get(), Anima
tableValueKeyframeEffectModel::create(AnimatableValueKeyframeVector()), timingBa
ckwardFillDelay); |
| 231 RefPtr<Animation> anim4 = Animation::create(element.get(), AnimatableValueKe
yframeEffectModel::create(AnimatableValueKeyframeVector()), timingNoFillDelay); | 235 RefPtrWillBeRawPtr<Animation> anim4 = Animation::create(element.get(), Anima
tableValueKeyframeEffectModel::create(AnimatableValueKeyframeVector()), timingNo
FillDelay); |
| 232 RefPtr<Animation> anim5 = Animation::create(element.get(), AnimatableValueKe
yframeEffectModel::create(AnimatableValueKeyframeVector()), timingAutoFill); | 236 RefPtrWillBeRawPtr<Animation> anim5 = Animation::create(element.get(), Anima
tableValueKeyframeEffectModel::create(AnimatableValueKeyframeVector()), timingAu
toFill); |
| 233 | 237 |
| 234 timeline->play(anim1.get()); | 238 timeline->play(anim1.get()); |
| 235 timeline->play(anim2.get()); | 239 timeline->play(anim2.get()); |
| 236 timeline->play(anim3.get()); | 240 timeline->play(anim3.get()); |
| 237 timeline->play(anim4.get()); | 241 timeline->play(anim4.get()); |
| 238 timeline->play(anim5.get()); | 242 timeline->play(anim5.get()); |
| 239 | 243 |
| 240 platformTiming->expectNextFrameAction(); | 244 platformTiming->expectNextFrameAction(); |
| 241 updateClockAndService(0); | 245 updateClockAndService(0); |
| 242 EXPECT_EQ(5U, timeline->numberOfActiveAnimationsForTesting()); | 246 EXPECT_EQ(5U, timeline->numberOfActiveAnimationsForTesting()); |
| 243 platformTiming->expectNextFrameAction(); | 247 platformTiming->expectNextFrameAction(); |
| 244 updateClockAndService(0.5); | 248 updateClockAndService(0.5); |
| 245 EXPECT_EQ(5U, timeline->numberOfActiveAnimationsForTesting()); | 249 EXPECT_EQ(5U, timeline->numberOfActiveAnimationsForTesting()); |
| 246 platformTiming->expectNextFrameAction(); | 250 platformTiming->expectNextFrameAction(); |
| 247 updateClockAndService(1.5); | 251 updateClockAndService(1.5); |
| 248 EXPECT_EQ(5U, timeline->numberOfActiveAnimationsForTesting()); | 252 EXPECT_EQ(5U, timeline->numberOfActiveAnimationsForTesting()); |
| 249 platformTiming->expectNoMoreActions(); | 253 platformTiming->expectNoMoreActions(); |
| 250 updateClockAndService(3); | 254 updateClockAndService(3); |
| 251 EXPECT_EQ(0U, timeline->numberOfActiveAnimationsForTesting()); | 255 EXPECT_EQ(0U, timeline->numberOfActiveAnimationsForTesting()); |
| 252 } | 256 } |
| 253 | 257 |
| 254 TEST_F(AnimationDocumentTimelineTest, DelayBeforeAnimationStart) | 258 TEST_F(AnimationDocumentTimelineTest, DelayBeforeAnimationStart) |
| 255 { | 259 { |
| 256 timing.iterationDuration = 2; | 260 timing.iterationDuration = 2; |
| 257 timing.startDelay = 5; | 261 timing.startDelay = 5; |
| 258 | 262 |
| 259 RefPtr<Animation> anim = Animation::create(element.get(), nullptr, timing); | 263 RefPtrWillBeRawPtr<Animation> anim = Animation::create(element.get(), nullpt
r, timing); |
| 260 | 264 |
| 261 timeline->play(anim.get()); | 265 timeline->play(anim.get()); |
| 262 | 266 |
| 263 // TODO: Put the player startTime in the future when we add the capability t
o change player startTime | 267 // TODO: Put the player startTime in the future when we add the capability t
o change player startTime |
| 264 platformTiming->expectDelayedAction(timing.startDelay - minimumDelay()); | 268 platformTiming->expectDelayedAction(timing.startDelay - minimumDelay()); |
| 265 updateClockAndService(0); | 269 updateClockAndService(0); |
| 266 | 270 |
| 267 platformTiming->expectDelayedAction(timing.startDelay - minimumDelay() - 1.5
); | 271 platformTiming->expectDelayedAction(timing.startDelay - minimumDelay() - 1.5
); |
| 268 updateClockAndService(1.5); | 272 updateClockAndService(1.5); |
| 269 | 273 |
| 270 EXPECT_CALL(*platformTiming, serviceOnNextFrame()); | 274 EXPECT_CALL(*platformTiming, serviceOnNextFrame()); |
| 271 wake(); | 275 wake(); |
| 272 | 276 |
| 273 platformTiming->expectNextFrameAction(); | 277 platformTiming->expectNextFrameAction(); |
| 274 updateClockAndService(4.98); | 278 updateClockAndService(4.98); |
| 275 } | 279 } |
| 276 | 280 |
| 277 TEST_F(AnimationDocumentTimelineTest, PlayAfterDocumentDeref) | 281 TEST_F(AnimationDocumentTimelineTest, PlayAfterDocumentDeref) |
| 278 { | 282 { |
| 279 timing.iterationDuration = 2; | 283 timing.iterationDuration = 2; |
| 280 timing.startDelay = 5; | 284 timing.startDelay = 5; |
| 281 | 285 |
| 282 timeline = &document->timeline(); | 286 timeline = &document->timeline(); |
| 283 element = nullptr; | 287 element = nullptr; |
| 284 document = nullptr; | 288 document = nullptr; |
| 285 | 289 |
| 286 RefPtr<Animation> anim = Animation::create(nullptr, nullptr, timing); | 290 RefPtrWillBeRawPtr<Animation> anim = Animation::create(nullptr, nullptr, tim
ing); |
| 287 // Test passes if this does not crash. | 291 // Test passes if this does not crash. |
| 288 timeline->play(anim.get()); | 292 timeline->play(anim.get()); |
| 289 } | 293 } |
| 290 | 294 |
| 291 TEST_F(AnimationDocumentTimelineTest, UseAnimationPlayerAfterTimelineDeref) | 295 TEST_F(AnimationDocumentTimelineTest, UseAnimationPlayerAfterTimelineDeref) |
| 292 { | 296 { |
| 293 RefPtr<AnimationPlayer> player = timeline->createAnimationPlayer(0); | 297 RefPtrWillBeRawPtr<AnimationPlayer> player = timeline->createAnimationPlayer
(0); |
| 294 timeline.clear(); | 298 timeline.clear(); |
| 295 // Test passes if this does not crash. | 299 // Test passes if this does not crash. |
| 296 player->setStartTime(0); | 300 player->setStartTime(0); |
| 297 } | 301 } |
| 298 | 302 |
| 299 } | 303 } |
| OLD | NEW |