1suite('effect-callback', function() {
2  setup(function() {
3    document.timeline._players = [];
4    webAnimations1.timeline._players = [];
5  });
6
7  test('animations starting in the future are not in effect', function() {
8    var fractions = [];
9    tick(100);
10    var player = document.body.animate(function(fraction) { fractions.push(fraction); }, 1000);
11    player.startTime = 1000;
12    tick(200);
13    tick(1000);
14    tick(1100);
15    assert.deepEqual(fractions, [null, 0, 0.1]);
16  });
17
18  test('duration 0 players get sampled at least once', function() {
19    var timeFraction;
20    tick(0);
21    var player = document.body.animate(function(t) {
22      timeFraction = t;
23    }, {duration: 0, fill: 'both'});
24    tick(100);
25    assert.equal(timeFraction, 1);
26    assert.equal(isTicking(), false);
27  });
28
29  test('players added during custom effect callbacks get updated in the same tick', function() {
30    var player;
31    var called = false;
32    tick(0);
33    document.body.animate(function() {
34      player = document.body.animate(function() {
35        called = true;
36      }, 1);
37    }, 2);
38    tick(1);
39    assert.isTrue(player.startTime >= 0);
40    assert.isFalse(called);
41  });
42
43  test('custom effect should be called after cancel', function() {
44    var fractions = [];
45    var player = document.body.animate(function(fraction) { fractions.push(fraction); }, 1000);
46    tick(0);
47    tick(500);
48    player.cancel();
49    tick(501);
50    assert.deepEqual(fractions, [0, 0.5, null]);
51  });
52
53  test('element.animate is given animation', function() {
54    var callbackAnim;
55    var player = document.body.animate(function(t, target, a) {
56      callbackAnim = a;
57    }, 100);
58    tick(50);
59    tick(150);
60    assert.equal(isTicking(), false);
61    assert(callbackAnim, 'callback should be set');
62    assert.equal(callbackAnim.target, document.body);
63  });
64
65  test('effect callback on animation is given source animation', function() {
66    var callbackAnim;
67    var anim = new Animation(document.body, function(t, target, a) {
68      callbackAnim = a;
69    }, 1000);
70    var player = document.timeline.play(anim);
71    tick(50);
72    tick(550);
73    assert.equal(player.currentTime, 500);
74    assert.equal(callbackAnim, anim);
75  });
76});
77