aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-09-16 23:59:49 +0100
committerMichael Williamson <mike@zwobble.org>2026-09-16 23:59:49 +0100
commit1f6838d2c37acd15331f56b80bdd09ac0aae2405 (patch)
tree9907952475ff0503857cc33bc51b27a3618ad5d6 /test
parenteca69e9212cec84de5aa714fe50a3835a8d6a9c6 (diff)
Add tests around forEachSeries and ensure it resolves to undefined
Diffstat (limited to 'test')
-rw-r--r--test/.eslintrc.json3
-rw-r--r--test/promises.tests.js94
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() {