summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Date/parse-timezone-without-gmt.js
blob: c8e2d8e4bbb92b154cf65ccef13b8fee25f85528 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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);