From a25f7264b6a3e66687df4cd9850dd7d3bb1243a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Thu, 22 Mar 2018 21:26:07 +0100 Subject: [PATCH] BString: fix Split() for multiple characters separators... as suggested by Janus in #14045. Thanks! * add a unit test for BString::Split(). --- src/kits/support/String.cpp | 2 +- src/tests/kits/support/Jamfile | 1 + .../kits/support/bstring/StringSplitTest.cpp | 60 +++++++++++++++++++ .../kits/support/bstring/StringSplitTest.h | 22 +++++++ src/tests/kits/support/bstring/StringTest.cpp | 2 + 5 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 src/tests/kits/support/bstring/StringSplitTest.cpp create mode 100644 src/tests/kits/support/bstring/StringSplitTest.h diff --git a/src/kits/support/String.cpp b/src/kits/support/String.cpp index 3145c63321..9643e3c5ea 100644 --- a/src/kits/support/String.cpp +++ b/src/kits/support/String.cpp @@ -525,7 +525,7 @@ BString::Split(const char* separator, bool noEmptyStrings, if (endIndex == length) break; - index = endIndex + 1; + index = endIndex + separatorLength; } return true; diff --git a/src/tests/kits/support/Jamfile b/src/tests/kits/support/Jamfile index 626d35a6ef..624018e224 100644 --- a/src/tests/kits/support/Jamfile +++ b/src/tests/kits/support/Jamfile @@ -74,6 +74,7 @@ UnitTestLib libsupporttest.so StringCharAccessTest.cpp StringSearchTest.cpp StringReplaceTest.cpp + StringSplitTest.cpp #BBlockCache BlockCacheTest.cpp diff --git a/src/tests/kits/support/bstring/StringSplitTest.cpp b/src/tests/kits/support/bstring/StringSplitTest.cpp new file mode 100644 index 0000000000..2edd287a49 --- /dev/null +++ b/src/tests/kits/support/bstring/StringSplitTest.cpp @@ -0,0 +1,60 @@ +#include "StringSplitTest.h" +#include "cppunit/TestCaller.h" +#include +#include + +StringSplitTest::StringSplitTest(std::string name) : + BTestCase(name) +{ +} + + + +StringSplitTest::~StringSplitTest() +{ +} + + +void +StringSplitTest::PerformTest(void) +{ + BString *str1; + + NextSubTest(); + BStringList stringList1; + str1 = new BString("test::string"); + str1->Split(":", true, stringList1); + CPPUNIT_ASSERT(stringList1.CountStrings() == 2); + delete str1; + + NextSubTest(); + BStringList stringList2; + str1 = new BString("test::string"); + str1->Split("::", true, stringList2); + CPPUNIT_ASSERT(stringList2.CountStrings() == 2); + delete str1; + + NextSubTest(); + BStringList stringList3; + str1 = new BString("test::string"); + str1->Split("::", false, stringList3); + CPPUNIT_ASSERT(stringList3.CountStrings() == 2); + delete str1; + + NextSubTest(); + BStringList stringList4; + str1 = new BString("test::string"); + str1->Split(":", false, stringList4); + CPPUNIT_ASSERT(stringList4.CountStrings() == 3); + delete str1; + +} + + +CppUnit::Test *StringSplitTest::suite(void) +{ + typedef CppUnit::TestCaller + StringSplitTestCaller; + + return(new StringSplitTestCaller("BString::Split Test", &StringSplitTest::PerformTest)); +} diff --git a/src/tests/kits/support/bstring/StringSplitTest.h b/src/tests/kits/support/bstring/StringSplitTest.h new file mode 100644 index 0000000000..f498a7a98e --- /dev/null +++ b/src/tests/kits/support/bstring/StringSplitTest.h @@ -0,0 +1,22 @@ +#ifndef StringSplitTest_H +#define StringSplitTest_H + +#include "TestCase.h" +#include + + +class StringSplitTest : public BTestCase +{ + +private: + +protected: + +public: + static Test *suite(void); + void PerformTest(void); + StringSplitTest(std::string name = ""); + virtual ~StringSplitTest(); + }; + +#endif diff --git a/src/tests/kits/support/bstring/StringTest.cpp b/src/tests/kits/support/bstring/StringTest.cpp index 52452b4408..8d3222306d 100644 --- a/src/tests/kits/support/bstring/StringTest.cpp +++ b/src/tests/kits/support/bstring/StringTest.cpp @@ -16,6 +16,7 @@ #include "StringCharAccessTest.h" #include "StringReplaceTest.h" #include "StringSearchTest.h" +#include "StringSplitTest.h" CppUnit::Test *StringTestSuite() { @@ -36,6 +37,7 @@ CppUnit::Test *StringTestSuite() testSuite->addTest(StringCharAccessTest::suite()); testSuite->addTest(StringReplaceTest::suite()); testSuite->addTest(StringSearchTest::suite()); + testSuite->addTest(StringSplitTest::suite()); return(testSuite); }