mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 21:17:45 +00:00
LibJS Date: Added "Invalid Date".
Setting an invalid value on a Date object now makes it invalid. Setting it again but with correct values makes it valid again.
This commit is contained in:
parent
d231c5e65b
commit
ca49f96b78
29 changed files with 490 additions and 89 deletions
|
@ -24,6 +24,13 @@ test("timestamp constructor", () => {
|
|||
expect(date.getSeconds()).toBe(1);
|
||||
expect(date.getFullYear()).toBe(1970);
|
||||
expect(date.getMonth()).toBe(1); // Feb
|
||||
|
||||
date = new Date(NaN);
|
||||
expect(date.getTime()).toBe(NaN);
|
||||
date = new Date(undefined);
|
||||
expect(date.getTime()).toBe(NaN);
|
||||
date = new Date("");
|
||||
expect(date.getTime()).toBe(NaN);
|
||||
});
|
||||
|
||||
test("tuple constructor", () => {
|
||||
|
@ -52,6 +59,11 @@ test("tuple constructor", () => {
|
|||
let timestamp_upper_bound = 1577750400000; // 2019-12-31T00:00:00Z
|
||||
expect(date.getTime()).toBeGreaterThan(timestamp_lower_bound);
|
||||
expect(date.getTime()).toBeLessThan(timestamp_upper_bound);
|
||||
|
||||
date = new Date(NaN, 11, 15, 9, 16, 14, 123);
|
||||
expect(date.getTime()).toBe(NaN);
|
||||
date = new Date(2021, 11, 15, 9, 16, 14, undefined);
|
||||
expect(date.getTime()).toBe(NaN);
|
||||
});
|
||||
|
||||
test("tuple constructor overflow", () => {
|
||||
|
@ -65,7 +77,7 @@ test("tuple constructor overflow", () => {
|
|||
expect(date.getMilliseconds()).toBe(345);
|
||||
expect(date.getDay()).toBe(4);
|
||||
|
||||
let date = new Date(2019, -13, -33, -30, -70, -80, -2345);
|
||||
date = new Date(2019, -13, -33, -30, -70, -80, -2345);
|
||||
expect(date.getFullYear()).toBe(2017);
|
||||
expect(date.getMonth()).toBe(9);
|
||||
expect(date.getDate()).toBe(26);
|
||||
|
|
|
@ -4,4 +4,5 @@ test("basic functionality", () => {
|
|||
expect(d.getDate()).not.toBeNaN();
|
||||
expect(d.getDate()).toBeGreaterThanOrEqual(1);
|
||||
expect(d.getDate()).toBeLessThanOrEqual(31);
|
||||
expect(new Date(NaN).getDate()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -4,4 +4,5 @@ test("basic functionality", () => {
|
|||
expect(d.getDay()).not.toBeNaN();
|
||||
expect(d.getDay()).toBeGreaterThanOrEqual(0);
|
||||
expect(d.getDay()).toBeLessThanOrEqual(6);
|
||||
expect(new Date(NaN).getDay()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -4,4 +4,5 @@ test("basic functionality", () => {
|
|||
expect(d.getFullYear()).not.toBeNaN();
|
||||
expect(d.getFullYear()).toBe(d.getFullYear());
|
||||
expect(d.getFullYear()).toBeGreaterThanOrEqual(2020);
|
||||
expect(new Date(NaN).getFullYear()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -4,4 +4,5 @@ test("basic functionality", () => {
|
|||
expect(d.getHours()).not.toBeNaN();
|
||||
expect(d.getHours()).toBeGreaterThanOrEqual(0);
|
||||
expect(d.getHours()).toBeLessThanOrEqual(23);
|
||||
expect(new Date(NaN).getHours()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -4,4 +4,5 @@ test("basic functionality", () => {
|
|||
expect(d.getMilliseconds()).not.toBeNaN();
|
||||
expect(d.getMilliseconds()).toBeGreaterThanOrEqual(0);
|
||||
expect(d.getMilliseconds()).toBeLessThanOrEqual(999);
|
||||
expect(new Date(NaN).getMilliseconds()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -4,4 +4,5 @@ test("basic functionality", () => {
|
|||
expect(d.getMinutes()).not.toBeNaN();
|
||||
expect(d.getMinutes()).toBeGreaterThanOrEqual(0);
|
||||
expect(d.getMinutes()).toBeLessThanOrEqual(59);
|
||||
expect(new Date(NaN).getMinutes()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -4,4 +4,5 @@ test("basic functionality", () => {
|
|||
expect(d.getMonth()).not.toBeNaN();
|
||||
expect(d.getMonth()).toBeGreaterThanOrEqual(0);
|
||||
expect(d.getMonth()).toBeLessThanOrEqual(11);
|
||||
expect(new Date(NaN).getMonth()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -4,4 +4,5 @@ test("basic functionality", () => {
|
|||
expect(d.getSeconds()).not.toBeNaN();
|
||||
expect(d.getSeconds()).toBeGreaterThanOrEqual(0);
|
||||
expect(d.getSeconds()).toBeLessThanOrEqual(59);
|
||||
expect(new Date(NaN).getSeconds()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -3,4 +3,5 @@ test("basic functionality", () => {
|
|||
expect(d.getTime()).toBe(d.getTime());
|
||||
expect(d.getTime()).not.toBeNaN();
|
||||
expect(d.getTime()).toBeGreaterThanOrEqual(1580000000000);
|
||||
expect(new Date(NaN).getTime()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -4,4 +4,5 @@ test("basic functionality", () => {
|
|||
expect(d.getUTCDate()).not.toBeNaN();
|
||||
expect(d.getUTCDate()).toBeGreaterThanOrEqual(1);
|
||||
expect(d.getUTCDate()).toBeLessThanOrEqual(31);
|
||||
expect(new Date(NaN).getUTCDate()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -4,4 +4,5 @@ test("basic functionality", () => {
|
|||
expect(d.getUTCDay()).not.toBeNaN();
|
||||
expect(d.getUTCDay()).toBeGreaterThanOrEqual(0);
|
||||
expect(d.getUTCDay()).toBeLessThanOrEqual(6);
|
||||
expect(new Date(NaN).getUTCDay()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -4,4 +4,5 @@ test("basic functionality", () => {
|
|||
expect(d.getUTCFullYear()).not.toBeNaN();
|
||||
expect(d.getUTCFullYear()).toBe(d.getUTCFullYear());
|
||||
expect(d.getUTCFullYear()).toBeGreaterThanOrEqual(2020);
|
||||
expect(new Date(NaN).getUTCFullYear()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -4,4 +4,5 @@ test("basic functionality", () => {
|
|||
expect(d.getUTCHours()).not.toBeNaN();
|
||||
expect(d.getUTCHours()).toBeGreaterThanOrEqual(0);
|
||||
expect(d.getUTCHours()).toBeLessThanOrEqual(23);
|
||||
expect(new Date(NaN).getUTCHours()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -4,4 +4,5 @@ test("basic functionality", () => {
|
|||
expect(d.getUTCMilliseconds()).not.toBeNaN();
|
||||
expect(d.getUTCMilliseconds()).toBeGreaterThanOrEqual(0);
|
||||
expect(d.getUTCMilliseconds()).toBeLessThanOrEqual(999);
|
||||
expect(new Date(NaN).getUTCMilliseconds()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -4,4 +4,5 @@ test("basic functionality", () => {
|
|||
expect(d.getUTCMinutes()).not.toBeNaN();
|
||||
expect(d.getUTCMinutes()).toBeGreaterThanOrEqual(0);
|
||||
expect(d.getUTCMinutes()).toBeLessThanOrEqual(59);
|
||||
expect(new Date(NaN).getUTCMinutes()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -6,6 +6,7 @@ test("basic functionality", () => {
|
|||
expect(d.getUTCMonth()).toBeLessThanOrEqual(11);
|
||||
|
||||
expect(new Date(Date.UTC(2020, 11)).getUTCMonth()).toBe(11);
|
||||
expect(new Date(NaN).getUTCMonth()).toBe(NaN);
|
||||
});
|
||||
|
||||
test("leap years", () => {
|
||||
|
|
|
@ -4,4 +4,5 @@ test("basic functionality", () => {
|
|||
expect(d.getUTCSeconds()).not.toBeNaN();
|
||||
expect(d.getUTCSeconds()).toBeGreaterThanOrEqual(0);
|
||||
expect(d.getUTCSeconds()).toBeLessThanOrEqual(59);
|
||||
expect(new Date(NaN).getUTCSeconds()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -0,0 +1,112 @@
|
|||
test("no arguments", () => {
|
||||
let date = new Date(2021, 0, 1);
|
||||
date.setFullYear();
|
||||
expect(date.getTime()).toBe(NaN);
|
||||
});
|
||||
|
||||
test("NaN or undefined as only argument", () => {
|
||||
let date = new Date(2021, 0, 1);
|
||||
date.setFullYear(NaN);
|
||||
expect(date.getTime()).toBe(NaN);
|
||||
|
||||
date = new Date(2021, 0, 1);
|
||||
date.setFullYear(undefined);
|
||||
expect(date.getTime()).toBe(NaN);
|
||||
|
||||
date = new Date(2021, 0, 1);
|
||||
date.setFullYear("");
|
||||
expect(date.getFullYear()).toBe(0);
|
||||
|
||||
date = new Date(2021, 0, 1);
|
||||
date.setFullYear("a");
|
||||
expect(date.getTime()).toBe(NaN);
|
||||
});
|
||||
|
||||
test("Only year as argument", () => {
|
||||
let date = new Date(2021, 0, 1);
|
||||
|
||||
date.setFullYear(1992);
|
||||
expect(date.getFullYear()).toBe(1992);
|
||||
expect(date.getMonth()).toBe(0);
|
||||
expect(date.getDate()).toBe(1);
|
||||
expect(date.getHours()).toBe(0);
|
||||
expect(date.getMinutes()).toBe(0);
|
||||
expect(date.getSeconds()).toBe(0);
|
||||
expect(date.getMilliseconds()).toBe(0);
|
||||
});
|
||||
|
||||
test("Year and month as arguments", () => {
|
||||
let date = new Date(2021, 0, 1);
|
||||
|
||||
date.setFullYear(2021, 3);
|
||||
expect(date.getFullYear()).toBe(2021);
|
||||
expect(date.getMonth()).toBe(2);
|
||||
expect(date.getDate()).toBe(1);
|
||||
expect(date.getHours()).toBe(0);
|
||||
expect(date.getMinutes()).toBe(0);
|
||||
expect(date.getSeconds()).toBe(0);
|
||||
expect(date.getMilliseconds()).toBe(0);
|
||||
});
|
||||
|
||||
test("Year, month, and day as arguments", () => {
|
||||
let date = new Date(2021, 0, 1);
|
||||
|
||||
date.setFullYear(2021, 3, 16);
|
||||
expect(date.getFullYear()).toBe(2021);
|
||||
expect(date.getMonth()).toBe(2);
|
||||
expect(date.getDate()).toBe(16);
|
||||
expect(date.getHours()).toBe(0);
|
||||
expect(date.getMinutes()).toBe(0);
|
||||
expect(date.getSeconds()).toBe(0);
|
||||
expect(date.getMilliseconds()).toBe(0);
|
||||
});
|
||||
|
||||
test("NaN or undefined in any arguments", () => {
|
||||
let date = new Date(2021, 0, 1);
|
||||
date.setFullYear(NaN, 3, 16);
|
||||
expect(date.getTime()).toBe(NaN);
|
||||
|
||||
date = new Date(2021, 0, 1);
|
||||
date.setFullYear(2021, NaN, 16);
|
||||
expect(date.getTime()).toBe(NaN);
|
||||
|
||||
date = new Date(2021, 0, 1);
|
||||
date.setFullYear(2021, 3, NaN);
|
||||
expect(date.getTime()).toBe(NaN);
|
||||
|
||||
date = new Date(2021, 0, 1);
|
||||
date.setFullYear(undefined, 3, 16);
|
||||
expect(date.getTime()).toBe(NaN);
|
||||
|
||||
date = new Date(2021, 0, 1);
|
||||
date.setFullYear(2021, undefined, 16);
|
||||
expect(date.getTime()).toBe(NaN);
|
||||
|
||||
date = new Date(2021, 0, 1);
|
||||
date.setFullYear(2021, 3, undefined);
|
||||
expect(date.getTime()).toBe(NaN);
|
||||
|
||||
date.setFullYear(2021, 3, 16);
|
||||
expect(date.getFullYear()).toBe(2021);
|
||||
expect(date.getMonth()).toBe(2);
|
||||
expect(date.getDate()).toBe(16);
|
||||
expect(date.getHours()).toBe(0);
|
||||
expect(date.getMinutes()).toBe(0);
|
||||
expect(date.getSeconds()).toBe(0);
|
||||
expect(date.getMilliseconds()).toBe(0);
|
||||
});
|
||||
|
||||
test("Make Invalid Date valid again", () => {
|
||||
let date = new Date(2021, 0, 1);
|
||||
date.setFullYear(NaN, 3, 16);
|
||||
expect(date.getTime()).toBe(NaN);
|
||||
|
||||
date.setFullYear(2021, 3, 16);
|
||||
expect(date.getFullYear()).toBe(2021);
|
||||
expect(date.getMonth()).toBe(2);
|
||||
expect(date.getDate()).toBe(16);
|
||||
expect(date.getHours()).toBe(0);
|
||||
expect(date.getMinutes()).toBe(0);
|
||||
expect(date.getSeconds()).toBe(0);
|
||||
expect(date.getMilliseconds()).toBe(0);
|
||||
});
|
|
@ -18,4 +18,10 @@ test("basic functionality", () => {
|
|||
expect(d.getMinutes()).toBe(30);
|
||||
expect(d.getSeconds()).toBe(50);
|
||||
expect(d.getMilliseconds()).toBe(600);
|
||||
|
||||
d.setHours("");
|
||||
expect(d.getHours()).toBe(0);
|
||||
|
||||
d.setHours("a");
|
||||
expect(d.getHours()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -3,4 +3,10 @@ test("basic functionality", () => {
|
|||
|
||||
d.setMilliseconds(600);
|
||||
expect(d.getMilliseconds()).toBe(600);
|
||||
|
||||
d.setMilliseconds("");
|
||||
expect(d.getMilliseconds()).toBe(0);
|
||||
|
||||
d.setMilliseconds("a");
|
||||
expect(d.getMilliseconds()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -12,4 +12,10 @@ test("basic functionality", () => {
|
|||
expect(d.getMinutes()).toBe(30);
|
||||
expect(d.getSeconds()).toBe(50);
|
||||
expect(d.getMilliseconds()).toBe(600);
|
||||
|
||||
d.setMinutes("");
|
||||
expect(d.getMinutes()).toBe(0);
|
||||
|
||||
d.setMinutes("a");
|
||||
expect(d.getMinutes()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -7,4 +7,10 @@ test("basic functionality", () => {
|
|||
d.setSeconds(50, 600);
|
||||
expect(d.getSeconds()).toBe(50);
|
||||
expect(d.getMilliseconds()).toBe(600);
|
||||
|
||||
d.setSeconds("");
|
||||
expect(d.getSeconds()).toBe(0);
|
||||
|
||||
d.setSeconds("a");
|
||||
expect(d.getSeconds()).toBe(NaN);
|
||||
});
|
||||
|
|
|
@ -4,4 +4,8 @@ test("basic functionality", () => {
|
|||
expect(new Date(Date.UTC(1950)).toISOString()).toBe("1950-01-01T00:00:00.000Z");
|
||||
expect(new Date(Date.UTC(1800)).toISOString()).toBe("1800-01-01T00:00:00.000Z");
|
||||
expect(new Date(Date.UTC(-100)).toISOString()).toBe("-000100-01-01T00:00:00.000Z");
|
||||
|
||||
expect(() => {
|
||||
new Date(NaN).toISOString();
|
||||
}).toThrowWithMessage(RangeError, "Invalid time value");
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue