delete-basic.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. test("deleting object properties", () => {
  2. const o = {};
  3. o.x = 1;
  4. o.y = 2;
  5. o.z = 3;
  6. expect(Object.getOwnPropertyNames(o)).toHaveLength(3);
  7. expect(delete o.x).toBeTrue();
  8. expect(o.hasOwnProperty("x")).toBeFalse();
  9. expect(o.hasOwnProperty("y")).toBeTrue();
  10. expect(o.hasOwnProperty("z")).toBeTrue();
  11. expect(Object.getOwnPropertyNames(o)).toHaveLength(2);
  12. expect(delete o.y).toBeTrue();
  13. expect(o.hasOwnProperty("x")).toBeFalse();
  14. expect(o.hasOwnProperty("y")).toBeFalse();
  15. expect(o.hasOwnProperty("z")).toBeTrue();
  16. expect(Object.getOwnPropertyNames(o)).toHaveLength(1);
  17. expect(delete o.z).toBeTrue();
  18. expect(o.hasOwnProperty("x")).toBeFalse();
  19. expect(o.hasOwnProperty("y")).toBeFalse();
  20. expect(o.hasOwnProperty("z")).toBeFalse();
  21. expect(Object.getOwnPropertyNames(o)).toHaveLength(0);
  22. });
  23. test("deleting array indices", () => {
  24. const a = [3, 5, 7];
  25. expect(Object.getOwnPropertyNames(a)).toHaveLength(4);
  26. expect(delete a[0]).toBeTrue();
  27. expect(a.hasOwnProperty(0)).toBeFalse();
  28. expect(a.hasOwnProperty(1)).toBeTrue();
  29. expect(a.hasOwnProperty(2)).toBeTrue();
  30. expect(Object.getOwnPropertyNames(a)).toHaveLength(3);
  31. expect(delete a[1]).toBeTrue();
  32. expect(a.hasOwnProperty(0)).toBeFalse();
  33. expect(a.hasOwnProperty(1)).toBeFalse();
  34. expect(a.hasOwnProperty(2)).toBeTrue();
  35. expect(Object.getOwnPropertyNames(a)).toHaveLength(2);
  36. expect(delete a[2]).toBeTrue();
  37. expect(a.hasOwnProperty(0)).toBeFalse();
  38. expect(a.hasOwnProperty(1)).toBeFalse();
  39. expect(a.hasOwnProperty(2)).toBeFalse();
  40. expect(Object.getOwnPropertyNames(a)).toHaveLength(1);
  41. expect(delete a["42"]).toBeTrue();
  42. expect(Object.getOwnPropertyNames(a)).toHaveLength(1);
  43. });
  44. test("deleting non-configurable property", () => {
  45. const q = {};
  46. Object.defineProperty(q, "foo", { value: 1, writable: false, enumerable: false });
  47. expect(q.foo).toBe(1);
  48. expect(delete q.foo).toBeFalse();
  49. expect(q.hasOwnProperty("foo")).toBeTrue();
  50. });