diff options
author | Abseil Team <absl-team@google.com> | 2022-09-28 11:33:29 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2022-09-28 11:35:00 -0700 |
commit | f7404cd33f2457bd561fdcfbb024e43852c94bcf (patch) | |
tree | dd71ed565fe81f220984ffd9a531266c06a05ec2 /absl/strings/str_format_test.cc | |
parent | 6d9ea2b46f470406e1f49acc30b272c6e9f6cc5e (diff) | |
download | abseil-f7404cd33f2457bd561fdcfbb024e43852c94bcf.tar.gz abseil-f7404cd33f2457bd561fdcfbb024e43852c94bcf.tar.bz2 abseil-f7404cd33f2457bd561fdcfbb024e43852c94bcf.zip |
Allows absl::StrFormat to accept types which implement AbslStringify()
PiperOrigin-RevId: 477507777
Change-Id: I5ecde3163ca560ac8774034e55654774e36ad230
Diffstat (limited to 'absl/strings/str_format_test.cc')
-rw-r--r-- | absl/strings/str_format_test.cc | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/absl/strings/str_format_test.cc b/absl/strings/str_format_test.cc index 4b778056..0c4f10c8 100644 --- a/absl/strings/str_format_test.cc +++ b/absl/strings/str_format_test.cc @@ -1074,7 +1074,8 @@ using FormatExtensionTest = ::testing::Test; struct Point { friend absl::FormatConvertResult<absl::FormatConversionCharSet::kString | - absl::FormatConversionCharSet::kIntegral> + absl::FormatConversionCharSet::kIntegral | + absl::FormatConversionCharSet::v> AbslFormatConvert(const Point& p, const absl::FormatConversionSpec& spec, absl::FormatSink* s) { if (spec.conversion_char() == absl::FormatConversionChar::s) { @@ -1093,6 +1094,7 @@ TEST_F(FormatExtensionTest, AbslFormatConvertExample) { Point p; EXPECT_EQ(absl::StrFormat("a %s z", p), "a x=10 y=20 z"); EXPECT_EQ(absl::StrFormat("a %d z", p), "a 10,20 z"); + EXPECT_EQ(absl::StrFormat("a %v z", p), "a 10,20 z"); // Typed formatting will fail to compile an invalid format. // StrFormat("%f", p); // Does not compile. @@ -1101,6 +1103,21 @@ TEST_F(FormatExtensionTest, AbslFormatConvertExample) { // FormatUntyped will return false for bad character. EXPECT_FALSE(absl::FormatUntyped(&actual, f1, {absl::FormatArg(p)})); } + +struct PointStringify { + template <typename FormatSink> + friend void AbslStringify(FormatSink& sink, const PointStringify& p) { + sink.Append(absl::StrCat("(", p.x, ", ", p.y, ")")); + } + + double x = 10.0; + double y = 20.0; +}; + +TEST_F(FormatExtensionTest, AbslStringifyExample) { + PointStringify p; + EXPECT_EQ(absl::StrFormat("a %v z", p), "a (10, 20) z"); +} } // namespace // Some codegen thunks that we can use to easily dump the generated assembly for |