array-length-setter.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  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. });