@@ -269,14 +269,50 @@ TEST(FormatVariadicTest, MultipleReplacements) {
269
269
EXPECT_EQ (ReplacementType::Literal, Replacements[3 ].Type );
270
270
EXPECT_EQ (" -" , Replacements[3 ].Spec );
271
271
272
- // {2:bar ,-3} - Options=bar, Align=-3
272
+ // {2,-3:bar } - Options=bar, Align=-3
273
273
EXPECT_EQ (ReplacementType::Format, Replacements[4 ].Type );
274
274
EXPECT_EQ (2u , Replacements[4 ].Index );
275
275
EXPECT_EQ (3u , Replacements[4 ].Width );
276
276
EXPECT_EQ (AlignStyle::Left, Replacements[4 ].Where );
277
277
EXPECT_EQ (" bar" , Replacements[4 ].Options );
278
278
}
279
279
280
+ TEST (FormatVariadicTest, AutomaticIndices) {
281
+ auto Replacements = parseFormatString (" {}" );
282
+ ASSERT_EQ (1u , Replacements.size ());
283
+ EXPECT_EQ (ReplacementType::Format, Replacements[0 ].Type );
284
+ EXPECT_EQ (0u , Replacements[0 ].Index );
285
+
286
+ Replacements = parseFormatString (" {}{}" );
287
+ ASSERT_EQ (2u , Replacements.size ());
288
+ EXPECT_EQ (ReplacementType::Format, Replacements[0 ].Type );
289
+ EXPECT_EQ (0u , Replacements[0 ].Index );
290
+ EXPECT_EQ (ReplacementType::Format, Replacements[1 ].Type );
291
+ EXPECT_EQ (1u , Replacements[1 ].Index );
292
+
293
+ Replacements = parseFormatString (" {}{:foo}{,-3:bar}" );
294
+ ASSERT_EQ (3u , Replacements.size ());
295
+ EXPECT_EQ (ReplacementType::Format, Replacements[0 ].Type );
296
+ EXPECT_EQ (0u , Replacements[0 ].Index );
297
+ EXPECT_EQ (0u , Replacements[0 ].Width );
298
+ EXPECT_EQ (AlignStyle::Right, Replacements[0 ].Where );
299
+ EXPECT_EQ (" " , Replacements[0 ].Options );
300
+
301
+ // {:foo} - Options=foo
302
+ EXPECT_EQ (ReplacementType::Format, Replacements[1 ].Type );
303
+ EXPECT_EQ (1u , Replacements[1 ].Index );
304
+ EXPECT_EQ (0u , Replacements[1 ].Width );
305
+ EXPECT_EQ (AlignStyle::Right, Replacements[1 ].Where );
306
+ EXPECT_EQ (" foo" , Replacements[1 ].Options );
307
+
308
+ // {,-3:bar} - Options=bar, Align=-3
309
+ EXPECT_EQ (ReplacementType::Format, Replacements[2 ].Type );
310
+ EXPECT_EQ (2u , Replacements[2 ].Index );
311
+ EXPECT_EQ (3u , Replacements[2 ].Width );
312
+ EXPECT_EQ (AlignStyle::Left, Replacements[2 ].Where );
313
+ EXPECT_EQ (" bar" , Replacements[2 ].Options );
314
+ }
315
+
280
316
TEST (FormatVariadicTest, FormatNoReplacements) {
281
317
EXPECT_EQ (" " , formatv (" " ).str ());
282
318
EXPECT_EQ (" Test" , formatv (" Test" ).str ());
@@ -291,6 +327,12 @@ TEST(FormatVariadicTest, FormatBasicTypesOneReplacement) {
291
327
EXPECT_EQ (" Test3" , formatv (" {0}" , std::string (" Test3" )).str ());
292
328
}
293
329
330
+ TEST (FormatVariadicTest, FormatAutomaticIndices) {
331
+ EXPECT_EQ (" 1" , formatv (" {}" , 1 ).str ());
332
+ EXPECT_EQ (" c1" , formatv (" {}{}" , ' c' , 1 ).str ());
333
+ EXPECT_EQ (" c-1rrr-0xFF" , formatv (" {}-{,r-4}-{:X}" , ' c' , 1 , 255 ).str ());
334
+ }
335
+
294
336
TEST (FormatVariadicTest, IntegralHexFormatting) {
295
337
// 1. Trivial cases. Make sure hex is not the default.
296
338
EXPECT_EQ (" 0" , formatv (" {0}" , 0 ).str ());
@@ -717,13 +759,16 @@ TEST(FormatVariadicTest, Validate) {
717
759
EXPECT_DEATH (formatv (" {0}" , 1 , 2 ).str (), " Expected 1 Args, but got 2" );
718
760
EXPECT_DEATH (formatv (" {0} {2}" , 1 , 2 , 3 ).str (),
719
761
" Replacement field indices cannot have holes" );
762
+ EXPECT_DEATH (formatv (" {}{1}" , 0 , 1 ).str (),
763
+ " Cannot mix automatic and explicit indices" );
720
764
#else // GTEST_HAS_DEATH_TEST
721
765
GTEST_SKIP () << " No support for EXPECT_DEATH" ;
722
766
#endif // GTEST_HAS_DEATH_TEST
723
767
#else // NDEBUG
724
768
// If asserts are disabled, verify that validation is disabled.
725
769
EXPECT_EQ (formatv (" {0}" , 1 , 2 ).str (), " 1" );
726
770
EXPECT_EQ (formatv (" {0} {2}" , 1 , 2 , 3 ).str (), " 1 3" );
771
+ EXPECT_EQ (formatv (" {}{1}" , 0 , 1 ).str (), " 01" );
727
772
#endif // NDEBUG
728
773
}
729
774
0 commit comments