123456789101112131415161718192021222324252627282930313233343536373839 |
- describe("[[IsExtensible]] trap normal behavior", () => {
- test("forwarding when not defined in handler", () => {
- expect(Object.isExtensible(new Proxy({}, { isExtensible: null }))).toBeTrue();
- expect(Object.isExtensible(new Proxy({}, { isExtensible: undefined }))).toBeTrue();
- expect(Object.isExtensible(new Proxy({}, {}))).toBeTrue();
- });
- test("correct arguments supplied to trap", () => {
- let o = {};
- let p = new Proxy(o, {
- isExtensible(target) {
- expect(target).toBe(o);
- return true;
- },
- });
- expect(Object.isExtensible(p)).toBeTrue();
- });
- });
- describe("[[Call]] invariants", () => {
- test("return value must match the target's extensibility", () => {
- let o = {};
- Object.preventExtensions(o);
- let p = new Proxy(o, {
- isExtensible() {
- return true;
- },
- });
- expect(() => {
- Object.isExtensible(p);
- }).toThrowWithMessage(
- TypeError,
- "Proxy handler's isExtensible trap violates invariant: return value must match the target's extensibility"
- );
- });
- });
|