tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

dashed-date.js (5019B)


      1 // SKIP test262 export
      2 // Behavior is not currently specified.
      3 
      4 const tests = [
      5  // ==== Date only ====
      6 
      7  // dd-MMM-yyyy
      8  ["24-Apr-2023", "2023-04-24T00:00:00"],
      9  ["24-apr-2023", "2023-04-24T00:00:00"],
     10  ["24-April-2023", "2023-04-24T00:00:00"],
     11  ["24-APRIL-2023", "2023-04-24T00:00:00"],
     12  ["24-Apr-2033", "2033-04-24T00:00:00"],
     13 
     14  // dd-MMM-yy
     15  ["24-Apr-23", "2023-04-24T00:00:00"],
     16  ["24-Apr-33", "2033-04-24T00:00:00"],
     17 
     18  // dd-MMM-yyy
     19  ["24-Apr-023", "2023-04-24T00:00:00"],
     20 
     21  // MMM-dd-yyyy
     22  ["Apr-24-2023", "2023-04-24T00:00:00"],
     23  ["apr-24-2023", "2023-04-24T00:00:00"],
     24  ["April-24-2023", "2023-04-24T00:00:00"],
     25  ["APRIL-24-2023", "2023-04-24T00:00:00"],
     26  ["Apr-24-2033", "2033-04-24T00:00:00"],
     27 
     28  // Year should get fixed up even with leading 0s
     29  ["Apr-24-23", "2023-04-24T00:00:00"],
     30  ["Apr-24-0023", "2023-04-24T00:00:00"],
     31  ["24-Apr-0023", "2023-04-24T00:00:00"],
     32  ["24-Apr-00023", "2023-04-24T00:00:00"],
     33  ["24-Apr-000023", "2023-04-24T00:00:00"],
     34 
     35  // MMM-dd-yy
     36  ["Apr-24-23", "2023-04-24T00:00:00"],
     37  ["Apr-24-33", "2033-04-24T00:00:00"],
     38 
     39  // MMM-dd-yyy
     40  ["Apr-24-023", "2023-04-24T00:00:00"],
     41 
     42  // yyyy-MM-dd
     43  ["2023-Apr-24", "2023-04-24T00:00:00"],
     44  ["2033-Apr-24", "2033-04-24T00:00:00"],
     45 
     46  // yy-MM-dd
     47  ["33-Apr-24", "2033-04-24T00:00:00"],
     48 
     49  // yyy-MM-dd
     50  ["033-Apr-24", "2033-04-24T00:00:00"],
     51 
     52  // ==== Date followed by hour and TZ ====
     53 
     54  ["24-Apr-2023 12:34:56", "2023-04-24T12:34:56"],
     55  ["24-Apr-2023 (Mon) 12:34:56", "2023-04-24T12:34:56"],
     56  ["24-Apr-2023(Mon)12:34:56", "2023-04-24T12:34:56"],
     57 
     58  ["24-Apr-2023,12:34:56", "2023-04-24T12:34:56"],
     59 
     60  ["24-Apr-2023 12:34:56 GMT", "2023-04-24T12:34:56Z"],
     61  ["24-Apr-2023 12:34:56 +04", "2023-04-24T12:34:56+04:00"],
     62  ["24-Apr-2023 12:34:56 +04:30", "2023-04-24T12:34:56+04:30"],
     63  ["24-Apr-2023 12:34:56 -04", "2023-04-24T12:34:56-04:00"],
     64  ["24-Apr-2023 12:34:56 -04:30", "2023-04-24T12:34:56-04:30"],
     65 
     66  ["24-Apr-2023 GMT", "2023-04-24T00:00:00Z"],
     67  ["24-Apr-2023GMT", "2023-04-24T00:00:00Z"],
     68  ["24-Apr-2023GMT-04", "2023-04-24T00:00:00-04:00"],
     69  ["24-Apr-2023GMT-04:30", "2023-04-24T00:00:00-04:30"],
     70  ["24-Apr-2023GMT+04", "2023-04-24T00:00:00+04:00"],
     71  ["24-Apr-2023GMT+04:30", "2023-04-24T00:00:00+04:30"],
     72 
     73  ["24-Apr-2023,GMT", "2023-04-24T00:00:00Z"],
     74  ["24-Apr-2023/GMT", "2023-04-24T00:00:00Z"],
     75 
     76  ["24-Apr-2023/12:34:56", "2023-04-24T12:34:56"],
     77 
     78  ["Apr-24-2023 12:34:56", "2023-04-24T12:34:56"],
     79  ["Apr-24-2023 12:34:56 GMT", "2023-04-24T12:34:56Z"],
     80  ["Apr-24-2023 12:34:56 +04", "2023-04-24T12:34:56+04:00"],
     81  ["Apr-24-2023 12:34:56 +04:30", "2023-04-24T12:34:56+04:30"],
     82 
     83  // ==== non dd-MMM-yyyy. Uses fallback path ====
     84 
     85  // Extra delimiter.
     86  ["24-Apr- 2023", "2023-04-24T00:00:00"],
     87  ["24-Apr -2023", "-002023-04-24T00:00:00"],
     88  ["24- Apr-2023", "-002023-04-24T00:00:00"],
     89  ["24 -Apr-2023", "-002023-04-24T00:00:00"],
     90 
     91  ["24-Apr-/2023", "2023-04-24T00:00:00"],
     92  ["24-Apr/-2023", "-002023-04-24T00:00:00"],
     93  ["24-/Apr-2023", "-002023-04-24T00:00:00"],
     94  ["24/-Apr-2023", "-002023-04-24T00:00:00"],
     95 
     96  ["24-Apr-()2023", "2023-04-24T00:00:00"],
     97  ["24-Apr()-2023", "-002023-04-24T00:00:00"],
     98  ["24-()Apr-2023", "-002023-04-24T00:00:00"],
     99  ["24()-Apr-2023", "-002023-04-24T00:00:00"],
    100 
    101  // mday being 3+ digits
    102  ["024-Apr-2023", "-002023-04-24T00:00:00"],
    103  ["0024-Apr-2023", "-002023-04-24T00:00:00"],
    104 
    105  // year w/ 5 or 6 digits
    106  ["24-Apr-10000", "+010000-04-24T00:00:00"],
    107  ["24-Apr-10000 10:00", "+010000-04-24T10:00:00"],
    108  ["24-Apr-275760", "+275760-04-24T00:00:00"],
    109 
    110  // Delimiter other than space after prefix
    111  ["24-Apr-2312.10:13:14", "2312-04-24T10:13:14"],
    112  ["24-Apr-2312,10:13:14", "2312-04-24T10:13:14"],
    113  ["24-Apr-2312-10:13:14", "2312-04-24T10:13:14"],
    114  ["24-Apr-2312-04:30", "2312-04-24T04:30:00"],
    115  ["24-Apr-2312/10:13:14", "2312-04-24T10:13:14"],
    116  ["24-Apr-2312()10:13:14", "2312-04-24T10:13:14"],
    117  // Open paren only comments out the time
    118  ["24-Apr-2312(10:13:14", "2312-04-24T00:00:00"],
    119 
    120  // mday being 3+ digits, while year being 2-3 digits.
    121  ["024-Apr-23", "2023-04-24T00:00:00"],
    122  ["024-Apr-023", "2023-04-24T00:00:00"],
    123 ];
    124 
    125 for (const [testString, isoString] of tests) {
    126  const testDate = new Date(testString);
    127  const isoDate = new Date(isoString);
    128 
    129  assertEq(testDate.getTime(), isoDate.getTime(),
    130           testString);
    131 }
    132 
    133 const invalidTests = [
    134  // mday being out of range.
    135  "32-01-32",
    136 
    137  // Duplicate date.
    138  "2012-Apr-08 12/12/12",
    139 
    140  // > TimeClip limit
    141  "13-Sep-275760 00:00:01 GMT",
    142 
    143  // Rejected delimiters after prefix
    144  "24-Apr-2312T10:13:14",
    145  "24-Apr-2312:10:13:14",
    146  "24-Apr-2312^10:13:14",
    147  "24-Apr-2312|10:13:14",
    148  "24-Apr-2312~10:13:14",
    149  "24-Apr-2312+10:13:14",
    150  "24-Apr-2312=10:13:14",
    151  "24-Apr-2312?10:13:14",
    152 
    153  // Late weekday
    154  "24-Apr-2023 Mon 12:34:56",
    155  "24-Apr-2023,Mon 12:34:56",
    156 ];
    157 
    158 for (const testString of invalidTests) {
    159  assertEq(Number.isNaN(new Date(testString).getTime()), true, testString);
    160 }
    161 
    162 if (typeof reportCompare === "function")
    163    reportCompare(true, true);