// 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. // 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 = { preventExtensions: 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 = { preventExtensions: 42 }; var proxy = new Proxy(target, handler); assertThrows(() => { Reflect.preventExtensions(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 () { // Trap returns falsish. var target = {}; var handler = { preventExtensions() { return 0 } }; var proxy = new Proxy(target, handler); assertFalse(Reflect.preventExtensions(proxy)); Reflect.preventExtensions(target); assertFalse(Reflect.preventExtensions(proxy)); })(); (function () { var target = {}; var handler = { preventExtensions() { return Symbol() } }; var proxy = new Proxy(target, handler); // Trap returns trueish but target is extensible. assertThrows(() => { Reflect.preventExtensions(proxy) }, TypeError); // Trap returns trueish and target is not extensible. Reflect.preventExtensions(target); assertTrue(Reflect.preventExtensions(proxy)); })(); (function () { // Target is proxy var object = {}; assertTrue(Reflect.preventExtensions(object)); var target = new Proxy(object, {}); var proxy = new Proxy(target, {}); assertFalse(Reflect.isExtensible(object)); assertFalse(Reflect.isExtensible(target)); assertFalse(Reflect.isExtensible(proxy)); })(); // Object. (function () { // No trap. var target = {}; var handler = {}; var proxy = new Proxy(target, handler); assertTrue(Object.isExtensible(target)); assertTrue(Object.isExtensible(proxy)); assertSame(proxy, Object.preventExtensions(proxy)); assertFalse(Object.isExtensible(target)); assertFalse(Object.isExtensible(proxy)); })(); (function () { // "Undefined" trap. var target = {}; var handler = { preventExtensions: null }; var proxy = new Proxy(target, handler); assertTrue(Object.isExtensible(target)); assertTrue(Object.isExtensible(proxy)); assertSame(proxy, Object.preventExtensions(proxy)); assertFalse(Object.isExtensible(target)); assertFalse(Object.isExtensible(proxy)); })(); (function () { // Invalid trap. var target = {}; var handler = { preventExtensions: 42 }; var proxy = new Proxy(target, handler); assertThrows(() => { Object.preventExtensions(proxy) }, TypeError); })(); (function () { var target = {}; var handler = { isExtensible() { return "bla" } }; var proxy = new Proxy(target, handler); // Trap returns trueish and target is extensible. assertTrue(Object.isExtensible(proxy)); // Trap returns trueish but target is not extensible. assertSame(target, Object.preventExtensions(target)); assertThrows(() => { Object.isExtensible(proxy) }, TypeError); })(); (function () { // Trap returns falsish. var target = {}; var handler = { isExtensible() { return false } }; var proxy = new Proxy(target, handler); assertThrows(() => { Object.isExtensible(proxy) }, TypeError); assertSame(target, Object.preventExtensions(target)); assertFalse(Object.isExtensible(proxy)); })(); (function () { // Trap returns falsish. var target = {}; var handler = { preventExtensions() { return 0 } }; var proxy = new Proxy(target, handler); assertFalse(Reflect.preventExtensions(proxy)); assertSame(target, Object.preventExtensions(target)); assertFalse(Reflect.preventExtensions(proxy)); assertThrows(() => { Object.preventExtensions(proxy) }, TypeError); })(); (function () { var target = {}; var handler = { preventExtensions() { return Symbol() } }; var proxy = new Proxy(target, handler); // Trap returns trueish but target is extensible. assertThrows(() => { Object.preventExtensions(proxy) }, TypeError); // Trap returns trueish and target is not extensible. assertSame(target, Object.preventExtensions(target)); assertTrue(Reflect.preventExtensions(proxy)); })(); (function () { // Target is proxy var object = {}; assertSame(object, Object.preventExtensions(object)); var target = new Proxy(object, {}); var proxy = new Proxy(target, {}); assertFalse(Object.isExtensible(object)); assertFalse(Object.isExtensible(target)); assertFalse(Object.isExtensible(proxy)); })();