blob: 430c73b92b8ce2079a185e056f88653e5cec2c2c [file] [log] [blame]
//@ skip if $hostOS == "windows" or $hostOS == "darwin" or $hostOS == "linux"
//@ requireOptions("--useIntlNumberFormatToParts=true")
description("This test checks the behavior of Intl.NumberFormat.prototype.formatToParts as described in the ECMAScript Internationalization API Specification.");
shouldBeType("Intl.NumberFormat.prototype.formatToParts", "Function");
shouldBe("Intl.NumberFormat.prototype.formatToParts.length", "1");
shouldBeTrue("Object.getOwnPropertyDescriptor(Intl.NumberFormat.prototype, 'formatToParts').writable");
shouldBeFalse("Object.getOwnPropertyDescriptor(Intl.NumberFormat.prototype, 'formatToParts').enumerable");
shouldBeTrue("Object.getOwnPropertyDescriptor(Intl.NumberFormat.prototype, 'formatToParts').configurable");
shouldBe("Object.getOwnPropertyDescriptor(Intl.NumberFormat.prototype, 'formatToParts').get", "undefined");
shouldBe("Object.getOwnPropertyDescriptor(Intl.NumberFormat.prototype, 'formatToParts').set", "undefined");
// Handles non-finite and non-number
shouldBe("JSON.stringify(Intl.NumberFormat('en').formatToParts(-Infinity))", `JSON.stringify([
{type:"minusSign",value:"-"},
{type:"infinity",value:"∞"}
])`);
shouldBe("JSON.stringify(Intl.NumberFormat('en').formatToParts('one'))", `JSON.stringify([
{type:"nan",value:"NaN"}
])`);
// Handles percents
shouldBe("JSON.stringify(Intl.NumberFormat('en-US', {style:'percent'}).formatToParts(1))", `JSON.stringify([
{type:"integer",value:"100"},
{type:"percentSign",value:"%"}
])`);
// Handles locale, currency, and number system
shouldBe(`JSON.stringify(
Intl.NumberFormat("pt-BR-u-nu-fullwide", {
minimumFractionDigits: "3", style: "currency", currency: "USD", currencyDisplay: "name"
}).formatToParts(21069933563725.1)
)`, `JSON.stringify([
{type:"integer",value:"21"},
{type:"group",value:"."},
{type:"integer",value:"069"},
{type:"group",value:"."},
{type:"integer",value:"933"},
{type:"group",value:"."},
{type:"integer",value:"563"},
{type:"group",value:"."},
{type:"integer",value:"725"},
{type:"decimal",value:","},
{type:"fraction",value:"100"},
{type:"literal",value:" "},
{type:"currency",value:"Dólares americanos"},
])`);
shouldBe("+Intl.NumberFormat('en-US', { useGrouping: false }).formatToParts(Number.MAX_SAFE_INTEGER)[0].value", "Number.MAX_SAFE_INTEGER");
// Exceed the 32 character default buffer size
shouldBe("Intl.NumberFormat('en-US', { useGrouping: false }).formatToParts(Number.MAX_VALUE).length", "1");
shouldBe("Intl.NumberFormat('en-US', { useGrouping: false }).formatToParts(Number.MAX_VALUE)[0].value.length", "309");
shouldBe("Intl.NumberFormat('en-US').formatToParts(Number.MAX_VALUE).length", "205");