test262/implementation-contributed/javascriptcore/stress/array-concat-fast-spread-proxy.js
test262-automation e9a5a7f918 [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time) (#1620)
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
2018-07-03 15:59:58 -04:00

42 lines
1.1 KiB
JavaScript

// 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";
}