tor-browser

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

calendar-option.js (2426B)


      1 // |reftest| skip-if(!this.hasOwnProperty('Intl'))
      2 
      3 const defaultLocale = "en";
      4 const defaultCalendar = new Intl.DateTimeFormat(defaultLocale).resolvedOptions().calendar;
      5 
      6 function createWithLocale(locale, calendar) {
      7  return new Intl.DateTimeFormat(locale, {calendar});
      8 }
      9 
     10 function create(calendar) {
     11  return createWithLocale(defaultLocale, calendar);
     12 }
     13 
     14 // Empty string should throw.
     15 assertThrowsInstanceOf(() => create(""), RangeError);
     16 
     17 // Trailing \0 should throw.
     18 assertThrowsInstanceOf(() => create("gregory\0"), RangeError);
     19 
     20 // Too short or too long strings should throw.
     21 assertThrowsInstanceOf(() => create("a"), RangeError);
     22 assertThrowsInstanceOf(() => create("toolongstring"), RangeError);
     23 
     24 // Throw even when prefix is valid.
     25 assertThrowsInstanceOf(() => create("gregory-toolongstring"), RangeError);
     26 
     27 // |calendar| can be set to |undefined|.
     28 let dtf = create(undefined);
     29 assertEq(dtf.resolvedOptions().calendar, defaultCalendar);
     30 
     31 // Unsupported calendars are ignored.
     32 dtf = create("xxxxxxxx");
     33 assertEq(dtf.resolvedOptions().calendar, defaultCalendar);
     34 
     35 // Calendars in options overwrite Unicode extension keyword.
     36 dtf = createWithLocale(`${defaultLocale}-u-ca-iso8601`, "japanese");
     37 assertEq(dtf.resolvedOptions().locale, defaultLocale);
     38 assertEq(dtf.resolvedOptions().calendar, "japanese");
     39 
     40 // |calendar| option ignores case.
     41 dtf = create("CHINESE");
     42 assertEq(dtf.resolvedOptions().locale, defaultLocale);
     43 assertEq(dtf.resolvedOptions().calendar, "chinese");
     44 
     45 const calendars = [
     46  "buddhist", "chinese", "coptic", "dangi", "ethioaa", "ethiopic-amete-alem",
     47  "ethiopic", "gregory", "hebrew", "indian", "islamic", "islamic-umalqura",
     48  "islamic-tbla", "islamic-civil", "islamic-rgsa", "iso8601", "japanese",
     49  "persian", "roc", "islamicc",
     50 ];
     51 
     52 // https://github.com/tc39/proposal-intl-locale/issues/96
     53 const canonical = {
     54  "islamicc": "islamic-civil",
     55  "ethiopic-amete-alem": "ethioaa",
     56  "islamic": "islamic-tbla",
     57  "islamic-rgsa": "islamic-tbla",
     58 };
     59 
     60 for (let calendar of calendars) {
     61  let dtf1 = new Intl.DateTimeFormat(`${defaultLocale}-u-ca-${calendar}`);
     62  let dtf2 = new Intl.DateTimeFormat(defaultLocale, {calendar});
     63 
     64  assertEq(dtf1.resolvedOptions().calendar, canonical[calendar] ?? calendar);
     65  assertEq(dtf2.resolvedOptions().calendar, canonical[calendar] ?? calendar);
     66 
     67  assertEq(dtf2.format(0), dtf1.format(0));
     68 }
     69 
     70 if (typeof reportCompare === "function")
     71  reportCompare(true, true);