summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/intl402/Locale/constructor-tag-tostring.js
blob: 21472ca467dd15780f9027007d096e78946c0f58 (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
32
33
34
35
36
37
38
39
// Copyright 2018 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-intl.locale
description: >
    Checks error cases for the string conversion of the locale argument to the
    Locale constructor.
info: |
    Intl.Locale( tag [, options] )

    ...
    8. If Type(tag) is Object and tag has an [[InitializedLocale]] internal slot, then
    9. Else,
        a. Let tag be ? ToString(tag).
features: [Intl.Locale]
---*/

function CustomError() {}
function WrongCustomError() {}

const errors = [
  { get [Symbol.toPrimitive]() { throw new CustomError(); } },
  { [Symbol.toPrimitive](hint) { assert.sameValue(hint, "string"); throw new CustomError(); } },
  { get toString() { throw new CustomError(); }, get valueOf() { throw new WrongCustomError(); } },
  { toString() { throw new CustomError(); }, get valueOf() { throw new WrongCustomError(); } },
  { toString: undefined, get valueOf() { throw new CustomError(); } },
  { toString: undefined, valueOf() { throw new CustomError(); } },
  { toString() { return {} }, get valueOf() { throw new CustomError(); } },
  { toString() { return {} }, valueOf() { throw new CustomError(); } },
];

for (const input of errors) {
  assert.throws(CustomError, function() {
    new Intl.Locale(input);
  });
}

reportCompare(0, 0);