Source code

Revision control

Copy as Markdown

Other Tools

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