From 26f966619139bedc56f1a6939f832e6936647df6 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Tue, 7 Dec 2021 08:45:55 -0500 Subject: [PATCH] LibJS: Do not override hour, minute, and second format field lengths This was an oversight in e42d954743056e476bbb1623cfc60e7797a8a6ca. These fields should always follow the locale preference in the CLDR. Overriding these fields would permit formats like "h:mm:ss" to result in strings like "1:2:3" instead of "1:02:03". --- Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp | 5 +++++ .../DateTimeFormat.prototype.resolvedOptions.js | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp index 7660ace706..8ca87b1b93 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp @@ -666,6 +666,11 @@ Optional basic_format_matcher(Unicode::CalendarPattern best_format_field = option_field; break; + case Unicode::CalendarPattern::Field::Hour: + case Unicode::CalendarPattern::Field::Minute: + case Unicode::CalendarPattern::Field::Second: + break; + default: if (best_format_field.has_value() && option_field.has_value()) best_format_field = option_field; diff --git a/Userland/Libraries/LibJS/Tests/builtins/Intl/DateTimeFormat/DateTimeFormat.prototype.resolvedOptions.js b/Userland/Libraries/LibJS/Tests/builtins/Intl/DateTimeFormat/DateTimeFormat.prototype.resolvedOptions.js index da70832e14..e9157c799c 100644 --- a/Userland/Libraries/LibJS/Tests/builtins/Intl/DateTimeFormat/DateTimeFormat.prototype.resolvedOptions.js +++ b/Userland/Libraries/LibJS/Tests/builtins/Intl/DateTimeFormat/DateTimeFormat.prototype.resolvedOptions.js @@ -165,14 +165,14 @@ describe("correct behavior", () => { test("minute", () => { ["2-digit", "numeric"].forEach(minute => { const en = new Intl.DateTimeFormat("en", { minute: minute }); - expect(en.resolvedOptions().minute).toBe(minute); + expect(en.resolvedOptions().minute).toBe("2-digit"); }); }); test("second", () => { ["2-digit", "numeric"].forEach(second => { const en = new Intl.DateTimeFormat("en", { second: second }); - expect(en.resolvedOptions().second).toBe(second); + expect(en.resolvedOptions().second).toBe("2-digit"); }); });