blob: 6365d913e3bd8b115a305fd45c6780019bd4218a [file] [log] [blame]
suite('player-finish-event', function() {
setup(function() {
this.element = document.createElement('div');
document.documentElement.appendChild(this.element);
this.player = this.element.animate([], 1000);
});
teardown(function() {
if (this.element.parent)
this.element.removeChild(this.target);
});
test('fire when player completes', function(done) {
var ready = false;
var fired = false;
var player = this.player;
player.onfinish = function(event) {
assert(ready, 'must not be called synchronously');
assert.equal(this, player);
assert.equal(event.target, player);
assert.equal(event.currentTime, 1000);
assert.equal(event.timelineTime, 1100);
if (fired)
assert(false, 'must not get fired twice');
fired = true;
done();
};
tick(100);
tick(1100);
tick(2100);
ready = true;
});
test('fire when reversed player completes', function(done) {
this.player.onfinish = function(event) {
assert.equal(event.currentTime, 0);
assert.equal(event.timelineTime, 1001);
done();
};
tick(0);
tick(500);
this.player.reverse();
tick(501);
tick(1001);
});
test('fire after player is cancelled', function(done) {
this.player.onfinish = function(event) {
assert.equal(event.currentTime, 0);
assert.equal(event.timelineTime, 1, 'event must be fired on next sample');
done();
};
tick(0);
this.player.cancel();
tick(1);
});
test('multiple event listeners', function(done) {
var count = 0;
function createHandler(expectedCount) {
return function() {
count++;
assert.equal(count, expectedCount);
};
}
var toRemove = createHandler(0);
this.player.addEventListener('finish', createHandler(1));
this.player.addEventListener('finish', createHandler(2));
this.player.addEventListener('finish', toRemove);
this.player.addEventListener('finish', createHandler(3));
this.player.removeEventListener('finish', toRemove);
this.player.onfinish = function() {
assert.equal(count, 3);
done();
};
tick(0);
this.player.cancel();
tick(1000);
});
});