node/deps/v8/test/mjsunit/strong/object-freeze-property.js
Ali Ijaz Sheikh 9fddd83cf9 deps: upgrade V8 to 4.5.103.24
Upgrade to the latest branch-head for V8 4.5. For the full commit log see
https://github.com/v8/v8-git-mirror/commits/4.5.103.24

PR-URL: https://github.com/nodejs/node/pull/2509
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-09-06 21:38:01 +10:00

76 lines
2.1 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: --strong-mode --allow-natives-syntax
// TODO(conradw): Track implementation of strong bit for other objects, add
// tests.
function getSloppyObjects() {
return [(function(){}), ({})];
}
function getStrictObjects() {
"use strict";
return [(function(){}), ({})];
}
function getStrongObjects() {
"use strong";
// Strong functions can't have properties added to them.
return [{}];
}
(function testStrongObjectFreezePropValid() {
"use strict";
let strongObjects = getStrongObjects();
for (let o of strongObjects) {
Object.defineProperty(o, "foo", { configurable: true, writable: true });
assertDoesNotThrow(
function() {
"use strong";
Object.defineProperty(o, "foo", {configurable: true, writable: false });
});
}
})();
(function testStrongObjectFreezePropInvalid() {
"use strict";
let sloppyObjects = getSloppyObjects();
let strictObjects = getStrictObjects();
let strongObjects = getStrongObjects();
let weakObjects = sloppyObjects.concat(strictObjects);
for (let o of weakObjects) {
Object.defineProperty(o, "foo", { writable: true });
assertDoesNotThrow(
function() {
"use strong";
Object.defineProperty(o, "foo", { writable: false });
});
}
for (let o of strongObjects) {
function defProp(o) {
Object.defineProperty(o, "foo", { writable: false });
}
function defProps(o) {
Object.defineProperties(o, { "foo": { writable: false } });
}
function freezeProp(o) {
Object.freeze(o);
}
Object.defineProperty(o, "foo", { writable: true });
for (let func of [defProp, defProps, freezeProp]) {
assertThrows(function(){func(o)}, TypeError);
assertThrows(function(){func(o)}, TypeError);
assertThrows(function(){func(o)}, TypeError);
%OptimizeFunctionOnNextCall(func);
assertThrows(function(){func(o)}, TypeError);
%DeoptimizeFunction(func);
assertThrows(function(){func(o)}, TypeError);
}
}
})();