1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-temporal.calendar.prototype.fields
description: Duplicate fields are not allowed in the argument to Calendar.prototype.fields
info: |
sec-temporal.calendar.prototype.fields step 7.b.iii:
iii. If _fieldNames_ contains _nextValue_, then
1. Let _completion_ be ThrowCompletion(a newly created *RangeError* object).
2. Return ? IteratorClose(_iteratorRecord_, _completion_).
features: [Temporal]
---*/
const calendar = new Temporal.Calendar("iso8601");
assert.throws(RangeError, () => calendar.fields(["day", "month", "day"]));
assert.throws(RangeError, () => calendar.fields(["year", "month", "monthCode", "day", "year"]));
const manyFields = {
count: 0
};
manyFields[Symbol.iterator] = function*() {
while (this.count++ < 100) yield "year";
};
assert.throws(RangeError, () => calendar.fields(manyFields), "Rejected duplicate values");
assert.sameValue(manyFields.count, 2, "Rejected first duplicate value");
reportCompare(0, 0);
|