Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(105)

Side by Side Diff: bower_components/web-animations-js/test/testcases/test-player.html

Issue 786953007: npm_modules: Fork bower_components into Polymer 0.4.0 and 0.5.0 versions (Closed) Base URL: https://chromium.googlesource.com/infra/third_party/npm_modules.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 <!--
2 Copyright 2013 Google Inc. All Rights Reserved.
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15
16 Written by Steph McArthur
17 -->
18
19 <!DOCTYPE html><meta charset="UTF-8">
20 <div id="anim"></div>
21
22 <script src="../bootstrap.js"></script>
23 <script>
24 var animation = new Animation(anim, {left: "100px"}, 100);
25 var dt = document.timeline;
26
27 // Test AnimationPlayer.timeline.
28 var player1 = dt.play(animation);
29 test(function() {assert_equals(player1.timeline, document.timeline)},
30 "AnimationPlayer.timeline is document timeline");
31
32 // Test that TimedItem.player and AnimationPlayer.source are consistent.
33 test(function() {assert_equals(player1.source, animation)},
34 "AnimationPlayer.source should be the Animation");
35 test(function() {assert_equals(animation.player, player1)},
36 "TimedItem.player should be the AnimationPlayer");
37
38 // Test that play() always returns a new AnimationPlayer.
39 var player2 = dt.play(animation);
40 test(function() {assert_not_equals(player2, player1)},
41 "Repeated calls to play() should create a new AnimationPlayer");
42 test(function() {assert_equals(animation.player, player2)},
43 "Repeated play(): TimedItem.player should be the AnimationPlayer");
44 test(function() {assert_equals(player2.source, animation)},
45 "Repeated play(): AnimationPlayer.source should be the Animation");
46 test(function() {assert_equals(player2.startTime, player1.startTime)},
47 "Repeated play(): Players should have same start time");
48
49 // Test explicit setting of AnimationPlayer.source.
50 player1.source = animation;
51 test(function() {assert_equals(player2.source, null)},
52 "Set AnimationPlayer.source: Old source should be null");
53 test(function() {assert_equals(player1.source, animation)},
54 "Set AnimationPlayer.source: New source should be the Animation");
55 test(function() {assert_equals(animation.player, player1)},
56 "Set AnimationPlayer.source: TimedItem.player should be the AnimationPlayer ");
57
58 // Test that TimedItem.player gives null on a detached tree.
59 var animation2 =
60 new Animation(document.getElementById("anim"), {left: "100px"});
61 var animationGroup = new AnimationGroup([animation2]);
62 test(function() {assert_equals(animationGroup.player, null)},
63 "TimedItem.player should be null for root");
64 test(function() {assert_equals(animation2.player, null)},
65 "TimedItem.player should be null for leaf");
66
67 // Test that TimedItem.player remotes to the root of the tree.
68 var player3 = dt.play(animationGroup);
69 test(function() {assert_equals(animation2.player, player3)},
70 "TimedItem.player should remote");
71
72 // Test that calling play() on a TimedItem with a parent results in
73 // reparenting.
74 var player4 = dt.play(animation2);
75 test(function() {assert_equals(animation2.parent, null)},
76 "Animation should be reparented");
77 test(function() {assert_equals(animationGroup.children.length, 0)},
78 "Animation parent should be updated, leaving animationGroup.children.length = 0");
79 test(function() {assert_equals(player4.source, animation2)},
80 "AnimationPlayer should use reparented animation");
81
82 // Test that setting a parent on a TimedItem with an AnimationPlayer causes the
83 // player to be disconnected.
84 animationGroup.append(animation2);
85 test(function() {assert_equals(animationGroup.player, player3)},
86 "TimedItem.player should be updated for root");
87 test(function() {assert_equals(animation2.player, player3)},
88 "TimedItem.player should be updated for leaf");
89 test(function() {assert_equals(player4.source, null)},
90 "AnimationPlayer.source should be updated");
91 test(function() {assert_equals(animation2.parent, animationGroup)},
92 "Animation.parent should be updated");
93 test(function() {assert_equals(animationGroup.children.length, 1)},
94 "Animation parent should be updated, leaving animationGroup.children.lengt h = 1");
95 test(function() {assert_equals(animationGroup.children[0], animation2)},
96 "Animation parent should be updated");
97
98 // Test that currentTime is zero before timeline starts.
99 test(function() {assert_equals(document.timeline.play(animation).currentTime, 0 )},
100 "currentTime should be zero before Timeline starts");
101
102 // Test that startTime is zero before timeline starts.
103 test(function() {assert_equals(document.timeline.play(animation).startTime, 0)} ,
104 "startTime should be zero before Timeline starts");
105
106 // Test that setting currentTime has an effect before the timeline starts.
107 var player5 = dt.play(animation);
108 player5.currentTime = 42;
109 test(function() {assert_equals(player5.currentTime, 42)},
110 "player5 can be seeked before timeline starts");
111 timing_test(function() {
112 at(0.1, function() {
113 assert_equals(player5.currentTime, 42.1);
114 });
115 }, "player5's updates to currentTime should persist after Timeline starts");
116
117 // Test that setting startTime has an effect before the timeline starts.
118 var player6 = dt.play(animation.clone());
119 player6.startTime = 42;
120 test(function() {assert_equals(player6.currentTime, -42)},
121 "player6's currentTime should always be zero before Timeline starts");
122
123 // Test that an AnimationPlayer's TimedItem gets a null inherited time until the
124 // timeline starts.
125 var animation1 = new Animation(document.getElementById("anim"), {left: "100px"}) ;
126 dt.play(animation1);
127 test(function() {assert_equals(animation1.localTime, null)},
128 "TimedItem's inherited time, and thus " +
129 "localTime should be null before Timeline starts");
130 timing_test(function() {
131 at(0.0, function() {assert_not_equals(animation1.localTime, null)});
132 }, "TimedItem's inherited time " +
133 "and thus localTime should not be null after Timeline starts");
134
135 // Test that TimedItem is updated immediately on calling Timeline.play() after
136 // the timeline starts.
137 var animation4 = new Animation(
138 document.getElementById("anim"), {left: "100px"});
139 test(function() {assert_equals(animation4.localTime, null)},
140 "localTime should be null before playing");
141 timing_test(function() {
142 at(0.0, function() {
143 document.timeline.play(animation4);
144 assert_equals(animation4.localTime, 0)
145 });
146 }, "localTime should be set by playing");
147
148 // Test that updates to currentTime take immediate effect.
149 timing_test(function() {
150 at(0.0, function() {
151 var animation5 = new Animation(
152 document.getElementById("anim"), {left: "100px"}, 100);
153 document.timeline.play(animation5).currentTime = 42;
154 assert_equals(animation5.localTime, 42);
155 });
156 }, "Updates to AnimationPlayer.currentTime should take immediate effect");
157
158 // Test that updates to source take immediate effect.
159 timing_test(function() {
160 at(0.0, function() {
161 var player = document.timeline.play(new Animation(
162 document.getElementById("anim"), {left: "100px"}));
163 var animation7 = new Animation(
164 document.getElementById("anim"), {left: "100px"});
165 player.source = animation7;
166 assert_equals(animation7.localTime, 0);
167 });
168 }, "Updates to AnimationPlayer.source should take immediate effect");
169
170 function createPlayer(duration) {
171 return document.timeline.play(new Animation(null, null, duration));
172 }
173
174 // Tests the initial values of the AnimationPlayer API.
175 timing_test(function() {
176 at(0, function() {
177 var anim = new Animation(null, null, 3);
178 assert_equals(anim.player, null, "player should be null initially");
179
180 // Check state after playing
181 document.timeline.play(anim);
182 assert_not_equals(anim.player, null, "player should be not be null when pl aying");
183 assert_equals(anim.player.source, anim, "Initial source content");
184 assert_equals(anim.player.timeline, document.timeline, "Initial document t imeline");
185 assert_equals(anim.player.startTime, document.timeline.currentTime, "Initi al start time");
186 assert_equals(anim.player.currentTime, 0, "Initial current time");
187 assert_equals(anim.player.timeLag, 0, "Initial time lag");
188 assert_equals(anim.player.playbackRate, 1, "Initial playback rate");
189 assert_false(anim.player.paused, "Initial paused state");
190 assert_false(anim.player.finished, "Initial finished state");
191 });
192 }, "Initial state");
193
194 // Test paused states after pausing.
195 test(function() {
196 var player = createPlayer(3);
197
198 // Pause
199 player.pause();
200 assert_true(player.paused, "Paused state after pausing");
201 assert_false(player.finished, "Finished state after pausing");
202
203 // Unpause
204 player.play();
205 assert_false(player.paused, "Paused state after unpausing");
206 assert_false(player.finished, "Finished state after unpausing");
207 }, "Pause");
208
209 // Test seeking behind startTime for a forwards player.
210 timing_test(function() {
211 var player = createPlayer(3);
212
213 // Seek before start
214 player.currentTime = -0.1;
215 assert_equals(player.currentTime, -0.1, "Current time after seeking before s tart");
216 assert_false(player.paused, "Paused state after seeking before start");
217 assert_false(player.finished, "Finished state after seeking before start");
218
219 // Check player does progress
220 at(0.2, function() {
221 assert_equals(player.currentTime, 0.1, "Current time should progress");
222 });
223 }, "Seek behind content (forwards)");
224
225 // Test players do not get bounded after updating startTime such that they are b efore the start time.
226 timing_test(function() {
227 var player = createPlayer(3);
228
229 // Set start time in the future
230 player.startTime = 0.1;
231
232 // Check state of player
233 assert_equals(player.currentTime, -0.1, "Current time while waiting to start ");
234 assert_false(player.paused, "Paused state while waiting to start");
235 assert_false(player.finished, "Finished state while waiting to start");
236
237 // Check player starts automatically
238 at(0.2, function() {
239 assert_equals(player.currentTime, 0.1, "Current time should progress");
240 assert_false(player.paused, "Paused state after starting");
241 assert_false(player.finished, "Finished state after starting");
242 });
243 }, "No bounding at start");
244
245 // Test players get bounded when they finish their source content.
246 timing_test(function() {
247 var player = createPlayer(3);
248
249 // Seek to just before end
250 player.currentTime = 2.9;
251
252 // Check state of player
253 assert_equals(player.currentTime, 2.9, "Current time just before end");
254 assert_false(player.paused, "Paused state just before end");
255 assert_false(player.finished, "Finished state just before end");
256
257 // Check player after finishing
258 at(0.2, function() {
259 assert_equals(player.currentTime, 3.0, "Current time when bounded progress ");
260 assert_false(player.paused, "Paused state after ending");
261 assert_true(player.finished, "Finished state after ending");
262 });
263 }, "Limiting at end (seek with current time)");
264
265 // Test players get bounded when they finish their source content after altering start time.
266 timing_test(function() {
267 var player = createPlayer(3);
268
269 // Seek to just before end using the start time
270 player.startTime -= 2.9;
271
272 // Check state of player
273 assert_equals(player.currentTime, 2.9, "Current time just before end");
274 assert_false(player.paused, "Paused state just before end");
275 assert_false(player.finished, "Finished state just before end");
276
277 // Check player after finishing
278 at(0.2, function() {
279 assert_equals(player.currentTime, 3.0, "Current time when bounded progress ");
280 assert_false(player.paused, "Paused state after ending");
281 assert_true(player.finished, "Finished state after ending");
282 });
283 }, "Limiting at end (seek with start time)");
284
285 // Test reversing a player prior to starting doesn't snap the current time to th e beginning.
286 timing_test(function() {
287 var player = createPlayer(3);
288
289 // Seek before start
290 player.currentTime = -0.1;
291
292 // Check state
293 assert_equals(player.currentTime, -0.1, "Current time before reversing");
294 assert_false(player.finished, "Finished state before reversing");
295
296 // Reverse
297 player.reverse();
298 assert_equals(player.currentTime, -0.1, "Current time after reversing");
299 assert_true(player.finished, "Finished state after reversing");
300 assert_equals(player.playbackRate, -1, "Playback rate after reversing");
301
302 // Check player after some time
303 at(0.2, function() {
304 assert_equals(player.currentTime, -0.1, "Current time later");
305 assert_true(player.finished, "Finished state later");
306 });
307 }, "reverse() before start");
308
309 // Test reversing a player at the start causes the player to become bounded.
310 timing_test(function() {
311 var player = createPlayer(3);
312
313 // Reverse
314 player.reverse();
315 assert_equals(player.currentTime, 0, "Current time after reversing");
316 assert_true(player.finished, "Finished state after reversing");
317 assert_equals(player.playbackRate, -1, "Playback rate after reversing");
318
319 // Check player after some time
320 at(0.2, function() {
321 assert_equals(player.currentTime, 0, "Current time later");
322 assert_true(player.finished, "Finished state later");
323 });
324 }, "reverse() at start");
325
326 // Test reversing a player halfway through an animation.
327 timing_test(function() {
328 var player = createPlayer(3);
329
330 // Seek midway
331 player.currentTime = 1.5;
332
333 // Reverse
334 player.reverse();
335 assert_equals(player.currentTime, 1.5, "Current time after reversing");
336 assert_false(player.finished, "Finished state after reversing");
337 assert_equals(player.playbackRate, -1, "Playback rate after reversing");
338
339 // Check player after some time
340 at(0.2, function() {
341 assert_equals(player.currentTime, 1.3, "Current time when reversing");
342 assert_false(player.finished, "Finished state later");
343 });
344 }, "reverse() while playing");
345
346 // Test reversing a player that has ended starts playing backwards.
347 timing_test(function() {
348 var player = createPlayer(3);
349
350 // Seek to just before the end
351 player.currentTime = 2.9;
352
353 // Wait to finish
354 at(0.2, function() {
355 assert_equals(player.currentTime, 3.0, "Current time when finished");
356 assert_true(player.finished, "Finished state after finished");
357
358 // Reverse
359 player.reverse();
360 assert_equals(player.currentTime, 3.0, "Current time after reversing");
361 assert_false(player.finished, "Finished state after reversing");
362 assert_equals(player.playbackRate, -1, "Playback rate after reversing");
363
364 // Check we actually reverse
365 at(0.2, function() {
366 assert_equals(player.currentTime, 2.8, "Current time after beginning rev erse");
367 assert_false(player.finished, "Finished state after reversing");
368 });
369 });
370 }, "reverse() when finished");
371
372 // Test reversing a player seeked past the end will snap back to the end.
373 timing_test(function() {
374 var player = createPlayer(3);
375
376 // Seek to past the end
377 player.currentTime = 4.0
378
379 player.reverse();
380 assert_equals(player.currentTime, 3.0, "Current time after reversing");
381 assert_false(player.finished, "Finished state after reversing");
382 assert_equals(player.playbackRate, -1, "Playback rate after reversing");
383
384 // Check we actually reverse
385 at(0.2, function() {
386 assert_equals(player.currentTime, 2.8, "Current time after beginning rever se");
387 assert_false(player.finished, "Finished state after reversing");
388 });
389 }, "reverse() when seeked past end");
390
391 // Test player current time after adjusting start time.
392 test(function() {
393 var player = createPlayer(3);
394
395 player.startTime = 1;
396
397 assert_equals(player.currentTime, -1, "currentTime while waiting to start");
398 assert_false(player.finished, "Finished state while waiting to start");
399
400 // Then put it in range
401 player.startTime -= 2;
402 assert_equals(player.currentTime, 1, "currentTime after updating start time" );
403 assert_false(player.finished, "Finished state while after updating start tim e");
404 }, "Adjust start time (1)");
405
406 // Test player current time after adjusting start time and playing.
407 timing_test(function() {
408 var player = createPlayer(3);
409
410 player.startTime = 1;
411
412 assert_equals(player.currentTime, -1, "currentTime while waiting to start");
413 assert_false(player.finished, "Finished state while waiting to start");
414
415 // Then adjust start time
416 player.startTime -= 0.75;
417
418 // Check player is still waiting
419 assert_equals(player.currentTime, -0.25, "currentTime while waiting to start ");
420 assert_false(player.finished, "Finished state while still waiting to start") ;
421
422 // Verify the time *did* update though
423 at(0.5, function() {
424 assert_equals(player.currentTime, 0.25, "currentTime after starting to pla y");
425 assert_false(player.finished, "Finished state after starting to play");
426 });
427 }, "Adjust start time (2)");
428
429 // Test player bounding by changing start time.
430 test(function() {
431 var player = createPlayer(3);
432
433 // Put it past the end
434 player.startTime = -4;
435 assert_equals(player.currentTime, 3, "currentTime after end");
436 assert_true(player.finished, "Finished state after end");
437 }, "Adjust start time (3)");
438
439 // Test bounding and unbounding a player by modifying start time.
440 test(function() {
441 var player = createPlayer(3);
442
443 // Put player in limited stage
444 player.startTime = -4;
445
446 assert_equals(player.currentTime, 3, "currentTime state while limited");
447 assert_true(player.finished, "Finished state while limited");
448
449 // Then put it in range
450 player.startTime += 2;
451 assert_equals(player.currentTime, 2, "currentTime after updating start time" );
452 assert_false(player.finished, "Finished state while after updating start tim e");
453 }, "Adjust start time (4)");
454
455 // Test seeking past end of player.
456 timing_test(function() {
457 var player = createPlayer(3);
458 player.currentTime = 4;
459 assert_equals(player.currentTime, 4, "currentTime before waiting");
460 at(0.2, function() {
461 assert_equals(player.currentTime, 4, "currentTime after waiting");
462 });
463 }, "Seeking past player content end and waiting");
464
465 // Test seeking before start of reversed player.
466 timing_test(function() {
467 var player = createPlayer(3);
468 player.playbackRate = -1;
469 player.currentTime = -1;
470 assert_equals(player.currentTime, -1, "currentTime before waiting");
471 at(0.2, function() {
472 assert_equals(player.currentTime, -1, "currentTime after waiting");
473 });
474 }, "Seeking before reversed player content start and waiting");
475
476 // Test reversing the playback rate of a bounded player.
477 timing_test(function() {
478 var player = createPlayer(3);
479
480 // Set up player to start in 0.1s
481 player.startTime = 0.1;
482
483 // Check state
484 assert_equals(player.currentTime, -0.1, "currentTime after while waiting to start");
485 assert_false(player.finished, "Finished state while waiting to start");
486
487 // Reverse playbackRate
488 player.playbackRate = -1;
489
490 // We should maintain the same current time
491 assert_equals(player.currentTime, -0.1, "currentTime after updating playback Rate");
492 assert_true(player.finished, "Finished state after updating playbackRate");
493
494 // If we wait a while we should be stuck at the end
495 at(0.2, function() {
496 assert_equals(player.currentTime, -0.1, "currentTime after waiting");
497 assert_true(player.finished, "Finished state after waiting");
498
499 // Call play and we should start from the end
500 player.play();
501 assert_equals(player.currentTime, 3, "currentTime after play()");
502 assert_false(player.finished, "Finished state after play()");
503 });
504 }, "Reversing playbackRate before start");
505
506 // Test normal current time progression of a player after being bounded and unbo unded.
507 timing_test(function() {
508 // Set up player
509 var player = createPlayer(3);
510
511 // Seek to bounded time
512 player.currentTime = 4;
513
514 // Check state
515 assert_equals(player.currentTime, 4, "currentTime while bounded");
516 assert_true(player.finished, "Finished state while bounded");
517
518 // Seek to unbounded time
519 player.currentTime = 2;
520 assert_equals(player.currentTime, 2, "currentTime while unbounded");
521 assert_false(player.finished, "Finished state while unbounded");
522
523 // Check it actually is playing
524 at(0.2, function() {
525 assert_equals(player.currentTime, 2.2, "Current time after playing unbound ed");
526 });
527 }, "Seeking from end to playing");
528
529 // Test finishing and replaying a player in reverse.
530 timing_test(function() {
531 // Set up player
532 var player = createPlayer(3);
533
534 // Seek to middle of interval and reverse
535 player.currentTime = 2;
536 player.reverse();
537
538 // Check state
539 assert_equals(player.currentTime, 2, "currentTime after reversing");
540 assert_false(player.finished, "Finished state after reversing");
541 assert_equals(player.playbackRate, -1, "Playback rate after reversing");
542 player.finish();
543 assert_equals(player.currentTime, 0, "currentTime after finishing");
544 assert_true(player.finished, "Finished state after finishing");
545
546 // Then play again
547 player.play();
548 assert_equals(player.currentTime, 3, "currentTime after playing again");
549 assert_false(player.finished, "Finished state after playing again");
550
551 // Check if actually progresses
552 at(0.2, function() {
553 assert_equals(player.currentTime, 2.8, "Current time after playing for a w hile");
554 });
555 }, "play() on a finished reversed player");
556
557 // Test player.play() seeking to start when behind the source content.
558 timing_test(function() {
559 // Set up player to start in 2s
560 var player = createPlayer(3);
561 player.startTime = 2;
562
563 // Check it is waiting to start
564 assert_equals(player.currentTime, -2, "currentTime while waiting");
565 assert_false(player.finished, "Finished state while waiting");
566
567 // Call play()
568 player.play();
569 assert_equals(player.currentTime, 0, "currentTime after calling play()");
570 assert_false(player.finished, "Finished state after calling play()");
571
572 // Check it really is playing
573 at(0.5, function() {
574 assert_equals(player.currentTime, 0.5, "Current time after playing for a w hile");
575 });
576 }, "play() on player waiting to start kick-starts it");
577
578 // Test seeking a player to the start of its animation.
579 timing_test(function() {
580 // Set up player to start in 2s
581 var player = createPlayer(3);
582 player.startTime = 2;
583
584 // Check it is waiting to start
585 assert_equals(player.currentTime, -2, "currentTime while waiting");
586 assert_false(player.finished, "Finished state while waiting");
587
588 // Set currentTime = 0
589 player.currentTime = 0;
590 assert_equals(player.currentTime, 0, "currentTime after setting currentTime = 0");
591 assert_false(player.finished, "Finished state after setting currentTime = 0" );
592
593 // Check it is playing
594 at(0.5, function() {
595 assert_equals(player.currentTime, 0.5, "currentTime after waiting a while" );
596 assert_false(player.finished, "Finished state after waiting a while");
597 });
598 }, "currentTime = 0 on player waiting to start is ok");
599
600 // Test player becoming unbounded after source content is extended.
601 timing_test(function() {
602 var player = createPlayer(3);
603
604 player.currentTime = 4;
605 assert_equals(player.currentTime, 4, "currentTime after setting currentTime = 4");
606 assert_true(player.finished, "Finished state after setting currentTime = 4") ;
607
608 // Check it is NOT playing
609 at(0.2, function() {
610 assert_equals(player.currentTime, 4, "currentTime after waiting a while");
611
612 // Extend source
613 player.source.timing.duration = 5;
614 assert_equals(player.currentTime, 4, "currentTime after extending source") ;
615 assert_false(player.finished, "Finished state after extending source");
616
617 // Check it IS playing
618 at(0.2, function() {
619 assert_equals(player.currentTime, 4.2, "currentTime after waiting a whil e again");
620 });
621 });
622 }, "Extending source unblocks player (seek past end)");
623
624 // Test player ending normally and becoming unbounded after source content is ex tended.
625 timing_test(function() {
626 var player = createPlayer(3);
627
628 // Set currentTime to just before the end
629 player.currentTime = 2.9;
630 assert_false(player.finished, "Finished state just before ending");
631
632 // Play to end
633 at(0.2, function() {
634 assert_equals(player.currentTime, 3, "currentTime after ending normally");
635 assert_true(player.finished, "Finished state after ending normally");
636
637 // Extend source
638 player.source.timing.duration = 5;
639 assert_equals(player.currentTime, 3.0, "currentTime after extending source ");
640 assert_false(player.finished, "Finished state after extending source");
641
642 // Check it is playing
643 at(0.2, function() {
644 assert_equals(player.currentTime, 3.2, "currentTime after waiting a whil e again");
645 });
646 });
647 }, "Extending source unblocks player (end normally)");
648
649 // Test player becomes bounded after source content is shortened.
650 timing_test(function() {
651 var player = createPlayer(3);
652
653 // Set currentTime to just before the end
654 player.currentTime = 2;
655 assert_equals(player.currentTime, 2.0, "currentTime before shortening");
656 assert_false(player.finished, "Finished state before shortening");
657
658 // Shorten source
659 player.source.timing.duration = 1;
660 assert_equals(player.currentTime, 2.0, "currentTime after shortening");
661 assert_true(player.finished, "Finished state after shortening");
662
663 // Check it is not playing
664 at(0.2, function() {
665 assert_equals(player.currentTime, 2.0, "currentTime after shortening");
666 });
667 }, "Shortening source blocks player");
668
669 // Test playing player becomes bounded after source content is shortened.
670 timing_test(function() {
671 var player = createPlayer(3);
672
673 // Set currentTime to midway
674 player.currentTime = 1.5;
675 assert_equals(player.currentTime, 1.5, "currentTime before shortening");
676 assert_false(player.finished, "Finished state after seeking");
677
678 // Let it play for a while
679 at(0.2, function() {
680 assert_equals(player.currentTime, 1.7, "currentTime before shortening");
681 assert_false(player.finished, "Finished state before shortening");
682
683 // Shorten source
684 player.source.timing.duration = 1;
685 assert_equals(player.currentTime, 1.7, "currentTime after shortening");
686 assert_true(player.finished, "Finished state after shortening");
687 });
688 }, "Shortening source blocks player when playing");
689
690 // Test reversed player does not become bounded after its source content is shor tened.
691 timing_test(function() {
692 var player = createPlayer(3);
693
694 // Set currentTime to just before the end
695 player.currentTime = 2;
696 player.reverse();
697 assert_equals(player.currentTime, 2.0, "currentTime before shortening");
698 assert_false(player.finished, "Finished state before shortening");
699
700 // Shorten source
701 player.source.timing.duration = 1;
702 assert_equals(player.currentTime, 2.0, "currentTime after shortening");
703 assert_false(player.finished, "Finished state after shortening");
704
705 // Check it is playing
706 at(0.2, function() {
707 assert_equals(player.currentTime, 1.8, "currentTime after shortening");
708 });
709 }, "Shortening source does not block in reverse");
710
711 // Test player becoming unbounded after duration 0 source content is extended.
712 timing_test(function() {
713 // Add empty animation
714 var player = createPlayer(0);
715
716 // Check we don't progress
717 assert_equals(player.currentTime, 0, "currentTime before adding content");
718 assert_true(player.finished, "Finished state before adding content");
719
720 // Wait and check we don't progress
721 at(0.2, function() {
722 assert_equals(player.currentTime, 0, "currentTime after waiting");
723 assert_true(player.finished, "Finished state after waiting");
724
725 // "Add" content
726 player.source.timing.duration = 3;
727
728 // We should pick up from 0, not jump 0.2s in
729 assert_equals(player.currentTime, 0, "currentTime after extending");
730 assert_false(player.finished, "Finished state after extending");
731
732 // Wait and check
733 at(0.2, function() {
734 assert_equals(player.currentTime, 0.2, "currentTime after extending and waiting");
735 });
736 });
737 }, "Async add content");
738
739 // Test negative player playback rate with negative current time.
740 timing_test(function() {
741 var player = createPlayer(3);
742
743 // Set a negative time and let it play for a while
744 player.currentTime = -1;
745 at(0.2, function() {
746 assert_equals(player.currentTime, -0.8, "currentTime after waiting");
747 assert_false(player.finished, "Finished state after waiting");
748
749 // Reverse
750 player.playbackRate = -1;
751 assert_equals(player.currentTime, -0.8, "currentTime after reversing");
752 assert_true(player.finished, "Finished state after reversing");
753 });
754 }, "Setting negative playback rate in negative space");
755
756 // Test reversed player becoming bounded when start of animation is reached.
757 timing_test(function() {
758 var player = createPlayer(3);
759
760 // Seek to just before end
761 player.reverse();
762 player.currentTime = 0.1;
763
764 // Check state of player
765 assert_equals(player.currentTime, 0.1, "Current time just before end");
766 assert_false(player.paused, "Paused state just before end");
767 assert_false(player.finished, "Finished state just before end");
768
769 // Check player after finishing
770 at(0.2, function() {
771 assert_equals(player.currentTime, 0, "Current time when limited");
772 assert_false(player.paused, "Paused state after ending");
773 assert_true(player.finished, "Finished state after ending");
774 });
775 }, "Limiting at start");
776
777 // Test the floating point accuracy of seeking a player.
778 test(function() {
779 var player = createPlayer(3);
780 // Setting a high playbackRate has caused the reported currentTime to differ
781 // from what was set in previous implementations of AnimationPlayer.
782 player.playbackRate = 123456;
783 player.currentTime = 1.618;
784 assert_equals(player.currentTime, 1.618, "currentTime after seeking to fract ional time");
785 }, "currentTime preserves floating point accuracy after seeking");
786 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698