summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Date/parse-timezone-without-gmt.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/non262/Date/parse-timezone-without-gmt.js')
-rw-r--r--js/src/tests/non262/Date/parse-timezone-without-gmt.js118
1 files changed, 118 insertions, 0 deletions
diff --git a/js/src/tests/non262/Date/parse-timezone-without-gmt.js b/js/src/tests/non262/Date/parse-timezone-without-gmt.js
new file mode 100644
index 0000000000..c8e2d8e4bb
--- /dev/null
+++ b/js/src/tests/non262/Date/parse-timezone-without-gmt.js
@@ -0,0 +1,118 @@
+/* -*- 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 = {
+ "1995-09-26T00:00:00-0500": [
+ "Sep 26 1995 GMT-0500",
+ "Sep 26 1995 00:00:00 GMT-0500",
+ "Sep 26 1995 00:00:00 gmt-0500",
+ "Sep 26 1995 00:00:00 Z-0500",
+ "Sep 26 1995 00:00:00 UT-0500",
+ "Sep 26 1995 00:00:00 UTC-0500",
+ "Sep 26 1995 00:00:00 -0500",
+ "Sep 26 1995 00:00:00 -05",
+ "Sep 26 1995 00:00:00-0500",
+ "Sep 26 1995 00:00:00-05",
+ "Sep 26 1995 00:00 -0500",
+ "Sep 26 1995 00:00 -05",
+ "Sep 26 1995 00:00-0500",
+ "Sep 26 1995 00:00-05",
+ ],
+
+ "1995-09-26T00:00:00+0500": [
+ "Sep 26 1995 GMT+0500",
+ "Sep 26 1995 00:00:00 GMT+0500",
+ "Sep 26 1995 00:00:00 gmt+0500",
+ "Sep 26 1995 00:00:00 Z+0500",
+ "Sep 26 1995 00:00:00 UT+0500",
+ "Sep 26 1995 00:00:00 UTC+0500",
+ "Sep 26 1995 00:00:00 +0500",
+ "Sep 26 1995 00:00:00 +05",
+ "Sep 26 1995 00:00:00+0500",
+ "Sep 26 1995 00:00:00+05",
+ "Sep 26 1995 00:00 +0500",
+ "Sep 26 1995 00:00 +05",
+ "Sep 26 1995 00:00+0500",
+ "Sep 26 1995 00:00+05",
+ ],
+
+ "1995-09-26T00:00:00-0430": [
+ "Sep 26 1995 GMT-04:30",
+ "Sep 26 1995 00:00:00 GMT-04:30",
+ "Sep 26 1995 00:00:00 -04:30",
+ "Sep 26 1995 00:00:00-04:30",
+ "Sep 26 1995 00:00 -04:30",
+ "Sep 26 1995 00:00-04:30",
+ ],
+
+ "1995-09-26T00:00:00+0430": [
+ "Sep 26 1995 GMT+04:30",
+ "Sep 26 1995 00:00:00 GMT+04:30",
+ "Sep 26 1995 00:00:00 +04:30",
+ "Sep 26 1995 00:00:00+04:30",
+ "Sep 26 1995 00:00 +04:30",
+ "Sep 26 1995 00:00+04:30",
+ ],
+
+ "1995-09-26T04:30:00": [
+ "Sep 26 1995-04:30",
+ "1995-09-26-04:30",
+ "1995-Sep-26-04:30",
+ ],
+};
+const rejected = [
+ "Sep 26 1995 -05",
+ "Sep 26 1995-05",
+ "Sep 26 1995 -04:30",
+ "1995-09-26 -05",
+ "1995-09-26 -04:30",
+ "1995-09-26-05",
+ "1995-Sep-26 -05",
+ "1995-Sep-26-05",
+ "1995-Sep-26,-05",
+
+ "Sep 26 1995 +05",
+ "Sep 26 1995 +04:30",
+ "Sep 26 1995+05",
+ "Sep 26 1995+04:30",
+ "1995-09-26 +05",
+ "1995-09-26+05",
+ "1995-Sep-26 +05",
+ "1995-Sep-26+05",
+ "1995-Sep-26,+05",
+
+ // These cases are allowed by V8 but are parsed as GMT-XXXX no matter the
+ // abbreviation (e.g. EST-0500 is parsed as GMT-0500 and not GMT-1000). This
+ // is unexpected and so we are explicitly rejecting them.
+ "Sep 26 1995 00:00:00 EST-0500",
+ "Sep 26 1995 00:00:00 MDT-0500",
+];
+
+for (const [expected, patterns] of Object.entries(accepted)) {
+ for (const test of patterns) {
+ 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);