Skip to content

Commit

Permalink
Added new tests to reflect the change that daysInMonth is the count o…
Browse files Browse the repository at this point in the history
…f 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 tc39/proposal-temporal#1315
  • Loading branch information
guijemont authored and ptomato committed Apr 28, 2023
1 parent 3440192 commit e96a149
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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");
Original file line number Diff line number Diff line change
@@ -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()")
Original file line number Diff line number Diff line change
@@ -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");
Original file line number Diff line number Diff line change
@@ -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()")

0 comments on commit e96a149

Please sign in to comment.