Page MenuHomePhorge

test_object_define_property_generic_descriptor.cjs
No OneTemporary

Size
3 KB
Referenced Files
None
Subscribers
None

test_object_define_property_generic_descriptor.cjs

const assert = require('node:assert');
class AccessorHolder {
constructor() {
this.value = 'nodebuffer';
}
get binaryType() {
return this.value;
}
set binaryType(value) {
this.value = value;
}
}
Object.defineProperty(AccessorHolder.prototype, 'binaryType', { enumerable: true });
const descriptor = Object.getOwnPropertyDescriptor(AccessorHolder.prototype, 'binaryType');
assert.strictEqual(typeof descriptor.get, 'function');
assert.strictEqual(typeof descriptor.set, 'function');
assert.strictEqual(descriptor.enumerable, true);
const holder = new AccessorHolder();
holder.binaryType = 'arraybuffer';
assert.strictEqual(holder.binaryType, 'arraybuffer');
const sym = Symbol('generic-symbol-descriptor');
const obj = {};
Object.defineProperty(obj, sym, { value: 1, configurable: true });
Object.defineProperty(obj, sym, { enumerable: true });
const symDescriptor = Object.getOwnPropertyDescriptor(obj, sym);
assert.strictEqual(symDescriptor.value, 1);
assert.strictEqual(symDescriptor.enumerable, true);
assert.strictEqual(symDescriptor.configurable, true);
assert.strictEqual(symDescriptor.writable, false);
const locked = {};
Object.defineProperty(locked, 'x', { value: 1, configurable: false });
const lockedSym = Symbol('locked');
Object.defineProperty(locked, lockedSym, { value: 1, configurable: false });
function assertThrowsTypeError(fn) {
try {
fn();
} catch (error) {
assert.strictEqual(error instanceof TypeError, true);
return;
}
assert.fail('expected TypeError');
}
assertThrowsTypeError(() => Object.defineProperty(locked, 'x', { configurable: true }));
assertThrowsTypeError(() => Object.defineProperty(locked, lockedSym, { configurable: true }));
const accessorLocked = {};
function originalGetter() { return 1; }
function replacementGetter() { return 2; }
function originalSetter(value) { this.value = value; }
function replacementSetter(value) { this.value = value + 1; }
Object.defineProperty(accessorLocked, 'x', {
get: originalGetter,
set: originalSetter,
configurable: false
});
Object.defineProperty(accessorLocked, 'x', { get: originalGetter });
Object.defineProperty(accessorLocked, 'x', { set: originalSetter });
assertThrowsTypeError(() => Object.defineProperty(accessorLocked, 'x', { get: replacementGetter }));
assertThrowsTypeError(() => Object.defineProperty(accessorLocked, 'x', { set: replacementSetter }));
assertThrowsTypeError(() => Object.defineProperty(accessorLocked, 'x', { value: 1 }));
const dataLocked = {};
Object.defineProperty(dataLocked, 'x', { value: 1, configurable: false });
assertThrowsTypeError(() => Object.defineProperty(dataLocked, 'x', { get: originalGetter }));
const accessorLockedSym = Symbol('locked-accessor');
Object.defineProperty(locked, accessorLockedSym, {
get: originalGetter,
configurable: false
});
assertThrowsTypeError(() => Object.defineProperty(locked, accessorLockedSym, { get: replacementGetter }));
assertThrowsTypeError(() => Object.defineProperty(locked, accessorLockedSym, { value: 1 }));
console.log('object-define-property-generic-descriptor:ok');

File Metadata

Mime Type
application/javascript
Expires
Sun, May 17, 5:54 AM (2 d)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
554542
Default Alt Text
test_object_define_property_generic_descriptor.cjs (3 KB)

Event Timeline