1*80814287SRaphael Isemann //===-- StringListTest.cpp ------------------------------------------------===//
213ff0d8dSRaphael Isemann //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
613ff0d8dSRaphael Isemann //
713ff0d8dSRaphael Isemann //===----------------------------------------------------------------------===//
813ff0d8dSRaphael Isemann
913ff0d8dSRaphael Isemann #include "lldb/Utility/StringList.h"
1013ff0d8dSRaphael Isemann #include "lldb/Utility/StreamString.h"
114c78b788SRaphael Isemann #include "gmock/gmock.h"
1213ff0d8dSRaphael Isemann #include "gtest/gtest.h"
1313ff0d8dSRaphael Isemann
1413ff0d8dSRaphael Isemann using namespace lldb_private;
1513ff0d8dSRaphael Isemann
TEST(StringListTest,DefaultConstructor)1613ff0d8dSRaphael Isemann TEST(StringListTest, DefaultConstructor) {
1713ff0d8dSRaphael Isemann StringList s;
1813ff0d8dSRaphael Isemann EXPECT_EQ(0U, s.GetSize());
1913ff0d8dSRaphael Isemann }
2013ff0d8dSRaphael Isemann
TEST(StringListTest,Assignment)2113ff0d8dSRaphael Isemann TEST(StringListTest, Assignment) {
2213ff0d8dSRaphael Isemann StringList orig;
2313ff0d8dSRaphael Isemann orig.AppendString("foo");
2413ff0d8dSRaphael Isemann orig.AppendString("bar");
2513ff0d8dSRaphael Isemann
2613ff0d8dSRaphael Isemann StringList s = orig;
2713ff0d8dSRaphael Isemann
2813ff0d8dSRaphael Isemann ASSERT_EQ(2U, s.GetSize());
2913ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
3013ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(1));
3113ff0d8dSRaphael Isemann
3213ff0d8dSRaphael Isemann ASSERT_EQ(2U, orig.GetSize());
3313ff0d8dSRaphael Isemann EXPECT_STREQ("foo", orig.GetStringAtIndex(0));
3413ff0d8dSRaphael Isemann EXPECT_STREQ("bar", orig.GetStringAtIndex(1));
3513ff0d8dSRaphael Isemann }
3613ff0d8dSRaphael Isemann
TEST(StringListTest,AppendStringStdString)3713ff0d8dSRaphael Isemann TEST(StringListTest, AppendStringStdString) {
3813ff0d8dSRaphael Isemann StringList s;
3913ff0d8dSRaphael Isemann s.AppendString("foo");
4013ff0d8dSRaphael Isemann ASSERT_EQ(1U, s.GetSize());
4113ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
4213ff0d8dSRaphael Isemann
4313ff0d8dSRaphael Isemann s.AppendString("bar");
4413ff0d8dSRaphael Isemann ASSERT_EQ(2U, s.GetSize());
4513ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
4613ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(1));
4713ff0d8dSRaphael Isemann }
4813ff0d8dSRaphael Isemann
TEST(StringListTest,AppendStringCString)4913ff0d8dSRaphael Isemann TEST(StringListTest, AppendStringCString) {
5013ff0d8dSRaphael Isemann StringList s;
5113ff0d8dSRaphael Isemann s.AppendString("foo", strlen("foo"));
5213ff0d8dSRaphael Isemann ASSERT_EQ(1U, s.GetSize());
5313ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
5413ff0d8dSRaphael Isemann
5513ff0d8dSRaphael Isemann s.AppendString("bar", strlen("bar"));
5613ff0d8dSRaphael Isemann ASSERT_EQ(2U, s.GetSize());
5713ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
5813ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(1));
5913ff0d8dSRaphael Isemann }
6013ff0d8dSRaphael Isemann
TEST(StringListTest,AppendStringMove)6113ff0d8dSRaphael Isemann TEST(StringListTest, AppendStringMove) {
6213ff0d8dSRaphael Isemann StringList s;
6313ff0d8dSRaphael Isemann std::string foo = "foo";
6413ff0d8dSRaphael Isemann std::string bar = "bar";
6513ff0d8dSRaphael Isemann
6613ff0d8dSRaphael Isemann s.AppendString(std::move(foo));
6713ff0d8dSRaphael Isemann ASSERT_EQ(1U, s.GetSize());
6813ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
6913ff0d8dSRaphael Isemann
7013ff0d8dSRaphael Isemann s.AppendString(std::move(bar));
7113ff0d8dSRaphael Isemann ASSERT_EQ(2U, s.GetSize());
7213ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
7313ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(1));
7413ff0d8dSRaphael Isemann }
7513ff0d8dSRaphael Isemann
TEST(StringListTest,ShiftStdString)7613ff0d8dSRaphael Isemann TEST(StringListTest, ShiftStdString) {
7713ff0d8dSRaphael Isemann StringList s;
7813ff0d8dSRaphael Isemann std::string foo = "foo";
7913ff0d8dSRaphael Isemann std::string bar = "bar";
8013ff0d8dSRaphael Isemann
8113ff0d8dSRaphael Isemann s << foo;
8213ff0d8dSRaphael Isemann ASSERT_EQ(1U, s.GetSize());
8313ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
8413ff0d8dSRaphael Isemann
8513ff0d8dSRaphael Isemann s << bar;
8613ff0d8dSRaphael Isemann ASSERT_EQ(2U, s.GetSize());
8713ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
8813ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(1));
8913ff0d8dSRaphael Isemann }
9013ff0d8dSRaphael Isemann
TEST(StringListTest,ShiftCString)9113ff0d8dSRaphael Isemann TEST(StringListTest, ShiftCString) {
9213ff0d8dSRaphael Isemann StringList s;
9313ff0d8dSRaphael Isemann s << "foo";
9413ff0d8dSRaphael Isemann ASSERT_EQ(1U, s.GetSize());
9513ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
9613ff0d8dSRaphael Isemann
9713ff0d8dSRaphael Isemann s << "bar";
9813ff0d8dSRaphael Isemann ASSERT_EQ(2U, s.GetSize());
9913ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
10013ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(1));
10113ff0d8dSRaphael Isemann }
10213ff0d8dSRaphael Isemann
TEST(StringListTest,ShiftMove)10313ff0d8dSRaphael Isemann TEST(StringListTest, ShiftMove) {
10413ff0d8dSRaphael Isemann StringList s;
10513ff0d8dSRaphael Isemann std::string foo = "foo";
10613ff0d8dSRaphael Isemann std::string bar = "bar";
10713ff0d8dSRaphael Isemann
10813ff0d8dSRaphael Isemann s << std::move(foo);
10913ff0d8dSRaphael Isemann ASSERT_EQ(1U, s.GetSize());
11013ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
11113ff0d8dSRaphael Isemann
11213ff0d8dSRaphael Isemann s << std::move(bar);
11313ff0d8dSRaphael Isemann ASSERT_EQ(2U, s.GetSize());
11413ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
11513ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(1));
11613ff0d8dSRaphael Isemann }
11713ff0d8dSRaphael Isemann
TEST(StringListTest,AppendListCStringArrayEmpty)11813ff0d8dSRaphael Isemann TEST(StringListTest, AppendListCStringArrayEmpty) {
11913ff0d8dSRaphael Isemann StringList s;
12013ff0d8dSRaphael Isemann s.AppendList(nullptr, 0);
12113ff0d8dSRaphael Isemann EXPECT_EQ(0U, s.GetSize());
12213ff0d8dSRaphael Isemann }
12313ff0d8dSRaphael Isemann
TEST(StringListTest,AppendListCStringArray)12413ff0d8dSRaphael Isemann TEST(StringListTest, AppendListCStringArray) {
12513ff0d8dSRaphael Isemann StringList s;
12613ff0d8dSRaphael Isemann const char *items[3] = {"foo", "", "bar"};
12713ff0d8dSRaphael Isemann s.AppendList(items, 3);
12813ff0d8dSRaphael Isemann
12913ff0d8dSRaphael Isemann EXPECT_EQ(3U, s.GetSize());
13013ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
13113ff0d8dSRaphael Isemann EXPECT_STREQ("", s.GetStringAtIndex(1));
13213ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(2));
13313ff0d8dSRaphael Isemann }
13413ff0d8dSRaphael Isemann
TEST(StringListTest,AppendList)13513ff0d8dSRaphael Isemann TEST(StringListTest, AppendList) {
13613ff0d8dSRaphael Isemann StringList other;
13713ff0d8dSRaphael Isemann other.AppendString("foo");
13813ff0d8dSRaphael Isemann other.AppendString("");
13913ff0d8dSRaphael Isemann other.AppendString("bar");
14013ff0d8dSRaphael Isemann
14113ff0d8dSRaphael Isemann StringList empty;
14213ff0d8dSRaphael Isemann
14313ff0d8dSRaphael Isemann StringList s;
14413ff0d8dSRaphael Isemann s.AppendList(other);
14513ff0d8dSRaphael Isemann
14613ff0d8dSRaphael Isemann EXPECT_EQ(3U, s.GetSize());
14713ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
14813ff0d8dSRaphael Isemann EXPECT_STREQ("", s.GetStringAtIndex(1));
14913ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(2));
15013ff0d8dSRaphael Isemann
15113ff0d8dSRaphael Isemann EXPECT_EQ(3U, other.GetSize());
15213ff0d8dSRaphael Isemann EXPECT_STREQ("foo", other.GetStringAtIndex(0));
15313ff0d8dSRaphael Isemann EXPECT_STREQ("", other.GetStringAtIndex(1));
15413ff0d8dSRaphael Isemann EXPECT_STREQ("bar", other.GetStringAtIndex(2));
15513ff0d8dSRaphael Isemann
15613ff0d8dSRaphael Isemann s.AppendList(empty);
15713ff0d8dSRaphael Isemann s.AppendList(other);
15813ff0d8dSRaphael Isemann EXPECT_EQ(6U, s.GetSize());
15913ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
16013ff0d8dSRaphael Isemann EXPECT_STREQ("", s.GetStringAtIndex(1));
16113ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(2));
16213ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(3));
16313ff0d8dSRaphael Isemann EXPECT_STREQ("", s.GetStringAtIndex(4));
16413ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(5));
16513ff0d8dSRaphael Isemann
16613ff0d8dSRaphael Isemann EXPECT_EQ(3U, other.GetSize());
16713ff0d8dSRaphael Isemann EXPECT_STREQ("foo", other.GetStringAtIndex(0));
16813ff0d8dSRaphael Isemann EXPECT_STREQ("", other.GetStringAtIndex(1));
16913ff0d8dSRaphael Isemann EXPECT_STREQ("bar", other.GetStringAtIndex(2));
17013ff0d8dSRaphael Isemann }
17113ff0d8dSRaphael Isemann
TEST(StringListTest,GetSize)17213ff0d8dSRaphael Isemann TEST(StringListTest, GetSize) {
17313ff0d8dSRaphael Isemann StringList s;
17413ff0d8dSRaphael Isemann s.AppendString("foo");
17513ff0d8dSRaphael Isemann EXPECT_EQ(1U, s.GetSize());
17613ff0d8dSRaphael Isemann
17713ff0d8dSRaphael Isemann s.AppendString("foo");
17813ff0d8dSRaphael Isemann EXPECT_EQ(2U, s.GetSize());
17913ff0d8dSRaphael Isemann
18013ff0d8dSRaphael Isemann s.AppendString("foobar");
18113ff0d8dSRaphael Isemann EXPECT_EQ(3U, s.GetSize());
18213ff0d8dSRaphael Isemann }
18313ff0d8dSRaphael Isemann
TEST(StringListTest,SetSize)18413ff0d8dSRaphael Isemann TEST(StringListTest, SetSize) {
18513ff0d8dSRaphael Isemann StringList s;
18613ff0d8dSRaphael Isemann s.SetSize(3);
18713ff0d8dSRaphael Isemann EXPECT_EQ(3U, s.GetSize());
18813ff0d8dSRaphael Isemann EXPECT_STREQ("", s.GetStringAtIndex(0));
18913ff0d8dSRaphael Isemann EXPECT_STREQ("", s.GetStringAtIndex(1));
19013ff0d8dSRaphael Isemann EXPECT_STREQ("", s.GetStringAtIndex(2));
19113ff0d8dSRaphael Isemann }
19213ff0d8dSRaphael Isemann
TEST(StringListTest,SplitIntoLines)19313ff0d8dSRaphael Isemann TEST(StringListTest, SplitIntoLines) {
19413ff0d8dSRaphael Isemann StringList s;
19513ff0d8dSRaphael Isemann s.SplitIntoLines("\nfoo\nbar\n\n");
19613ff0d8dSRaphael Isemann EXPECT_EQ(4U, s.GetSize());
19713ff0d8dSRaphael Isemann EXPECT_STREQ("", s.GetStringAtIndex(0));
19813ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(1));
19913ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(2));
20013ff0d8dSRaphael Isemann EXPECT_STREQ("", s.GetStringAtIndex(3));
20113ff0d8dSRaphael Isemann }
20213ff0d8dSRaphael Isemann
TEST(StringListTest,SplitIntoLinesSingleTrailingCR)20313ff0d8dSRaphael Isemann TEST(StringListTest, SplitIntoLinesSingleTrailingCR) {
20413ff0d8dSRaphael Isemann StringList s;
20513ff0d8dSRaphael Isemann s.SplitIntoLines("\r");
20613ff0d8dSRaphael Isemann EXPECT_EQ(1U, s.GetSize());
20713ff0d8dSRaphael Isemann EXPECT_STREQ("", s.GetStringAtIndex(0));
20813ff0d8dSRaphael Isemann }
20913ff0d8dSRaphael Isemann
TEST(StringListTest,SplitIntoLinesEmpty)21013ff0d8dSRaphael Isemann TEST(StringListTest, SplitIntoLinesEmpty) {
21113ff0d8dSRaphael Isemann StringList s;
21213ff0d8dSRaphael Isemann s.SplitIntoLines("");
21313ff0d8dSRaphael Isemann EXPECT_EQ(0U, s.GetSize());
21413ff0d8dSRaphael Isemann }
21513ff0d8dSRaphael Isemann
TEST(StringListTest,LongestCommonPrefixEmpty)21613ff0d8dSRaphael Isemann TEST(StringListTest, LongestCommonPrefixEmpty) {
21713ff0d8dSRaphael Isemann StringList s;
218175f0930SJonas Devlieghere std::string prefix = s.LongestCommonPrefix();
21913ff0d8dSRaphael Isemann EXPECT_EQ("", prefix);
22013ff0d8dSRaphael Isemann }
22113ff0d8dSRaphael Isemann
TEST(StringListTest,LongestCommonPrefix)22213ff0d8dSRaphael Isemann TEST(StringListTest, LongestCommonPrefix) {
22313ff0d8dSRaphael Isemann StringList s;
22413ff0d8dSRaphael Isemann s.AppendString("foo");
22513ff0d8dSRaphael Isemann s.AppendString("foobar");
22613ff0d8dSRaphael Isemann s.AppendString("foo");
22713ff0d8dSRaphael Isemann s.AppendString("foozar");
22813ff0d8dSRaphael Isemann
229175f0930SJonas Devlieghere std::string prefix = s.LongestCommonPrefix();
23013ff0d8dSRaphael Isemann EXPECT_EQ("foo", prefix);
23113ff0d8dSRaphael Isemann }
23213ff0d8dSRaphael Isemann
TEST(StringListTest,LongestCommonPrefixSingleElement)23313ff0d8dSRaphael Isemann TEST(StringListTest, LongestCommonPrefixSingleElement) {
23413ff0d8dSRaphael Isemann StringList s;
23513ff0d8dSRaphael Isemann s.AppendString("foo");
23613ff0d8dSRaphael Isemann
237175f0930SJonas Devlieghere std::string prefix = s.LongestCommonPrefix();
23813ff0d8dSRaphael Isemann EXPECT_EQ("foo", prefix);
23913ff0d8dSRaphael Isemann }
24013ff0d8dSRaphael Isemann
TEST(StringListTest,LongestCommonPrefixDuplicateElement)24113ff0d8dSRaphael Isemann TEST(StringListTest, LongestCommonPrefixDuplicateElement) {
24213ff0d8dSRaphael Isemann StringList s;
24313ff0d8dSRaphael Isemann s.AppendString("foo");
24413ff0d8dSRaphael Isemann s.AppendString("foo");
24513ff0d8dSRaphael Isemann
246175f0930SJonas Devlieghere std::string prefix = s.LongestCommonPrefix();
24713ff0d8dSRaphael Isemann EXPECT_EQ("foo", prefix);
24813ff0d8dSRaphael Isemann }
24913ff0d8dSRaphael Isemann
TEST(StringListTest,LongestCommonPrefixNoPrefix)25013ff0d8dSRaphael Isemann TEST(StringListTest, LongestCommonPrefixNoPrefix) {
25113ff0d8dSRaphael Isemann StringList s;
25213ff0d8dSRaphael Isemann s.AppendString("foo");
25313ff0d8dSRaphael Isemann s.AppendString("1foobar");
25413ff0d8dSRaphael Isemann s.AppendString("2foo");
25513ff0d8dSRaphael Isemann s.AppendString("3foozar");
25613ff0d8dSRaphael Isemann
257175f0930SJonas Devlieghere std::string prefix = s.LongestCommonPrefix();
25813ff0d8dSRaphael Isemann EXPECT_EQ("", prefix);
25913ff0d8dSRaphael Isemann }
26013ff0d8dSRaphael Isemann
TEST(StringListTest,Clear)26113ff0d8dSRaphael Isemann TEST(StringListTest, Clear) {
26213ff0d8dSRaphael Isemann StringList s;
26313ff0d8dSRaphael Isemann s.Clear();
26413ff0d8dSRaphael Isemann EXPECT_EQ(0U, s.GetSize());
26513ff0d8dSRaphael Isemann
26613ff0d8dSRaphael Isemann s.AppendString("foo");
26713ff0d8dSRaphael Isemann s.Clear();
26813ff0d8dSRaphael Isemann EXPECT_EQ(0U, s.GetSize());
26913ff0d8dSRaphael Isemann
27013ff0d8dSRaphael Isemann s.AppendString("foo");
27113ff0d8dSRaphael Isemann s.AppendString("foo");
27213ff0d8dSRaphael Isemann s.Clear();
27313ff0d8dSRaphael Isemann EXPECT_EQ(0U, s.GetSize());
27413ff0d8dSRaphael Isemann }
27513ff0d8dSRaphael Isemann
TEST(StringListTest,PopBack)27613ff0d8dSRaphael Isemann TEST(StringListTest, PopBack) {
27713ff0d8dSRaphael Isemann StringList s;
27813ff0d8dSRaphael Isemann s.AppendString("foo");
27913ff0d8dSRaphael Isemann s.AppendString("bar");
28013ff0d8dSRaphael Isemann s.AppendString("boo");
28113ff0d8dSRaphael Isemann
28213ff0d8dSRaphael Isemann s.PopBack();
28313ff0d8dSRaphael Isemann EXPECT_EQ(2U, s.GetSize());
28413ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
28513ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(1));
28613ff0d8dSRaphael Isemann
28713ff0d8dSRaphael Isemann s.PopBack();
28813ff0d8dSRaphael Isemann EXPECT_EQ(1U, s.GetSize());
28913ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
29013ff0d8dSRaphael Isemann
29113ff0d8dSRaphael Isemann s.PopBack();
29213ff0d8dSRaphael Isemann EXPECT_EQ(0U, s.GetSize());
29313ff0d8dSRaphael Isemann }
29413ff0d8dSRaphael Isemann
TEST(StringListTest,RemoveBlankLines)29513ff0d8dSRaphael Isemann TEST(StringListTest, RemoveBlankLines) {
29613ff0d8dSRaphael Isemann StringList s;
29713ff0d8dSRaphael Isemann
29813ff0d8dSRaphael Isemann // Nothing to remove yet.
29913ff0d8dSRaphael Isemann s.RemoveBlankLines();
30013ff0d8dSRaphael Isemann EXPECT_EQ(0U, s.GetSize());
30113ff0d8dSRaphael Isemann
30213ff0d8dSRaphael Isemann // Add some lines.
30313ff0d8dSRaphael Isemann s.AppendString("");
30413ff0d8dSRaphael Isemann s.AppendString("");
30513ff0d8dSRaphael Isemann s.AppendString("\t");
30613ff0d8dSRaphael Isemann s.AppendString("");
30713ff0d8dSRaphael Isemann s.AppendString(" ");
30813ff0d8dSRaphael Isemann s.AppendString("");
30913ff0d8dSRaphael Isemann s.AppendString("");
31013ff0d8dSRaphael Isemann s.AppendString("f");
31113ff0d8dSRaphael Isemann s.AppendString("");
31213ff0d8dSRaphael Isemann s.AppendString("");
31313ff0d8dSRaphael Isemann
31413ff0d8dSRaphael Isemann // And remove all the empty ones again.
31513ff0d8dSRaphael Isemann s.RemoveBlankLines();
31613ff0d8dSRaphael Isemann
31713ff0d8dSRaphael Isemann EXPECT_EQ(3U, s.GetSize());
31813ff0d8dSRaphael Isemann EXPECT_STREQ("\t", s.GetStringAtIndex(0));
31913ff0d8dSRaphael Isemann EXPECT_STREQ(" ", s.GetStringAtIndex(1));
32013ff0d8dSRaphael Isemann EXPECT_STREQ("f", s.GetStringAtIndex(2));
32113ff0d8dSRaphael Isemann }
32213ff0d8dSRaphael Isemann
TEST(StringListTest,InsertStringAtIndexStart)32313ff0d8dSRaphael Isemann TEST(StringListTest, InsertStringAtIndexStart) {
32413ff0d8dSRaphael Isemann StringList s;
32513ff0d8dSRaphael Isemann
32613ff0d8dSRaphael Isemann s.InsertStringAtIndex(0, "bar");
32713ff0d8dSRaphael Isemann EXPECT_EQ(1U, s.GetSize());
32813ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(0));
32913ff0d8dSRaphael Isemann
33013ff0d8dSRaphael Isemann s.InsertStringAtIndex(0, "foo");
33113ff0d8dSRaphael Isemann EXPECT_EQ(2U, s.GetSize());
33213ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
33313ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(1));
33413ff0d8dSRaphael Isemann }
33513ff0d8dSRaphael Isemann
TEST(StringListTest,InsertStringAtIndexEnd)33613ff0d8dSRaphael Isemann TEST(StringListTest, InsertStringAtIndexEnd) {
33713ff0d8dSRaphael Isemann StringList s;
33813ff0d8dSRaphael Isemann
33913ff0d8dSRaphael Isemann s.InsertStringAtIndex(0, "foo");
34013ff0d8dSRaphael Isemann EXPECT_EQ(1U, s.GetSize());
34113ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
34213ff0d8dSRaphael Isemann
34313ff0d8dSRaphael Isemann s.InsertStringAtIndex(1, "bar");
34413ff0d8dSRaphael Isemann EXPECT_EQ(2U, s.GetSize());
34513ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
34613ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(1));
34713ff0d8dSRaphael Isemann }
34813ff0d8dSRaphael Isemann
TEST(StringListTest,InsertStringAtIndexOutOfBounds)34913ff0d8dSRaphael Isemann TEST(StringListTest, InsertStringAtIndexOutOfBounds) {
35013ff0d8dSRaphael Isemann StringList s;
35113ff0d8dSRaphael Isemann
35213ff0d8dSRaphael Isemann s.InsertStringAtIndex(1, "foo");
35313ff0d8dSRaphael Isemann EXPECT_EQ(1U, s.GetSize());
35413ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
35513ff0d8dSRaphael Isemann
35613ff0d8dSRaphael Isemann // FIXME: Inserting at an OOB index will always just append to the list. This
35713ff0d8dSRaphael Isemann // seems not very intuitive.
35813ff0d8dSRaphael Isemann s.InsertStringAtIndex(3, "bar");
35913ff0d8dSRaphael Isemann EXPECT_EQ(2U, s.GetSize());
36013ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
36113ff0d8dSRaphael Isemann EXPECT_STREQ("bar", s.GetStringAtIndex(1));
36213ff0d8dSRaphael Isemann }
36313ff0d8dSRaphael Isemann
TEST(StringListTest,InsertStringAtIndexStdString)36413ff0d8dSRaphael Isemann TEST(StringListTest, InsertStringAtIndexStdString) {
36513ff0d8dSRaphael Isemann StringList s;
36613ff0d8dSRaphael Isemann
36713ff0d8dSRaphael Isemann std::string foo = "foo";
36813ff0d8dSRaphael Isemann s.InsertStringAtIndex(0, foo);
36913ff0d8dSRaphael Isemann EXPECT_EQ(1U, s.GetSize());
37013ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
37113ff0d8dSRaphael Isemann }
37213ff0d8dSRaphael Isemann
TEST(StringListTest,InsertStringAtIndexMove)37313ff0d8dSRaphael Isemann TEST(StringListTest, InsertStringAtIndexMove) {
37413ff0d8dSRaphael Isemann StringList s;
37513ff0d8dSRaphael Isemann
37613ff0d8dSRaphael Isemann std::string foo = "foo";
37713ff0d8dSRaphael Isemann s.InsertStringAtIndex(0, std::move(foo));
37813ff0d8dSRaphael Isemann EXPECT_EQ(1U, s.GetSize());
37913ff0d8dSRaphael Isemann EXPECT_STREQ("foo", s.GetStringAtIndex(0));
38013ff0d8dSRaphael Isemann }
38113ff0d8dSRaphael Isemann
TEST(StringListTest,CopyListEmpty)38213ff0d8dSRaphael Isemann TEST(StringListTest, CopyListEmpty) {
38313ff0d8dSRaphael Isemann StringList s;
38413ff0d8dSRaphael Isemann
38513ff0d8dSRaphael Isemann EXPECT_EQ("", s.CopyList());
38613ff0d8dSRaphael Isemann EXPECT_EQ("", s.CopyList("+"));
38713ff0d8dSRaphael Isemann }
38813ff0d8dSRaphael Isemann
TEST(StringListTest,CopyListSingle)38913ff0d8dSRaphael Isemann TEST(StringListTest, CopyListSingle) {
39013ff0d8dSRaphael Isemann StringList s;
39113ff0d8dSRaphael Isemann s.AppendString("ab");
39213ff0d8dSRaphael Isemann
39313ff0d8dSRaphael Isemann EXPECT_EQ("ab", s.CopyList());
39413ff0d8dSRaphael Isemann EXPECT_EQ("-ab", s.CopyList("-"));
39513ff0d8dSRaphael Isemann }
39613ff0d8dSRaphael Isemann
TEST(StringListTest,CopyList)39713ff0d8dSRaphael Isemann TEST(StringListTest, CopyList) {
39813ff0d8dSRaphael Isemann StringList s;
39913ff0d8dSRaphael Isemann s.AppendString("ab");
40013ff0d8dSRaphael Isemann s.AppendString("cd");
40113ff0d8dSRaphael Isemann
40213ff0d8dSRaphael Isemann EXPECT_EQ("ab\ncd", s.CopyList());
40313ff0d8dSRaphael Isemann EXPECT_EQ("-ab\n-cd", s.CopyList("-"));
40413ff0d8dSRaphael Isemann }
40513ff0d8dSRaphael Isemann
TEST(StringListTest,Join)40613ff0d8dSRaphael Isemann TEST(StringListTest, Join) {
40713ff0d8dSRaphael Isemann StringList s;
40813ff0d8dSRaphael Isemann s.AppendString("ab");
40913ff0d8dSRaphael Isemann s.AppendString("cd");
41013ff0d8dSRaphael Isemann
41113ff0d8dSRaphael Isemann StreamString ss;
41213ff0d8dSRaphael Isemann s.Join(" ", ss);
41313ff0d8dSRaphael Isemann
41413ff0d8dSRaphael Isemann EXPECT_EQ("ab cd", ss.GetString());
41513ff0d8dSRaphael Isemann }
41613ff0d8dSRaphael Isemann
TEST(StringListTest,JoinEmpty)41713ff0d8dSRaphael Isemann TEST(StringListTest, JoinEmpty) {
41813ff0d8dSRaphael Isemann StringList s;
41913ff0d8dSRaphael Isemann
42013ff0d8dSRaphael Isemann StreamString ss;
42113ff0d8dSRaphael Isemann s.Join(" ", ss);
42213ff0d8dSRaphael Isemann
42313ff0d8dSRaphael Isemann EXPECT_EQ("", ss.GetString());
42413ff0d8dSRaphael Isemann }
42513ff0d8dSRaphael Isemann
TEST(StringListTest,JoinSingle)42613ff0d8dSRaphael Isemann TEST(StringListTest, JoinSingle) {
42713ff0d8dSRaphael Isemann StringList s;
42813ff0d8dSRaphael Isemann s.AppendString("foo");
42913ff0d8dSRaphael Isemann
43013ff0d8dSRaphael Isemann StreamString ss;
43113ff0d8dSRaphael Isemann s.Join(" ", ss);
43213ff0d8dSRaphael Isemann
43313ff0d8dSRaphael Isemann EXPECT_EQ("foo", ss.GetString());
43413ff0d8dSRaphael Isemann }
43513ff0d8dSRaphael Isemann
TEST(StringListTest,JoinThree)43613ff0d8dSRaphael Isemann TEST(StringListTest, JoinThree) {
43713ff0d8dSRaphael Isemann StringList s;
43813ff0d8dSRaphael Isemann s.AppendString("1");
43913ff0d8dSRaphael Isemann s.AppendString("2");
44013ff0d8dSRaphael Isemann s.AppendString("3");
44113ff0d8dSRaphael Isemann
44213ff0d8dSRaphael Isemann StreamString ss;
44313ff0d8dSRaphael Isemann s.Join(" ", ss);
44413ff0d8dSRaphael Isemann
44513ff0d8dSRaphael Isemann EXPECT_EQ("1 2 3", ss.GetString());
44613ff0d8dSRaphael Isemann }
44713ff0d8dSRaphael Isemann
TEST(StringListTest,JoinNonSpace)44813ff0d8dSRaphael Isemann TEST(StringListTest, JoinNonSpace) {
44913ff0d8dSRaphael Isemann StringList s;
45013ff0d8dSRaphael Isemann s.AppendString("1");
45113ff0d8dSRaphael Isemann s.AppendString("2");
45213ff0d8dSRaphael Isemann s.AppendString("3");
45313ff0d8dSRaphael Isemann
45413ff0d8dSRaphael Isemann StreamString ss;
45513ff0d8dSRaphael Isemann s.Join(".", ss);
45613ff0d8dSRaphael Isemann
45713ff0d8dSRaphael Isemann EXPECT_EQ("1.2.3", ss.GetString());
45813ff0d8dSRaphael Isemann }
45913ff0d8dSRaphael Isemann
TEST(StringListTest,JoinMultiCharSeparator)46013ff0d8dSRaphael Isemann TEST(StringListTest, JoinMultiCharSeparator) {
46113ff0d8dSRaphael Isemann StringList s;
46213ff0d8dSRaphael Isemann s.AppendString("1");
46313ff0d8dSRaphael Isemann s.AppendString("2");
46413ff0d8dSRaphael Isemann s.AppendString("3");
46513ff0d8dSRaphael Isemann
46613ff0d8dSRaphael Isemann StreamString ss;
46713ff0d8dSRaphael Isemann s.Join("--", ss);
46813ff0d8dSRaphael Isemann
46913ff0d8dSRaphael Isemann EXPECT_EQ("1--2--3", ss.GetString());
47013ff0d8dSRaphael Isemann }
47113ff0d8dSRaphael Isemann
TEST(StringListTest,GetMaxStringLengthEqualSize)47213ff0d8dSRaphael Isemann TEST(StringListTest, GetMaxStringLengthEqualSize) {
47313ff0d8dSRaphael Isemann StringList s;
47413ff0d8dSRaphael Isemann s.AppendString("123");
47513ff0d8dSRaphael Isemann s.AppendString("123");
47613ff0d8dSRaphael Isemann EXPECT_EQ(3U, s.GetMaxStringLength());
47713ff0d8dSRaphael Isemann }
47813ff0d8dSRaphael Isemann
TEST(StringListTest,GetMaxStringLengthIncreasingSize)47913ff0d8dSRaphael Isemann TEST(StringListTest, GetMaxStringLengthIncreasingSize) {
48013ff0d8dSRaphael Isemann StringList s;
48113ff0d8dSRaphael Isemann s.AppendString("123");
48213ff0d8dSRaphael Isemann s.AppendString("1234");
48313ff0d8dSRaphael Isemann EXPECT_EQ(4U, s.GetMaxStringLength());
48413ff0d8dSRaphael Isemann }
48513ff0d8dSRaphael Isemann
TEST(StringListTest,GetMaxStringLengthDecreasingSize)48613ff0d8dSRaphael Isemann TEST(StringListTest, GetMaxStringLengthDecreasingSize) {
48713ff0d8dSRaphael Isemann StringList s;
48813ff0d8dSRaphael Isemann s.AppendString("1234");
48913ff0d8dSRaphael Isemann s.AppendString("123");
49013ff0d8dSRaphael Isemann EXPECT_EQ(4U, s.GetMaxStringLength());
49113ff0d8dSRaphael Isemann }
49213ff0d8dSRaphael Isemann
TEST(StringListTest,GetMaxStringLengthMixed)49313ff0d8dSRaphael Isemann TEST(StringListTest, GetMaxStringLengthMixed) {
49413ff0d8dSRaphael Isemann StringList s;
49513ff0d8dSRaphael Isemann s.AppendString("123");
49613ff0d8dSRaphael Isemann s.AppendString("1");
49713ff0d8dSRaphael Isemann s.AppendString("123");
49813ff0d8dSRaphael Isemann s.AppendString("1234");
49913ff0d8dSRaphael Isemann s.AppendString("123");
50013ff0d8dSRaphael Isemann s.AppendString("1");
50113ff0d8dSRaphael Isemann EXPECT_EQ(4U, s.GetMaxStringLength());
50213ff0d8dSRaphael Isemann }
50313ff0d8dSRaphael Isemann
TEST(StringListTest,GetMaxStringLengthEmpty)50413ff0d8dSRaphael Isemann TEST(StringListTest, GetMaxStringLengthEmpty) {
50513ff0d8dSRaphael Isemann StringList s;
50613ff0d8dSRaphael Isemann EXPECT_EQ(0U, s.GetMaxStringLength());
50713ff0d8dSRaphael Isemann }
5084c78b788SRaphael Isemann
TEST(StringListTest,ForRangeEmpty)5094c78b788SRaphael Isemann TEST(StringListTest, ForRangeEmpty) {
5104c78b788SRaphael Isemann StringList s;
5114c78b788SRaphael Isemann for (const std::string &e : s)
5124c78b788SRaphael Isemann FAIL() << "Shouldn't have hit an element in for range" << e;
5134c78b788SRaphael Isemann }
5144c78b788SRaphael Isemann
TEST(StringListTest,ForRange)51521599876SRaphael Isemann TEST(StringListTest, ForRange) {
5164c78b788SRaphael Isemann StringList s;
5174c78b788SRaphael Isemann s.AppendString("a");
5184c78b788SRaphael Isemann s.AppendString("b");
5194c78b788SRaphael Isemann s.AppendString("c");
5204c78b788SRaphael Isemann std::vector<std::string> recorded;
5214c78b788SRaphael Isemann for (const std::string &e : s)
5224c78b788SRaphael Isemann recorded.push_back(e);
5234c78b788SRaphael Isemann EXPECT_THAT(recorded, testing::ElementsAre("a", "b", "c"));
5244c78b788SRaphael Isemann }
525