Index: polymer_0.5.0/bower_components/web-animations-js/test/js/player.js |
diff --git a/polymer_0.5.0/bower_components/web-animations-js/test/js/player.js b/polymer_0.5.0/bower_components/web-animations-js/test/js/player.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ed50e162b0e630ddb6f563445ee41a47640eb9b9 |
--- /dev/null |
+++ b/polymer_0.5.0/bower_components/web-animations-js/test/js/player.js |
@@ -0,0 +1,461 @@ |
+suite('player', function() { |
+ setup(function() { |
+ webAnimationsMinifill.timeline._players = []; |
+ }); |
+ test('zero duration animation works', function() { |
+ tick(90); |
+ var p = document.body.animate([], 0); |
+ tick(100); |
+ assert.equal(p.startTime, 100); |
+ assert.equal(p.currentTime, 0); |
+ }); |
+ test('playing works as expected', function() { |
+ tick(90); |
+ var p = document.body.animate([], 2000); |
+ tick(100); |
+ assert.equal(p.startTime, 100); |
+ assert.equal(p.currentTime, 0); |
+ tick(300); |
+ assert.equal(p.startTime, 100); |
+ assert.equal(p.currentTime, 200); |
+ }); |
+ test('pause at start of play', function() { |
+ tick(90); |
+ var p = document.body.animate([], 2000); |
+ p.pause(); |
+ tick(100); |
+ assert.equal(p.currentTime, 0); |
+ tick(300); |
+ p.play(); |
+ assert.equal(p.currentTime, 0); |
+ tick(310); |
+ assert.equal(p.currentTime, 0); |
+ assert.equal(p.startTime, 310); |
+ |
+ var p = document.body.animate([], 2000); |
+ p.startTime = -690; |
+ p.pause(); |
+ assert.equal(p.currentTime, null); |
+ tick(700); |
+ p.play(); |
+ tick(701); |
+ assert.equal(p.currentTime, 1000); |
+ tick(800); |
+ assert.equal(p.currentTime, 1099); |
+ assert.equal(p.startTime, -299); |
+ }); |
+ test('pausing works as expected', function() { |
+ tick(190); |
+ var p = document.body.animate([], 3000); |
+ tick(200); |
+ tick(1500); |
+ assert.equal(p.startTime, 200); |
+ assert.equal(p.currentTime, 1300); |
+ p.pause(); |
+ assert.equal(p.startTime, null); |
+ assert.equal(p.currentTime, null); |
+ tick(2500); |
+ assert.equal(p.startTime, null); |
+ assert.equal(p.currentTime, 1300); |
+ p.play(); |
+ tick(2510); |
+ assert.equal(p.startTime, 1210); |
+ assert.equal(p.currentTime, 1300); |
+ tick(3500); |
+ assert.equal(p.startTime, 1210); |
+ assert.equal(p.currentTime, 2290); |
+ }); |
+ test('reversing works as expected', function() { |
+ tick(290); |
+ var p = document.body.animate([], 1000); |
+ tick(300); |
+ assert.equal(p.startTime, 300); |
+ assert.equal(p.currentTime, 0); |
+ tick(600); |
+ assert.equal(p.startTime, 300); |
+ assert.equal(p.currentTime, 300); |
+ assert.equal(p.playbackRate, 1); |
+ p.reverse(); |
+ tick(600); |
+ assert.equal(p.startTime, 900); |
+ assert.equal(p.currentTime, 300); |
+ assert.equal(p.playbackRate, -1); |
+ tick(700); |
+ assert.equal(p.startTime, 900); |
+ assert.equal(p.currentTime, 200); |
+ }); |
+ test('reversing after pausing', function() { |
+ tick(90); |
+ var p = document.body.animate([], 1000); |
+ tick(100); |
+ tick(600); |
+ p.reverse(); |
+ tick(601); |
+ tick(700); |
+ assert.equal(p.startTime, 1101); |
+ assert.equal(p.currentTime, 401); |
+ }); |
+ test('reversing after finishing works as expected', function() { |
+ tick(90); |
+ var p = document.body.animate([], 1000); |
+ tick(100); |
+ tick(1200); |
+ assert.equal(p.finished, true); |
+ assert.equal(p.startTime, 100); |
+ assert.equal(p.currentTime, 1000); |
+ tick(1500); |
+ assert.equal(p.currentTime, 1000); |
+ assert.equal(isTicking(), false); |
+ p.reverse(); |
+ assert.equal(p._startTime, null); |
+ assert.equal(p.currentTime, 1000); |
+ tick(1600); |
+ assert.equal(p.startTime, 2600); |
+ assert.equal(p.currentTime, 1000); |
+ }); |
+ test('playing after finishing works as expected', function() { |
+ tick(90); |
+ var p = document.body.animate([], 1000); |
+ tick(100); |
+ tick(1200); |
+ assert.equal(p.finished, true); |
+ assert.equal(p.startTime, 100); |
+ assert.equal(p.currentTime, 1000); |
+ tick(1500); |
+ assert.equal(p.currentTime, 1000); |
+ assert.equal(isTicking(), false); |
+ p.play(); |
+ assert.equal(p.startTime, null); |
+ assert.equal(p.currentTime, 0); |
+ tick(1600); |
+ assert.equal(p.startTime, 1600); |
+ assert.equal(p.currentTime, 0); |
+ }); |
+ test('limiting works as expected', function() { |
+ tick(390); |
+ var p = document.body.animate([], 1000); |
+ tick(400); |
+ assert.equal(p.startTime, 400); |
+ assert.equal(p.currentTime, 0); |
+ tick(900); |
+ assert.equal(p.startTime, 400); |
+ assert.equal(p.currentTime, 500); |
+ tick(1400); |
+ assert.equal(p.startTime, 400); |
+ assert.equal(p.currentTime, 1000); |
+ tick(1500); |
+ assert.equal(p.startTime, 400); |
+ assert.equal(p.currentTime, 1000); |
+ p.reverse(); |
+ assert.equal(p.playbackRate, -1); |
+ assert.equal(p.currentTime, 1000); |
+ assert.equal(p._startTime, null); |
+ tick(2000); |
+ assert.equal(p.currentTime, 1000); |
+ assert.equal(p.startTime, 3000); |
+ tick(2200); |
+ assert.equal(p.currentTime, 800); |
+ assert.equal(p.startTime, 3000); |
+ tick(3200); |
+ assert.equal(p.currentTime, 0); |
+ assert.equal(p.startTime, 3000); |
+ tick(3500); |
+ assert.equal(p.currentTime, 0); |
+ assert.equal(p.startTime, 3000); |
+ }); |
+ test('play after limit works as expected', function() { |
+ tick(490); |
+ var p = document.body.animate([], 2000); |
+ tick(500); |
+ tick(2600); |
+ assert.equal(p.currentTime, 2000); |
+ assert.equal(p.startTime, 500); |
+ assert.equal(p.finished, true); |
+ assert.equal(p.playbackRate, 1); |
+ setTicking(true); |
+ p.play(); |
+ tick(2700); |
+ assert.equal(p.startTime, 2700); |
+ assert.equal(p.currentTime, 0); |
+ assert.equal(p.finished, false); |
+ assert.equal(p.playbackRate, 1); |
+ }); |
+ test('play after limit works as expected (reversed)', function() { |
+ tick(590); |
+ var p = document.body.animate([], 3000); |
+ tick(600); |
+ tick(700); |
+ p.reverse(); |
+ tick(701); |
+ tick(900); |
+ assert.equal(p.startTime, 801); |
+ assert.equal(p.currentTime, 0); |
+ assert.equal(p.finished, true); |
+ assert.equal(p.playbackRate, -1); |
+ setTicking(true); |
+ p.play(); |
+ tick(1000); |
+ assert.equal(p.startTime, 4000); |
+ assert.equal(p.currentTime, 3000); |
+ assert.equal(p.finished, false); |
+ assert.equal(p.playbackRate, -1); |
+ }); |
+ test('seeking works as expected', function() { |
+ tick(690); |
+ var p = document.body.animate([], 2000); |
+ tick(700); |
+ tick(900); |
+ assert.equal(p.currentTime, 200); |
+ p.currentTime = 600; |
+ assert.equal(p.currentTime, 600); |
+ assert.equal(p.startTime, 300); |
+ p.reverse(); |
+ tick(1000); |
+ assert.equal(p.startTime, 1600); |
+ p.currentTime = 300; |
+ assert.equal(p.currentTime, 300); |
+ assert.equal(p.startTime, 1300); |
+ }); |
+ test('seeking while paused works as expected', function() { |
+ tick(790); |
+ var p = document.body.animate([], 1000); |
+ tick(800); |
+ tick(1000); |
+ p.pause(); |
+ assert.equal(p.currentTime, null); |
+ assert.equal(p.startTime, null); |
+ assert.equal(p.paused, true); |
+ p.currentTime = 500; |
+ assert.equal(p.startTime, null); |
+ assert.equal(p.paused, true); |
+ }); |
+ test('setting start time while paused is ignored', function() { |
+ tick(900); |
+ var p = document.body.animate([], 1234); |
+ p.pause(); |
+ assert.equal(p.startTime, null); |
+ assert.equal(p.currentTime, null); |
+ p.startTime = 2232; |
+ assert.equal(p.startTime, null); |
+ assert.equal(p.currentTime, null); |
+ }); |
+ test('finishing works as expected', function() { |
+ tick(1000); |
+ var p = document.body.animate([], 2000); |
+ p.finish(); |
+ assert.equal(p.startTime, 0); |
+ assert.equal(p.currentTime, 2000); |
+ p.reverse(); |
+ p.finish(); |
+ assert.equal(p.currentTime, 0); |
+ assert.equal(p.startTime, 2000); |
+ tick(2000); |
+ }); |
+ test('cancelling clears all effects', function() { |
+ tick(0); |
+ var target = document.createElement('div'); |
+ document.documentElement.appendChild(target); |
+ var player = target.animate([{marginLeft: '50px'}, {marginLeft: '50px'}], 1000); |
+ tick(10); |
+ tick(110); |
+ assert.equal(getComputedStyle(target).marginLeft, '50px'); |
+ player.cancel(); |
+ // getComputedStyle forces a tick. |
+ assert.equal(getComputedStyle(target).marginLeft, '0px'); |
+ assert.deepEqual(webAnimationsMinifill.timeline._players, []); |
+ tick(120); |
+ assert.equal(getComputedStyle(target).marginLeft, '0px'); |
+ assert.deepEqual(webAnimationsMinifill.timeline._players, []); |
+ document.documentElement.removeChild(target); |
+ }); |
+ test('startTime is set on first tick if timeline hasn\'t started', function() { |
+ webAnimationsMinifill.timeline.currentTime = undefined; |
+ var p = document.body.animate([], 1000); |
+ tick(0); |
+ tick(100); |
+ assert.equal(p.startTime, 0); |
+ }); |
+ test('players which are finished and not filling get discarded', function() { |
+ tick(90); |
+ var nofill = document.body.animate([], 100); |
+ var fill = document.body.animate([], {duration: 100, fill: 'forwards'}); |
+ assert.deepEqual(webAnimationsMinifill.timeline._players, [nofill._player || nofill, fill._player || fill]); |
+ tick(100); |
+ assert.deepEqual(webAnimationsMinifill.timeline._players, [nofill._player || nofill, fill._player || fill]); |
+ tick(400); |
+ assert.deepEqual(webAnimationsMinifill.timeline._players, [fill._player || fill]); |
+ }); |
+ test('discarded players get re-added on modification', function() { |
+ tick(90); |
+ var player = document.body.animate([], 100); |
+ tick(100); |
+ tick(400); |
+ assert.deepEqual(webAnimationsMinifill.timeline._players, []); |
+ player.currentTime = 0; |
+ assert.deepEqual(webAnimationsMinifill.timeline._players, [player._player || player]); |
+ }); |
+ test('players in the before phase are not discarded', function() { |
+ tick(100); |
+ var player = document.body.animate([], 100); |
+ player.currentTime = -50; |
+ tick(110); |
+ assert.deepEqual(webAnimationsMinifill.timeline._players, [player._player || player]); |
+ }); |
+ test('players that go out of effect should not clear the effect of players that are in effect', function() { |
+ var target = document.createElement('div'); |
+ document.body.appendChild(target); |
+ tick(0); |
+ var playerBehind = target.animate([{marginLeft: '200px'}, {marginLeft: '200px'}], 200); |
+ var playerInfront = target.animate([{marginLeft: '100px'}, {marginLeft: '100px'}], 100); |
+ tick(50); |
+ assert.equal(getComputedStyle(target).marginLeft, '100px', 't = 50'); |
+ tick(150); |
+ assert.equal(getComputedStyle(target).marginLeft, '200px', 't = 150'); |
+ tick(250); |
+ assert.equal(getComputedStyle(target).marginLeft, '0px', 't = 250'); |
+ document.body.removeChild(target); |
+ }); |
+ test('player modifications should update CSS effects immediately', function() { |
+ var target = document.createElement('div'); |
+ document.body.appendChild(target); |
+ tick(0); |
+ var playerBehind = target.animate([{width: '1234px'}, {width: '1234px'}], {duration: 1, fill: 'both'}); |
+ var playerInfront = target.animate([{width: '0px'}, {width: '100px'}], 100); |
+ assert.equal(getComputedStyle(target).width, '0px'); |
+ playerInfront.currentTime = 50; |
+ assert.equal(getComputedStyle(target).width, '50px'); |
+ playerInfront.currentTime = 100; |
+ assert.equal(getComputedStyle(target).width, '1234px'); |
+ playerInfront.play(); |
+ assert.equal(getComputedStyle(target).width, '0px'); |
+ playerInfront.startTime = -50; |
+ assert.equal(getComputedStyle(target).width, '50px'); |
+ document.body.removeChild(target); |
+ }); |
+ test('Player that hasn\'t been played has playState \'idle\'', function() { |
+ var source = new minifillAnimation(document.body, [], 1000); |
+ var p = new Player(source); |
+ assert.equal(p.playState, 'idle'); |
+ }); |
+ test('playState works for a simple animation', function() { |
+ var p = document.body.animate([], 1000); |
+ tick(0); |
+ assert.equal(p.playState, 'running'); |
+ tick(100); |
+ assert.equal(p.playState, 'running'); |
+ p.pause(); |
+ assert.equal(p.playState, 'pending'); |
+ tick(101); |
+ assert.equal(p.playState, 'paused'); |
+ p.play(); |
+ assert.equal(p.playState, 'pending'); |
+ tick(102); |
+ assert.equal(p.playState, 'running'); |
+ tick(1002); |
+ assert.equal(p.playState, 'finished'); |
+ }); |
+ test('Play after cancel', function() { |
+ var p = document.body.animate([], 1000); |
+ assert.equal(p.playState, 'pending'); |
+ tick(0); |
+ p.cancel(); |
+ assert.equal(p.playState, 'idle'); |
+ assert.equal(p.currentTime, null); |
+ assert.equal(p.startTime, null); |
+ tick(1); |
+ assert.equal(p.playState, 'idle'); |
+ assert.equal(p.currentTime, null); |
+ assert.equal(p.startTime, null); |
+ p.play(); |
+ assert.equal(p.playState, 'pending'); |
+ assert.equal(p.currentTime, 0); |
+ assert.equal(p.startTime, null); |
+ tick(10); |
+ assert.equal(p.playState, 'running'); |
+ assert.equal(p.currentTime, 0); |
+ assert.equal(p.startTime, 10); |
+ }); |
+ test('Reverse after cancel', function() { |
+ var p = document.body.animate([], 300); |
+ tick(0); |
+ p.cancel(); |
+ assert.equal(p.playState, 'idle'); |
+ assert.equal(p.currentTime, null); |
+ assert.equal(p.startTime, null); |
+ tick(1); |
+ p.reverse(); |
+ assert.equal(p.playState, 'pending'); |
+ assert.equal(p.currentTime, 300); |
+ assert.equal(p.startTime, null); |
+ tick(100); |
+ assert.equal(p.playState, 'running'); |
+ assert.equal(p.currentTime, 300); |
+ assert.equal(p.startTime, 400); |
+ tick(300); |
+ assert.equal(p.playState, 'running'); |
+ assert.equal(p.currentTime, 100); |
+ assert.equal(p.startTime, 400); |
+ tick(400); |
+ assert.equal(p.playState, 'finished'); |
+ assert.equal(p.currentTime, 0); |
+ assert.equal(p.startTime, 400); |
+ }); |
+ test('Finish after cancel', function() { |
+ var p = document.body.animate([], 300); |
+ tick(0); |
+ p.cancel(); |
+ assert.equal(p.playState, 'idle'); |
+ assert.equal(p.currentTime, null); |
+ assert.equal(p.startTime, null); |
+ tick(1); |
+ p.finish(); |
+ assert.equal(p.playState, 'idle'); |
+ assert.equal(p.currentTime, null); |
+ assert.equal(p.startTime, null); |
+ tick(2); |
+ assert.equal(p.playState, 'idle'); |
+ assert.equal(p.currentTime, null); |
+ assert.equal(p.startTime, null); |
+ }); |
+ test('Pause after cancel', function() { |
+ var p = document.body.animate([], 300); |
+ tick(0); |
+ p.cancel(); |
+ assert.equal(p.playState, 'idle'); |
+ assert.equal(p.currentTime, null); |
+ assert.equal(p.startTime, null); |
+ tick(1); |
+ p.pause(); |
+ assert.equal(p.playState, 'idle'); |
+ assert.equal(p.currentTime, null); |
+ assert.equal(p.startTime, null); |
+ }); |
+ test('Players ignore NaN times', function() { |
+ var p = document.body.animate([], 300); |
+ p.startTime = 100; |
+ tick(110); |
+ assert.equal(p.currentTime, 10); |
+ p.startTime = NaN; |
+ assert.equal(p.startTime, 100); |
+ p.currentTime = undefined; |
+ assert.equal(p.currentTime, 10); |
+ }); |
+ test('play() should not set a start time', function() { |
+ var p = document.body.animate([], 1000); |
+ p.cancel(); |
+ assert.equal(p.startTime, null); |
+ assert.equal(p.playState, 'idle'); |
+ p.play(); |
+ assert.equal(p.startTime, null); |
+ assert.equal(p.playState, 'pending'); |
+ }); |
+ test('reverse() should not set a start time', function() { |
+ var p = document.body.animate([], 1000); |
+ p.cancel(); |
+ assert.equal(p.startTime, null); |
+ assert.equal(p.playState, 'idle'); |
+ p.reverse(); |
+ assert.equal(p.startTime, null); |
+ assert.equal(p.playState, 'pending'); |
+ }); |
+}); |