tor-browser

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

formatRange-hour-cycle.js (10537B)


      1 // |reftest| skip-if(!this.hasOwnProperty("Intl"))
      2 
      3 // Test formatRange supports the different hour-cycle options.
      4 //
      5 // ICU bugs:
      6 // https://unicode-org.atlassian.net/browse/ICU-21154
      7 // https://unicode-org.atlassian.net/browse/ICU-21155
      8 // https://unicode-org.atlassian.net/browse/ICU-21156
      9 // https://unicode-org.atlassian.net/browse/ICU-21342
     10 // https://unicode-org.atlassian.net/browse/ICU-21343
     11 
     12 // Test locales which default to a 12-hour and a 24-hour clock.
     13 
     14 let tests = {
     15  "en": [
     16    // Midnight to morning.
     17    {
     18      start: 0,
     19      end: 10,
     20      data: [
     21        "12 – 10 AM",
     22        "0 – 10 AM",
     23        "12 – 10 AM",
     24        "00 – 10",
     25        "24 – 10",
     26      ],
     27    },
     28    // Midnight to noon.
     29    {
     30      start: 0,
     31      end: 12,
     32      data: [
     33        "12 AM – 12 PM",
     34        "0 AM – 0 PM",
     35        "12 AM – 12 PM",
     36        "00 – 12",
     37        "24 – 12",
     38      ],
     39    },
     40    // Midnight to evening.
     41    {
     42      start: 0,
     43      end: 22,
     44      data: [
     45        "12 AM – 10 PM",
     46        "0 AM – 10 PM",
     47        "12 AM – 10 PM",
     48        "00 – 22",
     49        "24 – 22",
     50      ],
     51    },
     52    // Midnight to midnight.
     53    {
     54      start: 0,
     55      end: 24,
     56      data: [
     57        "1/1/1970, 12 AM – 1/2/1970, 12 AM",
     58        "1/1/1970, 0 AM – 1/2/1970, 0 AM",
     59        "1/1/1970, 12 AM – 1/2/1970, 12 AM",
     60        "1/1/1970, 00 – 1/2/1970, 00",
     61        "1/1/1970, 24 – 1/2/1970, 24",
     62      ],
     63    },
     64 
     65    // Morning to morning.
     66    {
     67      start: 1,
     68      end: 10,
     69      data: [
     70        "1 – 10 AM",
     71        "1 – 10 AM",
     72        "1 – 10 AM",
     73        "01 – 10",
     74        "01 – 10",
     75      ],
     76    },
     77    // Morning to noon.
     78    {
     79      start: 1,
     80      end: 12,
     81      data: [
     82        "1 AM – 12 PM",
     83        "1 AM – 0 PM",
     84        "1 AM – 12 PM",
     85        "01 – 12",
     86        "01 – 12",
     87      ],
     88    },
     89    // Morning to evening.
     90    {
     91      start: 1,
     92      end: 22,
     93      data: [
     94        "1 AM – 10 PM",
     95        "1 AM – 10 PM",
     96        "1 AM – 10 PM",
     97        "01 – 22",
     98        "01 – 22",
     99      ],
    100    },
    101    // Morning to midnight.
    102    {
    103      start: 1,
    104      end: 24,
    105      data: [
    106        "1/1/1970, 1 AM – 1/2/1970, 12 AM",
    107        "1/1/1970, 1 AM – 1/2/1970, 0 AM",
    108        "1/1/1970, 1 AM – 1/2/1970, 12 AM",
    109        "1/1/1970, 01 – 1/2/1970, 00",
    110        "1/1/1970, 01 – 1/2/1970, 24",
    111      ],
    112    },
    113 
    114    // Noon to morning.
    115    {
    116      start: 12,
    117      end: 24 + 1,
    118      data: [
    119        "1/1/1970, 12 PM – 1/2/1970, 1 AM",
    120        "1/1/1970, 0 PM – 1/2/1970, 1 AM",
    121        "1/1/1970, 12 PM – 1/2/1970, 1 AM",
    122        "1/1/1970, 12 – 1/2/1970, 01",
    123        "1/1/1970, 12 – 1/2/1970, 01",
    124      ],
    125    },
    126    // Noon to noon.
    127    {
    128      start: 12,
    129      end: 24 + 12,
    130      data: [
    131        "1/1/1970, 12 PM – 1/2/1970, 12 PM",
    132        "1/1/1970, 0 PM – 1/2/1970, 0 PM",
    133        "1/1/1970, 12 PM – 1/2/1970, 12 PM",
    134        "1/1/1970, 12 – 1/2/1970, 12",
    135        "1/1/1970, 12 – 1/2/1970, 12",
    136      ],
    137    },
    138    // Noon to evening.
    139    {
    140      start: 12,
    141      end: 22,
    142      data: [
    143        "12 – 10 PM",
    144        "0 – 10 PM",
    145        "12 – 10 PM",
    146        "12 – 22",
    147        "12 – 22",
    148      ],
    149    },
    150    // Noon to midnight.
    151    {
    152      start: 12,
    153      end: 24,
    154      data: [
    155        "1/1/1970, 12 PM – 1/2/1970, 12 AM",
    156        "1/1/1970, 0 PM – 1/2/1970, 0 AM",
    157        "1/1/1970, 12 PM – 1/2/1970, 12 AM",
    158        "1/1/1970, 12 – 1/2/1970, 00",
    159        "1/1/1970, 12 – 1/2/1970, 24",
    160      ],
    161    },
    162 
    163    // Evening to morning.
    164    {
    165      start: 22,
    166      end: 24 + 1,
    167      data: [
    168        "1/1/1970, 10 PM – 1/2/1970, 1 AM",
    169        "1/1/1970, 10 PM – 1/2/1970, 1 AM",
    170        "1/1/1970, 10 PM – 1/2/1970, 1 AM",
    171        "1/1/1970, 22 – 1/2/1970, 01",
    172        "1/1/1970, 22 – 1/2/1970, 01",
    173      ],
    174    },
    175    // Evening to noon.
    176    {
    177      start: 22,
    178      end: 24 + 12,
    179      data: [
    180        "1/1/1970, 10 PM – 1/2/1970, 12 PM",
    181        "1/1/1970, 10 PM – 1/2/1970, 0 PM",
    182        "1/1/1970, 10 PM – 1/2/1970, 12 PM",
    183        "1/1/1970, 22 – 1/2/1970, 12",
    184        "1/1/1970, 22 – 1/2/1970, 12",
    185      ],
    186    },
    187    // Evening to evening.
    188    {
    189      start: 22,
    190      end: 23,
    191      data: [
    192        "10 – 11 PM",
    193        "10 – 11 PM",
    194        "10 – 11 PM",
    195        "22 – 23",
    196        "22 – 23",
    197      ],
    198    },
    199    // Evening to midnight.
    200    {
    201      start: 22,
    202      end: 24,
    203      data: [
    204        "1/1/1970, 10 PM – 1/2/1970, 12 AM",
    205        "1/1/1970, 10 PM – 1/2/1970, 0 AM",
    206        "1/1/1970, 10 PM – 1/2/1970, 12 AM",
    207        "1/1/1970, 22 – 1/2/1970, 00",
    208        "1/1/1970, 22 – 1/2/1970, 24",
    209      ],
    210    },
    211  ],
    212 
    213  "de": [
    214    // Midnight to morning.
    215    {
    216      start: 0,
    217      end: 10,
    218      data: [
    219        "00–10 Uhr",
    220        "0 – 10 AM",
    221        "12 – 10 AM",
    222        "00–10 Uhr",
    223        "24–10 Uhr",
    224      ],
    225    },
    226    // Midnight to noon.
    227    {
    228      start: 0,
    229      end: 12,
    230      data: [
    231        "00–12 Uhr",
    232        "0 AM – 0 PM",
    233        "12 AM – 12 PM",
    234        "00–12 Uhr",
    235        "24–12 Uhr",
    236      ],
    237    },
    238    // Midnight to evening.
    239    {
    240      start: 0,
    241      end: 22,
    242      data: [
    243        "00–22 Uhr",
    244        "0 AM – 10 PM",
    245        "12 AM – 10 PM",
    246        "00–22 Uhr",
    247        "24–22 Uhr",
    248      ],
    249    },
    250    // Midnight to midnight.
    251    {
    252      start: 0,
    253      end: 24,
    254      data: [
    255        "1.1.1970, 00 Uhr – 2.1.1970, 00 Uhr",
    256        "1.1.1970, 0 AM – 2.1.1970, 0 AM",
    257        "1.1.1970, 12 AM – 2.1.1970, 12 AM",
    258        "1.1.1970, 00 Uhr – 2.1.1970, 00 Uhr",
    259        "1.1.1970, 24 Uhr – 2.1.1970, 24 Uhr",
    260      ],
    261    },
    262 
    263    // Morning to morning.
    264    {
    265      start: 1,
    266      end: 10,
    267      data: [
    268        "01–10 Uhr",
    269        "1 – 10 AM",
    270        "1 – 10 AM",
    271        "01–10 Uhr",
    272        "01–10 Uhr",
    273      ],
    274    },
    275    // Morning to noon.
    276    {
    277      start: 1,
    278      end: 12,
    279      data: [
    280        "01–12 Uhr",
    281        "1 AM – 0 PM",
    282        "1 AM – 12 PM",
    283        "01–12 Uhr",
    284        "01–12 Uhr",
    285      ],
    286    },
    287    // Morning to evening.
    288    {
    289      start: 1,
    290      end: 22,
    291      data: [
    292        "01–22 Uhr",
    293        "1 AM – 10 PM",
    294        "1 AM – 10 PM",
    295        "01–22 Uhr",
    296        "01–22 Uhr",
    297      ],
    298    },
    299    // Morning to midnight.
    300    {
    301      start: 1,
    302      end: 24,
    303      data: [
    304        "1.1.1970, 01 Uhr – 2.1.1970, 00 Uhr",
    305        "1.1.1970, 1 AM – 2.1.1970, 0 AM",
    306        "1.1.1970, 1 AM – 2.1.1970, 12 AM",
    307        "1.1.1970, 01 Uhr – 2.1.1970, 00 Uhr",
    308        "1.1.1970, 01 Uhr – 2.1.1970, 24 Uhr",
    309      ],
    310    },
    311 
    312    // Noon to morning.
    313    {
    314      start: 12,
    315      end: 24 + 1,
    316      data: [
    317        "1.1.1970, 12 Uhr – 2.1.1970, 01 Uhr",
    318        "1.1.1970, 0 PM – 2.1.1970, 1 AM",
    319        "1.1.1970, 12 PM – 2.1.1970, 1 AM",
    320        "1.1.1970, 12 Uhr – 2.1.1970, 01 Uhr",
    321        "1.1.1970, 12 Uhr – 2.1.1970, 01 Uhr",
    322      ],
    323    },
    324    // Noon to noon.
    325    {
    326      start: 12,
    327      end: 24 + 12,
    328      data: [
    329        "1.1.1970, 12 Uhr – 2.1.1970, 12 Uhr",
    330        "1.1.1970, 0 PM – 2.1.1970, 0 PM",
    331        "1.1.1970, 12 PM – 2.1.1970, 12 PM",
    332        "1.1.1970, 12 Uhr – 2.1.1970, 12 Uhr",
    333        "1.1.1970, 12 Uhr – 2.1.1970, 12 Uhr",
    334      ],
    335    },
    336    // Noon to evening.
    337    {
    338      start: 12,
    339      end: 22,
    340      data: [
    341        "12–22 Uhr",
    342        "0 – 10 PM",
    343        "12 – 10 PM",
    344        "12–22 Uhr",
    345        "12–22 Uhr",
    346      ],
    347    },
    348    // Noon to midnight.
    349    {
    350      start: 12,
    351      end: 24,
    352      data: [
    353        "1.1.1970, 12 Uhr – 2.1.1970, 00 Uhr",
    354        "1.1.1970, 0 PM – 2.1.1970, 0 AM",
    355        "1.1.1970, 12 PM – 2.1.1970, 12 AM",
    356        "1.1.1970, 12 Uhr – 2.1.1970, 00 Uhr",
    357        "1.1.1970, 12 Uhr – 2.1.1970, 24 Uhr",
    358      ],
    359    },
    360 
    361    // Evening to morning.
    362    {
    363      start: 22,
    364      end: 24 + 1,
    365      data: [
    366        "1.1.1970, 22 Uhr – 2.1.1970, 01 Uhr",
    367        "1.1.1970, 10 PM – 2.1.1970, 1 AM",
    368        "1.1.1970, 10 PM – 2.1.1970, 1 AM",
    369        "1.1.1970, 22 Uhr – 2.1.1970, 01 Uhr",
    370        "1.1.1970, 22 Uhr – 2.1.1970, 01 Uhr",
    371      ],
    372    },
    373    // Evening to noon.
    374    {
    375      start: 22,
    376      end: 24 + 12,
    377      data: [
    378        "1.1.1970, 22 Uhr – 2.1.1970, 12 Uhr",
    379        "1.1.1970, 10 PM – 2.1.1970, 0 PM",
    380        "1.1.1970, 10 PM – 2.1.1970, 12 PM",
    381        "1.1.1970, 22 Uhr – 2.1.1970, 12 Uhr",
    382        "1.1.1970, 22 Uhr – 2.1.1970, 12 Uhr",
    383      ],
    384    },
    385    // Evening to evening.
    386    {
    387      start: 22,
    388      end: 23,
    389      data: [
    390        "22–23 Uhr",
    391        "10 – 11 PM",
    392        "10 – 11 PM",
    393        "22–23 Uhr",
    394        "22–23 Uhr",
    395      ],
    396    },
    397    // Evening to midnight.
    398    {
    399      start: 22,
    400      end: 24,
    401      data: [
    402        "1.1.1970, 22 Uhr – 2.1.1970, 00 Uhr",
    403        "1.1.1970, 10 PM – 2.1.1970, 0 AM",
    404        "1.1.1970, 10 PM – 2.1.1970, 12 AM",
    405        "1.1.1970, 22 Uhr – 2.1.1970, 00 Uhr",
    406        "1.1.1970, 22 Uhr – 2.1.1970, 24 Uhr",
    407      ],
    408    },
    409  ],
    410 };
    411 
    412 const hourCycles = [undefined, "h11", "h12", "h23", "h24"];
    413 const hour12Values = [true, false];
    414 const options = {hour: "2-digit", timeZone: "UTC"};
    415 const hourToMillis = 60 * 60 * 1000;
    416 
    417 for (let [locale, test] of Object.entries(tests)) {
    418  // Find the matching hourCycle for each hour12 value.
    419  let hour12Cycles = hour12Values.map(hour12 => {
    420    let {hourCycle} = new Intl.DateTimeFormat(locale, {...options, hour12}).resolvedOptions();
    421    return hourCycles.indexOf(hourCycle);
    422  });
    423 
    424  for (let {start, end, data} of Object.values(test)) {
    425    assertEq(data.length, hourCycles.length);
    426 
    427    // Test all possible "hourCycle" values, including |undefined|.
    428    for (let i = 0; i < hourCycles.length; i++) {
    429      let hourCycle = hourCycles[i];
    430      let expected = data[i];
    431      let dtf = new Intl.DateTimeFormat(locale, {...options, hourCycle});
    432 
    433      assertEq(dtf.formatRange(start * hourToMillis, end * hourToMillis), expected,
    434               `hourCycle: ${hourCycle}`);
    435    }
    436 
    437    // Test all possible "hour12" values.
    438    for (let i = 0; i < hour12Values.length; i++) {
    439      let hour12 = hour12Values[i];
    440      let dtf = new Intl.DateTimeFormat(locale, {...options, hour12});
    441      let expected = data[hour12Cycles[i]];
    442 
    443      assertEq(dtf.formatRange(start * hourToMillis, end * hourToMillis), expected,
    444               `hour12: ${hour12}`);
    445    }
    446  }
    447 }
    448 
    449 if (typeof reportCompare === "function")
    450  reportCompare(0, 0);