diff --git a/test/built-ins/Temporal/Duration/prototype/add/argument-string.js b/test/built-ins/Temporal/Duration/prototype/add/argument-string.js new file mode 100644 index 0000000000..6e129e842e --- /dev/null +++ b/test/built-ins/Temporal/Duration/prototype/add/argument-string.js @@ -0,0 +1,14 @@ +// Copyright (C) 2022 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.duration.prototype.add +description: String arguments are supported. +includes: [temporalHelpers.js] +features: [Temporal] +---*/ + +const duration = Temporal.Duration.from({ days: 1, minutes: 5 }); +const result = duration.add("P2DT5M"); +TemporalHelpers.assertDuration(result, 0, 0, 0, 3, 0, 10, 0, 0, 0, 0, "String argument should be supported"); +assert.throws(RangeError, () => duration.add("2DT5M"), "Invalid string argument should throw"); diff --git a/test/built-ins/Temporal/Duration/prototype/add/basic.js b/test/built-ins/Temporal/Duration/prototype/add/basic.js index 46eb1fb6cf..bcbea9aa42 100644 --- a/test/built-ins/Temporal/Duration/prototype/add/basic.js +++ b/test/built-ins/Temporal/Duration/prototype/add/basic.js @@ -26,3 +26,6 @@ TemporalHelpers.assertDuration(duration3.add({ minutes: 122 }), const duration4 = Temporal.Duration.from({ hours: -1, seconds: -3721 }); TemporalHelpers.assertDuration(duration4.add({ minutes: 61, nanoseconds: 3722000000001 }), 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, "balancing flipped sign 2"); +TemporalHelpers.assertDuration(duration1.add({ month: 1, days: 1 }), + 0, 0, 0, 2, 0, 5, 0, 0, 0, 0, + "incorrectly-spelled properties are ignored"); diff --git a/test/built-ins/Temporal/Duration/prototype/add/relativeto-month.js b/test/built-ins/Temporal/Duration/prototype/add/relativeto-month.js new file mode 100644 index 0000000000..5523adcf70 --- /dev/null +++ b/test/built-ins/Temporal/Duration/prototype/add/relativeto-month.js @@ -0,0 +1,18 @@ +// Copyright (C) 2022 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.duration.prototype.add +description: relativeTo with months. +includes: [temporalHelpers.js] +features: [Temporal] +---*/ + +const oneMonth = new Temporal.Duration(0, 1); +const days30 = new Temporal.Duration(0, 0, 0, 30); +TemporalHelpers.assertDuration(oneMonth.add(days30, { relativeTo: Temporal.PlainDate.from('2018-01-01') }), + 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, "January"); +TemporalHelpers.assertDuration(oneMonth.add(days30, { relativeTo: Temporal.PlainDate.from('2018-02-01') }), + 0, 1, 0, 30, 0, 0, 0, 0, 0, 0, "February"); +TemporalHelpers.assertDuration(oneMonth.add(days30, { relativeTo: Temporal.PlainDate.from('2018-03-01') }), + 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, "March"); diff --git a/test/built-ins/Temporal/Duration/prototype/add/relativeto-order.js b/test/built-ins/Temporal/Duration/prototype/add/relativeto-order.js new file mode 100644 index 0000000000..3a00bd00e9 --- /dev/null +++ b/test/built-ins/Temporal/Duration/prototype/add/relativeto-order.js @@ -0,0 +1,16 @@ +// Copyright (C) 2022 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.duration.prototype.add +description: relativeTo with years. +includes: [temporalHelpers.js] +features: [Temporal] +---*/ + +const d1 = new Temporal.Duration(0, 1, 0, 0); +const d2 = new Temporal.Duration(0, 0, 0, 30); +const relativeTo = new Temporal.PlainDate(2000, 1, 1); +TemporalHelpers.assertDuration(d1.add(d2, { relativeTo }), + 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, + "first this is resolved against relativeTo, then the argument against relativeTo + this"); diff --git a/test/built-ins/Temporal/Duration/prototype/add/relativeto-year.js b/test/built-ins/Temporal/Duration/prototype/add/relativeto-year.js new file mode 100644 index 0000000000..1c59f3dff7 --- /dev/null +++ b/test/built-ins/Temporal/Duration/prototype/add/relativeto-year.js @@ -0,0 +1,16 @@ +// Copyright (C) 2022 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.duration.prototype.add +description: relativeTo with years. +includes: [temporalHelpers.js] +features: [Temporal] +---*/ + +const oneYear = new Temporal.Duration(1); +const days365 = new Temporal.Duration(0, 0, 0, 365); +TemporalHelpers.assertDuration(oneYear.add(days365, { relativeTo: Temporal.PlainDate.from("2016-01-01") }), + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, "non-leap year"); +TemporalHelpers.assertDuration(oneYear.add(days365, { relativeTo: Temporal.PlainDate.from("2015-01-01") }), + 1, 11, 0, 30, 0, 0, 0, 0, 0, 0, "leap year"); diff --git a/test/built-ins/Temporal/Duration/prototype/subtract/argument-string.js b/test/built-ins/Temporal/Duration/prototype/subtract/argument-string.js new file mode 100644 index 0000000000..1cfa7b4a65 --- /dev/null +++ b/test/built-ins/Temporal/Duration/prototype/subtract/argument-string.js @@ -0,0 +1,14 @@ +// Copyright (C) 2022 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.duration.prototype.subtract +description: String arguments are supported. +includes: [temporalHelpers.js] +features: [Temporal] +---*/ + +const duration = Temporal.Duration.from({ days: 3, hours: 1, minutes: 10 }); +const result = duration.subtract('P1DT5M'); +TemporalHelpers.assertDuration(result, 0, 0, 0, 2, 1, 5, 0, 0, 0, 0, "String argument should be supported"); +assert.throws(RangeError, () => duration.subtract("2DT5M"), "Invalid string argument should throw"); diff --git a/test/built-ins/Temporal/Duration/prototype/subtract/basic.js b/test/built-ins/Temporal/Duration/prototype/subtract/basic.js index fd221c5402..e63c53b1c9 100644 --- a/test/built-ins/Temporal/Duration/prototype/subtract/basic.js +++ b/test/built-ins/Temporal/Duration/prototype/subtract/basic.js @@ -61,3 +61,6 @@ TemporalHelpers.assertDuration(d1.subtract({ minutes: 122 }), const d2 = Temporal.Duration.from({ hours: 1, seconds: 3721 }); TemporalHelpers.assertDuration(d2.subtract({ minutes: 61, nanoseconds: 3722000000001 }), 0, 0, 0, 0, 0, -1, -1, 0, 0, -1); +TemporalHelpers.assertDuration(duration.subtract({ month: 1, days: 1 }), + 0, 0, 0, 2, 1, 10, 0, 0, 0, 0, + "incorrectly-spelled properties are ignored"); diff --git a/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-month.js b/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-month.js new file mode 100644 index 0000000000..e54edd8649 --- /dev/null +++ b/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-month.js @@ -0,0 +1,18 @@ +// Copyright (C) 2022 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.duration.prototype.subtract +description: relativeTo with months. +includes: [temporalHelpers.js] +features: [Temporal] +---*/ + +const oneMonth = new Temporal.Duration(0, 1); +const days30 = new Temporal.Duration(0, 0, 0, 30); +TemporalHelpers.assertDuration(oneMonth.subtract(days30, { relativeTo: Temporal.PlainDate.from('2018-02-01') }), + 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, "February"); +TemporalHelpers.assertDuration(oneMonth.subtract(days30, { relativeTo: Temporal.PlainDate.from('2018-03-01') }), + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "March"); +TemporalHelpers.assertDuration(oneMonth.subtract(days30, { relativeTo: Temporal.PlainDate.from('2018-04-01') }), + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "April"); diff --git a/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-order.js b/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-order.js new file mode 100644 index 0000000000..cbb51076bc --- /dev/null +++ b/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-order.js @@ -0,0 +1,16 @@ +// Copyright (C) 2022 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.duration.prototype.subtract +description: relativeTo with years. +includes: [temporalHelpers.js] +features: [Temporal] +---*/ + +const d1 = new Temporal.Duration(0, 2, 1, 4); +const d2 = new Temporal.Duration(0, 1, 1, 1); +const relativeTo = new Temporal.PlainDate(2000, 1, 1); +TemporalHelpers.assertDuration(d1.subtract(d2, { relativeTo }), + 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, + "first this is resolved against relativeTo, then the argument against relativeTo + this"); diff --git a/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-year.js b/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-year.js new file mode 100644 index 0000000000..86a4090f93 --- /dev/null +++ b/test/built-ins/Temporal/Duration/prototype/subtract/relativeto-year.js @@ -0,0 +1,16 @@ +// Copyright (C) 2022 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.duration.prototype.subtract +description: relativeTo with years. +includes: [temporalHelpers.js] +features: [Temporal] +---*/ + +const oneYear = new Temporal.Duration(1); +const days365 = new Temporal.Duration(0, 0, 0, 365); +TemporalHelpers.assertDuration(oneYear.subtract(days365, { relativeTo: Temporal.PlainDate.from("2017-01-01") }), + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "non-leap year"); +TemporalHelpers.assertDuration(oneYear.subtract(days365, { relativeTo: Temporal.PlainDate.from("2016-01-01") }), + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "leap year");