From a9d9ab1a515a2c1537ac621c1baa4cc9d487514f Mon Sep 17 00:00:00 2001 From: Daniel Ehrenberg Date: Mon, 6 Mar 2017 15:19:40 +0100 Subject: [PATCH] Add tests for some NumberFormat options edge cases Closes #888 These tests are regression tests for V8 failures at top of tree, https://bugs.chromium.org/p/v8/issues/detail?id=6015 https://bugs.chromium.org/p/v8/issues/detail?id=6016 Neither issue is present in JSC or SpiderMonkey. They are fixed by the V8 patch https://codereview.chromium.org/2717613005 --- .../dft-currency-mnfd-range-check-mxfd.js | 21 +++++++++++++++++++ .../fraction-digit-options-read-once.js | 18 ++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 test/intl402/NumberFormat/dft-currency-mnfd-range-check-mxfd.js create mode 100644 test/intl402/NumberFormat/fraction-digit-options-read-once.js diff --git a/test/intl402/NumberFormat/dft-currency-mnfd-range-check-mxfd.js b/test/intl402/NumberFormat/dft-currency-mnfd-range-check-mxfd.js new file mode 100644 index 0000000000..6cefcb96d2 --- /dev/null +++ b/test/intl402/NumberFormat/dft-currency-mnfd-range-check-mxfd.js @@ -0,0 +1,21 @@ +// Copyright 2017 the V8 project authors. All rights reserved. +// This code is governed by the license found in the LICENSE file. + +/*--- +esid: sec-setnfdigitoptions +description: > + When a currency is used in Intl.NumberFormat and minimumFractionDigits is + not provided, maximumFractionDigits should be range-checked against it. +---*/ + +assert.throws(RangeError, () => new Intl.NumberFormat('en', { + style: 'currency', + currency: 'USD', + maximumFractionDigits: 1 +}), 'CurrencyDigits(USD) == 1'); + +assert.throws(RangeError, () => new Intl.NumberFormat('en', { + style: 'currency', + currency: 'CLF', + maximumFractionDigits: 4 +}), 'CurrencyDigits(CLF) == 4'); diff --git a/test/intl402/NumberFormat/fraction-digit-options-read-once.js b/test/intl402/NumberFormat/fraction-digit-options-read-once.js new file mode 100644 index 0000000000..e83d25c7a3 --- /dev/null +++ b/test/intl402/NumberFormat/fraction-digit-options-read-once.js @@ -0,0 +1,18 @@ +// Copyright 2017 the V8 project authors. All rights reserved. +// This code is governed by the license found in the LICENSE file. + +/*--- +esid: sec-setnfdigitoptions +description: > + The maximum and minimum fraction digits properties should be read from + the options bag exactly once from the NumberFormat constructor. +info: Regression test for https://bugs.chromium.org/p/v8/issues/detail?id=6015 +---*/ + +var calls = []; + +new Intl.NumberFormat("en", { get minimumFractionDigits() { calls.push('minimumFractionDigits') }, + get maximumFractionDigits() { calls.push('maximumFractionDigits') } }); +assert.sameValue(calls.length, 2); +assert.sameValue(calls[0], 'minimumFractionDigits'); +assert.sameValue(calls[1], 'maximumFractionDigits');