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);