toLocaleDateString_timeZone.js (2429B)
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 = { timeZoneName: "short" }; 6 7 const tests = [ 8 { 9 timeZone: "UTC", 10 result: "12/6/2012, UTC", 11 }, 12 { 13 timeZone: "America/Los_Angeles", 14 result: "12/6/2012, PST", 15 }, 16 { 17 timeZone: "Europe/Berlin", locale: "de", 18 options: { timeZoneName: "short" }, 19 result: "6.12.2012, MEZ", 20 }, 21 { 22 timeZone: "Europe/Paris", locale: "fr", 23 options: { timeZoneName: "long" }, 24 result: "06/12/2012 heure normale d’Europe centrale", 25 }, 26 { 27 timeZone: "Asia/Shanghai", locale: "zh-Hans-CN", 28 options: { timeZoneName: "long" }, 29 result: "2012/12/6 中国标准时间", 30 }, 31 { 32 timeZone: { toString: () => "Australia/Melbourne" }, locale: "en-AU", 33 result: "06/12/2012, AEDT", 34 }, 35 ]; 36 37 for (let {timeZone, result, locale = defaultLocale, date = defaultDate, options = defaultOptions} of tests) { 38 let s = new Date(date).toLocaleDateString(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).toLocaleDateString(locale, Object.assign({}, options)); 50 let undefinedTz = new Date(date).toLocaleDateString(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).toLocaleDateString(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).toLocaleDateString(undefined, {timeZone}); 67 }, RangeError); 68 } 69 70 // ToString(<symbol>) throws TypeError. 71 assertThrowsInstanceOf(() => { 72 new Date(defaultDate).toLocaleDateString(undefined, {timeZone: Symbol()}); 73 }, TypeError); 74 75 76 if (typeof reportCompare === "function") 77 reportCompare(0, 0, "ok");