/* global describe:true, beforeEach:true, it:true */ var chan = require('..') var expect = require('expect.js') var fs = require('fs') describe('Channel make', function () { it( 'should return a channel function', function () { var ch = chan() expect(ch).to.be.a(Function) } ) }) describe('A channel', function () { var ch beforeEach(function () { ch = chan() }) it( 'should receive a value of any non-function type as the first argument', function () { var typeCases = [ 1, 'foo', [1, 2 , 3], {foo: 'bar'}, true, false, null, void 0 ] typeCases.forEach(function (val) { ch(val) ch(function (err, result) { expect(result).to.be(val) }) }) } ) it( 'should receive a function value as a second argument if the first is null', function () { ch(null, function () {}) ch(function (err, result) { expect(result).to.be.a(Function) }) } ) it( 'should queue values until they are yielded/removed', function () { var values = [1, 2, 3, 4, 5] values.forEach(function (value) { ch(value) }) values.forEach(function (value) { ch(function (err, result) { expect(result).to.be(value) }) }) } ) it( 'should queue callbacks until values are added', function () { var values = [1, 2, 3, 4, 5] values.forEach(function (value) { ch(function (err, result) { expect(result).to.be(value) }) }) values.forEach(function (value) { ch(value) }) } ) it( 'should pass errors as the first argument to callbacks', function () { var e = new Error('Foo') ch(e) ch(function (err) { expect(err).to.be(e) }) } ) it( 'should be useable directly as a callback for node style async functions', function (done) { ch(function (err, contents) { expect(err).to.be(null) expect(contents).to.be.a(Buffer) done() }) fs.readFile(__filename, ch) } ) })