UNPKG

schedulerjs

Version:

A promise execution flow control library

182 lines (129 loc) 4.59 kB
'use strict'; /* 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(); }); }); }); });