First commit
This commit is contained in:
104
node_modules/vasync/tests/compat.js
generated
vendored
Normal file
104
node_modules/vasync/tests/compat.js
generated
vendored
Normal file
@ -0,0 +1,104 @@
|
||||
/*
|
||||
* tests/compat.js: Some of the APIs provided by vasync are intended to be
|
||||
* API-compatible with node-async, so we incorporate the tests from node-async
|
||||
* directly here. These are copied from https://github.com/caolan/async,
|
||||
* available under the MIT license. To make it easy to update this from the
|
||||
* source, this file should remain unchanged from the source except for this
|
||||
* header comment, the change to the "require" line, and deleted lines for
|
||||
* unimplemented functions.
|
||||
*
|
||||
* The following tests are deliberately omitted:
|
||||
*
|
||||
* o "waterfall non-array": Per Joyent's Best Practices for Node.js Error
|
||||
* Handling, we're strict about argument types and throw on these programmer
|
||||
* errors rather than emitting them asynchronously.
|
||||
*
|
||||
* o "waterfall multiple callback calls": We deliberately disallow a waterfall
|
||||
* function to invoke its callback more than once, so we don't test for that
|
||||
* here. The behavior that node-async allows can potentially be used to fork
|
||||
* the waterfall, which may be useful, but it's often used instead as an
|
||||
* excuse to write code sloppily. And the downside is that it makes it really
|
||||
* hard to understand bugs where the waterfall was resumed too early. For
|
||||
* now, we're disallowing it, but if the forking behavior becomes useful, we
|
||||
* can always make our version less strict.
|
||||
*/
|
||||
var async = require('../lib/vasync');
|
||||
|
||||
exports['waterfall'] = function(test){
|
||||
test.expect(6);
|
||||
var call_order = [];
|
||||
async.waterfall([
|
||||
function(callback){
|
||||
call_order.push('fn1');
|
||||
setTimeout(function(){callback(null, 'one', 'two');}, 0);
|
||||
},
|
||||
function(arg1, arg2, callback){
|
||||
call_order.push('fn2');
|
||||
test.equals(arg1, 'one');
|
||||
test.equals(arg2, 'two');
|
||||
setTimeout(function(){callback(null, arg1, arg2, 'three');}, 25);
|
||||
},
|
||||
function(arg1, arg2, arg3, callback){
|
||||
call_order.push('fn3');
|
||||
test.equals(arg1, 'one');
|
||||
test.equals(arg2, 'two');
|
||||
test.equals(arg3, 'three');
|
||||
callback(null, 'four');
|
||||
},
|
||||
function(arg4, callback){
|
||||
call_order.push('fn4');
|
||||
test.same(call_order, ['fn1','fn2','fn3','fn4']);
|
||||
callback(null, 'test');
|
||||
}
|
||||
], function(err){
|
||||
test.done();
|
||||
});
|
||||
};
|
||||
|
||||
exports['waterfall empty array'] = function(test){
|
||||
async.waterfall([], function(err){
|
||||
test.done();
|
||||
});
|
||||
};
|
||||
|
||||
exports['waterfall no callback'] = function(test){
|
||||
async.waterfall([
|
||||
function(callback){callback();},
|
||||
function(callback){callback(); test.done();}
|
||||
]);
|
||||
};
|
||||
|
||||
exports['waterfall async'] = function(test){
|
||||
var call_order = [];
|
||||
async.waterfall([
|
||||
function(callback){
|
||||
call_order.push(1);
|
||||
callback();
|
||||
call_order.push(2);
|
||||
},
|
||||
function(callback){
|
||||
call_order.push(3);
|
||||
callback();
|
||||
},
|
||||
function(){
|
||||
test.same(call_order, [1,2,3]);
|
||||
test.done();
|
||||
}
|
||||
]);
|
||||
};
|
||||
|
||||
exports['waterfall error'] = function(test){
|
||||
test.expect(1);
|
||||
async.waterfall([
|
||||
function(callback){
|
||||
callback('error');
|
||||
},
|
||||
function(callback){
|
||||
test.ok(false, 'next function should not be called');
|
||||
callback();
|
||||
}
|
||||
], function(err){
|
||||
test.equals(err, 'error');
|
||||
});
|
||||
setTimeout(test.done, 50);
|
||||
};
|
||||
Reference in New Issue
Block a user