// Copyright 2012 Mozilla Corporation. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
es5id: 9.1_b
description: >
    Tests that appropriate fallback locales are provided for
    supported locales.
author: Norbert Lindenberg
includes: [testIntl.js]
---*/

testWithIntlConstructors(function (Constructor) {
    // The test is only valid under "lookup" localeMatcher
    var info = getLocaleSupportInfo(Constructor, {localeMatcher: "lookup"});
    for (var locale of info.supported) {
        var match = /^([a-z]{2,3})(-[A-Z][a-z]{3})?(-(?:[A-Z]{2}|[0-9]{3}))?$/.exec(locale);
        assert.notSameValue(match, null, "Locale " + locale + " is supported, but can't be parsed.")

        var [language, script, region] = match.slice(1);

        if (script !== undefined) {
            var fallback = language + script;
            assert(info.supported.includes(fallback) || info.byFallback.includes(fallback),
                   "Locale " + locale + " is supported, but fallback " + fallback + " isn't.");
        }

        if (region !== undefined) {
            var fallback = language + region;
            assert(info.supported.includes(fallback) || info.byFallback.includes(fallback),
                   "Locale " + locale + " is supported, but fallback " + fallback + " isn't.");
        }
    }
});
