| 
									
										
										
										
											2020-07-04 18:56:48 +01:00
										 |  |  | describe("errors", () => { | 
					
						
							|  |  |  |     test("invalid array length value", () => { | 
					
						
							|  |  |  |         var a = [1, 2, 3]; | 
					
						
							|  |  |  |         [undefined, "foo", -1, Infinity, -Infinity, NaN].forEach(value => { | 
					
						
							|  |  |  |             expect(() => { | 
					
						
							|  |  |  |                 a.length = value; | 
					
						
							|  |  |  |             }).toThrowWithMessage(RangeError, "Invalid array length"); | 
					
						
							|  |  |  |             expect(a).toHaveLength(3); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | }); | 
					
						
							| 
									
										
										
										
											2020-07-06 07:37:45 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-04 18:56:48 +01:00
										 |  |  | describe("normal behavior", () => { | 
					
						
							|  |  |  |     test("extend array by setting length", () => { | 
					
						
							|  |  |  |         var a = [1, 2, 3]; | 
					
						
							|  |  |  |         a.length = 5; | 
					
						
							|  |  |  |         expect(a).toEqual([1, 2, 3, undefined, undefined]); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-07-06 07:37:45 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-04 18:56:48 +01:00
										 |  |  |     test("truncate array by setting length", () => { | 
					
						
							|  |  |  |         var a = [1, 2, 3]; | 
					
						
							|  |  |  |         a.length = 2; | 
					
						
							|  |  |  |         expect(a).toEqual([1, 2]); | 
					
						
							|  |  |  |         a.length = 0; | 
					
						
							|  |  |  |         expect(a).toEqual([]); | 
					
						
							| 
									
										
										
										
											2020-07-06 07:37:45 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-04 18:56:48 +01:00
										 |  |  |     test("length value is coerced to number if possible", () => { | 
					
						
							|  |  |  |         var a = [1, 2, 3]; | 
					
						
							|  |  |  |         a.length = "42"; | 
					
						
							|  |  |  |         expect(a).toHaveLength(42); | 
					
						
							|  |  |  |         a.length = []; | 
					
						
							|  |  |  |         expect(a).toHaveLength(0); | 
					
						
							|  |  |  |         a.length = true; | 
					
						
							|  |  |  |         expect(a).toHaveLength(1); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2021-03-30 13:32:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     test("setting a huge array length", () => { | 
					
						
							|  |  |  |         var a = []; | 
					
						
							|  |  |  |         a.length = 0x80000000; | 
					
						
							|  |  |  |         expect(a.length).toEqual(0x80000000); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var b = []; | 
					
						
							|  |  |  |         b.length = 0x80000001; | 
					
						
							|  |  |  |         expect(b.length).toEqual(0x80000001); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2021-06-25 16:55:38 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     test("should not remove non-configurable values", () => { | 
					
						
							|  |  |  |         var a = [1, undefined, 3]; | 
					
						
							|  |  |  |         Object.defineProperty(a, 1, { configurable: false, value: 2 }); | 
					
						
							|  |  |  |         expect(a.length).toEqual(3); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect((a.length = 1)).toEqual(1); | 
					
						
							|  |  |  |         expect(a.length).toEqual(2); | 
					
						
							|  |  |  |         expect(a[1]).toEqual(2); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-07-04 18:56:48 +01:00
										 |  |  | }); |