123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /* jshint loopfunc: true */
- /* global describe:true, beforeEach:true, it:true */
- var chan = require('..')
- var expect = require('expect.js')
- describe('A unbuffered channel', function () {
- it(
- 'should not call the added callback until the value is removed',
- function (done) {
- var ch = chan(0) // unbuffered
- var cbCalled = false
- ch('foo')(function () {
- cbCalled = true
- })
- setImmediate(function () {
- expect(cbCalled).to.not.be.ok()
- ch(function (err, val) {
- setImmediate(function () {
- expect(cbCalled).to.be.ok()
- done()
- })
- })
- })
- }
- )
- })
- describe('A buffered channel', function () {
- it(
- 'should pull values from the buffer when yielded',
- function (done) {
- var ch = chan(1)
- var cbCalled = false
- var testValue = 'foo'
- ch(testValue)
- ch(function (err, val) {
- cbCalled = true
- expect(val).to.be(testValue)
- })
- setImmediate(function () {
- expect(cbCalled).to.be.ok()
- done()
- })
- }
- )
- describe('with a non-full buffer', function () {
- it(
- 'should call added callback as soon as it is given to the returned thunk',
- function (done) {
- var buffer = 3
- var ch = chan(buffer)
- var called = 0
- var added = 0
- while (++added <= buffer + 10) {
- ch(added)(function (err) {
- called++
- })
- }
- setImmediate(function () {
- expect(called).to.be(buffer)
- done()
- })
- }
- )
- })
- describe('with a full buffer', function () {
- it(
- 'should not add another value untill a value has been removed',
- function (done) {
- var ch = chan(1)
- var cbCalled = false
- ch('foo')
- ch('bar')(function () {
- cbCalled = true
- })
- setImmediate(function () {
- expect(cbCalled).to.not.be.ok()
- ch(function (err, val) {
- setImmediate(function () {
- expect(cbCalled).to.be.ok()
- done()
- })
- })
- })
- }
- )
- it(
- 'should call cb with an error when the channel is closed before adding',
- function (done) {
- var ch = chan(0)
- var cbCalled = false
- ch('foo')(function (err) {
- cbCalled = true
- expect(err).to.be.an(Error)
- })
- ch.close()
- setImmediate(function () {
- expect(cbCalled).to.be.ok()
- done()
- })
- }
- )
- })
- })
|