blob: b89711dac66b2378bf8c29b828888d3650810246 [file] [log] [blame]
// 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`);
});