Make Date.parse() ECMA-262 conform (#3314)
Changes: - Parse output of Date.prototype.toString() and Date.prototype.toUTCString() - Date.prototype.toString() is ECMA-262 v9 conform now, only TZ part changed (Before ECMA-262 v9 it was implementation-dependent.) - Reused day_names_p and month_names_p arrays (and made them more efficient) - Tests updated and new tests added Fixes #2946. JerryScript-DCO-1.0-Signed-off-by: Csaba Osztrogonác oszi@inf.u-szeged.hu
This commit is contained in:
committed by
Dániel Bátyai
parent
16d0e83b64
commit
4d422e17df
@@ -61,7 +61,16 @@ var wrongFormats = ["",
|
||||
"+0002015-01-01",
|
||||
"-0002015-01-01",
|
||||
"2015-01T00:00:00.000-03X00",
|
||||
"2015-01-01T00-03:00"];
|
||||
"2015-01-01T00-03:00",
|
||||
"Fri Jan 01 1 00:00:00 GMT+0000",
|
||||
"Fri Jan 01 11 00:00:00 GMT+0000",
|
||||
"Fri Jan 01 111 00:00:00 GMT+0000",
|
||||
"Fri Jan 01 1234567 00:00:00 GMT+0000",
|
||||
"Fri Jan 01 +1000 00:00:00 GMT+0000",
|
||||
"Fri Jan 01 -1 00:00:00 GMT+0000",
|
||||
"Fri Jan 01 -11 00:00:00 GMT+0000",
|
||||
"Fri Jan 01 -111 00:00:00 GMT+0000",
|
||||
"Fri Jan 01 -1234567 00:00:00 GMT+0000"];
|
||||
|
||||
for (i in wrongFormats) {
|
||||
var d = Date.parse(wrongFormats[i]);
|
||||
@@ -125,3 +134,37 @@ assert (Date.parse("9999-12-31T23:59:59.999Z") == 253402300799999)
|
||||
assert (Date.parse("+010000-01-01T00:00:00.000Z") == 253402300800000)
|
||||
assert (Date.parse("+275760-09-13T00:00:00.000Z") == 8640000000000000)
|
||||
assert (Date.parse("+275760-09-13T00:00:00.001Z") == 8640000000000001)
|
||||
|
||||
// Date.toString() format
|
||||
assert (Date.parse("Tue Apr 20 -271821 00:00:00 GMT+0000") == -8640000000000000)
|
||||
assert (Date.parse("Fri Dec 31 -0001 23:59:59 GMT+0000") == -62167219201000)
|
||||
assert (Date.parse("Sat Jan 01 0000 00:00:00 GMT+0000") == -62167219200000)
|
||||
assert (Date.parse("Thu Dec 31 0009 23:59:59 GMT+0000") == -61851600001000)
|
||||
assert (Date.parse("Fri Jan 01 0010 00:00:00 GMT+0000") == -61851600000000)
|
||||
assert (Date.parse("Thu Dec 31 0099 23:59:59 GMT+0000") == -59011459201000)
|
||||
assert (Date.parse("Fri Jan 01 0100 00:00:00 GMT+0000") == -59011459200000)
|
||||
assert (Date.parse("Tue Dec 31 0999 23:59:59 GMT+0000") == -30610224001000)
|
||||
assert (Date.parse("Wed Jan 01 1000 00:00:00 GMT+0000") == -30610224000000)
|
||||
assert (Date.parse("Wed Dec 31 1969 23:59:59 GMT+0000") == -1000)
|
||||
assert (Date.parse("Thu Jan 01 1970 00:00:00 GMT+0000") == 0)
|
||||
assert (Date.parse("Thu Jan 01 1970 00:00:01 GMT+0000") == 1000)
|
||||
assert (Date.parse("Fri Dec 31 9999 23:59:59 GMT+0000") == 253402300799000)
|
||||
assert (Date.parse("Sat Jan 01 10000 00:00:00 GMT+0000") == 253402300800000)
|
||||
assert (Date.parse("Sat Sep 13 275760 00:00:00 GMT+0000") == 8640000000000000)
|
||||
|
||||
// Date.toUTCString() format
|
||||
assert (Date.parse("Tue, 20 Apr -271821 00:00:00 GMT") == -8640000000000000)
|
||||
assert (Date.parse("Fri, 31 Dec -0001 23:59:59 GMT") == -62167219201000)
|
||||
assert (Date.parse("Sat, 01 Jan 0000 00:00:00 GMT") == -62167219200000)
|
||||
assert (Date.parse("Thu, 31 Dec 0009 23:59:59 GMT") == -61851600001000)
|
||||
assert (Date.parse("Fri, 01 Jan 0010 00:00:00 GMT") == -61851600000000)
|
||||
assert (Date.parse("Thu, 31 Dec 0099 23:59:59 GMT") == -59011459201000)
|
||||
assert (Date.parse("Fri, 01 Jan 0100 00:00:00 GMT") == -59011459200000)
|
||||
assert (Date.parse("Tue, 31 Dec 0999 23:59:59 GMT") == -30610224001000)
|
||||
assert (Date.parse("Wed, 01 Jan 1000 00:00:00 GMT") == -30610224000000)
|
||||
assert (Date.parse("Wed, 31 Dec 1969 23:59:59 GMT") == -1000)
|
||||
assert (Date.parse("Thu, 01 Jan 1970 00:00:00 GMT") == 0)
|
||||
assert (Date.parse("Thu, 01 Jan 1970 00:00:01 GMT") == 1000)
|
||||
assert (Date.parse("Fri, 31 Dec 9999 23:59:59 GMT") == 253402300799000)
|
||||
assert (Date.parse("Sat, 01 Jan 10000 00:00:00 GMT") == 253402300800000)
|
||||
assert (Date.parse("Sat, 13 Sep 275760 00:00:00 GMT") == 8640000000000000)
|
||||
|
||||
@@ -19,8 +19,8 @@ assert (new Date (2015, 7, 1, 0, Infinity, 0) == "Invalid Date");
|
||||
assert (new Date (NaN, 1, 1, 0, 0, 0) == "Invalid Date");
|
||||
assert (new Date (2015, NaN, 1, 0, 0, 0) == "Invalid Date");
|
||||
assert (new Date (2015, 7, 1, 0, NaN, 0) == "Invalid Date");
|
||||
assert (/Fri Feb 13 2015 \d{2}:\d{2}:\d{2} GMT\+\d{2}:\d{2}/.test (new Date ("2015-02-13")));
|
||||
assert (/Wed Jul 08 2015 \d{2}:\d{2}:\d{2} GMT\+\d{2}:\d{2}/.test (new Date ("2015-07-08T11:29:05.023")));
|
||||
assert (/Fri Feb 13 2015 \d{2}:\d{2}:\d{2} GMT\+\d{2}\d{2}/.test (new Date ("2015-02-13")));
|
||||
assert (/Wed Jul 08 2015 \d{2}:\d{2}:\d{2} GMT\+\d{2}\d{2}/.test (new Date ("2015-07-08T11:29:05.023")));
|
||||
|
||||
try
|
||||
{
|
||||
@@ -33,12 +33,12 @@ catch (e)
|
||||
}
|
||||
|
||||
var date = new Date(0);
|
||||
assert (/Thu Jan 01 1970 \d{2}:\d{2}:\d{2} GMT\+\d{2}:\d{2}/.test (date.toString()));
|
||||
assert (/Thu Jan 01 1970 \d{2}:\d{2}:\d{2} GMT\+\d{2}\d{2}/.test (date.toString()));
|
||||
assert (date.toUTCString() === "Thu, 01 Jan 1970 00:00:00 GMT");
|
||||
assert (date.toISOString() === "1970-01-01T00:00:00.000Z");
|
||||
|
||||
date = new Date("2015-08-12T09:40:20.000Z")
|
||||
assert (/Wed Aug 12 2015 \d{2}:\d{2}:\d{2} GMT\+\d{2}:\d{2}/.test (date.toString()));
|
||||
assert (/Wed Aug 12 2015 \d{2}:\d{2}:\d{2} GMT\+\d{2}\d{2}/.test (date.toString()));
|
||||
assert (date.toUTCString() === "Wed, 12 Aug 2015 09:40:20 GMT");
|
||||
assert (date.toISOString() === "2015-08-12T09:40:20.000Z");
|
||||
|
||||
@@ -145,26 +145,26 @@ assert (new Date ("2015-07-08T11:29:05.023Z").toISOString() == "2015-07-08T11:29
|
||||
|
||||
// corner cases
|
||||
assert (new Date (-8640000000000001).toString() == "Invalid Date")
|
||||
assert (new Date (-8640000000000000).toString() == "Tue Apr 20 -271821 00:00:00 GMT+00:00")
|
||||
assert (new Date (-8640000000000000).toString() == "Tue Apr 20 -271821 00:00:00 GMT+0000")
|
||||
|
||||
assert (new Date(-62167219200001).toString() == "Fri Dec 31 -0001 23:59:59 GMT+00:00")
|
||||
assert (new Date(-62167219200000).toString() == "Sat Jan 01 0000 00:00:00 GMT+00:00")
|
||||
assert (new Date(-62167219200001).toString() == "Fri Dec 31 -0001 23:59:59 GMT+0000")
|
||||
assert (new Date(-62167219200000).toString() == "Sat Jan 01 0000 00:00:00 GMT+0000")
|
||||
|
||||
assert (new Date(-61851600000001).toString() == "Thu Dec 31 0009 23:59:59 GMT+00:00")
|
||||
assert (new Date(-61851600000000).toString() == "Fri Jan 01 0010 00:00:00 GMT+00:00")
|
||||
assert (new Date(-61851600000001).toString() == "Thu Dec 31 0009 23:59:59 GMT+0000")
|
||||
assert (new Date(-61851600000000).toString() == "Fri Jan 01 0010 00:00:00 GMT+0000")
|
||||
|
||||
assert (new Date(-59011459200001).toString() == "Thu Dec 31 0099 23:59:59 GMT+00:00")
|
||||
assert (new Date(-59011459200000).toString() == "Fri Jan 01 0100 00:00:00 GMT+00:00")
|
||||
assert (new Date(-59011459200001).toString() == "Thu Dec 31 0099 23:59:59 GMT+0000")
|
||||
assert (new Date(-59011459200000).toString() == "Fri Jan 01 0100 00:00:00 GMT+0000")
|
||||
|
||||
assert (new Date(-30610224000001).toString() == "Tue Dec 31 0999 23:59:59 GMT+00:00")
|
||||
assert (new Date(-30610224000000).toString() == "Wed Jan 01 1000 00:00:00 GMT+00:00")
|
||||
assert (new Date(-30610224000001).toString() == "Tue Dec 31 0999 23:59:59 GMT+0000")
|
||||
assert (new Date(-30610224000000).toString() == "Wed Jan 01 1000 00:00:00 GMT+0000")
|
||||
|
||||
assert (new Date(-1).toString() == "Wed Dec 31 1969 23:59:59 GMT+00:00")
|
||||
assert (new Date(0).toString() == "Thu Jan 01 1970 00:00:00 GMT+00:00")
|
||||
assert (new Date(1).toString() == "Thu Jan 01 1970 00:00:00 GMT+00:00")
|
||||
assert (new Date(-1).toString() == "Wed Dec 31 1969 23:59:59 GMT+0000")
|
||||
assert (new Date(0).toString() == "Thu Jan 01 1970 00:00:00 GMT+0000")
|
||||
assert (new Date(1).toString() == "Thu Jan 01 1970 00:00:00 GMT+0000")
|
||||
|
||||
assert (new Date(253402300799999).toString() == "Fri Dec 31 9999 23:59:59 GMT+00:00")
|
||||
assert (new Date(253402300800000).toString() == "Sat Jan 01 10000 00:00:00 GMT+00:00")
|
||||
assert (new Date(253402300799999).toString() == "Fri Dec 31 9999 23:59:59 GMT+0000")
|
||||
assert (new Date(253402300800000).toString() == "Sat Jan 01 10000 00:00:00 GMT+0000")
|
||||
|
||||
assert (new Date (8640000000000000).toString() == "Sat Sep 13 275760 00:00:00 GMT+00:00")
|
||||
assert (new Date (8640000000000000).toString() == "Sat Sep 13 275760 00:00:00 GMT+0000")
|
||||
assert (new Date (8640000000000001).toString() == "Invalid Date")
|
||||
|
||||
Reference in New Issue
Block a user