Proxy.handler-preventExtensions.js 1.3 KB

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