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