Proxy.handler-deleteProperty.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. describe("[[Delete]] trap normal behavior", () => {
  2. test("forwarding when not defined in handler", () => {
  3. expect(delete (new Proxy({}, { deleteProperty: undefined })).foo).toBe(true);
  4. expect(delete (new Proxy({}, { deleteProperty: null })).foo).toBe(true);
  5. expect(delete (new Proxy({}, {})).foo).toBe(true);
  6. });
  7. test("correct arguments supplied to trap", () => {
  8. let o = {};
  9. let p = new Proxy(o, {
  10. deleteProperty(target, property) {
  11. expect(target).toBe(o);
  12. expect(property).toBe("foo");
  13. return true;
  14. }
  15. });
  16. delete p.foo;
  17. });
  18. test("conditional deletion", () => {
  19. o = { foo: 1, bar: 2 };
  20. p = new Proxy(o, {
  21. deleteProperty(target, property) {
  22. if (property === "foo") {
  23. delete target[property];
  24. return true;
  25. }
  26. return false;
  27. }
  28. });
  29. expect(delete p.foo).toBe(true);
  30. expect(delete p.bar).toBe(false);
  31. expect(o.foo).toBe(undefined);
  32. expect(o.bar).toBe(2);
  33. });
  34. });
  35. describe("[[Delete]] invariants", () => {
  36. test("cannot report a non-configurable own property as deleted", () => {
  37. let o = {};
  38. Object.defineProperty(o, "foo", { configurable: false });
  39. let p = new Proxy(o, {
  40. deleteProperty() {
  41. return true;
  42. },
  43. });
  44. expect(() => {
  45. delete p.foo;
  46. }).toThrowWithMessage(TypeError, "Proxy handler's deleteProperty trap violates invariant: cannot report a non-configurable own property of the target as deleted");
  47. });
  48. });