From 307b7738e01fd7dda0dc12d60f44d86ccb36a9ab Mon Sep 17 00:00:00 2001 From: Frank Ueberschar Date: Wed, 26 Jun 2019 17:45:52 +0200 Subject: [PATCH] lib: added another constructor to BStringList - splits a string at substrings - added a unit test --- core/src/lib/bstringlist.cc | 16 ++++++++++++++++ core/src/lib/bstringlist.h | 3 ++- core/src/tests/CMakeLists.txt | 4 ---- core/src/tests/lib_tests.cc | 13 +++++++++++++ 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/core/src/lib/bstringlist.cc b/core/src/lib/bstringlist.cc index 8722a427b56..907c641830f 100644 --- a/core/src/lib/bstringlist.cc +++ b/core/src/lib/bstringlist.cc @@ -27,6 +27,22 @@ BStringList::BStringList() : std::vector() { return; } +BStringList::BStringList(const std::string& string_to_split, + std::string string_separator) + : std::vector() +{ + std::size_t find_pos = 0; + std::size_t start_pos = 0; + + do { + find_pos = string_to_split.find(string_separator, start_pos); + std::string temp; + temp.assign(string_to_split, start_pos, find_pos - start_pos); + push_back(temp); + start_pos = find_pos + string_separator.size(); + } while (find_pos != std::string::npos); +} + BStringList::BStringList(const std::string& string_to_split, char separator) : std::vector() { diff --git a/core/src/lib/bstringlist.h b/core/src/lib/bstringlist.h index df2e4e629f7..1e59470fb64 100644 --- a/core/src/lib/bstringlist.h +++ b/core/src/lib/bstringlist.h @@ -27,7 +27,8 @@ class BStringList : public std::vector { public: BStringList(); - BStringList(const std::string& string_to_convert, char separator); + BStringList(const std::string& string_to_split, char separator); + BStringList(const std::string& string_to_split, std::string string_separator); BStringList& operator=(const BStringList& rhs); BStringList(const BStringList& other); BStringList& operator<<(const std::string& rhs); diff --git a/core/src/tests/CMakeLists.txt b/core/src/tests/CMakeLists.txt index 142d1e34516..727938d57a3 100644 --- a/core/src/tests/CMakeLists.txt +++ b/core/src/tests/CMakeLists.txt @@ -287,10 +287,6 @@ IF(HAVE_EXECINFO_H AND HAVE_BACKTRACE AND HAVE_BACKTRACE_SYMBOLS) ${GTEST_MAIN_LIBRARIES} ) - add_test(NAME test_backtrace - COMMAND test_backtrace - ) - gtest_discover_tests(test_backtrace TEST_PREFIX gtest:) ENDIF() diff --git a/core/src/tests/lib_tests.cc b/core/src/tests/lib_tests.cc index 61c6a0b184b..f76cef33ecd 100644 --- a/core/src/tests/lib_tests.cc +++ b/core/src/tests/lib_tests.cc @@ -96,6 +96,19 @@ TEST(BStringList, SplitStringTest) EXPECT_STREQ("String", list1.front().c_str()); } +TEST(BStringList, SplitStringTestStringSeparator) +{ + std::string test{"Test::123::String::::"}; + BStringList list1(test, "::"); + EXPECT_EQ(5, list1.size()); + + EXPECT_STREQ("Test", list1.front().c_str()); + list1.erase(list1.begin()); + EXPECT_STREQ("123", list1.front().c_str()); + list1.erase(list1.begin()); + EXPECT_STREQ("String", list1.front().c_str()); +} + TEST(BNet, ReadoutCommandIdFromStringTest) { bool ok;