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

41 lines
1.0 KiB
JavaScript

// This file tests is concat spreadable.
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(array, { get : function(o, k) { return o[k]; } });
// Test it works with proxies by default
for (let i = 0; i < 100000; i++) {
if (!arrayEq(Array.prototype.concat.call(p,p), [1,2,3,1,2,3]))
throw "failed normally with a proxy"
}
// Test it works with spreadable false.
p[Symbol.isConcatSpreadable] = false;
for (let i = 0; i < 100000; i++) {
if (!arrayEq(Array.prototype.concat.call(p,p), [p,p]))
throw "failed with no spread"
}
p[Symbol.isConcatSpreadable] = undefined;
revoke();
passed = true;
try {
Array.prototype.concat.call(p,[]);
passed = false;
} catch (e) { }
if (!passed)
throw "failed to throw spreading revoked proxy";
}