summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/fields/argument-throws-duplicate-keys.js
blob: be868d3bf758f64e89d9358c230da48195b68625 (plain)
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);