Proxy.handler-deleteProperty.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. load("test-common.js");
  2. try {
  3. assert(delete (new Proxy({}, { deleteProperty: undefined })).foo === true);
  4. assert(delete (new Proxy({}, { deleteProperty: null })).foo === true);
  5. assert(delete (new Proxy({}, {})).foo === true);
  6. let o = {};
  7. let p = new Proxy(o, {
  8. deleteProperty(target, property) {
  9. assert(target === o);
  10. assert(property === "foo");
  11. return true;
  12. }
  13. });
  14. delete p.foo;
  15. o = { foo: 1, bar: 2 };
  16. p = new Proxy(o, {
  17. deleteProperty(target, property) {
  18. if (property === "foo") {
  19. delete target[property];
  20. return true;
  21. }
  22. return false;
  23. }
  24. });
  25. assert(delete p.foo === true);
  26. assert(delete p.bar === false);
  27. assert(o.foo === undefined);
  28. assert(o.bar === 2);
  29. // Invariants
  30. o = {};
  31. Object.defineProperty(o, "foo", { configurable: false });
  32. p = new Proxy(o, {
  33. deleteProperty() {
  34. return true;
  35. },
  36. });
  37. assertThrowsError(() => {
  38. delete p.foo;
  39. }, {
  40. error: TypeError,
  41. message: "Proxy handler's deleteProperty trap violates invariant: cannot report a non-configurable own property of the target as deleted",
  42. });
  43. console.log("PASS");
  44. } catch (e) {
  45. console.log("FAIL: " + e);
  46. }