| // Copyright (C) 2020 Igalia, S.L. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file. |
| |
| /*--- |
| description: Temporal.PlainDate.prototype.add throws a RangeError if any value in a property bag is Infinity |
| esid: sec-temporal.plaindate.prototype.add |
| features: [Temporal] |
| ---*/ |
| |
| const overflows = ["constrain", "reject"]; |
| const fields = ["years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds", "microseconds", "nanoseconds"]; |
| |
| const instance = Temporal.PlainDate.from({ year: 2000, month: 5, day: 2 }); |
| |
| overflows.forEach((overflow) => { |
| fields.forEach((field) => { |
| assert.throws(RangeError, () => instance.add({ [field]: Infinity }, { overflow })); |
| }); |
| }); |
| |
| let calls = 0; |
| const obj = { |
| valueOf() { |
| calls++; |
| return Infinity; |
| } |
| }; |
| |
| overflows.forEach((overflow) => { |
| fields.forEach((field) => { |
| calls = 0; |
| assert.throws(RangeError, () => instance.add({ [field]: obj }, { overflow })); |
| assert.sameValue(calls, 1, "it fails after fetching the primitive value"); |
| }); |
| }); |