mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 01:02:45 +00:00 
			
		
		
		
	 260d2099da
			
		
	
	
		260d2099da
		
	
	
	
	
		
			
			This fixes all failing Date.UTC test262 tests, which failed due to not handling invalid input and evaluating inputs out of order. But this also avoids using timegm(), which doesn't work on macOS for years before 1900 (they simply return -1 for those years). Partially addresses #4651. Date.parse.js still fails.
		
			
				
	
	
		
			72 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| test("length is 7", () => {
 | |
|     expect(Date.UTC).toHaveLength(7);
 | |
| });
 | |
| 
 | |
| test("basic functionality", () => {
 | |
|     expect(Date.UTC(2020)).toBe(1577836800000);
 | |
|     expect(Date.UTC(2000, 10)).toBe(973036800000);
 | |
|     expect(Date.UTC(1980, 5, 30)).toBe(331171200000);
 | |
|     expect(Date.UTC(1980, 5, 30, 13)).toBe(331218000000);
 | |
|     expect(Date.UTC(1970, 5, 30, 13, 30)).toBe(15600600000);
 | |
|     expect(Date.UTC(1970, 0, 1, 0, 0, 59)).toBe(59000);
 | |
|     expect(Date.UTC(1970, 0, 1, 0, 0, 0, 999)).toBe(999);
 | |
| 
 | |
|     expect(Date.UTC(1969, 11, 31, 23, 59, 59, 817)).toBe(-183);
 | |
| 
 | |
|     expect(Date.UTC(1799, 0)).toBe(-5396198400000);
 | |
|     expect(Date.UTC(1800, 0)).toBe(-5364662400000);
 | |
|     expect(Date.UTC(1801, 0)).toBe(-5333126400000);
 | |
|     expect(Date.UTC(1802, 0)).toBe(-5301590400000);
 | |
|     expect(Date.UTC(1803, 0)).toBe(-5270054400000);
 | |
|     expect(Date.UTC(1804, 0)).toBe(-5238518400000);
 | |
| 
 | |
|     expect(Date.UTC(1999, 0)).toBe(915148800000);
 | |
|     expect(Date.UTC(2000, 0)).toBe(946684800000);
 | |
|     expect(Date.UTC(2001, 0)).toBe(978307200000);
 | |
|     expect(Date.UTC(2002, 0)).toBe(1009843200000);
 | |
|     expect(Date.UTC(2003, 0)).toBe(1041379200000);
 | |
|     expect(Date.UTC(2004, 0)).toBe(1072915200000);
 | |
| 
 | |
|     expect(Date.UTC(20000, 0)).toBe(568971820800000);
 | |
| });
 | |
| 
 | |
| test("leap year", () => {
 | |
|     expect(Date.UTC(2020, 2, 1)).toBe(1583020800000);
 | |
| });
 | |
| 
 | |
| test("out of range", () => {
 | |
|     expect(Date.UTC(2020, -20)).toBe(1525132800000);
 | |
|     expect(Date.UTC(2020, 20)).toBe(1630454400000);
 | |
| 
 | |
|     expect(Date.UTC(2020, 1, -10)).toBe(1579564800000);
 | |
|     expect(Date.UTC(2020, 1, 40)).toBe(1583884800000);
 | |
| 
 | |
|     expect(Date.UTC(2020, 1, 15, -50)).toBe(1581544800000);
 | |
|     expect(Date.UTC(2020, 1, 15, 50)).toBe(1581904800000);
 | |
| 
 | |
|     expect(Date.UTC(2020, 1, 15, 12, -123)).toBe(1581760620000);
 | |
|     expect(Date.UTC(2020, 1, 15, 12, 123)).toBe(1581775380000);
 | |
| 
 | |
|     expect(Date.UTC(2020, 1, 15, 12, 30, -123)).toBe(1581769677000);
 | |
|     expect(Date.UTC(2020, 1, 15, 12, 30, 123)).toBe(1581769923000);
 | |
| 
 | |
|     expect(Date.UTC(2020, 1, 15, 12, 30, 30, -2345)).toBe(1581769827655);
 | |
|     expect(Date.UTC(2020, 1, 15, 12, 30, 30, 2345)).toBe(1581769832345);
 | |
| });
 | |
| 
 | |
| test("special values", () => {
 | |
|     [Infinity, -Infinity, NaN].forEach(value => {
 | |
|         expect(Date.UTC(value)).toBeNaN();
 | |
|         expect(Date.UTC(0, value)).toBeNaN();
 | |
|         expect(Date.UTC(0, 0, value)).toBeNaN();
 | |
|         expect(Date.UTC(0, 0, 1, value)).toBeNaN();
 | |
|         expect(Date.UTC(0, 0, 1, 0, value)).toBeNaN();
 | |
|         expect(Date.UTC(0, 0, 1, 0, 0, value)).toBeNaN();
 | |
|         expect(Date.UTC(0, 0, 1, 0, 0, 0, value)).toBeNaN();
 | |
|     });
 | |
| });
 | |
| 
 | |
| test("time clip", () => {
 | |
|     expect(Date.UTC(275760, 8, 13, 0, 0, 0, 0)).toBe(8.64e15);
 | |
|     expect(Date.UTC(275760, 8, 13, 0, 0, 0, 1)).toBeNaN();
 | |
| });
 |