You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
2.4 KiB
137 lines
2.4 KiB
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); |
|
}
|
|
|