// |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/. */ //----------------------------------------------------------------------------- var BUGNUMBER = 1093421; var summary = "new Intl.NumberFormat(..., { style: 'currency', currency: '...', " + "currencyDisplay: 'name' or 'code' }) should have behavior other than " + "throwing"; print(BUGNUMBER + ": " + summary); //----------------------------------------------------------------------------- // Test that currencyDisplay: "code" behaves correctly and doesn't throw. var usdCodeOptions = { style: "currency", currency: "USD", currencyDisplay: "code", minimumFractionDigits: 0, maximumFractionDigits: 0, }; var usDollarsCode = new Intl.NumberFormat("en-US", usdCodeOptions); assertEq(/USD/.test(usDollarsCode.format(25)), true); // ISO 4217 currency codes are formed from an ISO 3166-1 alpha-2 country code // followed by a third letter. ISO 3166 guarantees that no country code // starting with "X" will ever be assigned. Stepping carefully around a few // 4217-designated special "currencies", XQQ will never have a representation. // Thus, yes: this really is specified to work, as unrecognized or unsupported // codes pass into the string unmodified. var xqqCodeOptions = { style: "currency", currency: "XQQ", currencyDisplay: "code", minimumFractionDigits: 0, maximumFractionDigits: 0, }; var xqqMoneyCode = new Intl.NumberFormat("en-US", xqqCodeOptions); assertEq(/XQQ/.test(xqqMoneyCode.format(25)), true); // Test that currencyDisplay: "name" behaves without throwing. (Unlike the two // above tests, the results here aren't guaranteed as the name is // implementation-defined.) var usdNameOptions = { style: "currency", currency: "USD", currencyDisplay: "name", minimumFractionDigits: 0, maximumFractionDigits: 0, }; var usDollarsName = new Intl.NumberFormat("en-US", usdNameOptions); assertEq(usDollarsName.format(25), "25 US dollars"); // But if the implementation doesn't recognize the currency, the provided code // is used in place of a proper name, unmolested. var xqqNameOptions = { style: "currency", currency: "XQQ", currencyDisplay: "name", minimumFractionDigits: 0, maximumFractionDigits: 0, }; var xqqMoneyName = new Intl.NumberFormat("en-US", xqqNameOptions); assertEq(/XQQ/.test(xqqMoneyName.format(25)), true); if (typeof reportCompare === "function") reportCompare(true, true);