| // 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.DateTimeFormat.prototype.formatToParts |
| ---*/ |
| |
| function reduce(parts) { |
| return parts.map(part => part.value).join(''); |
| } |
| |
| function compareFTPtoFormat(locales, options, value) { |
| const dtf = new Intl.DateTimeFormat(locales, options); |
| assert.sameValue( |
| dtf.format(value), |
| reduce(dtf.formatToParts(value)), |
| `Expected the same value for value ${value}, |
| locales: ${locales} and options: ${options}` |
| ); |
| } |
| |
| compareFTPtoFormat(); |
| compareFTPtoFormat('pl'); |
| compareFTPtoFormat(['pl']); |
| compareFTPtoFormat([]); |
| compareFTPtoFormat(['de'], undefined, 0); |
| compareFTPtoFormat(['de'], undefined, -10); |
| compareFTPtoFormat(['de'], undefined, 25324234235); |
| compareFTPtoFormat(['de'], { |
| day: '2-digit' |
| }, Date.now()); |
| compareFTPtoFormat(['de'], { |
| day: 'numeric', |
| year: '2-digit' |
| }, Date.now()); |
| compareFTPtoFormat(['ar'], { |
| month: 'numeric', |
| day: 'numeric', |
| year: '2-digit' |
| }, Date.now()); |
| |
| const actualPartTypes = new Intl.DateTimeFormat('en-us', { |
| weekday: 'long', |
| era: 'long', |
| year: 'numeric', |
| month: 'numeric', |
| day: 'numeric', |
| hour: 'numeric', |
| minute: 'numeric', |
| second: 'numeric', |
| hour12: true, |
| timeZone: 'UTC', |
| timeZoneName: 'long' |
| }).formatToParts(Date.UTC(2012, 11, 17, 3, 0, 42)) |
| .map(part => part.type); |
| |
| const legalPartTypes = [ |
| 'weekday', |
| 'era', |
| 'year', |
| 'month', |
| 'day', |
| 'hour', |
| 'minute', |
| 'second', |
| 'literal', |
| 'dayPeriod', |
| 'timeZoneName', |
| ]; |
| |
| actualPartTypes.forEach(function(type) { |
| assert(legalPartTypes.includes(type), `${type} is not a legal type`); |
| }); |