summaryrefslogtreecommitdiff
path: root/llvm/unittests/Support/FormatVariadicTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/Support/FormatVariadicTest.cpp')
-rw-r--r--llvm/unittests/Support/FormatVariadicTest.cpp47
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
}