// 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 canonicalisation within transformed extension subtags.
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]
---*/

const testData = {
  // Variant subtags are alphabetically ordered.
  "sl-t-sl-rozaj-biske-1994": "sl-t-sl-1994-biske-rozaj",

  // tfield subtags are alphabetically ordered.
  // (Also tests subtag case normalisation.)
  "DE-T-M0-DIN-K0-QWERTZ": "de-t-k0-qwertz-m0-din",

  // "true" tvalue subtags aren't removed.
  // (UTS 35 version 36, §3.2.1 claims otherwise, but tkey must be followed by
  // tvalue, so that's likely a spec bug in UTS 35.)
  "en-t-m0-true": "en-t-m0-true",

  // tlang subtags are canonicalised.
  "en-t-iw": "en-t-he",

  // Deprecated tvalue subtags are replaced by their preferred value.
  "und-Latn-t-und-hani-m0-names": "und-Latn-t-und-hani-m0-prprname",
};

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

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

reportCompare(0, 0);
