summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lldb/unittests/Utility/StringListTest.cpp
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
committerpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
commit061da546b983eb767bad15e67af1174fb0bcf31c (patch)
tree83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/unittests/Utility/StringListTest.cpp
parentImport LLVM 10.0.0 release including clang, lld and lldb. (diff)
downloadwireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.tar.xz
wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.zip
Import LLVM 10.0.0 release including clang, lld and lldb.
ok hackroom tested by plenty
Diffstat (limited to 'gnu/llvm/lldb/unittests/Utility/StringListTest.cpp')
-rw-r--r--gnu/llvm/lldb/unittests/Utility/StringListTest.cpp524
1 files changed, 524 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/unittests/Utility/StringListTest.cpp b/gnu/llvm/lldb/unittests/Utility/StringListTest.cpp
new file mode 100644
index 00000000000..926f75fb4f3
--- /dev/null
+++ b/gnu/llvm/lldb/unittests/Utility/StringListTest.cpp
@@ -0,0 +1,524 @@
+//===-- StringListTest.cpp ---------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/Utility/StringList.h"
+#include "lldb/Utility/StreamString.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+
+using namespace lldb_private;
+
+TEST(StringListTest, DefaultConstructor) {
+ StringList s;
+ EXPECT_EQ(0U, s.GetSize());
+}
+
+TEST(StringListTest, Assignment) {
+ StringList orig;
+ orig.AppendString("foo");
+ orig.AppendString("bar");
+
+ StringList s = orig;
+
+ ASSERT_EQ(2U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+ EXPECT_STREQ("bar", s.GetStringAtIndex(1));
+
+ ASSERT_EQ(2U, orig.GetSize());
+ EXPECT_STREQ("foo", orig.GetStringAtIndex(0));
+ EXPECT_STREQ("bar", orig.GetStringAtIndex(1));
+}
+
+TEST(StringListTest, AppendStringStdString) {
+ StringList s;
+ s.AppendString("foo");
+ ASSERT_EQ(1U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+
+ s.AppendString("bar");
+ ASSERT_EQ(2U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+ EXPECT_STREQ("bar", s.GetStringAtIndex(1));
+}
+
+TEST(StringListTest, AppendStringCString) {
+ StringList s;
+ s.AppendString("foo", strlen("foo"));
+ ASSERT_EQ(1U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+
+ s.AppendString("bar", strlen("bar"));
+ ASSERT_EQ(2U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+ EXPECT_STREQ("bar", s.GetStringAtIndex(1));
+}
+
+TEST(StringListTest, AppendStringMove) {
+ StringList s;
+ std::string foo = "foo";
+ std::string bar = "bar";
+
+ s.AppendString(std::move(foo));
+ ASSERT_EQ(1U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+
+ s.AppendString(std::move(bar));
+ ASSERT_EQ(2U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+ EXPECT_STREQ("bar", s.GetStringAtIndex(1));
+}
+
+TEST(StringListTest, ShiftStdString) {
+ StringList s;
+ std::string foo = "foo";
+ std::string bar = "bar";
+
+ s << foo;
+ ASSERT_EQ(1U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+
+ s << bar;
+ ASSERT_EQ(2U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+ EXPECT_STREQ("bar", s.GetStringAtIndex(1));
+}
+
+TEST(StringListTest, ShiftCString) {
+ StringList s;
+ s << "foo";
+ ASSERT_EQ(1U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+
+ s << "bar";
+ ASSERT_EQ(2U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+ EXPECT_STREQ("bar", s.GetStringAtIndex(1));
+}
+
+TEST(StringListTest, ShiftMove) {
+ StringList s;
+ std::string foo = "foo";
+ std::string bar = "bar";
+
+ s << std::move(foo);
+ ASSERT_EQ(1U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+
+ s << std::move(bar);
+ ASSERT_EQ(2U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+ EXPECT_STREQ("bar", s.GetStringAtIndex(1));
+}
+
+TEST(StringListTest, AppendListCStringArrayEmpty) {
+ StringList s;
+ s.AppendList(nullptr, 0);
+ EXPECT_EQ(0U, s.GetSize());
+}
+
+TEST(StringListTest, AppendListCStringArray) {
+ StringList s;
+ const char *items[3] = {"foo", "", "bar"};
+ s.AppendList(items, 3);
+
+ EXPECT_EQ(3U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+ EXPECT_STREQ("", s.GetStringAtIndex(1));
+ EXPECT_STREQ("bar", s.GetStringAtIndex(2));
+}
+
+TEST(StringListTest, AppendList) {
+ StringList other;
+ other.AppendString("foo");
+ other.AppendString("");
+ other.AppendString("bar");
+
+ StringList empty;
+
+ StringList s;
+ s.AppendList(other);
+
+ EXPECT_EQ(3U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+ EXPECT_STREQ("", s.GetStringAtIndex(1));
+ EXPECT_STREQ("bar", s.GetStringAtIndex(2));
+
+ EXPECT_EQ(3U, other.GetSize());
+ EXPECT_STREQ("foo", other.GetStringAtIndex(0));
+ EXPECT_STREQ("", other.GetStringAtIndex(1));
+ EXPECT_STREQ("bar", other.GetStringAtIndex(2));
+
+ s.AppendList(empty);
+ s.AppendList(other);
+ EXPECT_EQ(6U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+ EXPECT_STREQ("", s.GetStringAtIndex(1));
+ EXPECT_STREQ("bar", s.GetStringAtIndex(2));
+ EXPECT_STREQ("foo", s.GetStringAtIndex(3));
+ EXPECT_STREQ("", s.GetStringAtIndex(4));
+ EXPECT_STREQ("bar", s.GetStringAtIndex(5));
+
+ EXPECT_EQ(3U, other.GetSize());
+ EXPECT_STREQ("foo", other.GetStringAtIndex(0));
+ EXPECT_STREQ("", other.GetStringAtIndex(1));
+ EXPECT_STREQ("bar", other.GetStringAtIndex(2));
+}
+
+TEST(StringListTest, GetSize) {
+ StringList s;
+ s.AppendString("foo");
+ EXPECT_EQ(1U, s.GetSize());
+
+ s.AppendString("foo");
+ EXPECT_EQ(2U, s.GetSize());
+
+ s.AppendString("foobar");
+ EXPECT_EQ(3U, s.GetSize());
+}
+
+TEST(StringListTest, SetSize) {
+ StringList s;
+ s.SetSize(3);
+ EXPECT_EQ(3U, s.GetSize());
+ EXPECT_STREQ("", s.GetStringAtIndex(0));
+ EXPECT_STREQ("", s.GetStringAtIndex(1));
+ EXPECT_STREQ("", s.GetStringAtIndex(2));
+}
+
+TEST(StringListTest, SplitIntoLines) {
+ StringList s;
+ s.SplitIntoLines("\nfoo\nbar\n\n");
+ EXPECT_EQ(4U, s.GetSize());
+ EXPECT_STREQ("", s.GetStringAtIndex(0));
+ EXPECT_STREQ("foo", s.GetStringAtIndex(1));
+ EXPECT_STREQ("bar", s.GetStringAtIndex(2));
+ EXPECT_STREQ("", s.GetStringAtIndex(3));
+}
+
+TEST(StringListTest, SplitIntoLinesSingleTrailingCR) {
+ StringList s;
+ s.SplitIntoLines("\r");
+ EXPECT_EQ(1U, s.GetSize());
+ EXPECT_STREQ("", s.GetStringAtIndex(0));
+}
+
+TEST(StringListTest, SplitIntoLinesEmpty) {
+ StringList s;
+ s.SplitIntoLines("");
+ EXPECT_EQ(0U, s.GetSize());
+}
+
+TEST(StringListTest, LongestCommonPrefixEmpty) {
+ StringList s;
+ std::string prefix = s.LongestCommonPrefix();
+ EXPECT_EQ("", prefix);
+}
+
+TEST(StringListTest, LongestCommonPrefix) {
+ StringList s;
+ s.AppendString("foo");
+ s.AppendString("foobar");
+ s.AppendString("foo");
+ s.AppendString("foozar");
+
+ std::string prefix = s.LongestCommonPrefix();
+ EXPECT_EQ("foo", prefix);
+}
+
+TEST(StringListTest, LongestCommonPrefixSingleElement) {
+ StringList s;
+ s.AppendString("foo");
+
+ std::string prefix = s.LongestCommonPrefix();
+ EXPECT_EQ("foo", prefix);
+}
+
+TEST(StringListTest, LongestCommonPrefixDuplicateElement) {
+ StringList s;
+ s.AppendString("foo");
+ s.AppendString("foo");
+
+ std::string prefix = s.LongestCommonPrefix();
+ EXPECT_EQ("foo", prefix);
+}
+
+TEST(StringListTest, LongestCommonPrefixNoPrefix) {
+ StringList s;
+ s.AppendString("foo");
+ s.AppendString("1foobar");
+ s.AppendString("2foo");
+ s.AppendString("3foozar");
+
+ std::string prefix = s.LongestCommonPrefix();
+ EXPECT_EQ("", prefix);
+}
+
+TEST(StringListTest, Clear) {
+ StringList s;
+ s.Clear();
+ EXPECT_EQ(0U, s.GetSize());
+
+ s.AppendString("foo");
+ s.Clear();
+ EXPECT_EQ(0U, s.GetSize());
+
+ s.AppendString("foo");
+ s.AppendString("foo");
+ s.Clear();
+ EXPECT_EQ(0U, s.GetSize());
+}
+
+TEST(StringListTest, PopBack) {
+ StringList s;
+ s.AppendString("foo");
+ s.AppendString("bar");
+ s.AppendString("boo");
+
+ s.PopBack();
+ EXPECT_EQ(2U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+ EXPECT_STREQ("bar", s.GetStringAtIndex(1));
+
+ s.PopBack();
+ EXPECT_EQ(1U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+
+ s.PopBack();
+ EXPECT_EQ(0U, s.GetSize());
+}
+
+TEST(StringListTest, RemoveBlankLines) {
+ StringList s;
+
+ // Nothing to remove yet.
+ s.RemoveBlankLines();
+ EXPECT_EQ(0U, s.GetSize());
+
+ // Add some lines.
+ s.AppendString("");
+ s.AppendString("");
+ s.AppendString("\t");
+ s.AppendString("");
+ s.AppendString(" ");
+ s.AppendString("");
+ s.AppendString("");
+ s.AppendString("f");
+ s.AppendString("");
+ s.AppendString("");
+
+ // And remove all the empty ones again.
+ s.RemoveBlankLines();
+
+ EXPECT_EQ(3U, s.GetSize());
+ EXPECT_STREQ("\t", s.GetStringAtIndex(0));
+ EXPECT_STREQ(" ", s.GetStringAtIndex(1));
+ EXPECT_STREQ("f", s.GetStringAtIndex(2));
+}
+
+TEST(StringListTest, InsertStringAtIndexStart) {
+ StringList s;
+
+ s.InsertStringAtIndex(0, "bar");
+ EXPECT_EQ(1U, s.GetSize());
+ EXPECT_STREQ("bar", s.GetStringAtIndex(0));
+
+ s.InsertStringAtIndex(0, "foo");
+ EXPECT_EQ(2U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+ EXPECT_STREQ("bar", s.GetStringAtIndex(1));
+}
+
+TEST(StringListTest, InsertStringAtIndexEnd) {
+ StringList s;
+
+ s.InsertStringAtIndex(0, "foo");
+ EXPECT_EQ(1U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+
+ s.InsertStringAtIndex(1, "bar");
+ EXPECT_EQ(2U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+ EXPECT_STREQ("bar", s.GetStringAtIndex(1));
+}
+
+TEST(StringListTest, InsertStringAtIndexOutOfBounds) {
+ StringList s;
+
+ s.InsertStringAtIndex(1, "foo");
+ EXPECT_EQ(1U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+
+ // FIXME: Inserting at an OOB index will always just append to the list. This
+ // seems not very intuitive.
+ s.InsertStringAtIndex(3, "bar");
+ EXPECT_EQ(2U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+ EXPECT_STREQ("bar", s.GetStringAtIndex(1));
+}
+
+TEST(StringListTest, InsertStringAtIndexStdString) {
+ StringList s;
+
+ std::string foo = "foo";
+ s.InsertStringAtIndex(0, foo);
+ EXPECT_EQ(1U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+}
+
+TEST(StringListTest, InsertStringAtIndexMove) {
+ StringList s;
+
+ std::string foo = "foo";
+ s.InsertStringAtIndex(0, std::move(foo));
+ EXPECT_EQ(1U, s.GetSize());
+ EXPECT_STREQ("foo", s.GetStringAtIndex(0));
+}
+
+TEST(StringListTest, CopyListEmpty) {
+ StringList s;
+
+ EXPECT_EQ("", s.CopyList());
+ EXPECT_EQ("", s.CopyList("+"));
+}
+
+TEST(StringListTest, CopyListSingle) {
+ StringList s;
+ s.AppendString("ab");
+
+ EXPECT_EQ("ab", s.CopyList());
+ EXPECT_EQ("-ab", s.CopyList("-"));
+}
+
+TEST(StringListTest, CopyList) {
+ StringList s;
+ s.AppendString("ab");
+ s.AppendString("cd");
+
+ EXPECT_EQ("ab\ncd", s.CopyList());
+ EXPECT_EQ("-ab\n-cd", s.CopyList("-"));
+}
+
+TEST(StringListTest, Join) {
+ StringList s;
+ s.AppendString("ab");
+ s.AppendString("cd");
+
+ StreamString ss;
+ s.Join(" ", ss);
+
+ EXPECT_EQ("ab cd", ss.GetString());
+}
+
+TEST(StringListTest, JoinEmpty) {
+ StringList s;
+
+ StreamString ss;
+ s.Join(" ", ss);
+
+ EXPECT_EQ("", ss.GetString());
+}
+
+TEST(StringListTest, JoinSingle) {
+ StringList s;
+ s.AppendString("foo");
+
+ StreamString ss;
+ s.Join(" ", ss);
+
+ EXPECT_EQ("foo", ss.GetString());
+}
+
+TEST(StringListTest, JoinThree) {
+ StringList s;
+ s.AppendString("1");
+ s.AppendString("2");
+ s.AppendString("3");
+
+ StreamString ss;
+ s.Join(" ", ss);
+
+ EXPECT_EQ("1 2 3", ss.GetString());
+}
+
+TEST(StringListTest, JoinNonSpace) {
+ StringList s;
+ s.AppendString("1");
+ s.AppendString("2");
+ s.AppendString("3");
+
+ StreamString ss;
+ s.Join(".", ss);
+
+ EXPECT_EQ("1.2.3", ss.GetString());
+}
+
+TEST(StringListTest, JoinMultiCharSeparator) {
+ StringList s;
+ s.AppendString("1");
+ s.AppendString("2");
+ s.AppendString("3");
+
+ StreamString ss;
+ s.Join("--", ss);
+
+ EXPECT_EQ("1--2--3", ss.GetString());
+}
+
+TEST(StringListTest, GetMaxStringLengthEqualSize) {
+ StringList s;
+ s.AppendString("123");
+ s.AppendString("123");
+ EXPECT_EQ(3U, s.GetMaxStringLength());
+}
+
+TEST(StringListTest, GetMaxStringLengthIncreasingSize) {
+ StringList s;
+ s.AppendString("123");
+ s.AppendString("1234");
+ EXPECT_EQ(4U, s.GetMaxStringLength());
+}
+
+TEST(StringListTest, GetMaxStringLengthDecreasingSize) {
+ StringList s;
+ s.AppendString("1234");
+ s.AppendString("123");
+ EXPECT_EQ(4U, s.GetMaxStringLength());
+}
+
+TEST(StringListTest, GetMaxStringLengthMixed) {
+ StringList s;
+ s.AppendString("123");
+ s.AppendString("1");
+ s.AppendString("123");
+ s.AppendString("1234");
+ s.AppendString("123");
+ s.AppendString("1");
+ EXPECT_EQ(4U, s.GetMaxStringLength());
+}
+
+TEST(StringListTest, GetMaxStringLengthEmpty) {
+ StringList s;
+ EXPECT_EQ(0U, s.GetMaxStringLength());
+}
+
+TEST(StringListTest, ForRangeEmpty) {
+ StringList s;
+ for (const std::string &e : s)
+ FAIL() << "Shouldn't have hit an element in for range" << e;
+}
+
+TEST(StringListTest, ForRange) {
+ StringList s;
+ s.AppendString("a");
+ s.AppendString("b");
+ s.AppendString("c");
+ std::vector<std::string> recorded;
+ for (const std::string &e : s)
+ recorded.push_back(e);
+ EXPECT_THAT(recorded, testing::ElementsAre("a", "b", "c"));
+}