blob: b7614eb1c1dfb486768810a8f1c42a80a2e4a6fc [file] [log] [blame]
function testTypeError(script, message) {
var error = null;
try {
eval(script);
} catch (e) {
error = e;
}
if (!error)
throw new Error("Expected type error not thrown by `" + script + "`");
if (String(error) !== message)
throw new Error("Bad error: " + String(error));
}
function testOK(script) {
var error = null;
try {
eval(script);
} catch (e) {
error = e;
}
if (error)
throw new Error("Bad error: " + String(error));
}
testTypeError(`({ } = null)`, "TypeError: Right side of assignment cannot be destructured");
testTypeError(`({ a } = null)`, "TypeError: Right side of assignment cannot be destructured");
testTypeError(`({ a: { b } = null } = { })`, "TypeError: Right side of assignment cannot be destructured");
testTypeError(`({ a: { b } } = { a: null })`, "TypeError: Right side of assignment cannot be destructured");
testTypeError(`({ } = undefined)`, "TypeError: Right side of assignment cannot be destructured");
testTypeError(`({ a } = undefined)`, "TypeError: Right side of assignment cannot be destructured");
testTypeError(`({ a: { b } = undefined } = { })`, "TypeError: Right side of assignment cannot be destructured");
testTypeError(`({ a: { b } } = { a: undefined })`, "TypeError: Right side of assignment cannot be destructured");
testOK(`({ } = 123)`);
testOK(`({ a } = 123)`);
testOK(`({ a: { b } = 123 } = { })`);
testOK(`({ a: { b } } = { a: 123 })`);
testOK(`({ } = 0.5)`);
testOK(`({ a } = 0.5)`);
testOK(`({ a: { b } = 0.5 } = { })`);
testOK(`({ a: { b } } = { a: 0.5 })`);
testOK(`({ } = NaN)`);
testOK(`({ a } = NaN)`);
testOK(`({ a: { b } = NaN } = { })`);
testOK(`({ a: { b } } = { a: NaN })`);
testOK(`({ } = true)`);
testOK(`({ a } = true)`);
testOK(`({ a: { b } = true } = { })`);
testOK(`({ a: { b } } = { a: true })`);
testOK(`({ } = {})`);
testOK(`({ a } = {})`);
testOK(`({ a: { b } = {} } = { })`);
testOK(`({ a: { b } } = { a: {} })`);
testOK(`({ } = [])`);
testOK(`({ a } = [])`);
testOK(`({ a: { b } = [] } = { })`);
testOK(`({ a: { b } } = { a: [] })`);
testOK(`({ } = /1/)`);
testOK(`({ a } = /1/)`);
testOK(`({ a: { b } = /1/ } = { })`);
testOK(`({ a: { b } } = { a: /1/ })`);
testOK(`({ } = makeMasquerader())`);
testOK(`({ a } = makeMasquerader())`);
testOK(`({ a: { b } = makeMasquerader() } = { })`);
testOK(`({ a: { b } } = { a: makeMasquerader() })`);