a25018905d
BUG= Review URL: https://codereview.chromium.org/1441043002 Cr-Commit-Position: refs/heads/master@{#32212}
88 lines
2.2 KiB
JavaScript
88 lines
2.2 KiB
JavaScript
// 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));
|
|
})();
|