Checkpoint before integration and package validation. Assisted-by: SurmAgent:unknown [read] [edit] [bash]
34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
import { assert, assertThrows } from "./assert.js";
|
|
|
|
// ToPropertyDescriptor must propagate an abrupt completion from Get(Obj, "get")
|
|
// or Get(Obj, "set") instead of reporting the callability check.
|
|
|
|
assertThrows(ReferenceError, () => {
|
|
Object.create([], { x: { get get() { unresolvable; } } });
|
|
});
|
|
|
|
assertThrows(ReferenceError, () => {
|
|
Object.create([], { x: { get set() { unresolvable; } } });
|
|
});
|
|
|
|
for (const key of ["get", "set"]) {
|
|
const sentinel = new Error("thrown from the " + key + " accessor");
|
|
const desc = { get [key]() { throw sentinel; } };
|
|
let caught;
|
|
try {
|
|
Object.defineProperty({}, "p", desc);
|
|
} catch (e) {
|
|
caught = e;
|
|
}
|
|
assert(caught, sentinel, "abrupt completion of Get(Obj, \"" + key + "\")");
|
|
}
|
|
|
|
// A non-callable getter/setter still yields a TypeError.
|
|
assertThrows(TypeError, () => Object.defineProperty({}, "p", { get: 1 }));
|
|
assertThrows(TypeError, () => Object.defineProperty({}, "p", { set: 1 }));
|
|
|
|
// Accessors that do return a function keep working.
|
|
const o = {};
|
|
Object.defineProperty(o, "p", { get get() { return () => 42; } });
|
|
assert(o.p, 42);
|