// Copyright 2012 Mozilla Corporation. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /** * @description Tests that locales that are reported by resolvedOptions * are also reported by supportedLocalesOf. * @author Norbert Lindenberg */ $INCLUDE("testIntl.js"); testWithIntlConstructors(function (Constructor) { var info = getLocaleSupportInfo(Constructor); // this test should work equally for both matching algorithms ["lookup", "best fit"].forEach(function (matcher) { var supportedByConstructor = info.supported.concat(info.byFallback); var supported = Constructor.supportedLocalesOf(supportedByConstructor, {localeMatcher: matcher}); // we could check the length first, but it's probably more interesting which locales are missing var i = 0; var limit = Math.min(supportedByConstructor.length, supported.length); while (i < limit && supportedByConstructor[i] === supported[i]) { i++; } if (i < supportedByConstructor.length) { $ERROR("Locale " + supportedByConstructor[i] + " is returned by resolvedOptions but not by supportedLocalesOf."); } else if (i < supported.length) { $ERROR("Locale " + supported[i] + " is returned by supportedLocalesOf but not by resolvedOptions."); } }); // this test is only valid for lookup - best fit may find additional locales supported var unsupportedByConstructor = info.unsupported; var supported = Constructor.supportedLocalesOf(unsupportedByConstructor, {localeMatcher: "lookup"}); if (supported.length > 0) { $ERROR("Locale " + supported[0] + " is returned by supportedLocalesOf but not by resolvedOptions."); } return true; });