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