Quellcode durchsuchen

LibJS: Default to "short" for DurationFormat's style option

This is a normative change in the Intl.DurationFormat proposal. See:
https://github.com/tc39/proposal-intl-duration-format/commit/b289494
Timothy Flynn vor 2 Jahren
Ursprung
Commit
d57b92da09

+ 2 - 2
Userland/Libraries/LibJS/Runtime/Intl/DurationFormatConstructor.cpp

@@ -89,8 +89,8 @@ ThrowCompletionOr<Object*> DurationFormatConstructor::construct(FunctionObject&
     if (result.nu.has_value())
         duration_format->set_numbering_system(result.nu.release_value());
 
-    // 13. Let style be ? GetOption(options, "style", "string", « "long", "short", "narrow", "digital" », "long").
-    auto style = TRY(get_option(vm, *options, vm.names.style, OptionType::String, { "long"sv, "short"sv, "narrow"sv, "digital"sv }, "long"sv));
+    // 13. Let style be ? GetOption(options, "style", "string", « "long", "short", "narrow", "digital" », "short").
+    auto style = TRY(get_option(vm, *options, vm.names.style, OptionType::String, { "long"sv, "short"sv, "narrow"sv, "digital"sv }, "short"sv));
 
     // 14. Set durationFormat.[[Style]] to style.
     duration_format->set_style(style.as_string().string());

+ 2 - 2
Userland/Libraries/LibJS/Tests/builtins/Intl/DurationFormat/DurationFormat.prototype.format.js

@@ -17,10 +17,10 @@ describe("correct behavior", () => {
             nanoseconds: 9,
         };
         expect(new Intl.DurationFormat().format(duration)).toBe(
-            "1 year, 2 months, 3 weeks, 3 days, 4 hours, 5 minutes, 6 seconds, 7 milliseconds, 8 microseconds, and 9 nanoseconds"
+            "1 yr, 2 mths, 3 wks, 3 days, 4 hr, 5 min, 6 sec, 7 ms, 8 μs, and 9 ns"
         );
         expect(new Intl.DurationFormat("en").format(duration)).toBe(
-            "1 year, 2 months, 3 weeks, 3 days, 4 hours, 5 minutes, 6 seconds, 7 milliseconds, 8 microseconds, and 9 nanoseconds"
+            "1 yr, 2 mths, 3 wks, 3 days, 4 hr, 5 min, 6 sec, 7 ms, 8 μs, and 9 ns"
         );
         expect(new Intl.DurationFormat("en", { style: "long" }).format(duration)).toBe(
             "1 year, 2 months, 3 weeks, 3 days, 4 hours, 5 minutes, 6 seconds, 7 milliseconds, 8 microseconds, and 9 nanoseconds"

+ 18 - 18
Userland/Libraries/LibJS/Tests/builtins/Intl/DurationFormat/DurationFormat.prototype.formatToParts.js

@@ -17,46 +17,46 @@ describe("correct behavior", () => {
             nanoseconds: 9,
         };
         expect(new Intl.DurationFormat().formatToParts(duration)).toEqual([
-            { type: "element", value: "1 year" },
+            { type: "element", value: "1 yr" },
             { type: "literal", value: ", " },
-            { type: "element", value: "2 months" },
+            { type: "element", value: "2 mths" },
             { type: "literal", value: ", " },
-            { type: "element", value: "3 weeks" },
+            { type: "element", value: "3 wks" },
             { type: "literal", value: ", " },
             { type: "element", value: "3 days" },
             { type: "literal", value: ", " },
-            { type: "element", value: "4 hours" },
+            { type: "element", value: "4 hr" },
             { type: "literal", value: ", " },
-            { type: "element", value: "5 minutes" },
+            { type: "element", value: "5 min" },
             { type: "literal", value: ", " },
-            { type: "element", value: "6 seconds" },
+            { type: "element", value: "6 sec" },
             { type: "literal", value: ", " },
-            { type: "element", value: "7 milliseconds" },
+            { type: "element", value: "7 ms" },
             { type: "literal", value: ", " },
-            { type: "element", value: "8 microseconds" },
+            { type: "element", value: "8 μs" },
             { type: "literal", value: ", and " },
-            { type: "element", value: "9 nanoseconds" },
+            { type: "element", value: "9 ns" },
         ]);
         expect(new Intl.DurationFormat("en").formatToParts(duration)).toEqual([
-            { type: "element", value: "1 year" },
+            { type: "element", value: "1 yr" },
             { type: "literal", value: ", " },
-            { type: "element", value: "2 months" },
+            { type: "element", value: "2 mths" },
             { type: "literal", value: ", " },
-            { type: "element", value: "3 weeks" },
+            { type: "element", value: "3 wks" },
             { type: "literal", value: ", " },
             { type: "element", value: "3 days" },
             { type: "literal", value: ", " },
-            { type: "element", value: "4 hours" },
+            { type: "element", value: "4 hr" },
             { type: "literal", value: ", " },
-            { type: "element", value: "5 minutes" },
+            { type: "element", value: "5 min" },
             { type: "literal", value: ", " },
-            { type: "element", value: "6 seconds" },
+            { type: "element", value: "6 sec" },
             { type: "literal", value: ", " },
-            { type: "element", value: "7 milliseconds" },
+            { type: "element", value: "7 ms" },
             { type: "literal", value: ", " },
-            { type: "element", value: "8 microseconds" },
+            { type: "element", value: "8 μs" },
             { type: "literal", value: ", and " },
-            { type: "element", value: "9 nanoseconds" },
+            { type: "element", value: "9 ns" },
         ]);
         expect(new Intl.DurationFormat("en", { style: "long" }).formatToParts(duration)).toEqual([
             { type: "element", value: "1 year" },

+ 11 - 11
Userland/Libraries/LibJS/Tests/builtins/Intl/DurationFormat/DurationFormat.prototype.resolvedOptions.js

@@ -56,7 +56,7 @@ describe("correct behavior", () => {
 
     test("style", () => {
         const en1 = new Intl.DurationFormat("en");
-        expect(en1.resolvedOptions().style).toBe("long");
+        expect(en1.resolvedOptions().style).toBe("short");
 
         ["long", "short", "narrow", "digital"].forEach(style => {
             const en2 = new Intl.DurationFormat("en", { style: style });
@@ -66,7 +66,7 @@ describe("correct behavior", () => {
 
     test("years", () => {
         const en1 = new Intl.DurationFormat("en");
-        expect(en1.resolvedOptions().years).toBe("long");
+        expect(en1.resolvedOptions().years).toBe("short");
 
         ["long", "short", "narrow"].forEach(years => {
             const en2 = new Intl.DurationFormat("en", { years: years });
@@ -86,7 +86,7 @@ describe("correct behavior", () => {
 
     test("months", () => {
         const en1 = new Intl.DurationFormat("en");
-        expect(en1.resolvedOptions().months).toBe("long");
+        expect(en1.resolvedOptions().months).toBe("short");
 
         ["long", "short", "narrow"].forEach(months => {
             const en2 = new Intl.DurationFormat("en", { months: months });
@@ -106,7 +106,7 @@ describe("correct behavior", () => {
 
     test("weeks", () => {
         const en1 = new Intl.DurationFormat("en");
-        expect(en1.resolvedOptions().weeks).toBe("long");
+        expect(en1.resolvedOptions().weeks).toBe("short");
 
         ["long", "short", "narrow"].forEach(weeks => {
             const en2 = new Intl.DurationFormat("en", { weeks: weeks });
@@ -126,7 +126,7 @@ describe("correct behavior", () => {
 
     test("days", () => {
         const en1 = new Intl.DurationFormat("en");
-        expect(en1.resolvedOptions().days).toBe("long");
+        expect(en1.resolvedOptions().days).toBe("short");
 
         ["long", "short", "narrow"].forEach(days => {
             const en2 = new Intl.DurationFormat("en", { days: days });
@@ -146,7 +146,7 @@ describe("correct behavior", () => {
 
     test("hours", () => {
         const en1 = new Intl.DurationFormat("en");
-        expect(en1.resolvedOptions().hours).toBe("long");
+        expect(en1.resolvedOptions().hours).toBe("short");
 
         ["long", "short", "narrow"].forEach(hours => {
             const en2 = new Intl.DurationFormat("en", { hours: hours });
@@ -170,7 +170,7 @@ describe("correct behavior", () => {
 
     test("minutes", () => {
         const en1 = new Intl.DurationFormat("en");
-        expect(en1.resolvedOptions().minutes).toBe("long");
+        expect(en1.resolvedOptions().minutes).toBe("short");
 
         ["long", "short", "narrow"].forEach(minutes => {
             const en2 = new Intl.DurationFormat("en", { minutes: minutes });
@@ -194,7 +194,7 @@ describe("correct behavior", () => {
 
     test("seconds", () => {
         const en1 = new Intl.DurationFormat("en");
-        expect(en1.resolvedOptions().seconds).toBe("long");
+        expect(en1.resolvedOptions().seconds).toBe("short");
 
         ["long", "short", "narrow"].forEach(seconds => {
             const en2 = new Intl.DurationFormat("en", { seconds: seconds });
@@ -218,7 +218,7 @@ describe("correct behavior", () => {
 
     test("milliseconds", () => {
         const en1 = new Intl.DurationFormat("en");
-        expect(en1.resolvedOptions().milliseconds).toBe("long");
+        expect(en1.resolvedOptions().milliseconds).toBe("short");
 
         ["long", "short", "narrow"].forEach(milliseconds => {
             const en2 = new Intl.DurationFormat("en", { milliseconds: milliseconds });
@@ -240,7 +240,7 @@ describe("correct behavior", () => {
 
     test("microseconds", () => {
         const en1 = new Intl.DurationFormat("en");
-        expect(en1.resolvedOptions().microseconds).toBe("long");
+        expect(en1.resolvedOptions().microseconds).toBe("short");
 
         ["long", "short", "narrow"].forEach(microseconds => {
             const en2 = new Intl.DurationFormat("en", { microseconds: microseconds });
@@ -262,7 +262,7 @@ describe("correct behavior", () => {
 
     test("nanoseconds", () => {
         const en1 = new Intl.DurationFormat("en");
-        expect(en1.resolvedOptions().nanoseconds).toBe("long");
+        expect(en1.resolvedOptions().nanoseconds).toBe("short");
 
         ["long", "short", "narrow", "numeric"].forEach(nanoseconds => {
             const en2 = new Intl.DurationFormat("en", { nanoseconds: nanoseconds });