blob: 9ab2c05f96c61132a0044974ba8675161d090127 [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// Copyright 2015 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00005
6(function () {
7 // No trap.
8
9 var target = {};
10 var handler = {};
11 var proxy = new Proxy(target, handler);
12
13 assertTrue(Reflect.isExtensible(target));
14 assertTrue(Reflect.isExtensible(proxy));
15 assertTrue(Reflect.preventExtensions(proxy));
16 assertFalse(Reflect.isExtensible(target));
17 assertFalse(Reflect.isExtensible(proxy));
18})();
19
20
21(function () {
22 // "Undefined" trap.
23
24 var target = {};
25 var handler = { isExtensible: null };
26 var proxy = new Proxy(target, handler);
27
28 assertTrue(Reflect.isExtensible(target));
29 assertTrue(Reflect.isExtensible(proxy));
30 assertTrue(Reflect.preventExtensions(proxy));
31 assertFalse(Reflect.isExtensible(target));
32 assertFalse(Reflect.isExtensible(proxy));
33})();
34
35
36(function () {
37 // Invalid trap.
38
39 var target = {};
40 var handler = { isExtensible: true };
41 var proxy = new Proxy(target, handler);
42
43 assertThrows(() => {Reflect.isExtensible(proxy)}, TypeError);
44})();
45
46
47(function () {
48 var target = {};
49 var handler = { isExtensible() {return "bla"} };
50 var proxy = new Proxy(target, handler);
51
52 // Trap returns trueish and target is extensible.
53 assertTrue(Reflect.isExtensible(proxy));
54
55 // Trap returns trueish but target is not extensible.
56 Reflect.preventExtensions(target);
57 assertThrows(() => {Reflect.isExtensible(proxy)}, TypeError);
58})();
59
60
61(function () {
62 var target = {};
63 var handler = { isExtensible() {return 0} };
64 var proxy = new Proxy(target, handler);
65
66 // Trap returns falsish but target is extensible.
67 assertThrows(() => {Reflect.isExtensible(proxy)}, TypeError);
68
69 // Trap returns falsish and target is not extensible.
70 Reflect.preventExtensions(target);
71 assertFalse(Reflect.isExtensible(proxy));
72})();