brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.0 KiB · 08d55a5 Raw
525 lines · cpp
1//===-- StringListTest.cpp ------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "lldb/Utility/StringList.h"10#include "lldb/Utility/StreamString.h"11#include "gmock/gmock.h"12#include "gtest/gtest.h"13 14using namespace lldb_private;15 16TEST(StringListTest, DefaultConstructor) {17  StringList s;18  EXPECT_EQ(0U, s.GetSize());19}20 21TEST(StringListTest, Assignment) {22  StringList orig;23  orig.AppendString("foo");24  orig.AppendString("bar");25 26  StringList s = orig;27 28  ASSERT_EQ(2U, s.GetSize());29  EXPECT_STREQ("foo", s.GetStringAtIndex(0));30  EXPECT_STREQ("bar", s.GetStringAtIndex(1));31 32  ASSERT_EQ(2U, orig.GetSize());33  EXPECT_STREQ("foo", orig.GetStringAtIndex(0));34  EXPECT_STREQ("bar", orig.GetStringAtIndex(1));35}36 37TEST(StringListTest, AppendStringStdString) {38  StringList s;39  s.AppendString("foo");40  ASSERT_EQ(1U, s.GetSize());41  EXPECT_STREQ("foo", s.GetStringAtIndex(0));42 43  s.AppendString("bar");44  ASSERT_EQ(2U, s.GetSize());45  EXPECT_STREQ("foo", s.GetStringAtIndex(0));46  EXPECT_STREQ("bar", s.GetStringAtIndex(1));47}48 49TEST(StringListTest, AppendStringCString) {50  StringList s;51  s.AppendString("foo", strlen("foo"));52  ASSERT_EQ(1U, s.GetSize());53  EXPECT_STREQ("foo", s.GetStringAtIndex(0));54 55  s.AppendString("bar", strlen("bar"));56  ASSERT_EQ(2U, s.GetSize());57  EXPECT_STREQ("foo", s.GetStringAtIndex(0));58  EXPECT_STREQ("bar", s.GetStringAtIndex(1));59}60 61TEST(StringListTest, AppendStringMove) {62  StringList s;63  std::string foo = "foo";64  std::string bar = "bar";65 66  s.AppendString(std::move(foo));67  ASSERT_EQ(1U, s.GetSize());68  EXPECT_STREQ("foo", s.GetStringAtIndex(0));69 70  s.AppendString(std::move(bar));71  ASSERT_EQ(2U, s.GetSize());72  EXPECT_STREQ("foo", s.GetStringAtIndex(0));73  EXPECT_STREQ("bar", s.GetStringAtIndex(1));74}75 76TEST(StringListTest, ShiftStdString) {77  StringList s;78  std::string foo = "foo";79  std::string bar = "bar";80 81  s << foo;82  ASSERT_EQ(1U, s.GetSize());83  EXPECT_STREQ("foo", s.GetStringAtIndex(0));84 85  s << bar;86  ASSERT_EQ(2U, s.GetSize());87  EXPECT_STREQ("foo", s.GetStringAtIndex(0));88  EXPECT_STREQ("bar", s.GetStringAtIndex(1));89}90 91TEST(StringListTest, ShiftCString) {92  StringList s;93  s << "foo";94  ASSERT_EQ(1U, s.GetSize());95  EXPECT_STREQ("foo", s.GetStringAtIndex(0));96 97  s << "bar";98  ASSERT_EQ(2U, s.GetSize());99  EXPECT_STREQ("foo", s.GetStringAtIndex(0));100  EXPECT_STREQ("bar", s.GetStringAtIndex(1));101}102 103TEST(StringListTest, ShiftMove) {104  StringList s;105  std::string foo = "foo";106  std::string bar = "bar";107 108  s << std::move(foo);109  ASSERT_EQ(1U, s.GetSize());110  EXPECT_STREQ("foo", s.GetStringAtIndex(0));111 112  s << std::move(bar);113  ASSERT_EQ(2U, s.GetSize());114  EXPECT_STREQ("foo", s.GetStringAtIndex(0));115  EXPECT_STREQ("bar", s.GetStringAtIndex(1));116}117 118TEST(StringListTest, AppendListCStringArrayEmpty) {119  StringList s;120  s.AppendList(nullptr, 0);121  EXPECT_EQ(0U, s.GetSize());122}123 124TEST(StringListTest, AppendListCStringArray) {125  StringList s;126  const char *items[3] = {"foo", "", "bar"};127  s.AppendList(items, 3);128 129  EXPECT_EQ(3U, s.GetSize());130  EXPECT_STREQ("foo", s.GetStringAtIndex(0));131  EXPECT_STREQ("", s.GetStringAtIndex(1));132  EXPECT_STREQ("bar", s.GetStringAtIndex(2));133}134 135TEST(StringListTest, AppendList) {136  StringList other;137  other.AppendString("foo");138  other.AppendString("");139  other.AppendString("bar");140 141  StringList empty;142 143  StringList s;144  s.AppendList(other);145 146  EXPECT_EQ(3U, s.GetSize());147  EXPECT_STREQ("foo", s.GetStringAtIndex(0));148  EXPECT_STREQ("", s.GetStringAtIndex(1));149  EXPECT_STREQ("bar", s.GetStringAtIndex(2));150 151  EXPECT_EQ(3U, other.GetSize());152  EXPECT_STREQ("foo", other.GetStringAtIndex(0));153  EXPECT_STREQ("", other.GetStringAtIndex(1));154  EXPECT_STREQ("bar", other.GetStringAtIndex(2));155 156  s.AppendList(empty);157  s.AppendList(other);158  EXPECT_EQ(6U, s.GetSize());159  EXPECT_STREQ("foo", s.GetStringAtIndex(0));160  EXPECT_STREQ("", s.GetStringAtIndex(1));161  EXPECT_STREQ("bar", s.GetStringAtIndex(2));162  EXPECT_STREQ("foo", s.GetStringAtIndex(3));163  EXPECT_STREQ("", s.GetStringAtIndex(4));164  EXPECT_STREQ("bar", s.GetStringAtIndex(5));165 166  EXPECT_EQ(3U, other.GetSize());167  EXPECT_STREQ("foo", other.GetStringAtIndex(0));168  EXPECT_STREQ("", other.GetStringAtIndex(1));169  EXPECT_STREQ("bar", other.GetStringAtIndex(2));170}171 172TEST(StringListTest, GetSize) {173  StringList s;174  s.AppendString("foo");175  EXPECT_EQ(1U, s.GetSize());176 177  s.AppendString("foo");178  EXPECT_EQ(2U, s.GetSize());179 180  s.AppendString("foobar");181  EXPECT_EQ(3U, s.GetSize());182}183 184TEST(StringListTest, SetSize) {185  StringList s;186  s.SetSize(3);187  EXPECT_EQ(3U, s.GetSize());188  EXPECT_STREQ("", s.GetStringAtIndex(0));189  EXPECT_STREQ("", s.GetStringAtIndex(1));190  EXPECT_STREQ("", s.GetStringAtIndex(2));191}192 193TEST(StringListTest, SplitIntoLines) {194  StringList s;195  s.SplitIntoLines("\nfoo\nbar\n\n");196  EXPECT_EQ(4U, s.GetSize());197  EXPECT_STREQ("", s.GetStringAtIndex(0));198  EXPECT_STREQ("foo", s.GetStringAtIndex(1));199  EXPECT_STREQ("bar", s.GetStringAtIndex(2));200  EXPECT_STREQ("", s.GetStringAtIndex(3));201}202 203TEST(StringListTest, SplitIntoLinesSingleTrailingCR) {204  StringList s;205  s.SplitIntoLines("\r");206  EXPECT_EQ(1U, s.GetSize());207  EXPECT_STREQ("", s.GetStringAtIndex(0));208}209 210TEST(StringListTest, SplitIntoLinesEmpty) {211  StringList s;212  s.SplitIntoLines("");213  EXPECT_EQ(0U, s.GetSize());214}215 216TEST(StringListTest, LongestCommonPrefixEmpty) {217  StringList s;218  std::string prefix = s.LongestCommonPrefix();219  EXPECT_EQ("", prefix);220}221 222TEST(StringListTest, LongestCommonPrefix) {223  StringList s;224  s.AppendString("foo");225  s.AppendString("foobar");226  s.AppendString("foo");227  s.AppendString("foozar");228 229  std::string prefix = s.LongestCommonPrefix();230  EXPECT_EQ("foo", prefix);231}232 233TEST(StringListTest, LongestCommonPrefixSingleElement) {234  StringList s;235  s.AppendString("foo");236 237  std::string prefix = s.LongestCommonPrefix();238  EXPECT_EQ("foo", prefix);239}240 241TEST(StringListTest, LongestCommonPrefixDuplicateElement) {242  StringList s;243  s.AppendString("foo");244  s.AppendString("foo");245 246  std::string prefix = s.LongestCommonPrefix();247  EXPECT_EQ("foo", prefix);248}249 250TEST(StringListTest, LongestCommonPrefixNoPrefix) {251  StringList s;252  s.AppendString("foo");253  s.AppendString("1foobar");254  s.AppendString("2foo");255  s.AppendString("3foozar");256 257  std::string prefix = s.LongestCommonPrefix();258  EXPECT_EQ("", prefix);259}260 261TEST(StringListTest, Clear) {262  StringList s;263  s.Clear();264  EXPECT_EQ(0U, s.GetSize());265 266  s.AppendString("foo");267  s.Clear();268  EXPECT_EQ(0U, s.GetSize());269 270  s.AppendString("foo");271  s.AppendString("foo");272  s.Clear();273  EXPECT_EQ(0U, s.GetSize());274}275 276TEST(StringListTest, PopBack) {277  StringList s;278  s.AppendString("foo");279  s.AppendString("bar");280  s.AppendString("boo");281 282  s.PopBack();283  EXPECT_EQ(2U, s.GetSize());284  EXPECT_STREQ("foo", s.GetStringAtIndex(0));285  EXPECT_STREQ("bar", s.GetStringAtIndex(1));286 287  s.PopBack();288  EXPECT_EQ(1U, s.GetSize());289  EXPECT_STREQ("foo", s.GetStringAtIndex(0));290 291  s.PopBack();292  EXPECT_EQ(0U, s.GetSize());293}294 295TEST(StringListTest, RemoveBlankLines) {296  StringList s;297 298  // Nothing to remove yet.299  s.RemoveBlankLines();300  EXPECT_EQ(0U, s.GetSize());301 302  // Add some lines.303  s.AppendString("");304  s.AppendString("");305  s.AppendString("\t");306  s.AppendString("");307  s.AppendString(" ");308  s.AppendString("");309  s.AppendString("");310  s.AppendString("f");311  s.AppendString("");312  s.AppendString("");313 314  // And remove all the empty ones again.315  s.RemoveBlankLines();316 317  EXPECT_EQ(3U, s.GetSize());318  EXPECT_STREQ("\t", s.GetStringAtIndex(0));319  EXPECT_STREQ(" ", s.GetStringAtIndex(1));320  EXPECT_STREQ("f", s.GetStringAtIndex(2));321}322 323TEST(StringListTest, InsertStringAtIndexStart) {324  StringList s;325 326  s.InsertStringAtIndex(0, "bar");327  EXPECT_EQ(1U, s.GetSize());328  EXPECT_STREQ("bar", s.GetStringAtIndex(0));329 330  s.InsertStringAtIndex(0, "foo");331  EXPECT_EQ(2U, s.GetSize());332  EXPECT_STREQ("foo", s.GetStringAtIndex(0));333  EXPECT_STREQ("bar", s.GetStringAtIndex(1));334}335 336TEST(StringListTest, InsertStringAtIndexEnd) {337  StringList s;338 339  s.InsertStringAtIndex(0, "foo");340  EXPECT_EQ(1U, s.GetSize());341  EXPECT_STREQ("foo", s.GetStringAtIndex(0));342 343  s.InsertStringAtIndex(1, "bar");344  EXPECT_EQ(2U, s.GetSize());345  EXPECT_STREQ("foo", s.GetStringAtIndex(0));346  EXPECT_STREQ("bar", s.GetStringAtIndex(1));347}348 349TEST(StringListTest, InsertStringAtIndexOutOfBounds) {350  StringList s;351 352  s.InsertStringAtIndex(1, "foo");353  EXPECT_EQ(1U, s.GetSize());354  EXPECT_STREQ("foo", s.GetStringAtIndex(0));355 356  // FIXME: Inserting at an OOB index will always just append to the list. This357  // seems not very intuitive.358  s.InsertStringAtIndex(3, "bar");359  EXPECT_EQ(2U, s.GetSize());360  EXPECT_STREQ("foo", s.GetStringAtIndex(0));361  EXPECT_STREQ("bar", s.GetStringAtIndex(1));362}363 364TEST(StringListTest, InsertStringAtIndexStdString) {365  StringList s;366 367  std::string foo = "foo";368  s.InsertStringAtIndex(0, foo);369  EXPECT_EQ(1U, s.GetSize());370  EXPECT_STREQ("foo", s.GetStringAtIndex(0));371}372 373TEST(StringListTest, InsertStringAtIndexMove) {374  StringList s;375 376  std::string foo = "foo";377  s.InsertStringAtIndex(0, std::move(foo));378  EXPECT_EQ(1U, s.GetSize());379  EXPECT_STREQ("foo", s.GetStringAtIndex(0));380}381 382TEST(StringListTest, CopyListEmpty) {383  StringList s;384 385  EXPECT_EQ("", s.CopyList());386  EXPECT_EQ("", s.CopyList("+"));387}388 389TEST(StringListTest, CopyListSingle) {390  StringList s;391  s.AppendString("ab");392 393  EXPECT_EQ("ab", s.CopyList());394  EXPECT_EQ("-ab", s.CopyList("-"));395}396 397TEST(StringListTest, CopyList) {398  StringList s;399  s.AppendString("ab");400  s.AppendString("cd");401 402  EXPECT_EQ("ab\ncd", s.CopyList());403  EXPECT_EQ("-ab\n-cd", s.CopyList("-"));404}405 406TEST(StringListTest, Join) {407  StringList s;408  s.AppendString("ab");409  s.AppendString("cd");410 411  StreamString ss;412  s.Join(" ", ss);413 414  EXPECT_EQ("ab cd", ss.GetString());415}416 417TEST(StringListTest, JoinEmpty) {418  StringList s;419 420  StreamString ss;421  s.Join(" ", ss);422 423  EXPECT_EQ("", ss.GetString());424}425 426TEST(StringListTest, JoinSingle) {427  StringList s;428  s.AppendString("foo");429 430  StreamString ss;431  s.Join(" ", ss);432 433  EXPECT_EQ("foo", ss.GetString());434}435 436TEST(StringListTest, JoinThree) {437  StringList s;438  s.AppendString("1");439  s.AppendString("2");440  s.AppendString("3");441 442  StreamString ss;443  s.Join(" ", ss);444 445  EXPECT_EQ("1 2 3", ss.GetString());446}447 448TEST(StringListTest, JoinNonSpace) {449  StringList s;450  s.AppendString("1");451  s.AppendString("2");452  s.AppendString("3");453 454  StreamString ss;455  s.Join(".", ss);456 457  EXPECT_EQ("1.2.3", ss.GetString());458}459 460TEST(StringListTest, JoinMultiCharSeparator) {461  StringList s;462  s.AppendString("1");463  s.AppendString("2");464  s.AppendString("3");465 466  StreamString ss;467  s.Join("--", ss);468 469  EXPECT_EQ("1--2--3", ss.GetString());470}471 472TEST(StringListTest, GetMaxStringLengthEqualSize) {473  StringList s;474  s.AppendString("123");475  s.AppendString("123");476  EXPECT_EQ(3U, s.GetMaxStringLength());477}478 479TEST(StringListTest, GetMaxStringLengthIncreasingSize) {480  StringList s;481  s.AppendString("123");482  s.AppendString("1234");483  EXPECT_EQ(4U, s.GetMaxStringLength());484}485 486TEST(StringListTest, GetMaxStringLengthDecreasingSize) {487  StringList s;488  s.AppendString("1234");489  s.AppendString("123");490  EXPECT_EQ(4U, s.GetMaxStringLength());491}492 493TEST(StringListTest, GetMaxStringLengthMixed) {494  StringList s;495  s.AppendString("123");496  s.AppendString("1");497  s.AppendString("123");498  s.AppendString("1234");499  s.AppendString("123");500  s.AppendString("1");501  EXPECT_EQ(4U, s.GetMaxStringLength());502}503 504TEST(StringListTest, GetMaxStringLengthEmpty) {505  StringList s;506  EXPECT_EQ(0U, s.GetMaxStringLength());507}508 509TEST(StringListTest, ForRangeEmpty) {510  StringList s;511  for (const std::string &e : s)512    FAIL() << "Shouldn't have hit an element in for range" << e;513}514 515TEST(StringListTest, ForRange) {516  StringList s;517  s.AppendString("a");518  s.AppendString("b");519  s.AppendString("c");520  std::vector<std::string> recorded;521  for (const std::string &e : s)522    recorded.push_back(e);523  EXPECT_THAT(recorded, testing::ElementsAre("a", "b", "c"));524}525