// 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. // Flags: --harmony-proxies --harmony-reflect (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)); })();