mirror of
https://github.com/nlohmann/json.git
synced 2026-09-06 08:17:59 +00:00
test: cover multi-digit widths and bare alignment in std::formatter<json> (#5423)
Every existing std::formatter spec with a width used a single digit (e.g.
"{:2}"), so the width-parsing loop's accumulation of a second/third digit was
never exercised; add multi-digit width cases. Likewise, every existing spec
with an alignment character also had an explicit fill character, so the
bare-alignment branch (e.g. "{:<}", with no fill) was never exercised; add
cases asserting it keeps the default space indent character.
Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
@@ -52,6 +52,23 @@ TEST_CASE("std::formatter<nlohmann::json>")
|
||||
CHECK(std::format("{:2}", j) == j.dump(2));
|
||||
CHECK(std::format("{:#2}", j) == j.dump(2));
|
||||
CHECK(std::format("{:8}", j) == j.dump(8));
|
||||
// multi-digit widths must accumulate every digit, not just the first
|
||||
CHECK(std::format("{:12}", j) == j.dump(12));
|
||||
CHECK(std::format("{:#12}", j) == j.dump(12));
|
||||
CHECK(std::format("{:10}", j) == j.dump(10));
|
||||
}
|
||||
|
||||
SECTION("bare alignment with no fill character defaults to a space indent character")
|
||||
{
|
||||
const json j = {{"foo", 1}, {"bar", {1, 2, 3}}};
|
||||
// without a preceding fill character, the alignment character itself must not
|
||||
// be mistaken for the indent character -- the default space is kept
|
||||
CHECK(std::format("{:<}", j) == j.dump());
|
||||
CHECK(std::format("{:>}", j) == j.dump());
|
||||
CHECK(std::format("{:^}", j) == j.dump());
|
||||
CHECK(std::format("{:<3}", j) == j.dump(3, ' '));
|
||||
CHECK(std::format("{:>3}", j) == j.dump(3, ' '));
|
||||
CHECK(std::format("{:^3}", j) == j.dump(3, ' '));
|
||||
}
|
||||
|
||||
SECTION("fill-and-align sets the indent character, like dump(indent, indent_char)")
|
||||
|
||||
Reference in New Issue
Block a user