| // |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); |