diff options
Diffstat (limited to 'llvm/unittests/Support/FormatVariadicTest.cpp')
| -rw-r--r-- | llvm/unittests/Support/FormatVariadicTest.cpp | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/llvm/unittests/Support/FormatVariadicTest.cpp b/llvm/unittests/Support/FormatVariadicTest.cpp index 4f3d1791c001..68938480ecfe 100644 --- a/llvm/unittests/Support/FormatVariadicTest.cpp +++ b/llvm/unittests/Support/FormatVariadicTest.cpp @@ -269,7 +269,7 @@ TEST(FormatVariadicTest, MultipleReplacements) { EXPECT_EQ(ReplacementType::Literal, Replacements[3].Type); EXPECT_EQ("-", Replacements[3].Spec); - // {2:bar,-3} - Options=bar, Align=-3 + // {2,-3:bar} - Options=bar, Align=-3 EXPECT_EQ(ReplacementType::Format, Replacements[4].Type); EXPECT_EQ(2u, Replacements[4].Index); EXPECT_EQ(3u, Replacements[4].Width); @@ -277,6 +277,42 @@ TEST(FormatVariadicTest, MultipleReplacements) { EXPECT_EQ("bar", Replacements[4].Options); } +TEST(FormatVariadicTest, AutomaticIndices) { + auto Replacements = parseFormatString("{}"); + ASSERT_EQ(1u, Replacements.size()); + EXPECT_EQ(ReplacementType::Format, Replacements[0].Type); + EXPECT_EQ(0u, Replacements[0].Index); + + Replacements = parseFormatString("{}{}"); + ASSERT_EQ(2u, Replacements.size()); + EXPECT_EQ(ReplacementType::Format, Replacements[0].Type); + EXPECT_EQ(0u, Replacements[0].Index); + EXPECT_EQ(ReplacementType::Format, Replacements[1].Type); + EXPECT_EQ(1u, Replacements[1].Index); + + Replacements = parseFormatString("{}{:foo}{,-3:bar}"); + ASSERT_EQ(3u, Replacements.size()); + EXPECT_EQ(ReplacementType::Format, Replacements[0].Type); + EXPECT_EQ(0u, Replacements[0].Index); + EXPECT_EQ(0u, Replacements[0].Width); + EXPECT_EQ(AlignStyle::Right, Replacements[0].Where); + EXPECT_EQ("", Replacements[0].Options); + + // {:foo} - Options=foo + EXPECT_EQ(ReplacementType::Format, Replacements[1].Type); + EXPECT_EQ(1u, Replacements[1].Index); + EXPECT_EQ(0u, Replacements[1].Width); + EXPECT_EQ(AlignStyle::Right, Replacements[1].Where); + EXPECT_EQ("foo", Replacements[1].Options); + + // {,-3:bar} - Options=bar, Align=-3 + EXPECT_EQ(ReplacementType::Format, Replacements[2].Type); + EXPECT_EQ(2u, Replacements[2].Index); + EXPECT_EQ(3u, Replacements[2].Width); + EXPECT_EQ(AlignStyle::Left, Replacements[2].Where); + EXPECT_EQ("bar", Replacements[2].Options); +} + TEST(FormatVariadicTest, FormatNoReplacements) { EXPECT_EQ("", formatv("").str()); EXPECT_EQ("Test", formatv("Test").str()); @@ -291,6 +327,12 @@ TEST(FormatVariadicTest, FormatBasicTypesOneReplacement) { EXPECT_EQ("Test3", formatv("{0}", std::string("Test3")).str()); } +TEST(FormatVariadicTest, FormatAutomaticIndices) { + EXPECT_EQ("1", formatv("{}", 1).str()); + EXPECT_EQ("c1", formatv("{}{}", 'c', 1).str()); + EXPECT_EQ("c-1rrr-0xFF", formatv("{}-{,r-4}-{:X}", 'c', 1, 255).str()); +} + TEST(FormatVariadicTest, IntegralHexFormatting) { // 1. Trivial cases. Make sure hex is not the default. EXPECT_EQ("0", formatv("{0}", 0).str()); @@ -717,6 +759,8 @@ TEST(FormatVariadicTest, Validate) { EXPECT_DEATH(formatv("{0}", 1, 2).str(), "Expected 1 Args, but got 2"); EXPECT_DEATH(formatv("{0} {2}", 1, 2, 3).str(), "Replacement field indices cannot have holes"); + EXPECT_DEATH(formatv("{}{1}", 0, 1).str(), + "Cannot mix automatic and explicit indices"); #else // GTEST_HAS_DEATH_TEST GTEST_SKIP() << "No support for EXPECT_DEATH"; #endif // GTEST_HAS_DEATH_TEST @@ -724,6 +768,7 @@ TEST(FormatVariadicTest, Validate) { // If asserts are disabled, verify that validation is disabled. EXPECT_EQ(formatv("{0}", 1, 2).str(), "1"); EXPECT_EQ(formatv("{0} {2}", 1, 2, 3).str(), "1 3"); + EXPECT_EQ(formatv("{}{1}", 0, 1).str(), "01"); #endif // NDEBUG } |
