Unit tests update

This commit is contained in:
Markus Gans 2018-03-10 05:27:55 +01:00
parent c270b39698
commit 16bbda2099
3 changed files with 191 additions and 29 deletions

View File

@ -352,16 +352,19 @@ class FString
FString removeDel() const; FString removeDel() const;
FString removeBackspaces() const; FString removeBackspaces() const;
const FString& overwrite (const FString&, uInt); const FString& overwrite (const FString&, int);
const FString& overwrite (const wchar_t[], uInt); const FString& overwrite (const FString&, uInt = 0);
const FString& overwrite (const wchar_t, uInt); const FString& overwrite (const wchar_t[], int);
const FString& overwrite (const wchar_t[], uInt = 0);
const FString& overwrite (const wchar_t, int);
const FString& overwrite (const wchar_t, uInt = 0);
const FString& remove (uInt, uInt); const FString& remove (uInt, uInt);
bool includes (const FString&); bool includes (const FString&) const;
bool includes (const wchar_t[]); bool includes (const wchar_t[]) const;
bool includes (const char[]); bool includes (const char[]) const;
bool includes (const wchar_t); bool includes (const wchar_t) const;
bool includes (const char); bool includes (const char) const;
private: private:
// Constants // Constants

View File

@ -2408,9 +2408,21 @@ FString FString::removeBackspaces() const
return s; return s;
} }
//----------------------------------------------------------------------
const FString& FString::overwrite (const FString& s, int pos)
{
if ( pos < 0 )
return overwrite (s, 0);
return overwrite (s, uInt(pos));
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
const FString& FString::overwrite (const FString& s, uInt pos) const FString& FString::overwrite (const FString& s, uInt pos)
{ {
if ( pos > length )
pos = length;
if ( length >= (pos + s.length) ) if ( length >= (pos + s.length) )
{ {
std::wcsncpy (string + pos, s.string, s.length); std::wcsncpy (string + pos, s.string, s.length);
@ -2424,11 +2436,23 @@ const FString& FString::overwrite (const FString& s, uInt pos)
return *this; return *this;
} }
//----------------------------------------------------------------------
const FString& FString::overwrite (const wchar_t s[], int pos)
{
if ( pos < 0 )
return overwrite (s, 0);
return overwrite (s, uInt(pos));
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
const FString& FString::overwrite (const wchar_t s[], uInt pos) const FString& FString::overwrite (const wchar_t s[], uInt pos)
{ {
uInt len = uInt(std::wcslen(s)); uInt len = uInt(std::wcslen(s));
if ( pos > length )
pos = length;
if ( length >= (pos + len) ) if ( length >= (pos + len) )
{ {
std::wcsncpy (string + pos, s, len); std::wcsncpy (string + pos, s, len);
@ -2442,12 +2466,29 @@ const FString& FString::overwrite (const wchar_t s[], uInt pos)
return *this; return *this;
} }
//----------------------------------------------------------------------
const FString& FString::overwrite (const wchar_t c, int pos)
{
if ( pos < 0 )
return overwrite (c, 0);
return overwrite (c, uInt(pos));
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
const FString& FString::overwrite (const wchar_t c, uInt pos) const FString& FString::overwrite (const wchar_t c, uInt pos)
{ {
if ( pos > length )
pos = length;
if ( length >= (pos + 1) ) if ( length >= (pos + 1) )
{
string[pos] = c; string[pos] = c;
else
{
wchar_t s[2];
s[0] = c;
s[1] = L'\0';
_insert (length, pos + 1 - length, s);
} }
return *this; return *this;
@ -2456,34 +2497,48 @@ const FString& FString::overwrite (const wchar_t c, uInt pos)
//---------------------------------------------------------------------- //----------------------------------------------------------------------
const FString& FString::remove (uInt pos, uInt len) const FString& FString::remove (uInt pos, uInt len)
{ {
assert ((pos < length) && ((pos + len) <= length)); if ( pos > length )
return *this;
if ( pos + len > length )
len = length - pos;
_remove (pos, len); _remove (pos, len);
return *this; return *this;
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
bool FString::includes (const FString& s) bool FString::includes (const FString& s) const
{ {
if ( ! string ) if ( ! s )
return false;
if ( ! (string && s.string) )
return false; return false;
return ( std::wcsstr(string, s.string) != 0 ); return ( std::wcsstr(string, s.string) != 0 );
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
bool FString::includes (const wchar_t s[]) bool FString::includes (const wchar_t s[]) const
{ {
if ( ! string ) if ( ! s )
return false;
if ( ! ( string && s[0]) )
return false; return false;
return ( std::wcsstr(string, s) != 0 ); return ( std::wcsstr(string, s) != 0 );
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
bool FString::includes (const char s[]) bool FString::includes (const char s[]) const
{ {
if ( ! string ) if ( ! s )
return false;
if ( ! (string && s[0]) )
return false; return false;
bool ret; bool ret;
@ -2498,9 +2553,9 @@ bool FString::includes (const char s[])
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
bool FString::includes (const wchar_t c) bool FString::includes (const wchar_t c) const
{ {
if ( ! string ) if ( ! (string && c) )
return false; return false;
wchar_t s[2]; wchar_t s[2];
@ -2510,9 +2565,9 @@ bool FString::includes (const wchar_t c)
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
bool FString::includes (const char c) bool FString::includes (const char c) const
{ {
if ( ! string ) if ( ! (string && c) )
return false; return false;
wchar_t s[2]; wchar_t s[2];

View File

@ -69,8 +69,8 @@ class FStringTest : public CPPUNIT_NS::TestFixture
void notEqualTest(); void notEqualTest();
void lessEqualTest(); void lessEqualTest();
void lessTest(); void lessTest();
void GreaterEqualTest(); void greaterEqualTest();
void GreaterTest(); void greaterTest();
void streamInsertionTest(); void streamInsertionTest();
void streamExtractionTest(); void streamExtractionTest();
void subscriptOperatorTest(); void subscriptOperatorTest();
@ -83,6 +83,9 @@ class FStringTest : public CPPUNIT_NS::TestFixture
void subStringTest(); void subStringTest();
void insertTest(); void insertTest();
void replaceTest(); void replaceTest();
void overwriteTest();
void removeTest();
void includesTest();
void controlCodesTest(); void controlCodesTest();
private: private:
@ -102,8 +105,8 @@ class FStringTest : public CPPUNIT_NS::TestFixture
CPPUNIT_TEST (notEqualTest); CPPUNIT_TEST (notEqualTest);
CPPUNIT_TEST (lessEqualTest); CPPUNIT_TEST (lessEqualTest);
CPPUNIT_TEST (lessTest); CPPUNIT_TEST (lessTest);
CPPUNIT_TEST (GreaterEqualTest); CPPUNIT_TEST (greaterEqualTest);
CPPUNIT_TEST (GreaterTest); CPPUNIT_TEST (greaterTest);
CPPUNIT_TEST (streamInsertionTest); CPPUNIT_TEST (streamInsertionTest);
CPPUNIT_TEST (streamExtractionTest); CPPUNIT_TEST (streamExtractionTest);
CPPUNIT_TEST (subscriptOperatorTest); CPPUNIT_TEST (subscriptOperatorTest);
@ -116,6 +119,9 @@ class FStringTest : public CPPUNIT_NS::TestFixture
CPPUNIT_TEST (subStringTest); CPPUNIT_TEST (subStringTest);
CPPUNIT_TEST (insertTest); CPPUNIT_TEST (insertTest);
CPPUNIT_TEST (replaceTest); CPPUNIT_TEST (replaceTest);
CPPUNIT_TEST (overwriteTest);
CPPUNIT_TEST (removeTest);
CPPUNIT_TEST (includesTest);
CPPUNIT_TEST (controlCodesTest); CPPUNIT_TEST (controlCodesTest);
// End of test suite definition // End of test suite definition
@ -345,6 +351,9 @@ void FStringTest::assignmentTest()
CPPUNIT_ASSERT ( s1 ); CPPUNIT_ASSERT ( s1 );
CPPUNIT_ASSERT ( s1 == "A character string" ); CPPUNIT_ASSERT ( s1 == "A character string" );
s1.setString(L"A wide character string");
// Set the identical content again.
// Requires no string replacement (new string = string)
s1.setString(L"A wide character string"); s1.setString(L"A wide character string");
CPPUNIT_ASSERT ( s1 ); CPPUNIT_ASSERT ( s1 );
CPPUNIT_ASSERT ( s1 == L"A wide character string" ); CPPUNIT_ASSERT ( s1 == L"A wide character string" );
@ -648,7 +657,7 @@ void FStringTest::lessTest()
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void FStringTest::GreaterEqualTest() void FStringTest::greaterEqualTest()
{ {
const FString one_char('x'); const FString one_char('x');
const char ch = 'x'; const char ch = 'x';
@ -693,7 +702,7 @@ void FStringTest::GreaterEqualTest()
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void FStringTest::GreaterTest() void FStringTest::greaterTest()
{ {
const FString one_char('x'); const FString one_char('x');
const char ch = 'w'; const char ch = 'w';
@ -1440,24 +1449,119 @@ void FStringTest::replaceTest()
CPPUNIT_ASSERT ( s.replace(from3, empty) == "ABC" ); CPPUNIT_ASSERT ( s.replace(from3, empty) == "ABC" );
CPPUNIT_ASSERT ( s.replace(from5, to5) == "ABC" ); CPPUNIT_ASSERT ( s.replace(from5, to5) == "ABC" );
CPPUNIT_ASSERT ( s.replace(empty, to1) == "ABC" ); CPPUNIT_ASSERT ( s.replace(empty, to1) == "ABC" );
CPPUNIT_ASSERT ( s.replace(from6, empty) == "ABC" );
empty = ""; empty = "";
CPPUNIT_ASSERT ( s.replace(from1, empty) == "ABC" ); CPPUNIT_ASSERT ( s.replace(from1, empty) == "ABC" );
CPPUNIT_ASSERT ( s.replace(from3, empty) == "ABC" ); CPPUNIT_ASSERT ( s.replace(from3, empty) == "ABC" );
CPPUNIT_ASSERT ( s.replace(from5, to5) == "ABC" ); CPPUNIT_ASSERT ( s.replace(from5, to5) == "ABC" );
CPPUNIT_ASSERT ( s.replace(empty, to1) == "ABC" ); CPPUNIT_ASSERT ( s.replace(empty, to1) == "ABC" );
CPPUNIT_ASSERT ( s.replace(from6, empty) == "ABC" );
s.clear(); s.clear();
CPPUNIT_ASSERT ( s.replace(from1, to1).isNull() ); CPPUNIT_ASSERT ( s.replace(from1, to1).isNull() );
CPPUNIT_ASSERT ( s.replace(from1, to1).isEmpty() ); CPPUNIT_ASSERT ( s.replace(from1, to1).isEmpty() );
CPPUNIT_ASSERT ( s.replace(from6, to1).isNull() ); CPPUNIT_ASSERT ( s.replace(from6, to1).isNull() );
CPPUNIT_ASSERT ( s.replace(from6, to1).isEmpty() ); CPPUNIT_ASSERT ( s.replace(from6, to1).isEmpty() );
CPPUNIT_ASSERT ( s.replace(from5, to5).isNull() ); CPPUNIT_ASSERT ( s.replace(from5, to5).isNull() );
CPPUNIT_ASSERT ( s.replace(from5, to5).isEmpty() ); CPPUNIT_ASSERT ( s.replace(from5, to5).isEmpty() );
CPPUNIT_ASSERT ( s.replace(from7, to7).isNull() ); CPPUNIT_ASSERT ( s.replace(from7, to7).isNull() );
CPPUNIT_ASSERT ( s.replace(from7, to7).isEmpty() ); CPPUNIT_ASSERT ( s.replace(from7, to7).isEmpty() );
} }
//----------------------------------------------------------------------
void FStringTest::overwriteTest()
{
// FString
FString str = "abcdefghijklm";
CPPUNIT_ASSERT ( str.overwrite("+++++++", 3) == "abc+++++++klm" );
CPPUNIT_ASSERT ( str.overwrite(".............") == "............." );
CPPUNIT_ASSERT ( str.overwrite(",,,,,,,,,,,,,,,") == ",,,,,,,,,,,,,,," );
str = "abc";
CPPUNIT_ASSERT ( str.overwrite("+++++", 99) == "abc+++++" );
str = "abc";
CPPUNIT_ASSERT ( str.overwrite("+++", -5) == "+++" );
// Wide string
str = "abcdefghijklm";
CPPUNIT_ASSERT ( str.overwrite(L"+++++++", 3) == "abc+++++++klm" );
CPPUNIT_ASSERT ( str.overwrite(L".............") == "............." );
CPPUNIT_ASSERT ( str.overwrite(L",,,,,,,,,,,,,,,") == ",,,,,,,,,,,,,,," );
str = "abc";
CPPUNIT_ASSERT ( str.overwrite(L"+++++", 99) == "abc+++++" );
str = "abc";
CPPUNIT_ASSERT ( str.overwrite(L"+++", -5) == "+++" );
// Wide char
str = "abcdefghijklm";
CPPUNIT_ASSERT ( str.overwrite(L'+', 3) == "abc+efghijklm" );
CPPUNIT_ASSERT ( str.overwrite(L'.') == ".bc+efghijklm" );
CPPUNIT_ASSERT ( str.overwrite(L',', 12) == ".bc+efghijkl," );
CPPUNIT_ASSERT ( str.overwrite(L'.', 13) == ".bc+efghijkl,." );
str = "abc";
CPPUNIT_ASSERT ( str.overwrite(L'+', 99) == "abc+" );
str = "abc";
CPPUNIT_ASSERT ( str.overwrite(L'+', -5) == "+bc" );
}
//----------------------------------------------------------------------
void FStringTest::removeTest()
{
FString str = "ABCDE";
CPPUNIT_ASSERT ( str.remove(2, 2) == "ABE" );
CPPUNIT_ASSERT ( str.remove(2, 1) == "AB" );
CPPUNIT_ASSERT ( str.remove(2, 1) == "AB" );
CPPUNIT_ASSERT ( str.remove(2, 5) == "AB" );
str = "ABCDE";
CPPUNIT_ASSERT ( str.remove(2, 99) == "AB" );
CPPUNIT_ASSERT ( str.remove(99, 1) == "AB" );
}
//----------------------------------------------------------------------
void FStringTest::includesTest()
{
const FString str = "Look behind you, a three-headed monkey!";
const FString empty1;
const wchar_t empty2[] = L"";
const char empty3[] = "";
const FString search1 = "you";
const FString search2 = "me";
const wchar_t search3[] = L"you";
const wchar_t search4[] = L"me";
const char search5[] = "you";
const char search6[] = "me";
const wchar_t search7 = L'y';
const wchar_t search8 = L'&';
const char search9 = 'y';
const char search10 = '&';
CPPUNIT_ASSERT ( ! str.includes(empty1) );
CPPUNIT_ASSERT ( str.includes(search1) );
CPPUNIT_ASSERT ( ! str.includes(search2) );
CPPUNIT_ASSERT ( ! empty1.includes(search1) );
CPPUNIT_ASSERT ( ! str.includes(empty2) );
CPPUNIT_ASSERT ( str.includes(search3) );
CPPUNIT_ASSERT ( ! str.includes(search4) );
CPPUNIT_ASSERT ( ! empty1.includes(search3) );
CPPUNIT_ASSERT ( ! str.includes(empty3) );
CPPUNIT_ASSERT ( str.includes(search5) );
CPPUNIT_ASSERT ( ! str.includes(search6) );
CPPUNIT_ASSERT ( ! empty1.includes(search5) );
CPPUNIT_ASSERT ( ! str.includes(wchar_t(L'\0')) );
CPPUNIT_ASSERT ( str.includes(search7) );
CPPUNIT_ASSERT ( ! str.includes(search8) );
CPPUNIT_ASSERT ( ! empty1.includes(search7) );
CPPUNIT_ASSERT ( ! str.includes(char('\0')) );
CPPUNIT_ASSERT ( str.includes(search9) );
CPPUNIT_ASSERT ( ! str.includes(search10) );
CPPUNIT_ASSERT ( ! empty1.includes(search9) );
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void FStringTest::controlCodesTest() void FStringTest::controlCodesTest()
{ {
@ -1539,8 +1643,8 @@ void FStringTest::controlCodesTest()
CPPUNIT_ASSERT ( cc.replaceControlCodes() == FString(32, L' ') ); CPPUNIT_ASSERT ( cc.replaceControlCodes() == FString(32, L' ') );
cc = "t\b\bTesT\bt"; cc = "t\b\bTes\177Tt";
CPPUNIT_ASSERT ( cc.replaceControlCodes() == "t␈␈TesTt" ); CPPUNIT_ASSERT ( cc.replaceControlCodes() == "t␈␈TesTt" );
} }
// Put the test suite in the registry // Put the test suite in the registry