| var sinon = require('sinon') |
| var chai = require('chai') |
| chai.use(require('sinon-chai')) |
| var expect = chai.expect |
| |
| var SeqQueue = require('../../lib/wire/seqqueue') |
| |
| describe('SeqQueue', function() { |
| it('should wait until started', function() { |
| var spy = sinon.spy() |
| var q = new SeqQueue(10, Infinity) |
| q.push(1, spy) |
| expect(spy).to.not.have.been.called |
| q.start(0) |
| expect(spy).to.have.been.calledOnce |
| }) |
| |
| it('should call first item immediately if started', function() { |
| var spy = sinon.spy() |
| var q = new SeqQueue(10, Infinity) |
| q.start(0) |
| q.push(1, spy) |
| expect(spy).to.have.been.calledOnce |
| }) |
| |
| it('should call items in seq order', function() { |
| var spy1 = sinon.spy() |
| var spy2 = sinon.spy() |
| var spy3 = sinon.spy() |
| var spy4 = sinon.spy() |
| var q = new SeqQueue(10, Infinity) |
| q.start(0) |
| q.push(1, spy1) |
| q.push(2, spy2) |
| q.push(3, spy3) |
| q.push(4, spy4) |
| expect(spy1).to.have.been.calledOnce |
| expect(spy2).to.have.been.calledOnce |
| expect(spy3).to.have.been.calledOnce |
| expect(spy4).to.have.been.calledOnce |
| }) |
| |
| it('should not call item until seq reaches it', function() { |
| var spy1 = sinon.spy() |
| var spy2 = sinon.spy() |
| var spy3 = sinon.spy() |
| var spy4 = sinon.spy() |
| var q = new SeqQueue(10, Infinity) |
| q.start(0) |
| q.push(1, spy1) |
| q.push(4, spy4) |
| expect(spy1).to.have.been.calledOnce |
| expect(spy4).to.not.have.been.called |
| q.push(3, spy3) |
| expect(spy3).to.not.have.been.called |
| expect(spy4).to.not.have.been.called |
| q.push(2, spy2) |
| expect(spy2).to.have.been.calledOnce |
| expect(spy3).to.have.been.calledOnce |
| expect(spy4).to.have.been.calledOnce |
| }) |
| |
| it('should should start skipping items if too far behind', function() { |
| var spy1 = sinon.spy() |
| var spy2 = sinon.spy() |
| var spy3 = sinon.spy() |
| var spy4 = sinon.spy() |
| var q = new SeqQueue(10, 2) |
| q.start(0) |
| q.push(1, spy1) |
| q.push(3, spy3) |
| q.push(4, spy4) |
| q.push(2, spy2) |
| expect(spy1).to.have.been.calledOnce |
| expect(spy2).to.not.have.been.called |
| expect(spy3).to.have.been.calledOnce |
| expect(spy4).to.have.been.calledOnce |
| }) |
| |
| it('should should start a new queue', function() { |
| var spy1 = sinon.spy() |
| var spy2 = sinon.spy() |
| var spy3 = sinon.spy() |
| var spy4 = sinon.spy() |
| var q = new SeqQueue(10, Infinity) |
| q.start(0) |
| q.push(1, spy1) |
| q.push(2, spy2) |
| q.stop(3) |
| q.start(0) |
| q.push(1, spy3) |
| q.push(2, spy4) |
| expect(spy1).to.have.been.calledOnce |
| expect(spy2).to.have.been.calledOnce |
| expect(spy3).to.have.been.calledOnce |
| expect(spy4).to.have.been.calledOnce |
| }) |
| |
| it('should should start a new queue on even on 1 length', function() { |
| var spy1 = sinon.spy() |
| var spy2 = sinon.spy() |
| var spy3 = sinon.spy() |
| var q = new SeqQueue(2, Infinity) |
| q.start(0) |
| q.push(1, spy1) |
| q.stop(2) |
| q.start(0) |
| q.push(1, spy2) |
| q.stop(2) |
| q.start(0) |
| q.push(1, spy3) |
| expect(spy1).to.have.been.calledOnce |
| expect(spy2).to.have.been.calledOnce |
| expect(spy3).to.have.been.calledOnce |
| }) |
| }) |