v8/test/mjsunit/es6/proxies-prevent-extensions.js
adamk 249bf75e0c Remove runtime flags for Proxy and Reflect
Both of them shipped in Chrome 49 without incident.

Also move relevant tests from harmony/ to es6/.

Review URL: https://codereview.chromium.org/1815773002

Cr-Commit-Position: refs/heads/master@{#34964}
2016-03-21 19:40:02 +00:00

86 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.
(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));
})();