diff options
Diffstat (limited to 'js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts')
46 files changed, 2962 insertions, 0 deletions
diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/browser.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/browser.js new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/browser.js diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/default-parameter.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/default-parameter.js new file mode 100644 index 0000000000..c2ec726586 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/default-parameter.js @@ -0,0 +1,44 @@ +// Copyright (C) 2017 Josh Wolfe. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Intl.NumberFormat.prototype.formatToParts called with no parameters +info: | + Intl.NumberFormat.prototype.formatToParts ([ value ]) + + 3. If value is not provided, let value be undefined. +---*/ + +var nf = new Intl.NumberFormat(); + +const implicit = nf.formatToParts(); +const explicit = nf.formatToParts(undefined); + +// In most locales this is string "NaN", but there are exceptions, cf. "ليس رقم" +// in Arabic, "epäluku" in Finnish, "не число" in Russian, "son emas" in Uzbek etc. +const resultNaN = nf.format(NaN); +const result = [{ type: 'nan', value: resultNaN }]; + +assert( + partsEquals(implicit, explicit), + 'formatToParts() should be equivalent to formatToParts(undefined)' +); + +assert( + partsEquals(implicit, result), + 'Both implicit and explicit calls should have the correct result' +); + +function partsEquals(parts1, parts2) { + if (parts1.length !== parts2.length) return false; + for (var i = 0; i < parts1.length; i++) { + var part1 = parts1[i]; + var part2 = parts2[i]; + if (part1.type !== part2.type) return false; + if (part1.value !== part2.value) return false; + } + return true; +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/engineering-scientific-de-DE.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/engineering-scientific-de-DE.js new file mode 100644 index 0000000000..b325432203 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/engineering-scientific-de-DE.js @@ -0,0 +1,88 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the engineering and scientific notations. +locale: [de-DE] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + 0.000345, + [{"type":"integer","value":"345"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"6"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":","},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"4"}], + ], + [ + 0.345, + [{"type":"integer","value":"345"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":","},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"1"}], + ], + [ + 3.45, + [{"type":"integer","value":"3"},{"type":"decimal","value":","},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":","},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + ], + [ + 34.5, + [{"type":"integer","value":"34"},{"type":"decimal","value":","},{"type":"fraction","value":"5"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":","},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"1"}], + ], + [ + 543, + [{"type":"integer","value":"543"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":","},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"2"}], + ], + [ + 5430, + [{"type":"integer","value":"5"},{"type":"decimal","value":","},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":","},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + ], + [ + 543000, + [{"type":"integer","value":"543"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":","},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"5"}], + ], + [ + 543211.1, + [{"type":"integer","value":"543"},{"type":"decimal","value":","},{"type":"fraction","value":"211"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":","},{"type":"fraction","value":"432"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"5"}], + ], + [ + -Infinity, + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + ], + [ + Infinity, + [{"type":"infinity","value":"∞"}], + [{"type":"infinity","value":"∞"}], + ], + [ + NaN, + [{"type":"nan","value":"NaN"}], + [{"type":"nan","value":"NaN"}], + ], +]; + +for (const [number, engineering, scientific] of tests) { + const nfEngineering = (new Intl.NumberFormat("de-DE", { notation: "engineering" })); + verifyFormatParts(nfEngineering.formatToParts(number), engineering, `${number} - engineering`); + const nfScientific = (new Intl.NumberFormat("de-DE", { notation: "scientific" })); + verifyFormatParts(nfScientific.formatToParts(number), scientific, `${number} - scientific`); +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/engineering-scientific-en-US.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/engineering-scientific-en-US.js new file mode 100644 index 0000000000..c05ad26852 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/engineering-scientific-en-US.js @@ -0,0 +1,88 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the engineering and scientific notations. +locale: [en-US] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + 0.000345, + [{"type":"integer","value":"345"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"6"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"4"}], + ], + [ + 0.345, + [{"type":"integer","value":"345"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"1"}], + ], + [ + 3.45, + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + ], + [ + 34.5, + [{"type":"integer","value":"34"},{"type":"decimal","value":"."},{"type":"fraction","value":"5"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"1"}], + ], + [ + 543, + [{"type":"integer","value":"543"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"2"}], + ], + [ + 5430, + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + ], + [ + 543000, + [{"type":"integer","value":"543"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"5"}], + ], + [ + 543211.1, + [{"type":"integer","value":"543"},{"type":"decimal","value":"."},{"type":"fraction","value":"211"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"432"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"5"}], + ], + [ + -Infinity, + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + ], + [ + Infinity, + [{"type":"infinity","value":"∞"}], + [{"type":"infinity","value":"∞"}], + ], + [ + NaN, + [{"type":"nan","value":"NaN"}], + [{"type":"nan","value":"NaN"}], + ], +]; + +for (const [number, engineering, scientific] of tests) { + const nfEngineering = (new Intl.NumberFormat("en-US", { notation: "engineering" })); + verifyFormatParts(nfEngineering.formatToParts(number), engineering, `${number} - engineering`); + const nfScientific = (new Intl.NumberFormat("en-US", { notation: "scientific" })); + verifyFormatParts(nfScientific.formatToParts(number), scientific, `${number} - scientific`); +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/engineering-scientific-ja-JP.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/engineering-scientific-ja-JP.js new file mode 100644 index 0000000000..4bf8ecaea7 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/engineering-scientific-ja-JP.js @@ -0,0 +1,88 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the engineering and scientific notations. +locale: [ja-JP] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + 0.000345, + [{"type":"integer","value":"345"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"6"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"4"}], + ], + [ + 0.345, + [{"type":"integer","value":"345"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"1"}], + ], + [ + 3.45, + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + ], + [ + 34.5, + [{"type":"integer","value":"34"},{"type":"decimal","value":"."},{"type":"fraction","value":"5"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"1"}], + ], + [ + 543, + [{"type":"integer","value":"543"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"2"}], + ], + [ + 5430, + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + ], + [ + 543000, + [{"type":"integer","value":"543"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"5"}], + ], + [ + 543211.1, + [{"type":"integer","value":"543"},{"type":"decimal","value":"."},{"type":"fraction","value":"211"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"432"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"5"}], + ], + [ + -Infinity, + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + ], + [ + Infinity, + [{"type":"infinity","value":"∞"}], + [{"type":"infinity","value":"∞"}], + ], + [ + NaN, + [{"type":"nan","value":"NaN"}], + [{"type":"nan","value":"NaN"}], + ], +]; + +for (const [number, engineering, scientific] of tests) { + const nfEngineering = (new Intl.NumberFormat("ja-JP", { notation: "engineering" })); + verifyFormatParts(nfEngineering.formatToParts(number), engineering, `${number} - engineering`); + const nfScientific = (new Intl.NumberFormat("ja-JP", { notation: "scientific" })); + verifyFormatParts(nfScientific.formatToParts(number), scientific, `${number} - scientific`); +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/engineering-scientific-ko-KR.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/engineering-scientific-ko-KR.js new file mode 100644 index 0000000000..fa6cc8b5c9 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/engineering-scientific-ko-KR.js @@ -0,0 +1,88 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the engineering and scientific notations. +locale: [ko-KR] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + 0.000345, + [{"type":"integer","value":"345"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"6"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"4"}], + ], + [ + 0.345, + [{"type":"integer","value":"345"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"1"}], + ], + [ + 3.45, + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + ], + [ + 34.5, + [{"type":"integer","value":"34"},{"type":"decimal","value":"."},{"type":"fraction","value":"5"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"1"}], + ], + [ + 543, + [{"type":"integer","value":"543"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"2"}], + ], + [ + 5430, + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + ], + [ + 543000, + [{"type":"integer","value":"543"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"5"}], + ], + [ + 543211.1, + [{"type":"integer","value":"543"},{"type":"decimal","value":"."},{"type":"fraction","value":"211"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"432"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"5"}], + ], + [ + -Infinity, + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + ], + [ + Infinity, + [{"type":"infinity","value":"∞"}], + [{"type":"infinity","value":"∞"}], + ], + [ + NaN, + [{"type":"nan","value":"NaN"}], + [{"type":"nan","value":"NaN"}], + ], +]; + +for (const [number, engineering, scientific] of tests) { + const nfEngineering = (new Intl.NumberFormat("ko-KR", { notation: "engineering" })); + verifyFormatParts(nfEngineering.formatToParts(number), engineering, `${number} - engineering`); + const nfScientific = (new Intl.NumberFormat("ko-KR", { notation: "scientific" })); + verifyFormatParts(nfScientific.formatToParts(number), scientific, `${number} - scientific`); +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/engineering-scientific-zh-TW.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/engineering-scientific-zh-TW.js new file mode 100644 index 0000000000..86b59171cc --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/engineering-scientific-zh-TW.js @@ -0,0 +1,88 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the engineering and scientific notations. +locale: [zh-TW] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + 0.000345, + [{"type":"integer","value":"345"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"6"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"4"}], + ], + [ + 0.345, + [{"type":"integer","value":"345"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentMinusSign","value":"-"},{"type":"exponentInteger","value":"1"}], + ], + [ + 3.45, + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + ], + [ + 34.5, + [{"type":"integer","value":"34"},{"type":"decimal","value":"."},{"type":"fraction","value":"5"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + [{"type":"integer","value":"3"},{"type":"decimal","value":"."},{"type":"fraction","value":"45"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"1"}], + ], + [ + 543, + [{"type":"integer","value":"543"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"0"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"2"}], + ], + [ + 5430, + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + ], + [ + 543000, + [{"type":"integer","value":"543"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"43"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"5"}], + ], + [ + 543211.1, + [{"type":"integer","value":"543"},{"type":"decimal","value":"."},{"type":"fraction","value":"211"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"3"}], + [{"type":"integer","value":"5"},{"type":"decimal","value":"."},{"type":"fraction","value":"432"},{"type":"exponentSeparator","value":"E"},{"type":"exponentInteger","value":"5"}], + ], + [ + -Infinity, + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + ], + [ + Infinity, + [{"type":"infinity","value":"∞"}], + [{"type":"infinity","value":"∞"}], + ], + [ + NaN, + [{"type":"nan","value":"非數值"}], + [{"type":"nan","value":"非數值"}], + ], +]; + +for (const [number, engineering, scientific] of tests) { + const nfEngineering = (new Intl.NumberFormat("zh-TW", { notation: "engineering" })); + verifyFormatParts(nfEngineering.formatToParts(number), engineering, `${number} - engineering`); + const nfScientific = (new Intl.NumberFormat("zh-TW", { notation: "scientific" })); + verifyFormatParts(nfScientific.formatToParts(number), scientific, `${number} - scientific`); +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/length.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/length.js new file mode 100644 index 0000000000..b21012bb80 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/length.js @@ -0,0 +1,16 @@ +// Copyright 2016 Mozilla Corporation. All rights reserved. +// This code is governed by the license found in the LICENSE file. + +/*--- +description: Intl.NumberFormat.prototype.formatToParts.length. +includes: [propertyHelper.js] +---*/ + +verifyProperty(Intl.NumberFormat.prototype.formatToParts, "length", { + value: 1, + writable: false, + enumerable: false, + configurable: true, +}); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/main.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/main.js new file mode 100644 index 0000000000..d6ce6de200 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/main.js @@ -0,0 +1,67 @@ +// Copyright 2016 Mozilla Corporation. All rights reserved. +// This code is governed by the license found in the LICENSE file. + +/*--- +description: Tests for existance and behavior of Intl.NumberFormat.prototype.formatToParts +---*/ + +function reduce(parts) { + return parts.map(part => part.value).join(''); +} + +function compareFTPtoFormat(locales, options, value) { + const nf = new Intl.NumberFormat(locales, options); + assert.sameValue( + nf.format(value), + reduce(nf.formatToParts(value)), + `Expected the same value for value ${value}, + locales: ${locales} and options: ${options}` + ); +} + +const num1 = 123456.789; +const num2 = 0.123; + +compareFTPtoFormat(); +compareFTPtoFormat('pl'); +compareFTPtoFormat(['pl']); +compareFTPtoFormat([]); +compareFTPtoFormat(['de'], undefined, 0); +compareFTPtoFormat(['de'], undefined, -10); +compareFTPtoFormat(['de'], undefined, 25324234235); +compareFTPtoFormat(['de'], undefined, num1); +compareFTPtoFormat(['de'], { + style: 'percent' +}, num2); +compareFTPtoFormat(['de'], { + style: 'currency', + currency: 'EUR' +}, num1); +compareFTPtoFormat(['de'], { + style: 'currency', + currency: 'EUR', + currencyDisplay: 'code' +}, num1); +compareFTPtoFormat(['de'], { + useGrouping: true +}, num1); +compareFTPtoFormat(['de'], { + useGrouping: false +}, num1); +compareFTPtoFormat(['de'], { + minimumIntegerDigits: 2 +}, num2); +compareFTPtoFormat(['de'], { + minimumFractionDigits: 6 +}, num2); +compareFTPtoFormat(['de'], { + maximumFractionDigits: 1 +}, num2); +compareFTPtoFormat(['de'], { + maximumSignificantDigits: 3 +}, num1); +compareFTPtoFormat(['de'], { + maximumSignificantDigits: 5 +}, num1); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/name.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/name.js new file mode 100644 index 0000000000..dcfd9b5cec --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/name.js @@ -0,0 +1,16 @@ +// Copyright 2016 Mozilla Corporation. All rights reserved. +// This code is governed by the license found in the LICENSE file. + +/*--- +description: Intl.NumberFormat.prototype.formatToParts.name value and descriptor. +includes: [propertyHelper.js] +---*/ + +verifyProperty(Intl.NumberFormat.prototype.formatToParts, "name", { + value: "formatToParts", + writable: false, + enumerable: false, + configurable: true, +}); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/notation-compact-de-DE.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/notation-compact-de-DE.js new file mode 100644 index 0000000000..a5de211642 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/notation-compact-de-DE.js @@ -0,0 +1,94 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the compactDisplay option to the NumberFormat constructor. +locale: [de-DE] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} +const tests = [ + [ + 987654321, + [{"type":"integer","value":"988"},{"type":"literal","value":"\u00a0"},{"type":"compact","value":"Mio."}], + [{"type":"integer","value":"988"},{"type":"literal","value":" "},{"type":"compact","value":"Millionen"}], + ], + [ + 98765432, + [{"type":"integer","value":"99"},{"type":"literal","value":"\u00a0"},{"type":"compact","value":"Mio."}], + [{"type":"integer","value":"99"},{"type":"literal","value":" "},{"type":"compact","value":"Millionen"}], + ], + [ + 98765, + [{"type":"integer","value":"98"},{"type":"group","value":"."},{"type":"integer","value":"765"}], + [{"type":"integer","value":"99"},{"type":"literal","value":" "},{"type":"compact","value":"Tausend"}], + ], + [ + 9876, + [{"type":"integer","value":"9876"}], + [{"type":"integer","value":"9"},{"type":"decimal","value":","},{"type":"fraction","value":"9"},{"type":"literal","value":" "},{"type":"compact","value":"Tausend"}], + ], + [ + 159, + [{"type":"integer","value":"159"}], + ], + [ + 15.9, + [{"type":"integer","value":"16"}], + ], + [ + 1.59, + [{"type":"integer","value":"1"},{"type":"decimal","value":","},{"type":"fraction","value":"6"}], + ], + [ + 0.159, + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"16"}], + ], + [ + 0.0159, + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"016"}], + ], + [ + 0.00159, + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"0016"}], + ], + [ + -Infinity, + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + ], + [ + Infinity, + [{"type":"infinity","value":"∞"}], + ], + [ + NaN, + [{"type":"nan","value":"NaN"}], + ], +]; + +for (const [number, short, long = short] of tests) { + const nfShort = new Intl.NumberFormat("de-DE", { + notation: "compact", + compactDisplay: "short", + }); + verifyFormatParts(nfShort.formatToParts(number), short, `Compact short: ${number}`); + + const nfLong = new Intl.NumberFormat("de-DE", { + notation: "compact", + compactDisplay: "long", + }); + verifyFormatParts(nfLong.formatToParts(number), long, `Compact long: ${number}`); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/notation-compact-en-US.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/notation-compact-en-US.js new file mode 100644 index 0000000000..84ea596f29 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/notation-compact-en-US.js @@ -0,0 +1,94 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the compactDisplay option to the NumberFormat constructor. +locale: [en-US] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} +const tests = [ + [ + 987654321, + [{"type":"integer","value":"988"},{"type":"compact","value":"M"}], + [{"type":"integer","value":"988"},{"type":"literal","value":" "},{"type":"compact","value":"million"}], + ], + [ + 98765432, + [{"type":"integer","value":"99"},{"type":"compact","value":"M"}], + [{"type":"integer","value":"99"},{"type":"literal","value":" "},{"type":"compact","value":"million"}], + ], + [ + 98765, + [{"type":"integer","value":"99"},{"type":"compact","value":"K"}], + [{"type":"integer","value":"99"},{"type":"literal","value":" "},{"type":"compact","value":"thousand"}], + ], + [ + 9876, + [{"type":"integer","value":"9"},{"type":"decimal","value":"."},{"type":"fraction","value":"9"},{"type":"compact","value":"K"}], + [{"type":"integer","value":"9"},{"type":"decimal","value":"."},{"type":"fraction","value":"9"},{"type":"literal","value":" "},{"type":"compact","value":"thousand"}], + ], + [ + 159, + [{"type":"integer","value":"159"}], + ], + [ + 15.9, + [{"type":"integer","value":"16"}], + ], + [ + 1.59, + [{"type":"integer","value":"1"},{"type":"decimal","value":"."},{"type":"fraction","value":"6"}], + ], + [ + 0.159, + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"16"}], + ], + [ + 0.0159, + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"016"}], + ], + [ + 0.00159, + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"0016"}], + ], + [ + -Infinity, + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + ], + [ + Infinity, + [{"type":"infinity","value":"∞"}], + ], + [ + NaN, + [{"type":"nan","value":"NaN"}], + ], +]; + +for (const [number, short, long = short] of tests) { + const nfShort = new Intl.NumberFormat("en-US", { + notation: "compact", + compactDisplay: "short", + }); + verifyFormatParts(nfShort.formatToParts(number), short, `Compact short: ${number}`); + + const nfLong = new Intl.NumberFormat("en-US", { + notation: "compact", + compactDisplay: "long", + }); + verifyFormatParts(nfLong.formatToParts(number), long, `Compact long: ${number}`); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/notation-compact-ja-JP.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/notation-compact-ja-JP.js new file mode 100644 index 0000000000..9299f9f7bc --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/notation-compact-ja-JP.js @@ -0,0 +1,90 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the compactDisplay option to the NumberFormat constructor. +locale: [ja-JP] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} +const tests = [ + [ + 987654321, + [{"type":"integer","value":"9"},{"type":"decimal","value":"."},{"type":"fraction","value":"9"},{"type":"compact","value":"億"}], + ], + [ + 98765432, + [{"type":"integer","value":"9877"},{"type":"compact","value":"万"}], + ], + [ + 98765, + [{"type":"integer","value":"9"},{"type":"decimal","value":"."},{"type":"fraction","value":"9"},{"type":"compact","value":"万"}], + ], + [ + 9876, + [{"type":"integer","value":"9876"}], + ], + [ + 159, + [{"type":"integer","value":"159"}], + ], + [ + 15.9, + [{"type":"integer","value":"16"}], + ], + [ + 1.59, + [{"type":"integer","value":"1"},{"type":"decimal","value":"."},{"type":"fraction","value":"6"}], + ], + [ + 0.159, + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"16"}], + ], + [ + 0.0159, + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"016"}], + ], + [ + 0.00159, + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"0016"}], + ], + [ + -Infinity, + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + ], + [ + Infinity, + [{"type":"infinity","value":"∞"}], + ], + [ + NaN, + [{"type":"nan","value":"NaN"}], + ], +]; + +for (const [number, short, long = short] of tests) { + const nfShort = new Intl.NumberFormat("ja-JP", { + notation: "compact", + compactDisplay: "short", + }); + verifyFormatParts(nfShort.formatToParts(number), short, `Compact short: ${number}`); + + const nfLong = new Intl.NumberFormat("ja-JP", { + notation: "compact", + compactDisplay: "long", + }); + verifyFormatParts(nfLong.formatToParts(number), long, `Compact long: ${number}`); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/notation-compact-ko-KR.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/notation-compact-ko-KR.js new file mode 100644 index 0000000000..067c9a3b32 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/notation-compact-ko-KR.js @@ -0,0 +1,90 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the compactDisplay option to the NumberFormat constructor. +locale: [ko-KR] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} +const tests = [ + [ + 987654321, + [{"type":"integer","value":"9"},{"type":"decimal","value":"."},{"type":"fraction","value":"9"},{"type":"compact","value":"억"}], + ], + [ + 98765432, + [{"type":"integer","value":"9877"},{"type":"compact","value":"만"}], + ], + [ + 98765, + [{"type":"integer","value":"9"},{"type":"decimal","value":"."},{"type":"fraction","value":"9"},{"type":"compact","value":"만"}], + ], + [ + 9876, + [{"type":"integer","value":"9"},{"type":"decimal","value":"."},{"type":"fraction","value":"9"},{"type":"compact","value":"천"}], + ], + [ + 159, + [{"type":"integer","value":"159"}], + ], + [ + 15.9, + [{"type":"integer","value":"16"}], + ], + [ + 1.59, + [{"type":"integer","value":"1"},{"type":"decimal","value":"."},{"type":"fraction","value":"6"}], + ], + [ + 0.159, + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"16"}], + ], + [ + 0.0159, + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"016"}], + ], + [ + 0.00159, + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"0016"}], + ], + [ + -Infinity, + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + ], + [ + Infinity, + [{"type":"infinity","value":"∞"}], + ], + [ + NaN, + [{"type":"nan","value":"NaN"}], + ], +]; + +for (const [number, short, long = short] of tests) { + const nfShort = new Intl.NumberFormat("ko-KR", { + notation: "compact", + compactDisplay: "short", + }); + verifyFormatParts(nfShort.formatToParts(number), short, `Compact short: ${number}`); + + const nfLong = new Intl.NumberFormat("ko-KR", { + notation: "compact", + compactDisplay: "long", + }); + verifyFormatParts(nfLong.formatToParts(number), long, `Compact long: ${number}`); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/notation-compact-zh-TW.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/notation-compact-zh-TW.js new file mode 100644 index 0000000000..0b0ab99b1a --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/notation-compact-zh-TW.js @@ -0,0 +1,90 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the compactDisplay option to the NumberFormat constructor. +locale: [zh-TW] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} +const tests = [ + [ + 987654321, + [{"type":"integer","value":"9"},{"type":"decimal","value":"."},{"type":"fraction","value":"9"},{"type":"compact","value":"億"}], + ], + [ + 98765432, + [{"type":"integer","value":"9877"},{"type":"compact","value":"萬"}], + ], + [ + 98765, + [{"type":"integer","value":"9"},{"type":"decimal","value":"."},{"type":"fraction","value":"9"},{"type":"compact","value":"萬"}], + ], + [ + 9876, + [{"type":"integer","value":"9876"}], + ], + [ + 159, + [{"type":"integer","value":"159"}], + ], + [ + 15.9, + [{"type":"integer","value":"16"}], + ], + [ + 1.59, + [{"type":"integer","value":"1"},{"type":"decimal","value":"."},{"type":"fraction","value":"6"}], + ], + [ + 0.159, + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"16"}], + ], + [ + 0.0159, + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"016"}], + ], + [ + 0.00159, + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"0016"}], + ], + [ + -Infinity, + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + ], + [ + Infinity, + [{"type":"infinity","value":"∞"}], + ], + [ + NaN, + [{"type":"nan","value":"非數值"}], + ], +]; + +for (const [number, short, long = short] of tests) { + const nfShort = new Intl.NumberFormat("zh-TW", { + notation: "compact", + compactDisplay: "short", + }); + verifyFormatParts(nfShort.formatToParts(number), short, `Compact short: ${number}`); + + const nfLong = new Intl.NumberFormat("zh-TW", { + notation: "compact", + compactDisplay: "long", + }); + verifyFormatParts(nfLong.formatToParts(number), long, `Compact long: ${number}`); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/percent-en-US.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/percent-en-US.js new file mode 100644 index 0000000000..02b1cb5c42 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/percent-en-US.js @@ -0,0 +1,38 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the percent style and unit. +locale: [en-US] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const nfStyle = new Intl.NumberFormat("en-US", { style: "percent" }); +verifyFormatParts(nfStyle.formatToParts(-123), [ + {"type":"minusSign","value":"-"}, + {"type":"integer","value":"12"}, + {"type":"group","value":","}, + {"type":"integer","value":"300"}, + {"type":"percentSign","value":"%"}, +], "style"); + +const nfUnit = new Intl.NumberFormat("en-US", { style: "unit", unit: "percent" }); +verifyFormatParts(nfUnit.formatToParts(-123), [ + {"type":"minusSign","value":"-"}, + {"type":"integer","value":"123"}, + {"type":"unit","value":"%"}, +], "unit"); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/prop-desc.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/prop-desc.js new file mode 100644 index 0000000000..e667e3bb32 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/prop-desc.js @@ -0,0 +1,41 @@ +// Copyright 2016 Mozilla Corporation. All rights reserved. +// This code is governed by the license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: > + "formatToParts" property of Intl.NumberFormat.prototype. +info: | + 11.4.4 Intl.NumberFormat.prototype.formatToParts + + 7 Requirements for Standard Built-in ECMAScript Objects + + Unless specified otherwise in this document, the objects, functions, and constructors + described in this standard are subject to the generic requirements and restrictions + specified for standard built-in ECMAScript objects in the ECMAScript 2018 Language + Specification, 9th edition, clause 17, or successor. + + 17 ECMAScript Standard Built-in Objects: + + Every accessor property described in clauses 18 through 26 and in Annex B.2 has the + attributes { [[Enumerable]]: false, [[Configurable]]: true } unless otherwise specified. + If only a get accessor function is described, the set accessor function is the default + value, undefined. If only a set accessor is described the get accessor is the default + value, undefined. + +includes: [propertyHelper.js] +---*/ + +assert.sameValue( + typeof Intl.NumberFormat.prototype.formatToParts, + 'function', + '`typeof Intl.NumberFormat.prototype.formatToParts` is `function`' +); + +verifyProperty(Intl.NumberFormat.prototype, "formatToParts", { + writable: true, + enumerable: false, + configurable: true, +}); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/shell.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/shell.js new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/shell.js diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-currency-de-DE.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-currency-de-DE.js new file mode 100644 index 0000000000..d2f61becd6 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-currency-de-DE.js @@ -0,0 +1,72 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [de-DE] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + "auto", + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"integer","value":"987"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + ], + [ + "always", + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"987"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + ], + [ + "never", + [{"type":"integer","value":"987"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"integer","value":"987"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + ], + [ + "exceptZero", + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"987"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + ], +]; + +for (const [signDisplay, negative, negativeNearZero, negativeZero, zero, positiveNearZero, positive] of tests) { + const nf = new Intl.NumberFormat("de-DE", { style: "currency", currency: "USD", currencySign: "accounting", signDisplay }); + verifyFormatParts(nf.formatToParts(-987), negative, "negative"); + verifyFormatParts(nf.formatToParts(-0.0001), negativeNearZero, "negativeNearZero"); + verifyFormatParts(nf.formatToParts(-0), negativeZero, "negativeZero"); + verifyFormatParts(nf.formatToParts(0), zero, "zero"); + verifyFormatParts(nf.formatToParts(0.0001), positiveNearZero, "positiveNearZero"); + verifyFormatParts(nf.formatToParts(987), positive, "positive"); +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-currency-en-US.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-currency-en-US.js new file mode 100644 index 0000000000..9905591d77 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-currency-en-US.js @@ -0,0 +1,72 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [en-US] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + "auto", + [{"type":"literal","value":"("},{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"literal","value":"("},{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"literal","value":"("},{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + ], + [ + "always", + [{"type":"literal","value":"("},{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"literal","value":"("},{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"literal","value":"("},{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"plusSign","value":"+"},{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"plusSign","value":"+"},{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"plusSign","value":"+"},{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + ], + [ + "never", + [{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + ], + [ + "exceptZero", + [{"type":"literal","value":"("},{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"plusSign","value":"+"},{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + ], +]; + +for (const [signDisplay, negative, negativeNearZero, negativeZero, zero, positiveNearZero, positive] of tests) { + const nf = new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", currencySign: "accounting", signDisplay }); + verifyFormatParts(nf.formatToParts(-987), negative, "negative"); + verifyFormatParts(nf.formatToParts(-0.0001), negativeNearZero, "negativeNearZero"); + verifyFormatParts(nf.formatToParts(-0), negativeZero, "negativeZero"); + verifyFormatParts(nf.formatToParts(0), zero, "zero"); + verifyFormatParts(nf.formatToParts(0.0001), positiveNearZero, "positiveNearZero"); + verifyFormatParts(nf.formatToParts(987), positive, "positive"); +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-currency-ja-JP.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-currency-ja-JP.js new file mode 100644 index 0000000000..67d4db79b3 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-currency-ja-JP.js @@ -0,0 +1,72 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [ja-JP] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + "auto", + [{"type":"literal","value":"("},{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"literal","value":"("},{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"literal","value":"("},{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + ], + [ + "always", + [{"type":"literal","value":"("},{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"literal","value":"("},{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"literal","value":"("},{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"plusSign","value":"+"},{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"plusSign","value":"+"},{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"plusSign","value":"+"},{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + ], + [ + "never", + [{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + ], + [ + "exceptZero", + [{"type":"literal","value":"("},{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"plusSign","value":"+"},{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + ], +]; + +for (const [signDisplay, negative, negativeNearZero, negativeZero, zero, positiveNearZero, positive] of tests) { + const nf = new Intl.NumberFormat("ja-JP", { style: "currency", currency: "USD", currencySign: "accounting", signDisplay }); + verifyFormatParts(nf.formatToParts(-987), negative, "negative"); + verifyFormatParts(nf.formatToParts(-0.0001), negativeNearZero, "negativeNearZero"); + verifyFormatParts(nf.formatToParts(-0), negativeZero, "negativeZero"); + verifyFormatParts(nf.formatToParts(0), zero, "zero"); + verifyFormatParts(nf.formatToParts(0.0001), positiveNearZero, "positiveNearZero"); + verifyFormatParts(nf.formatToParts(987), positive, "positive"); +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-currency-ko-KR.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-currency-ko-KR.js new file mode 100644 index 0000000000..226394e2ef --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-currency-ko-KR.js @@ -0,0 +1,72 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [ko-KR] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + "auto", + [{"type":"literal","value":"("},{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"literal","value":"("},{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"literal","value":"("},{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + ], + [ + "always", + [{"type":"literal","value":"("},{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"literal","value":"("},{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"literal","value":"("},{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"plusSign","value":"+"},{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"plusSign","value":"+"},{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"plusSign","value":"+"},{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + ], + [ + "never", + [{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + ], + [ + "exceptZero", + [{"type":"literal","value":"("},{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"plusSign","value":"+"},{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + ], +]; + +for (const [signDisplay, negative, negativeNearZero, negativeZero, zero, positiveNearZero, positive] of tests) { + const nf = new Intl.NumberFormat("ko-KR", { style: "currency", currency: "USD", currencySign: "accounting", signDisplay }); + verifyFormatParts(nf.formatToParts(-987), negative, "negative"); + verifyFormatParts(nf.formatToParts(-0.0001), negativeNearZero, "negativeNearZero"); + verifyFormatParts(nf.formatToParts(-0), negativeZero, "negativeZero"); + verifyFormatParts(nf.formatToParts(0), zero, "zero"); + verifyFormatParts(nf.formatToParts(0.0001), positiveNearZero, "positiveNearZero"); + verifyFormatParts(nf.formatToParts(987), positive, "positive"); +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-currency-zh-TW.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-currency-zh-TW.js new file mode 100644 index 0000000000..27027aee33 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-currency-zh-TW.js @@ -0,0 +1,72 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [zh-TW] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + "auto", + [{"type":"literal","value":"("},{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"literal","value":"("},{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"literal","value":"("},{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + ], + [ + "always", + [{"type":"literal","value":"("},{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"literal","value":"("},{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"literal","value":"("},{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"plusSign","value":"+"},{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"plusSign","value":"+"},{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"plusSign","value":"+"},{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + ], + [ + "never", + [{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + ], + [ + "exceptZero", + [{"type":"literal","value":"("},{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + [{"type":"plusSign","value":"+"},{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + ], +]; + +for (const [signDisplay, negative, negativeNearZero, negativeZero, zero, positiveNearZero, positive] of tests) { + const nf = new Intl.NumberFormat("zh-TW", { style: "currency", currency: "USD", currencySign: "accounting", signDisplay }); + verifyFormatParts(nf.formatToParts(-987), negative, "negative"); + verifyFormatParts(nf.formatToParts(-0.0001), negativeNearZero, "negativeNearZero"); + verifyFormatParts(nf.formatToParts(-0), negativeZero, "negativeZero"); + verifyFormatParts(nf.formatToParts(0), zero, "zero"); + verifyFormatParts(nf.formatToParts(0.0001), positiveNearZero, "positiveNearZero"); + verifyFormatParts(nf.formatToParts(987), positive, "positive"); +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-de-DE.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-de-DE.js new file mode 100644 index 0000000000..f0e57379f6 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-de-DE.js @@ -0,0 +1,87 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [de-DE] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + "auto", + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"987"}], + [{"type":"infinity","value":"∞"}], + [{"type":"nan","value":"NaN"}], + ], + [ + "always", + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"987"}], + [{"type":"plusSign","value":"+"},{"type":"infinity","value":"∞"}], + [{"type":"plusSign","value":"+"},{"type":"nan","value":"NaN"}], + ], + [ + "never", + [{"type":"infinity","value":"∞"}], + [{"type":"integer","value":"987"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"987"}], + [{"type":"infinity","value":"∞"}], + [{"type":"nan","value":"NaN"}], + ], + [ + "exceptZero", + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"987"}], + [{"type":"plusSign","value":"+"},{"type":"infinity","value":"∞"}], + [{"type":"nan","value":"NaN"}], + ], +]; + +for (const [signDisplay, ...expected] of tests) { + const nf = new Intl.NumberFormat("de-DE", {signDisplay}); + verifyFormatParts(nf.formatToParts(-Infinity), expected[0], `-Infinity (${signDisplay})`); + verifyFormatParts(nf.formatToParts(-987), expected[1], `-987 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(-0.0001), expected[2], `-0.0001 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(-0), expected[3], `-0 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(0), expected[4], `0 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(0.0001), expected[5], `0.0001 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(987), expected[6], `987 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(Infinity), expected[7], `Infinity (${signDisplay})`); + verifyFormatParts(nf.formatToParts(NaN), expected[8], `NaN (${signDisplay})`); +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-en-US.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-en-US.js new file mode 100644 index 0000000000..6fdf3bb5a1 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-en-US.js @@ -0,0 +1,87 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [en-US] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + "auto", + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"987"}], + [{"type":"infinity","value":"∞"}], + [{"type":"nan","value":"NaN"}], + ], + [ + "always", + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"987"}], + [{"type":"plusSign","value":"+"},{"type":"infinity","value":"∞"}], + [{"type":"plusSign","value":"+"},{"type":"nan","value":"NaN"}], + ], + [ + "never", + [{"type":"infinity","value":"∞"}], + [{"type":"integer","value":"987"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"987"}], + [{"type":"infinity","value":"∞"}], + [{"type":"nan","value":"NaN"}], + ], + [ + "exceptZero", + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"987"}], + [{"type":"plusSign","value":"+"},{"type":"infinity","value":"∞"}], + [{"type":"nan","value":"NaN"}], + ], +]; + +for (const [signDisplay, ...expected] of tests) { + const nf = new Intl.NumberFormat("en-US", {signDisplay}); + verifyFormatParts(nf.formatToParts(-Infinity), expected[0], `-Infinity (${signDisplay})`); + verifyFormatParts(nf.formatToParts(-987), expected[1], `-987 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(-0.0001), expected[2], `-0.0001 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(-0), expected[3], `-0 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(0), expected[4], `0 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(0.0001), expected[5], `0.0001 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(987), expected[6], `987 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(Infinity), expected[7], `Infinity (${signDisplay})`); + verifyFormatParts(nf.formatToParts(NaN), expected[8], `NaN (${signDisplay})`); +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-ja-JP.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-ja-JP.js new file mode 100644 index 0000000000..41748c1dab --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-ja-JP.js @@ -0,0 +1,87 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [ja-JP] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + "auto", + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"987"}], + [{"type":"infinity","value":"∞"}], + [{"type":"nan","value":"NaN"}], + ], + [ + "always", + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"987"}], + [{"type":"plusSign","value":"+"},{"type":"infinity","value":"∞"}], + [{"type":"plusSign","value":"+"},{"type":"nan","value":"NaN"}], + ], + [ + "never", + [{"type":"infinity","value":"∞"}], + [{"type":"integer","value":"987"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"987"}], + [{"type":"infinity","value":"∞"}], + [{"type":"nan","value":"NaN"}], + ], + [ + "exceptZero", + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"987"}], + [{"type":"plusSign","value":"+"},{"type":"infinity","value":"∞"}], + [{"type":"nan","value":"NaN"}], + ], +]; + +for (const [signDisplay, ...expected] of tests) { + const nf = new Intl.NumberFormat("ja-JP", {signDisplay}); + verifyFormatParts(nf.formatToParts(-Infinity), expected[0], `-Infinity (${signDisplay})`); + verifyFormatParts(nf.formatToParts(-987), expected[1], `-987 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(-0.0001), expected[2], `-0.0001 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(-0), expected[3], `-0 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(0), expected[4], `0 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(0.0001), expected[5], `0.0001 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(987), expected[6], `987 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(Infinity), expected[7], `Infinity (${signDisplay})`); + verifyFormatParts(nf.formatToParts(NaN), expected[8], `NaN (${signDisplay})`); +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-ko-KR.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-ko-KR.js new file mode 100644 index 0000000000..6a751269f3 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-ko-KR.js @@ -0,0 +1,87 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [ko-KR] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + "auto", + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"987"}], + [{"type":"infinity","value":"∞"}], + [{"type":"nan","value":"NaN"}], + ], + [ + "always", + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"987"}], + [{"type":"plusSign","value":"+"},{"type":"infinity","value":"∞"}], + [{"type":"plusSign","value":"+"},{"type":"nan","value":"NaN"}], + ], + [ + "never", + [{"type":"infinity","value":"∞"}], + [{"type":"integer","value":"987"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"987"}], + [{"type":"infinity","value":"∞"}], + [{"type":"nan","value":"NaN"}], + ], + [ + "exceptZero", + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"987"}], + [{"type":"plusSign","value":"+"},{"type":"infinity","value":"∞"}], + [{"type":"nan","value":"NaN"}], + ], +]; + +for (const [signDisplay, ...expected] of tests) { + const nf = new Intl.NumberFormat("ko-KR", {signDisplay}); + verifyFormatParts(nf.formatToParts(-Infinity), expected[0], `-Infinity (${signDisplay})`); + verifyFormatParts(nf.formatToParts(-987), expected[1], `-987 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(-0.0001), expected[2], `-0.0001 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(-0), expected[3], `-0 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(0), expected[4], `0 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(0.0001), expected[5], `0.0001 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(987), expected[6], `987 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(Infinity), expected[7], `Infinity (${signDisplay})`); + verifyFormatParts(nf.formatToParts(NaN), expected[8], `NaN (${signDisplay})`); +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-de-DE.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-de-DE.js new file mode 100644 index 0000000000..f3ef8fb416 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-de-DE.js @@ -0,0 +1,55 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [de-DE] +features: [Intl.NumberFormat-v3] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const nf = new Intl.NumberFormat("de-DE", { style: "currency", currency: "USD", currencySign: "accounting", signDisplay: "negative" }); + +verifyFormatParts( + nf.formatToParts(-987), + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + "negative" +); +verifyFormatParts( + nf.formatToParts(-0.0001), + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + "negativeNearZero" +); +verifyFormatParts( + nf.formatToParts(-0), + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + "negativeZero" +); +verifyFormatParts( + nf.formatToParts(0), + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + "zero" +); +verifyFormatParts( + nf.formatToParts(0.0001), + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + "positiveNearZero" +); +verifyFormatParts( + nf.formatToParts(987), + [{"type":"integer","value":"987"},{"type":"decimal","value":","},{"type":"fraction","value":"00"},{"type":"literal","value":" "},{"type":"currency","value":"$"}], + "positive" +); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-en-US.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-en-US.js new file mode 100644 index 0000000000..09b9e26d0f --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-en-US.js @@ -0,0 +1,55 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [en-US] +features: [Intl.NumberFormat-v3] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const nf = new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", currencySign: "accounting", signDisplay: "negative" }); + +verifyFormatParts( + nf.formatToParts(-987), + [{"type":"literal","value":"("},{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + "negative" +); +verifyFormatParts( + nf.formatToParts(-0.0001), + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "negativeNearZero" +); +verifyFormatParts( + nf.formatToParts(-0), + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "negativeZero" +); +verifyFormatParts( + nf.formatToParts(0), + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "zero" +); +verifyFormatParts( + nf.formatToParts(0.0001), + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "positiveNearZero" +); +verifyFormatParts( + nf.formatToParts(987), + [{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "positive" +); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-ja-JP.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-ja-JP.js new file mode 100644 index 0000000000..a651563b23 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-ja-JP.js @@ -0,0 +1,55 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [ja-JP] +features: [Intl.NumberFormat-v3] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const nf = new Intl.NumberFormat("ja-JP", { style: "currency", currency: "USD", currencySign: "accounting", signDisplay: "negative" }); + +verifyFormatParts( + nf.formatToParts(-987), + [{"type":"literal","value":"("},{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + "negative" +); +verifyFormatParts( + nf.formatToParts(-0.0001), + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "negativeNearZero" +); +verifyFormatParts( + nf.formatToParts(-0), + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "negativeZero" +); +verifyFormatParts( + nf.formatToParts(0), + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "zero" +); +verifyFormatParts( + nf.formatToParts(0.0001), + [{"type":"currency","value":"$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "positiveNearZero" +); +verifyFormatParts( + nf.formatToParts(987), + [{"type":"currency","value":"$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "positive" +); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-ko-KR.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-ko-KR.js new file mode 100644 index 0000000000..c7263383b7 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-ko-KR.js @@ -0,0 +1,55 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [ko-KR] +features: [Intl.NumberFormat-v3] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const nf = new Intl.NumberFormat("ko-KR", { style: "currency", currency: "USD", currencySign: "accounting", signDisplay: "negative" }); + +verifyFormatParts( + nf.formatToParts(-987), + [{"type":"literal","value":"("},{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + "negative" +); +verifyFormatParts( + nf.formatToParts(-0.0001), + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "negativeNearZero" +); +verifyFormatParts( + nf.formatToParts(-0), + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "negativeZero" +); +verifyFormatParts( + nf.formatToParts(0), + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "zero" +); +verifyFormatParts( + nf.formatToParts(0.0001), + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "positiveNearZero" +); +verifyFormatParts( + nf.formatToParts(987), + [{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "positive" +); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-zh-TW.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-zh-TW.js new file mode 100644 index 0000000000..aa2ca4a810 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-currency-zh-TW.js @@ -0,0 +1,55 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [zh-TW] +features: [Intl.NumberFormat-v3] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const nf = new Intl.NumberFormat("zh-TW", { style: "currency", currency: "USD", currencySign: "accounting", signDisplay: "negative" }); + +verifyFormatParts( + nf.formatToParts(-987), + [{"type":"literal","value":"("},{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"},{"type":"literal","value":")"}], + "negative" +); +verifyFormatParts( + nf.formatToParts(-0.0001), + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "negativeNearZero" +); +verifyFormatParts( + nf.formatToParts(-0), + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "negativeZero" +); +verifyFormatParts( + nf.formatToParts(0), + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "zero" +); +verifyFormatParts( + nf.formatToParts(0.0001), + [{"type":"currency","value":"US$"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "positiveNearZero" +); +verifyFormatParts( + nf.formatToParts(987), + [{"type":"currency","value":"US$"},{"type":"integer","value":"987"},{"type":"decimal","value":"."},{"type":"fraction","value":"00"}], + "positive" +); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-de-DE.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-de-DE.js new file mode 100644 index 0000000000..ea25559606 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-de-DE.js @@ -0,0 +1,35 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [de-DE] +features: [Intl.NumberFormat-v3] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const signDisplay = "negative"; +const nf = new Intl.NumberFormat("de-DE", {signDisplay: "negative"}); + +verifyFormatParts(nf.formatToParts(-Infinity), [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], `-Infinity (${signDisplay})`); +verifyFormatParts(nf.formatToParts(-987), [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], `-987 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(-0.0001), [{"type":"integer","value":"0"}], `-0.0001 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(-0), [{"type":"integer","value":"0"}], `-0 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(0), [{"type":"integer","value":"0"}], `0 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(0.0001), [{"type":"integer","value":"0"}], `0.0001 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(987), [{"type":"integer","value":"987"}], `987 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(Infinity), [{"type":"infinity","value":"∞"}], `Infinity (${signDisplay})`); +verifyFormatParts(nf.formatToParts(NaN), [{"type":"nan","value":"NaN"}], `NaN (${signDisplay})`); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-en-US.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-en-US.js new file mode 100644 index 0000000000..07b2bee627 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-en-US.js @@ -0,0 +1,35 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [en-US] +features: [Intl.NumberFormat-v3] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const signDisplay = "negative"; +const nf = new Intl.NumberFormat("en-US", {signDisplay: "negative"}); + +verifyFormatParts(nf.formatToParts(-Infinity), [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], `-Infinity (${signDisplay})`); +verifyFormatParts(nf.formatToParts(-987), [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], `-987 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(-0.0001), [{"type":"integer","value":"0"}], `-0.0001 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(-0), [{"type":"integer","value":"0"}], `-0 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(0), [{"type":"integer","value":"0"}], `0 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(0.0001), [{"type":"integer","value":"0"}], `0.0001 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(987), [{"type":"integer","value":"987"}], `987 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(Infinity), [{"type":"infinity","value":"∞"}], `Infinity (${signDisplay})`); +verifyFormatParts(nf.formatToParts(NaN), [{"type":"nan","value":"NaN"}], `NaN (${signDisplay})`); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-ja-JP.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-ja-JP.js new file mode 100644 index 0000000000..fe9da55796 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-ja-JP.js @@ -0,0 +1,35 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [ja-JP] +features: [Intl.NumberFormat-v3] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const signDisplay = "negative"; +const nf = new Intl.NumberFormat("ja-JP", {signDisplay: "negative"}); + +verifyFormatParts(nf.formatToParts(-Infinity), [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], `-Infinity (${signDisplay})`); +verifyFormatParts(nf.formatToParts(-987), [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], `-987 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(-0.0001), [{"type":"integer","value":"0"}], `-0.0001 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(-0), [{"type":"integer","value":"0"}], `-0 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(0), [{"type":"integer","value":"0"}], `0 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(0.0001), [{"type":"integer","value":"0"}], `0.0001 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(987), [{"type":"integer","value":"987"}], `987 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(Infinity), [{"type":"infinity","value":"∞"}], `Infinity (${signDisplay})`); +verifyFormatParts(nf.formatToParts(NaN), [{"type":"nan","value":"NaN"}], `NaN (${signDisplay})`); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-ko-KR.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-ko-KR.js new file mode 100644 index 0000000000..faa534d236 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-ko-KR.js @@ -0,0 +1,35 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [ko-KR] +features: [Intl.NumberFormat-v3] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const signDisplay = "negative"; +const nf = new Intl.NumberFormat("ko-KR", {signDisplay: "negative"}); + +verifyFormatParts(nf.formatToParts(-Infinity), [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], `-Infinity (${signDisplay})`); +verifyFormatParts(nf.formatToParts(-987), [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], `-987 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(-0.0001), [{"type":"integer","value":"0"}], `-0.0001 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(-0), [{"type":"integer","value":"0"}], `-0 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(0), [{"type":"integer","value":"0"}], `0 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(0.0001), [{"type":"integer","value":"0"}], `0.0001 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(987), [{"type":"integer","value":"987"}], `987 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(Infinity), [{"type":"infinity","value":"∞"}], `Infinity (${signDisplay})`); +verifyFormatParts(nf.formatToParts(NaN), [{"type":"nan","value":"NaN"}], `NaN (${signDisplay})`); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-zh-TW.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-zh-TW.js new file mode 100644 index 0000000000..902fa281c1 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-negative-zh-TW.js @@ -0,0 +1,35 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [zh-TW] +features: [Intl.NumberFormat-v3] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const signDisplay = "negative"; +const nf = new Intl.NumberFormat("zh-TW", {signDisplay: "negative"}); + +verifyFormatParts(nf.formatToParts(-Infinity), [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], `-Infinity (${signDisplay})`); +verifyFormatParts(nf.formatToParts(-987), [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], `-987 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(-0.0001), [{"type":"integer","value":"0"}], `-0.0001 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(-0), [{"type":"integer","value":"0"}], `-0 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(0), [{"type":"integer","value":"0"}], `0 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(0.0001), [{"type":"integer","value":"0"}], `0.0001 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(987), [{"type":"integer","value":"987"}], `987 (${signDisplay})`); +verifyFormatParts(nf.formatToParts(Infinity), [{"type":"infinity","value":"∞"}], `Infinity (${signDisplay})`); +verifyFormatParts(nf.formatToParts(NaN), [{"type":"nan","value":"非數值"}], `NaN (${signDisplay})`); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-zh-TW.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-zh-TW.js new file mode 100644 index 0000000000..e3d2d30fa1 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/signDisplay-zh-TW.js @@ -0,0 +1,87 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the signDisplay option to the NumberFormat constructor. +locale: [zh-TW] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + "auto", + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"987"}], + [{"type":"infinity","value":"∞"}], + [{"type":"nan","value":"非數值"}], + ], + [ + "always", + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"987"}], + [{"type":"plusSign","value":"+"},{"type":"infinity","value":"∞"}], + [{"type":"plusSign","value":"+"},{"type":"nan","value":"非數值"}], + ], + [ + "never", + [{"type":"infinity","value":"∞"}], + [{"type":"integer","value":"987"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"987"}], + [{"type":"infinity","value":"∞"}], + [{"type":"nan","value":"非數值"}], + ], + [ + "exceptZero", + [{"type":"minusSign","value":"-"},{"type":"infinity","value":"∞"}], + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"integer","value":"0"}], + [{"type":"plusSign","value":"+"},{"type":"integer","value":"987"}], + [{"type":"plusSign","value":"+"},{"type":"infinity","value":"∞"}], + [{"type":"nan","value":"非數值"}], + ], +]; + +for (const [signDisplay, ...expected] of tests) { + const nf = new Intl.NumberFormat("zh-TW", {signDisplay}); + verifyFormatParts(nf.formatToParts(-Infinity), expected[0], `-Infinity (${signDisplay})`); + verifyFormatParts(nf.formatToParts(-987), expected[1], `-987 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(-0.0001), expected[2], `-0.0001 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(-0), expected[3], `-0 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(0), expected[4], `0 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(0.0001), expected[5], `0.0001 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(987), expected[6], `987 (${signDisplay})`); + verifyFormatParts(nf.formatToParts(Infinity), expected[7], `Infinity (${signDisplay})`); + verifyFormatParts(nf.formatToParts(NaN), expected[8], `NaN (${signDisplay})`); +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/this-value-not-numberformat.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/this-value-not-numberformat.js new file mode 100644 index 0000000000..e5beb30623 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/this-value-not-numberformat.js @@ -0,0 +1,23 @@ +// Copyright (C) 2018 Ujjwal Sharma. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-Intl.NumberFormat.prototype.formatToParts +description: > + Tests that Intl.NumberFormat.prototype.formatToParts throws a + TypeError if called on a non-object value or an object that hasn't + been initialized as a NumberFormat. +---*/ + +const invalidTargets = [undefined, null, true, 0, 'NumberFormat', [], {}, Symbol()]; +const fn = Intl.NumberFormat.prototype.formatToParts; + +invalidTargets.forEach(target => { + assert.throws( + TypeError, + () => fn.call(target), + `Calling formatToParts on ${String(target)} should throw a TypeError.` + ); +}); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit-de-DE.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit-de-DE.js new file mode 100644 index 0000000000..ce186e9ecf --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit-de-DE.js @@ -0,0 +1,99 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the unit style. +locale: [de-DE] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + -987, + { + "short": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "long": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"Kilometer pro Stunde"}], + } + ], + [ + -0.001, + { + "short": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "long": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"Kilometer pro Stunde"}], + } + ], + [ + -0, + { + "short": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "long": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"Kilometer pro Stunde"}], + } + ], + [ + 0, + { + "short": + [{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "long": + [{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"Kilometer pro Stunde"}], + } + ], + [ + 0.001, + { + "short": + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "long": + [{"type":"integer","value":"0"},{"type":"decimal","value":","},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"Kilometer pro Stunde"}], + } + ], + [ + 987, + { + "short": + [{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "long": + [{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"Kilometer pro Stunde"}], + } + ], +]; + +for (const [number, expectedData] of tests) { + for (const [unitDisplay, expected] of Object.entries(expectedData)) { + const nf = new Intl.NumberFormat("de-DE", { style: "unit", unit: "kilometer-per-hour", unitDisplay }); + verifyFormatParts(nf.formatToParts(number), expected); + } +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit-en-US.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit-en-US.js new file mode 100644 index 0000000000..db2220de22 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit-en-US.js @@ -0,0 +1,99 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the unit style. +locale: [en-US] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + -987, + { + "short": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"kilometers per hour"}], + } + ], + [ + -0.001, + { + "short": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"kilometers per hour"}], + } + ], + [ + -0, + { + "short": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"kilometers per hour"}], + } + ], + [ + 0, + { + "short": + [{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"integer","value":"0"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"kilometers per hour"}], + } + ], + [ + 0.001, + { + "short": + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"kilometers per hour"}], + } + ], + [ + 987, + { + "short": + [{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"integer","value":"987"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"kilometers per hour"}], + } + ], +]; + +for (const [number, expectedData] of tests) { + for (const [unitDisplay, expected] of Object.entries(expectedData)) { + const nf = new Intl.NumberFormat("en-US", { style: "unit", unit: "kilometer-per-hour", unitDisplay }); + verifyFormatParts(nf.formatToParts(number), expected); + } +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit-ja-JP.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit-ja-JP.js new file mode 100644 index 0000000000..2296f529a8 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit-ja-JP.js @@ -0,0 +1,99 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the unit style. +locale: [ja-JP] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + -987, + { + "short": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"unit","value":"時速"},{"type":"literal","value":" "},{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"キロメートル"}], + } + ], + [ + -0.001, + { + "short": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"unit","value":"時速"},{"type":"literal","value":" "},{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"キロメートル"}], + } + ], + [ + -0, + { + "short": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"unit","value":"時速"},{"type":"literal","value":" "},{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"キロメートル"}], + } + ], + [ + 0, + { + "short": + [{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"integer","value":"0"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"unit","value":"時速"},{"type":"literal","value":" "},{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"キロメートル"}], + } + ], + [ + 0.001, + { + "short": + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"unit","value":"時速"},{"type":"literal","value":" "},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"キロメートル"}], + } + ], + [ + 987, + { + "short": + [{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"integer","value":"987"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"unit","value":"時速"},{"type":"literal","value":" "},{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"キロメートル"}], + } + ], +]; + +for (const [number, expectedData] of tests) { + for (const [unitDisplay, expected] of Object.entries(expectedData)) { + const nf = new Intl.NumberFormat("ja-JP", { style: "unit", unit: "kilometer-per-hour", unitDisplay }); + verifyFormatParts(nf.formatToParts(number), expected); + } +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit-ko-KR.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit-ko-KR.js new file mode 100644 index 0000000000..74d938b513 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit-ko-KR.js @@ -0,0 +1,99 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the unit style. +locale: [ko-KR] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + -987, + { + "short": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"unit","value":"시속"},{"type":"literal","value":" "},{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"unit","value":"킬로미터"}], + } + ], + [ + -0.001, + { + "short": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"unit","value":"시속"},{"type":"literal","value":" "},{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"unit","value":"킬로미터"}], + } + ], + [ + -0, + { + "short": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"unit","value":"시속"},{"type":"literal","value":" "},{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"unit","value":"킬로미터"}], + } + ], + [ + 0, + { + "short": + [{"type":"integer","value":"0"},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"integer","value":"0"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"unit","value":"시속"},{"type":"literal","value":" "},{"type":"integer","value":"0"},{"type":"unit","value":"킬로미터"}], + } + ], + [ + 0.001, + { + "short": + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"unit","value":"시속"},{"type":"literal","value":" "},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"unit","value":"킬로미터"}], + } + ], + [ + 987, + { + "short": + [{"type":"integer","value":"987"},{"type":"unit","value":"km/h"}], + "narrow": + [{"type":"integer","value":"987"},{"type":"unit","value":"km/h"}], + "long": + [{"type":"unit","value":"시속"},{"type":"literal","value":" "},{"type":"integer","value":"987"},{"type":"unit","value":"킬로미터"}], + } + ], +]; + +for (const [number, expectedData] of tests) { + for (const [unitDisplay, expected] of Object.entries(expectedData)) { + const nf = new Intl.NumberFormat("ko-KR", { style: "unit", unit: "kilometer-per-hour", unitDisplay }); + verifyFormatParts(nf.formatToParts(number), expected); + } +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit-zh-TW.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit-zh-TW.js new file mode 100644 index 0000000000..6399ff7023 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit-zh-TW.js @@ -0,0 +1,99 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the unit style. +locale: [zh-TW] +features: [Intl.NumberFormat-unified] +---*/ + +function verifyFormatParts(actual, expected, message) { + assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`); + assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`); + assert.sameValue(actual.length, expected.length, `${message}: length`); + + for (let i = 0; i < actual.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`); + assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`); + } +} + +const tests = [ + [ + -987, + { + "short": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"公里/小時"}], + "narrow": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"unit","value":"公里/小時"}], + "long": + [{"type":"unit","value":"每小時"},{"type":"literal","value":" "},{"type":"minusSign","value":"-"},{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"公里"}], + } + ], + [ + -0.001, + { + "short": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"公里/小時"}], + "narrow": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"unit","value":"公里/小時"}], + "long": + [{"type":"unit","value":"每小時"},{"type":"literal","value":" "},{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"公里"}], + } + ], + [ + -0, + { + "short": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"公里/小時"}], + "narrow": + [{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"unit","value":"公里/小時"}], + "long": + [{"type":"unit","value":"每小時"},{"type":"literal","value":" "},{"type":"minusSign","value":"-"},{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"公里"}], + } + ], + [ + 0, + { + "short": + [{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"公里/小時"}], + "narrow": + [{"type":"integer","value":"0"},{"type":"unit","value":"公里/小時"}], + "long": + [{"type":"unit","value":"每小時"},{"type":"literal","value":" "},{"type":"integer","value":"0"},{"type":"literal","value":" "},{"type":"unit","value":"公里"}], + } + ], + [ + 0.001, + { + "short": + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"公里/小時"}], + "narrow": + [{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"unit","value":"公里/小時"}], + "long": + [{"type":"unit","value":"每小時"},{"type":"literal","value":" "},{"type":"integer","value":"0"},{"type":"decimal","value":"."},{"type":"fraction","value":"001"},{"type":"literal","value":" "},{"type":"unit","value":"公里"}], + } + ], + [ + 987, + { + "short": + [{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"公里/小時"}], + "narrow": + [{"type":"integer","value":"987"},{"type":"unit","value":"公里/小時"}], + "long": + [{"type":"unit","value":"每小時"},{"type":"literal","value":" "},{"type":"integer","value":"987"},{"type":"literal","value":" "},{"type":"unit","value":"公里"}], + } + ], +]; + +for (const [number, expectedData] of tests) { + for (const [unitDisplay, expected] of Object.entries(expectedData)) { + const nf = new Intl.NumberFormat("zh-TW", { style: "unit", unit: "kilometer-per-hour", unitDisplay }); + verifyFormatParts(nf.formatToParts(number), expected); + } +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit.js new file mode 100644 index 0000000000..54b165ed89 --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/unit.js @@ -0,0 +1,27 @@ +// Copyright 2019 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: Checks handling of the unit style. +features: [Intl.NumberFormat-unified] +---*/ + +const numbers = [-987, -0.001, -0, 0, 0.001, 987]; +const displays = [ + "short", + "narrow", + "long", +]; + +for (const unitDisplay of displays) { + const nf = new Intl.NumberFormat("en-US", { style: "unit", unit: "meter", unitDisplay }); + for (const number of numbers) { + const result = nf.formatToParts(number); + assert.sameValue(result.map(({ value }) => value).join(""), nf.format(number)); + assert.sameValue(result.some(({ type }) => type === "unit"), true); + } +} + + +reportCompare(0, 0); diff --git a/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/value-tonumber.js b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/value-tonumber.js new file mode 100644 index 0000000000..c2601b026f --- /dev/null +++ b/js/src/tests/test262/intl402/NumberFormat/prototype/formatToParts/value-tonumber.js @@ -0,0 +1,52 @@ +// Copyright 2016 Mozilla Corporation. All rights reserved. +// This code is governed by the license found in the LICENSE file. + +/*--- +esid: sec-intl.numberformat.prototype.formattoparts +description: > + Tests that Intl.NumberFormat.prototype.formatToParts converts + its argument (called value) to a number using ToNumber (7.1.3). +info: | + 11.1.4 Number Format Functions + + 4. Let x be ? ToNumber(value). +features: [Symbol] +---*/ + +const toNumberResults = [ + [undefined, NaN], + [null, +0], + [true, 1], + [false, +0], + ['42', 42], + ['foo', NaN] +]; + +const nf = new Intl.NumberFormat(); + +function assertSameParts(actual, expected) { + assert.sameValue(actual.length, expected.length); + for (let i = 0; i < expected.length; ++i) { + assert.sameValue(actual[i].type, expected[i].type); + assert.sameValue(actual[i].value, expected[i].value); + } +} + +toNumberResults.forEach(pair => { + const [value, result] = pair; + assertSameParts(nf.formatToParts(value), nf.formatToParts(result)); +}); + +let count = 0; +const dummy = {}; +dummy[Symbol.toPrimitive] = hint => (hint === 'number' ? ++count : NaN); +assertSameParts(nf.formatToParts(dummy), nf.formatToParts(count)); +assert.sameValue(count, 1); + +assert.throws( + TypeError, + () => nf.formatToParts(Symbol()), + "ToNumber(arg) throws a TypeError when arg is of type 'Symbol'" +); + +reportCompare(0, 0); |