| function assert(b) { |
| if (!b) |
| throw new Error("Bad assertion.") |
| } |
| |
| function test(f) { |
| for (let i = 0; i < 500; i++) |
| f(); |
| } |
| |
| test(function() { |
| let proxy = new Proxy([], {}); |
| assert(Array.isArray(proxy)); |
| }); |
| |
| test(function() { |
| let {proxy, revoke} = Proxy.revocable([], {}); |
| assert(Array.isArray(proxy)); |
| |
| revoke(); |
| let threw = false; |
| try { |
| Array.isArray(proxy); |
| } catch(e) { |
| threw = true; |
| assert(e.toString() === "TypeError: Array.isArray cannot be called on a Proxy that has been revoked"); |
| } |
| assert(threw); |
| }); |
| |
| test(function() { |
| let proxyChain = new Proxy([], {}); |
| for (let i = 0; i < 400; i++) |
| proxyChain = new Proxy(proxyChain, {}); |
| assert(Array.isArray(proxyChain)); |
| }); |
| |
| test(function() { |
| let proxyChain = new Proxy([], {}); |
| let revoke = null; |
| for (let i = 0; i < 400; i++) { |
| if (i !== 250) { |
| proxyChain = new Proxy(proxyChain, {}); |
| } else { |
| let result = Proxy.revocable(proxyChain, {}); |
| proxyChain = result.proxy; |
| revoke = result.revoke; |
| } |
| } |
| assert(Array.isArray(proxyChain)); |
| |
| revoke(); |
| let threw = false; |
| try { |
| Array.isArray(proxyChain); |
| } catch(e) { |
| threw = true; |
| assert(e.toString() === "TypeError: Array.isArray cannot be called on a Proxy that has been revoked"); |
| } |
| assert(threw); |
| }); |