Files
projektuebersicht/node_modules/mammoth/test/promises.tests.js
T
erik 5b20adee48 All new
alle new
2026-10-01 06:46:51 +02:00

239 lines
6.9 KiB
JavaScript

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() {
return "success";
}).then(function(result) {
assert.strictEqual(result, "success");
});
},
"when function succeeds with promise then promise is resolved": function() {
return promises.try(function() {
return promises.resolve("success");
}).then(function(result) {
assert.strictEqual(result, "success");
});
},
"when function throws error then promise is rejected": function() {
return promises.try(function() {
throw new Error("failure");
}).then(
function() {
assert.fail("Expected rejection");
},
function(error) {
assert.strictEqual(error.message, "failure");
}
);
},
"when function fails with promise then promise is rejected": function() {
return promises.try(function() {
return promises.reject(new Error("failure"));
}).then(
function() {
assert.fail("Expected rejection");
},
function(error) {
assert.strictEqual(error.message, "failure");
}
);
}
});
test("props", {
"props({}) resolve to {}": function() {
return promises.props({}).then(function(result) {
assert.deepStrictEqual(result, {});
});
},
"when object has promise values then props returns with all values resolved": function() {
return promises.props({
a: promises.resolve(1),
b: promises.resolve(2),
c: promises.resolve(3)
}).then(function(result) {
assert.deepStrictEqual(result, {
a: 1,
b: 2,
c: 3
});
});
},
"when object has non-promise values then props returns with same values": function() {
return promises.props({
a: 1,
b: 2,
c: 3
}).then(function(result) {
assert.deepStrictEqual(result, {
a: 1,
b: 2,
c: 3
});
});
},
"when value is rejected promise then props is rejected promise": function() {
return promises.props({
a: promises.resolve(1),
b: promises.reject(new Error("failure")),
c: promises.resolve(3)
}).then(
function(result) {
assert.fail("Expected rejection");
},
function(error) {
assert.strictEqual(error.message, "failure");
}
);
},
"props(...).also(...) can be used to add props": function() {
return promises.props({
a: promises.resolve(1)
}).also(function(result) {
return {
b: result.a + 1
};
}).then(function(result) {
assert.deepStrictEqual(result, {
a: 1,
b: 2
});
});
},
"also can be used multiple times": function() {
return promises.props({
a: promises.resolve(1)
}).also(function(result) {
return {
b: result.a + 1
};
}).also(function(result) {
return {
c: result.b + 1
};
}).then(function(result) {
assert.deepStrictEqual(result, {
a: 1,
b: 2,
c: 3
});
});
}
});
test("toExternalPromise() returns promise with .done()", function() {
var nativePromise = Promise.resolve("hello");
var externalPromise = promises.toExternalPromise(nativePromise);
externalPromise.done();
externalPromise.then().done();
});