blob: dc3c42ed12b54f1d91d2674d3153c4796f38d60c [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 = { preventExtensions: 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 = { preventExtensions: 42 };
41 var proxy = new Proxy(target, handler);
42
43 assertThrows(() => {Reflect.preventExtensions(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 // Trap returns falsish.
63
64 var target = {};
65 var handler = { preventExtensions() {return 0} };
66 var proxy = new Proxy(target, handler);
67
68 assertFalse(Reflect.preventExtensions(proxy));
69 Reflect.preventExtensions(target);
70 assertFalse(Reflect.preventExtensions(proxy));
71})();
72
73
74(function () {
75 var target = {};
76 var handler = { preventExtensions() {return Symbol()} };
77 var proxy = new Proxy(target, handler);
78
79 // Trap returns trueish but target is extensible.
80 assertThrows(() => {Reflect.preventExtensions(proxy)}, TypeError);
81
82 // Trap returns trueish and target is not extensible.
83 Reflect.preventExtensions(target);
84 assertTrue(Reflect.preventExtensions(proxy));
85})();