1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- describe("[[PreventExtension]] trap normal behavior", () => {
- test("forwarding when not defined in handler", () => {
- let p = new Proxy({}, { preventExtensions: null });
- expect(Object.preventExtensions(p)).toBe(p);
- p = new Proxy({}, { preventExtensions: undefined });
- expect(Object.preventExtensions(p)).toBe(p);
- p = new Proxy({}, {});
- expect(Object.preventExtensions(p)).toBe(p);
- });
- test("correct arguments supplied to trap", () => {
- let o = {};
- p = new Proxy(o, {
- preventExtensions(target) {
- expect(target).toBe(o);
- return true;
- },
- });
- Object.preventExtensions(o);
- Object.preventExtensions(p);
- });
- });
- describe("[[PreventExtensions]] invariants", () => {
- test("cannot return false", () => {
- let p = new Proxy(
- {},
- {
- preventExtensions() {
- return false;
- },
- }
- );
- expect(() => {
- Object.preventExtensions(p);
- }).toThrowWithMessage(TypeError, "Object's [[PreventExtensions]] method returned false");
- });
- test("cannot return true if the target is extensible", () => {
- let o = {};
- let p = new Proxy(o, {
- preventExtensions() {
- return true;
- },
- });
- expect(() => {
- Object.preventExtensions(p);
- }).toThrowWithMessage(
- TypeError,
- "Proxy handler's preventExtensions trap violates invariant: cannot return true if the target object is extensible"
- );
- Object.preventExtensions(o);
- expect(Object.preventExtensions(p)).toBe(p);
- });
- });
|