Source code

Revision control

Copy as Markdown

Other Tools

// |reftest| skip-if(!this.hasOwnProperty("Temporal"))
const calendar = "hebrew";
function assertDate(actual, {year, month, monthCode, day}) {
assertEq(actual.year, year);
assertEq(actual.month, month);
assertEq(actual.monthCode, monthCode);
assertEq(actual.day, day);
}
// 5783 is a common year.
const commonYear = 5783;
// 5784 is a leap year.
const leapYear = 5784;
// Test common and leap years.
for (let year of [commonYear, leapYear]) {
let firstDayOfYear = Temporal.PlainDate.from({calendar, year, monthCode: "M01", day: 1});
assertEq(firstDayOfYear.inLeapYear, (year === leapYear));
let monthsInYear = firstDayOfYear.monthsInYear;
assertEq(monthsInYear, 12 + firstDayOfYear.inLeapYear);
// Test for each month in the year.
for (let month = 1; month <= monthsInYear; ++month) {
let firstDayOfMonthFromOrdinalMonth = Temporal.PlainDate.from({calendar, year, month, day: 1});
let monthCode = firstDayOfMonthFromOrdinalMonth.monthCode;
assertDate(firstDayOfMonthFromOrdinalMonth, {year, month, monthCode, day: 1});
let firstDayOfMonthFromMonthCode = Temporal.PlainDate.from({calendar, year, monthCode, day: 1});
assertDate(firstDayOfMonthFromMonthCode, {year, month, monthCode, day: 1});
// 29-30 days for each month.
let daysInMonth = firstDayOfMonthFromOrdinalMonth.daysInMonth;
assertEq(29 <= daysInMonth && daysInMonth <= 30 , true);
// Test for each day of the month.
for (let day = 2; day <= daysInMonth; ++day) {
for (let overflow of ["constrain", "reject"]) {
let fromOrdinalMonth = Temporal.PlainDate.from({calendar, year, month, day}, {overflow});
assertDate(fromOrdinalMonth, {year, month, monthCode, day});
let fromMonthCode = Temporal.PlainDate.from({calendar, year, monthCode, day}, {overflow});
assertDate(fromMonthCode, {year, month, monthCode, day});
}
}
// Test too large day values.
for (let day = daysInMonth + 1; day <= daysInMonth + 4; ++day) {
let fromOrdinalMonth = Temporal.PlainDate.from({calendar, year, month, day}, {overflow: "constrain"});
assertDate(fromOrdinalMonth, {year, month, monthCode, day: daysInMonth});
let fromMonthCode = Temporal.PlainDate.from({calendar, year, monthCode, day}, {overflow: "constrain"});
assertDate(fromMonthCode, {year, month, monthCode, day: daysInMonth});
assertThrowsInstanceOf(() => {
Temporal.PlainDate.from({calendar, year, month, day}, {overflow: "reject"});
}, RangeError);
assertThrowsInstanceOf(() => {
Temporal.PlainDate.from({calendar, year, monthCode, day}, {overflow: "reject"});
}, RangeError);
}
}
}
if (typeof reportCompare === "function")
reportCompare(true, true);