// 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: >
  A RangeError is thrown when a language tag includes an invalid transformed extension subtag.
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.
        ...

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

const invalid = [
  // empty
  "en-t",
  "en-t-a",
  "en-t-x",
  "en-t-0",

  // incomplete
  "en-t-",
  "en-t-en-",
  "en-t-0x-",

  // tlang: unicode_language_subtag must be 2-3 or 5-8 characters and mustn't
  // contain extlang subtags.
  "en-t-root",
  "en-t-abcdefghi",
  "en-t-ar-aao",

  // tlang: unicode_script_subtag must be 4 alphabetical characters, can't
  // be repeated.
  "en-t-en-lat0",
  "en-t-en-latn-latn",

  // tlang: unicode_region_subtag must either be 2 alpha characters or a three
  // digit code.
  "en-t-en-0",
  "en-t-en-00",
  "en-t-en-0x",
  "en-t-en-x0",
  "en-t-en-latn-0",
  "en-t-en-latn-00",
  "en-t-en-latn-xyz",

  // tlang: unicode_variant_subtag is either 5-8 alphanum characters or 4
  // characters starting with a digit.
  "en-t-en-abcdefghi",
  "en-t-en-latn-gb-ab",
  "en-t-en-latn-gb-abc",
  "en-t-en-latn-gb-abcd",
  "en-t-en-latn-gb-abcdefghi",

  // tkey must be followed by tvalue.
  "en-t-d0",
  "en-t-d0-m0",
  "en-t-d0-x-private",
];

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

  assert.throws(RangeError, () => Intl.getCanonicalLocales(tag), `${tag}`);
}