| 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); | |
| } | |