diff options
author | Zachary Turner <zturner@google.com> | 2018-06-28 20:09:37 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2018-06-28 20:09:37 +0000 |
commit | 402ab4964ea842855ad786acf4df337ba348b726 (patch) | |
tree | eb0fad85833afb6f434dfc96fa85b6d76176fde3 /llvm/unittests/Support/FormatVariadicTest.cpp | |
parent | e87868b7e9178cc404dd9c475fdf56de5d4fb3c2 (diff) | |
download | bcm5719-llvm-402ab4964ea842855ad786acf4df337ba348b726.tar.gz bcm5719-llvm-402ab4964ea842855ad786acf4df337ba348b726.zip |
Fix padding with custom character in formatv.
The format string for formatv allows to specify a custom padding
character instead of the default space. This custom character was
parsed correctly, but not passed on to the formatter.
Patch by Marcel Köppe
Differential Revision: https://reviews.llvm.org/D48140
llvm-svn: 335915
Diffstat (limited to 'llvm/unittests/Support/FormatVariadicTest.cpp')
-rw-r--r-- | llvm/unittests/Support/FormatVariadicTest.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/llvm/unittests/Support/FormatVariadicTest.cpp b/llvm/unittests/Support/FormatVariadicTest.cpp index ddecffdeed1..54373da51c4 100644 --- a/llvm/unittests/Support/FormatVariadicTest.cpp +++ b/llvm/unittests/Support/FormatVariadicTest.cpp @@ -143,6 +143,58 @@ TEST(FormatVariadicTest, ValidReplacementSequence) { EXPECT_EQ(0u, Replacements[0].Align); EXPECT_EQ(AlignStyle::Right, Replacements[0].Where); EXPECT_EQ("0:1", Replacements[0].Options); + + // 9. Custom padding character + Replacements = formatv_object_base::parseFormatString("{0,p+4:foo}"); + ASSERT_EQ(1u, Replacements.size()); + EXPECT_EQ("0,p+4:foo", Replacements[0].Spec); + EXPECT_EQ(ReplacementType::Format, Replacements[0].Type); + EXPECT_EQ(0u, Replacements[0].Index); + EXPECT_EQ(4u, Replacements[0].Align); + EXPECT_EQ(AlignStyle::Right, Replacements[0].Where); + EXPECT_EQ('p', Replacements[0].Pad); + EXPECT_EQ("foo", Replacements[0].Options); + + // Format string special characters are allowed as padding character + Replacements = formatv_object_base::parseFormatString("{0,-+4:foo}"); + ASSERT_EQ(1u, Replacements.size()); + EXPECT_EQ("0,-+4:foo", Replacements[0].Spec); + EXPECT_EQ(ReplacementType::Format, Replacements[0].Type); + EXPECT_EQ(0u, Replacements[0].Index); + EXPECT_EQ(4u, Replacements[0].Align); + EXPECT_EQ(AlignStyle::Right, Replacements[0].Where); + EXPECT_EQ('-', Replacements[0].Pad); + EXPECT_EQ("foo", Replacements[0].Options); + + Replacements = formatv_object_base::parseFormatString("{0,+-4:foo}"); + ASSERT_EQ(1u, Replacements.size()); + EXPECT_EQ("0,+-4:foo", Replacements[0].Spec); + EXPECT_EQ(ReplacementType::Format, Replacements[0].Type); + EXPECT_EQ(0u, Replacements[0].Index); + EXPECT_EQ(4u, Replacements[0].Align); + EXPECT_EQ(AlignStyle::Left, Replacements[0].Where); + EXPECT_EQ('+', Replacements[0].Pad); + EXPECT_EQ("foo", Replacements[0].Options); + + Replacements = formatv_object_base::parseFormatString("{0,==4:foo}"); + ASSERT_EQ(1u, Replacements.size()); + EXPECT_EQ("0,==4:foo", Replacements[0].Spec); + EXPECT_EQ(ReplacementType::Format, Replacements[0].Type); + EXPECT_EQ(0u, Replacements[0].Index); + EXPECT_EQ(4u, Replacements[0].Align); + EXPECT_EQ(AlignStyle::Center, Replacements[0].Where); + EXPECT_EQ('=', Replacements[0].Pad); + EXPECT_EQ("foo", Replacements[0].Options); + + Replacements = formatv_object_base::parseFormatString("{0,:=4:foo}"); + ASSERT_EQ(1u, Replacements.size()); + EXPECT_EQ("0,:=4:foo", Replacements[0].Spec); + EXPECT_EQ(ReplacementType::Format, Replacements[0].Type); + EXPECT_EQ(0u, Replacements[0].Index); + EXPECT_EQ(4u, Replacements[0].Align); + EXPECT_EQ(AlignStyle::Center, Replacements[0].Where); + EXPECT_EQ(':', Replacements[0].Pad); + EXPECT_EQ("foo", Replacements[0].Options); } TEST(FormatVariadicTest, DefaultReplacementValues) { @@ -421,6 +473,16 @@ TEST(FormatVariadicTest, DoubleFormatting) { EXPECT_EQ(" -0.001", formatv("{0,8:F3}", -.0012345678).str()); } +TEST(FormatVariadicTest, CustomPaddingCharacter) { + // 1. Padding with custom character + EXPECT_EQ("==123", formatv("{0,=+5}", 123).str()); + EXPECT_EQ("=123=", formatv("{0,==5}", 123).str()); + EXPECT_EQ("123==", formatv("{0,=-5}", 123).str()); + + // 2. Combined with zero padding + EXPECT_EQ("=00123=", formatv("{0,==7:5}", 123).str()); +} + struct format_tuple { const char *Fmt; explicit format_tuple(const char *Fmt) : Fmt(Fmt) {} |