function shouldBe(expected, actual, msg) { if (msg === void 0) msg = ""; else msg = " for " + msg; if (actual !== expected) throw new Error("bad value" + msg + ": " + actual + ". Expected " + expected); } function shouldBeAsync(expected, run, msg) { let actual; var hadError = false; run().then(function(value) { actual = value; }, function(error) { hadError = true; actual = error; }); drainMicrotasks(); if (hadError) throw actual; shouldBe(expected, actual, msg); } function C1() { return async () => await new.target; } function C2() { return async () => { return await new.target }; } function C2WithAwait() { return async () => { var self = new.target; await new.target; return new.target; } } shouldBeAsync(C1, new C1()); shouldBeAsync(undefined, C1()); shouldBeAsync(C2, new C2()); shouldBeAsync(undefined, C2()); shouldBeAsync(C2WithAwait, new C2WithAwait()); shouldBeAsync(undefined, C2WithAwait());