summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/intl402/Intl/getCanonicalLocales/unicode-ext-key-with-digit.js
blob: 9271e01f7a9aa10532a247e49aa1979692fd8484 (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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// Copyright (C) 2020 André Bargull. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-intl.getcanonicallocales
description: >
  Test Unicode extension subtags where the ukey subtag contains a digit.
info: |
  8.2.1 Intl.getCanonicalLocales (locales)
    1. Let ll be ? CanonicalizeLocaleList(locales).
    2. Return CreateArrayFromList(ll).

  9.2.1 CanonicalizeLocaleList (locales)
    ...
    7. Repeat, while k < len
      ...
      c. If kPresent is true, then
        ...
        v. If IsStructurallyValidLanguageTag(tag) is false, throw a RangeError exception.
        vi. Let canonicalizedTag be CanonicalizeUnicodeLocaleId(tag).
        ...

includes: [testIntl.js]
---*/

// Unicode locale extension sequences don't allow keys with a digit as their
// second character.
const invalidCases = [
  "en-u-c0",
  "en-u-00",
];

// The first character is allowed to be a digit.
const validCases = [
  "en-u-0c",
];

for (let invalid of invalidCases) {
  // Make sure the test data is correct.
  assert.sameValue(isCanonicalizedStructurallyValidLanguageTag(invalid), false,
                   "\"" + invalid + "\" isn't a structurally valid language tag.");

  assert.throws(RangeError, () => Intl.getCanonicalLocales(invalid));
}

for (let valid of validCases) {
  // Make sure the test data is correct.
  assert(isCanonicalizedStructurallyValidLanguageTag(valid),
         "\"" + valid + "\" is a canonical and structurally valid language tag.");

  let result = Intl.getCanonicalLocales(valid);
  assert.sameValue(result.length, 1);
  assert.sameValue(result[0], valid);
}

reportCompare(0, 0);