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
|
function GenericPartCreator(type) {
return str => ({ type, value: str });
}
const NumberFormatParts = {
Nan: GenericPartCreator("nan"),
Inf: GenericPartCreator("infinity"),
Integer: GenericPartCreator("integer"),
Group: GenericPartCreator("group"),
Decimal: GenericPartCreator("decimal"),
Fraction: GenericPartCreator("fraction"),
MinusSign: GenericPartCreator("minusSign"),
PlusSign: GenericPartCreator("plusSign"),
PercentSign: GenericPartCreator("percentSign"),
Currency: GenericPartCreator("currency"),
Literal: GenericPartCreator("literal"),
ExponentSeparator: GenericPartCreator("exponentSeparator"),
ExponentMinusSign: GenericPartCreator("exponentMinusSign"),
ExponentInteger: GenericPartCreator("exponentInteger"),
Compact: GenericPartCreator("compact"),
Unit: GenericPartCreator("unit"),
};
function assertParts(nf, x, expected) {
var parts = nf.formatToParts(x);
assertEq(parts.map(part => part.value).join(""), nf.format(x),
"formatToParts and format must agree");
var len = parts.length;
assertEq(len, expected.length, "parts count mismatch");
for (var i = 0; i < len; i++) {
assertEq(parts[i].type, expected[i].type, "type mismatch at " + i);
assertEq(parts[i].value, expected[i].value, "value mismatch at " + i);
}
}
function runNumberFormattingTestcases(testcases) {
for (let {locale, options, values} of testcases) {
let nf = new Intl.NumberFormat(locale, options);
for (let {value, string, parts} of values) {
assertEq(nf.format(value), string,
`locale=${locale}, options=${JSON.stringify(options)}, value=${value}`);
assertParts(nf, value, parts);
}
}
}
|