schedulerjs
Version:
A promise execution flow control library
182 lines (129 loc) • 4.59 kB
JavaScript
;
/* globals describe, it */
var assert = require('assert');
var Scheduler = require('../scheduler');
var Sequence = require('../sequence');
describe('scheduler.js', function () {
describe('Scheduler', function () {
it('should be an event emitter', function (done) {
var sch = new Scheduler();
sch.on('foo', done);
sch.emit('foo');
});
it('should create a scheduler', function (done) {
var sch = new Scheduler();
sch.start();
sch.on('finished', done);
});
it('should add sequences to the scheduler', function (done) {
var sch = new Scheduler();
var seq1 = new Sequence();
var seq2 = new Sequence();
sch.add(seq1).add(seq2).start();
sch.on('finished', done);
});
it('should be able to use named sequences', function (done) {
var sch = new Scheduler();
var seq = new Sequence();
sch.set('seq', seq);
sch.seq.start();
seq.on('finished', done);
});
it('should wait for all the sequences', function (done) {
var sch = new Scheduler();
var seq1 = new Sequence();
var seq2 = new Sequence();
seq1.delay(100);
seq2.delay(300);
sch.add(seq1).set('seq2', seq2).start();
sch.on('finished', done);
});
it('should stop globally', function (done) {
var sch = new Scheduler();
var seq1 = new Sequence();
var seq2 = new Sequence();
seq1.delay(100);
seq2.delay(300);
sch.add(seq1).set('seq2', seq2).start();
setTimeout(function () {
sch.stop();
}, 70);
sch.on('stopped', done);
});
it('should throw errors', function (done) {
var sch = new Scheduler();
var seq = new Sequence();
seq.delay(50).next(function () {
return new Promise(function (resolve, reject) {
reject('foo');
});
});
sch.add(seq).start();
sch.on('error', function (err) {
assert.equal(err, 'foo');
done();
});
});
});
describe('Sequences', function () {
it('should be an event emitter', function (done) {
var seq = new Sequence();
seq.on('foo', done);
seq.emit('foo');
});
it('should create some sequences', function (done) {
var seq = new Sequence();
seq.start();
seq.on('finished', done);
});
it('should be able to delay sequences', function (done) {
var seq = new Sequence();
seq.delay(50).delay(50).start();
seq.on('finished', done);
});
it('should be able to push other sequences', function (done) {
var seq = new Sequence();
var seq2 = new Sequence();
seq.delay(25).delay(25);
seq2.next(seq).delay(25).delay(25);
seq2.start();
seq2.on('finished', done);
});
it('should handle functions', function (done) {
var seq = new Sequence();
seq.next(function () {
return 5;
}).start();
seq.on('finished', done);
});
it('should be able to stop sequences', function (done) {
var seq = new Sequence();
seq.delay(100).start();
setTimeout(function () {
seq.stop();
}, 50);
seq.on('stopped', done);
});
it('should be able to handle classic promise', function (done) {
var seq = new Sequence();
seq.delay(50).next(function () {
return new Promise(function (resolve) {
resolve();
});
}).start();
seq.on('finished', done);
});
it('should throw errors', function (done) {
var seq = new Sequence();
seq.delay(50).next(function () {
return new Promise(function (resolve, reject) {
reject('foo');
});
}).start();
seq.on('error', function (reason) {
assert.equal('foo', reason);
done();
});
});
});
});