basant307/AI_Governance_Project
048
1var assert = require('assert');2var Pend = require('./');3 4var tests = [5 {6 name: "basic",7 fn: testBasic,8 },9 {10 name: "max",11 fn: testWithMax,12 },13 {14 name: "callback twice",15 fn: testCallbackTwice,16 },17 {18 name: "calling wait twice",19 fn: testCallingWaitTwice,20 },21 {22 name: "hold()",23 fn: testHoldFn,24 },25];26var testCount = tests.length;27 28doOneTest();29 30function doOneTest() {31 var test = tests.shift();32 if (!test) {33 console.log(testCount + " tests passed.");34 return;35 }36 process.stdout.write(test.name + "...");37 test.fn(function() {38 process.stdout.write("OK\n");39 doOneTest();40 });41}42 43function testBasic(cb) {44 var pend = new Pend();45 var results = [];46 pend.go(function(cb) {47 results.push(1);48 setTimeout(function() {49 results.push(3);50 cb();51 }, 500);52 });53 pend.go(function(cb) {54 results.push(2);55 setTimeout(function() {56 results.push(4);57 cb();58 }, 1000);59 });60 pend.wait(function(err) {61 assert.deepEqual(results, [1,2,3,4]);62 cb();63 });64 assert.deepEqual(results, [1, 2]);65}66 67function testWithMax(cb) {68 var pend = new Pend();69 var results = [];70 pend.max = 2;71 pend.go(function(cb) {72 results.push('a');73 setTimeout(function() {74 results.push(1);75 cb();76 }, 500);77 });78 pend.go(function(cb) {79 results.push('b');80 setTimeout(function() {81 results.push(1);82 cb();83 }, 500);84 });85 pend.go(function(cb) {86 results.push('c');87 setTimeout(function() {88 results.push(2);89 cb();90 }, 100);91 });92 pend.wait(function(err) {93 assert.deepEqual(results, ['a', 'b', 1, 'c', 1, 2]);94 cb();95 });96 assert.deepEqual(results, ['a', 'b']);97}98 99function testCallbackTwice(cb) {100 var pend = new Pend();101 pend.go(function(cb) {102 setTimeout(cb, 100);103 });104 pend.go(function(cb) {105 cb();106 assert.throws(cb, /callback called twice/);107 });108 pend.wait(cb);109}110 111function testCallingWaitTwice(cb) {112 var pend = new Pend();113 pend.go(function(cb) {114 setTimeout(cb, 100);115 });116 pend.wait(function() {117 pend.go(function(cb) {118 setTimeout(cb, 50);119 });120 pend.go(function(cb) {121 setTimeout(cb, 10);122 });123 pend.go(function(cb) {124 setTimeout(cb, 20);125 });126 pend.wait(cb);127 });128}129 130function testHoldFn(cb) {131 var pend = new Pend();132 setTimeout(pend.hold(), 100);133 pend.go(function(cb) {134 cb();135 });136 pend.wait(cb);137}138 