styles.js (3558B)
1 // |reftest| skip-if(!this.hasOwnProperty("Temporal")||!this.hasOwnProperty("Intl")) 2 3 // Test "dateStyle" and "timeStyle" with Temporal types. 4 5 const locales = [ 6 "en", 7 "de", 8 "fr", 9 "es", 10 "ar", 11 "th", 12 "zh", 13 "ja", 14 ]; 15 16 const dateStyles = [ 17 "full", "long", "medium", "short" 18 ]; 19 20 const timeStyles = [ 21 "full", "long", "medium", "short" 22 ]; 23 24 const timeZone = "UTC"; 25 26 let date = new Date(0); 27 let instant = date.toTemporalInstant(); 28 let zonedDateTime = instant.toZonedDateTimeISO(timeZone); 29 let plainDateTime = zonedDateTime.toPlainDateTime(); 30 let plainDate = zonedDateTime.toPlainDate(); 31 let plainTime = zonedDateTime.toPlainTime(); 32 33 // let calendarDate = plainDate.withCalendar(calendar); 34 // let calendarYearMonth = calendarDate.toPlainYearMonth(); 35 // let calendarMonthDay = calendarDate.toPlainMonthDay(); 36 37 function assertNe(actual, expected) { 38 assertEq(Object.is(actual, expected), false); 39 } 40 41 for (let locale of locales) { 42 for (let dateStyle of dateStyles) { 43 let expected = date.toLocaleDateString(locale, {timeZone, dateStyle}); 44 45 assertEq(instant.toLocaleString(locale, {timeZone, dateStyle}), expected); 46 assertEq(zonedDateTime.toLocaleString(locale, {dateStyle}), expected); 47 48 // https://github.com/tc39/proposal-temporal/issues/3062 49 if ( 50 (locale === "zh" && (dateStyle === "long" || dateStyle === "medium")) || 51 (locale === "ja" && (dateStyle === "full" || dateStyle === "long")) 52 ) { 53 assertNe(plainDateTime.toLocaleString(locale, {timeZone, dateStyle}), expected); 54 assertNe(plainDate.toLocaleString(locale, {timeZone, dateStyle}), expected); 55 continue; 56 } 57 58 assertEq(plainDateTime.toLocaleString(locale, {timeZone, dateStyle}), expected); 59 assertEq(plainDate.toLocaleString(locale, {timeZone, dateStyle}), expected); 60 } 61 62 for (let timeStyle of timeStyles) { 63 let expected = date.toLocaleTimeString(locale, {timeZone, timeStyle}); 64 assertEq(instant.toLocaleString(locale, {timeZone, timeStyle}), expected); 65 assertEq(zonedDateTime.toLocaleString(locale, {timeStyle}), expected); 66 67 // "full" and "long" time style include time zone names, which aren't used 68 // by Temporal.PlainDateTime and Temporal.PlainTime. 69 if (timeStyle !== "full" && timeStyle !== "long") { 70 assertEq(plainDateTime.toLocaleString(locale, {timeZone, timeStyle}), expected); 71 assertEq(plainTime.toLocaleString(locale, {timeZone, timeStyle}), expected); 72 } 73 } 74 75 for (let dateStyle of dateStyles) { 76 for (let timeStyle of timeStyles) { 77 let expected = date.toLocaleString(locale, {timeZone, dateStyle, timeStyle}); 78 79 assertEq(instant.toLocaleString(locale, {timeZone, dateStyle, timeStyle}), expected); 80 assertEq(zonedDateTime.toLocaleString(locale, {dateStyle, timeStyle}), expected); 81 82 // "full" and "long" time style include time zone names, which aren't used 83 // by Temporal.PlainDateTime and Temporal.PlainTime. 84 if (timeStyle !== "full" && timeStyle !== "long") { 85 // https://github.com/tc39/proposal-temporal/issues/3062 86 if ( 87 (locale === "zh" && (dateStyle === "long" || dateStyle === "medium")) || 88 (locale === "ja" && (dateStyle === "full" || dateStyle === "long")) 89 ) { 90 assertNe(plainDateTime.toLocaleString(locale, {timeZone, dateStyle, timeStyle}), expected); 91 continue; 92 } 93 assertEq(plainDateTime.toLocaleString(locale, {timeZone, dateStyle, timeStyle}), expected); 94 } 95 } 96 } 97 } 98 99 if (typeof reportCompare === "function") 100 reportCompare(true, true);