Index: test/mjsunit/harmony/proxies-prevent-extensions.js |
diff --git a/test/mjsunit/harmony/proxies-prevent-extensions.js b/test/mjsunit/harmony/proxies-prevent-extensions.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0d6ae4c101131043bdb1c207e0acaf9b60375860 |
--- /dev/null |
+++ b/test/mjsunit/harmony/proxies-prevent-extensions.js |
@@ -0,0 +1,87 @@ |
+// 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 = { 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)); |
+})(); |