blob: 667af6a6f637495693fccd798e03a0c8f99e3516 [file] [log] [blame]
'use strict';
const assert = require('assert');
module.exports = require('../common').runTest(test);
function test (binding) {
{
const obj = { x: 'a', y: 'b', z: 'c' };
assert.strictEqual(binding.object_freeze_seal.freeze(obj), true);
assert.strictEqual(Object.isFrozen(obj), true);
assert.throws(() => {
obj.x = 10;
}, /Cannot assign to read only property 'x' of object '#<Object>/);
assert.throws(() => {
obj.w = 15;
}, /Cannot add property w, object is not extensible/);
assert.throws(() => {
delete obj.x;
}, /Cannot delete property 'x' of #<Object>/);
}
{
const obj = new Proxy({ x: 'a', y: 'b', z: 'c' }, {
preventExtensions () {
throw new Error('foo');
}
});
assert.throws(() => {
binding.object_freeze_seal.freeze(obj);
}, /foo/);
}
{
const obj = { x: 'a', y: 'b', z: 'c' };
assert.strictEqual(binding.object_freeze_seal.seal(obj), true);
assert.strictEqual(Object.isSealed(obj), true);
assert.throws(() => {
obj.w = 'd';
}, /Cannot add property w, object is not extensible/);
assert.throws(() => {
delete obj.x;
}, /Cannot delete property 'x' of #<Object>/);
// Sealed objects allow updating existing properties,
// so this should not throw.
obj.x = 'd';
}
{
const obj = new Proxy({ x: 'a', y: 'b', z: 'c' }, {
preventExtensions () {
throw new Error('foo');
}
});
assert.throws(() => {
binding.object_freeze_seal.seal(obj);
}, /foo/);
}
}