array-length-setter.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. describe("errors", () => {
  2. test("invalid array length value", () => {
  3. var a = [1, 2, 3];
  4. [undefined, "foo", -1, Infinity, -Infinity, NaN].forEach(value => {
  5. expect(() => {
  6. a.length = value;
  7. }).toThrowWithMessage(RangeError, "Invalid array length");
  8. expect(a).toHaveLength(3);
  9. });
  10. });
  11. });
  12. describe("normal behavior", () => {
  13. test("extend array by setting length", () => {
  14. var a = [1, 2, 3];
  15. a.length = 5;
  16. expect(a).toEqual([1, 2, 3, undefined, undefined]);
  17. });
  18. test("truncate array by setting length", () => {
  19. var a = [1, 2, 3];
  20. a.length = 2;
  21. expect(a).toEqual([1, 2]);
  22. a.length = 0;
  23. expect(a).toEqual([]);
  24. });
  25. test("length value is coerced to number if possible", () => {
  26. var a = [1, 2, 3];
  27. a.length = "42";
  28. expect(a).toHaveLength(42);
  29. a.length = [];
  30. expect(a).toHaveLength(0);
  31. a.length = true;
  32. expect(a).toHaveLength(1);
  33. });
  34. test("setting a huge array length", () => {
  35. var a = [];
  36. a.length = 0x80000000;
  37. expect(a.length).toEqual(0x80000000);
  38. var b = [];
  39. b.length = 0x80000001;
  40. expect(b.length).toEqual(0x80000001);
  41. });
  42. });