From 9f83f86cbede50d54142610d507a01ae310f11aa Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Tue, 19 Nov 2002 08:24:13 +0000 Subject: [PATCH] some more tests which our implementation passes and r5 does not :) git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2015 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kits/support/bstring/StringAccessTest.cpp | 34 ++++++++++++++++++- .../kits/support/bstring/StringEscapeTest.cpp | 34 +++++++++++-------- .../kits/support/bstring/StringRemoveTest.cpp | 19 ++++++----- 3 files changed, 63 insertions(+), 24 deletions(-) diff --git a/src/tests/kits/support/bstring/StringAccessTest.cpp b/src/tests/kits/support/bstring/StringAccessTest.cpp index 9c64c36401..85cbf2828d 100644 --- a/src/tests/kits/support/bstring/StringAccessTest.cpp +++ b/src/tests/kits/support/bstring/StringAccessTest.cpp @@ -37,13 +37,45 @@ StringAccessTest::PerformTest(void) BString string3(s); CPPUNIT_ASSERT(string3.CountChars() == 2); CPPUNIT_ASSERT(string3.Length() == strlen(string3.String())); - + + //An empty string NextSubTest(); BString empty; CPPUNIT_ASSERT(strcmp(empty.String(), "") == 0); CPPUNIT_ASSERT(empty.Length() == 0); CPPUNIT_ASSERT(empty.CountChars() == 0); + //Truncate the string at end so we are left with an invalid + //UTF8 character + NextSubTest(); + BString invalid("some text with utf8 characters"B_UTF8_ELLIPSIS); + invalid.Truncate(invalid.Length() -1); + CPPUNIT_ASSERT(invalid.CountChars() == 31); + + //LockBuffer(int32) and UnlockBuffer(int32) + NextSubTest(); + BString locked("a string"); + char *ptrstr = locked.LockBuffer(20); + CPPUNIT_ASSERT(strcmp(ptrstr, "a string") == 0); + strcat(ptrstr, " to be locked"); + locked.UnlockBuffer(); + CPPUNIT_ASSERT(strcmp(ptrstr, "a string to be locked") == 0); + + NextSubTest(); + BString locked2("some text"); + char *ptr = locked2.LockBuffer(3); + CPPUNIT_ASSERT(strcmp(ptr, "some text") == 0); + locked2.UnlockBuffer(4); + CPPUNIT_ASSERT(strcmp(locked2.String(), "some") == 0); + CPPUNIT_ASSERT(locked2.Length() == 4); + + NextSubTest(); + BString emptylocked; + ptr = emptylocked.LockBuffer(10); + CPPUNIT_ASSERT(strcmp(ptr, "") == 0); + strcat(ptr, "pippo"); + emptylocked.UnlockBuffer(); + CPPUNIT_ASSERT(strcmp(emptylocked.String(), "pippo") == 0); } diff --git a/src/tests/kits/support/bstring/StringEscapeTest.cpp b/src/tests/kits/support/bstring/StringEscapeTest.cpp index 88f69cff1e..8be4066fba 100644 --- a/src/tests/kits/support/bstring/StringEscapeTest.cpp +++ b/src/tests/kits/support/bstring/StringEscapeTest.cpp @@ -46,14 +46,16 @@ StringEscapeTest::PerformTest(void) string1->CharacterEscape("newstring", "esi", '0'); CPPUNIT_ASSERT(strcmp(string1->String(), "n0ew0str0ing") == 0); delete string1; - + +#ifndef TEST_R5 //assigned string is NULL - //commented out as it crashes r5 implementation - //NextSubTest(); - //string1 = new BString("something"); - //string1->CharacterEscape((char*)NULL, "ei", '-'); - //CPPUNIT_ASSERT(strcmp(string1->String(), "") == 0); - //delete string1; + //it crashes r5 implementation, but not ours :) + NextSubTest(); + string1 = new BString("something"); + string1->CharacterEscape((char*)NULL, "ei", '-'); + CPPUNIT_ASSERT(strcmp(string1->String(), "") == 0); + delete string1; +#endif //String was empty NextSubTest(); @@ -96,15 +98,17 @@ StringEscapeTest::PerformTest(void) string1->CharacterDeescape("new/str/ing", '/'); CPPUNIT_ASSERT(strcmp(string1->String(), "newstring") == 0); delete string1; - + +#ifndef TEST_R5 //assigned string is empty - //commented out as it crashes r5 implementation - //NextSubTest(); - //string1 = new BString("pippo"); - //string1->CharacterDeescape((char*)NULL, '/'); - //CPPUNIT_ASSERT(strcmp(string1->String(), "") == 0); - //delete string1; - + //it crashes r5 implementation, but not ours :) + NextSubTest(); + string1 = new BString("pippo"); + string1->CharacterDeescape((char*)NULL, '/'); + CPPUNIT_ASSERT(strcmp(string1->String(), "") == 0); + delete string1; +#endif + //String doesn't contain character to escape NextSubTest(); string1 = new BString("Old"); diff --git a/src/tests/kits/support/bstring/StringRemoveTest.cpp b/src/tests/kits/support/bstring/StringRemoveTest.cpp index 1a1ac36722..87925e1306 100644 --- a/src/tests/kits/support/bstring/StringRemoveTest.cpp +++ b/src/tests/kits/support/bstring/StringRemoveTest.cpp @@ -36,15 +36,18 @@ StringRemoveTest::PerformTest(void) CPPUNIT_ASSERT(strcmp(string1->String(), "This is a long") == 0); CPPUNIT_ASSERT(string1->Length() == 14); delete string1; - + +#ifndef TEST_R5 //new length is < 0 - //commented out as it crashes r5 implementation - //NextSubTest(); - //string1 = new BString("This is a long string"); - //string1->Truncate(-3); - //CPPUNIT_ASSERT(strcmp(string1->String(), "This is a long string") == 0); - //CPPUNIT_ASSERT(string1->Length() == 21); - //delete string1; + //it crashes r5 implementation, but ours works fine here, + //in this case, we ignore the truncation + NextSubTest(); + string1 = new BString("This is a long string"); + string1->Truncate(-3); + CPPUNIT_ASSERT(strcmp(string1->String(), "This is a long string") == 0); + CPPUNIT_ASSERT(string1->Length() == 21); + delete string1; +#endif //new length is > old length NextSubTest();