"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; } ); });