mirror of
https://github.com/tc39/test262.git
synced 2025-07-31 01:44:54 +02:00
I discovered these tests had omitted some arguments to the PlainDateTime constructor, leaving the calendar in the wrong position. The tests were technically not incorrect, since the operation ToIntegerThrowOnInfinity on the string "gregory" gives 0. But they could spuriously pass if the implementation didn't do argument conversion correctly, failed to throw on eraYear being ±Infinity, but subsequently threw RangeError anyway because the calendars of the arguments didn't match.
29 lines
1.5 KiB
JavaScript
29 lines
1.5 KiB
JavaScript
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
|
// This code is governed by the BSD license found in the LICENSE file.
|
|
|
|
/*---
|
|
description: Throws if any value in a property bag for either argument is Infinity or -Infinity
|
|
esid: sec-temporal.plaindatetime.compare
|
|
includes: [compareArray.js, temporalHelpers.js]
|
|
features: [Temporal]
|
|
---*/
|
|
|
|
const other = new Temporal.PlainDateTime(2000, 5, 2, 15, 0, 0, 0, 0, 0, "gregory");
|
|
const base = { era: "ad", month: 5, day: 2, hour: 15, calendar: "gregory" };
|
|
|
|
[Infinity, -Infinity].forEach((inf) => {
|
|
assert.throws(RangeError, () => Temporal.PlainDateTime.compare({ ...base, eraYear: inf }, other), `eraYear property cannot be ${inf}`);
|
|
|
|
assert.throws(RangeError, () => Temporal.PlainDateTime.compare(other, { ...base, eraYear: inf }), `eraYear property cannot be ${inf}`);
|
|
|
|
const calls1 = [];
|
|
const obj1 = TemporalHelpers.toPrimitiveObserver(calls1, inf, "eraYear");
|
|
assert.throws(RangeError, () => Temporal.PlainDateTime.compare({ ...base, eraYear: obj1 }, other));
|
|
assert.compareArray(calls1, ["get eraYear.valueOf", "call eraYear.valueOf"], "it fails after fetching the primitive value");
|
|
|
|
const calls2 = [];
|
|
const obj2 = TemporalHelpers.toPrimitiveObserver(calls2, inf, "eraYear");
|
|
assert.throws(RangeError, () => Temporal.PlainDateTime.compare(other, { ...base, eraYear: obj2 }));
|
|
assert.compareArray(calls2, ["get eraYear.valueOf", "call eraYear.valueOf"], "it fails after fetching the primitive value");
|
|
});
|