bloaty/third_party/abseil-cpp/absl/strings/internal/str_format/arg_test.cc
Go to the documentation of this file.
1 // Copyright 2017 The Abseil Authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include "absl/strings/internal/str_format/arg.h"
16 
17 #include <ostream>
18 #include <string>
19 #include "gtest/gtest.h"
20 #include "absl/strings/str_format.h"
21 
22 namespace absl {
24 namespace str_format_internal {
25 namespace {
26 
27 class FormatArgImplTest : public ::testing::Test {
28  public:
29  enum Color { kRed, kGreen, kBlue };
30 
31  static const char *hi() { return "hi"; }
32 
33  struct X {};
34 
35  X x_;
36 };
37 
38 inline FormatConvertResult<FormatConversionCharSet{}> AbslFormatConvert(
39  const FormatArgImplTest::X &, const FormatConversionSpec &, FormatSink *) {
40  return {false};
41 }
42 
43 TEST_F(FormatArgImplTest, ToInt) {
44  int out = 0;
45  EXPECT_TRUE(FormatArgImplFriend::ToInt(FormatArgImpl(1), &out));
46  EXPECT_EQ(1, out);
47  EXPECT_TRUE(FormatArgImplFriend::ToInt(FormatArgImpl(-1), &out));
48  EXPECT_EQ(-1, out);
50  FormatArgImplFriend::ToInt(FormatArgImpl(static_cast<char>(64)), &out));
51  EXPECT_EQ(64, out);
53  FormatArgImpl(static_cast<unsigned long long>(123456)), &out)); // NOLINT
54  EXPECT_EQ(123456, out);
56  FormatArgImpl(static_cast<unsigned long long>( // NOLINT
58  1),
59  &out));
62  FormatArgImpl(static_cast<long long>( // NOLINT
64  10),
65  &out));
67  EXPECT_TRUE(FormatArgImplFriend::ToInt(FormatArgImpl(false), &out));
68  EXPECT_EQ(0, out);
69  EXPECT_TRUE(FormatArgImplFriend::ToInt(FormatArgImpl(true), &out));
70  EXPECT_EQ(1, out);
71  EXPECT_FALSE(FormatArgImplFriend::ToInt(FormatArgImpl(2.2), &out));
72  EXPECT_FALSE(FormatArgImplFriend::ToInt(FormatArgImpl(3.2f), &out));
74  FormatArgImpl(static_cast<int *>(nullptr)), &out));
75  EXPECT_FALSE(FormatArgImplFriend::ToInt(FormatArgImpl(hi()), &out));
76  EXPECT_FALSE(FormatArgImplFriend::ToInt(FormatArgImpl("hi"), &out));
77  EXPECT_FALSE(FormatArgImplFriend::ToInt(FormatArgImpl(x_), &out));
78  EXPECT_TRUE(FormatArgImplFriend::ToInt(FormatArgImpl(kBlue), &out));
79  EXPECT_EQ(2, out);
80 }
81 
82 extern const char kMyArray[];
83 
84 TEST_F(FormatArgImplTest, CharArraysDecayToCharPtr) {
85  const char* a = "";
87  FormatArgImplFriend::GetVTablePtrForTest(FormatArgImpl("")));
89  FormatArgImplFriend::GetVTablePtrForTest(FormatArgImpl("A")));
91  FormatArgImplFriend::GetVTablePtrForTest(FormatArgImpl("ABC")));
93  FormatArgImplFriend::GetVTablePtrForTest(FormatArgImpl(kMyArray)));
94 }
95 
96 TEST_F(FormatArgImplTest, OtherPtrDecayToVoidPtr) {
98  FormatArgImpl(static_cast<void *>(nullptr)));
100  FormatArgImpl(static_cast<int *>(nullptr))),
101  expected);
103  FormatArgImpl(static_cast<volatile int *>(nullptr))),
104  expected);
105 
106  auto p = static_cast<void (*)()>([] {});
108  expected);
109 }
110 
111 TEST_F(FormatArgImplTest, WorksWithCharArraysOfUnknownSize) {
112  std::string s;
113  FormatSinkImpl sink(&s);
114  FormatConversionSpecImpl conv;
116  FormatConversionCharInternal::s, &conv);
120  EXPECT_TRUE(
121  FormatArgImplFriend::Convert(FormatArgImpl(kMyArray), conv, &sink));
122  sink.Flush();
123  EXPECT_EQ("ABCDE", s);
124 }
125 const char kMyArray[] = "ABCDE";
126 
127 } // namespace
128 } // namespace str_format_internal
130 } // namespace absl
EXPECT_FALSE
#define EXPECT_FALSE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1970
X
#define X(c)
absl::str_format_internal::FormatArgImplFriend::ToInt
static bool ToInt(Arg arg, int *out)
Definition: abseil-cpp/absl/strings/internal/str_format/arg.h:284
absl::str_format_internal::AbslFormatConvert
void AbslFormatConvert()
absl::str_format_internal::FormatConversionSpecImplFriend::SetFlags
static void SetFlags(Flags f, FormatConversionSpecImpl *conv)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:316
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
absl::FormatConversionChar::s
@ s
a
int a
Definition: abseil-cpp/absl/container/internal/hash_policy_traits_test.cc:88
xds_manager.p
p
Definition: xds_manager.py:60
absl::str_format_internal::FormatConversionSpecImplFriend::SetWidth
static void SetWidth(int w, FormatConversionSpecImpl *conv)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:323
ABSL_NAMESPACE_END
#define ABSL_NAMESPACE_END
Definition: third_party/abseil-cpp/absl/base/config.h:171
testing::Test
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:402
EXPECT_EQ
#define EXPECT_EQ(a, b)
Definition: iomgr/time_averaged_stats_test.cc:27
ABSL_NAMESPACE_BEGIN
#define ABSL_NAMESPACE_BEGIN
Definition: third_party/abseil-cpp/absl/base/config.h:170
max
int max
Definition: bloaty/third_party/zlib/examples/enough.c:170
conv
const FormatConversionSpecImpl & conv
Definition: abseil-cpp/absl/strings/internal/str_format/float_conversion.cc:449
absl::str_format_internal::FormatArgImplFriend::Convert
static bool Convert(Arg arg, FormatConversionSpecImpl conv, FormatSinkImpl *out)
Definition: abseil-cpp/absl/strings/internal/str_format/arg.h:291
absl::str_format_internal::FormatConversionSpecImplFriend::SetPrecision
static void SetPrecision(int p, FormatConversionSpecImpl *conv)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:326
min
#define min(a, b)
Definition: qsort.h:83
absl::str_format_internal::Flags
Flags
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:134
absl::str_format_internal::FormatConversionSpecImplFriend::SetConversionChar
static void SetConversionChar(FormatConversionChar c, FormatConversionSpecImpl *conv)
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:319
absl::str_format_internal::FormatArgImplFriend::GetVTablePtrForTest
static Arg::Dispatcher GetVTablePtrForTest(Arg arg)
Definition: abseil-cpp/absl/strings/internal/str_format/arg.h:297
sink
FormatSinkImpl * sink
Definition: abseil-cpp/absl/strings/internal/str_format/float_conversion.cc:450
absl::FormatConversionCharSet
FormatConversionCharSet
Definition: abseil-cpp/absl/strings/str_format.h:737
EXPECT_TRUE
#define EXPECT_TRUE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1967
absl
Definition: abseil-cpp/absl/algorithm/algorithm.h:31
absl::str_format_internal::FormatSinkImpl::Flush
void Flush()
Definition: abseil-cpp/absl/strings/internal/str_format/extension.h:73
absl::out
char * out
Definition: abseil-cpp/absl/synchronization/mutex.h:1048
x_
X x_
Definition: bloaty/third_party/abseil-cpp/absl/strings/internal/str_format/arg_test.cc:35
str_format_internal
TEST_F
#define TEST_F(test_fixture, test_name)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2367


grpc
Author(s):
autogenerated on Fri May 16 2025 02:57:43