//@ 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:"２１"},
  {type:"group",value:"."},
  {type:"integer",value:"０６９"},
  {type:"group",value:"."},
  {type:"integer",value:"９３３"},
  {type:"group",value:"."},
  {type:"integer",value:"５６３"},
  {type:"group",value:"."},
  {type:"integer",value:"７２５"},
  {type:"decimal",value:","},
  {type:"fraction",value:"１００"},
  {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");
