diff options
Diffstat (limited to 'js/src/tests/non262/Date/parse-milliseconds.js')
-rw-r--r-- | js/src/tests/non262/Date/parse-milliseconds.js | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/js/src/tests/non262/Date/parse-milliseconds.js b/js/src/tests/non262/Date/parse-milliseconds.js new file mode 100644 index 0000000000..ddaa73e4e4 --- /dev/null +++ b/js/src/tests/non262/Date/parse-milliseconds.js @@ -0,0 +1,66 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +const accepted = { + "Sep 26 1995 12:34:56.789": "1995-09-26T12:34:56.789", + "Sep 26 1995 12:34:56.7": "1995-09-26T12:34:56.700", + "Sep 26 1995 12:34:56.78": "1995-09-26T12:34:56.780", + "Sep 26 1995 12:34:56.001": "1995-09-26T12:34:56.001", + + "Sep 26 1995 12:34:56.789Z": "1995-09-26T12:34:56.789Z", + "Sep 26 1995 12:34:56.789 -0500": "1995-09-26T12:34:56.789-0500", + "Sep 26 1995 12:34:56.789-0500": "1995-09-26T12:34:56.789-0500", + + // Note that the trailing '.' without milliseconds is rejected. + // Rejecting this case could be done trivially, but Chrome allows it, + // so we will allow it for parity. + "Sep 26 1995 12:34:56.789.": "1995-09-26T12:34:56.789", + + // Truncate after 3 digits + "Sep 26 1995 12:34:56.0001": "1995-09-26T12:34:56", + "Sep 26 1995 12:34:56.0009": "1995-09-26T12:34:56", + "Sep 26 1995 12:34:56.999": "1995-09-26T12:34:56.999", + "Sep 26 1995 12:34:56.9990": "1995-09-26T12:34:56.999", + "Sep 26 1995 12:34:56.9999": "1995-09-26T12:34:56.999", + // Before bug 746529, it would have rounded up here: + "Sep 26 1995 12:34:56.99999999999999996": "1995-09-26T12:34:56.999", + "Sep 26 1995 12:34:56.50099999999999996": "1995-09-26T12:34:56.500", + "Sep 26 1995 12:34:56.00099999999999996": "1995-09-26T12:34:56", + "Sep 26 1995 12:34:56.000999999999999999999": "1995-09-26T12:34:56", +}; +const rejected = [ + "Sep 26 1995 12:34:56.", + "Sep 26 1995 12:34:56:789", + "Sep 26 1995 12:34:56..789", +]; + +// Sanity check to make sure these are being parsed to the right precision +// Otherwise, the comparisons in the above object could still pass +assertEq(Date.parse("1970-01-01T00:00:00.99999999999999996Z"), 999); + +for (const [test, expected] of Object.entries(accepted)) { + const testDate = new Date(test); + const expectedDate = new Date(expected); + + assertEq( + false, isNaN(testDate), + `${test} should be accepted.` + ); + + assertEq( + testDate.getTime(), expectedDate.getTime(), + `"${test}" should be ${expectedDate} (got ${testDate}).` + ); +} + +for (const reject of rejected) { + assertEq( + true, isNaN(new Date(reject)), + `"${reject}" should be rejected.` + ); +} + +if (typeof reportCompare === "function") + reportCompare(true, true); |