Skip to content

Commit 8a2a998

Browse files
committed
LibJS+LibUnicode: Add "microsecond" and "nanosecond" as sanctioned units
This is a normative change in the ECMA-402 spec. See: tc39/ecma402#708
1 parent 5e36a55 commit 8a2a998

File tree

3 files changed

+30
-10
lines changed

3 files changed

+30
-10
lines changed

Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeNumberFormat.cpp

+1-4
Original file line numberDiff line numberDiff line change
@@ -638,10 +638,7 @@ static ErrorOr<void> parse_units(String locale_units_path, UnicodeLocaleData& lo
638638
// LibUnicode generally tries to avoid being directly dependent on ECMA-402, but this rather significantly reduces the amount
639639
// of data generated here, and ECMA-402 is currently the only consumer of this data.
640640
constexpr auto sanctioned_units = JS::Intl::sanctioned_single_unit_identifiers();
641-
if (find(sanctioned_units.begin(), sanctioned_units.end(), unit_name) != sanctioned_units.end())
642-
return true;
643-
static constexpr auto extra_sanctioned_units = JS::Intl::extra_sanctioned_single_unit_identifiers();
644-
return find(extra_sanctioned_units.begin(), extra_sanctioned_units.end(), unit_name) != extra_sanctioned_units.end();
641+
return find(sanctioned_units.begin(), sanctioned_units.end(), unit_name) != sanctioned_units.end();
645642
};
646643

647644
auto parse_units_object = [&](auto const& units_object, Unicode::Style style) {

Userland/Libraries/LibJS/Runtime/Intl/SingleUnitIdentifiers.h

+2-6
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,15 @@ constexpr auto sanctioned_single_unit_identifiers()
4040
"megabit"sv,
4141
"megabyte"sv,
4242
"meter"sv,
43+
"microsecond"sv,
4344
"mile"sv,
4445
"mile-scandinavian"sv,
4546
"milliliter"sv,
4647
"millimeter"sv,
4748
"millisecond"sv,
4849
"minute"sv,
4950
"month"sv,
51+
"nanosecond"sv,
5052
"ounce"sv,
5153
"percent"sv,
5254
"petabyte"sv,
@@ -61,10 +63,4 @@ constexpr auto sanctioned_single_unit_identifiers()
6163
};
6264
}
6365

64-
// Additional single units used in ECMAScript required by the Intl.DurationFormat proposal
65-
constexpr auto extra_sanctioned_single_unit_identifiers()
66-
{
67-
return AK::Array { "microsecond"sv, "nanosecond"sv };
68-
}
69-
7066
}

Userland/Libraries/LibJS/Tests/builtins/Intl/NumberFormat/NumberFormat.prototype.format.js

+27
Original file line numberDiff line numberDiff line change
@@ -1518,6 +1518,15 @@ describe("style=unit", () => {
15181518
expect(en2.format(1.2)).toBe("1.2 kilometers per hour");
15191519
expect(en2.format(123)).toBe("123 kilometers per hour");
15201520

1521+
const en3 = new Intl.NumberFormat("en", {
1522+
style: "unit",
1523+
unit: "nanosecond",
1524+
unitDisplay: "long",
1525+
});
1526+
expect(en3.format(1)).toBe("1 nanosecond");
1527+
expect(en3.format(1.2)).toBe("1.2 nanoseconds");
1528+
expect(en3.format(123)).toBe("123 nanoseconds");
1529+
15211530
const ar = new Intl.NumberFormat("ar", {
15221531
style: "unit",
15231532
unit: "foot",
@@ -1556,6 +1565,15 @@ describe("style=unit", () => {
15561565
expect(en2.format(1.2)).toBe("1.2 km/h");
15571566
expect(en2.format(123)).toBe("123 km/h");
15581567

1568+
const en3 = new Intl.NumberFormat("en", {
1569+
style: "unit",
1570+
unit: "nanosecond",
1571+
unitDisplay: "short",
1572+
});
1573+
expect(en3.format(1)).toBe("1 ns");
1574+
expect(en3.format(1.2)).toBe("1.2 ns");
1575+
expect(en3.format(123)).toBe("123 ns");
1576+
15591577
const ar = new Intl.NumberFormat("ar", {
15601578
style: "unit",
15611579
unit: "foot",
@@ -1594,6 +1612,15 @@ describe("style=unit", () => {
15941612
expect(en2.format(1.2)).toBe("1.2km/h");
15951613
expect(en2.format(123)).toBe("123km/h");
15961614

1615+
const en3 = new Intl.NumberFormat("en", {
1616+
style: "unit",
1617+
unit: "nanosecond",
1618+
unitDisplay: "narrow",
1619+
});
1620+
expect(en3.format(1)).toBe("1ns");
1621+
expect(en3.format(1.2)).toBe("1.2ns");
1622+
expect(en3.format(123)).toBe("123ns");
1623+
15971624
const ar = new Intl.NumberFormat("ar", {
15981625
style: "unit",
15991626
unit: "foot",

0 commit comments

Comments
 (0)