1 /*
2 * Copyright (C) 2019 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "perfetto/ext/base/string_writer.h"
18
19 #include "test/gtest_and_gmock.h"
20
21 namespace perfetto {
22 namespace base {
23 namespace {
24
TEST(StringWriterTest,BasicCases)25 TEST(StringWriterTest, BasicCases) {
26 char buffer[128];
27 {
28 base::StringWriter writer(buffer, sizeof(buffer));
29 writer.AppendChar('0');
30 ASSERT_EQ(writer.GetStringView().ToStdString(), "0");
31 }
32 {
33 base::StringWriter writer(buffer, sizeof(buffer));
34 writer.AppendInt(132545);
35 ASSERT_EQ(writer.GetStringView().ToStdString(), "132545");
36 }
37 {
38 base::StringWriter writer(buffer, sizeof(buffer));
39 writer.AppendUnsignedInt(523);
40 ASSERT_EQ(writer.GetStringView().ToStdString(), "523");
41 }
42 {
43 base::StringWriter writer(buffer, sizeof(buffer));
44 writer.AppendPaddedInt<'0', 3>(0);
45 ASSERT_EQ(writer.GetStringView().ToStdString(), "000");
46 }
47 {
48 base::StringWriter writer(buffer, sizeof(buffer));
49 writer.AppendPaddedInt<'0', 1>(1);
50 ASSERT_EQ(writer.GetStringView().ToStdString(), "1");
51 }
52 {
53 base::StringWriter writer(buffer, sizeof(buffer));
54 writer.AppendPaddedInt<'0', 3>(1);
55 ASSERT_EQ(writer.GetStringView().ToStdString(), "001");
56 }
57 {
58 base::StringWriter writer(buffer, sizeof(buffer));
59 writer.AppendPaddedInt<'0', 0>(1);
60 ASSERT_EQ(writer.GetStringView().ToStdString(), "1");
61 }
62 {
63 base::StringWriter writer(buffer, sizeof(buffer));
64 writer.AppendPaddedInt<' ', 5>(123);
65 ASSERT_EQ(writer.GetStringView().ToStdString(), " 123");
66 }
67 {
68 base::StringWriter writer(buffer, sizeof(buffer));
69 writer.AppendPaddedUnsignedInt<' ', 5>(123);
70 ASSERT_EQ(writer.GetStringView().ToStdString(), " 123");
71 }
72 {
73 base::StringWriter writer(buffer, sizeof(buffer));
74 writer.AppendDouble(123.25);
75 ASSERT_EQ(writer.GetStringView().ToStdString(), "123.250000");
76 }
77 {
78 base::StringWriter writer(buffer, sizeof(buffer));
79 writer.AppendInt(std::numeric_limits<int64_t>::min());
80 ASSERT_EQ(writer.GetStringView().ToStdString(), "-9223372036854775808");
81 }
82 {
83 base::StringWriter writer(buffer, sizeof(buffer));
84 writer.AppendInt(std::numeric_limits<int64_t>::max());
85 ASSERT_EQ(writer.GetStringView().ToStdString(), "9223372036854775807");
86 }
87 {
88 base::StringWriter writer(buffer, sizeof(buffer));
89 writer.AppendUnsignedInt(std::numeric_limits<uint64_t>::max());
90 ASSERT_EQ(writer.GetStringView().ToStdString(), "18446744073709551615");
91 }
92 {
93 base::StringWriter writer(buffer, sizeof(buffer));
94 writer.AppendBool(true);
95 ASSERT_EQ(writer.GetStringView().ToStdString(), "true");
96 }
97 {
98 base::StringWriter writer(buffer, sizeof(buffer));
99 writer.AppendBool(false);
100 ASSERT_EQ(writer.GetStringView().ToStdString(), "false");
101 }
102
103 constexpr char kTestStr[] = "test";
104 {
105 base::StringWriter writer(buffer, sizeof(buffer));
106 writer.AppendLiteral(kTestStr);
107 ASSERT_EQ(writer.GetStringView().ToStdString(), kTestStr);
108 }
109 {
110 base::StringWriter writer(buffer, sizeof(buffer));
111 writer.AppendString(kTestStr, sizeof(kTestStr) - 1);
112 ASSERT_EQ(writer.GetStringView().ToStdString(), kTestStr);
113 }
114 {
115 base::StringWriter writer(buffer, sizeof(buffer));
116 writer.AppendString(kTestStr);
117 ASSERT_EQ(writer.GetStringView().ToStdString(), kTestStr);
118 }
119 {
120 base::StringWriter writer(buffer, sizeof(buffer));
121 writer.AppendChar('x', sizeof(buffer));
122 ASSERT_EQ(writer.GetStringView().ToStdString(),
123 std::string(sizeof(buffer), 'x').c_str());
124 }
125 }
126
TEST(StringWriterTest,WriteAllTypes)127 TEST(StringWriterTest, WriteAllTypes) {
128 char buffer[128];
129 base::StringWriter writer(buffer, sizeof(buffer));
130 writer.AppendChar('0');
131 writer.AppendInt(132545);
132 writer.AppendUnsignedInt(523);
133 writer.AppendPaddedInt<'0', 0>(1);
134 writer.AppendPaddedInt<'0', 3>(0);
135 writer.AppendPaddedInt<'0', 1>(1);
136 writer.AppendPaddedInt<'0', 2>(1);
137 writer.AppendPaddedInt<'0', 3>(1);
138 writer.AppendPaddedInt<' ', 5>(123);
139 writer.AppendPaddedUnsignedInt<' ', 5>(456);
140 writer.AppendDouble(123.25);
141 writer.AppendBool(true);
142
143 constexpr char kTestStr[] = "test";
144 writer.AppendLiteral(kTestStr);
145 writer.AppendString(kTestStr, sizeof(kTestStr) - 1);
146 writer.AppendString(kTestStr);
147
148 ASSERT_EQ(writer.GetStringView().ToStdString(),
149 "01325455231000101001 123 456123.250000truetesttesttest");
150 }
151
152 } // namespace
153 } // namespace base
154 } // namespace perfetto
155