Added new tests to reflect the change that daysInMonth is the count of days in a month

This change affects how PlainYearMonth's add and subtract behave. They
now ignore daysInMonth reimplementations in the calendar, and they call
dateadd() a different number of times.

See https://github.com/tc39/proposal-temporal/issues/1315
This commit is contained in:
Guillaume Emont 2023-04-25 16:48:04 +02:00 committed by Philip Chimento
parent d7fa398364
commit 72c0c5e163
4 changed files with 82 additions and 0 deletions

View File

@ -0,0 +1,18 @@
// Copyright (C) 2023 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-temporal.plainyearmonth.prototype.add
description: Duration addition to PlainYearMonth calls Calendar.dateAdd the right number of times
includes: [temporalHelpers.js]
features: [Temporal]
---*/
const calendar = TemporalHelpers.calendarDateAddPlainDateInstance();
const instance = new Temporal.PlainYearMonth(1983, 3, calendar);
TemporalHelpers.assertPlainYearMonth(instance.add({days: 31}), 1983, 4, 'M04', "Adding 31 days to march in is8601 calendar")
assert.sameValue(calendar.dateAddCallCount, 1, "dateAdd called once with positive add");
calendar.dateAddCallCount = 0;
TemporalHelpers.assertPlainYearMonth(instance.add({days: -31}), 1983, 2, 'M02', "Adding -31 days to march in is8601 calendar")
assert.sameValue(calendar.dateAddCallCount, 3, "dateAdd called 3 times with negative add");

View File

@ -0,0 +1,23 @@
// Copyright (C) 2023 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-temporal.plainyearmonth.prototype.add
description: Addition of a negative duration to a PlainYearMonth is not influenced by the implementation of daysInMonth()
includes: [temporalHelpers.js]
features: [Temporal]
---*/
class CustomCalendar extends Temporal.Calendar {
constructor() {
super("iso8601");
}
daysInMonth(ym, ...args) {
return 15;
}
}
const customCalendar = new CustomCalendar();
const instance = new Temporal.PlainYearMonth(2023, 3, customCalendar);
TemporalHelpers.assertPlainYearMonth(instance.add({days: -30}), 2023, 3, 'M03', "Adding -30 days from calendar reimplementing daysinMonth()")

View File

@ -0,0 +1,18 @@
// Copyright (C) 2023 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-temporal.plainyearmonth.prototype.subtract
description: Duration subtraction from PlainYearMonth calls Calendar.dateAdd the right number of times
includes: [temporalHelpers.js]
features: [Temporal]
---*/
const calendar = TemporalHelpers.calendarDateAddPlainDateInstance();
const instance = new Temporal.PlainYearMonth(1983, 3, calendar);
TemporalHelpers.assertPlainYearMonth(instance.subtract({days: 31}), 1983, 2, 'M02', "Removing 31 days to march in is8601 calendar")
assert.sameValue(calendar.dateAddCallCount, 3, "dateAdd called 3 times with positive subtract");
calendar.dateAddCallCount = 0;
TemporalHelpers.assertPlainYearMonth(instance.subtract({days: -31}), 1983, 4, 'M04', "Removing -31 days to march in is8601 calendar")
assert.sameValue(calendar.dateAddCallCount, 1, "dateAdd called once with negative subtract");

View File

@ -0,0 +1,23 @@
// Copyright (C) 2023 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-temporal.plainyearmonth.prototype.subtract
description: Subtraction of positive duration to a PlainYearMonth is not influenced by the implementation of daysInMonth()
includes: [temporalHelpers.js]
features: [Temporal]
---*/
class CustomCalendar extends Temporal.Calendar {
constructor() {
super("iso8601");
}
daysInMonth(ym, ...args) {
return 15;
}
}
const customCalendar = new CustomCalendar();
const instance = new Temporal.PlainYearMonth(2023, 3, customCalendar);
TemporalHelpers.assertPlainYearMonth(instance.subtract({days: 30}), 2023, 3, 'M03', "Subtracting 30 days from calendar reimplementing daysinMonth()")