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->currentTimeInternal()); | 96 ASSERT_EQ(0, timeline->currentTimeInternal()); |
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(TimingUpdateForAnimationFrame); | 109 timeline->serviceAnimations(TimingUpdateForAnimationFrame); |
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->currentTimeInternal()); | 146 EXPECT_FLOAT_EQ(0, timeline->currentTimeInternal()); |
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->currentTimeInternal()); | 151 EXPECT_FLOAT_EQ(100, timeline->currentTimeInternal()); |
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->currentTimeInternal()); | 164 EXPECT_FLOAT_EQ(0, timeline->currentTimeInternal()); |
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->currentTimeInternal()); | 192 EXPECT_EQ(100, timeline->currentTimeInternal()); |
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->currentTimeInternal()); | 205 EXPECT_FLOAT_EQ(seekTime, player1->currentTimeInternal()); |
202 EXPECT_FLOAT_EQ(seekTime, player2->currentTimeInternal()); | 206 EXPECT_FLOAT_EQ(seekTime, player2->currentTimeInternal()); |
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(0, nullptr, timing); | 290 RefPtrWillBeRawPtr<Animation> anim = Animation::create(0, nullptr, timing); |
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 |