Proxy.handler-isExtensible.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. describe("[[IsExtensible]] trap normal behavior", () => {
  2. test("forwarding when not defined in handler", () => {
  3. expect(Object.isExtensible(new Proxy({}, { isExtensible: null }))).toBeTrue();
  4. expect(Object.isExtensible(new Proxy({}, { isExtensible: undefined }))).toBeTrue();
  5. expect(Object.isExtensible(new Proxy({}, {}))).toBeTrue();
  6. });
  7. test("correct arguments supplied to trap", () => {
  8. let o = {};
  9. let p = new Proxy(o, {
  10. isExtensible(target) {
  11. expect(target).toBe(o);
  12. return true;
  13. },
  14. });
  15. expect(Object.isExtensible(p)).toBeTrue();
  16. });
  17. });
  18. describe("[[Call]] invariants", () => {
  19. test("return value must match the target's extensibility", () => {
  20. let o = {};
  21. Object.preventExtensions(o);
  22. let p = new Proxy(o, {
  23. isExtensible() {
  24. return true;
  25. },
  26. });
  27. expect(() => {
  28. Object.isExtensible(p);
  29. }).toThrowWithMessage(
  30. TypeError,
  31. "Proxy handler's isExtensible trap violates invariant: return value must match the target's extensibility"
  32. );
  33. });
  34. });