diff --git a/AK/Format.h b/AK/Format.h index 199cab97b4..8c9f3184d1 100644 --- a/AK/Format.h +++ b/AK/Format.h @@ -354,8 +354,10 @@ requires(HasFormatter) struct Formatter> : StandardFormatter { builder.put_literal("[ "sv); bool first = true; for (auto& content : value) { - if (!first) + if (!first) { builder.put_literal(", "sv); + content_fmt = Formatter {}; + } first = false; content_fmt.format(builder, content); } diff --git a/Tests/AK/TestFormat.cpp b/Tests/AK/TestFormat.cpp index 3c61179879..28696cce28 100644 --- a/Tests/AK/TestFormat.cpp +++ b/Tests/AK/TestFormat.cpp @@ -8,6 +8,7 @@ #include #include +#include TEST_CASE(is_integral_works_properly) { @@ -306,3 +307,19 @@ TEST_CASE(hex_dump) EXPECT_EQ(String::formatted("{:>2hex-dump}", "0000"), "3030 00\n3030 00"); EXPECT_EQ(String::formatted("{:*>4hex-dump}", "0000"), "30303030****0000"); } + +TEST_CASE(vector_format) +{ + { + Vector v { 1, 2, 3, 4 }; + EXPECT_EQ(String::formatted("{}", v), "[ 1, 2, 3, 4 ]"); + } + { + Vector v { "1"sv, "2"sv, "3"sv, "4"sv }; + EXPECT_EQ(String::formatted("{}", v), "[ 1, 2, 3, 4 ]"); + } + { + Vector> v { { "1"sv, "2"sv }, { "3"sv, "4"sv } }; + EXPECT_EQ(String::formatted("{}", v), "[ [ 1, 2 ], [ 3, 4 ] ]"); + } +}