tor-browser

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

dateTimeField.js (4647B)


      1 // |reftest| skip-if(!this.hasOwnProperty('Intl'))
      2 
      3 const tests = {
      4  "en": {
      5    long: {
      6      "era": "era",
      7      "year": "year",
      8      "quarter": "quarter",
      9      "month": "month",
     10      "weekOfYear": "week",
     11      "weekday": "day of the week",
     12      "day": "day",
     13      "dayPeriod": "AM/PM",
     14      "hour": "hour",
     15      "minute": "minute",
     16      "second": "second",
     17      "timeZoneName": "time zone",
     18    },
     19    short: {
     20      "year": "yr.",
     21      "quarter": "qtr.",
     22      "month": "mo.",
     23      "weekOfYear": "wk.",
     24      "weekday": "day of wk.",
     25      "dayPeriod": "AM/PM",
     26      "hour": "hr.",
     27      "minute": "min.",
     28      "second": "sec.",
     29      "timeZoneName": "zone",
     30    },
     31    narrow: {
     32      "year": "yr",
     33      "quarter": "qtr",
     34      "month": "mo",
     35      "weekOfYear": "wk",
     36      "hour": "hr",
     37      "minute": "min",
     38      "second": "sec",
     39    },
     40  },
     41  "de": {
     42    long: {
     43      "era": "Epoche",
     44      "year": "Jahr",
     45      "quarter": "Quartal",
     46      "month": "Monat",
     47      "weekOfYear": "Woche",
     48      "weekday": "Wochentag",
     49      "day": "Tag",
     50      "dayPeriod": "Tageshälfte",
     51      "hour": "Stunde",
     52      "minute": "Minute",
     53      "second": "Sekunde",
     54      "timeZoneName": "Zeitzone",
     55    },
     56    short: {
     57      "era": "Ep.",
     58      "year": "Jahr",
     59      "quarter": "Quart.",
     60      "month": "Mon.",
     61      "weekOfYear": "Woche",
     62      "weekday": "Wochentag",
     63      "day": "Tag",
     64      "dayPeriod": "Tageshälfte",
     65      "hour": "Std.",
     66      "minute": "Min.",
     67      "second": "Sek.",
     68      "timeZoneName": "Zeitzone",
     69    },
     70    narrow: {
     71      "era": "E",
     72      "year": "J",
     73      "quarter": "Q",
     74      "month": "M",
     75      "weekOfYear": "W",
     76      "weekday": "Wochent.",
     77      "dayPeriod": "Tagesh.",
     78      "timeZoneName": "Zeitz.",
     79    },
     80  },
     81  "fr": {
     82    long: {
     83      "era": "ère",
     84      "year": "année",
     85      "quarter": "trimestre",
     86      "month": "mois",
     87      "weekOfYear": "semaine",
     88      "weekday": "jour de la semaine",
     89      "day": "jour",
     90      "dayPeriod": "cadran",
     91      "hour": "heure",
     92      "minute": "minute",
     93      "second": "seconde",
     94      "timeZoneName": "fuseau horaire",
     95    },
     96    short: {
     97      "year": "an",
     98      "quarter": "trim.",
     99      "month": "m.",
    100      "weekOfYear": "sem.",
    101      "weekday": "j (sem.)",
    102      "day": "j",
    103      "hour": "h",
    104      "minute": "min",
    105      "second": "s",
    106    },
    107    narrow: {
    108      "year": "a",
    109    },
    110  },
    111  "zh": {
    112    long: {
    113      "era": "纪元",
    114      "year": "年",
    115      "quarter": "季度",
    116      "month": "月",
    117      "weekOfYear": "周",
    118      "weekday": "星期",
    119      "day": "日",
    120      "dayPeriod": "上午/下午",
    121      "hour": "小时",
    122      "minute": "分钟",
    123      "second": "秒",
    124      "timeZoneName": "时区",
    125    },
    126    short: {
    127      "quarter": "季",
    128      "minute": "分",
    129    },
    130    narrow: {},
    131  },
    132 };
    133 
    134 for (let [locale, localeTests] of Object.entries(tests)) {
    135  for (let [style, styleTests] of Object.entries(localeTests)) {
    136    let dn = new Intl.DisplayNames(locale, {type: "dateTimeField", style});
    137 
    138    let resolved = dn.resolvedOptions();
    139    assertEq(resolved.locale, locale);
    140    assertEq(resolved.style, style);
    141    assertEq(resolved.type, "dateTimeField");
    142    assertEq(resolved.fallback, "code");
    143 
    144    let inheritedTests = {...localeTests.long, ...localeTests.short, ...localeTests.narrow};
    145    for (let [field, expected] of Object.entries({...inheritedTests, ...styleTests})) {
    146      assertEq(dn.of(field), expected);
    147 
    148      // Also works with objects.
    149      assertEq(dn.of(Object(field)), expected);
    150    }
    151  }
    152 }
    153 
    154 {
    155  let dn = new Intl.DisplayNames("en", {type: "dateTimeField"});
    156 
    157  // Performs ToString on the input and then validates the stringified result.
    158  assertThrowsInstanceOf(() => dn.of(), RangeError);
    159  assertThrowsInstanceOf(() => dn.of(null), RangeError);
    160  assertThrowsInstanceOf(() => dn.of(Symbol()), TypeError);
    161  assertThrowsInstanceOf(() => dn.of(0), RangeError);
    162  assertThrowsInstanceOf(() => dn.of(1), RangeError);
    163 
    164  // Throws an error if not one of ["era", "year", "quarter", "month", "weekOfYear", "weekday",
    165  // "day", "dayPeriod", "hour", "minute", "second", "timeZoneName"].
    166  assertThrowsInstanceOf(() => dn.of(""), RangeError);
    167  assertThrowsInstanceOf(() => dn.of("ERA"), RangeError);
    168  assertThrowsInstanceOf(() => dn.of("Era"), RangeError);
    169  assertThrowsInstanceOf(() => dn.of("era\0"), RangeError);
    170  assertThrowsInstanceOf(() => dn.of("dayperiod"), RangeError);
    171  assertThrowsInstanceOf(() => dn.of("day-period"), RangeError);
    172  assertThrowsInstanceOf(() => dn.of("timezoneName"), RangeError);
    173 }
    174 
    175 if (typeof reportCompare === "function")
    176  reportCompare(true, true);