hebrew-from-ordinal-month.js (2752B)
1 // |reftest| skip-if(!this.hasOwnProperty("Temporal")) 2 3 const calendar = "hebrew"; 4 5 function assertDate(actual, {year, month, monthCode, day}) { 6 assertEq(actual.year, year); 7 assertEq(actual.month, month); 8 assertEq(actual.monthCode, monthCode); 9 assertEq(actual.day, day); 10 } 11 12 // 5783 is a common year. 13 const commonYear = 5783; 14 15 // 5784 is a leap year. 16 const leapYear = 5784; 17 18 // Test common and leap years. 19 for (let year of [commonYear, leapYear]) { 20 let firstDayOfYear = Temporal.PlainDate.from({calendar, year, monthCode: "M01", day: 1}); 21 assertEq(firstDayOfYear.inLeapYear, (year === leapYear)); 22 23 let monthsInYear = firstDayOfYear.monthsInYear; 24 assertEq(monthsInYear, 12 + firstDayOfYear.inLeapYear); 25 26 // Test for each month in the year. 27 for (let month = 1; month <= monthsInYear; ++month) { 28 let firstDayOfMonthFromOrdinalMonth = Temporal.PlainDate.from({calendar, year, month, day: 1}); 29 let monthCode = firstDayOfMonthFromOrdinalMonth.monthCode; 30 assertDate(firstDayOfMonthFromOrdinalMonth, {year, month, monthCode, day: 1}); 31 32 let firstDayOfMonthFromMonthCode = Temporal.PlainDate.from({calendar, year, monthCode, day: 1}); 33 assertDate(firstDayOfMonthFromMonthCode, {year, month, monthCode, day: 1}); 34 35 // 29-30 days for each month. 36 let daysInMonth = firstDayOfMonthFromOrdinalMonth.daysInMonth; 37 assertEq(29 <= daysInMonth && daysInMonth <= 30 , true); 38 39 // Test for each day of the month. 40 for (let day = 2; day <= daysInMonth; ++day) { 41 for (let overflow of ["constrain", "reject"]) { 42 let fromOrdinalMonth = Temporal.PlainDate.from({calendar, year, month, day}, {overflow}); 43 assertDate(fromOrdinalMonth, {year, month, monthCode, day}); 44 45 let fromMonthCode = Temporal.PlainDate.from({calendar, year, monthCode, day}, {overflow}); 46 assertDate(fromMonthCode, {year, month, monthCode, day}); 47 } 48 } 49 50 // Test too large day values. 51 for (let day = daysInMonth + 1; day <= daysInMonth + 4; ++day) { 52 let fromOrdinalMonth = Temporal.PlainDate.from({calendar, year, month, day}, {overflow: "constrain"}); 53 assertDate(fromOrdinalMonth, {year, month, monthCode, day: daysInMonth}); 54 55 let fromMonthCode = Temporal.PlainDate.from({calendar, year, monthCode, day}, {overflow: "constrain"}); 56 assertDate(fromMonthCode, {year, month, monthCode, day: daysInMonth}); 57 58 assertThrowsInstanceOf(() => { 59 Temporal.PlainDate.from({calendar, year, month, day}, {overflow: "reject"}); 60 }, RangeError); 61 assertThrowsInstanceOf(() => { 62 Temporal.PlainDate.from({calendar, year, monthCode, day}, {overflow: "reject"}); 63 }, RangeError); 64 } 65 } 66 } 67 68 if (typeof reportCompare === "function") 69 reportCompare(true, true);