summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/intl402/DurationFormat/prototype/format/fractions-of-subsecond-units-en.js
blob: 342fa613cfc4a517dcfdc3a3f4beab8c884014c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// |reftest| skip -- Intl.DurationFormat is not supported
// Copyright (C) 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: Checks that fractional milliseconds and microseconds are formatted correctly when microseconds or nanoseconds are the first units with "numeric" style.
info: |
    PartitionDurationFormatPattern ( durationFormat, duration )
    (...)
    9.
      (...)
      g. If unit is "seconds", "milliseconds", or "microseconds", then
        i. If unit is "seconds", then
            1. Let nextStyle be durationFormat.[[MillisecondsStyle]].
        ii. Else if unit is "milliseconds", then
            1. Let nextStyle be durationFormat.[[MicrosecondsStyle]].
        iii. Else,
            1. Let nextStyle be durationFormat.[[NanosecondsStyle]].
        iv. If nextStyle is "fractional", then
            1. Set value to value + AddFractionalDigits(durationFormat, duration).
            2. If durationFormat.[[FractionalDigits]] is undefined, then
                a. Let maximumFractionDigits be 9𝔽.
                b. Let minimumFractionDigits be +0𝔽.
            3. Else,
                a. Let maximumFractionDigits be 𝔽(durationFormat.[[FractionalDigits]]).
                b. Let minimumFractionDigits be 𝔽(durationFormat.[[FractionalDigits]]).
            4. Perform ! CreateDataPropertyOrThrow(nfOpts, "maximumFractionDigits", maximumFractionDigits ).
            5. Perform ! CreateDataPropertyOrThrow(nfOpts, "minimumFractionDigits", minimumFractionDigits ).
            6. Perform ! CreateDataPropertyOrThrow(nfOpts, "roundingMode", "trunc").
            7. Set done to true.

locale: [en]
features: [Intl.DurationFormat]
---*/


const locale = "en";
const decimalSeparator = ".";

let d = {seconds: 3, milliseconds: 444, microseconds: 55, nanoseconds: 6};
let dfOpts = {microseconds: "numeric"};

let expectedList = [];
expectedList.push(new Intl.NumberFormat(locale, {style: "unit", unit: "second", unitDisplay: "short"}).format(d.seconds));
expectedList.push(new Intl.NumberFormat(locale, {style: "unit", unit: "millisecond", unitDisplay: "short", minimumFractionDigits:0, maximumFractionDigits: 9}).format(d.milliseconds.toString() + decimalSeparator + d.microseconds.toString().padStart(3, '0') + d.nanoseconds.toString().padStart(3, '0')));

let expected = new Intl.ListFormat(locale, {style: "short"}).format(expectedList);
let actual = new Intl.DurationFormat(locale, dfOpts).format(d);

// assert.sameValue(actual, expected, `DurationFormat output when microseconds first "numeric" unit`);

dfOpts = {nanoseconds: "numeric"};
expectedList = [];

expectedList.push(new Intl.NumberFormat(locale, {style: "unit", unit: "second", unitDisplay: "short"}).format(d.seconds));
expectedList.push(new Intl.NumberFormat(locale, {style: "unit", unit: "millisecond", unitDisplay: "short"}).format(d.milliseconds));
expectedList.push(new Intl.NumberFormat(locale, {style: "unit", unit: "microsecond", unitDisplay: "short", minimumFractionDigits:0, maximumFractionDigits: 9}).format(d.microseconds.toString() + decimalSeparator + d.nanoseconds.toString().padStart(3, '0')));

expected = new Intl.ListFormat(locale, {style: "short"}).format(expectedList);
actual = new Intl.DurationFormat(locale, dfOpts).format(d);

assert.sameValue(actual, expected, `DurationFormat output when nanoseconds first "numeric" unit`);

reportCompare(0, 0);