tor-browser

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

toLocaleTimeString_timeZone.js (2389B)


      1 // |reftest| skip-if(!this.hasOwnProperty("Intl"))
      2 
      3 const defaultLocale = "en-US";
      4 const defaultDate = Date.UTC(2012, 12-1, 6, 12, 0, 0);
      5 const defaultOptions = {};
      6 
      7 const tests = [
      8    {
      9        timeZone: "UTC",
     10        result: "12:00:00 PM",
     11    },
     12    {
     13        timeZone: "America/Los_Angeles",
     14        result: "4:00:00 AM",
     15    },
     16    {
     17        timeZone: "Europe/Berlin", locale: "de",
     18        options: { timeZoneName: "short" },
     19        result: "13:00:00 MEZ",
     20    },
     21    {
     22        timeZone: "Europe/Paris", locale: "fr",
     23        options: { timeZoneName: "long" },
     24        result: "13:00:00 heure normale d’Europe centrale",
     25    },
     26    {
     27        timeZone: "Asia/Shanghai", locale: "zh-Hans-CN",
     28        options: { timeZoneName: "long" },
     29        result: "中国标准时间 20:00:00",
     30    },
     31    {
     32        timeZone: { toString: () => "Australia/Melbourne" }, locale: "en-AU",
     33        result: "11:00:00 pm",
     34    },
     35 ];
     36 
     37 for (let {timeZone, result, locale = defaultLocale, date = defaultDate, options = defaultOptions} of tests) {
     38    let s = new Date(date).toLocaleTimeString(locale, Object.assign({timeZone}, options));
     39    assertEq(s, result);
     40 }
     41 
     42 
     43 // |undefined| or absent "timeZone" option selects the default time zone.
     44 {
     45    let locale = defaultLocale;
     46    let date = defaultDate;
     47    let options = defaultOptions;
     48 
     49    let absentTz = new Date(date).toLocaleTimeString(locale, Object.assign({}, options));
     50    let undefinedTz = new Date(date).toLocaleTimeString(locale, Object.assign({timeZone: undefined}, options));
     51    assertEq(undefinedTz, absentTz);
     52 }
     53 
     54 
     55 // RangeError is thrown for invalid time zone names.
     56 for (let timeZone of ["", "undefined", "UTC\0", "Vienna", "Africa", "America/NewYork"]) {
     57    assertThrowsInstanceOf(() => {
     58        new Date(defaultDate).toLocaleTimeString(undefined, {timeZone});
     59    }, RangeError);
     60 }
     61 
     62 // RangeError is thrown for these values, because ToString(<value>)
     63 // isn't a valid time zone name.
     64 for (let timeZone of [null, 0, 0.5, true, false, [], {}, function() {}]) {
     65    assertThrowsInstanceOf(() => {
     66        new Date(defaultDate).toLocaleTimeString(undefined, {timeZone});
     67    }, RangeError);
     68 }
     69 
     70 // ToString(<symbol>) throws TypeError.
     71 assertThrowsInstanceOf(() => {
     72    new Date(defaultDate).toLocaleTimeString(undefined, {timeZone: Symbol()});
     73 }, TypeError);
     74 
     75 
     76 if (typeof reportCompare === "function")
     77    reportCompare(0, 0, "ok");