batchasync.js/test.js

111 lines
2.7 KiB
JavaScript
Raw Normal View History

2019-06-13 23:36:25 +00:00
(function (exports) {
'use strict';
var batchAsync = exports.batchAsync || require('./batchasync.js').batchAsync;
function testBatch() {
var timeouts = [100, 80, 20, 500, 50, 30, 200, 300];
var tasks = timeouts.map(function(timeout, i) {
return function() {
return promiseTimeout(timeout).then(function() {
console.log('task:', i, timeouts[i]);
return i;
});
};
});
var len = tasks.length;
return batchAsync(4, tasks, function(task) {
return task();
})
.then(function(results) {
console.info('results:', results);
if (len !== results.length) {
throw new Error('result set too small');
}
if (results.join(' ') !== results.sort().join(' ')) {
throw new Error('result set out-of-order');
}
})
.then(function() {
return batchAsync(4, [], 'not a function').then(function() {
console.info('Handled ZERO tasks correctly.');
});
})
.then(function() {
return batchAsync(4, timeouts, function(x) {
return x;
}).then(function(results) {
if (results.join(' ') !== timeouts.join(' ')) {
console.error(results);
throw new Error('sync result set out-of-order');
}
console.info('Handled sync tasks correctly.');
});
})
.then(function() {
return batchAsync(4, tasks, function(task) {
if (0 === Math.floor(Math.random() * 2) % 2) {
throw new Error('any async error will do');
}
return task();
})
.then(function(results) {
console.log(results);
var e = new Error('async rejection should not pass!');
e.FAIL = true;
throw e;
})
.catch(function(e) {
if (e.FAIL) {
throw e;
}
console.info('Pass: Exception thrown when expected');
});
})
.then(function() {
return batchAsync(4, timeouts, function() {
if (0 === Math.floor(Math.random() * 2) % 2) {
throw new Error('any sync error will do');
}
return null;
})
.then(function(results) {
var e = new Error('should not pass sync exception!');
e.FAIL = true;
throw e;
})
.catch(function(e) {
if (e.FAIL) {
throw e;
}
})
.then(function() {
// wait for the tasks the error left dangling to print their message
console.info('Pass: Promise rejected when expected');
return promiseTimeout(1000);
});
});
}
function promiseTimeout(timeout) {
return new Promise(function(resolve, reject) {
setTimeout(resolve, timeout);
});
}
testBatch()
.then(function() {
console.info('PROBABLY PASSED');
console.info(
'We tested what could be tested without knowing Passed what could be tested Do the results make sense?'
);
})
.catch(function(e) {
console.error('FAIL!');
console.error(e);
process.exit(500);
});
}('undefined' !== typeof window ? window : module.exports));