mirror of https://github.com/tc39/test262.git
52 lines
1.9 KiB
JavaScript
52 lines
1.9 KiB
JavaScript
// Reviewed
|
|
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 shouldThrowAsync(run, errorType, message) {
|
|
let actual;
|
|
var hadError = false;
|
|
run().then(function(value) { actual = value; },
|
|
function(error) { hadError = true; actual = error; });
|
|
drainMicrotasks();
|
|
|
|
if (!hadError)
|
|
throw new Error("Expected " + run + "() to throw " + errorType.name + ", but did not throw.");
|
|
if (!(actual instanceof errorType))
|
|
throw new Error("Expected " + run + "() to throw " + errorType.name + ", but threw '" + actual + "'");
|
|
if (message !== void 0 && actual.message !== message)
|
|
throw new Error("Expected " + run + "() to throw '" + message + "', but threw '" + actual.message + "'");
|
|
}
|
|
|
|
var noArgumentsArrow = async () => await [...arguments];
|
|
shouldThrowAsync(() => noArgumentsArrow(1, 2, 3), ReferenceError);
|
|
var noArgumentsArrow2 = async () => { return await [...arguments]; }
|
|
shouldThrowAsync(() => noArgumentsArrow2(1, 2, 3), ReferenceError);
|
|
|
|
shouldBeAsync("[1,2,3]", () => (function() { return (async () => JSON.stringify([...arguments]))(); })(1, 2, 3));
|
|
shouldBeAsync("[4,5,6]", () => (function() { return (async () => { return JSON.stringify([...await arguments]) })(); })(4, 5, 6));
|
|
|
|
(function testArgumentsBinding() {
|
|
var argsBinding;
|
|
var promise = (function() { argsBinding = arguments; return (async() => arguments)() })(1, 2, 3);
|
|
shouldBeAsync(argsBinding, () => promise);
|
|
})();
|