Files
taimed/node_modules/promises-aplus-tests/lib/tests/2.3.4.js
2025-07-24 17:21:45 +08:00

70 lines
2.3 KiB
JavaScript

"use strict";
var assert = require("assert");
var testFulfilled = require("./helpers/testThreeCases").testFulfilled;
var testRejected = require("./helpers/testThreeCases").testRejected;
var dummy = { dummy: "dummy" }; // we fulfill or reject with this when we don't intend to test against it
describe("2.3.4: If `x` is not an object or function, fulfill `promise` with `x`", function () {
function testValue(expectedValue, stringRepresentation, beforeEachHook, afterEachHook) {
describe("The value is " + stringRepresentation, function () {
if (typeof beforeEachHook === "function") {
beforeEach(beforeEachHook);
}
if (typeof afterEachHook === "function") {
afterEach(afterEachHook);
}
testFulfilled(dummy, function (promise1, done) {
var promise2 = promise1.then(function onFulfilled() {
return expectedValue;
});
promise2.then(function onPromise2Fulfilled(actualValue) {
assert.strictEqual(actualValue, expectedValue);
done();
});
});
testRejected(dummy, function (promise1, done) {
var promise2 = promise1.then(null, function onRejected() {
return expectedValue;
});
promise2.then(function onPromise2Fulfilled(actualValue) {
assert.strictEqual(actualValue, expectedValue);
done();
});
});
});
}
testValue(undefined, "`undefined`");
testValue(null, "`null`");
testValue(false, "`false`");
testValue(true, "`true`");
testValue(0, "`0`");
testValue(
true,
"`true` with `Boolean.prototype` modified to have a `then` method",
function () {
Boolean.prototype.then = function () {};
},
function () {
delete Boolean.prototype.then;
}
);
testValue(
1,
"`1` with `Number.prototype` modified to have a `then` method",
function () {
Number.prototype.then = function () {};
},
function () {
delete Number.prototype.then;
}
);
});