Skip to content

Commit

Permalink
BString: fix Split() for multiple characters separators...
Browse files Browse the repository at this point in the history
 as suggested by Janus in #14045. Thanks!
* add a unit test for BString::Split().
  • Loading branch information
korli committed Mar 22, 2018
1 parent 7cf48d4 commit a25f726
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/kits/support/String.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,7 @@ BString::Split(const char* separator, bool noEmptyStrings,
if (endIndex == length)
break;

index = endIndex + 1;
index = endIndex + separatorLength;
}

return true;
Expand Down
1 change: 1 addition & 0 deletions src/tests/kits/support/Jamfile
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ UnitTestLib libsupporttest.so
StringCharAccessTest.cpp
StringSearchTest.cpp
StringReplaceTest.cpp
StringSplitTest.cpp

#BBlockCache
BlockCacheTest.cpp
Expand Down
60 changes: 60 additions & 0 deletions src/tests/kits/support/bstring/StringSplitTest.cpp
Original file line number Diff line number Diff line change
@@ -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));
}
22 changes: 22 additions & 0 deletions src/tests/kits/support/bstring/StringSplitTest.h
Original file line number Diff line number Diff line change
@@ -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
2 changes: 2 additions & 0 deletions src/tests/kits/support/bstring/StringTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include "StringCharAccessTest.h"
#include "StringReplaceTest.h"
#include "StringSearchTest.h"
#include "StringSplitTest.h"

CppUnit::Test *StringTestSuite()
{
Expand All @@ -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);
}

0 comments on commit a25f726

Please sign in to comment.