Object.preventExtensions.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. describe("correct behavior", () => {
  2. test("non-object arguments", () => {
  3. expect(Object.preventExtensions()).toBeUndefined();
  4. expect(Object.preventExtensions(undefined)).toBeUndefined();
  5. expect(Object.preventExtensions(null)).toBeNull();
  6. expect(Object.preventExtensions(true)).toBeTrue();
  7. expect(Object.preventExtensions(6)).toBe(6);
  8. expect(Object.preventExtensions("test")).toBe("test");
  9. let s = Symbol();
  10. expect(Object.preventExtensions(s)).toBe(s);
  11. });
  12. test("basic functionality", () => {
  13. let o = { foo: "foo" };
  14. expect(o.foo).toBe("foo");
  15. o.bar = "bar";
  16. expect(o.bar).toBe("bar");
  17. expect(Object.preventExtensions(o)).toBe(o);
  18. expect(o.foo).toBe("foo");
  19. expect(o.bar).toBe("bar");
  20. o.baz = "baz";
  21. expect(o.baz).toBeUndefined();
  22. });
  23. test("modifying existing properties", () => {
  24. const o = { foo: "bar" };
  25. Object.preventExtensions(o);
  26. o.foo = "baz";
  27. expect(o.foo).toBe("baz");
  28. });
  29. test("deleting existing properties", () => {
  30. const o = { foo: "bar" };
  31. Object.preventExtensions(o);
  32. delete o.foo;
  33. expect(o).not.toHaveProperty("foo");
  34. });
  35. });
  36. describe("errors", () => {
  37. test("defining a property on a non-extensible object", () => {
  38. let o = {};
  39. Object.preventExtensions(o);
  40. expect(() => {
  41. Object.defineProperty(o, "baz", { value: "baz" });
  42. }).toThrowWithMessage(TypeError, "Object's [[DefineOwnProperty]] method returned false");
  43. expect(o.baz).toBeUndefined();
  44. });
  45. test("putting property on a non-extensible object", () => {
  46. let o = {};
  47. Object.preventExtensions(o);
  48. expect(() => {
  49. "use strict";
  50. o.foo = "foo";
  51. }).toThrowWithMessage(TypeError, "Cannot set property 'foo' of [object Object]");
  52. expect((o.foo = "foo")).toBe("foo");
  53. expect(o.foo).toBeUndefined();
  54. });
  55. });