// Copyright 2018 André Bargull; Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

// Slip from intl402/Locale/constructor-non-iana-canon.js
/*---
esid: sec-intl.getcanonicallocales
description: >
    Verifies canonicalization, of specific tags.
info: |
    ApplyOptionsToTag( tag, options )
    10. Return CanonicalizeLanguageTag(tag).
---*/

// Test some language tags where we know that either CLDR or ICU produce
// different results compared to the canonicalization specified in RFC 5646.
var testData = [
    {
        tag: "mo",
        canonical: "ro",
    },
    {
        tag: "es-ES-preeuro",
    },
    {
        tag: "uz-UZ-cyrillic",
    },
    {
        tag: "posix",
    },
    {
        tag: "hi-direct",
    },
    {
        tag: "zh-pinyin",
    },
    {
        tag: "zh-stroke",
    },
    {
        tag: "aar-x-private",
        // "aar" should be canonicalized into "aa" because "aar" matches the type attribute of
        // a languageAlias element in 
        // https://www.unicode.org/repos/cldr/trunk/common/supplemental/supplementalMetadata.xml
        canonical: "aa-x-private", 
    },
    {
        tag: "heb-x-private",
        // "heb" should be canonicalized into "he" because "heb" matches the type attribute of
        // a languageAlias element in 
        // https://www.unicode.org/repos/cldr/trunk/common/supplemental/supplementalMetadata.xml
        canonical: "he-x-private",
    },
    {
        tag: "de-u-kf",
    },
    {
        tag: "ces",
        // "ces" should be canonicalized into "cs" because "ces" matches the type attribute of
        // a languageAlias element in 
        // https://www.unicode.org/repos/cldr/trunk/common/supplemental/supplementalMetadata.xml
        canonical: "cs",
    },
    {
        // ECMA-402 currently requires that variant subtags are not canonicalized.
        // https://github.com/tc39/ecma402/issues/330
        tag: "hy-arevela",
        canonical: "hy-arevela",
    },
    {
        // ECMA-402 currently requires that variant subtags are not canonicalized.
        // https://github.com/tc39/ecma402/issues/330
        tag: "hy-arevmda",
        canonical: "hy-arevmda",
    },
];

for (const {tag, canonical = tag} of testData) {
    assert.sameValue(
      Intl.getCanonicalLocales(tag)[0],
      canonical,
      'The value of Intl.getCanonicalLocales(tag)[0] equals the value of `canonical`'
    );
}
