| // Copyright 2015 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| |
| (function () { |
| // No trap. |
| |
| var target = {}; |
| var handler = {}; |
| var proxy = new Proxy(target, handler); |
| |
| assertTrue(Reflect.isExtensible(target)); |
| assertTrue(Reflect.isExtensible(proxy)); |
| assertTrue(Reflect.preventExtensions(proxy)); |
| assertFalse(Reflect.isExtensible(target)); |
| assertFalse(Reflect.isExtensible(proxy)); |
| })(); |
| |
| |
| (function () { |
| // "Undefined" trap. |
| |
| var target = {}; |
| var handler = { isExtensible: null }; |
| var proxy = new Proxy(target, handler); |
| |
| assertTrue(Reflect.isExtensible(target)); |
| assertTrue(Reflect.isExtensible(proxy)); |
| assertTrue(Reflect.preventExtensions(proxy)); |
| assertFalse(Reflect.isExtensible(target)); |
| assertFalse(Reflect.isExtensible(proxy)); |
| })(); |
| |
| |
| (function () { |
| // Invalid trap. |
| |
| var target = {}; |
| var handler = { isExtensible: true }; |
| var proxy = new Proxy(target, handler); |
| |
| assertThrows(() => {Reflect.isExtensible(proxy)}, TypeError); |
| })(); |
| |
| |
| (function () { |
| var target = {}; |
| var handler = { isExtensible() {return "bla"} }; |
| var proxy = new Proxy(target, handler); |
| |
| // Trap returns trueish and target is extensible. |
| assertTrue(Reflect.isExtensible(proxy)); |
| |
| // Trap returns trueish but target is not extensible. |
| Reflect.preventExtensions(target); |
| assertThrows(() => {Reflect.isExtensible(proxy)}, TypeError); |
| })(); |
| |
| |
| (function () { |
| var target = {}; |
| var handler = { isExtensible() {return 0} }; |
| var proxy = new Proxy(target, handler); |
| |
| // Trap returns falsish but target is extensible. |
| assertThrows(() => {Reflect.isExtensible(proxy)}, TypeError); |
| |
| // Trap returns falsish and target is not extensible. |
| Reflect.preventExtensions(target); |
| assertFalse(Reflect.isExtensible(proxy)); |
| })(); |