diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/.eslintrc.json | 3 | ||||
| -rw-r--r-- | test/promises.tests.js | 94 |
2 files changed, 96 insertions, 1 deletions
diff --git a/test/.eslintrc.json b/test/.eslintrc.json index 4869f03..5bbc8fa 100644 --- a/test/.eslintrc.json +++ b/test/.eslintrc.json @@ -2,6 +2,7 @@ "globals": { "__dirname": false, "describe": false, - "it": false + "it": false, + "setTimeout": false } } diff --git a/test/promises.tests.js b/test/promises.tests.js index a6e35ac..6497cd3 100644 --- a/test/promises.tests.js +++ b/test/promises.tests.js @@ -3,6 +3,100 @@ var assert = require("assert"); var promises = require("../lib/promises"); var test = require("./test")(module); +test("forEachSeries", { + "empty array resolves immediately without calling function": function() { + return promises.forEachSeries([], function() { + throw new Error(); + }).then(function(result) { + assert.deepStrictEqual(result, undefined); + }); + }, + + "function is called on element after the previous element has been processed": function() { + var log = []; + + return promises.forEachSeries([1, 2, 3], function(element) { + return new promises.Promise(function(resolve) { + log.push(["start", element]); + setTimeout(function() { + log.push(["end", element]); + resolve(); + }, 0); + }); + }).then(function(result) { + assert.deepStrictEqual(result, undefined); + assert.deepStrictEqual(log, [ + ["start", 1], + ["end", 1], + ["start", 2], + ["end", 2], + ["start", 3], + ["end", 3] + ]); + }); + }, + + "processing stops on sync error": function() { + var log = []; + + return promises.forEachSeries([1, 2, 3], function(element) { + return new promises.Promise(function(resolve) { + log.push(["start", element]); + if (element === 2) { + throw new Error("failure"); + } else { + setTimeout(function() { + log.push(["end", element]); + resolve(); + }, 0); + } + }); + }).then( + function() { + assert.fail("Expected rejection"); + }, + function(error) { + assert.strictEqual(error.message, "failure"); + assert.deepStrictEqual(log, [ + ["start", 1], + ["end", 1], + ["start", 2] + ]); + } + ); + }, + + "processing stops on async error": function() { + var log = []; + + return promises.forEachSeries([1, 2, 3], function(element) { + return new promises.Promise(function(resolve, reject) { + log.push(["start", element]); + setTimeout(function() { + if (element === 2) { + reject(new Error("failure")); + } else { + log.push(["end", element]); + resolve(); + } + }, 0); + }); + }).then( + function() { + assert.fail("Expected rejection"); + }, + function(error) { + assert.strictEqual(error.message, "failure"); + assert.deepStrictEqual(log, [ + ["start", 1], + ["end", 1], + ["start", 2] + ]); + } + ); + } +}); + test("try", { "when function succeeds with non-promise then promise is resolved": function() { return promises.try(function() { |
