X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/478cbb089e173d035957fa9ba35b439f798fb59c..c71396b42d0233b9358c841b96b69fb4b8cc5c44:/tests/strings/strings.cpp diff --git a/tests/strings/strings.cpp b/tests/strings/strings.cpp index 94d9d7f113..e56d7e9a25 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 ); @@ -53,6 +54,7 @@ private: #endif // wxLongLong_t CPPUNIT_TEST( ToDouble ); CPPUNIT_TEST( WriteBuf ); + CPPUNIT_TEST( UTF8Buf ); CPPUNIT_TEST( CStrDataTernaryOperator ); CPPUNIT_TEST( CStrDataOperators ); CPPUNIT_TEST( CStrDataImplicitConversion ); @@ -63,6 +65,7 @@ private: void PChar(); void Format(); void Constructors(); + void StaticConstructors(); void Extraction(); void Trim(); void Find(); @@ -80,6 +83,7 @@ private: #endif // wxLongLong_t void ToDouble(); void WriteBuf(); + void UTF8Buf(); void CStrDataTernaryOperator(); void DoCStrDataTernaryOperator(bool cond); void CStrDataOperators(); @@ -157,22 +161,49 @@ void StringTestCase::Format() void StringTestCase::Constructors() { - #define TEST_CTOR(args, res) \ - { \ - wxString s args ; \ - CPPUNIT_ASSERT( s == res ); \ - } + WX_ASSERT_STR_EQUAL( "", wxString('Z', 0) ); + WX_ASSERT_STR_EQUAL( "Z", wxString('Z') ); + WX_ASSERT_STR_EQUAL( "ZZZZ", wxString('Z', 4) ); + WX_ASSERT_STR_EQUAL( "Hell", wxString("Hello", 4) ); + WX_ASSERT_STR_EQUAL( "Hello", wxString("Hello", 5) ); + +#if wxUSE_UNICODE + WX_ASSERT_STR_EQUAL( L"", wxString(L'Z', 0) ); + WX_ASSERT_STR_EQUAL( L"Z", wxString(L'Z') ); + WX_ASSERT_STR_EQUAL( L"ZZZZ", wxString(L'Z', 4) ); + WX_ASSERT_STR_EQUAL( L"Hell", wxString(L"Hello", 4) ); + WX_ASSERT_STR_EQUAL( L"Hello", wxString(L"Hello", 5) ); +#endif // wxUSE_UNICODE - TEST_CTOR((_T('Z'), 4), _T("ZZZZ")); - TEST_CTOR((_T("Hello"), 4), _T("Hell")); - TEST_CTOR((_T("Hello"), 5), _T("Hello")); + static const char *s = "?really!"; + const char *start = wxStrchr(s, 'r'); + const char *end = wxStrchr(s, '!'); + WX_ASSERT_STR_EQUAL( "really", wxString(start, end) ); - 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")); + // test if creating string from NULL C pointer works: + WX_ASSERT_STR_EQUAL( "", wxString((const char *)NULL) ); } +void StringTestCase::StaticConstructors() +{ + WX_ASSERT_STR_EQUAL( "", wxString::FromAscii("") ); + WX_ASSERT_STR_EQUAL( "", wxString::FromAscii("Hello", 0) ); + WX_ASSERT_STR_EQUAL( "Hell", wxString::FromAscii("Hello", 4) ); + WX_ASSERT_STR_EQUAL( "Hello", wxString::FromAscii("Hello", 5) ); + WX_ASSERT_STR_EQUAL( "Hello", wxString::FromAscii("Hello") ); + + // FIXME: this doesn't work currently but should! + //WX_ASSERT_SIZET_EQUAL( 1, wxString::FromAscii("", 1).length() ); + + + WX_ASSERT_STR_EQUAL( "", wxString::FromUTF8("") ); + WX_ASSERT_STR_EQUAL( "", wxString::FromUTF8("Hello", 0) ); + WX_ASSERT_STR_EQUAL( "Hell", wxString::FromUTF8("Hello", 4) ); + WX_ASSERT_STR_EQUAL( "Hello", wxString::FromUTF8("Hello", 5) ); + WX_ASSERT_STR_EQUAL( "Hello", wxString::FromUTF8("Hello") ); + + //WX_ASSERT_SIZET_EQUAL( 1, wxString::FromUTF8("", 1).length() ); +} void StringTestCase::Extraction() { @@ -199,7 +230,7 @@ void StringTestCase::Extraction() #define TEST_STARTS_WITH(prefix, correct_rest, result) \ CPPUNIT_ASSERT_EQUAL(result, s.StartsWith(prefix, &rest)); \ if ( result ) \ - CPPUNIT_ASSERT_EQUAL(wxString(correct_rest), rest) + WX_ASSERT_STR_EQUAL(correct_rest, rest) TEST_STARTS_WITH( _T("Hello"), _T(", world!"), true ); TEST_STARTS_WITH( _T("Hello, "), _T("world!"), true ); @@ -211,10 +242,14 @@ void StringTestCase::Extraction() #undef TEST_STARTS_WITH + rest = "Hello world"; + CPPUNIT_ASSERT( rest.StartsWith("Hello ", &rest) ); + WX_ASSERT_STR_EQUAL("world", rest); + #define TEST_ENDS_WITH(suffix, correct_rest, result) \ CPPUNIT_ASSERT_EQUAL(result, s.EndsWith(suffix, &rest)); \ if ( result ) \ - CPPUNIT_ASSERT_EQUAL(wxString(correct_rest), rest) + WX_ASSERT_STR_EQUAL(correct_rest, rest) TEST_ENDS_WITH( _T(""), _T("Hello, world!"), true ); TEST_ENDS_WITH( _T("!"), _T("Hello, world"), true ); @@ -265,7 +300,7 @@ void StringTestCase::Replace() { \ wxString s = original; \ s.replace( pos , len , replacement ); \ - CPPUNIT_ASSERT( s == result ); \ + WX_ASSERT_STR_EQUAL( result, s ); \ } TEST_REPLACE( _T("012-AWORD-XYZ"), 4, 5, _T("BWORD"), _T("012-BWORD-XYZ") ); @@ -630,7 +665,7 @@ void StringTestCase::ToDouble() // we need to use decimal point, not comma or whatever is its value for the // current locale - wxSetlocale(LC_ALL, _T("C")); + wxSetlocale(LC_ALL, "C"); size_t n; for ( n = 0; n < WXSIZEOF(doubleData); n++ ) @@ -651,7 +686,7 @@ void StringTestCase::WriteBuf() CPPUNIT_ASSERT(_T('f') == s[0u]); CPPUNIT_ASSERT(_T('o') == s[1]); CPPUNIT_ASSERT(_T('o') == s[2]); - CPPUNIT_ASSERT_EQUAL((size_t)3, s.length()); + WX_ASSERT_SIZET_EQUAL(3, s.length()); { @@ -664,11 +699,31 @@ void StringTestCase::WriteBuf() CPPUNIT_ASSERT(_T('a') == s[1]); CPPUNIT_ASSERT(_T('r') == s[2]); CPPUNIT_ASSERT(_T('r') == s[3]); - CPPUNIT_ASSERT_EQUAL((size_t)4, s.length()); + WX_ASSERT_SIZET_EQUAL(4, s.length()); CPPUNIT_ASSERT_EQUAL( 0, wxStrcmp(_T("barr"), s) ); } +void StringTestCase::UTF8Buf() +{ +#if wxUSE_UNICODE + // "czech" in Czech ("cestina"): + static const char *textUTF8 = "\304\215e\305\241tina"; + static const wchar_t textUTF16[] = {0x10D, 0x65, 0x161, 0x74, 0x69, 0x6E, 0x61, 0}; + + wxString s; + wxStrcpy(wxUTF8StringBuffer(s, 9), textUTF8); + CPPUNIT_ASSERT(s == textUTF16); + + { + wxUTF8StringBufferLength buf(s, 20); + wxStrcpy(buf, textUTF8); + buf.SetLength(5); + } + CPPUNIT_ASSERT(s == wxString(textUTF16, 0, 3)); +#endif // wxUSE_UNICODE +} + void StringTestCase::CStrDataTernaryOperator() @@ -733,10 +788,13 @@ void StringTestCase::CStrDataImplicitConversion() wxString s("foo"); CPPUNIT_ASSERT( CheckStrConstWChar(s, s.c_str()) ); - CPPUNIT_ASSERT( CheckStrConstWChar(s, s) ); - CPPUNIT_ASSERT( CheckStrConstChar(s, s.c_str()) ); + + // implicit conversion of wxString is not available in STL build +#if !wxUSE_STL + CPPUNIT_ASSERT( CheckStrConstWChar(s, s) ); CPPUNIT_ASSERT( CheckStrConstChar(s, s) ); +#endif } void StringTestCase::ExplicitConversion()