Source code

Revision control

Copy as Markdown

Other Tools

/* -*- 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 = {
"0": "2000-01-01T00:00:00",
"1": "2001-01-01T00:00:00",
"12": "2001-12-01T00:00:00",
"32": "2032-01-01T00:00:00",
"49": "2049-01-01T00:00:00",
"50": "1950-01-01T00:00:00",
"99": "1999-01-01T00:00:00",
"100": "0100-01-01T00:00:00",
"999": "0999-01-01T00:00:00",
"1000": "1000-01-01T00:00:00Z",
"1000-": "1000-01-01T00:00:00",
"20009": "+020009-01-01T00:00:00",
"+20009": "+020009-01-01T00:00:00",
// Rejecting e.g. S22 (see rejected patterns below) shouldn't
// reject mday directly after month name
"Sep26 1995": "1995-09-26T00:00:00",
};
const rejected = [
"S22",
"5C",
"Sep26 foo 1995",
];
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 (let i = 13; i <= 31; ++i) {
assertEq(
true, isNaN(new Date(`${i}`)),
`"${i}" should be rejected.`
);
}
for (const reject of rejected) {
assertEq(
true, isNaN(new Date(reject)),
`"${reject}" should be rejected.`
);
}
if (typeof reportCompare === "function")
reportCompare(true, true);