var assert = require('assert'),
|
|
cb = require('../');
|
|
|
|
function invokeAsync(callback) {
|
|
setTimeout(function() {
|
|
callback(null, 'foo');
|
|
}, 100);
|
|
}
|
|
|
|
function invokeAsyncError(callback) {
|
|
setTimeout(function() {
|
|
callback(new Error());
|
|
}, 100);
|
|
}
|
|
|
|
function invokeAsyncTwice(callback) {
|
|
setTimeout(function() {
|
|
callback(null, 'foo');
|
|
callback(null, 'foo');
|
|
}, 100);
|
|
}
|
|
|
|
describe('cb(callback)', function() {
|
|
|
|
it('should invoke the provided callback', function(done) {
|
|
invokeAsync(cb(function(err, res) {
|
|
assert.strictEqual(res, 'foo');
|
|
done();
|
|
}));
|
|
});
|
|
|
|
it('shouldn\'t mess with errors', function(done) {
|
|
invokeAsyncError(cb(function(err, res) {
|
|
assert(err);
|
|
done();
|
|
}));
|
|
});
|
|
|
|
it('should allow multiple executions', function(done) {
|
|
var count = 0;
|
|
invokeAsyncTwice(cb(function(err, res) {
|
|
count++;
|
|
if (count === 2) done();
|
|
}));
|
|
});
|
|
|
|
});
|
|
|
|
describe('cb(callback).timeout(ms)', function() {
|
|
|
|
it('should complete successfully within timeout period', function(done) {
|
|
invokeAsync(cb(function(err, res) {
|
|
assert.strictEqual(res, 'foo');
|
|
done();
|
|
}).timeout(200));
|
|
});
|
|
|
|
it('should complete with an error after timeout period', function(done) {
|
|
invokeAsync(cb(function(err, res) {
|
|
assert(err);
|
|
done();
|
|
}).timeout(50));
|
|
});
|
|
|
|
it('error resulting from a timeout should be instanceof cb.TimeoutError', function(done) {
|
|
invokeAsync(cb(function(err, res) {
|
|
assert(err instanceof cb.TimeoutError);
|
|
done();
|
|
}).timeout(50));
|
|
});
|
|
|
|
});
|
|
|
|
describe('cb(callback).error(errback)', function() {
|
|
|
|
it('should skip the err argument when invoking callback', function(done) {
|
|
invokeAsync(cb(function(res) {
|
|
assert.strictEqual(res, 'foo');
|
|
done();
|
|
}).error(assert.ifError));
|
|
});
|
|
|
|
it('should pass errors to provided errback', function(done) {
|
|
invokeAsyncError(cb(function(res) {
|
|
throw new Error('should not be invoked');
|
|
}).error(function(err) {
|
|
assert(err);
|
|
done();
|
|
}));
|
|
});
|
|
|
|
});
|
|
|
|
describe('cb(callback).error(errback).timeout(ms)', function() {
|
|
|
|
it('should skip the err argument when invoking callback', function(done) {
|
|
invokeAsync(cb(function(res) {
|
|
assert.strictEqual(res, 'foo');
|
|
done();
|
|
}).error(assert.ifError).timeout(200));
|
|
});
|
|
|
|
it('should pass timeout error to provided errback', function(done) {
|
|
invokeAsyncError(cb(function(res) {
|
|
throw new Error('should not be invoked');
|
|
}).error(function(err) {
|
|
assert(err);
|
|
done();
|
|
}).timeout(50));
|
|
});
|
|
|
|
});
|
|
|
|
describe('cb(callback).once()', function() {
|
|
|
|
it('should allow multiple executions', function(done) {
|
|
var count = 0;
|
|
invokeAsyncTwice(cb(function(err, res) {
|
|
count++;
|
|
assert.notEqual(count, 2);
|
|
setTimeout(done, 100);
|
|
}).once());
|
|
});
|
|
|
|
});
|