X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c2c87924e7e3906b8cf1f93ebbd362eab17f6857..95691abd435bd311c72d5fd80f0da5b7f6ea53d2:/tests/strings/strings.cpp diff --git a/tests/strings/strings.cpp b/tests/strings/strings.cpp index b83b8f18c3..0967c6249a 100644 --- a/tests/strings/strings.cpp +++ b/tests/strings/strings.cpp @@ -36,6 +36,7 @@ private: CPPUNIT_TEST( PChar ); CPPUNIT_TEST( Format ); CPPUNIT_TEST( Constructors ); + CPPUNIT_TEST( StaticConstructors ); CPPUNIT_TEST( Extraction ); CPPUNIT_TEST( Trim ); CPPUNIT_TEST( Find ); @@ -52,7 +53,7 @@ private: CPPUNIT_TEST( ToULongLong ); #endif // wxLongLong_t CPPUNIT_TEST( ToDouble ); - CPPUNIT_TEST( WriteBuf ); + CPPUNIT_TEST( StringBuf ); CPPUNIT_TEST( UTF8Buf ); CPPUNIT_TEST( CStrDataTernaryOperator ); CPPUNIT_TEST( CStrDataOperators ); @@ -64,6 +65,7 @@ private: void PChar(); void Format(); void Constructors(); + void StaticConstructors(); void Extraction(); void Trim(); void Find(); @@ -80,7 +82,7 @@ private: void ToULongLong(); #endif // wxLongLong_t void ToDouble(); - void WriteBuf(); + void StringBuf(); void UTF8Buf(); void CStrDataTernaryOperator(); void DoCStrDataTernaryOperator(bool cond); @@ -159,25 +161,49 @@ void StringTestCase::Format() void StringTestCase::Constructors() { - #define TEST_CTOR(args, res) \ - { \ - wxString s args ; \ - CPPUNIT_ASSERT( s == res ); \ - } + CPPUNIT_ASSERT_EQUAL( "", wxString('Z', 0) ); + CPPUNIT_ASSERT_EQUAL( "Z", wxString('Z') ); + CPPUNIT_ASSERT_EQUAL( "ZZZZ", wxString('Z', 4) ); + CPPUNIT_ASSERT_EQUAL( "Hell", wxString("Hello", 4) ); + CPPUNIT_ASSERT_EQUAL( "Hello", wxString("Hello", 5) ); - TEST_CTOR((_T('Z'), 4), _T("ZZZZ")); - TEST_CTOR((_T("Hello"), 4), _T("Hell")); - TEST_CTOR((_T("Hello"), 5), _T("Hello")); +#if wxUSE_UNICODE + CPPUNIT_ASSERT_EQUAL( L"", wxString(L'Z', 0) ); + CPPUNIT_ASSERT_EQUAL( L"Z", wxString(L'Z') ); + CPPUNIT_ASSERT_EQUAL( L"ZZZZ", wxString(L'Z', 4) ); + CPPUNIT_ASSERT_EQUAL( L"Hell", wxString(L"Hello", 4) ); + CPPUNIT_ASSERT_EQUAL( L"Hello", wxString(L"Hello", 5) ); +#endif // wxUSE_UNICODE - static const wxChar *s = _T("?really!"); - const wxChar *start = wxStrchr(s, _T('r')); - const wxChar *end = wxStrchr(s, _T('!')); - TEST_CTOR((start, end), _T("really")); + static const char *s = "?really!"; + const char *start = wxStrchr(s, 'r'); + const char *end = wxStrchr(s, '!'); + CPPUNIT_ASSERT_EQUAL( "really", wxString(start, end) ); // test if creating string from NULL C pointer works: - TEST_CTOR(((char*)NULL), ""); + CPPUNIT_ASSERT_EQUAL( "", wxString((const char *)NULL) ); } +void StringTestCase::StaticConstructors() +{ + CPPUNIT_ASSERT_EQUAL( "", wxString::FromAscii("") ); + CPPUNIT_ASSERT_EQUAL( "", wxString::FromAscii("Hello", 0) ); + CPPUNIT_ASSERT_EQUAL( "Hell", wxString::FromAscii("Hello", 4) ); + CPPUNIT_ASSERT_EQUAL( "Hello", wxString::FromAscii("Hello", 5) ); + CPPUNIT_ASSERT_EQUAL( "Hello", wxString::FromAscii("Hello") ); + + // FIXME: this doesn't work currently but should! + //CPPUNIT_ASSERT_EQUAL( 1, wxString::FromAscii("", 1).length() ); + + + CPPUNIT_ASSERT_EQUAL( "", wxString::FromUTF8("") ); + CPPUNIT_ASSERT_EQUAL( "", wxString::FromUTF8("Hello", 0) ); + CPPUNIT_ASSERT_EQUAL( "Hell", wxString::FromUTF8("Hello", 4) ); + CPPUNIT_ASSERT_EQUAL( "Hello", wxString::FromUTF8("Hello", 5) ); + CPPUNIT_ASSERT_EQUAL( "Hello", wxString::FromUTF8("Hello") ); + + //CPPUNIT_ASSERT_EQUAL( 1, wxString::FromUTF8("", 1).length() ); +} void StringTestCase::Extraction() { @@ -204,7 +230,7 @@ void StringTestCase::Extraction() #define TEST_STARTS_WITH(prefix, correct_rest, result) \ CPPUNIT_ASSERT_EQUAL(result, s.StartsWith(prefix, &rest)); \ if ( result ) \ - WX_ASSERT_STR_EQUAL(correct_rest, rest) + CPPUNIT_ASSERT_EQUAL(correct_rest, rest) TEST_STARTS_WITH( _T("Hello"), _T(", world!"), true ); TEST_STARTS_WITH( _T("Hello, "), _T("world!"), true ); @@ -218,12 +244,12 @@ void StringTestCase::Extraction() rest = "Hello world"; CPPUNIT_ASSERT( rest.StartsWith("Hello ", &rest) ); - WX_ASSERT_STR_EQUAL("world", rest); + CPPUNIT_ASSERT_EQUAL("world", rest); #define TEST_ENDS_WITH(suffix, correct_rest, result) \ CPPUNIT_ASSERT_EQUAL(result, s.EndsWith(suffix, &rest)); \ if ( result ) \ - WX_ASSERT_STR_EQUAL(correct_rest, rest) + CPPUNIT_ASSERT_EQUAL(correct_rest, rest) TEST_ENDS_WITH( _T(""), _T("Hello, world!"), true ); TEST_ENDS_WITH( _T("!"), _T("Hello, world"), true ); @@ -274,7 +300,7 @@ void StringTestCase::Replace() { \ wxString s = original; \ s.replace( pos , len , replacement ); \ - WX_ASSERT_STR_EQUAL( result, s ); \ + CPPUNIT_ASSERT_EQUAL( result, s ); \ } TEST_REPLACE( _T("012-AWORD-XYZ"), 4, 5, _T("BWORD"), _T("012-BWORD-XYZ") ); @@ -283,16 +309,16 @@ void StringTestCase::Replace() TEST_REPLACE( _T("foobar"), 3, 0, _T("-"), _T("foo-bar") ); TEST_REPLACE( _T("barfoo"), 0, 6, _T("foobar"), _T("foobar") ); - + #define TEST_NULLCHARREPLACE( o , olen, pos , len , replacement , r, rlen ) \ { \ wxString s(o,olen); \ s.replace( pos , len , replacement ); \ CPPUNIT_ASSERT( s == wxString(r,rlen) ); \ } - - TEST_NULLCHARREPLACE( _T("null\0char"), 9, 5, 1, _T("d"), - _T("null\0dhar"), 9 ); + + TEST_NULLCHARREPLACE( _T("null\0char"), 9, 5, 1, _T("d"), + _T("null\0dhar"), 9 ); #define TEST_WXREPLACE( o , olen, olds, news, all, r, rlen ) \ { \ @@ -300,12 +326,14 @@ void StringTestCase::Replace() s.Replace( olds, news, all ); \ CPPUNIT_ASSERT( s == wxString(r,rlen) ); \ } - + TEST_WXREPLACE( _T("null\0char"), 9, _T("c"), _T("de"), true, - _T("null\0dehar"), 10 ); + _T("null\0dehar"), 10 ); TEST_WXREPLACE( _T("null\0dehar"), 10, _T("de"), _T("c"), true, - _T("null\0char"), 9 ); + _T("null\0char"), 9 ); + + TEST_WXREPLACE( "life", 4, "f", "", false, "lie", 3 ); #undef TEST_WXREPLACE #undef TEST_NULLCHARREPLACE @@ -340,30 +368,26 @@ void StringTestCase::CaseChanges() wxString s1l(s1); s1u.MakeUpper(); s1l.MakeLower(); + + CPPUNIT_ASSERT_EQUAL( _T("HELLO!"), s1u ); + CPPUNIT_ASSERT_EQUAL( _T("hello!"), s1l ); + wxString s2u, s2l; s2u.MakeUpper(); s2l.MakeLower(); - CPPUNIT_ASSERT( s1u == _T("HELLO!") ); - CPPUNIT_ASSERT( s1l == _T("hello!") ); - CPPUNIT_ASSERT( s2u == wxEmptyString ); - CPPUNIT_ASSERT( s2l == wxEmptyString ); + CPPUNIT_ASSERT_EQUAL( "", s2u ); + CPPUNIT_ASSERT_EQUAL( "", s2l ); -#if !wxUSE_UNICODE - wxLocale locRu(wxLANGUAGE_RUSSIAN, 0 /* flags */); - if ( locRu.IsOk() ) - { - // try upper casing 8bit strings - const wchar_t capital_ya[] = { 0x42f, 0 }, - small_ya[] = { 0x44f, 0 }; - wxString sUpper(wxConvLibc.cWC2MB(capital_ya)), - sLower(wxConvLibc.cWC2MB(small_ya)); + wxString s3("good bye"); + CPPUNIT_ASSERT_EQUAL( "Good bye", s3.Capitalize() ); + s3.MakeCapitalized(); + CPPUNIT_ASSERT_EQUAL( "Good bye", s3 ); - CPPUNIT_ASSERT( sUpper.Lower() == sLower ); - CPPUNIT_ASSERT( sLower.Upper() == sUpper ); - } -#endif // !wxUSE_UNICODE + CPPUNIT_ASSERT_EQUAL( "Abc", wxString("ABC").Capitalize() ); + + CPPUNIT_ASSERT_EQUAL( "", wxString().Capitalize() ); } void StringTestCase::Compare() @@ -651,31 +675,50 @@ void StringTestCase::ToDouble() } } -void StringTestCase::WriteBuf() +void StringTestCase::StringBuf() { + // check that buffer can be used to write into the string wxString s; wxStrcpy(wxStringBuffer(s, 10), _T("foo")); - CPPUNIT_ASSERT(s[0u] == _T('f') ); + CPPUNIT_ASSERT_EQUAL(3, s.length()); CPPUNIT_ASSERT(_T('f') == s[0u]); CPPUNIT_ASSERT(_T('o') == s[1]); CPPUNIT_ASSERT(_T('o') == s[2]); - WX_ASSERT_SIZET_EQUAL(3, s.length()); + { + // also check that the buffer initially contains the original string + // contents + wxStringBuffer buf(s, 10); + CPPUNIT_ASSERT_EQUAL( _T('f'), buf[0] ); + CPPUNIT_ASSERT_EQUAL( _T('o'), buf[1] ); + CPPUNIT_ASSERT_EQUAL( _T('o'), buf[2] ); + CPPUNIT_ASSERT_EQUAL( _T('\0'), buf[3] ); + } { wxStringBufferLength buf(s, 10); + CPPUNIT_ASSERT_EQUAL( _T('f'), buf[0] ); + CPPUNIT_ASSERT_EQUAL( _T('o'), buf[1] ); + CPPUNIT_ASSERT_EQUAL( _T('o'), buf[2] ); + CPPUNIT_ASSERT_EQUAL( _T('\0'), buf[3] ); + + // and check that it can be used to write only the specified number of + // characters to the string wxStrcpy(buf, _T("barrbaz")); buf.SetLength(4); } + CPPUNIT_ASSERT_EQUAL(4, s.length()); CPPUNIT_ASSERT(_T('b') == s[0u]); CPPUNIT_ASSERT(_T('a') == s[1]); CPPUNIT_ASSERT(_T('r') == s[2]); CPPUNIT_ASSERT(_T('r') == s[3]); - WX_ASSERT_SIZET_EQUAL(4, s.length()); - CPPUNIT_ASSERT_EQUAL( 0, wxStrcmp(_T("barr"), s) ); + // check that creating buffer of length smaller than string works, i.e. at + // least doesn't crash (it would if we naively copied the entire original + // string contents in the buffer) + *wxStringBuffer(s, 1) = '!'; } void StringTestCase::UTF8Buf()