summaryrefslogtreecommitdiff
path: root/mocha_test/race.js
diff options
context:
space:
mode:
Diffstat (limited to 'mocha_test/race.js')
-rw-r--r--mocha_test/race.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/mocha_test/race.js b/mocha_test/race.js
new file mode 100644
index 0000000..d56205d
--- /dev/null
+++ b/mocha_test/race.js
@@ -0,0 +1,70 @@
+var async = require('../lib');
+var assert = require('assert');
+
+describe('race', function () {
+ it('should call each function in parallel and callback with first result', function raceTest10(done) {
+ var finished = 0;
+ var tasks = [];
+ function eachTest(i) {
+ var index = i;
+ return function (next) {
+ finished++;
+ next(null, index);
+ };
+ }
+ for (var i = 0; i < 10; i++) {
+ tasks[i] = eachTest(i);
+ }
+ async.race(tasks, function (err, result) {
+ assert.ifError(err);
+ //0 finished first
+ assert.strictEqual(result, 0);
+ assert.strictEqual(finished, 1);
+ async.setImmediate(function () {
+ assert.strictEqual(finished, 10);
+ done();
+ });
+ });
+ });
+ it('should callback with the first error', function raceTest20(done) {
+ var tasks = [];
+ function eachTest(i) {
+ var index = i;
+ return function (next) {
+ setTimeout(function () {
+ next(new Error('ERR' + index));
+ }, 50 - index * 2);
+ };
+ }
+ for (var i = 0; i <= 5; i++) {
+ tasks[i] = eachTest(i);
+ }
+ async.race(tasks, function (err, result) {
+ assert.ok(err);
+ assert.ok(err instanceof Error);
+ assert.strictEqual(typeof result, 'undefined');
+ assert.strictEqual(err.message, 'ERR5');
+ done();
+ });
+ });
+ it('should callback when task is empty', function raceTest30(done) {
+ async.race([], function (err, result) {
+ assert.ifError(err);
+ assert.strictEqual(typeof result, 'undefined');
+ done();
+ });
+ });
+ it('should callback in error the task arg is not an Array', function raceTest40() {
+ var errors = [];
+ async.race(null, function (err) {
+ errors.push(err);
+ });
+ async.race({}, function (err) {
+ errors.push(err);
+ });
+ assert.strictEqual(errors.length, 2);
+ assert.ok(errors[0] instanceof TypeError);
+ assert.ok(errors[1] instanceof TypeError);
+ });
+});
+