blob: eb6ee0665ec51dde1f4c1a7ae5498924fac14ebe [file] [log] [blame]
// This file tests is concat spreadable when taking the fast path
// (single argument, JSArray receiver)
function arrayEq(a, b) {
if (a.length !== b.length)
return false;
for (let i = 0; i < a.length; i++) {
if (a[i] !== b[i])
return false;
}
return true;
}
{
let array = [1,2,3];
let {proxy:p, revoke} = Proxy.revocable([4, 5], {});
// Test it works with proxies by default
for (let i = 0; i < 10000; i++) {
if (!arrayEq(Array.prototype.concat.call(array, p), [1,2,3,4,5]))
throw "failed normally with a proxy"
}
// Test it works with spreadable false.
p[Symbol.isConcatSpreadable] = false;
for (let i = 0; i < 10000; i++) {
if (!arrayEq(Array.prototype.concat.call(array,p), [1,2,3,p]))
throw "failed with no spread"
}
p[Symbol.isConcatSpreadable] = undefined;
revoke();
passed = true;
try {
Array.prototype.concat.call(array,p);
passed = false;
} catch (e) { }
if (!passed)
throw "failed to throw spreading revoked proxy";
}