|
| 1 | +import { assertTemporalEqual, getProgressBar, makeDateTimeCases, temporalImpl as T, time } from './support.mjs'; |
| 2 | + |
| 3 | +const opts = { overflow: 'reject' }; |
| 4 | +const interestingDateTimes = makeDateTimeCases(); |
| 5 | +const total = interestingDateTimes.length; |
| 6 | + |
| 7 | +await time(async (start) => { |
| 8 | + const progress = getProgressBar(start, total); |
| 9 | + |
| 10 | + for (const [dateTime, dateTimeStr] of interestingDateTimes) { |
| 11 | + progress.tick(1, { test: dateTimeStr }); |
| 12 | + |
| 13 | + const { year, month, monthCode, day, hour, minute, second, millisecond, microsecond, nanosecond } = dateTime; |
| 14 | + |
| 15 | + const propertyBagMonth = { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond }; |
| 16 | + assertTemporalEqual(T.PlainDateTime.from(propertyBagMonth, opts), dateTime, 'from property bag with month'); |
| 17 | + |
| 18 | + const propertyBagMonthCode = { year, monthCode, day, hour, minute, second, millisecond, microsecond, nanosecond }; |
| 19 | + assertTemporalEqual(T.PlainDateTime.from(propertyBagMonthCode, opts), dateTime, 'from property bag with monthCode'); |
| 20 | + |
| 21 | + const propertyBagAll = { year, month, monthCode, day, hour, minute, second, millisecond, microsecond, nanosecond }; |
| 22 | + assertTemporalEqual( |
| 23 | + T.PlainDateTime.from(propertyBagAll, opts), |
| 24 | + dateTime, |
| 25 | + 'from property bag with month and monthCode' |
| 26 | + ); |
| 27 | + |
| 28 | + assertTemporalEqual(T.PlainDateTime.from(dateTimeStr), dateTime, 'from ISO string'); |
| 29 | + |
| 30 | + const stringCalendar = dateTime.toString({ calendarName: 'always' }); |
| 31 | + assertTemporalEqual(T.PlainDateTime.from(stringCalendar), dateTime, 'from ISO string with calendar'); |
| 32 | + |
| 33 | + const yPart = `${year < 0 ? '-' : '+'}${String(Math.abs(year)).padStart(6, '0')}`; |
| 34 | + const monPart = String(month).padStart(2, '0'); |
| 35 | + const dPart = String(day).padStart(2, '0'); |
| 36 | + const hPart = String(hour).padStart(2, '0'); |
| 37 | + const minPart = String(minute).padStart(2, '0'); |
| 38 | + const sPart = String(second).padStart(2, '0'); |
| 39 | + const msPart = String(millisecond).padStart(3, '0'); |
| 40 | + const µsPart = String(microsecond).padStart(3, '0'); |
| 41 | + const nsPart = String(nanosecond).padStart(3, '0'); |
| 42 | + const weirdString = `${yPart}${monPart}${dPart} ${hPart}${minPart}${sPart},${msPart}${µsPart}${nsPart}+1234`; |
| 43 | + assertTemporalEqual( |
| 44 | + T.PlainDateTime.from(weirdString), |
| 45 | + dateTime, |
| 46 | + 'from ISO string with weird but allowed formatting' |
| 47 | + ); |
| 48 | + } |
| 49 | + |
| 50 | + return total; |
| 51 | +}); |
0 commit comments