var assert = require('assert'); var Pend = require('./'); var tests = [ { name: "basic", fn: testBasic, }, { name: "max", fn: testWithMax, }, { name: "callback twice", fn: testCallbackTwice, }, { name: "calling wait twice", fn: testCallingWaitTwice, }, { name: "hold()", fn: testHoldFn, }, ]; var testCount = tests.length; doOneTest(); function doOneTest() { var test = tests.shift(); if (!test) { console.log(testCount + " tests passed."); return; } process.stdout.write(test.name + "..."); test.fn(function() { process.stdout.write("OK\n"); doOneTest(); }); } function testBasic(cb) { var pend = new Pend(); var results = []; pend.go(function(cb) { results.push(1); setTimeout(function() { results.push(3); cb(); }, 500); }); pend.go(function(cb) { results.push(2); setTimeout(function() { results.push(4); cb(); }, 1000); }); pend.wait(function(err) { assert.deepEqual(results, [1,2,3,4]); cb(); }); assert.deepEqual(results, [1, 2]); } function testWithMax(cb) { var pend = new Pend(); var results = []; pend.max = 2; pend.go(function(cb) { results.push('a'); setTimeout(function() { results.push(1); cb(); }, 500); }); pend.go(function(cb) { results.push('b'); setTimeout(function() { results.push(1); cb(); }, 500); }); pend.go(function(cb) { results.push('c'); setTimeout(function() { results.push(2); cb(); }, 100); }); pend.wait(function(err) { assert.deepEqual(results, ['a', 'b', 1, 'c', 1, 2]); cb(); }); assert.deepEqual(results, ['a', 'b']); } function testCallbackTwice(cb) { var pend = new Pend(); pend.go(function(cb) { setTimeout(cb, 100); }); pend.go(function(cb) { cb(); assert.throws(cb, /callback called twice/); }); pend.wait(cb); } function testCallingWaitTwice(cb) { var pend = new Pend(); pend.go(function(cb) { setTimeout(cb, 100); }); pend.wait(function() { pend.go(function(cb) { setTimeout(cb, 50); }); pend.go(function(cb) { setTimeout(cb, 10); }); pend.go(function(cb) { setTimeout(cb, 20); }); pend.wait(cb); }); } function testHoldFn(cb) { var pend = new Pend(); setTimeout(pend.hold(), 100); pend.go(function(cb) { cb(); }); pend.wait(cb); }