| // Copyright 2018 Igalia, S.L. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file. |
| |
| /*--- |
| esid: sec-Intl.ListFormat.prototype.formatToParts |
| description: > |
| Checks the behavior of Intl.ListFormat.prototype.formatToParts() in English. |
| features: [Intl.ListFormat] |
| locale: [en-US] |
| ---*/ |
| |
| function verifyFormatParts(actual, expected, message) { |
| 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`); |
| } |
| } |
| |
| function CustomIterator(array) { |
| this.i = 0; |
| this.array = array; |
| } |
| |
| CustomIterator.prototype[Symbol.iterator] = function() { |
| return this; |
| } |
| |
| CustomIterator.prototype.next = function() { |
| if (this.i >= this.array.length) { |
| return { |
| "done": true, |
| }; |
| } |
| |
| return { |
| "value": this.array[this.i++], |
| "done": false, |
| }; |
| } |
| |
| const transforms = [ |
| a => a, |
| a => a[Symbol.iterator](), |
| a => new CustomIterator(a), |
| ]; |
| |
| const lf = new Intl.ListFormat("es-ES", { |
| "style": "long", |
| "type": "unit", |
| }); |
| |
| assert.sameValue(typeof lf.formatToParts, "function", "format should be supported"); |
| |
| for (const f of transforms) { |
| verifyFormatParts(lf.formatToParts(f([])), []); |
| verifyFormatParts(lf.formatToParts(f(["foo"])), [ |
| { "type": "element", "value": "foo" }, |
| ]); |
| verifyFormatParts(lf.formatToParts(f(["foo", "bar"])), [ |
| { "type": "element", "value": "foo" }, |
| { "type": "literal", "value": " y " }, |
| { "type": "element", "value": "bar" }, |
| ]); |
| verifyFormatParts(lf.formatToParts(f(["foo", "bar", "baz"])), [ |
| { "type": "element", "value": "foo" }, |
| { "type": "literal", "value": ", " }, |
| { "type": "element", "value": "bar" }, |
| { "type": "literal", "value": " y " }, |
| { "type": "element", "value": "baz" }, |
| ]); |
| verifyFormatParts(lf.formatToParts(f(["foo", "bar", "baz", "quux"])), [ |
| { "type": "element", "value": "foo" }, |
| { "type": "literal", "value": ", " }, |
| { "type": "element", "value": "bar" }, |
| { "type": "literal", "value": ", " }, |
| { "type": "element", "value": "baz" }, |
| { "type": "literal", "value": " y " }, |
| { "type": "element", "value": "quux" }, |
| ]); |
| } |
| |
| verifyFormatParts(lf.formatToParts("foo"), [ |
| { "type": "element", "value": "f" }, |
| { "type": "literal", "value": ", " }, |
| { "type": "element", "value": "o" }, |
| { "type": "literal", "value": " y " }, |
| { "type": "element", "value": "o" }, |
| ]); |