BString: fix Split() for multiple characters separators...

as suggested by Janus in #14045. Thanks!
* add a unit test for BString::Split().
This commit is contained in:
Jérôme Duval 2018-03-22 21:26:07 +01:00
parent 7cf48d4e51
commit a25f7264b6
5 changed files with 86 additions and 1 deletions

View File

@ -525,7 +525,7 @@ BString::Split(const char* separator, bool noEmptyStrings,
if (endIndex == length)
break;
index = endIndex + 1;
index = endIndex + separatorLength;
}
return true;

View File

@ -74,6 +74,7 @@ UnitTestLib libsupporttest.so
StringCharAccessTest.cpp
StringSearchTest.cpp
StringReplaceTest.cpp
StringSplitTest.cpp
#BBlockCache
BlockCacheTest.cpp

View File

@ -0,0 +1,60 @@
#include "StringSplitTest.h"
#include "cppunit/TestCaller.h"
#include <String.h>
#include <StringList.h>
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<StringSplitTest>
StringSplitTestCaller;
return(new StringSplitTestCaller("BString::Split Test", &StringSplitTest::PerformTest));
}

View File

@ -0,0 +1,22 @@
#ifndef StringSplitTest_H
#define StringSplitTest_H
#include "TestCase.h"
#include <String.h>
class StringSplitTest : public BTestCase
{
private:
protected:
public:
static Test *suite(void);
void PerformTest(void);
StringSplitTest(std::string name = "");
virtual ~StringSplitTest();
};
#endif

View File

@ -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);
}