blob: 4bce85ffb6e1f5d61d5c6a1b64073fc6e245352d [file] [log] [blame]
function shouldBe(actual, expected) {
if (actual !== expected)
throw new Error(`bad value: {String(actual)}`);
}
function shouldThrow(func, errorMessage) {
var errorThrown = false;
var error = null;
try {
func();
} catch (e) {
errorThrown = true;
error = e;
}
if (!errorThrown)
throw new Error('not thrown');
if (String(error) !== errorMessage)
throw new Error(`bad error: ${String(error)}`);
}
var executorCalled = false;
shouldThrow(() => {
Promise(function (resolve, reject) { executorCalled = true; });
}, `TypeError: Cannot call a constructor without |new|`);
shouldBe(executorCalled, false);
// But should accept inheriting Promise.
class Deferred extends Promise {
constructor()
{
let resolve, reject;
super(function (aResolve, aReject) {
this.resolve = aResolve;
this.reject = aReject;
});
}
}
{
let deferred = new Deferred();
shouldBe(deferred.__proto__, Deferred.prototype);
shouldBe(deferred.__proto__.__proto__, Promise.prototype);
shouldBe(Deferred.__proto__, Promise);
}