1// Copyright 2014 The Android Open Source Project
2//
3// This software is licensed under the terms of the GNU General Public
4// License version 2, as published by the Free Software Foundation, and
5// may be copied, distributed, and modified under those terms.
6//
7// This program is distributed in the hope that it will be useful,
8// but WITHOUT ANY WARRANTY; without even the implied warranty of
9// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10// GNU General Public License for more details.
11
12#include "android/base/StringFormat.h"
13
14#include <gtest/gtest.h>
15
16#include "android/base/String.h"
17
18namespace android {
19namespace base {
20
21TEST(StringFormat, EmptyString) {
22    String s = StringFormat("");
23    EXPECT_TRUE(s.empty());
24    EXPECT_STREQ("", s.c_str());
25}
26
27TEST(StringFormat, SimpleString) {
28    String s = StringFormat("foobar");
29    EXPECT_STREQ("foobar", s.c_str());
30}
31
32TEST(StringFormat, SimpleDecimal) {
33    String s = StringFormat("Pi is about %d.%d\n", 3, 1415);
34    EXPECT_STREQ("Pi is about 3.1415\n", s.c_str());
35}
36
37TEST(StringFormat, VeryLongString) {
38    static const char kPiece[] = "A hospital bed is a parked taxi with the meter running - Groucho Marx. ";
39    const size_t kPieceLen = sizeof(kPiece) - 1U;
40    String s = StringFormat("%s%s%s%s%s%s%s",
41                            kPiece,
42                            kPiece,
43                            kPiece,
44                            kPiece,
45                            kPiece,
46                            kPiece,
47                            kPiece
48                           );
49    EXPECT_EQ(7U * kPieceLen, s.size());
50    for (size_t n = 0; n < 7U; ++n) {
51        String s2 = String(s.c_str() + n * kPieceLen, kPieceLen);
52        EXPECT_STREQ(kPiece, s2.c_str()) << "Index #" << n;
53    }
54}
55
56TEST(StringAppendFormat, EmptyString) {
57    String s = "foo";
58    StringAppendFormat(&s, "");
59    EXPECT_EQ(3U, s.size());
60    EXPECT_STREQ("foo", s.c_str());
61}
62
63TEST(StringAppendFormat, SimpleString) {
64    String s = "foo";
65    StringAppendFormat(&s, "bar");
66    EXPECT_EQ(6U, s.size());
67    EXPECT_STREQ("foobar", s.c_str());
68}
69
70TEST(StringAppendFormat, VeryLongString) {
71    static const char kPiece[] = "A hospital bed is a parked taxi with the meter running - Groucho Marx. ";
72    const size_t kPieceLen = sizeof(kPiece) - 1U;
73    const size_t kCount = 12;
74    String s;
75    for (size_t n = 0; n < kCount; ++n) {
76        StringAppendFormat(&s, "%s", kPiece);
77    }
78
79    EXPECT_EQ(kCount * kPieceLen, s.size());
80    for (size_t n = 0; n < kCount; ++n) {
81        String s2 = String(s.c_str() + n * kPieceLen, kPieceLen);
82        EXPECT_STREQ(kPiece, s2.c_str()) << "Index #" << n;
83    }
84}
85
86}  // namespace base
87}  // namespace android
88