mirror of
https://github.com/tc39/test262.git
synced 2025-11-16 11:49:45 +01:00
Adapts the tests that checked arbitrarily long loops, to now check that an exception is thrown if the loop would happen. Adds tests that exercise the newly added checks on return values of getPossibleInstantsFor and getOffsetNanosecondsFor that limit UTC offset shifts to 24 hours or less. Also updates some step numbers in related tests.
49 lines
1.6 KiB
JavaScript
49 lines
1.6 KiB
JavaScript
// Copyright (C) 2024 Igalia, S.L. All rights reserved.
|
||
// This code is governed by the BSD license found in the LICENSE file.
|
||
|
||
/*---
|
||
esid: sec-temporal.duration.prototype.compare
|
||
description: >
|
||
UTC offset shift returned by getPossibleInstantsFor can be at most 24 hours.
|
||
features: [Temporal]
|
||
info: |
|
||
GetPossibleInstantsFor:
|
||
5.b.i. Let _numResults_ be _list_'s length.
|
||
ii. If _numResults_ > 1, then
|
||
1. Let _epochNs_ be a new empty List.
|
||
2. For each value _instant_ in list, do
|
||
a. Append _instant_.[[EpochNanoseconds]] to the end of the List _epochNs_.
|
||
3. Let _min_ be the least element of the List _epochNs_.
|
||
4. Let _max_ be the greatest element of the List _epochNs_.
|
||
5. If abs(ℝ(_max_ - _min_)) > nsPerDay, throw a *RangeError* exception.
|
||
---*/
|
||
|
||
class ShiftLonger24Hour extends Temporal.TimeZone {
|
||
id = 'TestTimeZone';
|
||
|
||
constructor() {
|
||
super('UTC');
|
||
}
|
||
|
||
getOffsetNanosecondsFor(instant) {
|
||
return 0;
|
||
}
|
||
|
||
getPossibleInstantsFor(plainDateTime) {
|
||
const utc = new Temporal.TimeZone("UTC");
|
||
const [utcInstant] = utc.getPossibleInstantsFor(plainDateTime);
|
||
return [
|
||
utcInstant.subtract({ hours: 12, nanoseconds: 1 }),
|
||
utcInstant.add({ hours: 12 }),
|
||
utcInstant, // add a third value in case the implementation doesn't sort
|
||
];
|
||
}
|
||
}
|
||
|
||
const timeZone = new ShiftLonger24Hour();
|
||
const relativeTo = { year: 1970, month: 1, day: 1, hour: 12, timeZone };
|
||
const duration1 = new Temporal.Duration(1);
|
||
const duration2 = new Temporal.Duration(2);
|
||
|
||
assert.throws(RangeError, () => Temporal.Duration.compare(duration1, duration2, {relativeTo: relativeTo}), "RangeError should be thrown");
|