shell.js (1406B)
1 /*--- 2 defines: [ISOFields, assertSameISOFields] 3 allow_unused: True 4 ---*/ 5 6 function ISOFields(monthDay) { 7 let re = /^(?<year>-?\d{4,6})-(?<month>\d{2})-(?<day>\d{2})\[u-ca=(?<calendar>[\w\-]+)\]$/; 8 9 let str = monthDay.toString({calendarName: "always"}); 10 let match = str.match(re); 11 assertEq(match !== null, true, `can't match: ${str}`); 12 13 let {year, month, day, calendar} = match.groups; 14 let isoYear = Number(year); 15 let isoMonth = Number(month); 16 let isoDay = Number(day); 17 18 let date = Temporal.PlainDate.from(str); 19 let isoDate = date.withCalendar("iso8601"); 20 21 assertEq(calendar, date.calendarId); 22 assertEq(isoYear, isoDate.year); 23 assertEq(isoMonth, isoDate.month); 24 assertEq(isoDay, isoDate.day); 25 26 return { 27 isoYear, 28 isoMonth, 29 isoDay, 30 calendar, 31 }; 32 } 33 34 function assertSameISOFields(actual, expected) { 35 let actualFields = ISOFields(actual); 36 let expectedFields = ISOFields(expected); 37 38 assertEq(typeof actualFields.isoYear, "number"); 39 assertEq(typeof actualFields.isoMonth, "number"); 40 assertEq(typeof actualFields.isoDay, "number"); 41 42 assertEq(actualFields.isoMonth > 0, true); 43 assertEq(actualFields.isoDay > 0, true); 44 45 assertEq(actualFields.isoYear, expectedFields.isoYear); 46 assertEq(actualFields.isoMonth, expectedFields.isoMonth); 47 assertEq(actualFields.isoDay, expectedFields.isoDay); 48 assertEq(actualFields.calendar, expectedFields.calendar); 49 }