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