// |reftest| skip-if(!this.hasOwnProperty("Intl")) /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // Check for duplicate variants and singletons case-insensitively, but don't // check in privateuse components. function checkInvalidLocale(locale) { try { new Intl.NumberFormat(locale); throw new Error("didn't throw"); } catch (e) { assertEq(e instanceof RangeError, true, "expected RangeError for locale '" + locale + "', got " + e); } } var badLocales = [ "en-u-foo-U-foo", "en-tester-Tester", "en-tesTER-TESter", "de-DE-u-kn-true-U-kn-true", "ar-u-foo-q-bar-u-baz", "ar-z-moo-u-foo-q-bar-z-eit-u-baz", ]; for (var locale of badLocales) checkInvalidLocale(locale); // Fully-privateuse locales are okay. for (var locale of badLocales) new Intl.NumberFormat("x-" + locale).format(5); // Locales with trailing privateuse also okay. for (var locale of badLocales) { new Intl.NumberFormat("en-x-" + locale).format(5); new Intl.NumberFormat("en-u-foo-x-u-" + locale).format(5); } if (typeof reportCompare === "function") reportCompare(true, true);