mirror of https://github.com/tc39/test262.git
DurationFormat: test formatting for units using combinations of "long", "short", and "narrow" styles
This commit is contained in:
parent
86b6eee25b
commit
634933a489
|
@ -0,0 +1,85 @@
|
||||||
|
// Copyright 2024 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-Intl.DurationFormat.prototype.format
|
||||||
|
description: Test if format method formats duration correctly with mixed non-numeric settings for unit styles. Compares output from format method to output produced through using NumberFormat and ListFormat as used by DurationFormat.
|
||||||
|
info: |
|
||||||
|
PartitionDurationFormatPattern ( durationFormat, duration )
|
||||||
|
...
|
||||||
|
9. While done is false, repeat for each row in Table 2 in table order, except the header row:
|
||||||
|
...
|
||||||
|
k. If value is not 0 or display is not "auto" or displayRequired is "true", then
|
||||||
|
...
|
||||||
|
v. If style is not "fractional", "numeric", or "2-digit", then
|
||||||
|
1. Perform ! CreateDataPropertyOrThrow(nfOpts, "style", "unit").
|
||||||
|
2. Perform ! CreateDataPropertyOrThrow(nfOpts, "unit", numberFormatUnit).
|
||||||
|
3. Perform ! CreateDataPropertyOrThrow(nfOpts, "unitDisplay", style).
|
||||||
|
...
|
||||||
|
ix. Let parts be ! PartitionNumberPattern(nf, value).
|
||||||
|
...
|
||||||
|
14. Perform ! CreateDataPropertyOrThrow(lfOpts, "style", listStyle).
|
||||||
|
15. Let lf be ! Construct(%ListFormat%, « durationFormat.[[Locale]], lfOpts »).
|
||||||
|
...
|
||||||
|
18. Let formatted be CreatePartsFromList(lf, strings).
|
||||||
|
|
||||||
|
locale: [es]
|
||||||
|
features: [Intl.DurationFormat]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function formatDuration(locale, duration, dfOpts){
|
||||||
|
let result = [];
|
||||||
|
for (const unit in duration){
|
||||||
|
let nfUnit = unit.substring(0, unit.length - 1);
|
||||||
|
let nf = new Intl.NumberFormat(locale, {style: "unit", unit: nfUnit, unitDisplay: dfOpts[unit]});
|
||||||
|
result.push(nf.format(duration[unit]));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const baseStyle of ["long", "short", "narrow"]){
|
||||||
|
let lf = new Intl.ListFormat(locale, {type: "unit", style: baseStyle});
|
||||||
|
let expected = lf.format(result);
|
||||||
|
dfOpts.style = baseStyle;
|
||||||
|
let df = new Intl.DurationFormat(locale, dfOpts);
|
||||||
|
let actual = df.format(duration);
|
||||||
|
assert.sameValue(actual, expected);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const duration = {
|
||||||
|
years: 1,
|
||||||
|
months: 2,
|
||||||
|
weeks: 3,
|
||||||
|
days: 0,
|
||||||
|
hours: 4,
|
||||||
|
minutes: 5,
|
||||||
|
seconds: 6,
|
||||||
|
milliseconds: 7,
|
||||||
|
microseconds: 8,
|
||||||
|
nanoseconds: 9,
|
||||||
|
};
|
||||||
|
|
||||||
|
const locale = "es";
|
||||||
|
|
||||||
|
formatDuration(locale, duration, {
|
||||||
|
years: "narrow",
|
||||||
|
months: "narrow",
|
||||||
|
weeks: "narrow",
|
||||||
|
days: "short",
|
||||||
|
hours: "short",
|
||||||
|
minutes: "short",
|
||||||
|
seconds: "long",
|
||||||
|
milliseconds: "long",
|
||||||
|
microseconds: "long",
|
||||||
|
nanoseconds: "narrow", });
|
||||||
|
|
||||||
|
formatDuration(locale, duration, {
|
||||||
|
years: "long",
|
||||||
|
months: "short",
|
||||||
|
weeks: "narrow",
|
||||||
|
days: "long",
|
||||||
|
hours: "short",
|
||||||
|
minutes: "narrow",
|
||||||
|
seconds: "long",
|
||||||
|
milliseconds: "short",
|
||||||
|
microseconds: "narrow",
|
||||||
|
nanoseconds: "long", });
|
Loading…
Reference in New Issue